[
  {
    "path": ".cursor/rules/accordion-accessibility.mdc",
    "content": "---\ndescription: Accordion component accessibility compliance and WAI-ARIA Accordion Pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n\n# Accordion Component Accessibility Standards\n\nEnsures accordion components follow WCAG compliance and WAI-ARIA Accordion Pattern specifications.\n\n<rule>\nname: accordion_accessibility_standards\ndescription: Enforce accordion component accessibility standards and WAI-ARIA Accordion Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n\n- type: enforce\n  conditions:\n\n  # Accordion header button role requirement\n\n  - pattern: \"(?i)<button[^>]_(?:accordion|expand|collapse)[^>]_>\"\n    pattern_negate: \"role=\\\"button\\\"\"\n    message: \"Accordion header buttons should have role='button' (or use native button element which has implicit role).\"\n\n  # Accordion header missing aria-expanded\n\n  - pattern: \"(?i)<button[^>]_(?:accordion|expand|collapse)[^>]_>\"\n    pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n    message: \"Accordion header buttons must have aria-expanded attribute set to 'true' or 'false'.\"\n\n  # Accordion header missing aria-controls\n\n  - pattern: \"(?i)<button[^>]_(?:accordion|expand|collapse)[^>]_>\"\n    pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n    message: \"Accordion header buttons must have aria-controls attribute referencing the ID of the associated panel.\"\n\n  # Heading wrapper missing role\n\n  - pattern: \"(?i)<(div|section)[^>]*(?:accordion.*header|header._accordion)[^>]_>\"\n    pattern_negate: \"role=\\\"heading\\\"\"\n    message: \"Accordion header wrappers should have role='heading' or use native heading elements (h1-h6).\"\n\n  # Heading role missing aria-level\n\n  - pattern: \"(?i)<[^>]_role=\\\"heading\\\"[^>]_>\"\n    pattern_negate: \"aria-level=\\\"[1-6]\\\"\"\n    message: \"Elements with role='heading' must have aria-level attribute set to appropriate level (1-6).\"\n\n  # Panel missing proper identification\n\n  - pattern: \"(?i)<(div|section)[^>]*(?:accordion.*panel|panel._accordion)[^>]_>\"\n    pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n    message: \"Accordion panels must have unique ID attributes for aria-controls reference.\"\n\n  # Panel with region role missing aria-labelledby\n\n  - pattern: \"(?i)<[^>]_role=\\\"region\\\"[^>]_>\"\n    pattern_negate: \"aria-labelledby=\\\"[^\\\"]+\\\"\"\n    message: \"Accordion panels with role='region' must have aria-labelledby referencing the heading element.\"\n\n  # Missing keyboard event handlers\n\n  - pattern: \"(?i)<button[^>]_(?:accordion|expand|collapse)[^>]_>\"\n    pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n    message: \"Accordion header buttons should handle keyboard events (Enter, Space, optionally Arrow keys).\"\n\n  # Missing Escape key support for accordion content\n\n  - pattern: \"(?i)<(div|section)[^>]*(?:accordion.*panel|panel._accordion)[^>]_>\"\n    pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n    message: \"Accordion panels should handle Escape key to close panel and return focus to header.\"\n\n- type: suggest\n  message: |\n  **Accordion Component Accessibility Best Practices:**\n\n  **Required ARIA Attributes:**\n\n  - **role='button':** Set on accordion header elements (or use native button)\n  - **role='heading':** Set on accordion header container with aria-level\n  - **aria-expanded:** 'true' if panel is visible, 'false' if collapsed\n  - **aria-controls:** Reference to the ID of the associated panel content\n  - **aria-level:** Appropriate heading level (1-6) for information architecture\n  - **aria-disabled:** 'true' if panel cannot be collapsed (optional)\n\n  **Optional ARIA Attributes:**\n\n  - **role='region':** On panel content containers (avoid with >6 panels)\n  - **aria-labelledby:** On panels with role='region', referencing the heading element\n\n  **Keyboard Interaction Requirements:**\n\n  - **Enter/Space:** Toggle panel expansion/collapse\n  - **Tab/Shift+Tab:** Move through all focusable elements in page order\n  - **Down/Up Arrow:** (Optional) Navigate between accordion headers\n  - **Home/End:** (Optional) Jump to first/last accordion header\n  - **Escape:** Close open panel and return focus to header button\n\n  **Structure Requirements:**\n\n  - Header button must be the only element inside heading container\n  - Each panel must have unique ID for aria-controls reference\n  - Use native heading elements (h1-h6) when possible instead of role='heading'\n  - Avoid role='region' on panels when many accordions exist (>6 panels)\n\n  **Implementation Patterns:**\n\n  **Single Accordion Item:**\n\n  ```html\n  <div class=\"accordion-item\">\n    <h3\n      role=\"heading\"\n      aria-level=\"3\"\n      id=\"header-1\"\n    >\n      <button\n        aria-expanded=\"false\"\n        aria-controls=\"panel-1\"\n      >\n        Section Title\n      </button>\n    </h3>\n    <div\n      id=\"panel-1\"\n      role=\"region\"\n      aria-labelledby=\"header-1\"\n      hidden\n    >\n      <p>Panel content...</p>\n    </div>\n  </div>\n  ```\n\n  **JavaScript for Accordion with Escape Support:**\n\n  ```javascript\n  function toggleAccordion(button) {\n    const isExpanded = button.getAttribute('aria-expanded') === 'true';\n    const panel = document.getElementById(button.getAttribute('aria-controls'));\n\n    button.setAttribute('aria-expanded', !isExpanded);\n    panel.hidden = isExpanded;\n\n    if (!isExpanded) {\n      // Add escape key listener to panel\n      panel.addEventListener('keydown', handleAccordionEscapeKey);\n    } else {\n      // Remove escape key listener\n      panel.removeEventListener('keydown', handleAccordionEscapeKey);\n    }\n  }\n\n  function handleAccordionEscapeKey(event) {\n    if (event.key === 'Escape') {\n      const panel = event.target.closest('[hidden]');\n      if (panel) {\n        const button = document.querySelector(`[aria-controls=\"${panel.id}\"]`);\n        if (button) {\n          button.setAttribute('aria-expanded', 'false');\n          panel.hidden = true;\n          button.focus(); // Return focus to header\n          panel.removeEventListener('keydown', handleAccordionEscapeKey);\n        }\n      }\n    }\n  }\n  ```\n\n  **Using Native Heading:**\n\n  ```html\n  <div class=\"accordion-item\">\n    <h3 id=\"header-2\">\n      <button\n        aria-expanded=\"false\"\n        aria-controls=\"panel-2\"\n      >\n        Section Title\n      </button>\n    </h3>\n    <div\n      id=\"panel-2\"\n      aria-labelledby=\"header-2\"\n    >\n      <p>Panel content...</p>\n    </div>\n  </div>\n  ```\n\n  **JavaScript Considerations:**\n\n  - Implement Enter and Space key handlers for expansion/collapse\n  - Optionally implement Arrow key navigation between headers\n  - Update aria-expanded state when panels toggle\n  - Consider implementing single-expand vs multi-expand behavior\n  - Use hidden attribute or CSS to show/hide panels (note: CSS visibility property can be animated)\n  - Ensure smooth keyboard navigation flow\n  - Implement Escape key handler to close open panel and return focus to header\n  - Add/remove event listeners when panels open/close to manage Escape key support\n\n  **Accessibility Notes:**\n\n  - Role 'region' helps screen readers understand panel structure\n  - Avoid role='region' proliferation with many simultaneous panels\n  - Button should be direct child of heading element\n  - Consider aria-disabled='true' for panels that cannot be collapsed\n  - Test with screen readers to ensure proper announcement\n\nmetadata:\npriority: high\nversion: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/animation-accessibility.mdc",
    "content": "---\ndescription: Enforce animation accessibility standards per WCAG 2.2.2 Pause Stop Hide, 2.3.1 Three Flashes or Below Threshold, and 2.3.3 Animation from Interactions requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.css, *.scss, *.sass, *.less\nalwaysApply: false\n---\n\n# Animation Accessibility Standards\n\nEnsures animations follow WCAG compliance and provide inclusive motion design for users with different accessibility needs including photosensitivity, motion sickness, and cognitive impairments.\n\n<rule>\nname: animation_accessibility_standards\ndescription: Enforce animation accessibility standards per WCAG 2.2.2 Pause Stop Hide, 2.3.1 Three Flashes or Below Threshold, and 2.3.3 Animation from Interactions requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing prefers-reduced-motion media query for animations\n      - pattern: \"(animation|transition|transform|@keyframes)\"\n        pattern_negate: \"@media\\\\s*\\\\(prefers-reduced-motion:\\\\s*reduce\\\\)\"\n        message: \"Animations should include prefers-reduced-motion: reduce media query to provide safer alternatives for motion-sensitive users.\"\n\n      # Flashing animations exceeding 3Hz frequency\n      - pattern: \"animation.*(?:pulse|flash|blink|flicker)\"\n        pattern_negate: \"animation-duration:\\\\s*[0-9]*\\\\.?[0-9]+s|animation-duration:\\\\s*[0-9]*\\\\.?[0-9]+ms\"\n        message: \"Flashing animations must have duration ensuring frequency is below 3Hz (0.33s) to prevent seizures per WCAG 2.3.1.\"\n\n      # Rapid color transitions that may trigger photosensitivity\n      - pattern: \"transition.*color.*[0-9]*\\\\.?[0-9]+s|transition.*background.*[0-9]*\\\\.?[0-9]+s\"\n        pattern_negate: \"transition.*color.*[0-9]*\\\\.?[0-9]+s.*[0-9]*\\\\.?[0-9]+s|transition.*background.*[0-9]*\\\\.?[0-9]+s.*[0-9]*\\\\.?[0-9]+s\"\n        message: \"Color transitions should be slow and smooth to avoid triggering photosensitivity. Use longer durations and easing functions.\"\n\n      # Large spatial movements without reduced motion alternatives\n      - pattern: \"transform.*translate\\\\([^)]*[0-9]{2,}[^)]*\\\\)|transform.*translate\\\\([^)]*-[0-9]{2,}[^)]*\\\\)\"\n        pattern_negate: \"@media\\\\s*\\\\(prefers-reduced-motion:\\\\s*reduce\\\\)\"\n        message: \"Large spatial movements should have reduced motion alternatives using prefers-reduced-motion media query.\"\n\n      # Parallax effects without user control\n      - pattern: \"(parallax|scroll.*jack|scroll.*hijack)\"\n        pattern_negate: \"(prefers-reduced-motion|user.*control|pause.*animation)\"\n        message: \"Parallax and scroll jacking effects should respect user motion preferences and provide controls to pause/disable.\"\n\n      # Auto-playing animations without pause controls\n      - pattern: \"animation.*infinite|animation.*loop\"\n        pattern_negate: \"(pause.*control|user.*control|prefers-reduced-motion)\"\n        message: \"Looping animations must provide pause controls and respect prefers-reduced-motion preferences.\"\n\n      # Unexpected system-triggered animations\n      - pattern: \"animation.*(?:appear|fade.*in|slide.*in)\"\n        pattern_negate: \"(user.*interaction|click|hover|focus|prefers-reduced-motion)\"\n        message: \"System-triggered animations should be subtle and respect user motion preferences.\"\n\n      # Missing animation alternatives for essential UI changes\n      - pattern: \"(?:loading|spinner|progress|status)\"\n        pattern_negate: \"(animation|transition|@keyframes)\"\n        message: \"Essential UI elements like loading indicators should have appropriate animations to communicate state changes.\"\n\n      # Excessive animation duration that may cause motion sickness\n      - pattern: \"animation-duration:\\\\s*[5-9]\\\\.[0-9]+s|animation-duration:\\\\s*[0-9]{2,}s\"\n        message: \"Long animation durations may cause motion sickness. Consider shorter durations and provide reduced motion alternatives.\"\n\n      # Missing focus indicators for animated interactive elements\n      - pattern: \"(?:button|a|input|select|textarea).*\\\\{[^}]*animation\"\n        pattern_negate: \"(focus|focus-visible|outline|box-shadow)\"\n        message: \"Animated interactive elements must have visible focus indicators for keyboard navigation accessibility.\"\n\n      # Animation without meaningful purpose or context\n      - pattern: \"animation.*(?:bounce|wiggle|shake|rotate)\"\n        pattern_negate: \"(loading|status|feedback|interaction)\"\n        message: \"Animations should serve a meaningful purpose. Avoid decorative animations that may distract or confuse users.\"\n\n      # Missing animation state management\n      - pattern: \"animation.*(?:play|pause|stop)\"\n        pattern_negate: \"(prefers-reduced-motion|user.*control|aria.*live)\"\n        message: \"Animation state changes should be communicated to assistive technology and respect user preferences.\"\n\n  - type: suggest\n    message: |\n      **Animation Accessibility Best Practices:**\n\n      **1. Respect Motion Preferences (WCAG 2.3.3):**\n      ```css\n      /* Default animation */\n      .fade-in {\n        animation: fadeIn 0.3s ease-in-out;\n      }\n\n      /* Reduced motion alternative */\n      @media (prefers-reduced-motion: reduce) {\n        .fade-in {\n          animation: none;\n          opacity: 1;\n        }\n      }\n      ```\n\n      **2. Seizure Prevention (WCAG 2.3.1):**\n      ```css\n      /* Safe flashing animation - below 3Hz threshold */\n      .pulse {\n        animation: pulse 0.4s ease-in-out infinite;\n      }\n\n      /* Reduced motion alternative */\n      @media (prefers-reduced-motion: reduce) {\n        .pulse {\n          animation: none;\n          opacity: 0.8;\n        }\n      }\n      ```\n\n      **3. Motion Sickness Prevention:**\n      ```css\n      /* Gentle, predictable animations */\n      .slide-in {\n        transform: translateX(20px);\n        transition: transform 0.2s ease-out;\n      }\n\n      /* Reduced motion alternative */\n      @media (prefers-reduced-motion: reduce) {\n        .slide-in {\n          transform: none;\n          transition: none;\n          opacity: 1;\n        }\n      }\n      ```\n\n      **4. Essential UI Animations:**\n      ```css\n      /* Loading spinner - essential for user understanding */\n      .loading-spinner {\n        animation: spin 1s linear infinite;\n      }\n\n      /* Keep essential animations even with reduced motion */\n      @media (prefers-reduced-motion: reduce) {\n        .loading-spinner {\n          animation: spin 2s linear infinite; /* Slower but still visible */\n        }\n      }\n      ```\n\n      **5. User Control Implementation:**\n      ```javascript\n      // Animation pause control\n      class AnimationController {\n        constructor() {\n          this.isPaused = false;\n          this.animations = document.querySelectorAll('[data-animation]');\n          this.setupControls();\n        }\n\n        setupControls() {\n          const pauseButton = document.getElementById('pause-animations');\n          if (pauseButton) {\n            pauseButton.addEventListener('click', () => this.togglePause());\n          }\n        }\n\n        togglePause() {\n          this.isPaused = !this.isPaused;\n          this.animations.forEach(animation => {\n            if (this.isPaused) {\n              animation.style.animationPlayState = 'paused';\n            } else {\n              animation.style.animationPlayState = 'running';\n            }\n          });\n        }\n      }\n      ```\n\n      **6. CSS Animation Best Practices:**\n      ```css\n      /* Safe animation defaults */\n      .safe-animation {\n        /* Keep travel distances short */\n        transform: translateY(10px);\n\n        /* Use gentle easing */\n        transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n        /* Respect motion preferences */\n        @media (prefers-reduced-motion: reduce) {\n          transform: none;\n          transition: none;\n        }\n      }\n\n      /* Fade as safe default */\n      .fade-transition {\n        opacity: 0;\n        transition: opacity 0.3s ease-in-out;\n      }\n\n      .fade-transition.visible {\n        opacity: 1;\n      }\n\n      /* Reduced motion alternative */\n      @media (prefers-reduced-motion: reduce) {\n        .fade-transition {\n          transition: none;\n          opacity: 1;\n        }\n      }\n      ```\n\n      **7. JavaScript Animation Control:**\n      ```javascript\n      // Check motion preferences\n      function shouldReduceMotion() {\n        return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      }\n\n      // Safe animation function\n      function safeAnimate(element, animation, options = {}) {\n        if (shouldReduceMotion()) {\n          // Provide alternative experience\n          element.style.opacity = '1';\n          element.style.transform = 'none';\n          return;\n        }\n\n        // Apply animation\n        element.style.animation = animation;\n\n        // Add pause control\n        if (options.looping) {\n          element.addEventListener('click', () => {\n            element.style.animationPlayState =\n              element.style.animationPlayState === 'paused' ? 'running' : 'paused';\n          });\n        }\n      }\n      ```\n\n      **8. HTML Structure for Animation Control:**\n      ```html\n      <!-- Animation control panel -->\n      <div class=\"animation-controls\" role=\"region\" aria-label=\"Animation controls\">\n        <button id=\"pause-animations\" aria-pressed=\"false\">\n          Pause All Animations\n        </button>\n\n        <button id=\"reduce-motion\" aria-pressed=\"false\">\n          Reduce Motion\n        </button>\n      </div>\n\n      <!-- Animated element with controls -->\n      <div class=\"animated-element\"\n           data-animation=\"fade-in\"\n           aria-live=\"polite\">\n        Content that animates\n      </div>\n      ```\n\n      **9. Animation State Management:**\n      ```css\n      /* Animation states */\n      .animated-element {\n        opacity: 0;\n        transform: translateY(20px);\n        transition: all 0.3s ease-out;\n      }\n\n      .animated-element.animate {\n        opacity: 1;\n        transform: translateY(0);\n      }\n\n      .animated-element.paused {\n        animation-play-state: paused;\n      }\n\n      /* Reduced motion states */\n      @media (prefers-reduced-motion: reduce) {\n        .animated-element {\n          opacity: 1;\n          transform: none;\n          transition: none;\n        }\n      }\n      ```\n\n      **10. Testing and Validation:**\n      ```javascript\n      // Test animation accessibility\n      function testAnimationAccessibility() {\n        const issues = [];\n\n        // Check for flashing animations\n        const flashingElements = document.querySelectorAll('[class*=\"flash\"], [class*=\"pulse\"]');\n        flashingElements.forEach(element => {\n          const style = window.getComputedStyle(element);\n          const duration = parseFloat(style.animationDuration);\n          if (duration < 0.33) { // Below 3Hz threshold\n            issues.push(`Flashing animation too fast: ${element.className}`);\n          }\n        });\n\n        // Check for motion preference support\n        const hasReducedMotion = document.querySelector('@media (prefers-reduced-motion: reduce)');\n        if (!hasReducedMotion) {\n          issues.push('Missing reduced motion alternatives');\n        }\n\n        return issues;\n      }\n      ```\n\n      **Animation Guidelines:**\n\n      **Keep These Animations:**\n      - **Fading:** Safe default for most transitions\n      - **Loading indicators:** Essential for user understanding\n      - **Subtle scaling:** Gentle size changes for feedback\n      - **Color transitions:** Slow, smooth color changes\n\n      **Subdue These Animations:**\n      - **System-triggered:** Make unexpected animations subtle\n      - **Large movements:** Reduce distance and speed\n      - **Color changes:** Use gentler transitions\n\n      **Remove These Animations:**\n      - **Decorative effects:** Remove purely visual animations\n      - **Spatial movement:** Replace with gentle fades\n      - **Auto-playing loops:** Remove or provide pause controls\n\n      **Testing Checklist:**\n      - Test with prefers-reduced-motion: reduce\n      - Verify animations don't exceed 3Hz frequency\n      - Check that essential UI changes are clear without animation\n      - Ensure pause controls work for looping animations\n      - Test with screen readers and assistive technology\n      - Validate motion doesn't cause disorientation\n\n      **Common Mistakes to Avoid:**\n      - Missing prefers-reduced-motion media queries\n      - Flashing animations above 3Hz threshold\n      - Large spatial movements without alternatives\n      - Auto-playing animations without pause controls\n      - Parallax effects that ignore user preferences\n      - Animations that patch design shortcomings\n      - Missing focus indicators on animated elements\n      - Excessive animation duration causing motion sickness\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/assets.mdc",
    "content": "---\ndescription: Static files (css, js, and images) for theme templates\nglobs: assets/*\nalwaysApply: false\n---\n# Assets\n\nThe assets directory contains any assets that need to be referenced within a `.liquid` file, usually using the [asset_url](mdc:https:/shopify.dev/docs/api/liquid/filters/asset_url) Liquid filter.\n\nAssets is a flat directory, it may not contain subdirectories.\n\nAny images that are required in the code, including icons, may be stored within assets.  Icons can be used in `.liquid` files via the [inline_asset_content](mdc:https:/shopify.dev/docs/api/liquid/filters/inline_asset_content) Liquid filter.\n"
  },
  {
    "path": ".cursor/rules/blocks.mdc",
    "content": "---\ndescription: Development standards and best practices for creating/configuring/styling theme blocks, including static and nested blocks, schema configuration, CSS, and usage examples\nglobs: blocks/*.liquid\nalwaysApply: false\n---\n\n# Theme Blocks Development Standards\n\nFollow [Shopify's theme blocks documentation](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks/quick-start?framework=liquid.txt).\n\n## Theme Block Fundamentals\n\nTheme blocks are reusable components defined at the theme level that can be:\n\n- Nested under sections and blocks\n- Configured using settings in the theme editor\n- Given presets and added by merchants\n- Used as [static blocks](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks/static-blocks#statically-vs-dynamically-rendered-theme-blocks) by theme developers\n\nBlocks render in the editor and storefront when they are referenced in [template files](mdc:.cursor/rules/templates.mdc).\n\n### Basic Block Structure\n\n```liquid\n{% doc %}\n  Block description and usage examples\n\n  @example\n  {% content_for 'block', type: 'block-name', id: 'unique-id' %}\n{% enddoc %}\n\n<div\n  {{ block.shopify_attributes }}\n  class='block-name'\n>\n  <!-- Block content using block.settings -->\n</div>\n\n{% stylesheet %}\n  /*\n    Scoped CSS for this block\n\n    Use BEM structure\n    CSS written in here should be for components that are exclusively in this block.  If the CSS will be used elsewhere, it should instead be written in [assets/base.css](mdc:@assets/base.css)\n  */\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"Block Name\",\n  \"settings\": [],\n  \"presets\": []\n}\n{% endschema %}\n```\n\n### Static Block Usage\n\nStatic blocks are theme blocks that are rendered directly in Liquid templates by developers, rather than being dynamically added through the theme editor. This allows for predetermined block placement with optional default settings.\n\n**Basic Static Block Syntax:**\n\n```liquid\n{% content_for 'block', type: 'text', id: 'header-announcement' %}\n```\n\n**Example: Product Template with Mixed Static and Dynamic Blocks**\n\n```liquid\n<!-- templates/product.liquid -->\n<div class='product-page'>\n  {% comment %} Static breadcrumb block {% endcomment %}\n  {% content_for 'block', type: 'breadcrumb', id: 'product-breadcrumb' %}\n\n  <div class='product-main'>\n    <div class='product-media'>\n      {% comment %} Static product gallery block {% endcomment %}\n      {%\n        content_for 'block', type: 'product-gallery', id: 'main-gallery', settings: {\n        enable_zoom: true,\n        thumbnails_position: \"bottom\"\n        }\n      %}\n    </div>\n\n    <div class='product-info'>\n      {% comment %} Static product info blocks {% endcomment %}\n      {% content_for 'block', type: 'product-title', id: 'product-title' %}\n      {% content_for 'block', type: 'product-price', id: 'product-price' %}\n      {% content_for 'block', type: 'product-form', id: 'product-form' %}\n\n      {% comment %} Dynamic blocks area for additional content {% endcomment %}\n      <div class='product-extra-content'>\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </div>\n\n  {% comment %} Static related products block {% endcomment %}\n  {%\n    content_for 'block', type: 'related-products', id: 'related-products', settings: {\n    heading: \"You might also like\",\n    limit: 4\n    }\n  %}\n</div>\n```\n\n**Key Points about Static Blocks:**\n\n- They have a fixed `id` that makes them identifiable in the theme editor\n- Settings can be overridden in the theme editor despite having defaults\n- They appear in the theme editor as locked blocks that can't be removed or reordered\n- Useful for consistent layout elements that should always be present\n- Can be mixed with dynamic block areas using `{% content_for 'blocks' %}`\n\n## Schema Configuration\n\nSee [schemas.mdc](mdc:.cursor/rules/schemas.mdc) for rules on schemas\n\n### Advanced Schema Features\n\n#### Exclude wrapper\n\n```json\n{\n  \"tag\": null // No wrapper - must include {{ block.shopify_attributes }} for proper editor function\n}\n```\n\n## Block Implementation Patterns\n\n### Accessing Block Data\n\n**Block Settings:**\n\n```liquid\n{{ block.settings.text }}\n{{ block.settings.heading | escape }}\n{{ block.settings.image | image_url: width: 800 }}\n```\n\n**Block Properties:**\n\n```liquid\n{{ block.id }} // Unique block identifier {{ block.type }} // Block type name {{ block.shopify_attributes }} // Required\nfor theme editor\n```\n\n**Section Context:**\n\n```liquid\n{{ section.id }} // Parent section ID\n{{ section.settings.heading | escape }}\n{{ section.settings.image | image_url: width: 800 }}\n```\n\n## Nested Blocks Implementation\n\n### Critical Constraint: Single `content_for 'blocks'` Per File\n\n**IMPORTANT:** There can only be **ONE** `{% content_for 'blocks' %}` call per Liquid file. If you need to use the blocks content in multiple places (e.g., in conditional branches), you must capture it first:\n\n```liquid\n{% comment %} ✅ CORRECT - Capture once, use multiple times {% endcomment %}\n{% capture blocks_content %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% if condition %}\n  <div class='layout-a'>\n    {{ blocks_content }}\n  </div>\n{% else %}\n  <div class='layout-b'>\n    {{ blocks_content }}\n  </div>\n{% endif %}\n```\n\n```liquid\n{% comment %} ❌ INCORRECT - Multiple content_for calls will cause errors {% endcomment %}\n{% if condition %}\n  <div class='layout-a'>\n    {% content_for 'blocks' %}\n    <!-- First call -->\n  </div>\n{% else %}\n  <div class='layout-b'>\n    {% content_for 'blocks' %}\n    <!-- ERROR: Duplicate entry -->\n  </div>\n{% endif %}\n```\n\n**Common Error Message:**\n\n```\nLiquid syntax error: Duplicate entries for 'content_for \"blocks\"'\n```\n\n### Rendering Nested Blocks\n\n```liquid\n<div\n  class='block-container'\n  {{ block.shopify_attributes }}\n>\n  <h2>{{ block.settings.heading | escape }}</h2>\n\n  <div class='nested-blocks'>\n    {% content_for 'blocks' %}\n  </div>\n</div>\n```\n\n### Nesting with Layout Control\n\n```liquid\n<div\n  class='group {{ block.settings.layout_direction }}'\n  style='--gap: {{ block.settings.gap }}px;'\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n```\n\n### Presets with Nested Blocks\n\n```json\n{\n  \"presets\": [\n    {\n      \"name\": \"t:names.two_column_layout\",\n      \"category\": \"Layout\",\n      \"settings\": {\n        \"layout_direction\": \"horizontal\"\n      },\n      \"blocks\": [\n        {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"Column 1 content\"\n          }\n        },\n        {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"Column 2 content\"\n          }\n        }\n      ]\n    }\n  ]\n}\n```\n\nWhen blocks are declared as an object instead of an array, include `block_order`:\n\n```javascript\nblocks: {\n  header: {\n    type: 'group',\n    blocks: {\n      title: { type: 'product-title' },\n      price: { type: 'price' },\n    },\n    block_order: ['title', 'price'],\n  },\n}\n```\n\n## CSS and Styling\n\nSee [css-standards.mdc](mdc:.cursor/rules/css-standards.mdc) for rules on writing CSS\n\n### Scoped Styles\n\n```liquid\n{% stylesheet %}\n  .block-name {\n    padding: var(--block-padding, 1rem);\n    background: var(--block-background, transparent);\n  }\n\n  .block-name__title {\n    font-size: var(--title-size, 1.5rem);\n    color: var(--title-color, inherit);\n  }\n\n  .block-name--primary {\n    background-color: var(--color-primary);\n  }\n\n  .block-name--secondary {\n    background-color: var(--color-secondary);\n  }\n{% endstylesheet %}\n```\n\n### Dynamic CSS Variables\n\n```liquid\n<div\n  class=\"custom-block\"\n  style=\"\n    --block-padding: {{ block.settings.padding }}px;\n    --text-align: {{ block.settings.alignment }};\n    --background: {{ block.settings.background_color }};\n  \"\n  {{ block.shopify_attributes }}\n>\n```\n\n## Block Targeting\n\n### Section Schema for Theme Blocks\n\n```json\n{\n  \"blocks\": [\n    { \"type\": \"@theme\" }, // Accept all theme blocks\n    { \"type\": \"@app\" } // Accept app blocks\n  ]\n}\n```\n\n### Restricted Block Targeting\n\n```json\n{\n  \"blocks\": [\n    {\n      \"type\": \"text\",\n      \"name\": \"Text Content\"\n    },\n    {\n      \"type\": \"image\",\n      \"name\": \"Image Content\"\n    }\n  ]\n}\n```\n\n## Common Block Patterns\n\n### Content Block\n\n```liquid\n<div\n  class='content-block {{ block.settings.style }}'\n  {{ block.shopify_attributes }}\n>\n  {% if block.settings.heading != blank %}\n    <h3 class='content-block__heading'>{{ block.settings.heading | escape }}</h3>\n  {% endif %}\n\n  {% if block.settings.text != blank %}\n    <div class='content-block__text'>{{ block.settings.text }}</div>\n  {% endif %}\n\n  {% if block.settings.button_text != blank %}\n    <a\n      href='{{ block.settings.button_url }}'\n      class='content-block__button'\n    >\n      {{ block.settings.button_text | escape }}\n    </a>\n  {% endif %}\n</div>\n```\n\n### Media Block\n\n```liquid\n<div\n  class='media-block'\n  {{ block.shopify_attributes }}\n>\n  {% if block.settings.image %}\n    <div class='media-block__image'>\n      {{\n        block.settings.image\n        | image_url: width: 800\n        | image_tag: alt: block.settings.image.alt\n        | default: block.settings.alt_text\n      }}\n    </div>\n  {% endif %}\n\n  {% if block.settings.video %}\n    <div class='media-block__video'>\n      {{ block.settings.video | video_tag: controls: true }}\n    </div>\n  {% endif %}\n</div>\n```\n\n### Layout Block (Container)\n\n```liquid\n<div\n  class='layout-block layout-block--{{ block.settings.layout_type }}'\n  style='\n    --columns: {{ block.settings.columns }};\n    --gap: {{ block.settings.gap }}px;\n  '\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n```\n\n## Performance Best Practices\n\n### Conditional Rendering\n\n```liquid\n{% liquid\n  assign has_content = false\n  if block.settings.heading != blank or block.settings.text != blank\n    assign has_content = true\n  endif\n%}\n\n{% if has_content %}\n  <div\n    class='block-content'\n    {{ block.shopify_attributes }}\n  >\n    <!-- Content here -->\n  </div>\n{% endif %}\n```\n\n## Examples Referenced\n\n[text.liquid](mdc:.cursor/rules/examples/block-example-text.liquid) - Basic content block from existing project\n[group.liquid](mdc:.cursor/rules/examples/block-example-group.liquid) - Container with nested blocks from existing project\n"
  },
  {
    "path": ".cursor/rules/breadcrumb-accessibility.mdc",
    "content": "---\ndescription: Breadcrumb component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Breadcrumb Accessibility\n\nEnsures breadcrumb components follow WCAG compliance and WAI-ARIA Breadcrumb Pattern specifications.\n\n<rule>\nname: breadcrumb_accessibility_standards\ndescription: Enforce breadcrumb component accessibility standards and WAI-ARIA Breadcrumb Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Navigation landmark requirement\n      - pattern: \"(?i)<nav[^>]*(?:breadcrumb|navigation)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)=\\\"[^\\\"]+\\\"\"\n        message: \"Breadcrumb navigation must have aria-label or aria-labelledby attribute.\"\n\n      # Current page aria-current requirement\n      - pattern: \"(?i)<[^>]*(?:breadcrumb.*current|current.*breadcrumb)[^>]*>\"\n        pattern_negate: \"aria-current=\\\"page\\\"\"\n        message: \"Current page in breadcrumb must have aria-current='page' attribute.\"\n\n      # List structure requirement\n      - pattern: \"(?i)<nav[^>]*(?:breadcrumb|navigation)[^>]*>\"\n        pattern_negate: \"<ol[^>]*>\"\n        message: \"Breadcrumb navigation should use ordered list (ol) for proper structure.\"\n\n  - type: suggest\n    message: |\n      **Breadcrumb Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **aria-label/aria-labelledby:** On navigation element to describe the breadcrumb trail\n      - **aria-current=\"page\":** On the current page link or element\n      - **role=\"navigation\":** Implicit on nav element, but can be explicit if needed\n\n      **Structure Requirements:**\n      - Use `<nav>` element as container\n      - Use ordered list (`<ol>`) for breadcrumb items\n      - Use list items (`<li>`) for each breadcrumb level\n      - Current page should be the last item in the list\n      - Use appropriate heading level for the breadcrumb container\n\n      **Implementation Patterns:**\n\n      **Basic Breadcrumb:**\n      ```html\n      <nav aria-label=\"Breadcrumb\">\n        <ol class=\"breadcrumb\">\n          <li class=\"breadcrumb-item\">\n            <a href=\"/\">Home</a>\n          </li>\n          <li class=\"breadcrumb-item\">\n            <a href=\"/products\">Products</a>\n          </li>\n          <li class=\"breadcrumb-item\" aria-current=\"page\">\n            <a href=\"/products/electronics\">Electronics</a>\n          </li>\n        </ol>\n      </nav>\n      ```\n\n      **With aria-labelledby:**\n      ```html\n      <nav aria-labelledby=\"breadcrumb-heading\">\n        <h2 id=\"breadcrumb-heading\" class=\"visually-hidden\">Breadcrumb Navigation</h2>\n        <ol class=\"breadcrumb\">\n          <li class=\"breadcrumb-item\">\n            <a href=\"/\">Home</a>\n          </li>\n          <li class=\"breadcrumb-item\" aria-current=\"page\">\n            <span>Current Page</span>\n          </li>\n        </ol>\n      </nav>\n      ```\n\n      **Accessibility Notes:**\n      - Navigation landmark helps screen readers identify the breadcrumb trail\n      - Ordered list provides semantic structure for the navigation hierarchy\n      - aria-current helps users identify their current location\n      - Consider using visually-hidden text for better screen reader context\n      - Ensure sufficient color contrast for all breadcrumb elements\n      - Maintain clear visual separation between items\n      - Use clear, descriptive labels for each level\n\n      **Testing Checklist:**\n      - Verify navigation landmark is present and properly labeled\n      - Confirm ordered list structure is used\n      - Check aria-current is present on current page\n      - Test with screen readers to ensure proper announcement\n      - Verify visual hierarchy is clear and consistent\n      - Ensure all links are keyboard accessible\n      - Check color contrast meets WCAG requirements\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/carousel-accessibility.mdc",
    "content": "---\ndescription: Carousel component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Carousel Accessibility Standards\n\nEnsures carousel components follow WCAG compliance and WAI-ARIA Carousel Pattern specifications.\n\n<rule>\nname: carousel_accessibility_standards\ndescription: Enforce carousel component accessibility standards and WAI-ARIA Carousel Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Carousel container role requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:carousel|slider|slideshow)[^>]*>\"\n        pattern_negate: \"(role=\\\"(region|group)\\\"|aria-roledescription=\\\"carousel\\\")\"\n        message: \"Carousel container must have role='region' or role='group' and aria-roledescription='carousel'.\"\n\n      # Carousel label requirement\n      - pattern: \"(?i)<[^>]*role=\\\"(region|group)\\\"[^>]*aria-roledescription=\\\"carousel\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)=\\\"[^\\\"]+\\\"\"\n        message: \"Carousel must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Slide role requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:slide|carousel-item)[^>]*>\"\n        pattern_negate: \"(role=\\\"group\\\"|aria-roledescription=\\\"slide\\\")\"\n        message: \"Slide containers must have role='group' and aria-roledescription='slide'.\"\n\n      # Slide label requirement\n      - pattern: \"(?i)<[^>]*role=\\\"group\\\"[^>]*aria-roledescription=\\\"slide\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)=\\\"[^\\\"]+\\\"\"\n        message: \"Slides must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Rotation control requirement\n      - pattern: \"(?i)<button[^>]*(?:rotation|auto-play|autoplay)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*(?:Start|Stop)[^\\\"]*slide[^\\\"]*rotation[^\\\"]*\\\"\"\n        message: \"Rotation control must have aria-label indicating its current state (Start/Stop slide rotation).\"\n\n      # Navigation controls requirement\n      - pattern: \"(?i)<button[^>]*(?:next|previous|prev)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*(?:Next|Previous)[^\\\"]*slide[^\\\"]*\\\"\"\n        message: \"Navigation controls must have aria-label indicating their purpose (Next/Previous slide).\"\n\n      # Navigation button disabling check\n      - pattern: \"(?i)\\\\.disabled.*next|previous.*disabled\"\n        message: \"Navigation buttons should not be disabled. Implement wrap-around navigation to first/last slide instead for better user experience.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<button[^>]*(?:rotation|next|previous|prev)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Carousel controls should handle keyboard events (Enter, Space).\"\n\n      # Auto-rotation interval check (WCAG 2.2.2)\n      - pattern: \"setInterval\\\\([^,]+,\\\\s*(?:[0-4]\\\\d{3}|[0-9]{1,4})\\\\)\"\n        message: \"Auto-rotation interval must be at least 5000ms (5 seconds) to comply with WCAG 2.2.2 Pause, Stop, Hide.\"\n\n      # Mouse hover event handlers check\n      - pattern: \"(?i)<(div|section)[^>]*(?:carousel|slider|slideshow)[^>]*>\"\n        pattern_negate: \"(onMouseEnter|onmouseenter|@mouseenter|v-on:mouseenter|onMouseLeave|onmouseleave|@mouseleave|v-on:mouseleave)\"\n        message: \"Carousel must handle mouseenter/mouseleave events to pause/resume auto-rotation.\"\n\n      # aria-live attribute check\n      - pattern: \"(?i)<[^>]*aria-live=\\\"[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"aria-live=\\\"(off|polite)\\\"\"\n        message: \"Carousel container must have aria-live set to 'off' during rotation and 'polite' when paused.\"\n\n  - type: suggest\n    message: |\n      **Carousel Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='region' or role='group':** Set on carousel container\n      - **aria-roledescription='carousel':** Set on carousel container\n      - **aria-labelledby/aria-label:** Set on carousel container\n      - **role='group':** Set on slide containers\n      - **aria-roledescription='slide':** Set on slide containers\n      - **aria-labelledby/aria-label:** Set on slide containers\n      - **aria-label:** Set on rotation control (changes with state)\n      - **aria-label:** Set on navigation controls\n      - **aria-live:** Set to 'off' during rotation, 'polite' when paused\n\n      **Optional ARIA Attributes:**\n      - **aria-atomic='false':** On slide wrapper\n      - **aria-hidden='true':** Set on inactive slides to hide from screen readers\n      - **visibility: hidden:** CSS property on inactive slides to hide from keyboard and visual users\n\n      **Keyboard Interaction Requirements:**\n      - **Tab/Shift+Tab:** Navigate through interactive elements\n      - **Enter/Space:** Activate controls\n      - **Auto-rotation:** Stops on focus or mouse hover, resumes on blur or mouse away\n      - **Rotation Control:** First in tab sequence\n\n      **Navigation Button Best Practices:**\n      - **Always Enabled:** Navigation buttons should never be disabled\n      - **Wrap-Around Navigation:** Next button wraps to first slide, Previous button wraps to last slide\n      - **Consistent Behavior:** Users can always navigate in both directions\n      - **Better UX:** Prevents users from getting \"stuck\" at slide boundaries\n\n      **Auto-rotation Requirements (WCAG 2.2.2):**\n      - Minimum interval between slides: 5 seconds\n      - Must provide pause/stop control\n      - Must stop on user interaction\n      - Must stop when any element receives focus\n      - Must stop when mouse hovers over carousel\n      - Must resume when mouse leaves carousel (unless manually paused)\n      - Must not restart automatically after manual pause\n\n      **Mouse Interaction Requirements:**\n      - Pause auto-rotation on mouseenter\n      - Resume auto-rotation on mouseleave (unless manually paused)\n      - Maintain pause state when manually stopped\n      - Clear visual indication of pause state\n\n      **Play/Pause Button Requirements:**\n      - Button state should reflect user's explicit choice\n      - Button state should not change with temporary auto-rotation pauses\n      - Button should maintain its state across mouse/focus events\n      - Button should only change state when explicitly activated\n      - Button should provide clear visual feedback of current state\n      - Button state should be independent of focus/hover pause behavior\n\n      **State Management Requirements:**\n      - Track rotation state (isRotating)\n      - Track manual pause state (wasManuallyPaused)\n      - Track focus/hover pause state (isPausedByFocus)\n      - Update aria-live attribute based on rotation state\n      - Maintain button state across temporary pauses\n      - Handle state transitions appropriately\n\n      **Structure Requirements:**\n      - Use native button elements for controls\n      - Handle auto-rotation state changes\n      - Provide clear visual indicators\n      - Ensure proper slide labeling\n      - Hide off-screen slides from keyboard and screen reader users\n\n      **Slide Visibility Management:**\n      - Use `visibility: hidden` on inactive slides to hide from all users\n      - Use `visibility: visible` on active slide to make accessible\n      - The `visibility` property can be animated with CSS transitions\n      - Prevents keyboard focus on hidden slides\n      - Prevents screen reader access to hidden slides\n      - Improves performance by removing off-screen content from accessibility tree\n\n      **Implementation Patterns:**\n\n      **Basic Carousel:**\n      ```html\n      <div role=\"region\"\n           aria-roledescription=\"carousel\"\n           aria-label=\"Featured Products\"\n           onmouseenter=\"pauseRotation()\"\n           onmouseleave=\"resumeRotation()\">\n        <div class=\"carousel-container\" aria-live=\"off\">\n          <button aria-label=\"Stop slide rotation\">\n            Pause\n          </button>\n          <div role=\"group\"\n               aria-roledescription=\"slide\"\n               aria-label=\"Product 1 of 3\">\n            <img src=\"product1.jpg\" alt=\"Product 1\">\n            <h3>Product 1</h3>\n          </div>\n          <button aria-label=\"Previous slide\">\n            Previous\n          </button>\n          <button aria-label=\"Next slide\">\n            Next\n          </button>\n        </div>\n      </div>\n      ```\n\n      **Tab Controls Implementation:**\n      ```html\n      <div role=\"region\"\n           aria-roledescription=\"carousel\"\n           aria-label=\"Featured Products\"\n           onmouseenter=\"pauseRotation()\"\n           onmouseleave=\"resumeRotation()\">\n        <div class=\"carousel-container\" aria-live=\"off\">\n          <!-- Play/Pause Button -->\n          <button aria-label=\"Stop slide rotation\"\n                  onclick=\"toggleRotation()\"\n                  onkeydown=\"handleKeyPress(event)\">\n            Pause\n          </button>\n\n          <!-- Slides -->\n          <div role=\"group\"\n               aria-roledescription=\"slide\"\n               aria-label=\"Product 1 of 3\">\n            <img src=\"product1.jpg\" alt=\"Product 1\">\n            <h3>Product 1</h3>\n          </div>\n\n          <!-- Navigation Controls -->\n          <button aria-label=\"Previous slide\"\n                  onclick=\"previousSlide()\"\n                  onkeydown=\"handleKeyPress(event)\">\n            Previous\n          </button>\n          <button aria-label=\"Next slide\"\n                  onclick=\"nextSlide()\"\n                  onkeydown=\"handleKeyPress(event)\">\n            Next\n          </button>\n\n          <!-- Tab Controls -->\n          <div role=\"tablist\" aria-label=\"Slide navigation\" class=\"carousel-tabs\">\n            <button role=\"tab\"\n                    aria-selected=\"true\"\n                    aria-controls=\"slide-1\"\n                    id=\"tab-1\"\n                    onclick=\"goToSlide(0)\"\n                    onkeydown=\"handleTabKeyPress(event)\">\n              Slide 1\n            </button>\n            <button role=\"tab\"\n                    aria-selected=\"false\"\n                    aria-controls=\"slide-2\"\n                    id=\"tab-2\"\n                    onclick=\"goToSlide(1)\"\n                    onkeydown=\"handleTabKeyPress(event)\">\n              Slide 2\n            </button>\n            <button role=\"tab\"\n                    aria-selected=\"false\"\n                    aria-controls=\"slide-3\"\n                    id=\"tab-3\"\n                    onclick=\"goToSlide(2)\"\n                    onkeydown=\"handleTabKeyPress(event)\">\n              Slide 3\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <style>\n        /* Tab Controls Styles with WCAG 2.2 compliant contrast */\n        .carousel-tabs {\n          display: flex;\n          gap: 1rem;\n          margin-top: 1rem;\n        }\n\n        .carousel-tabs [role=\"tab\"] {\n          padding: 0.5rem 1rem;\n          border: 2px solid #495057; /* 8.3:1 contrast with white */\n          background: #ffffff;\n          color: #212529; /* 16.6:1 contrast with white */\n          border-radius: 4px;\n          cursor: pointer;\n          font-weight: 500;\n        }\n\n        /* Selected tab state */\n        .carousel-tabs [role=\"tab\"][aria-selected=\"true\"] {\n          background: #0056b3; /* 7.7:1 contrast with white */\n          color: #ffffff;\n          border-color: #004085;\n        }\n\n        /* Unselected tab state - still maintaining 4.5:1 contrast */\n        .carousel-tabs [role=\"tab\"][aria-selected=\"false\"] {\n          background: #ffffff;\n          color: #495057; /* 8.3:1 contrast with white */\n          border-color: #6c757d; /* 5.4:1 contrast with white */\n        }\n\n        /* Focus state */\n        .carousel-tabs [role=\"tab\"]:focus {\n          outline: 3px solid #0056b3; /* 7.7:1 contrast with white */\n          outline-offset: 2px;\n        }\n\n        /* Hover state */\n        .carousel-tabs [role=\"tab\"]:hover {\n          background: #f8f9fa;\n          border-color: #0056b3;\n        }\n\n        /* Hover state for selected tab */\n        .carousel-tabs [role=\"tab\"][aria-selected=\"true\"]:hover {\n          background: #004085;\n        }\n\n        /* High contrast mode support */\n        @media (prefers-contrast: more) {\n          .carousel-tabs [role=\"tab\"] {\n            border: 3px solid #000000;\n            color: #000000;\n          }\n\n          .carousel-tabs [role=\"tab\"][aria-selected=\"true\"] {\n            background: #000000;\n            color: #ffffff;\n          }\n\n          .carousel-tabs [role=\"tab\"]:focus {\n            outline: 3px solid #000000;\n          }\n        }\n      </style>\n\n      <script>\n        // Tab Controls JavaScript\n        function handleTabKeyPress(event) {\n          const tabs = Array.from(document.querySelectorAll('[role=\"tab\"]'));\n          const currentTab = event.target;\n          const currentIndex = tabs.indexOf(currentTab);\n\n          switch (event.key) {\n            case 'ArrowLeft':\n              event.preventDefault();\n              const prevTab = tabs[currentIndex - 1] || tabs[tabs.length - 1];\n              prevTab.focus();\n              break;\n            case 'ArrowRight':\n              event.preventDefault();\n              const nextTab = tabs[currentIndex + 1] || tabs[0];\n              nextTab.focus();\n              break;\n            case 'Home':\n              event.preventDefault();\n              tabs[0].focus();\n              break;\n            case 'End':\n              event.preventDefault();\n              tabs[tabs.length - 1].focus();\n              break;\n          }\n        }\n\n        function goToSlide(index) {\n          // Update tab states\n          const tabs = document.querySelectorAll('[role=\"tab\"]');\n          tabs.forEach((tab, i) => {\n            tab.setAttribute('aria-selected', i === index);\n          });\n\n          // Update slide visibility\n          const slides = document.querySelectorAll('[role=\"group\"]');\n          slides.forEach((slide, i) => {\n            slide.setAttribute('aria-hidden', i !== index);\n          });\n\n          // Pause rotation when manually navigating\n          pauseRotation();\n        }\n      </script>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement auto-rotation pause on focus or mouse hover\n      - Handle keyboard navigation\n      - Update ARIA labels for rotation state\n      - Implement proper tab sequence\n      - Handle slide picker controls\n      - Consider touch/swipe interactions\n      - Ensure minimum 5-second interval between slides\n      - Stop rotation on user interaction\n      - Do not restart rotation automatically after manual pause\n      - Handle mouse enter/leave events for pause/resume\n      - Maintain manual pause state across mouse events\n      - Separate auto-rotation pause behavior from Play/Pause button state\n      - Update button state only on explicit user interaction\n      - **Update aria-live attribute dynamically based on rotation state**\n      - Track and manage multiple pause states (manual vs. focus/hover)\n\n      **aria-live Management Example:**\n      ```javascript\n      function toggleRotation() {\n        const carouselContainer = document.querySelector('[aria-live]');\n        wasManuallyPaused = isRotating;\n        isRotating = !isRotating;\n\n        if (isRotating) {\n          startRotation();\n          playPauseButton.textContent = 'Pause';\n          playPauseButton.setAttribute('aria-label', 'Stop slide rotation');\n          // Set to 'off' when rotating - prevents announcement overload\n          carouselContainer.setAttribute('aria-live', 'off');\n        } else {\n          stopRotation();\n          playPauseButton.textContent = 'Play';\n          playPauseButton.setAttribute('aria-label', 'Start slide rotation');\n          // Set to 'polite' when paused - allows screen readers to announce changes\n          carouselContainer.setAttribute('aria-live', 'polite');\n        }\n      }\n\n      // Also update aria-live on hover pause/resume\n      function pauseRotation() {\n        if (!wasManuallyPaused && isRotating) {\n          stopRotation();\n          const carouselContainer = document.querySelector('[aria-live]');\n          carouselContainer.setAttribute('aria-live', 'polite');\n        }\n      }\n\n      function resumeRotation() {\n        if (!wasManuallyPaused && isRotating) {\n          startRotation();\n          const carouselContainer = document.querySelector('[aria-live]');\n          carouselContainer.setAttribute('aria-live', 'off');\n        }\n      }\n      ```\n\n      **Slide Visibility Management Example:**\n      ```css\n      /* Hide all slides by default */\n      .carousel-slide {\n        visibility: hidden;\n        opacity: 0;\n        transition: visibility 0.5s ease, opacity 0.5s ease, transform 0.5s ease;\n      }\n\n      /* Show active slide */\n      .carousel-slide.active {\n        visibility: visible;\n        opacity: 1;\n      }\n\n      /* Alternative: Use data attribute for active state */\n      .carousel-slide[data-active=\"false\"] {\n        visibility: hidden;\n        opacity: 0;\n      }\n\n      .carousel-slide[data-active=\"true\"] {\n        visibility: visible;\n        opacity: 1;\n      }\n      ```\n\n      ```javascript\n      function updateSlide(index) {\n        const slides = document.querySelectorAll('.carousel-slide');\n        currentSlide = (index + slides.length) % slides.length;\n\n        slides.forEach((slide, i) => {\n          if (i === currentSlide) {\n            // Show active slide\n            slide.classList.add('active');\n            slide.setAttribute('aria-hidden', 'false');\n            slide.setAttribute('data-active', 'true');\n          } else {\n            // Hide inactive slides\n            slide.classList.remove('active');\n            slide.setAttribute('aria-hidden', 'true');\n            slide.setAttribute('data-active', 'false');\n          }\n        });\n\n        // Update visual position\n        slidesContainer.style.transform = `translateX(-${currentSlide * 100}%)`;\n      }\n      ```\n\n      **Accessibility Notes:**\n      - Auto-rotation should be paused by default\n      - Provide clear visual focus indicators\n      - Ensure sufficient color contrast\n      - Test with screen readers\n      - Consider motion sensitivity\n      - Provide alternative navigation methods\n      - Comply with WCAG 2.2.2 Pause, Stop, Hide requirement\n      - Ensure mouse hover behavior is consistent and predictable\n      - Maintain clear distinction between temporary and permanent pause states\n      - Ensure screen reader announcements are appropriate for current state\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/cart-drawer-accessibility.mdc",
    "content": "---\ndescription: Cart drawer component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Cart Drawer Component Accessibility Standards\n\nEnsures cart drawer components follow WCAG compliance and ARIA Dialog Pattern specifications for ecommerce applications.\n\n<rule>\nname: cart_drawer_accessibility_standards\ndescription: Enforce cart drawer component accessibility standards and ARIA Dialog Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Cart activator missing aria-haspopup\n      - pattern: \"(?i)<button[^>]*(?:cart|basket|shopping)[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Cart activator buttons must include aria-haspopup='dialog' to inform users a dialog will open.\"\n\n      # Cart container missing dialog role\n      - pattern: \"(?i)<(div|section|aside)[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"role=\\\"dialog\\\"\"\n        message: \"Cart drawer containers must have role='dialog' attribute.\"\n\n      # Cart container missing aria-modal\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"aria-modal=\\\"true\\\"\"\n        message: \"Cart drawer dialog elements must have aria-modal='true' attribute.\"\n\n      # Cart container missing proper labeling\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Cart drawer dialog elements must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Empty aria-label check\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:cart|basket|drawer)[^>]*aria-label=\\\"\\\"[^>]*>\"\n        message: \"Cart drawer aria-label should not be empty; provide a meaningful description like 'Shopping Cart'.\"\n\n      # Close button missing proper functionality\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss|cancel)[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"(onClick|onclick|@click|v-on:click)\"\n        message: \"Cart drawer close buttons should have proper click handlers to close the dialog.\"\n\n      # Close button missing aria-label\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss|×|&times;)[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*[Cc]lose[^\\\"]*\\\"\"\n        message: \"Cart drawer close buttons should have aria-label='Close cart' or similar descriptive text.\"\n\n      # Missing focus management indicators\n      - pattern: \"(?i)(?:openCart|showCart|toggleCart|openDrawer)\\\\s*\\\\(\"\n        message: \"When opening cart drawers, ensure focus management is implemented (focus should move to first focusable element inside the dialog).\"\n\n      # Missing checkout button accessibility\n      - pattern: \"(?i)<button[^>]*(?:checkout|proceed|purchase)[^>]*(?:cart|basket|drawer)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-describedby)\"\n        message: \"Cart drawer checkout buttons should have proper labeling for screen readers.\"\n\n      # Quantity inputs missing aria-live for screen reader announcements\n      - pattern: \"(?i)<input[^>]*type=\\\"number\\\"[^>]*(?:quantity|qty)[^>]*>\"\n        pattern_negate: \"aria-live=\\\"polite\\\"\"\n        message: \"Cart quantity inputs must have aria-live='polite' to announce value changes to screen readers.\"\n\n      # Missing focus management for item removal\n      - pattern: \"(?i)(?:removeItem|remove.*item|delete.*item)\\\\s*\\\\(\"\n        pattern_negate: \"focus\\\\(|focus\\\\(\\\\).*close|close.*focus\\\\(\\\\\"\n        message: \"When removing cart items, implement focus management to shift focus to a logical location (e.g., close button) for better user experience.\"\n\n  - type: suggest\n    message: |\n      **Cart Drawer Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **aria-haspopup='dialog':** Set on cart activator buttons to inform users a dialog will open\n      - **role='dialog':** Set on the cart drawer container element\n      - **aria-modal='true':** Indicates the cart drawer is modal and traps focus\n      - **aria-labelledby:** Reference to visible cart title, OR\n      - **aria-label:** Descriptive label like \"Shopping Cart\" if no visible title exists\n\n      **Keyboard Interaction Requirements:**\n      - **Initial Focus:** When cart drawer opens, focus must move to the first focusable element (typically close button)\n      - **Tab Cycling:** Tab key should cycle through focusable elements within the cart drawer only\n      - **Shift+Tab:** Should cycle backwards through focusable elements within the cart drawer\n      - **Escape Key:** Must close the cart drawer and return focus to the activator\n      - **Focus Trap:** Focus should be contained within the cart drawer while open\n\n      **Focus Management:**\n      - Implement focus trapping to prevent tab navigation outside the cart drawer\n      - Return focus to the cart activator when drawer closes\n      - Move focus to the close button (first focusable element) when drawer opens\n      - Ensure close button is positioned first in DOM order within the dialog container\n      - **Item Removal Focus:** When removing cart items, shift focus to the close button for logical positioning\n      - **Quantity Changes:** Maintain focus on quantity controls during updates to prevent focus loss\n\n      **Screen Reader Interaction:**\n      - Activator should announce \"dialog popup\" when focused\n      - On activation, announce \"{Cart label}, dialog\" when focus moves to cart drawer\n      - Provide clear navigation through cart content\n      - Announce return to activator when drawer closes\n      - **Quantity Updates:** Use aria-live=\"polite\" on quantity inputs to announce value changes\n      - **Item Removal:** Announce item removal with descriptive text (e.g., \"Product Name removed from cart\")\n      - **Dynamic Content:** Ensure all cart state changes are announced to screen readers\n\n      **Structure Requirements:**\n      - All interactive elements must be descendants of the cart drawer container\n      - Position close button first in DOM order within the cart drawer container\n      - Use semantic HTML within the cart drawer (headings, buttons, form labels)\n      - Provide clear visual focus indicators\n      - Close buttons should use aria-label=\"Close cart\" with &times; entity for visual 'x' icon\n\n      **Implementation Patterns:**\n\n      **Cart Activator Button:**\n      ```html\n      <button class=\"cart-activator\"\n              aria-haspopup=\"dialog\"\n              aria-label=\"View shopping cart\"\n              onclick=\"openCartDrawer()\">\n        <svg aria-hidden=\"true\" width=\"24\" height=\"24\">\n          <!-- Cart icon -->\n        </svg>\n        <span class=\"cart-count\">3</span>\n      </button>\n      ```\n\n      **Cart Drawer Container:**\n      ```html\n      <div role=\"dialog\"\n           aria-modal=\"true\"\n           aria-labelledby=\"cart-title\"\n           class=\"cart-drawer\"\n           id=\"cart-drawer\">\n        <button type=\"button\"\n                aria-label=\"Close cart\"\n                onclick=\"closeCartDrawer()\"\n                class=\"cart-close\">&times;</button>\n        <h2 id=\"cart-title\">Shopping Cart</h2>\n        <div class=\"cart-items\">\n          <!-- Cart items -->\n        </div>\n        <div class=\"cart-summary\">\n          <p>Total: $99.99</p>\n          <button aria-label=\"Proceed to checkout\"\n                  onclick=\"proceedToCheckout()\">\n            Checkout\n          </button>\n        </div>\n      </div>\n      ```\n\n      **Quantity Controls with aria-live:**\n      ```html\n      <div class=\"quantity-controls\">\n        <button class=\"quantity-btn decrease-btn\"\n                aria-label=\"Decrease quantity\"\n                onclick=\"updateQuantity(itemId, -1)\">-</button>\n        <input type=\"number\"\n               class=\"quantity-input\"\n               value=\"1\"\n               min=\"1\"\n               aria-label=\"Quantity for Product Name\"\n               aria-live=\"polite\"\n               onchange=\"setQuantity(itemId, this.value)\">\n        <button class=\"quantity-btn increase-btn\"\n                aria-label=\"Increase quantity\"\n                onclick=\"updateQuantity(itemId, 1)\">+</button>\n      </div>\n      ```\n\n      **Item Removal with Focus Management:**\n      ```javascript\n      function removeItem(itemId) {\n          const item = cartItems.find(item => item.id === itemId);\n          if (item) {\n              cartItems = cartItems.filter(item => item.id !== itemId);\n\n              // Remove only the specific cart item element\n              const cartItem = document.querySelector(`[data-item-id=\"${itemId}\"]`);\n              if (cartItem) {\n                  cartItem.remove();\n              }\n\n              // Update cart state\n              updateCartCount();\n              updateCartTotal();\n\n              // Announce removal to screen readers\n              announceToScreenReader(`${item.name} removed from cart`);\n\n              // Shift focus to close button for logical focus management\n              const closeButton = document.querySelector('.cart-close');\n              if (closeButton) {\n                  closeButton.focus();\n              }\n          }\n      }\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper event listeners for Escape key\n      - Manage body scroll when cart drawer is open\n      - Handle focus restoration on cart drawer close\n      - Implement focus trapping within cart drawer\n      - Store reference to activator for focus return\n      - Handle dynamic cart content updates\n      - Ensure proper announcement of cart state changes\n      - **Quantity Management:** Update only specific DOM elements instead of re-rendering entire cart\n      - **Focus Management:** Shift focus to close button when removing items\n      - **Performance:** Avoid unnecessary DOM manipulation to maintain accessibility features\n\n      **Quantity Controls and Item Management:**\n      - **aria-live=\"polite\":** Add to all quantity input fields for screen reader announcements\n      - **Focus Preservation:** Maintain focus on quantity controls during updates to prevent keyboard navigation issues\n      - **Value Announcements:** Screen readers should announce new quantity values when inputs change\n      - **Item Removal Focus:** Shift focus to close button after removing items for logical navigation flow\n      - **Dynamic Updates:** Avoid full cart re-rendering to preserve focus and improve performance\n\n      **Ecommerce-Specific Considerations:**\n      - Announce cart item count changes\n      - Provide clear product information in cart items\n      - Ensure checkout button is prominently accessible\n      - Handle empty cart states appropriately\n      - Provide clear pricing and total information\n      - Support quantity adjustments with proper labeling\n      - Handle cart item removal with confirmation\n\n      **Accessibility Notes:**\n      - Cart drawers should not contain critical page navigation\n      - Ensure cart content is fully accessible to screen readers\n      - Test with screen readers to ensure proper announcement\n      - Consider using aria-live regions for dynamic cart updates\n      - Provide clear error messages for cart operations\n      - Ensure cart drawer works with keyboard-only navigation\n      - Test focus management with multiple cart activators\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/chat-window-accessibility.mdc",
    "content": "---\ndescription: Chat window component accessibility compliance and WCAG compliance for real-time communication features\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Chat Window Component Accessibility Standards\n\nEnsures chat window components follow WCAG compliance and provide proper accessibility for real-time communication, notifications, and assistive technology support.\n\n<rule>\nname: chat_window_accessibility_standards\ndescription: Enforce chat window component accessibility standards and WCAG compliance for real-time communication features\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Chat window missing proper landmark role\n      - pattern: \"(?i)<(div|section)[^>]*(?:chat|conversation|messages)[^>]*>\"\n        pattern_negate: \"role=\\\"(log|region|dialog)\\\"\"\n        message: \"Chat window containers must have role='log' for message history, role='region' for general chat areas, or role='dialog' for popup windows.\"\n\n      # Chat log missing accessible name\n      - pattern: \"(?i)<[^>]*role=\\\"log\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Chat log elements must have accessible names via aria-labelledby or aria-label for screen reader identification.\"\n\n      # Chat messages missing author identification\n      - pattern: \"(?i)<(p|div)[^>]*(?:message|chat|conversation)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby|class.*visually-hidden|class.*sr-only)\"\n        message: \"Chat messages must include author identification via visible text, aria-label, or visually hidden content for screen reader users.\"\n\n      # Chat messages in wrong DOM order\n      - pattern: \"(?i)<div[^>]*class=\\\"[^\\\"]*(?:left|right|user|agent)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(role=\\\"log\\\"|aria-live)\"\n        message: \"Chat messages must maintain chronological order in DOM structure. Avoid using separate columns that break reading sequence.\"\n\n      # Chat notifications relying only on sound\n      - pattern: \"(?i)(audio|sound|play|new.*message)\"\n        pattern_negate: \"(aria-live|role=\\\"status\\\"|visual.*notification|title.*change|notification.*badge)\"\n        message: \"Chat notifications must use multiple sensory channels. Combine sound with visual indicators, aria-live announcements, title changes, and notification badges.\"\n\n      # Chat window missing keyboard support\n      - pattern: \"(?i)<(div|section)[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown|tabindex)\"\n        message: \"Chat windows must support keyboard navigation for opening, closing, and message interaction.\"\n\n      # Chat popup missing focus management\n      - pattern: \"(?i)<(div|section)[^>]*role=\\\"dialog\\\"[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(aria-modal|focus|tabindex)\"\n        message: \"Chat popup windows must implement proper focus management and aria-modal='true' for accessibility.\"\n\n      # Chat launcher missing aria-haspopup\n      - pattern: \"(?i)<(button|div)[^>]*(?:chat|conversation|support)[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Chat launcher buttons must include aria-haspopup='dialog' to inform users a dialog will open.\"\n\n      # Chat window missing focus trap\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(focus.*trap|tabindex|aria-modal)\"\n        message: \"Chat popup windows must implement focus trapping to prevent keyboard navigation outside the dialog.\"\n\n      # Chat input missing proper labeling\n      - pattern: \"(?i)<(input|textarea)[^>]*(?:chat|message|reply)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby|label|placeholder)\"\n        message: \"Chat input fields must have proper labels via label elements, aria-label, or aria-labelledby for screen reader context.\"\n\n      # Chat button missing accessible name\n      - pattern: \"(?i)<(button|div)[^>]*(?:chat|conversation|support)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby|>.*[A-Za-z]{10,})\"\n        message: \"Chat buttons must have accessible names via visible text, aria-label, or aria-labelledby for screen reader identification.\"\n\n      # Chat button missing proper role\n      - pattern: \"(?i)<(div|span)[^>]*(?:chat|conversation|support)[^>]*>\"\n        pattern_negate: \"(role=\\\"button\\\"|<button)\"\n        message: \"Chat controls styled as buttons must have role='button' or use native button elements for proper semantics.\"\n\n      # Chat window missing expandable state management\n      - pattern: \"(?i)<(button|div)[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Expandable chat windows must have aria-expanded attribute to indicate open/closed state for screen readers.\"\n\n      # Chat window missing aria-controls\n      - pattern: \"(?i)<(button|div)[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n        message: \"Chat controls must have aria-controls referencing the chat window ID for proper association.\"\n\n      # Chat timeout missing user notification\n      - pattern: \"(?i)(timeout|session.*expir|inactive)\"\n        pattern_negate: \"(notification|warning|extend|20.*second)\"\n        message: \"Chat timeouts must notify users before expiration and provide at least 20 seconds to extend the session.\"\n\n      # Chat auto-update missing pause controls\n      - pattern: \"(?i)(auto.*update|real.*time|live.*update)\"\n        pattern_negate: \"(pause|stop|hide|user.*control)\"\n        message: \"Auto-updating chat content must provide pause/stop controls to prevent overwhelming screen reader users.\"\n\n      # Chat missing persistent notification system\n      - pattern: \"(?i)<(div|section)[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(notification.*badge|aria-live.*polite|role.*status)\"\n        message: \"Chat windows must provide persistent notification system including visual badge counter and persistent screen reader announcements when closed.\"\n\n      # Chat focus not contained within popup\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(focus.*trap|tabindex|aria-modal)\"\n        message: \"Chat popup windows must contain keyboard focus to prevent focus from becoming obscured behind the dialog.\"\n\n      # Chat messages missing proper contrast\n      - pattern: \"(?i)<(p|div)[^>]*(?:message|chat)[^>]*>\"\n        pattern_negate: \"(color.*#[0-4][0-9a-fA-F]{5}|color.*#[5-9a-fA-F][0-9a-fA-F]{5})\"\n        message: \"Chat message text must meet WCAG contrast requirements (4.5:1 minimum for normal text, 3:1 for large text).\"\n\n      # Chat window not responsive\n      - pattern: \"(?i)<(div|section)[^>]*(?:chat|conversation)[^>]*>\"\n        pattern_negate: \"(max-width|min-width|flex|grid|responsive)\"\n        message: \"Chat windows must be responsive and work on devices down to 320px width without horizontal scrolling.\"\n\n      # Chat icon missing alt text\n      - pattern: \"(?i)<img[^>]*(?:chat|conversation|support)[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]+\\\"\"\n        message: \"Chat-related images must have descriptive alt text for screen reader users.\"\n\n      # Chat status messages missing role\n      - pattern: \"(?i)<(div|span)[^>]*(?:status|notification|typing)[^>]*>\"\n        pattern_negate: \"role=\\\"(status|log|alert)\\\"\"\n        message: \"Chat status messages must use appropriate ARIA roles (status, log, or alert) for screen reader announcements.\"\n\n  - type: suggest\n    message: |\n      **WCAG Chat Window Accessibility Requirements:**\n\n      **Key Accessibility Features:**\n      - **Easy to find and use:** Intuitive placement and clear labeling\n      - **Multi-sensory notifications:** Visual, auditory, and haptic feedback\n      - **Universal access:** All features available to all users\n      - **Message preservation:** All messages accessible to everyone\n\n      **WCAG Criteria Implementation:**\n\n      **1. Info and Relationships (WCAG 1.3.1):**\n      - **Author identification:** Each message must clearly indicate who sent it\n      - **Visual relationships:** Use semantic markup, not just visual styling\n      - **Screen reader support:** Provide context for message ownership\n\n      **2. Meaningful Sequence (WCAG 1.3.2):**\n      - **Chronological order:** Messages must appear in DOM order matching visual order\n      - **Avoid columns:** Don't separate user/agent messages into different containers\n      - **Reading flow:** Maintain logical conversation sequence for screen readers\n\n      **3. Sensory Characteristics (WCAG 1.3.3):**\n      - **Multiple notification methods:** Combine sound, visual, and screen reader announcements\n      - **No single sense dependency:** Don't rely solely on audio or visual cues\n      - **Universal alerts:** Ensure notifications work for all users\n\n      **4. Orientation (WCAG 1.3.4):**\n      - **Responsive design:** Work in both portrait and landscape modes\n      - **No orientation locks:** Allow users to choose their preferred orientation\n      - **Flexible layouts:** Adapt to different screen sizes and orientations\n\n      **5. Contrast (WCAG 1.4.3):**\n      - **Text contrast:** 4.5:1 minimum for normal text, 3:1 for large text\n      - **Background contrast:** Ensure sufficient contrast for all text elements\n      - **Visual clarity:** Make messages easily readable for all users\n\n      **6. Reflow (WCAG 1.4.10):**\n      - **Responsive design:** Work on devices down to 320px width\n      - **No horizontal scroll:** Content must fit without horizontal scrolling\n      - **Flexible layouts:** Use CSS Grid and Flexbox for adaptability\n\n      **7. Non-text Contrast (WCAG 1.4.11):**\n      - **Image alternatives:** Provide alt text for all images and icons\n      - **Icon identification:** Ensure chat icons are properly labeled\n      - **Visual elements:** Make all non-text content accessible\n\n      **8. Keyboard (WCAG 2.1.1):**\n      - **Full keyboard support:** All chat functions must work with keyboard\n      - **Navigation:** Support Tab, Enter, Space, and Escape keys\n      - **No mouse dependency:** Ensure keyboard-only users can fully participate\n\n      **9. No Keyboard Trap (WCAG 2.1.2):**\n      - **Focus management:** Proper focus trapping within chat windows\n      - **Escape mechanism:** Provide clear way to exit chat\n      - **Focus restoration:** Return focus to launcher when chat closes\n      - **Focus trap:** Prevent keyboard navigation outside chat window while open\n\n      **11. Timing Adjustable (WCAG 2.2.1):**\n      - **Session timeouts:** Notify users before session expiration (minimum 30 seconds notice)\n      - **Extension options:** Provide at least 20 seconds to extend\n      - **Character monitoring:** Listen for input changes, not just key presses\n      - **Screen reader notification:** Use dedicated role=\"alert\" element for important timeout warnings\n\n      **12. Pause, Stop, Hide (WCAG 2.2.2):**\n      - **Content control:** Allow users to pause auto-updating content\n      - **Overwhelm prevention:** Provide mechanisms to reduce screen reader noise\n      - **Essential content:** Balance accessibility with functionality\n\n      **13. Enhanced Notifications (WCAG 4.1.3):**\n      - **Persistent notifications:** Provide visual badge counter on chat launcher when closed\n      - **Screen reader announcements:** Persistent aria-live regions for notifications when chat window is closed\n      - **Multi-sensory feedback:** Combine visual, auditory, and screen reader notifications\n      - **Context awareness:** Notify users about new messages even when chat window is not open\n      - **Enhanced button labeling:** Dynamic accessible name that includes unread message count for better context\n\n      **14. User Interaction Monitoring (WCAG 2.2.1):**\n      - **Session extension on interaction:** Extend chat session on any user interaction, not just sent messages\n      - **Comprehensive monitoring:** Monitor clicks, key presses, input changes, scrolling, and focus events\n      - **Assistive technology support:** Ensure users with typing difficulties can extend sessions through other interactions\n      - **Immediate response:** Reset session timer immediately on any user engagement\n\n      **15. Focus Not Obscured (WCAG 2.4.11):**\n      - **Focus visibility:** Ensure keyboard focus is always visible\n      - **Modal containment:** Keep focus within chat popup windows\n      - **Background prevention:** Don't let focus move behind chat windows\n\n      **16. Name, Role, Value (WCAG 4.1.2):**\n      - **Accessible names:** Clear labels for all interactive elements\n      - **Proper roles:** Use semantic HTML or appropriate ARIA roles\n      - **State management:** Maintain and communicate current states\n\n      **17. Status Messages (WCAG 4.1.3):**\n      - **Real-time updates:** Announce new messages and status changes\n      - **Context awareness:** Provide appropriate level of detail\n      - **Screen reader support:** Use role='log' for message history\n\n      **18. Modal Dialog Requirements:**\n      - **aria-haspopup=\"dialog\":** Set on chat launcher buttons (no aria-controls or aria-expanded needed)\n      - **Focus trapping:** Prevent keyboard navigation outside chat window\n      - **Initial focus:** Move focus to first focusable element when chat opens\n      - **Focus restoration:** Return focus to launcher when chat closes\n      - **Escape key:** Close chat window with Escape key\n      - **Focus trap implementation:** Must handle both forward (Tab) and backward (Shift+Tab) navigation\n      - **Focusable element detection:** Include all interactive elements (buttons, inputs, textareas, links, custom focusable elements)\n      - **Safety checks:** Additional validation to ensure focus remains within chat window\n\n      **Implementation Patterns:**\n\n      **1. Basic Chat Window Structure (Modal Dialog Pattern):**\n      ```html\n      <!-- Chat launcher button -->\n      <button id=\"chat-launcher\"\n              aria-haspopup=\"dialog\">\n        <img src=\"chat-icon.png\" alt=\"\" />\n        Chat with Support\n        <span id=\"notification-badge\" class=\"notification-badge\" hidden>0</span>\n      </button>\n\n      **Note:** For modal dialog pattern, use only `aria-haspup=\"dialog\"`. Do not use `aria-controls` or `aria-expanded` as these are not needed for modal dialogs.\n\n      <!-- Chat window -->\n      <div id=\"chat-window\"\n           role=\"dialog\"\n           aria-modal=\"true\"\n           aria-labelledby=\"chat-heading\"\n           hidden>\n        <div class=\"chat-header\">\n          <h2 id=\"chat-heading\">Chat: Customer Support</h2>\n          <button type=\"button\"\n                  aria-label=\"Close chat\"\n                  onclick=\"closeChat()\">\n            ×\n          </button>\n        </div>\n\n        <!-- Message log -->\n        <div class=\"chat-messages\"\n             role=\"log\"\n             aria-labelledby=\"chat-heading\">\n          <div class=\"message agent\" role=\"article\">\n            <div class=\"message-content\">\n              <span class=\"sr-only\">Customer Support: </span>\n              Hi, how can I help you today?\n            </div>\n            <time class=\"message-time\" datetime=\"2024-01-15T10:00:00Z\">10:00 AM</time>\n          </div>\n          <div class=\"message user\" role=\"article\">\n            <div class=\"message-content\">\n              <span class=\"sr-only\">You sent: </span>\n              I'm having trouble resetting my password.\n            </div>\n            <time class=\"message-time\" datetime=\"2024-01-15T10:01:00Z\">10:01 AM</time>\n          </div>\n        </div>\n\n        <!-- Input area -->\n        <div class=\"chat-input\">\n          <label for=\"message-input\" class=\"visually-hidden\">Type your message:</label>\n          <textarea id=\"message-input\"\n                    placeholder=\"Type your message...\"\n                    aria-label=\"Type your message\"></textarea>\n          <button type=\"button\"\n                  aria-label=\"Send message\"\n                  onclick=\"sendMessage()\">\n            Send\n          </button>\n        </div>\n      </div>\n      ```\n\n      **2. Chat Message Structure:**\n      ```html\n      <!-- Good: Proper message structure with author identification -->\n      <div class=\"chat-messages\" role=\"log\" aria-labelledby=\"chat-heading\">\n        <div class=\"message agent\">\n          <div class=\"message-content\">\n            <span class=\"sr-only\">Customer Support: </span>\n            Hi, how can I help you today?\n          </div>\n          <time class=\"message-time\" datetime=\"2024-01-15T10:00:00Z\">10:00 AM</time>\n        </div>\n        <div class=\"message user\">\n          <div class=\"message-content\">\n            <span class=\"sr-only\">You sent: </span>\n            I'm having trouble resetting my password.\n          </div>\n          <time class=\"message-time\" datetime=\"2024-01-15T10:01:00Z\">10:01 AM</time>\n        </div>\n        <div class=\"message agent\">\n          <div class=\"message-content\">\n            <span class=\"sr-only\">Customer Support: </span>\n            I can help with that. What's your email address?\n          </div>\n          <time class=\"message-time\" datetime=\"2024-01-15T10:01:30Z\">10:01 AM</time>\n        </div>\n      </div>\n\n      **Note:** Use div elements for chat messages instead of role=\"article\" to reduce navigation noise for screen reader users. Chat messages are conversational content rather than standalone articles.\n\n      <!-- Bad: Separate columns that break reading order -->\n      <div class=\"chat-columns\">\n        <div class=\"left-column\">\n          <p>Customer Support: Hi</p>\n          <p>Customer Support: How can I help?</p>\n        </div>\n        <div class=\"right-column\">\n          <p>Me: Hi</p>\n          <p>Me: I need help</p>\n        </div>\n      </div>\n      ```\n\n      **3. Multi-Sensory Notifications:**\n      ```html\n      <!-- Status message for new messages -->\n      <div role=\"status\" aria-live=\"polite\" class=\"chat-status\">\n        New message received\n      </div>\n\n      <!-- Visual notification -->\n      <div class=\"chat-notification\" aria-hidden=\"true\">\n        <span class=\"notification-badge\">1</span>\n      </div>\n\n      <!-- Page title update -->\n      <script>\n        function updatePageTitle(message) {\n          const originalTitle = document.title;\n          document.title = `New message - ${originalTitle}`;\n\n          // Restore title after 5 seconds\n          setTimeout(() => {\n            document.title = originalTitle;\n          }, 5000);\n        }\n      </script>\n      ```\n\n      **4. Enhanced Notification System:**\n      ```html\n      <!-- Chat launcher with notification badge -->\n      <button id=\"chat-launcher\"\n              class=\"chat-launcher\"\n              aria-haspopup=\"dialog\">\n        <img src=\"chat-icon.png\" alt=\"\" />\n        Chat with Support\n        <span id=\"notification-badge\" class=\"notification-badge\" hidden>0</span>\n      </button>\n\n      **Note:** The notification badge is part of the button's accessible name, not hidden from screen readers. This provides better context about unread messages.\n\n      **5. Enhanced Button Labeling:**\n      ```html\n      <!-- Dynamic accessible name based on message count -->\n      <button id=\"chat-launcher\"\n              class=\"chat-launcher\"\n              aria-haspopup=\"dialog\">\n        <img src=\"chat-icon.png\" alt=\"\" />\n        Chat with Support\n        <span id=\"notification-badge\" class=\"notification-badge\" hidden>0</span>\n      </button>\n      ```\n\n      **JavaScript for Dynamic Labeling:**\n      ```javascript\n      // Update button's accessible name to include message count\n      function updateNotificationBadge() {\n        const launcher = document.getElementById('chat-launcher');\n\n        if (messageCount === 1) {\n          launcher.setAttribute('aria-label', 'Chat with Support - 1 new message');\n        } else if (messageCount > 1) {\n          launcher.setAttribute('aria-label', `Chat with Support - ${messageCount} new messages`);\n        }\n      }\n\n      // Reset button's accessible name when chat is opened\n      function clearNotificationBadge() {\n        const launcher = document.getElementById('chat-launcher');\n        launcher.removeAttribute('aria-label');\n      }\n      ```\n\n      <!-- Persistent notification area for screen readers -->\n      <div id=\"chat-notifications\"\n           role=\"status\"\n           aria-live=\"polite\"\n           class=\"sr-only\"\n           aria-label=\"Chat notifications\">\n      </div>\n\n      <style>\n        .notification-badge {\n          position: absolute;\n          top: -5px;\n          right: -5px;\n          background: #dc3545;\n          color: white;\n          border-radius: 50%;\n          width: 20px;\n          height: 20px;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          font-size: 0.75rem;\n          font-weight: bold;\n          transition: all 0.3s ease;\n        }\n\n        .notification-badge.show {\n          animation: pulse 2s infinite;\n        }\n\n        @keyframes pulse {\n          0% { transform: scale(1); }\n          50% { transform: scale(1.1); }\n          100% { transform: scale(1); }\n        }\n      </style>\n\n      <script>\n        let messageCount = 0;\n\n                // Update notification badge\n        function updateNotificationBadge() {\n          const badge = document.getElementById('notification-badge');\n          const chatWindow = document.getElementById('chat-window');\n          const launcher = document.getElementById('chat-launcher');\n\n          if (badge) {\n            // Only show badge when chat is closed\n            if (chatWindow.classList.contains('hidden')) {\n              badge.hidden = false;\n              badge.textContent = messageCount;\n              badge.classList.add('show');\n\n              // Update button's accessible name to include message count\n              if (messageCount === 1) {\n                launcher.setAttribute('aria-label', 'Chat with Support - 1 new message');\n              } else if (messageCount > 1) {\n                launcher.setAttribute('aria-label', `Chat with Support - ${messageCount} new messages`);\n              }\n\n              // Remove animation after 2 seconds\n              setTimeout(() => {\n                badge.classList.remove('show');\n              }, 2000);\n            } else {\n              // Hide badge when chat is open\n              badge.hidden = true;\n            }\n          }\n        }\n\n        // Announce persistent notification for screen readers\n        function announcePersistentNotification(sender) {\n          const notificationArea = document.getElementById('chat-notifications');\n          const chatWindow = document.getElementById('chat-window');\n\n          if (notificationArea && chatWindow.classList.contains('hidden')) {\n            const message = `New message from ${sender === 'agent' ? 'Customer Support' : 'you'}. Chat window is closed.`;\n            notificationArea.textContent = message;\n\n            // Clear notification after 3 seconds\n            setTimeout(() => {\n              notificationArea.textContent = '';\n            }, 3000);\n          }\n        }\n\n        // Clear notification badge\n        function clearNotificationBadge() {\n          const badge = document.getElementById('notification-badge');\n          const launcher = document.getElementById('chat-launcher');\n\n          if (badge) {\n            badge.hidden = true;\n            badge.classList.remove('show');\n          }\n\n          // Reset button's accessible name\n          if (launcher) {\n            launcher.removeAttribute('aria-label');\n          }\n        }\n      </script>\n      ```\n\n      **6. Focus Management:**\n      ```html\n      <!-- Chat popup with focus management -->\n      <div role=\"dialog\"\n           aria-modal=\"true\"\n           aria-labelledby=\"chat-heading\"\n           class=\"chat-popup\">\n        <div class=\"chat-header\">\n          <h2 id=\"chat-heading\">Chat Support</h2>\n          <button type=\"button\"\n                  aria-label=\"Close chat\"\n                  onclick=\"closeChat()\">\n            ×\n          </button>\n        </div>\n\n        <div class=\"chat-content\" tabindex=\"-1\">\n          <!-- Chat messages and input -->\n        </div>\n      </div>\n\n      <script>\n        function openChat() {\n          const chatWindow = document.getElementById('chat-window');\n          const launcher = document.getElementById('chat-launcher');\n\n          chatWindow.hidden = false;\n          launcher.setAttribute('aria-expanded', 'true');\n\n          // Focus first focusable element in chat\n          const firstFocusable = chatWindow.querySelector('button, input, textarea');\n          if (firstFocusable) {\n            firstFocusable.focus();\n          }\n        }\n\n        function closeChat() {\n          const chatWindow = document.getElementById('chat-window');\n          const launcher = document.getElementById('chat-launcher');\n\n          chatWindow.hidden = true;\n          launcher.setAttribute('aria-expanded', 'false');\n\n          // Return focus to launcher\n          launcher.focus();\n        }\n      </script>\n      ```\n\n      **7. Session Timeout Management:**\n      ```html\n      <!-- Timeout warning -->\n      <div class=\"timeout-warning\" hidden>\n        <p>This chat will end in <span id=\"timeout-countdown\">20</span> seconds if you do not reply.</p>\n        <button type=\"button\" onclick=\"extendSession()\">Extend Session</button>\n      </div>\n\n      <!-- Timeout alert for screen readers -->\n      <div role=\"alert\" aria-live=\"assertive\" class=\"timeout-alert\" hidden>\n        This chat will end in 20 seconds if you do not reply.\n      </div>\n\n      <script>\n        let sessionTimeout;\n        let warningTimeout;\n\n        function startSessionTimer() {\n          // Start 5-minute session timer\n          sessionTimeout = setTimeout(() => {\n            showTimeoutWarning();\n          }, 280000); // 4 minutes 40 seconds\n        }\n\n        function showTimeoutWarning() {\n          const warning = document.querySelector('.timeout-warning');\n          const countdown = document.getElementById('timeout-countdown');\n          const timeoutAlert = document.querySelector('.timeout-alert');\n\n          warning.hidden = false;\n          timeoutAlert.hidden = false;\n\n          // 20-second countdown\n          let timeLeft = 20;\n          const countdownInterval = setInterval(() => {\n            timeLeft--;\n            countdown.textContent = timeLeft;\n\n            if (timeLeft <= 0) {\n              clearInterval(countdownInterval);\n              endSession();\n            }\n          }, 1000);\n        }\n\n        function extendSession() {\n          // Set session as extended FIRST to prevent any race conditions\n          isSessionExtended = true;\n\n          const warning = document.querySelector('.timeout-warning');\n          const timeoutAlert = document.querySelector('.timeout-alert');\n\n          // Clear any existing warning timeout\n          if (warningTimeout) {\n            clearInterval(warningTimeout);\n            warningTimeout = null;\n          }\n\n          // Clear the main session timeout as well\n          if (sessionTimeout) {\n            clearTimeout(sessionTimeout);\n            sessionTimeout = null;\n          }\n\n          // Hide warning elements\n          if (warning) warning.hidden = true;\n          if (timeoutAlert) timeoutAlert.hidden = true;\n\n          // Start fresh session timer\n          startSessionTimer();\n        }\n\n        // Extend session on user interaction\n        function extendSessionOnInteraction() {\n          // Only extend if warning is currently showing\n          const warning = document.querySelector('.timeout-warning');\n          if (warning && !warning.hidden) {\n            extendSession();\n          } else {\n            // Just reset the session timer\n            clearTimeout(sessionTimeout);\n            clearInterval(warningTimeout); // Also clear any warning timeout that might be running\n            isSessionExtended = true; // Mark session as extended\n            startSessionTimer();\n          }\n        }\n\n        // Monitor input for activity\n        document.getElementById('message-input').addEventListener('input', () => {\n          // Reset timer on any input\n          clearTimeout(sessionTimeout);\n          startSessionTimer();\n        });\n\n        // Setup comprehensive user interaction monitoring\n        function setupUserInteractionListeners() {\n          const chatWindow = document.getElementById('chat-window');\n\n          // Add listeners for various user interactions\n          chatWindow.addEventListener('click', extendSessionOnInteraction);\n          chatWindow.addEventListener('keydown', extendSessionOnInteraction);\n          chatWindow.addEventListener('keypress', extendSessionOnInteraction);\n          chatWindow.addEventListener('input', extendSessionOnInteraction);\n          chatWindow.addEventListener('scroll', extendSessionOnInteraction);\n\n          // Also listen for focus events on interactive elements\n          const interactiveElements = chatWindow.querySelectorAll('button, input, textarea, [tabindex]:not([tabindex=\"-1\"])');\n          interactiveElements.forEach(element => {\n            element.addEventListener('focus', extendSessionOnInteraction);\n          });\n        }\n      </script>\n      ```\n\n      **Note:** The timeout warning should appear with sufficient notice (minimum 30 seconds) and use a dedicated `role=\"alert\"` element for screen reader announcements. This ensures important timeout information is properly communicated without interfering with chat functionality.\n\n      **8. User Interaction Monitoring:**\n      ```javascript\n      // Setup comprehensive user interaction monitoring\n      function setupUserInteractionListeners() {\n        const chatWindow = document.getElementById('chat-window');\n\n        // Add listeners for various user interactions\n        chatWindow.addEventListener('click', extendSessionOnInteraction);\n        chatWindow.addEventListener('keydown', extendSessionOnInteraction);\n        chatWindow.addEventListener('keypress', extendSessionOnInteraction);\n        chatWindow.addEventListener('input', extendSessionOnInteraction);\n        chatWindow.addEventListener('scroll', extendSessionOnInteraction);\n\n        // Also listen for focus events on interactive elements\n        const interactiveElements = chatWindow.querySelectorAll('button, input, textarea, [tabindex]:not([tabindex=\"-1\"])');\n        interactiveElements.forEach(element => {\n          element.addEventListener('focus', extendSessionOnInteraction);\n        });\n      }\n      ```\n\n      **Note:** Chat sessions should extend on any user interaction, not just sent messages. This is crucial for assistive technology users who may have difficulty typing or need more time to compose messages. Monitor clicks, key presses, input changes, scrolling, and focus events to ensure the session remains active during user engagement.\n\n      **Important:** When extending sessions, ensure both the main session timeout and warning timeout are properly cleared to prevent race conditions where the session can end even after being extended.\n\n      **Session State Management:** Use a dedicated boolean flag (`isSessionExtended`) to track session extension state, rather than relying on DOM element visibility. This prevents race conditions and ensures reliable session management.\n\n      **Race Condition Prevention:** Set the session extension flag BEFORE clearing timeouts to prevent race conditions where the countdown might still call `endSession()` after the session has been extended.\n\n      **Countdown Safety:** Implement proper bounds checking to prevent negative countdown values and ensure the countdown stops immediately when the session is extended. Clear existing intervals before starting new ones to prevent multiple countdowns from running simultaneously.\n\n      **Session Ending Protection:** Implement multiple safety checks in the `endSession()` function to prevent premature session termination. Check session extension status, session activity state, and warning visibility before allowing the session to end.\n\n      **Visual Design Consistency:** Follow the established design pattern used across all accessibility example files, including consistent container styling, typography, color scheme, and layout structure for a cohesive user experience.\n\n      **9. Responsive Chat Design:**\n      ```css\n      /* Responsive chat window */\n      .chat-window {\n        position: fixed;\n        bottom: 20px;\n        right: 20px;\n        width: 350px;\n        height: 500px;\n        max-width: calc(100vw - 40px);\n        max-height: calc(100vh - 40px);\n        background: white;\n        border: 1px solid #ccc;\n        border-radius: 8px;\n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n        display: flex;\n        flex-direction: column;\n      }\n\n      /* Mobile responsive adjustments */\n      @media screen and (max-width: 480px) {\n        .chat-window {\n          bottom: 0;\n          right: 0;\n          width: 100%;\n          height: 100vh;\n          max-width: none;\n          max-height: none;\n          border-radius: 0;\n        }\n      }\n\n      /* Ensure minimum width compliance */\n      @media screen and (max-width: 320px) {\n        .chat-window {\n          width: 320px;\n          min-width: 320px;\n        }\n      }\n      ```\n\n      **10. Screen Reader Optimized Messages:**\n      ```html\n      <!-- Message with proper structure -->\n      <div class=\"message agent\" role=\"article\">\n        <div class=\"message-content\">\n          <span class=\"sr-only\">Customer Support: </span>\n          Hi, how can I help you today?\n        </div>\n        <time datetime=\"2024-01-15T10:30:00Z\" class=\"timestamp\">\n          <span class=\"sr-only\">Message sent at </span>\n          10:30 AM\n        </time>\n      </div>\n\n      <!-- Typing indicator -->\n      <div class=\"typing-indicator\" aria-live=\"polite\">\n        <span class=\"visually-hidden\">Customer Support is typing</span>\n        <span class=\"typing-dots\">...</span>\n      </div>\n      ```\n\n      **11. Proper Focus Trap Implementation:**\n      ```javascript\n      // Focus trap variables\n      let focusableElements = [];\n      let firstFocusableElement = null;\n      let lastFocusableElement = null;\n\n      // Setup focus trap\n      function setupFocusTrap() {\n        const chatWindow = document.getElementById('chat-window');\n\n        // Get all focusable elements within the chat window\n        // Include all interactive elements that can receive focus\n        focusableElements = chatWindow.querySelectorAll(\n          'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [role=\"button\"]:not([disabled])'\n        );\n\n        if (focusableElements.length > 0) {\n          firstFocusableElement = focusableElements[0];\n          lastFocusableElement = focusableElements[focusableElements.length - 1];\n\n          // Add focus trap event listener\n          chatWindow.addEventListener('keydown', trapFocus);\n        }\n      }\n\n      // Focus trap functionality\n      function trapFocus(event) {\n        if (event.key === 'Tab') {\n          // Check if focus is currently within the chat window\n          const chatWindow = document.getElementById('chat-window');\n          const isFocusInChat = chatWindow.contains(document.activeElement);\n\n          if (event.shiftKey) {\n            // Shift + Tab: move backwards\n            if (document.activeElement === firstFocusableElement) {\n              event.preventDefault();\n              lastFocusableElement.focus();\n            }\n          } else {\n            // Tab: move forwards\n            if (document.activeElement === lastFocusableElement) {\n              event.preventDefault();\n              firstFocusableElement.focus();\n            }\n          }\n\n          // Additional safety check: if focus somehow escapes, bring it back\n          if (!isFocusInChat && focusableElements.length > 0) {\n            event.preventDefault();\n            firstFocusableElement.focus();\n          }\n        }\n      }\n\n      // Clean up focus trap when closing chat\n      function closeChat() {\n        const chatWindow = document.getElementById('chat-window');\n        const launcher = document.getElementById('chat-launcher');\n\n        chatWindow.hidden = true;\n        launcher.setAttribute('aria-expanded', 'false');\n\n        // Remove focus trap\n        chatWindow.removeEventListener('keydown', trapFocus);\n\n        // Return focus to launcher\n        launcher.focus();\n      }\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper focus management for popup windows\n      - Handle keyboard navigation (Tab, Enter, Escape)\n      - Manage session timeouts with user notifications\n      - Provide pause/stop controls for auto-updating content\n      - Update page titles for new message notifications\n      - Monitor input activity for session extension\n      - Handle focus restoration when chat closes\n      - Implement proper ARIA live regions for status updates\n\n      **Accessibility Notes:**\n      - Use role=\"log\" for message history with aria-labelledby\n      - Provide multi-sensory notifications for new messages\n      - Maintain chronological message order in DOM\n      - Ensure all interactive elements have accessible names\n      - Test with screen readers for proper announcement\n      - Consider user preferences for notification levels\n      - Provide alternatives to chat (phone, email, etc.)\n      - Test keyboard navigation thoroughly\n      - Validate focus management in popup windows\n      - Use div elements for chat messages to reduce navigation noise (avoid role=\"article\")\n      - Chat messages are conversational content, not standalone articles\n\n      **Testing Requirements:**\n      - Test with screen readers (NVDA, JAWS, VoiceOver)\n      - Verify keyboard navigation works completely\n      - Test focus management in popup windows\n      - Validate message reading order\n      - Test timeout notifications and extensions\n      - Verify responsive design on small screens\n      - Test with different notification preferences\n      - Validate ARIA live region announcements\n      - Test focus restoration when chat closes\n      - Verify contrast ratios meet WCAG requirements\n      - **Test focus trapping thoroughly:** Verify Tab and Shift+Tab navigation stays within chat window\n      - **Test focus escape scenarios:** Ensure focus cannot accidentally leave the chat window\n      - **Test focus restoration:** Verify focus returns to launcher when chat closes\n      - **Test all interactive elements:** Ensure all buttons, inputs, and focusable elements are included in focus trap\n\n      **Common Mistakes to Avoid:**\n      - Chat messages in wrong DOM order\n      - Notifications relying only on sound\n      - Missing keyboard support for chat functions\n      - Poor focus management in popup windows\n      - Missing author identification in messages\n      - Chat windows not responsive to small screens\n      - Missing timeout warnings and extensions\n      - Auto-updating content without pause controls\n      - Focus becoming obscured behind chat windows\n      - Missing accessible names for chat controls\n      - Chat buttons without proper roles\n      - Missing expandable state management\n      - Insufficient contrast for message text\n      - Chat icons without alt text\n      - Missing status message roles\n      - Missing aria-haspopup=\"dialog\" on chat launcher\n      - Missing focus trapping in chat popup windows\n      - Poor focus management when opening/closing chat\n      - **Incomplete focus trap implementation:** Focus trap that only works in one direction (Tab vs Shift+Tab)\n      - **Missing focusable elements:** Focus trap that doesn't include all interactive elements\n      - **Focus escape vulnerabilities:** Focus trap without safety checks to prevent focus from leaving chat window\n      - **Incorrect ARIA attributes for modal dialogs:** Using aria-controls or aria-expanded with modal dialog pattern\n      - **Missing notification context:** Not including unread message count in button's accessible name\n      - **Decorative images with alt text:** Including unnecessary alt text for decorative icons in buttons\n      - **Limited session extension:** Only extending chat session on sent messages instead of all user interactions\n      - **Missing user interaction monitoring:** Not monitoring clicks, key presses, scrolling, and focus events for session extension\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/color-contrast-accessibility.mdc",
    "content": "---\ndescription: Text and user interface color contrast compliance with WCAG 2.2 1.4.3 and 1.4.11\nglobs: *.css, *.scss, *.sass, *.less, *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts\nalwaysApply: true\n---\n# Color Contrast Accessibility Standards\n\nEnsures color contrast meets WCAG 2.2 1.4.3: Contrast (Minimum) and 1.4.11: Non-text Contrast requirements.\n\n<rule>\nname: color_contrast_accessibility_standards\ndescription: Enforce color contrast accessibility standards per WCAG 2.2 1.4.3 and 1.4.11\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(css|scss|sass|less|vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Common low-contrast text color combinations\n      - pattern: \"color:\\\\s*#[89abcdefABCDEF]{6}\"\n        message: \"Light text colors may not meet 4.5:1 contrast ratio requirement. Verify contrast against background.\"\n\n      - pattern: \"color:\\\\s*#[0-6]{6}\"\n        message: \"Very light text colors likely fail contrast requirements. Use darker colors for better accessibility.\"\n\n      # Light gray text (common accessibility issue)\n      - pattern: \"color:\\\\s*(#[cdefCDEF]{3,6}|lightgray|lightgrey|silver)\"\n        message: \"Light gray text often fails WCAG contrast requirements (4.5:1 minimum). Use darker colors.\"\n\n      # Common problematic color combinations\n      - pattern: \"background.*#fff.*color.*#[89abcdefABCDEF]\"\n        message: \"Light text on white background may not meet 4.5:1 contrast ratio requirement.\"\n\n      - pattern: \"background.*#f[0-9a-fA-F]{5}.*color.*#[89abcdefABCDEF]\"\n        message: \"Light text on light background may not meet contrast requirements.\"\n\n      # UI component border/focus indicators\n      - pattern: \"border.*#[cdefCDEF]{3,6}\"\n        message: \"Light borders may not meet 3:1 non-text contrast requirement for UI components.\"\n\n      - pattern: \"outline.*#[cdefCDEF]{3,6}\"\n        message: \"Light focus outlines may not meet 3:1 contrast requirement for UI component identification.\"\n\n      # Button states with insufficient contrast\n      - pattern: \"button.*background.*#[cdefCDEF]{3,6}\"\n        message: \"Light button backgrounds may not provide sufficient 3:1 contrast for UI component identification.\"\n\n      # Form input borders\n      - pattern: \"input.*border.*#[defDEF]{3,6}\"\n        message: \"Very light input borders may not meet 3:1 contrast requirement for form field identification.\"\n\n      # SVG icon fill colors that may lack contrast\n      - pattern: \"fill=\\\"#[cdefCDEF]{3,6}\\\"\"\n        message: \"Light SVG fill colors may not meet 3:1 contrast requirement for icon identification.\"\n\n      # SVG stroke colors for icon outlines\n      - pattern: \"stroke=\\\"#[defDEF]{3,6}\\\"\"\n        message: \"Very light SVG stroke colors may not provide sufficient contrast for icon visibility.\"\n\n      # Missing prefers-contrast considerations\n      - pattern: \"@media\\\\s*\\\\(prefers-contrast:\\\\s*more\\\\)\"\n        pattern_negate: \"color|background|border\"\n        message: \"prefers-contrast: more media query should include enhanced color/contrast properties.\"\n\n  - type: suggest\n    message: |\n      **WCAG 2.2 Color Contrast Requirements:**\n\n      **1.4.3: Text Contrast (Minimum) - Level AA:**\n      - **Normal Text:** Minimum 4.5:1 contrast ratio\n      - **Large Text:** Minimum 3:1 contrast ratio (18pt+ regular or 14pt+ bold)\n      - **Enhanced (Level AAA):** 7:1 for normal text, 4.5:1 for large text\n\n      **1.4.11: Non-text Contrast - Level AA:**\n      - **UI Components:** Minimum 3:1 contrast ratio for component identification\n      - **Focus Indicators:** Minimum 3:1 contrast ratio for focus visibility\n      - **Graphical Objects:** Minimum 3:1 contrast ratio for content understanding\n\n      **Exceptions (No Contrast Requirement):**\n      - Inactive/disabled UI components\n      - Pure decorative elements\n      - Text in logos or brand names\n      - Text that is not visible to users\n      - Graphics where specific presentation is essential\n\n      **High Contrast Color Combinations:**\n\n      **Dark Text on Light Backgrounds:**\n      - `#212529` on `#ffffff` - 16.6:1 ✅\n      - `#495057` on `#ffffff` - 8.3:1 ✅\n      - `#6c757d` on `#ffffff` - 5.4:1 ✅\n      - `#343a40` on `#f8f9fa` - 11.7:1 ✅\n\n      **Light Text on Dark Backgrounds:**\n      - `#ffffff` on `#212529` - 16.6:1 ✅\n      - `#f8f9fa` on `#495057` - 7.0:1 ✅\n      - `#ffffff` on `#0056b3` - 7.7:1 ✅\n      - `#ffffff` on `#dc3545` - 5.8:1 ✅\n\n      **UI Component Colors (3:1 minimum):**\n      - Focus outlines: `#0056b3`, `#dc3545`, `#198754`\n      - Border colors: `#ced4da`, `#adb5bd`, `#6c757d`\n      - Button states: `#0056b3`, `#157347`, `#b02a37`\n\n      **Implementation Examples:**\n\n      **CSS Text Contrast:**\n      ```css\n      /* Good: High contrast text */\n      .primary-text {\n        color: #212529;\n        background: #ffffff;\n      }\n\n      .secondary-text {\n        color: #495057;\n        background: #ffffff;\n      }\n\n      /* Good: Large text with 3:1 minimum */\n      .large-heading {\n        font-size: 18px;\n        font-weight: normal;\n        color: #6c757d;\n        background: #ffffff;\n      }\n      ```\n\n      **CSS UI Component Contrast:**\n      ```css\n      /* Good: Form inputs with sufficient border contrast */\n      .form-control {\n        border: 2px solid #ced4da; /* 3:1+ contrast */\n        background: #ffffff;\n      }\n\n      .form-control:focus {\n        border-color: #0056b3; /* High contrast focus */\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n      }\n\n      /* Good: Button states */\n      .btn-primary {\n        background: #0056b3;\n        color: #ffffff;\n        border: 1px solid #004085;\n      }\n      ```\n\n      **Contrast Testing:**\n      - Use browser dev tools color picker for contrast ratios\n      - Test with tools like WebAIM Contrast Checker\n      - Verify with automated accessibility testing tools\n      - Test with actual users who have visual impairments\n\n      **Common Problematic Combinations to Avoid:**\n      - Light gray text (#999999) on white backgrounds\n      - Yellow text (#ffff00) on white backgrounds\n      - Light blue links (#87ceeb) on white backgrounds\n      - Thin borders (#e0e0e0) for essential UI components\n      - Low contrast placeholder text\n      - Insufficient focus indicator contrast\n\n      **Responsive Considerations:**\n      - Maintain contrast ratios across all screen sizes\n      - Consider dark mode color schemes\n      - Test contrast in different lighting conditions\n      - Ensure contrast is maintained with CSS filters/effects\n\n      **CSS `prefers-contrast` Media Query:**\n      The `prefers-contrast` media query allows adaptation to user contrast preferences:\n\n      ```css\n      /* Default styles */\n      .button {\n        background: #0056b3;\n        color: #ffffff;\n        border: 1px solid #004085;\n      }\n\n      /* High contrast preference */\n      @media (prefers-contrast: more) {\n        .button {\n          background: #000000;\n          color: #ffffff;\n          border: 2px solid #ffffff;\n          font-weight: bold;\n        }\n\n        .text-secondary {\n          color: #000000; /* Increase from gray to black */\n        }\n\n        .form-control {\n          border: 3px solid #000000; /* Thicker, darker borders */\n        }\n      }\n\n      /* Low contrast preference (rare) */\n      @media (prefers-contrast: less) {\n        .high-contrast-element {\n          /* Reduce contrast only where specifically needed */\n          /* Still maintain minimum WCAG requirements */\n        }\n      }\n\n      /* Custom contrast preference */\n      @media (prefers-contrast: custom) {\n        /* Allow user-defined contrast settings */\n        /* Respect system/browser contrast customizations */\n      }\n      ```\n\n      **Icon Accessibility & Contrast Requirements:**\n      Icons are UI components and must meet 3:1 contrast ratio for identification:\n\n      **SVG Icon Examples:**\n      ```html\n      <!-- Good: High contrast icon -->\n      <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n           aria-label=\"Close dialog\" role=\"img\">\n        <path fill=\"#212529\"\n              d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n      </svg>\n\n      <!-- Good: Icon with sufficient background contrast -->\n      <button class=\"icon-button\" aria-label=\"Save document\">\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n          <path fill=\"#ffffff\"\n                d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V7l-4-4z\"/>\n        </svg>\n      </button>\n\n      /* CSS for icon button with 3:1 contrast */\n      .icon-button {\n        background: #0056b3; /* High contrast background */\n        border: 2px solid #004085; /* Visible border for component identification */\n        padding: 8px;\n        border-radius: 4px;\n      }\n\n      .icon-button:focus {\n        outline: 3px solid #ffd700; /* High contrast focus indicator */\n        outline-offset: 2px;\n      }\n      ```\n\n      **Icon Contrast Considerations:**\n      - **Informative Icons:** Must meet 3:1 contrast against background\n      - **Decorative Icons:** No contrast requirement (use `aria-hidden=\"true\"`)\n      - **Icon Buttons:** Both icon and button background need sufficient contrast\n      - **State Icons:** Different states (active/inactive) need distinguishable contrast\n      - **Icon + Text:** Ensure both elements meet their respective requirements\n\n      **Complex Icon Examples:**\n      ```css\n      /* Multi-state icon button */\n      .toggle-icon {\n        background: #f8f9fa;\n        border: 2px solid #6c757d; /* 3:1+ contrast for UI component */\n        color: #495057;\n      }\n\n      .toggle-icon[aria-pressed=\"true\"] {\n        background: #0056b3;\n        color: #ffffff;\n        border-color: #004085;\n      }\n\n      /* Icon with adaptive contrast */\n      @media (prefers-contrast: more) {\n        .icon-subtle {\n          filter: contrast(150%); /* Increase icon contrast */\n        }\n\n        .icon-button {\n          border-width: 3px; /* Thicker borders for better identification */\n        }\n      }\n      ```\n\n      **Design System Approach:**\n      - Establish a palette of WCAG-compliant color combinations\n      - Document contrast ratios for all color pairs\n      - Create design tokens with built-in accessibility\n      - Implement automated contrast checking in build process\n      - Define icon contrast standards for different contexts\n      - Test icons across different contrast preferences\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/color-swatch-accessibility.mdc",
    "content": "---\ndescription: Color swatch component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Color Swatch Variant Selector Component Accessibility Standards\n\nEnsures color swatch variant selectors follow WCAG compliance and provide proper accessibility for all users.\n\n<rule>\nname: color_swatch_accessibility_standards\ndescription: Enforce color swatch variant selector accessibility standards and WCAG compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Radio buttons hidden with display: none (accessibility blocker)\n      - pattern: \"(?i)input\\\\[type=\\\"radio\\\"\\\\].*\\\\{[^}]*display:\\\\s*none\"\n        message: \"Radio buttons must not use display: none as it removes keyboard and screen reader access. Use appearance: none or visually-hidden class instead.\"\n\n      # Color swatches missing accessible labels\n      - pattern: \"(?i)<input[^>]*type=\\\"radio\\\"[^>]*>\"\n        pattern_negate: \"(id.*for|label.*for)\"\n        message: \"Color swatch radio buttons must have associated label elements via id/for attributes.\"\n\n      # Color-only information without text alternatives\n      - pattern: \"(?i)<[^>]*(?:color|swatch|variant)[^>]*>\"\n        pattern_negate: \"(data-label|aria-label|title|data-tooltip|class.*tooltip)\"\n        message: \"Color swatches must include text alternatives (data-label, tooltips, labels) as color alone cannot convey information to all users.\"\n\n      # Missing fieldset and legend for variant groups\n      - pattern: \"(?i)<input[^>]*type=\\\"radio\\\"[^>]*name=\\\"[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(fieldset|role=\\\"group\\\"|aria-labelledby)\"\n        message: \"Radio button groups should be wrapped in fieldset with legend or have role='group' with aria-labelledby.\"\n\n      # Missing keyboard navigation support\n      - pattern: \"(?i)<[^>]*(?:color|swatch|variant)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown|tabindex)\"\n        message: \"Color swatch components should handle keyboard navigation (arrow keys) for variant selection.\"\n\n      # Missing focus indicators\n      - pattern: \"(?i)<[^>]*(?:color|swatch|variant)[^>]*>\"\n        pattern_negate: \"(focus|:focus|outline|box-shadow)\"\n        message: \"Color swatch components must have visible focus indicators for keyboard navigation.\"\n\n      # Tooltip missing proper accessibility\n      - pattern: \"(?i)<[^>]*(?:tooltip|title)[^>]*>\"\n        pattern_negate: \"(role=\\\"tooltip\\\"|aria-describedby|aria-label)\"\n        message: \"Color swatch tooltips must have proper ARIA attributes for screen reader accessibility.\"\n\n  - type: suggest\n    message: |\n      **Color Swatch Variant Selector Accessibility Best Practices:**\n\n      **Required Accessibility Features:**\n      - **Keyboard Navigation:** Arrow keys (←/→) to navigate between variants\n      - **Screen Reader Support:** Proper labeling and announcements\n      - **Focus Indicators:** Highly visible focus states\n      - **Text Alternatives:** Tooltips or labels for color information\n      - **Proper Styling:** Use appearance: none instead of display: none\n      - **Label Focus:** Labels automatically receive focus when their associated input is focused (no tabindex needed)\n      - **Input Focus:** Radio inputs are naturally focusable and part of tab order (no tabindex needed)\n\n      **Implementation Patterns:**\n\n      **Basic Color Swatch Structure:**\n      ```html\n      <fieldset class=\"color-swatches\">\n        <legend>Color</legend>\n        <div class=\"swatch-group\" role=\"radiogroup\" aria-labelledby=\"color-legend\">\n          <input type=\"radio\"\n                 id=\"color-red\"\n                 name=\"color\"\n                 value=\"red\"\n                 class=\"visually-hidden\">\n          <label for=\"color-red\"\n                 class=\"color-swatch\"\n                 data-label=\"Red - Classic crimson shade\">\n            <span class=\"swatch-color\" style=\"background-color: red;\"></span>\n          </label>\n\n          <input type=\"radio\"\n                 id=\"color-blue\"\n                 name=\"color\"\n                 value=\"blue\"\n                 class=\"visually-hidden\">\n          <label for=\"color-blue\"\n                 class=\"color-swatch\"\n                 data-label=\"Blue - Navy blue shade\">\n            <span class=\"swatch-color\" style=\"background-color: blue;\"></span>\n          </label>\n        </div>\n      </fieldset>\n      ```\n\n      **CSS for Accessible Styling:**\n      ```css\n      /* Visually hide radio buttons while keeping them accessible */\n      .visually-hidden {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        padding: 0;\n        margin: -1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n        border: 0;\n      }\n\n      /* Focus Management: Labels automatically receive focus when their input is focused */\n      /* No tabindex needed on labels - they are naturally focusable through their input association */\n      /* No tabindex needed on inputs - radio inputs are naturally focusable and part of tab order */\n\n      /* Alternative: Use appearance: none for custom styling */\n      input[type=\"radio\"] {\n        appearance: none;\n        -webkit-appearance: none;\n        -moz-appearance: none;\n        /* Custom styling here */\n      }\n\n      /* Color swatch styling */\n      .color-swatch {\n        display: inline-block;\n        width: 40px;\n        height: 40px;\n        border: 2px solid transparent;\n        border-radius: 50%;\n        cursor: pointer;\n        position: relative;\n        transition: border-color 0.2s ease;\n      }\n\n      .color-swatch:focus {\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n        border-color: #0056b3;\n      }\n\n      /* Show focus styles on label when input is focused */\n      .color-swatch:has(+ input:focus) {\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n        border-color: #0056b3;\n      }\n\n      /* Alternative: Use :focus-within for broader browser support */\n      .color-swatch:focus-within {\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n        border-color: #0056b3;\n      }\n\n      .color-swatch:has(+ input:checked) {\n        border-color: #212529;\n        box-shadow: 0 0 0 2px #fff, 0 0 0 4px #212529;\n      }\n\n      .swatch-color {\n        width: 100%;\n        height: 100%;\n        border-radius: 50%;\n        display: block;\n      }\n\n      /* Tooltip styling */\n      .color-swatch::after {\n        content: attr(data-label);\n        position: absolute;\n        bottom: 100%;\n        left: 50%;\n        transform: translateX(-50%);\n        background: #212529;\n        color: white;\n        padding: 4px 8px;\n        border-radius: 4px;\n        font-size: 0.75rem;\n        white-space: nowrap;\n        opacity: 0;\n        pointer-events: none;\n        transition: opacity 0.2s ease;\n        z-index: 1000;\n      }\n\n      .color-swatch:hover::after,\n      .color-swatch:focus::after,\n      .color-swatch:has(+ input:focus)::after {\n        opacity: 1;\n      }\n      ```\n"
  },
  {
    "path": ".cursor/rules/combobox-accessibility.mdc",
    "content": "---\ndescription: Combobox component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Combobox Component Accessibility Standards\n\nEnsures combobox components follow WCAG compliance and WAI-ARIA Combobox Pattern specifications.\n\n<rule>\nname: combobox_accessibility_standards\ndescription: Enforce combobox component accessibility standards and WAI-ARIA Combobox Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Combobox role requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:combobox|autocomplete)[^>]*>\"\n        pattern_negate: \"role=\\\"combobox\\\"\"\n        message: \"Combobox containers must have role='combobox' attribute.\"\n\n      # aria-expanded requirement\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Combobox elements must have aria-expanded attribute set to 'true' or 'false'.\"\n\n      # aria-haspopup requirement\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"listbox\\\"\"\n        message: \"Combobox elements must have aria-haspopup='listbox' attribute.\"\n\n      # aria-controls requirement\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n        message: \"Combobox elements must have aria-controls attribute referencing the ID of the associated listbox.\"\n\n      # aria-autocomplete requirement\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"aria-autocomplete=\\\"(list|both|inline|none)\\\"\"\n        message: \"Combobox elements must have aria-autocomplete attribute set to 'list', 'both', 'inline', or 'none'.\"\n\n      # aria-activedescendant requirement when expanded\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*aria-expanded=\\\"true\\\"[^>]*>\"\n        pattern_negate: \"aria-activedescendant=\\\"[^\\\"]+\\\"\"\n        message: \"Expanded combobox elements must have aria-activedescendant attribute referencing the ID of the active option.\"\n\n      # Listbox role requirement\n      - pattern: \"(?i)<(div|ul)[^>]*(?:listbox|dropdown|popup)[^>]*>\"\n        pattern_negate: \"role=\\\"listbox\\\"\"\n        message: \"Listbox containers must have role='listbox' attribute.\"\n\n      # Option role requirement\n      - pattern: \"(?i)<(div|li)[^>]*(?:option|item)[^>]*>\"\n        pattern_negate: \"role=\\\"option\\\"\"\n        message: \"Listbox options must have role='option' attribute.\"\n\n      # Option ID requirement for aria-activedescendant\n      - pattern: \"(?i)<[^>]*role=\\\"option\\\"[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Listbox options must have unique id attributes for aria-activedescendant to reference them.\"\n\n      # aria-selected requirement for options\n      - pattern: \"(?i)<[^>]*role=\\\"option\\\"[^>]*>\"\n        pattern_negate: \"aria-selected=\\\"(true|false)\\\"\"\n        message: \"Listbox options must have aria-selected attribute set to 'true' or 'false'.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Combobox elements should handle keyboard events (Arrow keys, Enter, Escape, etc.).\"\n\n      # Missing status region\n      - pattern: \"(?i)<[^>]*role=\\\"combobox\\\"[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\".*?<[^>]*role=\\\"status\\\"\"\n        message: \"Combobox should have a status region to announce available options.\"\n\n  - type: suggest\n    message: |\n      **Combobox Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='combobox':** Set on the input container element\n      - **aria-expanded:** 'true' if listbox is visible, 'false' if hidden\n      - **aria-haspopup='listbox':** Indicates the combobox has a listbox popup\n      - **aria-controls:** Reference to the ID of the associated listbox\n      - **aria-autocomplete:** 'list', 'both', 'inline', or 'none' based on behavior\n      - **aria-activedescendant:** Reference to the ID of the currently active option (remove when listbox is hidden)\n      - **role='listbox':** Set on the popup container element (preferably on a `ul` element)\n      - **role='option':** Set on each selectable item in the listbox (preferably on an `li` element)\n      - **id:** Unique ID on each option element for `aria-activedescendant` to reference\n      - **aria-selected:** 'true' or 'false' on each option\n      - **role='status':** Set on a visually hidden element to announce available options\n\n      **Keyboard Interaction Requirements:**\n      - **Down Arrow:** Open listbox and move focus to first option\n      - **Up Arrow:** Open listbox and move focus to last option\n      - **Enter/Space:** Select focused option and close listbox\n      - **Escape:** Close listbox without selection\n      - **Tab:** Move focus to next focusable element\n      - **Shift+Tab:** Move focus to previous focusable element\n      - **Home/End:** Move focus to first/last option\n      - **Character Keys:** Filter options based on input\n\n      **Focus Management:**\n      - Focus should remain on the input while navigating options\n      - Use aria-activedescendant to indicate the currently focused option\n      - Return focus to input after selection or closing\n      - Ensure focus is trapped within the combobox while open\n\n      **Status Region Requirements:**\n      - Must announce number of available options when listbox opens\n      - Must announce when no options are available\n      - Must use proper pluralization (\"1 item available\" vs \"2 items available\")\n      - Must be visually hidden but available to screen readers\n      - Should update dynamically as options are filtered\n\n      **Semantic HTML Structure:**\n      - Use `ul` element for the listbox container\n      - Use `li` elements for individual options\n      - This provides better semantic structure and is more appropriate for lists\n\n      **Implementation Example:**\n      ```html\n      <div class=\"combobox-container\">\n        <label for=\"combobox-input\">Select an option:</label>\n        <input type=\"text\"\n               id=\"combobox-input\"\n               role=\"combobox\"\n               aria-expanded=\"false\"\n               aria-haspopup=\"listbox\"\n               aria-controls=\"listbox-popup\"\n               aria-autocomplete=\"list\">\n        <ul id=\"listbox-popup\"\n            role=\"listbox\"\n            hidden>\n          <li role=\"option\"\n              id=\"option-1\"\n              aria-selected=\"false\">\n            Option 1\n          </li>\n          <li role=\"option\"\n              id=\"option-2\"\n              aria-selected=\"false\">\n            Option 2\n          </li>\n        </ul>\n        <div id=\"listbox-status\"\n             role=\"status\"\n             class=\"visually-hidden\">\n          <!-- Status messages will be dynamically updated -->\n        </div>\n      </div>\n\n      <style>\n        .visually-hidden {\n          position: absolute;\n          width: 1px;\n          height: 1px;\n          padding: 0;\n          margin: -1px;\n          overflow: hidden;\n          clip: rect(0, 0, 0, 0);\n          white-space: nowrap;\n          border: 0;\n        }\n\n        #listbox-popup {\n          list-style: none;\n          padding: 0;\n          margin: 0;\n        }\n      </style>\n\n      <script>\n        const input = document.getElementById('combobox-input');\n        const listbox = document.getElementById('listbox-popup');\n        const statusElement = document.getElementById('listbox-status');\n\n        // Status message handling\n        function updateStatusMessage(count) {\n          if (count === 0) {\n            statusElement.textContent = 'No items available';\n          } else {\n            statusElement.textContent = `${count} ${count === 1 ? 'item' : 'items'} available`;\n          }\n        }\n\n        // Show listbox\n        function showListbox() {\n          listbox.hidden = false;\n          input.setAttribute('aria-expanded', 'true');\n          const options = listbox.querySelectorAll('[role=\"option\"]');\n          updateStatusMessage(options.length);\n        }\n\n        // Hide listbox\n        function hideListbox() {\n          listbox.hidden = true;\n          input.setAttribute('aria-expanded', 'false');\n          input.removeAttribute('aria-activedescendant'); // Important: remove when hiding\n          statusElement.textContent = '';\n        }\n\n        // Set active option\n        function setActiveOption(optionId) {\n          input.setAttribute('aria-activedescendant', optionId);\n        }\n\n        // Example usage:\n        // When opening listbox with options:\n        showListbox();\n        // When setting active option:\n        setActiveOption('option-1');\n        // When closing listbox:\n        hideListbox();\n      </script>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper event listeners for all keyboard interactions\n      - Update ARIA attributes dynamically based on state\n      - **Remove `aria-activedescendant` when hiding the listbox** to avoid referencing hidden elements\n      - Handle focus management and trapping\n      - Implement proper filtering and selection logic\n      - Update status messages for all state changes\n      - Ensure proper pluralization in status messages\n      - Handle edge cases (no matches, empty input, etc.)\n\n      **Accessibility Notes:**\n      - Status region helps screen readers understand available options\n      - Proper pluralization improves user experience\n      - Clear status messages help users understand the current state\n      - Visual feedback should match announced status\n      - Test with screen readers to ensure proper announcement\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/css-standards.mdc",
    "content": "---\ndescription: Writing CSS, whether inside .css files or in the `{% stylesheet %}…{% endstylesheet %}` or `{% style %}…{% endstyle %}` tags\nglobs:\nalwaysApply: false\n---\n\n# CSS Standards\n\n## Specificity Rules\n\n- **Never** use IDs as selectors\n- **Avoid** using elements as selectors\n- **Avoid** using `!important` at all costs - if you must use it, comment why in the code\n- Use a `0 1 0` specificity wherever possible, meaning a single `.class` selector.\n- In cases where you must use higher specificity due to a parent/child relationship, try to keep the specificity to a maximum of `0 4 0`\n  - Note that this can sometimes be impossible due to the `0 1 0` specificity of pseudo-classes like `:hover`. There may be situations where `.parent:hover .child` is the only way to achieve the desired effect.\n- **Avoid** complex selectors. A selector should be easy to understand at a glance. Don't over do it with pseudo selectors (:has, :where, :nth-child, etc).\n\nSee [MDN](mdc:https:/developer.mozilla.org/en-US/docs/Web/CSS/Specificity) for more a comprehensive list of specificity rules.\n\n### Notes on `:has()` selector and Shopify themes\n\nThe `:has()` selector is incredibly useful, but can impact performance. This is mainly a problem during dynamic DOM updates as the browser engines must re-evaluate `:has()` selectors. This is especially important in Shopify themes where dynamic content updates are common (cart updates, variant selection, filtering, etc.). See [MDN :has performance considerations](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:has#performance_considerations) for more information.\n\nPerformance mitigation strategies:\n\n#### Minimize Subtree Traversals\n\nAnchor of an element as close to the children as possible. i.e. `A:has(B)`, where `A` is the anchor.\n\nUse combinators like `>` or `+` so there is a very clear path for the browser to evaluate. Anything too broad increases the number of leaf nodes to verify.\n\n```css\n/* ❌ AVOID: May trigger full subtree traversal */\n.ancestor:has(.foo) {\n  /* Any change within .ancestor requires checking ALL descendants */\n}\n\n/* ✅ GOOD: More constrained - limits traversal */\n.ancestor:has(> .foo) {\n  /* Only checks direct children */\n}\n```\n\n#### Leverage server-rendered classes when possible\n\nIf the dynamic content is being server rendered, you might be able to write a class higher in the DOM than rely on `:has()`\n\nExample: With filters, instead of checking based on the state of the inner `input` element, create a disabled class.\n\n```css\n/* ❌ AVOID: Styling .filter-label based on child */\n.filter-label:has(input[disabled]) {\n  /* Disabled styles */\n}\n\n/* ✅ GOOD: .disabled set server side */\n.filter-label.disabled {\n  /* Disabled styles */\n}\n```\n\nThis strategy won't work for client-side events, like a `checked`, `selected`, `focus` event.\n\n## CSS Variables\n\nCSS variables, a.k.a. custom properties, are a powerful tool for reducing redundancy and making it easier to update values across a component.\n\n- If you need to hardcode a value, set it to a variable and use that variable in the declaration. Example: a touch target size. `--touch-target-size: 44px;`\n- **Never** hardcode colors, always use the color schemes\n\n### Global Variables\n\nGlobal variables should be scoped to the `:root` selector in `snippets/theme-styles-variables.liquid`.\n\n**Example of global variables**\n\n```css\n/* in snippets/theme-styles-variables.liquid */\n:root {\n    --page-width: 1400px;\n     --font-body--family: {{ settings.type_body_font.family }}, {{ settings.type_body_font.fallback_families }}; /* Referencing a theme setting */\n     --font-{{ preset_name_dash }}--family: {{ settings[preset_font] | prepend: 'var(--font-' | append: '--family)' }}; /* Using Liquid to set a variable */\n}\n```\n\n### Scoped Variables\n\nBe sure to scope your CSS variables to the component they are being used in, if they are not meant to be global. Scoped variables can reference global variables.\n\n**Example of scoped variables**\n\n```css\n/* in assets/facets.css */\n.facets {\n  --drawer-padding: var(--padding-md); /* Referencing a global variable */\n  --facets-upper-z-index: 3;\n  --facets-open-z-index: 4;\n\n  --facets-clear-shadow: 0px -4px 14px 0px rgb(var(--color-foreground-rgb) / var(--opacity-10)); /* Referencing a Color Scheme variable */\n}\n```\n\n### Namespace Your CSS Variables\n\nNamespace your variables to avoid collisions unless you explicitly want them to bleed through to other components.\n\n✅ Do this:\n\n```css\n.component {\n  --component-padding: ...;\n  --component-aspect-ratio: ...;\n}\n```\n\n❌ Don't do this:\n\n```css\n.component {\n  --padding: ...;\n  --aspect-ratio: ...;\n}\n```\n\n### Semantic Color Variables\n\nUse semantic naming for better maintainability:\n\n```css\n:root {\n  /* Base colors */\n  --color-primary: {{ settings.colors_accent_1 }};\n  --color-secondary: {{ settings.colors_accent_2 }};\n\n  /* Semantic colors */\n  --color-text-primary: rgb(var(--color-foreground));\n  --color-text-secondary: rgb(var(--color-foreground) / 0.75);\n  --color-text-disabled: rgb(var(--color-foreground) / 0.38);\n\n  /* Interactive states */\n  --color-interactive-default: rgb(var(--color-accent));\n  /* color-mix isn't supported in earlier version of iOS <16.2 so limit its usage to progressive enhancement */\n  --color-interactive-hover: color-mix(in srgb, rgb(var(--color-accent)) 90%, black);\n  --color-interactive-pressed: color-mix(in srgb, rgb(var(--color-accent)) 80%, black);\n  --color-interactive-disabled: rgb(var(--color-accent) / 0.38);\n}\n```\n\n### Design Token System\n\nEstablish consistent spacing and typography scales:\n\n```css\n:root {\n  /* Spacing scale */\n  --space-3xs: 0.25rem; /* 4px */\n  --space-2xs: 0.5rem; /* 8px */\n  --space-xs: 0.75rem; /* 12px */\n  --space-sm: 1rem; /* 16px */\n  --space-md: 1.5rem; /* 24px */\n  --space-lg: 2rem; /* 32px */\n  --space-xl: 3rem; /* 48px */\n  --space-2xl: 4rem; /* 64px */\n  --space-3xl: 6rem; /* 96px */\n\n  /* Typography scale */\n  --font-size-xs: 0.75rem; /* 12px */\n  --font-size-sm: 0.875rem; /* 14px */\n  --font-size-base: 1rem; /* 16px */\n  --font-size-lg: 1.125rem; /* 18px */\n  --font-size-xl: 1.25rem; /* 20px */\n  --font-size-2xl: 1.5rem; /* 24px */\n  --font-size-3xl: 1.875rem; /* 30px */\n}\n```\n\n## Scoping CSS to Instances of Sections and Blocks\n\nReset CSS variable values inline on a `style` attribute with a section/block settings. This has a couple benefits:\n\n- Less CSS in Liquid which allows us to use the `{% stylesheet %}` tag for all CSS.\n- Reduces redundancy in CSS selectors and number of selectors in the HTML, i.e. `.selector--{{ block.id }}` pattern.\n\n✅ Do this:\n\n```html\n<section\n  style=\"\n    --background-color: {{ settings.background_color }};\n    --padding: {{ settings.padding }}px;\n  \"\n>\n  ...\n</section>\n\n<button style=\"--button-color: {{ settings.button_color }};\">...</button>\n```\n\n❌ Don't do this:\n\n```html\n{% style %} .selector--{{ block.id }} { --button-color: {{ settings.button_color }}; } {% endstyle %}\n\n<button class=\"selector--{{ block.id }}\">...</button>\n```\n\n### Redundancy\n\nUse variables to reduce property assignment redundancy.\n\n```css\n/* Do this */\n.block-name {\n  background: rgb(var(--block-name-color) / 0.75);\n}\n\n.block-name--secondary {\n  --block-name-color: var(--secondary-color);\n}\n\n/* Not this */\n.block-name {\n  background: rgb(var(--primary-color) / 0.75);\n}\n\n.block-name--secondary {\n  background: rgb(var(--secondary-color) / 0.75);\n}\n```\n\n## BEM Naming Convention\n\nUse the @BEM CSS convention for class names.\n\nBEM TL;DR:\n\n- **Block**: Component name (`.product-card`)\n- **Element**: Block + element (`.product-card__title`)\n- **Modifier**: Block/element + modifier (`.product-card--featured`)\n- **Use dashes** to separate words in names\n\n```css\n/* Good BEM structure */\n.product-card {\n}\n.product-card__image {\n}\n.product-card__title {\n}\n.product-card__price {\n}\n.product-card--featured {\n}\n.product-card__title--large {\n}\n```\n\n```css\n.block {\n  ...;\n}\n.block--modifier {\n  ...;\n}\n.block__element {\n  ...;\n}\n.block__multi-word-element {\n  ...;\n}\n.block__element--modifier {\n  ...;\n}\n.block__element--multi-word-modifier {\n  ...;\n}\n```\n\nDashes are used to separate words in blocks, elements, and modifiers.\n\nException: We also use global @utility classes that can be applied to block and and elements without following BEM naming convention.\n\n### Naming a \"Block\" (component)\n\nThe root \"block\" namespace must wrap any elements derived from it.\n\n✅ Do this:\n\n```html\n<div class=\"my-component\">\n  <div class=\"my-component__wrapper\"></div>\n</div>\n```\n\n❌ Not this:\n\n`.my-component__wrapper` is used as a parent to `.my-component`.\n\n```html\n<div class=\"my-component__wrapper my-component--page-width\">\n  <div class=\"my-component\"></div>\n</div>\n```\n\n### Naming an \"Element\" (child)\n\nThere should only be a _single_ \"element\" in a classname. Only the root \"block\" name needs to be included in child classnames. If additional naming specificity is necessary, use a \"-\" to seperate words or consider starting a new BEM scope altogether when an element could make sense as a standalone entity.\n\n✅ Do this:\n\n```html\n<div class=\"my-component my-component--full-width\">\n  <div class=\"my-component__wrapper\">\n    <button class=\"my-component__button\">\n      <span class=\"my-component__button-label\">My button</span>\n    </button>\n  </div>\n</div>\n```\n\n✅ Or this:\n\nStarted new scope with `.button-component`.\n\n```html\n<div class=\"my-component my-component--full-width\">\n  <div class=\"my-component__wrapper\">\n    <button class=\"button-component\">\n      <span class=\"button-component__label\">My button</span>\n    </button>\n  </div>\n</div>\n```\n\n❌ Not this:\n\nMultiple element names are used (`__wrapper__button__label`).\n\n```html\n<div class=\"my-component my-component--full-width\">\n  <div class=\"my-component__wrapper\">\n    <button class=\"my-component__wrapper__button\">\n      <span class=\"my-component__wrapper__button__label\">My button</span>\n    </button>\n  </div>\n</div>\n```\n\n### Naming a \"Modifier\" (variant)\n\nAny \"modifier\" classname should always use a \"--\" and should always correspond to an existing block and element namespace. Never use a modifier class on an element that doesn't also have a base classname.\n\n✅ Do this:\n\nThe `.button` class is the base classname and modified by `--secondary`.\n\n```html\n<button class=\"button button--secondary\"></button>\n```\n\n❌ Not this:\n\nThe `.button` and `.button-secondary` classes are both named as _exclusive_ components and should not used together.\n\n```html\n<button class=\"button button-secondary\"></button>\n```\n\n❌ Or this:\n\nModifer class is used without corresponding base classname.\n\n```html\n<button class=\"button--secondary\"></button>\n```\n\nAlso consider keeping modifiers at the highest element that makes sense. This makes the component more extensible and resilient as styling needs are changed or added in the future.\n\n✅ Do this:\n\n```html\n<div class=\"my-component my-component--size-large my-component--page-width\">\n  <div class=\"my-component__wrapper\"></div>\n</div>\n```\n\n### Utility Classes\n\nUtility classes are intended to act as global overrides for a single styling decision, e.g. alignment, show/hide, etc. BEM conventions are not followed, there is no hierarchy in utility classes and utility classes do not assume they are used with any particular block or element.\n\nName multi-word utility classes with hyphens `-`. Append any viewport specifications at the **end**, e.g. `hidden-mobile`.\n\n✅ This is fine:\n\n```css\n.align-left {\n  text-align: left;\n}\n```\n\n```html\n<div class=\"my-component align-left\">\n  <p class=\"my-component__text\"></p>\n</div>\n```\n\n## Modern CSS Features\n\n### Container Queries\n\nUse container queries for truly responsive components:\n\n```css\n.product-grid {\n  container-type: inline-size;\n}\n\n@container (min-width: 400px) {\n  .product-card {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n  }\n}\n```\n\n### CSS Functions\n\nLeverage modern CSS functions for better responsiveness:\n\n```css\n.component {\n  /* Fluid spacing */\n  padding: clamp(1rem, 4vw, 3rem);\n\n  /* Intrinsic sizing */\n  width: min(100%, 800px);\n\n  /* Dynamic colors */\n  /* color-mix isn't supported in earlier version of iOS <16.2 so limit its usage */\n  background: color-mix(in srgb, rgb(var(--color-primary)) 90%, white);\n}\n```\n\n### Cascade Layers\n\nFor better CSS organization in complex themes:\n\n```css\n@layer reset, base, components, utilities, overrides;\n\n@layer components {\n  .button {\n    /* Component styles here won't conflict with utilities */\n  }\n}\n```\n\n### View Transitions\n\n```css\n@view-transition {\n  navigation: auto;\n}\n\n.page-content {\n  view-transition-name: main-content;\n}\n```\n\n## Media Queries\n\n- Default to mobile first. e.g. `min-width` queries\n- Use `screen` for all media queries\n\n### Breakpoint System\n\nDefine consistent breakpoints:\n\n```css\n/* Mobile first breakpoints */\n--breakpoint-sm: 576px; /* Small devices */\n--breakpoint-md: 768px; /* Medium devices */\n--breakpoint-lg: 992px; /* Large devices */\n--breakpoint-xl: 1200px; /* Extra large devices */\n--breakpoint-2xl: 1400px; /* 2X Extra large devices */\n```\n\n### Context-Aware Queries\n\nUse feature queries alongside media queries:\n\n```css\n@supports (display: grid) {\n  .product-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n  }\n}\n\n@supports not (display: grid) {\n  .product-grid {\n    display: flex;\n    flex-wrap: wrap;\n  }\n}\n```\n\n### Print Styles\n\nAlways consider print stylesheets:\n\n```css\n@media print {\n  .no-print {\n    display: none !important;\n  }\n\n  a[href^='http']:after {\n    content: ' (' attr(href) ')';\n  }\n}\n```\n\n## CSS Nesting Rules\n\nNesting can make styles harder to read. Be responsible with it.\n\n- **No `&` operator** in nested selectors\n- **Never nest beyond first level** (except media queries/states)\n- **Keep nesting simple** and readable\n- Only use `&` when there is a direct relationship between the two selectors\n  - State based selectors e.g. `&:hover`, `&:focus`, `&:active`\n  - Modifiers that affect each other e.g. `button--integrated { &.button--text }`\n- Never nest beyond the first level\n- See below for exceptions\n\n### Nesting Media Queries\n\nUse nesting for media queries\n\n```css\n.header {\n  width: 100%;\n\n  @media screen and (min-width: 750px) {\n    width: 100px;\n  }\n}\n```\n\nThis includes when there is nothing to override, e.g.\n\n```css\n.header {\n  @media screen and (min-width: 750px) {\n    width: 100px;\n  }\n}\n```\n\nThat way, if something needs to be added later, it can just be added without needing to flip the media query to the inside.\n\n### If-like Parent-Child Relationships\n\nYou may use nesting to help organize parent-child relationship when the parent can have **multiple states or modifiers** that affect children. In the example below, a number of child selectors need to change when the parent is the `--full-width` variant. This saves you from needing to append `parent--full-width` to each css selector.\n\n```css\n.parent {\n  grid-columns: var(--gap) 1fr var(--gap);\n}\n\n.child {\n  grid-column: 2;\n}\n\n.grand-child {\n  ...;\n}\n\n.parent--full-screen {\n  grid-columns: 1fr;\n\n  .child {\n    grid-column: 1;\n  }\n\n  .grand-child {\n    ...;\n  }\n}\n```\n\nIn cases like this, the styles that are being applied are the direct result of the parent's modifier. We can see this as a kind of if-like relationship where the logic is easier to follow if the child styles are nested inside the parent.\n\nThis is not a reason to nest multiple levels. Maintain the single level rule.\n\n## Logical Properties\n\nWhere appropriate, use logical properties to have baseline support for Right-to-Left (RTL) languages.\nFocusing on these properties:\n\n- padding\n- margin\n- border\n- text-align\n- top, bottom, left, right\n\n✅ Do this:\n\n```css\n.element {\n  padding-inline: 2rem;\n  padding-block: 1rem;\n  margin-inline: auto;\n  margin-block: 0;\n  border-inline-end: 1rem solid var(--color-background);\n  text-align: start;\n  inset: 0;\n}\n```\n\n❌ Not this:\n\n```css\n.element {\n  padding: 1rem 2rem;\n  margin: 0 auto;\n  border-bottom: 1rem solid var(--color-background);\n  text-align: left;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n```\n\n## Layout Patterns\n\n### CSS Grid for Layouts\n\n```css\n.section-content {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  gap: var(--spacing-lg);\n}\n```\n\n### Flexbox for Components\n\n```css\n.product-card {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-sm);\n}\n```\n\n### Aspect Ratio for Media\n\n```css\n.product-card__image {\n  aspect-ratio: 4 / 3;\n  object-fit: cover;\n}\n```\n\n## Fancy Selectors\n\n### Using `:is()`\n\nWhen giving the same styles to multiple selectors, use a comma separated list.\n\n✅ Do this:\n\n```css\n.facets__label,\n.facets__clear-all,\n.clear-filter {\n  ...;\n}\n```\n\n❌ Not this:\n\n```css\n:is(.facets__label, .facets__clear-all, .clear-filter) {\n  ...;\n}\n```\n\nHowever, if you are giving the same styles to a parent-child relationship with different selectors, you may use `:is()`.\n\n✅ Do this:\n\n```css\n.parent:is(.child-1, .child-2) {\n  ...;\n}\n```\n\n❌ Not this:\n\n```css\n.parent .child-1,\n.parent .child-2 {\n  ...;\n}\n```\n\n✅ Do this:\n\n```css\n:is(.parent, .parent-2) .child {\n  ...;\n}\n```\n\n❌ Not this:\n\n```css\n.parent .child,\n.parent-2 .child {\n  ...;\n}\n```\n\nTry to keep the same specificity for all selectors within a single `:is()` to avoid increasing the overall specificity of the selector unintentionally.\n\n## Accessibility\n\n### Motion and Animation\n\n- Always respect user motion preferences\n- Provide fallbacks for users who prefer reduced motion\n\n```css\n@media (prefers-reduced-motion: reduce) {\n  *,\n  *::before,\n  *::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}\n```\n\n### Focus Management\n\n- Ensure all interactive elements have visible focus indicators\n- Use `:focus-visible` for better UX\n\n```css\n.button:focus-visible {\n  outline: 2px solid rgb(var(--color-focus));\n  outline-offset: 2px;\n}\n```\n\n### Color and Contrast\n\n- Maintain WCAG AA contrast ratios (4.5:1 for normal text, 3:1 for large text)\n- Test with high contrast mode\n- Never rely solely on color to convey information\n\n```css\n@media (prefers-color-scheme: dark) {\n  :root {\n    /* Dark theme variables */\n  }\n}\n```\n\n## Performance Considerations\n\n### Animation Performance\n\n- Use `transform` and `opacity` for animations\n- Avoid animating layout properties (`width`, `height`, `margin`, `padding`)\n- Use `will-change` sparingly and remove after animation\n\n```css\n.product-card {\n  transition: transform 0.2s ease;\n}\n\n.product-card:hover {\n  transform: translateY(-2px); /* Better than animating top/margin */\n}\n\n/* Only use will-change during animation */\n.product-card:hover {\n  will-change: transform;\n}\n\n.product-card:not(:hover) {\n  will-change: auto;\n}\n```\n\n### Layout Performance\n\n- Use `contain` property for better rendering performance\n- Prefer CSS Grid and Flexbox over complex positioning\n\n```css\n.product-grid {\n  contain: content;\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n}\n```\n\n## CSS Organization\n\n### CSS Property Order\n\nMaintain consistent property order within declarations:\n\n```css\n.component {\n  /* 1. Layout & Positioning */\n  position: relative;\n  display: flex;\n  flex-direction: column;\n\n  /* 2. Box Model */\n  width: 100%;\n  margin: 0;\n  padding: var(--space-md);\n  border: 1px solid rgb(var(--color-border));\n\n  /* 3. Typography */\n  font-family: var(--font-body-family);\n  font-size: var(--font-size-base);\n\n  /* 4. Visual */\n  background: rgb(var(--color-surface));\n  color: rgb(var(--color-text));\n\n  /* 5. Animation & Transforms */\n  transition: transform 0.2s ease;\n}\n```\n\n## Error Prevention\n\n### Common Pitfalls\n\n- **Never** use `position: fixed` without considering mobile keyboards\n- **Always** test with zoom up to 200%\n- **Avoid** magic numbers - use variables or calc() instead\n- **Remember** that `vh` units can be problematic on mobile, use `dvh` to mitage this\n\n### Defensive CSS\n\nWrite CSS that gracefully handles edge cases:\n\n```css\n.product-card {\n  /* Prevent content overflow */\n  word-wrap: break-word;\n  overflow-wrap: break-word;\n\n  /* Handle long content */\n  min-width: 0; /* Allows flex items to shrink below content size */\n\n  /* Prevent layout shift */\n  aspect-ratio: 1 / 1;\n\n  /* Fallback for missing images */\n  background: rgb(var(--color-surface-secondary));\n}\n```\n\n### Browser Support\n\n- Test in browsers used by your audience\n- Provide fallbacks for newer CSS features\n- Use progressive enhancement approach\n\n## CSS Documentation\n\n### Commenting Standards\n\nUse consistent commenting for better maintainability:\n\n```css\n/* =============================================================================\n   Component Name\n   ============================================================================= */\n\n/**\n * Brief component description\n *\n * @example\n * <div class=\"component component--modifier\">\n *   <div class=\"component__element\">Content</div>\n * </div>\n */\n.component {\n  /* Implementation */\n}\n\n/* Component modifiers\n   ========================================================================== */\n\n/**\n * Modifier description\n */\n.component--modifier {\n  /* Modifier styles */\n}\n\n/* Component elements\n   ========================================================================== */\n\n/**\n * Element description\n */\n.component__element {\n  /* Element styles */\n}\n```\n\n## Example Component Structure\n\n```liquid\n{% stylesheet %}\n  .featured-collection {\n    --section-padding: {{ section.settings.padding | default: 60 }}px;\n    --bg-color: {{ section.settings.background_color | default: '#ffffff' }};\n    --text-color: {{ section.settings.text_color | default: '#000000' }};\n\n    padding: var(--section-padding) 0;\n    background-color: var(--bg-color);\n    color: var(--text-color);\n    container-type: inline-size;\n  }\n\n  .featured-collection__grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n    gap: var(--spacing-md);\n  }\n\n  @container (min-width: 768px) {\n    .featured-collection__grid {\n      grid-template-columns: repeat({{ section.settings.columns | default: 4 }}, 1fr);\n    }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .featured-collection * {\n      transition: none !important;\n    }\n  }\n{% endstylesheet %}\n```\n"
  },
  {
    "path": ".cursor/rules/disclosure-accessibility.mdc",
    "content": "---\ndescription: Disclosure component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Disclosure Component Accessibility Standards\n\nEnsures disclosure components follow WCAG compliance and WAI-ARIA Disclosure Pattern specifications.\n\n<rule>\nname: disclosure_accessibility_standards\ndescription: Enforce disclosure component accessibility standards and WAI-ARIA Disclosure Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Button role requirement\n      - pattern: \"(?i)<(button|div|span)[^>]*(?:disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"role=\\\"button\\\"\"\n        message: \"Disclosure controls must have role='button' (or use native button element which has implicit role).\"\n\n      # aria-expanded requirement\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Disclosure controls must have aria-expanded attribute set to 'true' or 'false'.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Disclosure controls should handle keyboard events (Enter and Space).\"\n\n  - type: suggest\n    message: |\n      **Disclosure Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='button':** Set on the disclosure control element (or use native button)\n      - **aria-expanded:** 'true' if content is visible, 'false' if hidden\n      - **aria-controls:** (Optional) Reference to the ID of the associated content\n\n      **DOM Structure Requirements:**\n      - The disclosure content MUST be a sibling to the disclosure control in the DOM\n      - This ensures proper content discovery and navigation for all users\n      - Avoid placing content in different containers or far from the control\n      - Maintain a logical reading order in the DOM\n\n      **Keyboard Interaction Requirements:**\n      - **Enter:** Toggle disclosure content visibility\n      - **Space:** Toggle disclosure content visibility\n      - **Tab:** Move focus to next focusable element\n      - **Shift+Tab:** Move focus to previous focusable element\n\n      **Implementation Example:**\n      ```html\n      <!-- ✅ Correct: Content is a sibling to the control -->\n      <div class=\"disclosure\">\n        <button type=\"button\"\n                role=\"button\"\n                aria-expanded=\"false\"\n                aria-controls=\"disclosure-content\">\n          Disclosure Title\n        </button>\n        <div id=\"disclosure-content\"\n             hidden>\n          Disclosure content goes here...\n        </div>\n      </div>\n\n      <!-- ❌ Incorrect: Content is not a sibling to the control -->\n      <div class=\"disclosure\">\n        <button type=\"button\"\n                role=\"button\"\n                aria-expanded=\"false\"\n                aria-controls=\"disclosure-content\">\n          Disclosure Title\n        </button>\n      </div>\n      <div class=\"some-other-container\">\n        <p>Other content...</p>\n        <div id=\"disclosure-content\" hidden>\n          Disclosure content goes here...\n        </div>\n      </div>\n\n      <script>\n        const button = document.querySelector('[role=\"button\"]');\n        const content = document.getElementById('disclosure-content');\n\n        function toggleDisclosure() {\n          const isExpanded = button.getAttribute('aria-expanded') === 'true';\n          button.setAttribute('aria-expanded', !isExpanded);\n          content.hidden = isExpanded;\n        }\n\n        // Click handler\n        button.addEventListener('click', toggleDisclosure);\n\n        // Keyboard handler\n        button.addEventListener('keydown', (event) => {\n          if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            toggleDisclosure();\n          }\n        });\n      </script>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement Enter and Space key handlers for toggling\n      - Update aria-expanded state when content toggles\n      - Use hidden attribute or CSS to show/hide content\n      - Consider implementing smooth transitions\n\n      **Accessibility Notes:**\n      - Button should be the only element inside the control\n      - Content MUST be a sibling to the control in the DOM\n      - Visual focus indicators should be clear\n      - Test with screen readers to ensure proper announcement\n      - Consider adding aria-label if the button text is not descriptive\n      - Maintain proper reading order for screen reader users\n      - Avoid complex DOM structures that could confuse navigation\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/dropdown-navigation-accessibility.mdc",
    "content": "---\ndescription: Dropdown Navigation component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Dropdown Navigation Component Accessibility Standards\n\nEnsures dropdown navigation components follow WCAG compliance and proper navigation semantics, including mobile modal patterns and disclosure controls.\n\n<rule>\nname: dropdown_navigation_accessibility_standards\ndescription: Enforce dropdown navigation component accessibility standards and proper navigation semantics\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Navigation landmark requirement\n      - pattern: \"(?i)<nav[^>]*(?:navigation|menu|dropdown)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)=\\\"[^\\\"]+\\\"\"\n        message: \"Navigation elements must have aria-label or aria-labelledby attribute for accessibility.\"\n\n      # Navigation list structure requirement\n      - pattern: \"(?i)<nav[^>]*(?:navigation|menu|dropdown)[^>]*>\"\n        pattern_negate: \"<ul[^>]*>\"\n        message: \"Navigation should use unordered list (ul) for proper semantic structure.\"\n\n      # Dropdown button role requirement\n      - pattern: \"(?i)<(button|div|span)[^>]*(?:dropdown|expand|collapse)[^>]*>\"\n        pattern_negate: \"role=\\\"button\\\"\"\n        message: \"Dropdown controls must have role='button' (or use native button element which has implicit role).\"\n\n      # Dropdown button aria-expanded requirement\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:dropdown|expand|collapse)[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Dropdown controls must have aria-expanded attribute set to 'true' or 'false'.\"\n\n      # Dropdown content missing proper identification\n      - pattern: \"(?i)<(div|section)[^>]*(?:dropdown.*content|content.*dropdown)[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Dropdown content must have unique ID attributes for aria-controls reference.\"\n\n      # Missing aria-current on navigation items\n      - pattern: \"(?i)<a[^>]*(?:nav|navigation)[^>]*>\"\n        pattern_negate: \"aria-current=\\\"(page|false)\\\"\"\n        message: \"Navigation links should have aria-current attribute set to 'page' for active items or 'false' for inactive.\"\n\n      # Mobile modal missing dialog role\n      - pattern: \"(?i)<(div|section)[^>]*(?:mobile.*nav|nav.*mobile|modal.*nav)[^>]*>\"\n        pattern_negate: \"role=\\\"dialog\\\"\"\n        message: \"Mobile navigation modal containers must have role='dialog' attribute.\"\n\n      # Mobile modal missing aria-modal\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:mobile.*nav|nav.*mobile)[^>]*>\"\n        pattern_negate: \"aria-modal=\\\"true\\\"\"\n        message: \"Mobile navigation dialog elements must have aria-modal='true' attribute.\"\n\n      # Mobile modal missing proper labeling\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*(?:mobile.*nav|nav.*mobile)[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Mobile navigation dialog elements must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Mobile launcher missing aria-haspopup\n      - pattern: \"(?i)<button[^>]*(?:mobile.*nav|nav.*mobile|hamburger|menu)[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Mobile navigation launcher buttons must include aria-haspopup='dialog' to inform users a dialog will open.\"\n\n      # Mobile close button missing aria-label\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss|×|&times;)[^>]*(?:mobile.*nav|nav.*mobile)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*[Cc]lose[^\\\"]*\\\"\"\n        message: \"Mobile navigation close buttons should have aria-label='Close navigation' or similar descriptive text.\"\n\n      # Missing keyboard event handlers for dropdown\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:dropdown|expand|collapse)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Dropdown controls should handle keyboard events (Enter, Space, and Escape).\"\n\n      # Missing Escape key support for dropdown content\n      - pattern: \"(?i)<div[^>]*(?:dropdown.*content|content.*dropdown)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Dropdown content areas should handle Escape key to close dropdown and return focus to launcher.\"\n\n      # Incorrect menu role usage\n      - pattern: \"(?i)role=\\\"(menu|menuitem|menubar|menuitemcheckbox|menuitemradio)\\\"\"\n        message: \"Navigation components should NOT use menu roles. Use proper navigation semantics with ul/li/a elements.\"\n\n      # Incorrect aria-haspopup usage\n      - pattern: \"(?i)aria-haspopup=\\\"(true|menu|listbox)\\\"\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Navigation components should NOT use aria-haspopup except for mobile modal launchers with aria-haspopup='dialog'.\"\n\n  - type: suggest\n    message: |\n      **Dropdown Navigation Component Accessibility Best Practices:**\n\n      **Navigation Semantics:**\n      - **role='navigation':** Implicit on nav element, provides landmark\n      - **aria-label/aria-labelledby:** On nav element to describe the navigation\n      - **aria-current:** Set on active navigation items ('page' for current page, 'false' for inactive)\n      - **ul + li + a:** Use semantic list structure for navigation items\n      - **NO menu roles:** Do not use role=\"menu\", role=\"menuitem\", etc.\n\n      **Dropdown Disclosure Pattern:**\n      - **role='button':** Set on dropdown launcher elements (or use native button)\n      - **aria-expanded:** 'true' if dropdown content is visible, 'false' if hidden\n      - **aria-controls:** Reference to the ID of the associated dropdown content\n      - **aria-current:** Set on active dropdown items\n\n      **Mobile Modal Pattern:**\n      - **role='dialog':** Set on mobile navigation modal container\n      - **aria-modal='true':** Indicates the dialog is modal\n      - **aria-labelledby/aria-label:** On mobile dialog for accessibility\n      - **aria-haspopup='dialog':** Set on mobile launcher button\n      - **aria-label:** Set on mobile close button\n\n      **Keyboard Interaction Requirements:**\n      - **Tab:** Move through natural tab order on page\n      - **Enter:** Activate links\n      - **Space/Enter:** Open/close dropdown when launcher is focused\n      - **Escape:** Close dropdown component (launcher focused or not)\n      - **NO auto-open:** Do not open dropdown on keyboard focus\n      - **Mobile:** Focus management for modal open/close\n\n      **Mouse Interaction Requirements:**\n      - **Hover:** Show underline on links\n      - **Hover:** Open dropdown, close on mouse-away\n      - **Click:** Activate links (include mouse-specific click handlers)\n      - **Mobile:** Click launcher opens modal, click close button closes modal\n      - **Double-click:** Mobile dropdown launchers navigate to associated page\n\n      **Mobile Interaction Requirements:**\n      - **Three-line button:** Opens modal, focus moves to first focusable item\n      - **X close button:** Closes modal, focus returns to launcher\n      - **Dropdown launcher:** Reveals content section, single-click toggles, double-click navigates\n      - **Focus management:** Proper focus trapping and restoration\n\n      **Implementation Patterns:**\n\n      **Desktop Navigation Structure:**\n      ```html\n      <header>\n        <nav aria-label=\"Main navigation\">\n          <ul>\n            <li>\n              <a href=\"/home\" aria-current=\"page\">Home</a>\n            </li>\n            <li>\n              <button type=\"button\"\n                      role=\"button\"\n                      aria-expanded=\"false\"\n                      aria-controls=\"products-dropdown\">\n                Products\n                <span class=\"chevron\">▼</span>\n              </button>\n              <div id=\"products-dropdown\" hidden>\n                <ul>\n                  <li><a href=\"/products/category1\">Category 1</a></li>\n                  <li><a href=\"/products/category2\">Category 2</a></li>\n                </ul>\n              </div>\n            </li>\n            <li>\n              <a href=\"/about\" aria-current=\"false\">About</a>\n            </li>\n          </ul>\n        </nav>\n      </header>\n      ```\n\n      **Mobile Navigation Structure:**\n      ```html\n      <header>\n        <button type=\"button\"\n                aria-haspopup=\"dialog\"\n                aria-label=\"Open navigation menu\"\n                onclick=\"openMobileNav()\">\n          <span class=\"hamburger\">☰</span>\n        </button>\n      </header>\n\n      <div role=\"dialog\"\n           aria-modal=\"true\"\n           aria-labelledby=\"mobile-nav-title\"\n           class=\"mobile-nav-modal\"\n           hidden>\n        <button type=\"button\"\n                aria-label=\"Close navigation menu\"\n                onclick=\"closeMobileNav()\">\n          ×\n        </button>\n        <h2 id=\"mobile-nav-title\">Navigation</h2>\n        <nav aria-label=\"Mobile navigation\">\n          <ul>\n            <li>\n              <a href=\"/home\" aria-current=\"page\">Home</a>\n            </li>\n            <li>\n              <button type=\"button\"\n                      role=\"button\"\n                      aria-expanded=\"false\"\n                      aria-controls=\"mobile-products-dropdown\"\n                      data-href=\"/products\">\n                Products\n                <span class=\"chevron\">▼</span>\n              </button>\n              <div id=\"mobile-products-dropdown\" hidden>\n                <ul>\n                  <li><a href=\"/products/category1\">Category 1</a></li>\n                  <li><a href=\"/products/category2\">Category 2</a></li>\n                </ul>\n              </div>\n            </li>\n            <li>\n              <a href=\"/about\" aria-current=\"false\">About</a>\n            </li>\n          </ul>\n        </nav>\n      </div>\n      ```\n\n      **JavaScript for Dropdown Toggle:**\n      ```javascript\n      function toggleDropdown(button) {\n        const isExpanded = button.getAttribute('aria-expanded') === 'true';\n        const content = document.getElementById(button.getAttribute('aria-controls'));\n\n        button.setAttribute('aria-expanded', !isExpanded);\n        content.hidden = isExpanded;\n\n        // Update chevron icon\n        const chevron = button.querySelector('.chevron');\n        if (chevron) {\n          chevron.textContent = isExpanded ? '▼' : '▲';\n        }\n\n        if (!isExpanded) {\n          // Add escape key listener to content\n          content.addEventListener('keydown', handleDropdownEscapeKey);\n        } else {\n          // Remove escape key listener\n          content.removeEventListener('keydown', handleDropdownEscapeKey);\n        }\n      }\n\n      function handleDropdownEscapeKey(event) {\n        if (event.key === 'Escape') {\n          const content = event.target.closest('[hidden]');\n          if (content) {\n            const button = document.querySelector(`[aria-controls=\"${content.id}\"]`);\n            if (button) {\n              button.setAttribute('aria-expanded', 'false');\n              content.hidden = true;\n              button.focus(); // Return focus to launcher\n              content.removeEventListener('keydown', handleDropdownEscapeKey);\n            }\n          }\n        }\n      }\n      ```\n\n      **JavaScript for Mobile Modal:**\n      ```javascript\n      function openMobileNav() {\n        const modal = document.querySelector('.mobile-nav-modal');\n        const closeButton = modal.querySelector('button[aria-label*=\"Close\"]');\n\n        modal.hidden = false;\n        closeButton.focus(); // Focus first focusable element\n      }\n\n      function closeMobileNav() {\n        const modal = document.querySelector('.mobile-nav-modal');\n        const launcher = document.querySelector('[aria-haspopup=\"dialog\"]');\n\n        modal.hidden = true;\n        launcher.focus(); // Return focus to launcher\n      }\n\n      // Handle escape key for mobile modal\n      document.addEventListener('keydown', function(event) {\n        if (event.key === 'Escape') {\n          const modal = document.querySelector('.mobile-nav-modal');\n          if (!modal.hidden) {\n            closeMobileNav();\n          }\n        }\n      });\n\n      // Mobile dropdown click and double-click handlers\n      document.addEventListener('DOMContentLoaded', function() {\n        const mobileDropdownButtons = document.querySelectorAll('.mobile-dropdown-button');\n\n        mobileDropdownButtons.forEach(button => {\n          // Single click toggles dropdown\n          button.addEventListener('click', (event) => {\n            event.preventDefault();\n            toggleDropdown(button);\n          });\n\n          // Double click navigates to page\n          button.addEventListener('dblclick', (event) => {\n            event.preventDefault();\n            const href = button.getAttribute('data-href') || '/default';\n            window.location.href = href;\n          });\n        });\n      });\n      ```\n\n      **CSS for Hover Interactions:**\n      ```css\n      /* Link hover underline */\n      nav a:hover {\n        text-decoration: underline;\n      }\n\n      /* Dropdown hover behavior */\n      .dropdown-launcher:hover + .dropdown-content,\n      .dropdown-content:hover {\n        display: block;\n      }\n\n      .dropdown-content {\n        display: none;\n      }\n\n      /* Chevron rotation */\n      .chevron {\n        transition: transform 0.2s ease;\n      }\n\n      button[aria-expanded=\"true\"] .chevron {\n        transform: rotate(180deg);\n      }\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper event listeners for all keyboard interactions\n      - Handle mouse hover events for dropdown display\n      - Manage focus for mobile modal open/close\n      - Update aria-current states based on current page\n      - Handle chevron icon rotation\n      - Implement proper escape key handling\n      - Ensure no auto-opening on keyboard focus\n      - Handle mouse-specific click events for navigation\n      - Implement double-click navigation for mobile dropdown launchers\n\n      **Accessibility Notes:**\n      - Navigation is NOT a menu - use proper navigation semantics\n      - Avoid menu roles and aria-haspopup (except mobile modal)\n      - Ensure proper focus management for mobile modal\n      - Test with screen readers for proper announcement\n      - Maintain clear visual indicators for active states\n      - Consider implementing skip links for large navigation\n      - Ensure sufficient color contrast for all navigation elements\n      - Test keyboard navigation flow thoroughly\n\n      **Testing Requirements:**\n      - Test keyboard navigation through all navigation items\n      - Verify dropdown opens/closes with keyboard and mouse\n      - Test mobile modal focus management\n      - Verify screen reader announcement of navigation structure\n      - Test aria-current updates correctly\n      - Ensure escape key closes dropdowns and modals\n      - Test hover interactions work as expected\n      - Verify no auto-opening on keyboard focus\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/examples/block-example-group.liquid",
    "content": "{% doc %}\n  Renders a group of blocks with configurable layout direction, gap and\n  alignment.\n\n  All settings apply to only one dimension to reduce configuration complexity.\n\n  This component is a wrapper concerned only with rendering its children in\n  the specified layout direction with appropriate padding and alignment.\n\n  @example\n  {% content_for 'block', type: 'group', id: 'group' %}\n{% enddoc %}\n\n<div\n  class=\"group {{ block.settings.layout_direction }}\"\n  style=\"\n    --padding: {{ block.settings.padding }}px;\n    --alignment: {{ block.settings.alignment }};\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n\n{% stylesheet %}\n  .group {\n    display: flex;\n    flex-wrap: nowrap;\n    overflow: hidden;\n    width: 100%;\n  }\n\n  .group--horizontal {\n    flex-direction: row;\n    justify-content: space-between;\n    align-items: center;\n    padding: 0 var(--padding);\n  }\n\n  .group--vertical {\n    flex-direction: column;\n    align-items: var(--alignment);\n    padding: var(--padding) 0;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:general.group\",\n  \"blocks\": [{ \"type\": \"@theme\" }],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_direction\",\n      \"label\": \"t:labels.layout_direction\",\n      \"default\": \"group--vertical\",\n      \"options\": [\n        { \"value\": \"group--horizontal\", \"label\": \"t:options.direction.horizontal\" },\n        { \"value\": \"group--vertical\", \"label\": \"t:options.direction.vertical\" }\n      ]\n    },\n    {\n      \"visible_if\": \"{{ block.settings.layout_direction == 'group--vertical' }}\",\n      \"type\": \"select\",\n      \"id\": \"alignment\",\n      \"label\": \"t:labels.alignment\",\n      \"default\": \"flex-start\",\n      \"options\": [\n        { \"value\": \"flex-start\", \"label\": \"t:options.alignment.left\" },\n        { \"value\": \"center\", \"label\": \"t:options.alignment.center\" },\n        { \"value\": \"flex-end\", \"label\": \"t:options.alignment.right\" }\n      ]\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding\",\n      \"label\": \"t:labels.padding\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 200,\n      \"step\": 2,\n      \"unit\": \"px\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:general.column\",\n      \"category\": \"t:general.layout\",\n      \"settings\": {\n        \"layout_direction\": \"group--vertical\",\n        \"alignment\": \"flex-start\",\n        \"padding\": 0\n      }\n    },\n    {\n      \"name\": \"t:general.row\",\n      \"category\": \"t:general.layout\",\n      \"settings\": {\n        \"layout_direction\": \"group--horizontal\",\n        \"padding\": 0\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": ".cursor/rules/examples/block-example-text.liquid",
    "content": "{% doc %}\n  Renders a text block.\n\n  @example\n  {% content_for 'block', type: 'text', id: 'text' %}\n{% enddoc %}\n\n<div\n  class=\"text {{ block.settings.text_style }}\"\n  style=\"--text-align: {{ block.settings.alignment }}\"\n  {{ block.shopify_attributes }}\n>\n  {{ block.settings.text }}\n</div>\n\n{% stylesheet %}\n  .text {\n    text-align: var(--text-align);\n  }\n\n  .text--title {\n    font-size: 2rem;\n    font-weight: 700;\n  }\n\n  .text--subtitle {\n    font-size: 1.5rem;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:general.text\",\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"text\",\n      \"label\": \"t:labels.text\",\n      \"default\": \"Text\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_style\",\n      \"label\": \"t:labels.text_style\",\n      \"options\": [\n        { \"value\": \"text--title\", \"label\": \"t:options.text_style.title\" },\n        { \"value\": \"text--subtitle\", \"label\": \"t:options.text_style.subtitle\" },\n        { \"value\": \"text--normal\", \"label\": \"t:options.text_style.normal\" }\n      ],\n      \"default\": \"text--title\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:labels.alignment\",\n      \"default\": \"left\"\n    }\n  ],\n  \"presets\": [{ \"name\": \"t:general.text\" }]\n}\n{% endschema %}\n"
  },
  {
    "path": ".cursor/rules/examples/section-example.liquid",
    "content": "<div class=\"example-section full-width\">\n  {% if section.settings.background_image %}\n    <div class=\"example-section__background\">\n      {{ section.settings.background_image | image_url: width: 2000 | image_tag }}\n    </div>\n  {% endif %}\n\n  <div class=\"custom-section__content\">\n    {% content_for 'blocks' %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .example-section {\n    position: relative;\n    overflow: hidden;\n    width: 100%;\n  }\n\n  .example-section__background {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    overflow: hidden;\n  }\n\n  .example-section__background img {\n    position: absolute;\n    width: 100%;\n    height: auto;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n\n  .example-section__content {\n    display: grid;\n    grid-template-columns: var(--content-grid);\n  }\n\n  .example-section__content > * {\n    grid-column: 2;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:general.custom_section\",\n  \"blocks\": [{ \"type\": \"@theme\" }],\n  \"settings\": [\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:labels.background\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:general.custom_section\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": ".cursor/rules/examples/snippet-example.liquid",
    "content": "{% doc %}\n  Product Card Snippet Template\n\n  @param product - {Object} Product object (required)\n  @param show_vendor - {Boolean} Display vendor name (default: false)\n  @param show_quick_add - {Boolean} Show quick add button (default: false)\n  @param image_ratio - {String} Image aspect ratio (default: 'adapt')\n  @param card_class - {String} Additional CSS classes\n\n  @example\n  {% render 'product-card',\n       product: product,\n       show_vendor: true,\n       image_ratio: 'square'\n    %}\n{% enddoc %}\n\n{% liquid\n  # Parameter validation and defaults\n  assign product = product | default: empty\n  assign show_vendor = show_vendor | default: false\n  assign show_quick_add = show_quick_add | default: false\n  assign image_ratio = image_ratio | default: 'adapt'\n  assign card_class = card_class | default: ''\n\n  # Early return if required parameters missing\n  unless product != empty\n    echo '<!-- Error: product parameter required for product-card snippet -->'\n    break\n  endunless\n\n  # Build CSS classes\n  assign card_classes = 'product-card'\n  if card_class != blank\n    assign card_classes = card_classes | append: ' ' | append: card_class\n  endif\n  if image_ratio != 'adapt'\n    assign card_classes = card_classes | append: ' product-card--' | append: image_ratio\n  endif\n%}\n\n<div\n  class=\"{{ card_classes }}\"\n  data-product-id=\"{{ product.id }}\"\n>\n  <div class=\"product-card__media\">\n    {% if product.featured_image %}\n      <a\n        href=\"{{ product.url }}\"\n        class=\"product-card__link\"\n      >\n        {{\n          product.featured_image\n          | image_url: width: 800\n          | image_tag: alt: product.featured_image.alt\n          | default: product.title, loading: 'lazy', class: 'product-card__image'\n        }}\n      </a>\n    {% else %}\n      <div class=\"product-card__placeholder\">\n        {{ 'product-1' | placeholder_svg_tag: 'product-card__placeholder-svg' }}\n      </div>\n    {% endif %}\n  </div>\n\n  <div class=\"product-card__info\">\n    <h3 class=\"product-card__title\">\n      <a href=\"{{ product.url }}\">{{ product.title | escape }}</a>\n    </h3>\n\n    {% if show_vendor and product.vendor != blank %}\n      <p class=\"product-card__vendor\">{{ product.vendor | escape }}</p>\n    {% endif %}\n\n    {% render 'price', product: product, show_compare_at: true %}\n\n    {% if show_quick_add and product.available %}\n      <div class=\"product-card__actions\">\n        {% render 'product-form', product: product, form_type: 'quick-add', show_quantity: false %}\n      </div>\n    {% endif %}\n  </div>\n</div>\n"
  },
  {
    "path": ".cursor/rules/flip-card-accessibility.mdc",
    "content": "---\ndescription: Flip Card component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Flip Card Component Accessibility Standards\n\nEnsures flip card components follow WCAG compliance and provide proper state management for screen reader users.\n\n<rule>\nname: flip_card_accessibility_standards\ndescription: Enforce flip card component accessibility standards and proper state management\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Flip button requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:card|flip)[^>]*>\"\n        pattern_negate: \"<button[^>]*aria-pressed\"\n        message: \"Flip cards must contain a button with aria-pressed attribute to control card state.\"\n\n      # aria-pressed attribute requirement\n      - pattern: \"(?i)<button[^>]*(?:flip|card)[^>]*>\"\n        pattern_negate: \"aria-pressed=\\\"(true|false)\\\"\"\n        message: \"Flip card buttons must have aria-pressed attribute set to 'true' or 'false'.\"\n\n      # Card front/back structure requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:card|flip)[^>]*>\"\n        pattern_negate: \"(card--front|card--back|front|back)\"\n        message: \"Flip cards must have both front and back content sections for proper structure.\"\n\n      # Unique accessible name requirement\n      - pattern: \"(?i)<button[^>]*aria-pressed[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby|>.*[A-Za-z]{10,})\"\n        message: \"Flip card buttons must have unique, descriptive accessible names that reference visible card content.\"\n\n      # Keyboard focus indicator requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:card|flip)[^>]*>\"\n        pattern_negate: \"(focus|:focus|focus-visible|:focus-visible)\"\n        message: \"Flip card containers should have visible keyboard focus indicators when the flip button is focused.\"\n\n      # Content visibility management\n      - pattern: \"(?i)aria-pressed=\\\"(true|false)\\\"\"\n        pattern_negate: \"(visibility.*hidden|display.*none|hidden)\"\n        message: \"Use aria-pressed state to control content visibility - false shows front, true shows back. Prefer visibility: hidden/visible for smooth animations.\"\n\n      # Missing flip button type\n      - pattern: \"(?i)<button[^>]*(?:flip|card)[^>]*>\"\n        pattern_negate: \"type=\\\"button\\\"\"\n        message: \"Flip card buttons should have type='button' to prevent form submission behavior.\"\n\n      # Incomplete card structure\n      - pattern: \"(?i)<div[^>]*class=\\\"card[^>]*>\"\n        pattern_negate: \"(card--front.*card--back|card--back.*card--front)\"\n        message: \"Flip cards must contain both front and back content sections for proper functionality.\"\n\n  - type: suggest\n    message: |\n      **Flip Card Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **aria-pressed:** 'false' shows front content, 'true' shows back content\n      - **type=\"button\":** Prevents form submission behavior\n      - **Unique accessible name:** Should reference visible card content\n\n      **DOM Structure Requirements:**\n      - Card container with front and back content sections\n      - Flip button positioned between or adjacent to content sections\n      - Use CSS display: none to hide non-visible content\n      - Maintain logical reading order in the DOM\n\n      **Content Visibility Management:**\n      - **aria-pressed=\"false\":** Show front content, hide back content\n      - **aria-pressed=\"true\":** Show back content, hide front content\n      - Use CSS display property for smooth transitions\n      - Ensure only one side is visible at a time\n\n      **Keyboard and Focus Requirements:**\n      - **Enter:** Toggle card state\n      - **Space:** Toggle card state\n      - **Tab:** Move focus to next focusable element\n      - **Shift+Tab:** Move focus to previous focusable element\n      - **Focus indicator:** Should wrap the card content container\n      - **Hover state:** Blue border matching focus indicator for visual consistency\n\n      **Implementation Example:**\n      ```html\n      <!-- ✅ Correct: Proper flip card structure -->\n      <div class=\"card\">\n        <div class=\"card--front\">\n          <h3>Card Title</h3>\n          <img src=\"front-image.jpg\" alt=\"Front view of the product\">\n        </div>\n\n        <button type=\"button\"\n                class=\"flip-button\"\n                aria-pressed=\"false\"\n                aria-label=\"More about Card Title\">\n        </button>\n\n        <div class=\"card--back\">\n          <p class=\"card--tagline\">Inspiring content</p>\n          <img src=\"back-image-1.jpg\" alt=\"Product detail view 1\">\n          <img src=\"back-image-2.jpg\" alt=\"Product detail view 2\">\n          <img src=\"back-image-3.jpg\" alt=\"Product detail view 3\">\n          <p>More detailed content about the product</p>\n          <a href=\"/product-details\">\n            <img src=\"link-icon.svg\" alt=\"View full product details\">\n          </a>\n        </div>\n      </div>\n      ```\n\n      **CSS Implementation:**\n      ```css\n      .card {\n        position: relative;\n        perspective: 1000px;\n        /* Focus indicator for keyboard navigation */\n        outline: 2px solid transparent;\n        outline-offset: 2px;\n        /* Visual affordance for clickable card */\n        cursor: pointer;\n      }\n\n      .card:focus-within {\n        outline-color: #0056b3;\n        outline-width: 3px;\n      }\n\n      .card:hover {\n        outline-color: #0056b3;\n        outline-width: 3px;\n      }\n\n      .card--front,\n      .card--back {\n        transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out, visibility 0.3s ease-in-out;\n      }\n\n      /* Show front by default */\n      .card--front {\n        visibility: visible;\n        opacity: 1;\n        transform: rotateY(0deg);\n      }\n\n      .card--back {\n        visibility: hidden;\n        opacity: 0;\n        transform: rotateY(180deg);\n      }\n\n      /* Show back when aria-pressed=\"true\" */\n      .card[data-pressed=\"true\"] .card--front {\n        visibility: hidden;\n        opacity: 0;\n        transform: rotateY(-180deg);\n      }\n\n      .card[data-pressed=\"true\"] .card--back {\n        visibility: visible;\n        opacity: 1;\n        transform: rotateY(0deg);\n      }\n\n      .flip-button {\n        position: absolute;\n        top: 1rem;\n        right: 1rem;\n        background: #0056b3;\n        color: #ffffff;\n        border: none;\n        width: 40px;\n        height: 40px;\n        border-radius: 50%;\n        cursor: pointer;\n        transition: all 0.2s ease;\n        z-index: 10;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 18px;\n        line-height: 1;\n      }\n\n      .flip-button:hover {\n        background: #004085;\n        transform: scale(1.1);\n        box-shadow: 0 4px 12px rgba(0, 86, 179, 0.3);\n      }\n\n      .flip-button:focus {\n        outline: 3px solid #ffd700;\n        outline-offset: 2px;\n        background: #004085;\n      }\n\n      .flip-button:active {\n        transform: scale(0.95);\n      }\n\n      /* Button icon states */\n      .flip-button::before {\n        content: \"↻\"; /* Circular arrow icon for front state */\n        transition: all 0.3s ease;\n      }\n\n      /* Show X icon when back is visible */\n      .card[data-pressed=\"true\"] .flip-button::before {\n        content: \"×\"; /* X icon for back state */\n        font-size: 24px;\n        font-weight: bold;\n      }\n\n      /* Reduced motion support */\n      @media (prefers-reduced-motion: reduce) {\n        .card--front,\n        .card--back {\n          transition: none;\n        }\n\n        .flip-button {\n          transition: none;\n        }\n\n        .flip-button:hover {\n          transform: none;\n          box-shadow: none;\n        }\n\n        .flip-button:active {\n          transform: none;\n        }\n\n        .card {\n          transition: none;\n        }\n      }\n      ```\n\n      **JavaScript State Management:**\n      ```javascript\n      const flipCards = document.querySelectorAll('.card');\n\n      flipCards.forEach(card => {\n        const button = card.querySelector('.flip-button');\n        const front = card.querySelector('.card--front');\n        const back = card.querySelector('.card--back');\n\n        function toggleCard() {\n          const isPressed = button.getAttribute('aria-pressed') === 'true';\n          const newState = !isPressed;\n\n          // Update ARIA state\n          button.setAttribute('aria-pressed', newState);\n\n          // Update card data attribute for CSS\n          card.setAttribute('data-pressed', newState);\n\n          // Announce state change to screen readers\n          const announcement = newState ? 'Showing back of card' : 'Showing front of card';\n          announceToScreenReader(announcement);\n        }\n\n        // Button click handler\n        button.addEventListener('click', (event) => {\n          event.stopPropagation(); // Prevent card click when button is clicked\n          toggleCard();\n        });\n\n        // Card container click handler for mouse/touch users\n        card.addEventListener('click', toggleCard);\n\n        // Keyboard handler\n        button.addEventListener('keydown', (event) => {\n          if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            toggleCard();\n          }\n        });\n      });\n\n      // Screen reader announcement helper\n      function announceToScreenReader(message) {\n        const announcement = document.createElement('div');\n        announcement.setAttribute('aria-live', 'polite');\n        announcement.setAttribute('aria-atomic', 'true');\n        announcement.className = 'sr-only';\n        announcement.textContent = message;\n\n        document.body.appendChild(announcement);\n\n        setTimeout(() => {\n          document.body.removeChild(announcement);\n        }, 1000);\n      }\n      ```\n\n      **Accessibility Guidelines:**\n\n      **Button Requirements:**\n      - Must have type=\"button\" to prevent form submission\n      - aria-pressed attribute must be present and toggle between \"true\" and \"false\"\n      - Accessible name should reference visible card content via aria-label\n      - Should handle both click and keyboard events\n      - Position in top-right corner for intuitive placement\n      - Use dynamic icons: ↻ (arrow) for front state, × (X) for back state\n\n      **Card Container Interaction:**\n      - **Mouse/Touch Support:** Allow clicking anywhere on card to flip\n      - **Visual Affordance:** Use cursor: pointer to indicate clickable area\n      - **Event Handling:** Prevent conflicts between card and button clicks\n      - **Accessibility Maintained:** All keyboard and screen reader functionality preserved\n\n      **Content Structure:**\n      - Front and back content must be present\n      - Only one side visible at a time\n      - Use semantic HTML for content (headings, paragraphs, images)\n      - Maintain logical reading order\n      - Use `visibility: hidden/visible` for smooth animations while maintaining accessibility\n\n      **Focus Management:**\n      - Focus indicator should wrap the entire card when button is focused\n      - Use :focus-within CSS pseudo-class for container focus\n      - Ensure focus indicator has sufficient contrast (3:1 minimum)\n      - Maintain focus order during state changes\n\n      **Screen Reader Support:**\n      - aria-pressed state announces current card side\n      - Consider adding aria-live region for state changes\n      - Ensure content is properly labeled and described\n      - Test with screen readers to verify announcements\n\n      **Animation Considerations:**\n      - Use CSS transitions for smooth flipping effects\n      - Ensure animations don't interfere with accessibility\n      - **Always implement prefers-reduced-motion media query**\n      - Remove all animations, transforms, and transitions when reduced motion is preferred\n      - Maintain content visibility during transitions\n      - Respect user's motion sensitivity preferences\n\n      **Button Design Best Practices:**\n      - **Positioning**: Place in top-right corner for intuitive access\n      - **Shape**: Use circular design for modern, clean appearance\n      - **Icons**: Implement dynamic icons that change with card state\n        - Front state: ↻ (circular arrow) indicating \"click to flip\"\n        - Back state: × (X) indicating \"click to return\"\n      - **Visual Feedback**: Include hover, focus, and active states\n      - **Accessibility**: Maintain aria-label for screen reader context\n      - **Responsive**: Scale appropriately for different card sizes\n\n      **Testing Checklist:**\n      - Verify aria-pressed toggles correctly\n      - Test keyboard navigation (Enter, Space, Tab)\n      - Check focus indicator visibility and contrast\n      - Validate screen reader announcements\n      - Test content visibility changes\n      - Verify accessible names are descriptive via aria-label\n      - Check that only one side is visible at a time\n      - Verify button positioning in top-right corner\n      - Test dynamic icon changes (↻ to ×) with state changes\n      - Ensure button remains accessible in all card states\n      - Validate responsive button sizing for different card layouts\n      - Test card container click functionality (anywhere on card)\n      - Verify hover states show blue border matching focus indicator\n      - Check cursor pointer appears on card hover\n      - Ensure no conflicts between card and button click events\n      - Test reduced motion preference support (prefers-reduced-motion: reduce)\n      - Verify all animations are disabled when reduced motion is preferred\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/focus-order-and-styles-accessibility.mdc",
    "content": "---\ndescription: Focus order and focus styles accessibility standards per WCAG 2.4.7 Focus Visible, 1.4.11 Non-Text Contrast, 2.4.13 Focus Appearance, and 2.4.11 Focus Not Obscured requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid, *.css, *.scss, *.sass, *.less\nalwaysApply: true\n---\n\n# Focus Order and Focus Styles Accessibility Standards\n\nEnsures proper focus order, tabindex usage, and focus indicators following WCAG 2.4.7 Focus Visible, 1.4.11 Non-Text Contrast, 2.4.13 Focus Appearance, and 2.4.11 Focus Not Obscured requirements.\n\n<rule>\nname: focus_order_and_styles_accessibility_standards\ndescription: Enforce focus order and focus styles accessibility standards per WCAG requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Positive tabindex values (should not be used)\n      - pattern: \"tabindex=\\\"[1-9]\\\"\"\n        message: \"Positive tabindex values create illogical focus order. Use DOM order instead or tabindex=\\\"0\\\" for custom focusable elements.\"\n\n      # Missing focus styles (outline: 0 or outline: none)\n      - pattern: \"outline:\\\\s*0|outline:\\\\s*none\"\n        message: \"Focus styles should not be removed. Use custom focus indicators that meet WCAG contrast requirements.\"\n\n      # Focus styles with insufficient contrast (light colors)\n      - pattern: \"outline.*#[89abcdefABCDEF]{6}|outline.*#[cdefCDEF]{3,6}\"\n        message: \"Light focus outline colors may not meet 3:1 contrast ratio requirement for UI component identification.\"\n\n      # Missing focus-visible implementation\n      - pattern: \":focus\\\\s*\\\\{\"\n        pattern_negate: \":focus-visible|:focus:not\\\\(:focus-visible\\\\)\"\n        message: \"Consider implementing :focus-visible for better keyboard-only focus indication.\"\n\n      # Focus styles that may be obscured\n      - pattern: \"outline-offset:\\\\s*-?0\\\\.?0*px|outline-offset:\\\\s*0\"\n        message: \"Consider using positive outline-offset to prevent focus indicators from being obscured by adjacent elements.\"\n\n      # Missing forced-colors media query for Windows High Contrast\n      - pattern: \"@media\\\\s*\\\\(forced-colors:\\\\s*active\\\\)\"\n        pattern_negate: \"outline.*transparent\"\n        message: \"Windows High Contrast Mode requires transparent outline for native focus appearance.\"\n\n      # Custom focusable elements without proper tabindex\n      - pattern: \"<(div|span|button)[^>]*onclick|onkeydown|onkeypress\"\n        pattern_negate: \"tabindex=\\\"[0-9]\\\"|role=\\\"button\\\"|role=\\\"link\\\"\"\n        message: \"Custom interactive elements should have tabindex=\\\"0\\\" or appropriate ARIA role for keyboard accessibility.\"\n\n      # Focus styles with insufficient area\n      - pattern: \"outline-width:\\\\s*1px|outline-width:\\\\s*0\\\\.1rem\"\n        message: \"Thin focus outlines may not meet WCAG 2.4.13 Focus Appearance requirements for minimum area.\"\n\n      # Focus styles that blend with background\n      - pattern: \"outline.*rgba\\\\([^)]*0\\\\.1[^)]*\\\\)|outline.*rgba\\\\([^)]*0\\\\.2[^)]*\\\\)\"\n        message: \"Very transparent focus outlines may not provide sufficient contrast for visibility.\"\n\n      # Missing focus styles on interactive elements\n      - pattern: \"<(button|a|input|select|textarea)[^>]*>\"\n        pattern_negate: \":focus|:focus-visible|tabindex\"\n        message: \"Interactive elements should have visible focus styles for keyboard navigation accessibility.\"\n\n      # Dynamic content removal without focus management\n      - pattern: \"\\\\.remove\\\\(\\\\)|removeChild|innerHTML\\\\s*=\"\n        pattern_negate: \"focus\\\\(|focus\\\\(\\\\)\"\n        message: \"When removing dynamic content, ensure proper focus management by restoring focus to a logical location.\"\n\n  - type: suggest\n    message: |\n      **WCAG Focus Order and Focus Styles Requirements:**\n\n      **Focus Order Requirements:**\n\n      **1. Logical DOM Order:**\n      - **Default:** Focus order follows DOM element order\n      - **Navigation:** Tab key moves forward, Shift+Tab moves backward\n      - **Avoid:** Positive tabindex values (1, 2, 3, etc.)\n\n      **2. Tabindex Usage:**\n      ```html\n      <!-- Good: Use DOM order (default) -->\n      <button>First Button</button>\n      <button>Second Button</button>\n      <button>Third Button</button>\n\n      <!-- Good: tabindex=\"0\" for custom focusable elements -->\n      <div role=\"button\" tabindex=\"0\" onclick=\"handleClick()\">\n        Custom Button\n      </div>\n\n      <!-- Good: tabindex=\"-1\" for programmatic focus only -->\n      <div id=\"target\" tabindex=\"-1\">Focus target</div>\n      <button onclick=\"document.getElementById('target').focus()\">\n        Focus Target\n      </button>\n\n      <!-- Bad: Positive tabindex values -->\n      <button tabindex=\"1\">First</button>\n      <button tabindex=\"3\">Third</button>\n      <button tabindex=\"2\">Second</button>\n      ```\n\n      **Focus Styles Requirements:**\n\n      **1. WCAG 2.4.7 Focus Visible (Level A):**\n      - **Requirement:** Focus indicator must exist\n      - **Purpose:** Keyboard users need visible focus indication\n\n      **2. WCAG 1.4.11 Non-Text Contrast (Level AA):**\n      - **Requirement:** Minimum 3:1 contrast ratio for UI components\n      - **Applies to:** Focus indicators, borders, focus outlines\n\n      **3. WCAG 2.4.13 Focus Appearance (Level AAA):**\n      - **Requirement:** Minimum area and contrast for focus indicators\n      - **Area:** Focus indicator should be clearly visible\n\n      **4. WCAG 2.4.11 Focus Not Obscured (Level AA):**\n      - **Requirement:** Focused element not hidden by other content\n      - **Solution:** Use outline-offset to prevent overlap\n\n      **Focus Styles Implementation:**\n\n      **1. Basic Focus Styles:**\n      ```css\n      /* Good: Visible focus indicator */\n      button:focus {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n      }\n\n      /* Good: Custom focus styles */\n      .custom-button:focus {\n        outline: 3px solid #dc3545;\n        outline-offset: 3px;\n        box-shadow: 0 0 8px rgba(220, 53, 69, 0.5);\n      }\n      ```\n\n      **2. Focus-Visible Implementation:**\n      ```css\n      /* Default focus styles */\n      button:focus {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n      }\n\n      /* Remove focus styles for mouse users */\n      button:focus:not(:focus-visible) {\n        outline: none;\n        box-shadow: none;\n      }\n\n      /* Enhanced focus styles for keyboard users */\n      button:focus-visible {\n        outline: 3px solid #0056b3;\n        outline-offset: 3px;\n        box-shadow: 0 0 8px rgba(0, 86, 179, 0.5);\n      }\n      ```\n\n      **3. High Contrast Focus Styles:**\n      ```css\n      /* Default focus styles */\n      *:focus-visible {\n        outline: 0.2rem solid rgba(var(--color-foreground), 0.5);\n        outline-offset: -0.2rem;\n        box-shadow: 0 0 0.2rem rgba(var(--color-foreground), 0.3);\n      }\n\n      /* Windows High Contrast Mode */\n      @media (forced-colors: active) {\n        *:focus {\n          outline: 0.2rem solid transparent;\n        }\n      }\n      ```\n\n      **4. Component-Specific Focus Styles:**\n      ```css\n      /* Form inputs */\n      input:focus-visible,\n      textarea:focus-visible,\n      select:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n        border-color: #0056b3;\n      }\n\n      /* Links */\n      a:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n        text-decoration: underline;\n      }\n\n      /* Buttons */\n      button:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n        box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #0056b3;\n      }\n      ```\n\n      **Focus Order Best Practices:**\n\n      **1. Logical Content Flow:**\n      ```html\n      <!-- Good: Logical reading and focus order -->\n      <header>\n        <h1>Page Title</h1>\n        <nav>\n          <a href=\"/\">Home</a>\n          <a href=\"/about\">About</a>\n          <a href=\"/contact\">Contact</a>\n        </nav>\n      </header>\n\n      <main>\n        <h2>Main Content</h2>\n        <form>\n          <label for=\"name\">Name:</label>\n          <input type=\"text\" id=\"name\">\n\n          <label for=\"email\">Email:</label>\n          <input type=\"email\" id=\"email\">\n\n          <button type=\"submit\">Submit</button>\n        </form>\n      </main>\n      ```\n\n      **2. Custom Interactive Elements:**\n      ```html\n      <!-- Good: Proper focusable custom element -->\n      <div role=\"button\"\n           tabindex=\"0\"\n           onclick=\"handleClick()\"\n           onkeydown=\"handleKeydown(event)\"\n           class=\"custom-button\">\n        Custom Button\n      </div>\n\n      <!-- CSS for custom button focus -->\n      .custom-button:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n        background-color: #e7f3ff;\n      }\n      ```\n\n      **3. Skip Links and Focus Management:**\n      ```html\n      <!-- Skip link for main content -->\n      <a href=\"#main-content\" class=\"skip-link\">\n        Skip to main content\n      </a>\n\n      <!-- Main content with id for focus target -->\n      <main id=\"main-content\" tabindex=\"-1\">\n        <h1>Main Content</h1>\n        <!-- Content here -->\n      </main>\n\n      <!-- CSS for skip link -->\n      .skip-link {\n        position: absolute;\n        top: -40px;\n        left: 6px;\n        background: #0056b3;\n        color: #ffffff;\n        padding: 8px;\n        text-decoration: none;\n        z-index: 1000;\n      }\n\n      .skip-link:focus {\n        top: 6px;\n        outline: 2px solid #ffffff;\n        outline-offset: 2px;\n      }\n      ```\n\n      **Focus Styles Guidelines:**\n\n      **1. Contrast Requirements:**\n      - **Minimum:** 3:1 contrast ratio for focus indicators\n      - **Recommended:** 4.5:1 or higher for better visibility\n      - **Test:** Against adjacent colors and backgrounds\n\n      **2. Size and Visibility:**\n      - **Outline width:** Minimum 2px for visibility\n      - **Outline offset:** Use positive values to prevent overlap\n      - **Area:** Focus indicator should be clearly visible\n\n      **3. Color Selection:**\n      ```css\n      /* High contrast focus colors */\n      :focus-visible {\n        outline: 2px solid #0056b3; /* Blue - high contrast */\n        outline-offset: 2px;\n      }\n\n      /* Alternative high contrast colors */\n      :focus-visible {\n        outline: 2px solid #dc3545; /* Red - high contrast */\n        outline-offset: 2px;\n      }\n\n      :focus-visible {\n        outline: 2px solid #198754; /* Green - high contrast */\n        outline-offset: 2px;\n      }\n      ```\n\n      **4. Focus Not Obscured:**\n      ```css\n      /* Prevent focus indicator overlap */\n      button:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 3px; /* Space between element and outline */\n      }\n\n      /* Alternative: Use box-shadow for non-overlapping focus */\n      button:focus-visible {\n        outline: none;\n        box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #0056b3;\n      }\n      ```\n\n      **5. Dynamic Content Focus Management:**\n      ```javascript\n      // Focus management best practices\n      class FocusManager {\n        constructor() {\n          this.focusHistory = [];\n          this.currentFocus = null;\n        }\n\n        // Save focus before making changes\n        saveFocus() {\n          this.currentFocus = document.activeElement;\n          this.focusHistory.push(this.currentFocus);\n        }\n\n        // Restore focus to previous location\n        restoreFocus() {\n          if (this.focusHistory.length > 0) {\n            const previousFocus = this.focusHistory.pop();\n            if (previousFocus && document.contains(previousFocus)) {\n              previousFocus.focus();\n            }\n          }\n        }\n\n        // Focus first interactive element in new content\n        focusNewContent(container) {\n          const focusableElements = container.querySelectorAll(\n            'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n          );\n\n          if (focusableElements.length > 0) {\n            focusableElements[0].focus();\n          }\n        }\n\n        // Find logical focus target when content is removed\n        findLogicalFocusTarget(removedElement, container) {\n          // Try to focus next sibling element\n          const nextSibling = removedElement.nextElementSibling;\n          if (nextSibling) {\n            const focusableElement = nextSibling.querySelector(\n              'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n            );\n            if (focusableElement) {\n              return focusableElement;\n            }\n          }\n\n          // Try to focus previous sibling element\n          const prevSibling = removedElement.previousElementSibling;\n          if (prevSibling) {\n            const focusableElement = prevSibling.querySelector(\n              'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n            );\n            if (focusableElement) {\n              return focusableElement;\n            }\n          }\n\n          // Fallback to container or trigger button\n          return container.querySelector('button, [href], input') ||\n                 document.querySelector('[aria-haspopup=\"dialog\"]');\n        }\n      }\n\n      // Usage example\n      const focusManager = new FocusManager();\n\n      function addContent() {\n        focusManager.saveFocus();\n\n        // Add new content\n        const newContent = createNewContent();\n        container.appendChild(newContent);\n\n        // Focus first interactive element\n        focusManager.focusNewContent(newContent);\n      }\n\n      function removeContent(element) {\n        const container = element.parentElement;\n\n        // Find logical focus target before removing\n        const focusTarget = focusManager.findLogicalFocusTarget(element, container);\n\n        // Remove the element\n        element.remove();\n\n        // Focus the logical target\n        if (focusTarget) {\n          focusTarget.focus();\n        }\n      }\n      ```\n\n      **Testing and Validation:**\n\n      **1. Keyboard Navigation Testing:**\n      - Navigate using Tab and Shift+Tab\n      - Verify focus order is logical\n      - Check that focus indicators are visible\n      - Test with different focus styles\n\n      **2. Contrast Testing:**\n      - Use browser dev tools for contrast ratios\n      - Test against different backgrounds\n      - Verify 3:1 minimum contrast requirement\n      - Test with color blindness simulators\n\n      **3. Focus Visibility Testing:**\n      - Test with screen readers\n      - Verify focus indicators are not obscured\n      - Check focus styles in different themes\n      - Test Windows High Contrast Mode\n\n      **4. Dynamic Content Focus Testing:**\n      - Test focus management when adding new content\n      - Verify focus moves to first interactive element in new content\n      - Test focus restoration when removing content\n      - Ensure focus returns to logical location\n      - Test focus management with multiple dynamic elements\n      - Verify focus history is maintained correctly\n\n      **Common Mistakes to Avoid:**\n\n      **1. Focus Order Issues:**\n      - Using positive tabindex values\n      - Skipping focusable elements\n      - Illogical DOM structure\n      - Missing focusable elements\n\n      **2. Focus Style Problems:**\n      - Removing focus styles with `outline: none`\n      - Insufficient contrast ratios\n      - Focus indicators that are too small\n      - Focus styles that blend with background\n\n      **3. Implementation Issues:**\n      - Missing focus-visible implementation\n      - Not testing with keyboard navigation\n      - Ignoring Windows High Contrast Mode\n      - Focus indicators that are obscured\n\n      **4. Accessibility Violations:**\n      - No visible focus indicators\n      - Focus order that doesn't match reading order\n      - Custom elements without proper focus management\n      - Missing keyboard event handlers\n\n      **Advanced Focus Management:**\n\n      **1. Programmatic Focus Control:**\n      ```javascript\n      // Focus management for modals\n      function openModal() {\n        const modal = document.getElementById('modal');\n        const closeButton = document.getElementById('close-modal');\n\n        modal.style.display = 'block';\n        closeButton.focus(); // Focus close button when modal opens\n      }\n\n      // Trap focus within modal\n      function trapFocus(modal) {\n        const focusableElements = modal.querySelectorAll(\n          'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n        );\n\n        const firstElement = focusableElements[0];\n        const lastElement = focusableElements[focusableElements.length - 1];\n\n        // Handle Tab key\n        document.addEventListener('keydown', function(e) {\n          if (e.key === 'Tab') {\n            if (e.shiftKey) {\n              if (document.activeElement === firstElement) {\n                lastElement.focus();\n                e.preventDefault();\n              }\n            } else {\n              if (document.activeElement === lastElement) {\n                firstElement.focus();\n                e.preventDefault();\n              }\n            }\n          }\n        });\n      }\n      ```\n\n      **2. Dynamic Focus Management:**\n      ```javascript\n      // Focus restoration after dynamic content\n      function loadContent() {\n        const container = document.getElementById('content');\n        const previousFocus = document.activeElement;\n\n        // Load new content\n        container.innerHTML = newContent;\n\n        // Restore focus or set to first focusable element\n        const firstFocusable = container.querySelector(\n          'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n        );\n\n        if (firstFocusable) {\n          firstFocusable.focus();\n        } else if (previousFocus) {\n          previousFocus.focus();\n        }\n      }\n      ```\n\n      **3. Focus Indicators for Complex Components:**\n      ```css\n      /* Multi-state focus indicators */\n      .accordion-item:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n      }\n\n      .accordion-item[aria-expanded=\"true\"]:focus-visible {\n        outline-color: #198754; /* Different color for expanded state */\n      }\n\n      /* Focus indicators for different interaction states */\n      .interactive-element:focus-visible {\n        outline: 2px solid #0056b3;\n        outline-offset: 2px;\n      }\n\n      .interactive-element:hover:focus-visible {\n        outline-color: #004085; /* Darker on hover + focus */\n      }\n\n      .interactive-element:active:focus-visible {\n        outline-color: #002752; /* Even darker when active */\n      }\n      ```\n\n      **4. Dynamic Content Focus Management:**\n      ```javascript\n      // When adding content: focus first interactive element\n      function addDynamicContent() {\n        const container = document.getElementById('content');\n        const newElement = document.createElement('div');\n        newElement.innerHTML = `\n          <h3>New Content</h3>\n          <button class=\"btn\">Action Button</button>\n        `;\n\n        container.appendChild(newElement);\n\n        // Focus the first focusable element in new content\n        const firstFocusable = newElement.querySelector('button');\n        if (firstFocusable) {\n          firstFocusable.focus();\n        }\n      }\n\n      // When removing content: restore focus to logical location\n      function removeDynamicContent(element) {\n        const triggerButton = document.querySelector('[onclick=\"addDynamicContent()\"]');\n\n        // Store reference to element being removed\n        const removedElement = element;\n\n        // Remove the element\n        element.remove();\n\n        // Restore focus to the trigger button\n        if (triggerButton) {\n          triggerButton.focus();\n        }\n      }\n\n      // Advanced focus management for multiple elements\n      function removeSpecificElement(element, elementType) {\n        const container = element.parentElement;\n        const triggerButton = document.querySelector(`[onclick=\"add${elementType}()\"]`);\n\n        // Find the next logical focus target\n        let nextFocusTarget = triggerButton;\n\n        // If there are other elements, focus the next one\n        const remainingElements = container.querySelectorAll(`.${elementType.toLowerCase()}`);\n        if (remainingElements.length > 0) {\n          const targetElement = remainingElements[0];\n          const focusableElement = targetElement.querySelector('button, a, input');\n          if (focusableElement) {\n            nextFocusTarget = focusableElement;\n          }\n        }\n\n        // Remove the element\n        element.remove();\n\n        // Set focus to the appropriate target\n        nextFocusTarget.focus();\n      }\n      ```\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/form-accessibility.mdc",
    "content": "---\ndescription: Form component accessibility standards and WCAG compliance for form inputs, labels, instructions, and error handling\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: true\n---\n\n# Form Accessibility Standards\n\nEnsures form components follow WCAG compliance and provide proper accessibility for all users including screen reader users and keyboard-only users.\n\n<rule>\nname: form_accessibility_standards\ndescription: Enforce form component accessibility standards and WCAG compliance for form inputs, labels, instructions, and error handling\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing label association for form inputs\n      - pattern: \"(?i)<(input|textarea|select)[^>]*>\"\n        pattern_negate: \"(<label[^>]*for|id.*for|aria-label|aria-labelledby|title=)\"\n        message: \"Form inputs must have programmatically associated labels via label/for, aria-label, aria-labelledby, or title attributes.\"\n\n      # Empty or meaningless labels\n      - pattern: \"(?i)<label[^>]*>\\\\s*(?:label|input|field|required)\\\\s*</label>\"\n        message: \"Form labels must contain meaningful text that describes the input purpose, not generic terms.\"\n\n      # Placeholder as only label\n      - pattern: \"(?i)<input[^>]*placeholder=\\\"[^\\\"]+\\\"[^>]*>\"\n        pattern_negate: \"(<label|aria-label|aria-labelledby|title=)\"\n        message: \"Placeholder text cannot be the only method of providing a label. Add a proper label element or aria-label.\"\n\n      # Missing required field indicators\n      - pattern: \"(?i)<(input|textarea|select)[^>]*required[^>]*>\"\n        pattern_negate: \"(data-required|aria-required=\\\"true\\\"|\\\\*|aria-describedby)\"\n        message: \"Required fields should use data-required='true' instead of native required attribute, with visual indicators and aria-required='true' for screen readers.\"\n\n      # Missing fieldset for grouped inputs\n      - pattern: \"(?i)<input[^>]*type=\\\"(radio|checkbox)\\\"[^>]*name=\\\"[^\\\"]+\\\"[^>]*>\"\n        pattern_negate: \"(<fieldset|<div[^>]*role=\\\"group\\\")\"\n        message: \"Radio button and checkbox groups should be wrapped in fieldset or have role='group' for proper grouping.\"\n\n      # Missing legend for fieldset\n      - pattern: \"(?i)<fieldset[^>]*>\"\n        pattern_negate: \"<legend\"\n        message: \"Fieldset elements must have legend elements to provide context for the group.\"\n\n      # Missing input purpose identification\n      - pattern: \"(?i)<input[^>]*type=\\\"(text|email|tel|url|password)\\\"[^>]*>\"\n        pattern_negate: \"(autocomplete|aria-describedby|aria-label|placeholder)\"\n        message: \"Text inputs should have autocomplete attributes or other methods to identify their purpose for personal data collection.\"\n\n      # Missing error association\n      - pattern: \"(?i)<[^>]*aria-invalid=\\\"true\\\"[^>]*>\"\n        pattern_negate: \"(aria-describedby|aria-errormessage)\"\n        message: \"Inputs with aria-invalid='true' should have error messages associated via aria-describedby or aria-errormessage.\"\n\n      # Missing error message visibility\n      - pattern: \"(?i)<[^>]*class=\\\"[^\\\"]*(?:error|invalid)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(display.*none|visibility.*hidden|hidden|aria-hidden=\\\"true\\\")\"\n        message: \"Error messages should be visible to users and not hidden with CSS or aria-hidden.\"\n\n      # Missing focus management for error summaries\n      - pattern: \"(?i)<(div|section)[^>]*(?:error.*summary|summary.*error)[^>]*>\"\n        pattern_negate: \"(tabindex|focus|scrollIntoView)\"\n        message: \"Error summary containers should implement focus management to shift focus to the error banner heading when errors appear, improving user experience and accessibility.\"\n\n      # Missing form instructions association\n      - pattern: \"(?i)<(div|p)[^>]*(?:instruction|help|hint)[^>]*>\"\n        pattern_negate: \"(aria-describedby|aria-labelledby|id=)\"\n        message: \"Form instructions should be programmatically associated with their corresponding inputs via aria-describedby.\"\n\n      # Missing success message\n      - pattern: \"(?i)<form[^>]*>.*</form>\"\n        pattern_negate: \"(role=\\\"alert\\\"|aria-live|success|confirmation)\"\n        message: \"Forms should provide success confirmation messages, especially for critical operations like financial transactions.\"\n\n      # Missing focus management for success messages\n      - pattern: \"(?i)<(div|section)[^>]*(?:success|confirmation)[^>]*>\"\n        pattern_negate: \"(tabindex|focus|scrollIntoView)\"\n        message: \"Success message containers should implement focus management to shift focus to the success banner heading when messages appear, improving user experience and accessibility.\"\n\n      # Missing focusable headings for error/success messages\n      - pattern: \"(?i)<(h2|h3)[^>]*(?:error|success|confirmation)[^>]*>\"\n        pattern_negate: \"tabindex=\\\"-1\\\"\"\n        message: \"Error and success message headings should have tabindex='-1' to make them programmatically focusable for focus management.\"\n\n      # Missing time limit controls\n      - pattern: \"(?i)<form[^>]*>.*(?:time.*limit|session.*expir|expir.*time)\"\n        pattern_negate: \"(extend|turn.*off|adjust|customize|20.*hour)\"\n        message: \"Forms with time limits must provide options to extend, turn off, or adjust the time limit, or allow at least 20 hours.\"\n\n      # Missing error prevention for critical forms\n      - pattern: \"(?i)<form[^>]*(?:legal|financial|transaction|payment|commitment)[^>]*>\"\n        pattern_negate: \"(confirm|review|reversible|check.*error)\"\n        message: \"Critical forms (legal/financial) must implement error prevention techniques like confirmation, review, or reversibility.\"\n\n      # Missing disabled field alternatives\n      - pattern: \"(?i)<input[^>]*disabled[^>]*>\"\n        pattern_negate: \"(aria-describedby|aria-label|title=|role=\\\"text\\\")\"\n        message: \"Disabled fields that are essential to understanding content must have alternative ways to communicate their information.\"\n\n      # Missing data input restrictions communication\n      - pattern: \"(?i)<input[^>]*(?:maxlength|pattern|min|max)[^>]*>\"\n        pattern_negate: \"(aria-describedby|title=|placeholder|aria-label)\"\n        message: \"Inputs with restrictions (maxlength, pattern, min, max) should communicate these restrictions in labels or instructions.\"\n\n      # Help text using div instead of semantic small element\n      - pattern: \"(?i)<div[^>]*class=\\\"[^\\\"]*help-text[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"<small\"\n        message: \"Help text should use the semantic small element instead of div for better HTML5 compliance and accessibility.\"\n\n      # Form sections nested within main element\n      - pattern: \"(?i)<main[^>]*>.*<section[^>]*class=\\\"[^\\\"]*form-section[^\\\"]*\\\"[^>]*>\"\n        message: \"Form sections should be direct children of the container, not nested within the main element. Use main only for the form itself.\"\n\n      # Missing proper section structure\n      - pattern: \"(?i)<section[^>]*class=\\\"[^\\\"]*form-section[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(</section>|aria-labelledby)\"\n        message: \"Form sections must be properly closed with </section> tags and have aria-labelledby for accessibility.\"\n\n      # Improper section nesting within main element\n      - pattern: \"(?i)<main[^>]*>.*<section[^>]*class=\\\"[^\\\"]*form-section[^\\\"]*\\\"[^>]*>.*</section>\"\n        message: \"Form sections should not be nested within the main element. Move sections outside main and use main only for the form itself.\"\n\n      # Missing container wrapper for form sections\n      - pattern: \"(?i)<section[^>]*class=\\\"[^\\\"]*form-section[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"<div[^>]*class=\\\"[^\\\"]*container[^\\\"]*\\\"[^>]*>\"\n        message: \"Form sections should be wrapped in a container div for proper organization and styling.\"\n\n      # Missing proper heading structure in form sections\n      - pattern: \"(?i)<section[^>]*class=\\\"[^\\\"]*form-section[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"<h[1-6][^>]*>\"\n        message: \"Form sections must contain proper heading elements (h1-h6) for accessibility and content structure.\"\n\n      # Missing redundant entry prevention\n      - pattern: \"(?i)<form[^>]*>.*<input[^>]*name=\\\"(email|password|confirm)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(autocomplete|auto.*populate|select.*previous)\"\n        message: \"Forms requiring redundant information entry should provide auto-population or selection of previously entered data.\"\n\n      # Missing keyboard navigation support\n      - pattern: \"(?i)<(input|textarea|select|button)[^>]*>\"\n        pattern_negate: \"(tabindex|onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Form elements should support keyboard navigation and not interfere with tab order.\"\n\n      # Missing focus indicators\n      - pattern: \"(?i)<(input|textarea|select|button)[^>]*>\"\n        pattern_negate: \"(focus|:focus|outline|box-shadow)\"\n        message: \"Form elements must have visible focus indicators for keyboard navigation.\"\n\n      # Missing focus indicators for error/success message headings\n      - pattern: \"(?i)<(h2|h3)[^>]*tabindex=\\\"-1\\\"[^>]*>\"\n        pattern_negate: \"(focus|:focus|outline|box-shadow)\"\n        message: \"Focusable error and success message headings must have visible focus indicators for keyboard navigation.\"\n\n      # Help text with insufficient color contrast\n      - pattern: \"(?i)<[^>]*class=\\\"[^\\\"]*help-text[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(color:\\\\s*#[0-4][0-9a-fA-F]{5}|color:\\\\s*#[5-9a-fA-F][0-9a-fA-F]{5})\"\n        message: \"Help text must have sufficient color contrast (minimum 4.5:1 for normal text, 7:1 recommended). Use darker colors like #495057 for better accessibility.\"\n\n      # Missing form validation feedback\n      - pattern: \"(?i)<form[^>]*>\"\n        pattern_negate: \"(validate|check.*error|aria-invalid|aria-describedby)\"\n        message: \"Forms should provide validation feedback and error checking for user input.\"\n\n  - type: suggest\n    message: |\n      **Form Accessibility Best Practices:**\n\n      **Label Requirements:**\n      - **Programmatic Association:** Labels MUST be programmatically associated with inputs\n      - **Meaningful Text:** Labels MUST contain meaningful, descriptive text\n      - **Visible Labels:** Labels MUST be visible to users\n      - **No Sensory Dependencies:** Labels MUST NOT rely solely on visual characteristics\n      - **Icon Labels:** Icons can be used as visual labels if meaning is self-evident AND semantic label is provided\n\n      **Label Implementation Patterns:**\n\n      **Basic Label Association:**\n      ```html\n      <!-- Good: Label with for attribute -->\n      <label for=\"username\">Username</label>\n      <input type=\"text\" id=\"username\" name=\"username\">\n\n      <!-- Good: aria-label for simple cases -->\n      <input type=\"text\" aria-label=\"Search products\" placeholder=\"Enter search term\">\n\n      <!-- Good: aria-labelledby for complex labels -->\n      <h3 id=\"address-heading\">Shipping Address</h3>\n      <input type=\"text\" aria-labelledby=\"address-heading\" name=\"street\">\n      ```\n\n      **Required Field Indicators:**\n      ```html\n      <label for=\"email\">\n        Email Address <span class=\"required\" aria-label=\"required\">*</span>\n      </label>\n      <input type=\"email\"\n             id=\"email\"\n             name=\"email\"\n             required\n             aria-required=\"true\"\n             aria-describedby=\"email-help\">\n      <small id=\"email-help\" class=\"help-text\">\n        We'll use this to send you order confirmations\n      </small>\n      ```\n\n      **Input Groups with Fieldset:**\n      ```html\n      <fieldset>\n        <legend>Contact Preferences</legend>\n        <label for=\"email-notifications\">\n          <input type=\"checkbox\" id=\"email-notifications\" name=\"notifications[]\" value=\"email\">\n          Email Notifications\n        </label>\n        <label for=\"sms-notifications\">\n          <input type=\"checkbox\" id=\"sms-notifications\" name=\"notifications[]\" value=\"sms\">\n          SMS Notifications\n        </label>\n      </fieldset>\n      ```\n\n      **Input Purpose Identification:**\n      ```html\n      <!-- Personal data inputs should have autocomplete -->\n      <label for=\"full-name\">Full Name</label>\n      <input type=\"text\"\n             id=\"full-name\"\n             name=\"fullName\"\n             autocomplete=\"name\">\n\n      <label for=\"email-address\">Email Address</label>\n      <input type=\"email\"\n             id=\"email-address\"\n             name=\"email\"\n             autocomplete=\"email\">\n\n      <label for=\"phone-number\">Phone Number</label>\n      <input type=\"tel\"\n             id=\"phone-number\"\n             name=\"phone\"\n             autocomplete=\"tel\">\n      ```\n\n      **Error Handling and Validation:**\n\n      **Error Message Association:**\n      ```html\n      <label for=\"password\">Password</label>\n      <input type=\"password\"\n             id=\"password\"\n             name=\"password\"\n             aria-describedby=\"password-requirements password-error\"\n             aria-invalid=\"false\">\n\n      <small id=\"password-requirements\" class=\"help-text\">\n        Password must be at least 8 characters with uppercase, lowercase, and number\n      </small>\n\n      <div id=\"password-error\" class=\"error-message\" role=\"alert\" hidden>\n        Password does not meet requirements\n      </div>\n      ```\n\n      **Real-time Validation:**\n      ```javascript\n      function validatePassword(input) {\n        const password = input.value;\n        const requirements = document.getElementById('password-requirements');\n        const error = document.getElementById('password-error');\n\n        // Check requirements\n        const hasLength = password.length >= 8;\n        const hasUpper = /[A-Z]/.test(password);\n        const hasLower = /[a-z]/.test(password);\n        const hasNumber = /\\d/.test(password);\n\n        if (hasLength && hasUpper && hasLower && hasNumber) {\n          input.setAttribute('aria-invalid', 'false');\n          error.hidden = true;\n          requirements.className = 'help-text valid';\n        } else {\n          input.setAttribute('aria-invalid', 'true');\n          error.hidden = false;\n          requirements.className = 'help-text invalid';\n        }\n      }\n      ```\n\n      **Form Instructions and Help:**\n\n      **Input Instructions:**\n      ```html\n      <label for=\"zip-code\">ZIP Code</label>\n      <input type=\"text\"\n             id=\"zip-code\"\n             name=\"zipCode\"\n             maxlength=\"5\"\n             pattern=\"[0-9]{5}\"\n             aria-describedby=\"zip-help\">\n      <div id=\"zip-help\" class=\"help-text\">\n        Enter 5-digit ZIP code (e.g., 12345)\n      </div>\n      ```\n\n      **Form-level Instructions:**\n      ```html\n      <form aria-describedby=\"form-instructions\">\n        <div id=\"form-instructions\" class=\"form-instructions\">\n          <p>All fields marked with * are required. Please review your information before submitting.</p>\n        </div>\n\n        <!-- Form fields here -->\n      </form>\n      ```\n\n      **Success and Error Messages:**\n\n      **Success Confirmation:**\n      ```html\n      <div id=\"success-message\"\n           class=\"success-message\"\n           role=\"alert\"\n           aria-live=\"polite\"\n           hidden>\n        Your order has been successfully submitted! Order #12345\n      </div>\n      ```\n\n      **Error Summary:**\n      ```html\n      <div id=\"error-summary\"\n           class=\"error-summary\"\n           role=\"alert\"\n           aria-live=\"assertive\"\n           hidden>\n        <h2 tabindex=\"-1\">Please correct the following errors:</h2>\n        <ul>\n          <li><a href=\"#email\">Email address is required</a></li>\n          <li><a href=\"#phone\">Phone number format is invalid</a></li>\n        </ul>\n      </div>\n      ```\n\n            **Focus Management for Error and Success Messages:**\n      ```javascript\n      function showErrorSummary(errors) {\n        const errorSummary = document.getElementById('error-summary');\n        const errorHeading = errorSummary.querySelector('h2');\n\n        // Show error summary\n        errorSummary.classList.add('show');\n\n        // Shift focus to error banner heading for better user experience\n        // Use requestAnimationFrame to ensure the element is fully visible before focusing\n        requestAnimationFrame(() => {\n          if (errorHeading) {\n            errorHeading.focus();\n            errorHeading.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          }\n        });\n      }\n\n      function showSuccessMessage() {\n        const successMessage = document.getElementById('success-message');\n        const successHeading = successMessage.querySelector('h3');\n\n        successMessage.classList.add('show');\n\n        // Shift focus to success message heading for better user experience\n        // Use requestAnimationFrame to ensure the element is fully visible before focusing\n        requestAnimationFrame(() => {\n          if (successHeading) {\n            successHeading.focus();\n            successHeading.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          }\n        });\n      }\n      ```\n\n      **Focus Management Benefits:**\n      - **User Experience:** Places cursor at beginning of error information\n      - **Accessibility:** Screen readers announce error content from the start\n      - **Navigation:** Users can easily navigate through error list\n      - **Context:** Provides clear starting point for error resolution\n\n      **Implementation Considerations:**\n      - **Timing:** Use requestAnimationFrame to ensure elements are fully visible before focusing\n      - **Fallback:** Provide fallback focus management if headings aren't found\n      - **Smooth Scrolling:** Use smooth scrolling for better user experience\n      - **Focus Indicators:** Ensure focusable headings have visible focus indicators\n      - **Browser Behavior:** Prevent default browser focus behavior on form submission\n\n      **CSS for Focusable Error and Success Message Headings:**\n      ```css\n      /* Make error and success message headings focusable */\n      .error-summary h2:focus,\n      .success-message h3:focus {\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n        border-radius: 4px;\n      }\n\n      /* High contrast mode support */\n      @media (prefers-contrast: more) {\n        .error-summary h2:focus,\n        .success-message h3:focus {\n          outline: 3px solid #000000;\n        }\n      }\n      ```\n\n      **Form Structure and Semantic HTML:**\n\n      **Proper Section Organization:**\n      ```html\n      <div class=\"container\">\n        <!-- Form Instructions (standalone section) -->\n        <section class=\"form-section\" aria-labelledby=\"instructions-heading\">\n          <h2 id=\"instructions-heading\">Form Instructions</h2>\n          <small id=\"form-instructions\" class=\"help-text\">\n            <!-- Instructions content -->\n          </small>\n        </section>\n\n        <!-- Time Limit Warning (standalone div) -->\n        <div class=\"time-limit-warning\" role=\"alert\" aria-live=\"polite\">\n          <!-- Timer content -->\n        </div>\n\n        <!-- Error Summary (standalone div) -->\n        <div id=\"error-summary\" class=\"error-summary\" role=\"alert\" aria-live=\"assertive\">\n          <!-- Error content -->\n        </div>\n\n        <!-- Main Form (contained in main landmark) -->\n        <main role=\"main\" aria-labelledby=\"main-heading\">\n          <h2 id=\"main-heading\" class=\"sr-only\">Form Content</h2>\n          <form id=\"main-form\" onsubmit=\"handleFormSubmit(event)\">\n            <!-- Form sections within the form -->\n            <section class=\"form-section\" aria-labelledby=\"personal-info-heading\">\n              <h2 id=\"personal-info-heading\">Personal Information</h2>\n              <!-- Form fields -->\n            </section>\n          </form>\n        </main>\n\n        <!-- Additional sections after the form -->\n        <section class=\"form-section\" aria-labelledby=\"disabled-field-heading\">\n          <h2 id=\"disabled-field-heading\">Disabled Field Example</h2>\n          <!-- Content -->\n        </section>\n      </div>\n      ```\n\n      **Help Text Semantic Elements:**\n      ```html\n      <!-- Good: Use small element for help text -->\n      <label for=\"email\">Email Address</label>\n      <input type=\"email\" id=\"email\" name=\"email\" aria-describedby=\"email-help\">\n      <small id=\"email-help\" class=\"help-text\">\n        We'll use this to send you order confirmations\n      </small>\n\n      <!-- Avoid: Using div for help text -->\n      <div id=\"email-help\" class=\"help-text\">\n        We'll use this to send you order confirmations\n      </div>\n      ```\n\n      **Help Text Color Contrast Requirements:**\n      ```css\n      .help-text {\n        font-size: 0.875rem;\n        color: #495057; /* 7.0:1 contrast ratio on white */\n        margin-top: 4px;\n        margin-bottom: 8px;\n        display: block;\n        line-height: 1.4;\n      }\n\n      /* High contrast mode support */\n      @media (prefers-contrast: more) {\n        .help-text,\n        small.help-text {\n          color: #000000; /* Maximum contrast */\n        }\n      }\n      ```\n\n      **Structural Guidelines:**\n      - **Container Organization:** All sections should be direct children of the container div\n      - **Main Landmark:** Use main element only for the form itself, not for wrapper content\n      - **Section Semantics:** Use section elements for major content areas with proper headings\n      - **Help Text Elements:** Use small elements for supplementary text and instructions\n      - **Color Contrast:** Ensure help text meets minimum 4.5:1 contrast ratio (7.0:1 recommended)\n      - **Proper Nesting:** Avoid nesting sections within other sections or main elements\n\n      **Time Limits and Error Prevention:**\n\n      **Time Limit Controls:**\n      ```html\n      <div class=\"time-limit-warning\" role=\"alert\" aria-live=\"polite\">\n        <p>Your session will expire in <span id=\"time-remaining\">14:30</span> minutes</p>\n        <button type=\"button\" onclick=\"extendSession()\">Extend Session</button>\n        <button type=\"button\" onclick=\"turnOffTimer()\">Turn Off Timer</button>\n      </div>\n      ```\n\n      **Critical Form Confirmation:**\n      ```html\n      <form onsubmit=\"return confirmSubmission()\">\n        <!-- Form fields -->\n\n        <div class=\"confirmation-section\">\n          <h3>Review Your Information</h3>\n          <div id=\"order-summary\" class=\"order-summary\">\n            <!-- Order summary content -->\n          </div>\n\n          <label for=\"confirm-checkbox\">\n            <input type=\"checkbox\" id=\"confirm-checkbox\" required>\n            I confirm that all information is correct and I agree to the terms\n          </label>\n        </div>\n\n        <button type=\"submit\">Submit Order</button>\n      </form>\n      ```\n\n      **JavaScript for Form Accessibility:**\n\n      **Form Validation:**\n      ```javascript\n      function validateForm() {\n        const form = document.querySelector('form');\n        const inputs = form.querySelectorAll('input, textarea, select');\n        let hasErrors = false;\n\n        inputs.forEach(input => {\n          if (input.hasAttribute('required') && !input.value.trim()) {\n            showError(input, 'This field is required');\n            hasErrors = true;\n          } else if (input.getAttribute('aria-invalid') === 'true') {\n            hasErrors = true;\n          }\n        });\n\n        if (hasErrors) {\n          showErrorSummary();\n          return false;\n        }\n\n        return true;\n      }\n\n      function showError(input, message) {\n        const errorId = input.id + '-error';\n        let errorElement = document.getElementById(errorId);\n\n        if (!errorElement) {\n          errorElement = document.createElement('div');\n          errorElement.id = errorId;\n          errorElement.className = 'error-message';\n          errorElement.role = 'alert';\n          input.parentNode.appendChild(errorElement);\n        }\n\n        errorElement.textContent = message;\n        errorElement.hidden = false;\n        input.setAttribute('aria-invalid', 'true');\n        input.setAttribute('aria-describedby',\n          input.getAttribute('aria-describedby') + ' ' + errorId);\n      }\n      ```\n\n      **Focus Management:**\n      ```javascript\n      function focusFirstError() {\n        const firstError = document.querySelector('[aria-invalid=\"true\"]');\n        if (firstError) {\n          firstError.focus();\n          firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        }\n      }\n\n      function focusSuccessMessage() {\n        const successMessage = document.getElementById('success-message');\n        if (successMessage) {\n          successMessage.hidden = false;\n          successMessage.focus();\n        }\n      }\n      ```\n\n      **CSS for Accessibility:**\n\n      **Focus Indicators:**\n      ```css\n      /* High contrast focus indicators */\n      input:focus,\n      textarea:focus,\n      select:focus,\n      button:focus {\n        outline: 3px solid #0056b3;\n        outline-offset: 2px;\n        border-color: #0056b3;\n      }\n\n      /* Error states */\n      input[aria-invalid=\"true\"] {\n        border-color: #dc3545;\n        border-width: 2px;\n      }\n\n      /* Required field indicators */\n      .required {\n        color: #dc3545;\n        font-weight: bold;\n      }\n\n      /* Help text styling */\n      .help-text {\n        font-size: 0.875rem;\n        color: #6c757d;\n        margin-top: 0.25rem;\n      }\n\n      /* Error message styling */\n      .error-message {\n        color: #dc3545;\n        font-size: 0.875rem;\n        margin-top: 0.25rem;\n        font-weight: 500;\n      }\n\n      /* Success message styling */\n      .success-message {\n        color: #198754;\n        background-color: #d1e7dd;\n        border: 1px solid #badbcc;\n        padding: 1rem;\n        border-radius: 0.375rem;\n        margin: 1rem 0;\n      }\n      ```\n\n      **Testing and Validation:**\n\n      **Accessibility Checklist:**\n      - All form inputs have associated labels\n      - Required fields are clearly indicated\n      - Error messages are associated with inputs\n      - Form can be completed with keyboard only\n      - Focus indicators are visible and clear\n      - Screen readers can access all form content\n      - Time limits have appropriate controls\n      - Critical forms have error prevention\n      - Success/error messages are announced\n      - Form instructions are accessible\n\n      **Common Mistakes to Avoid:**\n      - Using placeholder text as the only label\n      - Missing required field indicators\n      - Not associating error messages with inputs\n      - Missing form-level instructions\n      - No success confirmation messages\n      - Insufficient time limit controls\n      - Missing error prevention for critical forms\n      - Poor focus management\n      - Inaccessible validation feedback\n      - Missing input purpose identification\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/global-accessibility-standards.mdc",
    "content": "---\ndescription: Global scope accessibility standards per WCAG requirements for page language, viewport, title attributes, and skip links\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: true\n---\n\n# Global Scope Accessibility Standards\n\nEnsures global accessibility best practices are followed including page language, viewport meta tag, title attribute usage, and skip link implementation for WCAG compliance.\n\n<rule>\nname: global_accessibility_standards\ndescription: Enforce global scope accessibility standards per WCAG requirements for page language, viewport, title attributes, and skip links\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing lang attribute on html element\n      - pattern: \"<html[^>]*>\"\n        pattern_negate: \"lang=\\\"[a-z]{2}(?:-[A-Z]{2})?\\\"\"\n        message: \"HTML element must have lang attribute set to ensure proper pronunciation by assistive technology. Use lang=\\\"en\\\" for English or appropriate language code.\"\n\n      # Invalid language code format\n      - pattern: \"lang=\\\"[^a-z]{2}(?:-[^A-Z]{2})?\\\"\"\n        message: \"Language code must follow ISO 639-1 format (e.g., lang=\\\"en\\\", lang=\\\"fr-CA\\\").\"\n\n      # Missing viewport meta tag\n      - pattern: \"<head[^>]*>\"\n        pattern_negate: \"<meta[^>]*name=\\\"viewport\\\"\"\n        message: \"Viewport meta tag is required for responsive design and accessibility. Include <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">.\"\n\n      # Viewport meta tag preventing zoom\n      - pattern: \"<meta[^>]*name=\\\"viewport\\\"[^>]*>\"\n        pattern_negate: \"(maximum-scale=1\\\\.0|user-scalable=no)\"\n        message: \"Viewport meta tag should not prevent zooming. Avoid maximum-scale=1.0 and user-scalable=no to maintain accessibility for low-vision users.\"\n\n      # Problematic viewport attributes\n      - pattern: \"(maximum-scale=1\\\\.0|user-scalable=no)\"\n        message: \"Viewport meta tag contains attributes that prevent zooming, which creates accessibility issues for low-vision users. Remove maximum-scale=1.0 and user-scalable=no.\"\n\n      # Title attribute on non-iframe elements\n      - pattern: \"(?i)<[^>]*title=\\\"[^\\\"]+\\\"[^>]*>\"\n        pattern_negate: \"(iframe|IFRAME)\"\n        message: \"Avoid using title attribute on non-iframe elements as it creates accessibility issues. Use visible text, aria-label, or custom tooltips instead.\"\n\n      # Missing title on iframe elements\n      - pattern: \"<iframe[^>]*>\"\n        pattern_negate: \"title=\\\"[^\\\"]+\\\"\"\n        message: \"Iframe elements must have title attribute to provide context for screen reader users.\"\n\n      # Empty or meaningless iframe title\n      - pattern: \"<iframe[^>]*title=\\\"\\\\s*(?:iframe|frame|content|page)\\\\s*\\\"[^>]*>\"\n        message: \"Iframe title should be descriptive and meaningful, not generic terms like 'iframe' or 'content'.\"\n\n      # Missing skip link\n      - pattern: \"<body[^>]*>\"\n        pattern_negate: \"<a[^>]*href=\\\"#[^\\\"]*\\\"[^>]*(?:skip|main|content)\"\n        message: \"Skip link is required for keyboard navigation accessibility. Add a skip link at the top of the page to bypass repeated content.\"\n\n      # Skip link not at top of page\n      - pattern: \"<a[^>]*href=\\\"#[^\\\"]*\\\"[^>]*(?:skip|main|content)[^>]*>\"\n        pattern_negate: \"(<body|<header|<nav)\"\n        message: \"Skip link should be one of the first elements in the document, typically within the header or at the top of the body.\"\n\n      # Skip link without proper target\n      - pattern: \"<a[^>]*href=\\\"#[^\\\"]*\\\"[^>]*(?:skip|main|content)[^>]*>\"\n        pattern_negate: \"href=\\\"#(main|content|primary|skip-content)\\\"\"\n        message: \"Skip link href should target main content area (e.g., href=\\\"#main\\\").\"\n\n      # Skip link target missing tabindex\n      - pattern: \"<a[^>]*href=\\\"#(main|content|primary|skip-content)\\\"[^>]*>\"\n        pattern_negate: \"<(main|div|section)[^>]*id=\\\"(main|content|primary|skip-content)\\\"[^>]*tabindex=\\\"-1\\\"\"\n        message: \"Skip link target element must have tabindex=\\\"-1\\\" to receive keyboard focus when skip link is activated.\"\n\n      # Skip link without proper CSS classes\n      - pattern: \"<a[^>]*href=\\\"#[^\\\"]*\\\"[^>]*(?:skip|main|content)[^>]*>\"\n        pattern_negate: \"(class=\\\"[^\\\"]*(?:visuallyhidden|sr-only|skip-link)[^\\\"]*\\\"|style=\\\"[^\\\"]*(?:position:\\\\s*absolute|clip:\\\\s*rect|overflow:\\\\s*hidden)[^\\\"]*\\\")\"\n        message: \"Skip link should have CSS classes or styles to hide it visually while keeping it accessible to screen readers and keyboard users.\"\n\n      # Skip link not properly hidden\n      - pattern: \"<a[^>]*href=\\\"#[^\\\"]*\\\"[^>]*(?:skip|main|content)[^>]*>\"\n        pattern_negate: \"(display:\\\\s*none|visibility:\\\\s*hidden)\"\n        message: \"Skip link should not use display:none or visibility:hidden as these hide it from screen readers. Use visuallyhidden or sr-only classes instead.\"\n\n  - type: suggest\n    message: |\n      **Global Scope Accessibility Best Practices:**\n\n      **1. Page Language (WCAG 3.1.1 Language of Page):**\n      ```html\n      <!-- Good: Proper language declaration -->\n      <!DOCTYPE html>\n      <html lang=\"en\">\n        <head>\n          <title>Page Title</title>\n        </head>\n        <body>\n          <!-- Content in English -->\n        </body>\n      </html>\n\n      <!-- Good: Language toggle with proper lang attributes -->\n      <nav>\n        <a href=\"/en\" lang=\"en\">English</a>\n        <a href=\"/fr\" lang=\"fr\">Français</a>\n      </nav>\n\n      <!-- Good: Mixed language content -->\n      <p>Welcome to our site. <span lang=\"fr\">Bienvenue sur notre site.</span></p>\n      ```\n\n      **Language Code Requirements:**\n      - **Primary language:** Set on `<html>` element\n      - **Format:** ISO 639-1 (e.g., `lang=\"en\"`, `lang=\"fr-CA\"`)\n      - **Mixed content:** Use `lang` attribute on specific elements\n      - **Purpose:** Enables proper pronunciation by assistive technology\n\n      **2. Viewport Meta Tag (WCAG 1.3.3 Sensory Characteristics):**\n      ```html\n      <!-- Good: Accessible viewport meta tag -->\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n      <!-- Good: With additional accessibility features -->\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=5.0\">\n\n      <!-- Bad: Prevents zooming (accessibility issue) -->\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n      ```\n\n      **Viewport Requirements:**\n      - **Required:** Must be present for responsive design\n      - **Zoom support:** Must allow users to zoom content\n      - **Avoid:** `maximum-scale=1.0` and `user-scalable=no`\n      - **Purpose:** Enables low-vision users to zoom content\n\n      **3. Title Attribute (General Avoidance):**\n      ```html\n      <!-- Bad: Title attribute on non-iframe elements -->\n      <button title=\"Click to submit form\">Submit</button>\n      <a href=\"/help\" title=\"Get help with your account\">Help</a>\n\n      <!-- Good: Visible text instead of title -->\n      <button>Submit form</button>\n      <a href=\"/help\">Get help with your account</a>\n\n      <!-- Good: Custom accessible tooltip -->\n      <button aria-describedby=\"submit-tooltip\">Submit</button>\n      <div id=\"submit-tooltip\" class=\"tooltip\" role=\"tooltip\">\n        Click to submit your form\n      </div>\n      ```\n\n      **Title Attribute Guidelines:**\n      - **Avoid:** On interactive elements, links, buttons\n      - **Exception:** Required on iframe elements\n      - **Alternatives:** Visible text, aria-label, aria-describedby\n      - **Issues:** Mouse-only, screen reader redundancy, low-vision interference\n\n      **4. Iframe Title Requirements:**\n      ```html\n      <!-- Good: Iframe with descriptive title -->\n      <iframe\n        src=\"https://example.com/embed\"\n        title=\"Interactive map showing store locations across the city\"\n        width=\"600\"\n        height=\"400\">\n      </iframe>\n\n      <!-- Good: Iframe with meaningful title -->\n      <iframe\n        src=\"https://example.com/calendar\"\n        title=\"Company event calendar for December 2024\"\n        width=\"100%\"\n        height=\"500\">\n      </iframe>\n\n      <!-- Bad: Generic or meaningless title -->\n      <iframe\n        src=\"https://example.com/embed\"\n        title=\"iframe\"\n        width=\"600\"\n        height=\"400\">\n      </iframe>\n      ```\n\n      **Iframe Accessibility:**\n      - **Required:** Title attribute for context\n      - **Content:** Descriptive explanation of iframe purpose\n      - **Screen readers:** Need context before entering frame\n      - **Navigation:** Ctrl+Opt+Shift+Down to enter iframe (VoiceOver)\n\n      **5. Skip Link Implementation (WCAG 2.4.1 Bypass Blocks):**\n      ```html\n      <!-- Good: Skip link at top of page -->\n      <body>\n        <a href=\"#main\" class=\"skip-link visuallyhidden focusable\">\n          Skip to main content\n        </a>\n\n        <header>\n          <nav>\n            <!-- Navigation content -->\n          </nav>\n        </header>\n\n        <main id=\"main\" tabindex=\"-1\">\n          <h1>Page Title</h1>\n          <!-- Main content -->\n        </main>\n      </body>\n      ```\n\n      **Skip Link Requirements:**\n      - **Position:** First element in document (after body)\n      - **Target:** Main content area with matching ID\n      - **Focus:** Target element must have `tabindex=\"-1\"`\n      - **Styling:** Hidden visually, visible on focus\n      - **Purpose:** Bypass repeated navigation content\n\n      **6. Skip Link CSS Implementation:**\n      ```css\n      /* Visually hidden but accessible */\n      .visuallyhidden {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        padding: 0;\n        margin: -1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n        border: 0;\n      }\n\n      /* Show on focus for keyboard users */\n      .focusable:focus {\n        position: static;\n        width: auto;\n        height: auto;\n        padding: 8px 16px;\n        margin: 0;\n        overflow: visible;\n        clip: auto;\n        white-space: normal;\n        background: #000;\n        color: #fff;\n        text-decoration: none;\n        border-radius: 4px;\n        z-index: 1000;\n      }\n\n      /* Alternative: Screen reader only class */\n      .sr-only {\n        position: absolute;\n        left: -10000px;\n        width: 1px;\n        height: 1px;\n        overflow: hidden;\n      }\n      ```\n\n      **Skip Link Best Practices:**\n      - **Target elements:** `<main>`, `<h1>`, or main content container\n      - **Focus management:** Use `tabindex=\"-1\"` on target\n      - **Visual feedback:** Show link when it receives focus\n      - **Positioning:** Place at very top of document\n      - **Text:** Clear and descriptive (e.g., \"Skip to main content\")\n\n      **7. Complete Implementation Example:**\n      ```html\n      <!DOCTYPE html>\n      <html lang=\"en\">\n        <head>\n          <meta charset=\"UTF-8\">\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n          <title>Accessible Web Page</title>\n          <style>\n            .skip-link {\n              position: absolute;\n              top: -40px;\n              left: 6px;\n              background: #000;\n              color: #fff;\n              padding: 8px;\n              text-decoration: none;\n              border-radius: 4px;\n              z-index: 1000;\n            }\n            .skip-link:focus {\n              top: 6px;\n            }\n          </style>\n        </head>\n        <body>\n          <!-- Skip link -->\n          <a href=\"#main\" class=\"skip-link\">Skip to main content</a>\n\n          <!-- Header -->\n          <header role=\"banner\">\n            <h1>Company Name</h1>\n            <nav role=\"navigation\" aria-label=\"Primary\">\n              <ul>\n                <li><a href=\"/\">Home</a></li>\n                <li><a href=\"/about\">About</a></li>\n                <li><a href=\"/contact\">Contact</a></li>\n              </ul>\n            </nav>\n          </header>\n\n          <!-- Main content -->\n          <main id=\"main\" role=\"main\" tabindex=\"-1\">\n            <h2>Welcome to Our Site</h2>\n            <p>This is the main content area that the skip link targets.</p>\n\n            <!-- Iframe example -->\n            <iframe\n              src=\"https://example.com/embed\"\n              title=\"Interactive product demonstration video\"\n              width=\"100%\"\n              height=\"400\">\n            </iframe>\n          </main>\n\n          <!-- Footer -->\n          <footer role=\"contentinfo\">\n            <p>&copy; 2024 Company Name</p>\n          </footer>\n        </body>\n      </html>\n      ```\n\n      **Testing and Validation:**\n      - **Language:** Verify lang attribute is set correctly\n      - **Viewport:** Test zoom functionality on mobile devices\n      - **Title attributes:** Check for unnecessary usage on non-iframe elements\n      - **Iframe titles:** Verify descriptive titles for all iframes\n      - **Skip links:** Test keyboard navigation and focus management\n      - **Screen readers:** Verify skip link announces correctly\n      - **Focus order:** Ensure skip link target receives focus properly\n\n      **Common Mistakes to Avoid:**\n      - Missing lang attribute on html element\n      - Viewport meta tag preventing zoom\n      - Using title attributes on interactive elements\n      - Missing or generic iframe titles\n      - Skip link not positioned at top of page\n      - Skip link target without tabindex=\"-1\"\n      - Skip link hidden with display:none\n      - Skip link not visible on focus\n      - Generic skip link text\n      - Skip link targeting wrong element\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/heading-accessibility.mdc",
    "content": "---\ndescription: Heading element accessibility compliance and WCAG 2.4.1 Bypass Blocks requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: true\n---\n# Heading Element Accessibility Standards\n\nEnsures heading elements follow WCAG compliance and provide proper content structure for screen reader navigation and bypass blocks functionality.\n\n<rule>\nname: heading_accessibility_standards\ndescription: Enforce heading element accessibility standards per WCAG 2.4.1 Bypass Blocks requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing heading markup for visually styled headings\n      - pattern: \"(?i)<(div|span|p)[^>]*(?:heading|title|header)[^>]*>\"\n        pattern_negate: \"(role=\\\"heading\\\"|h[1-6])\"\n        message: \"Text that acts as a heading visually or structurally must be designated as a true heading (h1-h6) or use role='heading' with aria-level.\"\n\n      # Heading markup on non-heading content\n      - pattern: \"(?i)<(h[1-6]|div[^>]*role=\\\"heading\\\")[^>]*>\"\n        pattern_negate: \"(heading|title|header|section|main|content|page)\"\n        message: \"Text that does not act as a heading visually or structurally should not be marked as a heading.\"\n\n      # Missing aria-level on role=\"heading\"\n      - pattern: \"(?i)<[^>]*role=\\\"heading\\\"[^>]*>\"\n        pattern_negate: \"aria-level=\\\"[1-6]\\\"\"\n        message: \"Elements with role='heading' must have aria-level attribute set to appropriate level (1-6).\"\n\n      # Invalid aria-level values\n      - pattern: \"(?i)aria-level=\\\"[^1-6]\\\"\"\n        message: \"aria-level must be set to a value between 1 and 6 for heading elements.\"\n\n      # Missing h1 in main content\n      - pattern: \"(?i)<main[^>]*>\"\n        pattern_negate: \"<h1[^>]*>\"\n        message: \"Main content should start with an h1 heading for proper document structure.\"\n\n      # Multiple h1 elements (potential issue)\n      - pattern: \"(?i)<h1[^>]*>.*<h1[^>]*>\"\n        message: \"Most web pages should have only one h1 element. Consider using h2-h6 for section headings.\"\n\n      # Skipped heading levels\n      - pattern: \"(?i)<h1[^>]*>.*<h3[^>]*>\"\n        message: \"Headings should not skip hierarchical levels. Consider using h2 before h3.\"\n\n      - pattern: \"(?i)<h2[^>]*>.*<h4[^>]*>\"\n        message: \"Headings should not skip hierarchical levels. Consider using h3 before h4.\"\n\n      # Clickable headings with improper structure\n      - pattern: \"(?i)<a[^>]*>.*<h[1-6][^>]*>.*</h[1-6]>.*</a>\"\n        message: \"Heading elements should not be children of link elements. The heading should wrap the link to maintain semantic structure.\"\n\n      # Empty or meaningless heading text\n      - pattern: \"(?i)<h[1-6][^>]*>\\\\s*(?:&nbsp;|\\\\s|&amp;nbsp;)*</h[1-6]>\"\n        message: \"Heading elements should contain meaningful text content.\"\n\n      # Generic heading text\n      - pattern: \"(?i)<h[1-6][^>]*>\\\\s*(?:heading|title|header|section)\\\\s*</h[1-6]>\"\n        message: \"Heading text should be specific and informative, not generic.\"\n\n      # Heading text too long\n      - pattern: \"(?i)<h[1-6][^>]*>[^<]{100,}</h[1-6]>\"\n        message: \"Heading text should be concise and relatively brief.\"\n\n      # Missing heading for major content sections\n      - pattern: \"(?i)<(section|article|main)[^>]*>\"\n        pattern_negate: \"<h[1-6][^>]*>\"\n        message: \"Major content sections should have appropriate heading elements for navigation.\"\n\n  - type: suggest\n    message: |\n      **WCAG 2.4.1 Heading Accessibility Requirements:**\n\n      **Bypass Blocks Functionality:**\n      - **Screen Reader Navigation:** Headings allow users to navigate by content sections\n      - **Content Structure:** Headings provide clear outline of page content\n      - **Landmark Support:** Headings work with landmarks and skip links for navigation\n\n      **Heading Markup Requirements:**\n\n      **1. Use Real Heading Elements:**\n      ```html\n      <!-- Good: Proper heading markup -->\n      <h1>Main Page Title</h1>\n      <h2>Section Heading</h2>\n      <h3>Subsection Heading</h3>\n\n      <!-- Good: Role heading when real markup not possible -->\n      <div role=\"heading\" aria-level=\"1\">Main Page Title</div>\n      <div role=\"heading\" aria-level=\"2\">Section Heading</div>\n      ```\n\n      **2. Proper Heading Hierarchy:**\n      ```html\n      <!-- Good: Logical heading structure -->\n      <h1>Product Catalog</h1>\n      <h2>Electronics</h2>\n      <h3>Smartphones</h3>\n      <h3>Laptops</h3>\n      <h2>Clothing</h2>\n      <h3>Men's Clothing</h3>\n      <h3>Women's Clothing</h3>\n\n      <!-- Bad: Skipped levels -->\n      <h1>Product Catalog</h1>\n      <h3>Electronics</h3> <!-- Skipped h2 -->\n      ```\n\n      **3. Clickable Headings:**\n      ```html\n      <!-- Good: Heading wraps the link -->\n      <h2><a href=\"/products/electronics\">Electronics</a></h2>\n\n      <!-- Bad: Heading as child of link -->\n      <a href=\"/products/electronics\">\n        <h2>Electronics</h2>\n      </a>\n      ```\n\n      **4. Meaningful Heading Text:**\n      ```html\n      <!-- Good: Specific and informative -->\n      <h1>Acme Corporation - Leading Tech Solutions</h1>\n      <h2>Our Services</h2>\n      <h3>Web Development</h3>\n      <h3>Mobile App Development</h3>\n\n      <!-- Bad: Generic or meaningless -->\n      <h1>Welcome</h1>\n      <h2>Section</h2>\n      <h3>Content</h3>\n      ```\n\n      **5. Single H1 Per Page:**\n      ```html\n      <!-- Good: One main heading -->\n      <h1>Company Homepage</h1>\n      <h2>About Us</h2>\n      <h2>Our Services</h2>\n      <h2>Contact</h2>\n\n      <!-- Bad: Multiple h1 elements -->\n      <h1>Company Homepage</h1>\n      <h1>About Us</h1> <!-- Should be h2 -->\n      ```\n\n      **6. Proper Content Structure:**\n      ```html\n      <!-- Good: Clear content outline -->\n      <main>\n        <h1>Product Documentation</h1>\n        <section>\n          <h2>Installation Guide</h2>\n          <h3>System Requirements</h3>\n          <h3>Installation Steps</h3>\n        </section>\n        <section>\n          <h2>User Manual</h2>\n          <h3>Getting Started</h3>\n          <h3>Advanced Features</h3>\n        </section>\n      </main>\n      ```\n\n      **7. Role Heading Implementation:**\n      ```html\n      <!-- When real heading elements cannot be used -->\n      <div role=\"heading\" aria-level=\"1\">Main Page Title</div>\n      <div role=\"heading\" aria-level=\"2\">Section Heading</div>\n      <div role=\"heading\" aria-level=\"3\">Subsection Heading</div>\n\n      <!-- With proper aria-level values -->\n      <div role=\"heading\" aria-level=\"1\">Company Overview</div>\n      <div role=\"heading\" aria-level=\"2\">Our Mission</div>\n      <div role=\"heading\" aria-level=\"2\">Our Values</div>\n      ```\n\n      **Heading Guidelines:**\n\n      **Content Structure:**\n      - **H1:** Main page title or primary content heading\n      - **H2:** Major section headings\n      - **H3:** Subsection headings\n      - **H4-H6:** Further subdivisions as needed\n\n      **Text Requirements:**\n      - **Concise:** Keep heading text brief and to the point\n      - **Descriptive:** Accurately describe the content that follows\n      - **Unique:** Each heading should be distinct and meaningful\n      - **Hierarchical:** Follow logical content structure\n\n      **Navigation Benefits:**\n      - **Screen Reader Users:** Can jump between sections using heading navigation\n      - **Keyboard Users:** Can navigate page structure efficiently\n      - **All Users:** Clear content organization and hierarchy\n\n      **Implementation Best Practices:**\n\n      **Page Structure Example:**\n      ```html\n      <header>\n        <nav>\n          <!-- Navigation content -->\n        </nav>\n      </header>\n\n      <main>\n        <h1>Product Documentation</h1>\n\n        <section>\n          <h2>Getting Started</h2>\n          <h3>Installation</h3>\n          <h3>Configuration</h3>\n        </section>\n\n        <section>\n          <h2>User Guide</h2>\n          <h3>Basic Features</h3>\n          <h3>Advanced Features</h3>\n          <h4>Customization</h4>\n          <h4>Integration</h4>\n        </section>\n\n        <section>\n          <h2>Troubleshooting</h2>\n          <h3>Common Issues</h3>\n          <h3>Support</h3>\n        </section>\n      </main>\n      ```\n\n      **Dynamic Content:**\n      ```html\n      <!-- Good: Proper heading for dynamic content -->\n      <h2>Search Results</h2>\n      <p>Found 15 results for \"accessibility\"</p>\n\n      <!-- Good: Descriptive heading for filtered content -->\n      <h2>Electronics (25 items)</h2>\n      <p>Showing 1-10 of 25 products</p>\n      ```\n\n      **Form Sections:**\n      ```html\n      <!-- Good: Clear form structure with headings -->\n      <h2>Contact Information</h2>\n      <form>\n        <label for=\"name\">Name:</label>\n        <input type=\"text\" id=\"name\">\n\n        <label for=\"email\">Email:</label>\n        <input type=\"email\" id=\"email\">\n      </form>\n\n      <h2>Shipping Address</h2>\n      <form>\n        <label for=\"address\">Address:</label>\n        <input type=\"text\" id=\"address\">\n      </form>\n      ```\n\n      **Testing and Validation:**\n      - Test with screen reader heading navigation\n      - Verify heading hierarchy is logical\n      - Check that heading text is descriptive\n      - Ensure no skipped heading levels\n      - Validate single h1 per page\n      - Test keyboard navigation between headings\n\n      **Common Mistakes to Avoid:**\n      - Using heading elements for styling only\n      - Skipping heading levels (h1 → h3)\n      - Multiple h1 elements on same page\n      - Generic or meaningless heading text\n      - Missing headings for major content sections\n      - Improper heading structure for clickable elements\n      - Using heading markup for non-heading content\n      - Missing aria-level on role=\"heading\" elements\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/html-standards.mdc",
    "content": "---\ndescription:\nglobs: *.liquid\nalwaysApply: false\n---\n# Modern HTML Standards\n\nUse the latest evergreen browser features for better user experience and simpler code.\nAll features should be supported in the last two versions of all major browsers.\nAll necessary features must be \"Baseline widely available\".\nProgressive enhancement features may be \"Baseline 2024\".\nThese are strictly for UX improvements that are non-blocking for conversions.\n\n## Native Interactive Elements\n\n**Expandable Content:**\n- Use `<details>` and `<summary>` instead of JavaScript toggles\n- Perfect for FAQs, product details, filters\n- See the [accordion component](mdc:assets/accordion-custom.js) for cases where animation is involved\n\n**Modals and Popups:**\n- Use `<dialog>` for modals instead of custom overlays\n- Built-in focus management and backdrop clicks\n- See the [dialog component](mdc:assets/dialog.js) for how we use these\n\n**Tooltips and Menus:**\n- Use `popover` attribute for floating content\n- Automatic positioning and dismissal\n\n**Forms:**\n- Use `<search>` element for search forms\n- Use `<output>` for form calculations and results\n\n### Input Types (HTML5+)\n```html\n<input type=\"text\">        <!-- Basic text input -->\n<input type=\"email\">       <!-- Email with validation -->\n<input type=\"tel\">         <!-- Telephone numbers -->\n<input type=\"url\">         <!-- URLs with validation -->\n<input type=\"search\">      <!-- Search field with clear button -->\n<input type=\"password\">    <!-- Password field -->\n\n<!-- Numeric inputs -->\n<input type=\"number\">      <!-- Numeric input with spinner -->\n<input type=\"range\">       <!-- Slider control -->\n\n<!-- Date/Time inputs -->\n<input type=\"date\">        <!-- Date picker -->\n<input type=\"time\">        <!-- Time picker -->\n<input type=\"datetime-local\"> <!-- Date and time picker -->\n<input type=\"month\">       <!-- Month picker -->\n<input type=\"week\">        <!-- Week picker -->\n\n<!-- Selection inputs -->\n<input type=\"checkbox\">    <!-- Checkbox -->\n<input type=\"radio\">       <!-- Radio button -->\n<input type=\"color\">       <!-- Color picker -->\n<input type=\"file\">        <!-- File upload -->\n\n<!-- Action inputs -->\n<input type=\"submit\">      <!-- Submit button -->\n<input type=\"reset\">       <!-- Reset button -->\n<input type=\"button\">      <!-- Generic button -->\n<input type=\"image\">       <!-- Image button -->\n\n<!-- Hidden -->\n<input type=\"hidden\">      <!-- Hidden data -->\n```\n\n### Container Elements\n```html\n<!-- Form container -->\n<form>                     <!-- Form wrapper -->\n<fieldset>                 <!-- Group related inputs -->\n<legend>                   <!-- Fieldset label -->\n\n<!-- Modern semantic containers -->\n<search>                   <!-- Search form container (HTML5.3) -->\n```\n\n### Text Areas\n```html\n<textarea>                 <!-- Multi-line text input -->\n```\n\n### Selection Elements\n```html\n<select>                   <!-- Dropdown menu -->\n<option>                   <!-- Option in dropdown -->\n<optgroup>                 <!-- Group options -->\n<datalist>                 <!-- Autocomplete suggestions -->\n```\n\n### Labels and Output\n```html\n<label>                    <!-- Input label -->\n<output>                   <!-- Calculation/result display -->\n```\n\n### Buttons\n```html\n<button type=\"submit\">     <!-- Submit form -->\n<button type=\"reset\">      <!-- Reset form -->\n<button type=\"button\">     <!-- Generic button -->\n```\n\n### Progress and Meters\n```html\n<progress>                 <!-- Progress indicator -->\n<meter>                    <!-- Gauge/measurement display -->\n```\n\n### Modern Form Attributes\n```html\n<!-- Validation attributes -->\nrequired                   <!-- Field must be filled -->\npattern=\"[0-9]{3}-[0-9]{3}-[0-9]{4}\" <!-- Regex validation -->\nminlength=\"5\"              <!-- Minimum character length -->\nmaxlength=\"50\"             <!-- Maximum character length -->\nmin=\"1\"                    <!-- Minimum numeric value -->\nmax=\"100\"                  <!-- Maximum numeric value -->\nstep=\"0.01\"                <!-- Numeric increment -->\n\n<!-- Autocomplete attributes -->\nautocomplete=\"name\"        <!-- Enable specific autocomplete -->\nautocomplete=\"off\"         <!-- Disable autocomplete -->\nlist=\"suggestions\"         <!-- Link to datalist -->\n\n<!-- Input hints -->\nplaceholder=\"Enter email\"  <!-- Placeholder text -->\nautofocus                  <!-- Focus on page load -->\nreadonly                   <!-- Read-only field -->\ndisabled                   <!-- Disabled field -->\nmultiple                   <!-- Multiple file/email selection -->\n\n<!-- Form behavior -->\nformnovalidate            <!-- Skip validation (on submit buttons) -->\nformaction=\"/alt-submit\"  <!-- Alternative submission URL -->\nformmethod=\"post\"         <!-- Override form method -->\nformenctype=\"multipart/form-data\" <!-- Override encoding -->\n```\n\nUse [client-side form validation](mdc:https:/developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Form_validation) to ensure valid date is being sent to the server.\n\n## Modern CSS Features\n\n**Layout:**\n- `container-queries` for responsive components\n- `aspect-ratio` for maintaining proportions\n- `scroll-snap` for carousel behavior\n\n**Styling:**\n- `color-mix()` for dynamic color generation (used for progressive enhancement)\n- `view-transitions` for smooth page transitions\n- `@layer` for CSS cascade control\n\n**Interactions:**\n- `:has()` selector for parent styling\n- `@media (prefers-reduced-motion)` for accessibility\n\n## Progressive Enhancement\n\nUse features that are `Baseline Widely Available`.\n\n1. **Start with semantic HTML** that works without JavaScript\n2. **Layer on CSS** for visual enhancement\n3. **Add JavaScript** for advanced interactions and accessibility\n4. **Polyfill** for modern browsers if necessary for critical interactions\n5. **Never break core functionality** for older browsers\n\n## Accessibility Features\n\n**Focus Management:**\n- Use `tabindex=\"0\"` for custom interactive elements\n- Never use positive tabindex values\n- Ensure keyboard navigation works naturally\n- Ensure focus is trapped in modal contexts\n\n**Screen Readers:**\n- Use semantic HTML elements\n- Add `aria-label` when visual context isn't enough\n- Use `aria-expanded` for collapsible content\n- Use `aria-role` where appropriate\n\n**Motion Preferences:**\n\nWrite CSS where animations can be disabled if reduced motion is preferred.\n\n```css\n@media (prefers-reduced-motion: reduce) {\n  .carousel {\n    scroll-behavior: auto;\n  }\n}\n```\n\n## ID Naming Convention\n\nUse `CamelCase` for IDs and append section/block identifiers:\n\n```html\n<!-- Section IDs -->\n<section id=\"FeaturedCollection-{{ section.id }}\">\n\n<!-- Block IDs -->\n<div id=\"ProductCard-{{ block.id }}\">\n\n<!-- Element IDs -->\n<dialog id=\"ProductModal-{{ product.id }}-{{ section|block.id }}\">\n<form id=\"ProductForm-{{ product.id }}-{{ section|block.id }}\">\n```\n\nSection and block IDs are the only things we can guarantee are unique, and so should always be included in `id`s.\n\n## Examples\n\n**Expandable FAQ:**\n```html\n<details class=\"faq\">\n  <summary class=\"faq__question\">\n    {{ 'faq.shipping_question' | t }}\n  </summary>\n  <div class=\"faq__answer\">\n    {{ 'faq.shipping_answer' | t }}\n  </div>\n</details>\n```\n\n**Modal Dialog:**\n```html\n<button class=\"product__quick-view\" onclick=\"ProductModal{{ product.id }}.showModal()\">\n  {{ 'products.quick_view' | t }}\n</button>\n\n<dialog id=\"ProductModal{{ product.id }}\" class=\"product-modal\">\n  <form method=\"dialog\">\n    <button type=\"submit\" class=\"modal__close\">\n      {{ 'general.close' | t }}\n    </button>\n  </form>\n  <div class=\"modal__content\">\n    {% render 'product-details', product: product %}\n  </div>\n</dialog>\n```\n\n**Popover Menu:**\n```html\n<button popovertarget=\"CartMenu\" class=\"header__cart\">\n  {{ 'cart.title' | t }} ({{ cart.item_count }})\n</button>\n\n<div id=\"CartMenu\" popover class=\"cart-popover\">\n  {% render 'cart-drawer' %}\n</div>\n```\n\n**Search Form:**\n```html\n<search class=\"header__search\">\n  <form action=\"{{ routes.search_url }}\" method=\"get\">\n    <input\n      type=\"search\"\n      name=\"q\"\n      placeholder=\"{{ 'general.search_placeholder' | t }}\"\n      value=\"{{ search.terms | escape }}\"\n    >\n    <button type=\"submit\">{{ 'general.search' | t }}</button>\n  </form>\n</search>\n```\n\n**Responsive Product Card:**\n```html\n<div class=\"product-card\" style=\"container-type: inline-size;\">\n  <div class=\"product-card__media\">\n    {{ product.featured_image | image_url: width: 800 | image_tag }}\n  </div>\n  <div class=\"product-card__info\">\n    <h3>{{ product.title | escape }}</h3>\n    <output class=\"product-card__price\">\n      {{ product.price | money }}\n    </output>\n  </div>\n</div>\n```\n\n## Avoid These Patterns\n\n**Don't use custom JavaScript for:**\n- Show/hide toggles (use `<details>`)\n- Modal overlays (use `<dialog>`)\n- Tooltips (use `popover`)\n- Form validation (use native HTML5)\n\n**Don't create:**\n- Custom dropdown menus (use `<select>` or `popover`)\n- Custom accordions (use `<details>`)\n- Custom tabs (use CSS `:target` or native behavior)\n"
  },
  {
    "path": ".cursor/rules/image-alt-text-accessibility.mdc",
    "content": "---\ndescription: Image alternative text accessibility compliance and WCAG 2.2 requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid, *.css, *.scss, *.sass, *.less\nalwaysApply: true\n---\n# Image Alt Text Accessibility Standards\n\nEnsures images have appropriate alternative text following WCAG 2.2 requirements for informative, decorative, and functional images.\n\n<rule>\nname: image_alt_text_accessibility_standards\ndescription: Enforce image alternative text accessibility standards per WCAG 2.2 requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing alt attribute on img elements\n      - pattern: \"<img[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]*\\\"\"\n        message: \"All img elements must have an alt attribute. Use alt=\\\"\\\" for decorative images or provide meaningful description for informative images.\"\n\n      # Empty alt on informative images (likely missing description)\n      - pattern: \"<img[^>]*alt=\\\"\\\"[^>]*>\"\n        pattern_negate: \"(aria-hidden=\\\"true\\\"|role=\\\"presentation\\\"|decorative|background)\"\n        message: \"Empty alt attributes should only be used for decorative images. Provide meaningful alt text for informative images.\"\n\n      # SVG img missing alt attribute\n      - pattern: \"<img[^>]*\\\\.svg[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]+\\\"\"\n        message: \"SVG images using img element must have alt attribute and role=\\\"img\\\".\"\n\n      # SVG img missing role attribute\n      - pattern: \"<img[^>]*\\\\.svg[^>]*>\"\n        pattern_negate: \"role=\\\"img\\\"\"\n        message: \"SVG images using img element must have role=\\\"img\\\" attribute.\"\n\n      # Inline SVG missing text alternative\n      - pattern: \"<svg[^>]*>\"\n        pattern_negate: \"(aria-label=\\\"[^\\\"]+\\\"|aria-labelledby=\\\"[^\\\"]+\\\"|<title>|<desc>)\"\n        message: \"Inline SVG elements must have text alternative via aria-label, aria-labelledby, or title/desc elements.\"\n\n      # Decorative SVG missing aria-hidden\n      - pattern: \"<svg[^>]*>\"\n        pattern_negate: \"(aria-hidden=\\\"true\\\"|aria-label|aria-labelledby|<title>|<desc>)\"\n        message: \"Decorative SVG elements must have aria-hidden=\\\"true\\\" to hide from assistive technology.\"\n\n      # Informative SVG missing role and accessible name\n      - pattern: \"<svg[^>]*>\"\n        pattern_negate: \"(role=\\\"img\\\"|aria-hidden=\\\"true\\\")\"\n        message: \"Informative SVG elements must have role=\\\"img\\\" and accessible name via aria-label, aria-labelledby, or title/desc elements.\"\n\n      # SVG with role=\\\"img\\\" but missing accessible name\n      - pattern: \"<svg[^>]*role=\\\"img\\\"[^>]*>\"\n        pattern_negate: \"(aria-label=\\\"[^\\\"]+\\\"|aria-labelledby=\\\"[^\\\"]+\\\"|<title>|<desc>)\"\n        message: \"SVG elements with role=\\\"img\\\" must have accessible name via aria-label, aria-labelledby, or title/desc elements.\"\n\n      # Image links missing descriptive alt text\n      - pattern: \"<a[^>]*>\\\\s*<img[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]{10,}\\\"\"\n        message: \"Image links should have descriptive alt text that describes the link destination.\"\n\n      # Button/control images missing purpose description\n      - pattern: \"<(button|input)[^>]*>\\\\s*<img[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]{5,}\\\"\"\n        message: \"Button/control images should have alt text describing the purpose or resulting action.\"\n\n      # Background images with information missing alternative\n      - pattern: \"background.*url.*\\\\.(jpg|jpeg|png|gif|svg|webp)\"\n        pattern_negate: \"(aria-label|role=\\\"img\\\"|alt=|title=)\"\n        message: \"Background images conveying information must have alternative text via visible text, aria-label, or role=\\\"img\\\".\"\n\n      # Active background images missing accessible name\n      - pattern: \"<(a|button)[^>]*>\\\\s*<[^>]*background.*url\"\n        pattern_negate: \"(aria-label|aria-labelledby|title=)\"\n        message: \"Active elements with background images must have accessible name via aria-label or similar.\"\n\n      # Images of text without justification\n      - pattern: \"<img[^>]*alt=\\\"[^\\\"]*[A-Za-z]{10,}[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(logo|essential|font.*customizable|size.*customizable)\"\n        message: \"Images containing text should use real text unless essential (like logos) or font/size/color are customizable.\"\n\n      # Alt text too long (over 250 characters)\n      - pattern: \"alt=\\\"[^\\\"]{250,}\\\"\"\n        message: \"Alternative text should be concise (no more than 250 characters). Consider using aria-describedby for longer descriptions.\"\n\n      # Alt text includes unnecessary image identification\n      - pattern: \"alt=\\\"[^\\\"]*(?:image of|picture of|graphic of|photo of|icon of)[^\\\"]*\\\"\"\n        message: \"Avoid phrases like 'image of' or 'graphic of' in alt text. Screen readers already announce the element type.\"\n\n      # Complex images missing extended description\n      - pattern: \"<img[^>]*alt=\\\"[^\\\"]{50,}\\\"[^>]*>\"\n        pattern_negate: \"(aria-describedby|longdesc=)\"\n        message: \"Complex images with long alt text should have extended description via aria-describedby or longdesc.\"\n\n      # Decorative images with unnecessary alt text\n      - pattern: \"<img[^>]*alt=\\\"[^\\\"]+\\\"[^>]*>\"\n        pattern_negate: \"(informative|functional|link|button)\"\n        message: \"Consider using alt=\\\"\\\" for purely decorative images to avoid screen reader announcement.\"\n\n  - type: suggest\n    message: |\n      **WCAG 2.2 Image Alt Text Requirements:**\n\n      **Informative Images and Active Images (Links, Buttons, Controls):**\n      - **Required:** All images MUST have alternative text\n      - **Meaningful:** Alt text MUST accurately convey the image's purpose and author's intent\n      - **Concise:** Alt text SHOULD be no more than 250 characters\n      - **Avoid Redundancy:** Don't include words like \"image of,\" \"graphic of,\" etc.\n\n      **Image Types and Requirements:**\n\n      **1. Standard Images (<img>):**\n      ```html\n      <!-- Informative image -->\n      <img src=\"chart.png\" alt=\"Sales increased 25% in Q3 compared to Q2\">\n\n      <!-- Decorative image -->\n      <img src=\"decorative-border.png\" alt=\"\" role=\"presentation\">\n\n      <!-- Image link -->\n      <a href=\"/products\">\n        <img src=\"product-catalog.png\" alt=\"Browse our complete product catalog\">\n      </a>\n      ```\n\n      **2. SVG Images:**\n      ```html\n      <!-- SVG as img -->\n      <img src=\"icon.svg\" alt=\"Close dialog\" role=\"img\">\n\n      <!-- Informative inline SVG -->\n      <svg role=\"img\" aria-label=\"Settings icon\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5A3.5 3.5 0 0 1 15.5 12A3.5 3.5 0 0 1 12 15.5M19.43 12.97C19.47 12.65 19.5 12.33 19.5 12C19.5 11.67 19.47 11.34 19.43 11L21.54 9.37C21.73 9.22 21.78 8.95 21.66 8.73L19.66 5.27C19.54 5.05 19.27 4.96 19.05 5.05L16.56 6.05C16.04 5.66 15.5 5.32 14.87 5.07L14.5 2.42C14.46 2.18 14.25 2 14 2H10C9.75 2 9.54 2.18 9.5 2.42L9.13 5.07C8.5 5.32 7.96 5.66 7.44 6.05L4.95 5.05C4.73 4.96 4.46 5.05 4.34 5.27L2.34 8.73C2.22 8.95 2.27 9.22 2.46 9.37L4.57 11C4.53 11.34 4.5 11.67 4.5 12C4.5 12.33 4.53 12.65 4.57 12.97L2.46 14.63C2.27 14.78 2.22 15.05 2.34 15.27L4.34 18.73C4.46 18.95 4.73 19.03 4.95 18.95L7.44 17.94C7.96 18.34 8.5 18.68 9.13 18.93L9.5 21.58C9.54 21.82 9.75 22 10 22H14C14.25 22 14.46 21.82 14.5 21.58L14.87 18.93C15.5 18.68 16.04 18.34 16.56 17.94L19.05 18.95C19.27 19.03 19.54 18.95 19.66 18.73L21.66 15.27C21.78 15.05 21.73 14.78 21.54 14.63L19.43 12.97Z\"/>\n      </svg>\n\n      <!-- Decorative inline SVG -->\n      <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n      </svg>\n\n      <!-- SVG with title and desc -->\n      <svg role=\"img\" aria-labelledby=\"chart-title chart-desc\" viewBox=\"0 0 400 300\">\n        <title id=\"chart-title\">Monthly Sales Chart</title>\n        <desc id=\"chart-desc\">Bar chart showing sales data for January through December 2023</desc>\n        <!-- SVG content -->\n      </svg>\n      ```\n\n      **SVG Accessibility Requirements:**\n      SVGs must be properly categorized and labeled for accessibility:\n\n      **1. Decorative SVGs:**\n      - Use `aria-hidden=\"true\"` to hide from assistive technology\n      - No role or accessible name needed\n      - Examples: background patterns, visual dividers, purely aesthetic elements\n\n      **2. Informative SVGs:**\n      - Use `role=\"img\"` to identify as image\n      - Provide accessible name via `aria-label`, `aria-labelledby`, or `<title>`/`<desc>` elements\n      - Examples: icons with meaning, charts, diagrams, functional graphics\n\n      **3. SVG Implementation Options:**\n      ```html\n      <!-- Option 1: aria-label (preferred for simple descriptions) -->\n      <svg role=\"img\" aria-label=\"Close dialog\" viewBox=\"0 0 24 24\">\n        <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n      </svg>\n\n      <!-- Option 2: title and desc elements (for complex descriptions) -->\n      <svg role=\"img\" aria-labelledby=\"chart-title chart-desc\" viewBox=\"0 0 400 300\">\n        <title id=\"chart-title\">Monthly Sales Chart</title>\n        <desc id=\"chart-desc\">Bar chart showing sales data for January through December 2023</desc>\n        <!-- SVG content -->\n      </svg>\n\n      <!-- Option 3: Decorative SVG -->\n      <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n      </svg>\n      ```\n\n      **3. Background Images:**\n      ```html\n      <!-- Informative background with visible text -->\n      <div class=\"hero-section\" style=\"background-image: url('hero-bg.jpg')\">\n        <h1>Welcome to Our Store</h1>\n        <p>Discover amazing products</p>\n      </div>\n\n      <!-- Active background image -->\n      <button class=\"icon-button\"\n              style=\"background-image: url('close-icon.svg')\"\n              aria-label=\"Close dialog\">\n      </button>\n\n      <!-- Decorative background -->\n      <div class=\"decorative-bg\" style=\"background-image: url('pattern.png')\">\n        <!-- Content without alt text needed -->\n      </div>\n      ```\n\n      **4. Complex Images with Extended Descriptions:**\n      ```html\n      <!-- Complex chart with extended description -->\n      <img src=\"complex-chart.png\"\n           alt=\"Sales performance chart for 2023\"\n           aria-describedby=\"chart-description\">\n      <div id=\"chart-description\" class=\"sr-only\">\n        Detailed description: The chart shows quarterly sales data with Q1 at $2.3M,\n        Q2 at $2.8M, Q3 at $3.1M, and Q4 at $3.5M. The trend shows consistent\n        growth throughout the year with the highest growth in Q4.\n      </div>\n      ```\n\n      **5. Button and Control Images:**\n      ```html\n      <!-- Button with image -->\n      <button aria-label=\"Add item to cart\">\n        <img src=\"cart-icon.svg\" alt=\"\" role=\"presentation\">\n      </button>\n\n      <!-- Image button -->\n      <input type=\"image\"\n             src=\"submit-button.png\"\n             alt=\"Submit order\"\n             aria-label=\"Submit your order\">\n      ```\n\n      **Alt Text Guidelines:**\n\n      **Good Examples:**\n      - `alt=\"Company logo\"` (for logos)\n      - `alt=\"Close dialog\"` (for close buttons)\n      - `alt=\"Submit form\"` (for submit buttons)\n      - `alt=\"Sales increased 25% in Q3\"` (for charts)\n      - `alt=\"Product image: Red wireless headphones\"` (for products)\n      - `alt=\"Team photo: 5 employees in office\"` (for photos)\n\n      **Avoid These:**\n      - `alt=\"Image of a chart\"` (redundant)\n      - `alt=\"Click here\"` (not descriptive)\n      - `alt=\"Picture of a button\"` (unnecessary)\n      - `alt=\"Graphic showing data\"` (too vague)\n\n      **Decorative Images:**\n      ```html\n      <!-- Use empty alt for decorative images -->\n      <img src=\"decorative-border.png\" alt=\"\" role=\"presentation\">\n\n      <!-- Or use aria-hidden -->\n      <img src=\"background-pattern.png\" alt=\"\" aria-hidden=\"true\">\n      ```\n\n      **Images of Text:**\n      ```html\n      <!-- Avoid unless essential -->\n      <img src=\"company-slogan.png\" alt=\"Innovation through excellence\"\n           aria-label=\"Company slogan\">\n\n      <!-- Better: Use real text -->\n      <h2>Innovation through excellence</h2>\n      ```\n\n      **CSS Considerations:**\n      ```css\n      /* Screen reader only class */\n      .sr-only {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        padding: 0;\n        margin: -1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n        border: 0;\n      }\n\n      /* Background image with fallback */\n      .hero-section {\n        background-image: url('hero-bg.jpg');\n        background-size: cover;\n        background-position: center;\n      }\n\n      /* Ensure text over background images has sufficient contrast */\n      .hero-section h1 {\n        color: #ffffff;\n        text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7);\n      }\n      ```\n\n      **Testing and Validation:**\n      - Test with screen readers (NVDA, JAWS, VoiceOver)\n      - Use browser dev tools to inspect alt attributes\n      - Validate with automated accessibility tools\n      - Test keyboard navigation for image links/buttons\n      - Verify contrast ratios for text over background images\n      - Check that decorative images don't announce to screen readers\n      - Test SVG accessibility with screen readers\n      - Verify decorative SVGs are hidden with aria-hidden=\"true\"\n      - Check informative SVGs announce their accessible names\n      - Validate SVG role=\"img\" and accessible name combinations\n\n      **Common Mistakes to Avoid:**\n      - Missing alt attributes on informative images\n      - Using \"image of\" or \"picture of\" in alt text\n      - Providing alt text for decorative images\n      - Using images of text when real text would work\n      - Missing accessible names on image buttons\n      - Insufficient contrast for text over background images\n      - Not providing extended descriptions for complex images\n      - Missing aria-hidden=\"true\" on decorative SVGs\n      - Missing role=\"img\" on informative SVGs\n      - SVGs without accessible names or aria-hidden\n      - Using decorative SVGs without hiding from assistive technology\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/javascript-standards.mdc",
    "content": "---\ndescription: Writing JavaScript inside `.js` files, or within the `{% javascript %}` or `{% script %}` tags in `.liquid` files.\nglobs:\nalwaysApply: false\n---\n# JavaScript Standards\n\n## General Principles\n\n- **Zero external dependencies** - Use native browser APIs\n- **Avoid mutation** - Use `const` over `let` unless necessary\n- **Use `for (const item of items)`** over `items.forEach()`\n- **Add new lines before blocks** with `{` and `}`\n- **Use the component framework** - See [the framework code](mdc:assets/component.js) and the [component documentation](mdc:codex/component-framework.md)\n\n## Async/Await Syntax\n\n**Always use async/await over .then() chaining:**\n\n```javascript\nconst fetchProducts = async () => {\n  try {\n    const response = await fetch('/products.json');\n    const data = await response.json();\n    return data.products;\n  } catch (error) {\n    console.error('Failed to fetch products:', error);\n    return [];\n  }\n};\n\n## Web Components Pattern\n\n**Initialize JavaScript components using the Component framework:**\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} ProductCardRefs\n * @property {HTMLButtonElement} addButton - Add to cart button\n * @property {HTMLElement} priceDisplay - Price display element\n * @property {HTMLImageElement} [productImage] - Optional product image\n */\n\n/**\n * @extends {Component<ProductCardRefs>}\n */\nclass ProductCard extends Component {\n  constructor() {\n    super();\n    this.cache = new Map();\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#initializeCard();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#cleanup();\n  }\n\n  // Public method for external use\n  updatePrice(newPrice) {\n    if (!this.refs.priceDisplay) return;\n    this.refs.priceDisplay.textContent = newPrice;\n  }\n\n  // Event handler for add to cart button\n  async handleAddToCart(event) {\n    event.preventDefault();\n\n    const productId = this.cache.get('productId');\n    this.refs.addButton.disabled = true;\n    this.refs.addButton.textContent = 'Adding...';\n\n    try {\n      await addToCart(productId);\n      this.refs.addButton.textContent = 'Added!';\n\n      // Dispatch custom event for cart updates\n      this.dispatchEvent(new CustomEvent('cart:item-added', {\n        detail: { productId },\n        bubbles: true\n      }));\n    } catch (error) {\n      this.refs.addButton.textContent = 'Try again';\n      console.error('Add to cart error:', error);\n    } finally {\n      setTimeout(() => {\n        this.refs.addButton.disabled = false;\n        this.refs.addButton.textContent = 'Add to cart';\n      }, 2000);\n    }\n  }\n\n  // Private method requiring instance access\n  #initializeCard() {\n    const productId = this.dataset.productId;\n    this.cache.set('productId', productId);\n  }\n\n  #cleanup() {\n    this.cache.clear();\n  }\n}\n\n// Module-scoped utility - no instance access needed\nconst addToCart = async (productId) => {\n  const formData = new FormData();\n  formData.append('id', productId);\n  formData.append('quantity', 1);\n\n  try {\n    const response = await fetch('/cart/add.js', {\n      method: 'POST',\n      body: formData\n    });\n\n    if (!response.ok) {\n      throw new Error('Failed to add to cart');\n    }\n\n    const cartData = await response.json();\n    return cartData;\n  } catch (error) {\n    console.error('Add to cart error:', error);\n    throw error;\n  }\n};\n\ncustomElements.define('product-card', ProductCard);\n```\n\n**HTML usage with the Component framework:**\n\n```liquid\n<product-card data-product-id=\"{{ product.id }}\">\n  <img ref=\"productImage\" src=\"{{ product.featured_image | image_url }}\" alt=\"{{ product.title }}\">\n  <h3>{{ product.title }}</h3>\n  <div ref=\"priceDisplay\" class=\"product-card__price\">{{ product.price | money }}</div>\n  <button ref=\"addButton\" on:click=\"/handleAddToCart\" data-add-to-cart>\n    Add to cart\n  </button>\n</product-card>\n```\n\n## Early Returns and Conditional Logic\n\n**Use early returns over nested conditionals:**\n\n```javascript\n// Good\nconst processOrder = (order) => {\n  if (!order) return;\n  if (!order.items.length) return;\n  if (order.status !== 'pending') return;\n\n  // Process the order\n  updateOrderStatus(order.id, 'processing');\n  sendConfirmationEmail(order.email);\n};\n\n// Avoid\nconst processOrder = (order) => {\n  if (order) {\n    if (order.items.length) {\n      if (order.status === 'pending') {\n        updateOrderStatus(order.id, 'processing');\n        sendConfirmationEmail(order.email);\n      }\n    }\n  }\n};\n```\n\n**Optional chaining guidelines:**\n\n```javascript\n// Multiple chains - use early return\nconst updateButton = (product) => {\n  const button = product.querySelector('[data-ref=\"button\"]');\n  if (!button) return;\n\n  button.disabled = false;\n  button.textContent = 'Add to cart';\n};\n\n// Single chain is fine\nconst updateButton = (product) => {\n  const button = product.querySelector('[data-ref=\"button\"]');\n  button?.enable();\n};\n```\n\n## Simplification Patterns\n\n**Ternary operators for simple conditions:**\n```javascript\nconst buttonText = isLoading ? 'Loading...' : 'Add to cart';\nelement.textContent = buttonText;\n```\n\n**One-liner conditionals:**\n```javascript\nif (isOutOfStock) return;\n```\n\n**Return boolean comparisons directly:**\n```javascript\nconst isAvailable = product.available && product.price > 0;\nreturn isAvailable;\n```\n\n## Event-Driven Architecture\n\n**Use events for component communication:**\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} CartDrawerRefs\n * @property {HTMLElement} itemCountDisplay - Element showing item count\n * @property {HTMLButtonElement} closeButton - Close button\n */\n\n/**\n * @extends {Component<CartDrawerRefs>}\n */\nclass CartDrawer extends Component {\n  handleCartUpdate() {\n    const itemCount = this.getItemCount();\n\n    // Update local display\n    if (this.refs.itemCountDisplay) {\n      this.refs.itemCountDisplay.textContent = itemCount;\n    }\n\n    // Dispatch custom event for other components\n    this.dispatchEvent(new CustomEvent('cart:updated', {\n      bubbles: true,\n      detail: { itemCount }\n    }));\n  }\n\n  getItemCount() {\n    // Implementation to get cart item count\n    return this.querySelectorAll('.cart-item').length;\n  }\n}\n\n/**\n * @typedef {Object} CartCounterRefs\n * @property {HTMLElement} countDisplay - The count display element\n */\n\n/**\n * @extends {Component<CartCounterRefs>}\n */\nclass CartCounter extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    // Listen for cart updates\n    document.addEventListener('cart:updated', this.#handleCartUpdate.bind(this));\n  }\n\n  #handleCartUpdate(event) {\n    if (this.refs.countDisplay) {\n      this.refs.countDisplay.textContent = event.detail.itemCount;\n    }\n  }\n}\n```\n\n## JavaScript in Liquid Files\n\n**Use `{% javascript %}` tags for component-specific scripts:**\n\n```liquid\n{% javascript %}\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} FeaturedCollectionRefs\n * @property {HTMLElement} productGrid - The product grid container\n * @property {HTMLButtonElement[]} filterButtons - Filter button elements\n * @property {HTMLElement} [loadingIndicator] - Optional loading indicator\n */\n\n/**\n * @extends {Component<FeaturedCollectionRefs>}\n */\nclass FeaturedCollection extends Component {\n  async handleFilter(filterValue, event) {\n    event.preventDefault();\n\n    const url = new URL(window.location.href);\n    url.searchParams.set('filter', filterValue);\n\n    // Show loading state\n    if (this.refs.loadingIndicator) {\n      this.refs.loadingIndicator.hidden = false;\n    }\n\n    try {\n      const response = await fetch(url.toString());\n      const html = await response.text();\n      const parser = new DOMParser();\n      const doc = parser.parseFromString(html, 'text/html');\n\n      const newGrid = doc.querySelector('.product-grid');\n\n      if (newGrid && this.refs.productGrid) {\n        this.refs.productGrid.replaceWith(newGrid);\n        // Update the ref after replacement\n        this.#updateRefs();\n      }\n\n      // Update URL without page reload\n      history.pushState({ filter: filterValue }, '', url.toString());\n    } catch (error) {\n      console.error('Filter error:', error);\n    } finally {\n      if (this.refs.loadingIndicator) {\n        this.refs.loadingIndicator.hidden = true;\n      }\n    }\n  }\n}\n\ncustomElements.define('featured-collection', FeaturedCollection);\n{% endjavascript %}\n```\n\n**HTML usage in Liquid template:**\n\n```liquid\n<featured-collection>\n  <div class=\"filters\">\n    <button ref=\"filterButtons[]\" on:click=\"/handleFilter/new\" data-filter=\"new\">\n      New Arrivals\n    </button>\n    <button ref=\"filterButtons[]\" on:click=\"/handleFilter/sale\" data-filter=\"sale\">\n      On Sale\n    </button>\n    <button ref=\"filterButtons[]\" on:click=\"/handleFilter/best-selling\" data-filter=\"best-selling\">\n      Best Sellers\n    </button>\n  </div>\n\n  <div ref=\"loadingIndicator\" class=\"loading\" hidden>Loading...</div>\n\n  <div ref=\"productGrid\" class=\"product-grid\">\n    {% for product in collection.products %}\n      {% render 'product-card', product: product %}\n    {% endfor %}\n  </div>\n</featured-collection>\n```\n\n## File Structure\n\n**Group scripts by feature area:**\n- `product.js` - All product-related classes\n- `cart.js` - Cart functionality\n- `collection.js` - Collection and filtering\n- `search.js` - Search functionality\n\n**Co-locate related classes:**\n```javascript\n// collection.js\nclass CollectionFilters extends HTMLElement { }\nclass CollectionGrid extends HTMLElement { }\nclass CollectionSort extends HTMLElement { }\n```\n\n## Optimistic UI Patterns\n\n**Update UI before server response for high-certainty actions:**\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} AddToCartButtonRefs\n * @property {HTMLElement} buttonText - The button text element\n * @property {HTMLElement} [loadingSpinner] - Optional loading spinner\n */\n\n/**\n * @extends {Component<AddToCartButtonRefs>}\n */\nclass AddToCartButton extends Component {\n  async handleAddToCart(event) {\n    event.preventDefault();\n\n    // Optimistic UI update\n    this.#updateButtonState('adding');\n    this.#updateCartCount(1);\n\n    try {\n      const result = await this.#addToCart();\n      this.#updateButtonState('added');\n    } catch (error) {\n      // Revert optimistic changes\n      this.#updateButtonState('error');\n      this.#updateCartCount(-1);\n      console.error('Add to cart failed:', error);\n    }\n  }\n\n  #updateButtonState(state) {\n    const states = {\n      adding: 'Adding...',\n      added: 'Added!',\n      error: 'Try again'\n    };\n\n    if (this.refs.buttonText) {\n      this.refs.buttonText.textContent = states[state] || 'Add to cart';\n    }\n\n    // Toggle loading spinner if available\n    if (this.refs.loadingSpinner) {\n      this.refs.loadingSpinner.hidden = state !== 'adding';\n    }\n  }\n\n  #updateCartCount(delta) {\n    const counter = document.querySelector('cart-counter-component');\n    if (!counter || typeof counter.updateCount !== 'function') return;\n\n    // Call public method on cart counter component\n    counter.updateCount(delta);\n  }\n\n  async #addToCart() {\n    // Implementation for adding to cart\n    const formData = new FormData();\n    formData.append('id', this.dataset.variantId);\n    formData.append('quantity', '1');\n\n    const response = await fetch('/cart/add.js', {\n      method: 'POST',\n      body: formData\n    });\n\n    if (!response.ok) {\n      throw new Error('Failed to add to cart');\n    }\n\n    return response.json();\n  }\n}\n\ncustomElements.define('add-to-cart-button', AddToCartButton);\n```\n\n## Error Handling\n\n**Always handle errors gracefully:**\n\n```javascript\nconst fetchData = async (url) => {\n  try {\n    const response = await fetch(url);\n\n    if (!response.ok) {\n      throw new Error(`HTTP error! status: ${response.status}`);\n    }\n\n    return await response.json();\n  } catch (error) {\n    console.error('Fetch error:', error);\n    // Return fallback data or empty state\n    return null;\n  }\n};\n```\n\n## Type Safety with JSDoc\n\n**Always annotate function parameters, return types, and complex objects:**\n\n```javascript\n/**\n * @typedef {Object} ProductData\n * @property {string} id - Product identifier\n * @property {number} price - Product price\n * @property {boolean} [available] - Availability status (optional)\n */\n\n/**\n * Updates product pricing display\n * @param {ProductData} product - The product to update\n * @param {HTMLElement} container - Target container element\n * @returns {Promise<void>}\n * @throws {Error} If container element is invalid\n */\nconst updateProductDisplay = async (product, container) => {\n  if (!(container instanceof HTMLElement)) {\n    throw new Error('Invalid container element');\n  }\n  // Implementation\n};\n```\n\n### 2. **Enhance Component Communication Patterns**\n\nYour current rules mention custom events but lack the detailed parent-child communication patterns. Expand the \"Event-Driven Architecture\" section:\n\n```javascript\n## Component Communication Patterns\n\n### Parent-to-Child Communication\n**Parents may invoke public methods on child components:**\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} ProductGalleryRefs\n * @property {HTMLImageElement[]} images - Gallery images\n * @property {HTMLElement} mainImage - Main display image\n */\n\n/**\n * @extends {Component<ProductGalleryRefs>}\n */\nclass ProductGallery extends Component {\n  /**\n   * Selects a specific image by index\n   * @param {number} index - Image index to select\n   */\n  selectImage(index) {\n    const targetImage = this.refs.images[index];\n    if (targetImage && this.refs.mainImage) {\n      this.refs.mainImage.src = targetImage.dataset.fullSrc || targetImage.src;\n      this.#updateActiveState(index);\n    }\n  }\n\n  #updateActiveState(activeIndex) {\n    this.refs.images.forEach((img, idx) => {\n      img.classList.toggle('active', idx === activeIndex);\n    });\n  }\n}\n\n/**\n * @typedef {Object} ProductPageRefs\n * @property {ProductGallery} productGallery - Product gallery component\n * @property {HTMLSelectElement} variantSelector - Variant selector\n */\n\n/**\n * @extends {Component<ProductPageRefs>}\n */\nclass ProductPage extends Component {\n  handleVariantChange(event) {\n    const variantId = event.target.value;\n\n    // Direct method invocation is acceptable from parent to child\n    if (this.refs.productGallery) {\n      this.refs.productGallery.selectImage(0);\n    }\n  }\n}\n```\n\n### Child-to-Parent Communication\n**Children should emit custom events with typed details:**\n\n```javascript\n/**\n * @typedef {Object} VariantSelectDetail\n * @property {string} variantId - Selected variant ID\n * @property {number} price - Variant price\n * @property {boolean} available - Variant availability\n */\n\n/**\n * @typedef {Object} VariantSelectorRefs\n * @property {HTMLSelectElement} variantSelect - Variant dropdown\n * @property {HTMLElement} priceDisplay - Price display element\n */\n\n/**\n * @extends {Component<VariantSelectorRefs>}\n */\nclass VariantSelector extends Component {\n  handleSelection(event) {\n    const selectedOption = event.target.selectedOptions[0];\n    const variantId = selectedOption.value;\n    const price = Number(selectedOption.dataset.price);\n    const available = selectedOption.dataset.available === 'true';\n\n    /**\n     * @type {CustomEvent<VariantSelectDetail>}\n     */\n    const customEvent = new CustomEvent('variant:select', {\n      detail: { variantId, price, available },\n      bubbles: true\n    });\n\n    this.dispatchEvent(customEvent);\n\n    // Update local UI\n    if (this.refs.priceDisplay) {\n      this.refs.priceDisplay.textContent = this.#formatPrice(price);\n    }\n  }\n\n  #formatPrice(price) {\n    return new Intl.NumberFormat('en-US', {\n      style: 'currency',\n      currency: 'USD'\n    }).format(price / 100);\n  }\n}\n```\n\n### 3. **Add URL Handling Best Practices**\n\nThis is completely missing from your current rules and should be a dedicated section:\n\n```javascript\n## URL Manipulation\n\n**Always use URL and URLSearchParams APIs over string manipulation:**\n\n```javascript\n// Good - Type-safe URL manipulation\nconst updateFilters = (filters) => {\n  const url = new URL(window.location.href);\n\n  for (const [key, value] of Object.entries(filters)) {\n    if (value) {\n      url.searchParams.set(key, value);\n    } else {\n      url.searchParams.delete(key);\n    }\n  }\n\n  return url;\n};\n\n// Navigation with proper state management\nconst navigateToFilters = (filters) => {\n  const url = updateFilters(filters);\n  const params = url.searchParams.toString();\n\n  history.pushState({ urlParameters: params }, '', url.toString());\n  updateProductGrid(url.searchParams);\n};\n\n// Avoid - String manipulation\nconst updateFilters = (filters) => {\n  let url = window.location.pathname + '?';\n  url += Object.entries(filters)\n    .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n    .join('&');\n  return url;\n};\n```\n\n### 4. **Enhance Error Handling Section**\n\nYour current error handling is basic. Expand it with defensive programming patterns:\n\n```javascript\n## Defensive Programming and Error Handling\n\n**Always validate DOM elements before use:**\n\n```javascript\n/**\n * @param {string} selector - CSS selector\n * @returns {HTMLElement}\n * @throws {Error} If element not found or invalid type\n */\nconst getRequiredElement = (selector) => {\n  const element = document.querySelector(selector);\n  if (!(element instanceof HTMLElement)) {\n    throw new Error(`Required element not found: ${selector}`);\n  }\n  return element;\n};\n\n**Handle async operations with proper cleanup:**\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} DataLoaderRefs\n * @property {HTMLElement} content - Content container\n * @property {HTMLElement} [errorMessage] - Error display element\n * @property {HTMLElement} [loadingIndicator] - Loading indicator\n */\n\n/**\n * @extends {Component<DataLoaderRefs>}\n */\nclass DataLoader extends Component {\n  /** @type {AbortController|null} */\n  #abortController = null;\n\n  async loadData(url) {\n    // Cancel previous request\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    // Show loading state\n    this.#setLoadingState(true);\n\n    try {\n      const response = await fetch(url, {\n        signal: this.#abortController.signal\n      });\n\n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n      }\n\n      const data = await response.json();\n      this.#displayData(data);\n      return data;\n    } catch (error) {\n      if (error.name === 'AbortError') {\n        console.log('Request cancelled');\n        return null;\n      }\n\n      this.#displayError(error.message);\n      throw error;\n    } finally {\n      this.#setLoadingState(false);\n    }\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abortController?.abort();\n  }\n\n  #setLoadingState(loading) {\n    if (this.refs.loadingIndicator) {\n      this.refs.loadingIndicator.hidden = !loading;\n    }\n    if (this.refs.content) {\n      this.refs.content.setAttribute('aria-busy', loading);\n    }\n  }\n\n  #displayData(data) {\n    if (this.refs.content) {\n      // Implementation specific to data type\n      this.refs.content.textContent = JSON.stringify(data, null, 2);\n    }\n  }\n\n  #displayError(message) {\n    if (this.refs.errorMessage) {\n      this.refs.errorMessage.textContent = message;\n      this.refs.errorMessage.hidden = false;\n    }\n  }\n}\n```\n\n### 5. **Strengthen Web Components Pattern**\n\nYour current web components section is good but could benefit from the new guidance on refs and type safety:\n\n```javascript\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} ProductCardRefs\n * @property {HTMLButtonElement} addButton - Add to cart button\n * @property {HTMLElement} priceDisplay - Price display element\n * @property {HTMLImageElement} productImage - Product image\n * @property {HTMLElement} [stockIndicator] - Optional stock indicator\n */\n\n/**\n * @extends {Component<ProductCardRefs>}\n */\nclass ProductCard extends Component {\n  /** @type {AbortController|null} */\n  #addToCartController = null;\n\n  // Specify required refs for this component\n  requiredRefs = ['addButton', 'priceDisplay'];\n\n  connectedCallback() {\n    super.connectedCallback();\n    // Refs are automatically managed by Component base class\n    // No need to manually cache or update them\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#addToCartController?.abort();\n  }\n\n  /**\n   * Public method for external control\n   * @param {boolean} disabled - Whether to disable the card\n   */\n  setDisabled(disabled) {\n    this.refs.addButton.disabled = disabled;\n    this.classList.toggle('product-card--disabled', disabled);\n\n    // Update optional elements if they exist\n    if (this.refs.stockIndicator) {\n      this.refs.stockIndicator.hidden = disabled;\n    }\n  }\n\n  async handleAddToCart(event) {\n    event.preventDefault();\n\n    // Cancel any pending requests\n    this.#addToCartController?.abort();\n    this.#addToCartController = new AbortController();\n\n    try {\n      const response = await fetch('/cart/add.js', {\n        method: 'POST',\n        signal: this.#addToCartController.signal,\n        body: new FormData(event.target.form)\n      });\n\n      if (!response.ok) throw new Error('Failed to add to cart');\n\n      const result = await response.json();\n      this.#handleSuccess(result);\n    } catch (error) {\n      if (error.name !== 'AbortError') {\n        this.#handleError(error);\n      }\n    }\n  }\n\n  #handleSuccess(result) {\n    this.refs.addButton.textContent = 'Added!';\n    this.dispatchEvent(new CustomEvent('product:added', {\n      detail: result,\n      bubbles: true\n    }));\n  }\n\n  #handleError(error) {\n    this.refs.addButton.textContent = 'Error - Try again';\n    console.error('Add to cart error:', error);\n  }\n}\n\ncustomElements.define('product-card', ProductCard);\n```\n\n### 6. **Add Performance Optimization Section**\n\n**Use debouncing for expensive operations:**\n\n```javascript\n/**\n * @param {Function} func - Function to debounce\n * @param {number} wait - Wait time in milliseconds\n * @returns {Function} Debounced function\n */\nconst debounce = (func, wait) => {\n  let timeout;\n  return function executedFunction(...args) {\n    const later = () => {\n      clearTimeout(timeout);\n      func.apply(this, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nclass SearchInput extends Component {\n  constructor() {\n    super();\n    this.#debouncedSearch = debounce(this.performSearch.bind(this), 300);\n  }\n\n  handleInput(event) {\n    const query = event.target.value.trim();\n\n    if (query.length < 2) {\n      this.#clearResults();\n      return;\n    }\n\n    this.#debouncedSearch(query);\n  }\n\n  async performSearch(query) {\n    if (this.refs.loadingSpinner) {\n      this.refs.loadingSpinner.hidden = false;\n    }\n\n    try {\n      const url = new URL('/search/suggest', window.location.origin);\n      url.searchParams.set('q', query);\n      url.searchParams.set('limit', '5');\n\n      const response = await fetch(url);\n      const results = await response.json();\n\n      this.#displayResults(results);\n    } catch (error) {\n      console.error('Search error:', error);\n      this.#clearResults();\n    } finally {\n      if (this.refs.loadingSpinner) {\n        this.refs.loadingSpinner.hidden = true;\n      }\n    }\n  }\n\n  #displayResults(results) {\n    if (!this.refs.resultsContainer) return;\n\n    // Implementation specific to your search results format\n    this.refs.resultsContainer.innerHTML = results\n      .map(result => `<div class=\"search-result\">${result.title}</div>`)\n      .join('');\n  }\n\n  #clearResults() {\n    if (this.refs.resultsContainer) {\n      this.refs.resultsContainer.innerHTML = '';\n    }\n  }\n\n  /** @type {Function} */\n  #debouncedSearch;\n}\n\ncustomElements.define('search-input', SearchInput);\n```\n"
  },
  {
    "path": ".cursor/rules/landmark-accessibility.mdc",
    "content": "---\ndescription: Landmark element accessibility compliance and WCAG 2.4.1 Bypass Blocks requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: true\n---\n# Landmark Element Accessibility Standards\n\nEnsures landmark elements follow WCAG compliance and provide proper content structure for screen reader navigation and bypass blocks functionality.\n\n<rule>\nname: landmark_accessibility_standards\ndescription: Enforce landmark element accessibility standards per WCAG 2.4.1 Bypass Blocks requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Multiple instances of single-instance landmarks\n      - pattern: \"(?i)<(header|banner)[^>]*>.*<(header|banner)[^>]*>\"\n        message: \"Page should not contain more than one instance of header/banner landmark.\"\n\n      - pattern: \"(?i)<main[^>]*>.*<main[^>]*>\"\n        message: \"Page should not contain more than one instance of main landmark.\"\n\n      - pattern: \"(?i)<(footer|contentinfo)[^>]*>.*<(footer|contentinfo)[^>]*>\"\n        message: \"Page should not contain more than one instance of footer/contentinfo landmark.\"\n\n      # Missing distinguishable names for multiple landmarks of same type\n      - pattern: \"(?i)<nav[^>]*>.*<nav[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)\"\n        message: \"Multiple navigation landmarks should have distinguishable names using aria-label or aria-labelledby.\"\n\n      - pattern: \"(?i)<(section|region)[^>]*>.*<(section|region)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)\"\n        message: \"Multiple section/region landmarks should have distinguishable names using aria-label or aria-labelledby.\"\n\n      - pattern: \"(?i)<(aside|complementary)[^>]*>.*<(aside|complementary)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)\"\n        message: \"Multiple aside/complementary landmarks should have distinguishable names using aria-label or aria-labelledby.\"\n\n      # Content outside landmarks\n      - pattern: \"(?i)<body[^>]*>\"\n        pattern_negate: \"(<header|<nav|<main|<aside|<section|<footer|<banner|<navigation|<complementary|<contentinfo|<region)\"\n        message: \"All content should be contained within landmark regions.\"\n\n      # Excessive number of landmarks (more than 8-10)\n      - pattern: \"(?i)(<header|<nav|<main|<aside|<section|<footer|<banner|<navigation|<complementary|<contentinfo|<region)\"\n        pattern_negate: \"(aria-label|aria-labelledby)\"\n        message: \"Consider reducing the number of landmarks to minimize navigation complexity.\"\n\n      # Missing main landmark\n      - pattern: \"(?i)<body[^>]*>\"\n        pattern_negate: \"<main[^>]*>\"\n        message: \"Page should contain a main landmark for primary content.\"\n\n      # Landmark without proper role or semantic element\n      - pattern: \"(?i)role=\\\"(banner|navigation|main|complementary|contentinfo|region)\\\"\"\n        pattern_negate: \"(<header|<nav|<main|<aside|<section|<footer)\"\n        message: \"Landmark roles should be used with semantic HTML elements when possible.\"\n\n      # Nested landmarks of same type\n      - pattern: \"(?i)<nav[^>]*>.*<nav[^>]*>.*</nav>.*</nav>\"\n        message: \"Avoid nesting landmarks of the same type.\"\n\n      - pattern: \"(?i)<section[^>]*>.*<section[^>]*>.*</section>.*</section>\"\n        message: \"Avoid nesting landmarks of the same type.\"\n\n      # Landmark without accessible name\n      - pattern: \"(?i)<(section|region|aside|complementary)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby|<h[1-6])\"\n        message: \"Landmarks should have accessible names via aria-label, aria-labelledby, or heading elements.\"\n\n      # Generic landmark names\n      - pattern: \"(?i)aria-label=\\\"(section|region|content|area)\\\"\"\n        message: \"Landmark names should be specific and descriptive, not generic.\"\n\n      # Landmark with empty or meaningless name\n      - pattern: \"(?i)aria-label=\\\"\\\\s*\\\"\"\n        message: \"Landmark aria-label should contain meaningful text.\"\n\n  - type: suggest\n    message: |\n      **WCAG 2.4.1 Landmark Accessibility Requirements:**\n\n      **Bypass Blocks Functionality:**\n      - **Screen Reader Navigation:** Landmarks allow users to navigate by page sections\n      - **Content Structure:** Landmarks provide clear layout organization\n      - **Alternative Methods:** Skip links, headings, and expand/collapse regions can also be used\n\n      **Landmark Structural Organization:**\n\n      **1. Page Layout Groupings:**\n      ```html\n      <!-- Good: Proper page structure with landmarks -->\n      <body>\n        <header role=\"banner\">\n          <h1>Company Name</h1>\n          <nav role=\"navigation\" aria-label=\"Primary\">\n            <ul>\n              <li><a href=\"/\">Home</a></li>\n              <li><a href=\"/about\">About</a></li>\n            </ul>\n          </nav>\n        </header>\n\n        <main role=\"main\">\n          <h2>Page Content</h2>\n          <p>Main content goes here...</p>\n        </main>\n\n        <aside role=\"complementary\" aria-label=\"Related information\">\n          <h3>Related Links</h3>\n          <ul>\n            <li><a href=\"/related\">Related Content</a></li>\n          </ul>\n        </aside>\n\n        <footer role=\"contentinfo\">\n          <p>&copy; 2024 Company Name</p>\n        </footer>\n      </body>\n      ```\n\n      **2. Content Within Landmarks:**\n      ```html\n      <!-- Good: All content within landmarks -->\n      <body>\n        <header>\n          <h1>Page Title</h1>\n          <nav aria-label=\"Main navigation\">\n            <!-- Navigation content -->\n          </nav>\n        </header>\n\n        <main>\n          <section aria-labelledby=\"intro-heading\">\n            <h2 id=\"intro-heading\">Introduction</h2>\n            <p>Content here...</p>\n          </section>\n\n          <section aria-labelledby=\"details-heading\">\n            <h2 id=\"details-heading\">Details</h2>\n            <p>More content...</p>\n          </section>\n        </main>\n\n        <footer>\n          <p>Footer content</p>\n        </footer>\n      </body>\n      ```\n\n      **3. Landmark Names for Multiple Instances:**\n      ```html\n      <!-- Good: Distinguishable landmark names -->\n      <nav aria-label=\"Primary navigation\">\n        <ul>\n          <li><a href=\"/\">Home</a></li>\n          <li><a href=\"/about\">About</a></li>\n        </ul>\n      </nav>\n\n      <nav aria-label=\"Secondary navigation\">\n        <ul>\n          <li><a href=\"/help\">Help</a></li>\n          <li><a href=\"/contact\">Contact</a></li>\n        </ul>\n      </nav>\n\n      <aside aria-label=\"Product sidebar\">\n        <h3>Product Categories</h3>\n        <!-- Sidebar content -->\n      </aside>\n\n      <aside aria-label=\"News sidebar\">\n        <h3>Latest News</h3>\n        <!-- News content -->\n      </aside>\n      ```\n\n      **4. Single Instance Landmarks:**\n      ```html\n      <!-- Good: One instance of each single-instance landmark -->\n      <body>\n        <header role=\"banner\">\n          <!-- Header content -->\n        </header>\n\n        <main role=\"main\">\n          <!-- Main content -->\n        </main>\n\n        <footer role=\"contentinfo\">\n          <!-- Footer content -->\n        </footer>\n      </body>\n      ```\n\n      **5. Landmark Markup Options:**\n      ```html\n      <!-- Option 1: Semantic HTML elements -->\n      <header role=\"banner\">\n        <h1>Page Title</h1>\n      </header>\n\n      <nav role=\"navigation\" aria-label=\"Main menu\">\n        <ul>\n          <li><a href=\"/\">Home</a></li>\n        </ul>\n      </nav>\n\n      <main role=\"main\">\n        <h2>Content</h2>\n      </main>\n\n      <footer role=\"contentinfo\">\n        <p>Footer</p>\n      </footer>\n\n      <!-- Option 2: ARIA roles on div elements -->\n      <div role=\"banner\">\n        <h1>Page Title</h1>\n      </div>\n\n      <div role=\"navigation\" aria-label=\"Main menu\">\n        <ul>\n          <li><a href=\"/\">Home</a></li>\n        </ul>\n      </div>\n\n      <div role=\"main\">\n        <h2>Content</h2>\n      </div>\n\n      <div role=\"contentinfo\">\n        <p>Footer</p>\n      </div>\n      ```\n\n      **Landmark Guidelines:**\n\n      **Available Landmarks:**\n      - **banner:** Page header (usually one per page)\n      - **navigation:** Navigation menus (can have multiple with different names)\n      - **main:** Main content area (one per page)\n      - **complementary:** Supporting content (sidebars, related info)\n      - **contentinfo:** Page footer (usually one per page)\n      - **region:** Generic landmark for page sections\n      - **search:** Search functionality\n      - **form:** Form sections\n\n      **Naming Requirements:**\n      - **Multiple instances:** Must have distinguishable names\n      - **Descriptive names:** Use aria-label or aria-labelledby\n      - **Specific names:** Avoid generic terms like \"section\" or \"content\"\n      - **Meaningful names:** Describe the purpose or content\n\n      **Implementation Best Practices:**\n\n      **Page Structure Example:**\n      ```html\n      <body>\n        <!-- Header landmark -->\n        <header role=\"banner\">\n          <h1>Acme Corporation</h1>\n          <nav role=\"navigation\" aria-label=\"Primary\">\n            <ul>\n              <li><a href=\"/\">Home</a></li>\n              <li><a href=\"/products\">Products</a></li>\n              <li><a href=\"/about\">About</a></li>\n              <li><a href=\"/contact\">Contact</a></li>\n            </ul>\n          </nav>\n        </header>\n\n        <!-- Main content landmark -->\n        <main role=\"main\">\n          <h2>Welcome to Acme Corporation</h2>\n\n          <!-- Content sections -->\n          <section aria-labelledby=\"services-heading\">\n            <h2 id=\"services-heading\">Our Services</h2>\n            <p>Service descriptions...</p>\n          </section>\n\n          <section aria-labelledby=\"products-heading\">\n            <h2 id=\"products-heading\">Featured Products</h2>\n            <p>Product information...</p>\n          </section>\n        </main>\n\n        <!-- Complementary landmark -->\n        <aside role=\"complementary\" aria-label=\"Related information\">\n          <h3>Quick Links</h3>\n          <ul>\n            <li><a href=\"/support\">Support</a></li>\n            <li><a href=\"/faq\">FAQ</a></li>\n          </ul>\n        </aside>\n\n        <!-- Footer landmark -->\n        <footer role=\"contentinfo\">\n          <p>&copy; 2024 Acme Corporation. All rights reserved.</p>\n          <nav role=\"navigation\" aria-label=\"Footer\">\n            <ul>\n              <li><a href=\"/privacy\">Privacy Policy</a></li>\n              <li><a href=\"/terms\">Terms of Service</a></li>\n            </ul>\n          </nav>\n        </footer>\n      </body>\n      ```\n\n      **Multiple Navigation Landmarks:**\n      ```html\n      <!-- Primary navigation -->\n      <nav role=\"navigation\" aria-label=\"Primary\">\n        <ul>\n          <li><a href=\"/\">Home</a></li>\n          <li><a href=\"/products\">Products</a></li>\n          <li><a href=\"/services\">Services</a></li>\n        </ul>\n      </nav>\n\n      <!-- Secondary navigation -->\n      <nav role=\"navigation\" aria-label=\"Secondary\">\n        <ul>\n          <li><a href=\"/help\">Help</a></li>\n          <li><a href=\"/contact\">Contact</a></li>\n          <li><a href=\"/about\">About</a></li>\n        </ul>\n      </nav>\n\n      <!-- Footer navigation -->\n      <nav role=\"navigation\" aria-label=\"Footer\">\n        <ul>\n          <li><a href=\"/privacy\">Privacy</a></li>\n          <li><a href=\"/terms\">Terms</a></li>\n        </ul>\n      </nav>\n      ```\n\n      **Landmark with Accessible Names:**\n      ```html\n      <!-- Using aria-label -->\n      <section role=\"region\" aria-label=\"Product specifications\">\n        <h2>Product Specifications</h2>\n        <p>Detailed specifications...</p>\n      </section>\n\n      <!-- Using aria-labelledby -->\n      <section role=\"region\" aria-labelledby=\"reviews-heading\">\n        <h2 id=\"reviews-heading\">Customer Reviews</h2>\n        <p>Review content...</p>\n      </section>\n\n      <!-- Using heading element -->\n      <section role=\"region\">\n        <h2>Product Features</h2>\n        <p>Feature descriptions...</p>\n      </section>\n      ```\n\n      **Testing and Validation:**\n      - Test with screen reader landmark navigation\n      - Verify landmark names are descriptive and unique\n      - Check that all content is within landmarks\n      - Ensure single-instance landmarks appear only once\n      - Test keyboard navigation between landmarks\n      - Validate landmark hierarchy is logical\n\n      **Common Mistakes to Avoid:**\n      - Multiple instances of single-instance landmarks\n      - Missing accessible names for multiple landmarks\n      - Content outside landmark regions\n      - Excessive number of landmarks\n      - Generic or meaningless landmark names\n      - Nested landmarks of same type\n      - Missing main landmark\n      - Using landmarks for styling only\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/liquid.mdc",
    "content": "---\ndescription: Liquid syntax standards\nglobs: *.liquid\nalwaysApply: false\n---\n\n# Liquid Syntax Standards\n\n## ⚠️ CRITICAL: Schema Editing\n\n**NEVER edit the `{% schema %}` block directly in `.liquid` files!**\n\nSchemas are generated from source files in the `schemas/` folder. To make schema changes:\n\n1. Find the corresponding `.js` file in `schemas/blocks/` or `schemas/sections/`\n2. Edit the JavaScript source file\n3. Run `npm run build:schemas` to regenerate the `.liquid` files\n\nSee [@schemas](mdc:.cursor/rules/schemas.mdc) for more details.\n\n---\n\n## Valid Tags with Parameters\n\n**Control Flow:**\n\n- `if condition` / `endif` - Conditional logic\n- `unless condition` / `endunless` - Negative conditional\n- `case variable` / `when value` / `endcase` - Switch statement\n- `for item in array` / `endfor` - Loop with optional `limit:`, `offset:`\n\n**Variable Assignment:**\n\n- `assign variable = value` - Create variable\n- `capture variable` / `endcapture` - Capture output\n- `increment variable` - Add 1 to counter\n- `decrement variable` - Subtract 1 from counter\n\n**Template Inclusion:**\n\n- `render 'snippet-name'` - Include snippet\n- `render 'snippet-name', param: value` - With parameters\n- `section 'section-name'` - Include section\n\n**Forms:**\n\n- `form 'cart'` / `endform` - Cart form\n- `form 'product'` / `endform` - Product form\n- `form 'customer_login'` / `endform` - Login form\n\n**Other:**\n\n- `paginate collection.products by 12` / `endpaginate` - Paginate results\n- `liquid` / `endliquid` - Multiline Liquid block\n- `comment` / `endcomment` - Block comments\n- `raw` / `endraw` - Output without processing\n\n## Valid Filters\n\n**Array Filters:**\n\n- `compact` - Remove nil values: `array | compact`\n- `concat` - Join arrays: `array | concat: array`\n- `find` - Find object: `array | find: property, value`\n- `where` - Filter objects: `array | where: property, value`\n- `map` - Extract property: `array | map: property`\n- `sort` - Sort array: `array | sort`\n- `reverse` - Reverse order: `array | reverse`\n- `first` - First item: `array | first`\n- `last` - Last item: `array | last`\n- `size` - Count items: `array | size`\n\n**String Filters:**\n\n- `escape` - HTML escape: `string | escape`\n- `truncate` - Limit length: `string | truncate: 150`\n- `handleize` - URL handle: `string | handleize`\n- `replace` - Replace text: `string | replace: 'old', 'new'`\n- `split` - Split string: `string | split: 'delimiter'`\n- `upcase` - Uppercase: `string | upcase`\n- `downcase` - Lowercase: `string | downcase`\n- `capitalize` - Capitalize: `string | capitalize`\n\n**Money Filters:**\n\n- `money` - Format price: `price | money`\n- `money_with_currency` - With symbol: `price | money_with_currency`\n- `money_without_currency` - No symbol: `price | money_without_currency`\n\n**Media Filters:**\n\n- `image_url` - Responsive image: `image | image_url: width: 800`\n- `image_tag` - Complete img tag: `image | image_tag`\n- `asset_url` - Theme asset: `'style.css' | asset_url`\n\n## Syntax Rules\n\n- Use `{% liquid %}` for multiline code blocks\n- Use `{% # comment %}` for inline comments\n- Never invent new filters, tags, or objects\n- Follow proper tag closing order (last opened, first closed)\n- Use object dot notation: `product.title` not `product['title']`\n- Respect object scope and availability\n\n## Snippet Documentation with {% doc %}\n\nAll snippets must include documentation using `{% doc %}` and `{% enddoc %}` tags.\n\n**Parameter types:** `{object}`, `{string}`, `{number}`, `{boolean}`, `{array}`\n**Optional params:** Use brackets like `[param_name]`\n**Nested properties:** Use dash notation like `object - .property`\n\n**Example:**\n\n```liquid\n{% doc %}\n  Volume Pricing Info\n\n  Renders volume pricing information with quantity rules in a popover.\n  Only renders if variant has quantity rules or volume pricing.\n\n  @param {object} variant - The variant object to display pricing for\n  @param {string} [unique_id] - Optional unique identifier to append to popover ID\n  @param {number} [quantity] - The current quantity (for highlighting active tier)\n\n  @example\n  {% render 'volume-pricing-info',\n    variant: item.variant,\n    unique_id: item.index,\n    quantity: item.quantity\n  %}\n{% enddoc %}\n```\n\n## Inline Variables Pattern\n\nFor props that are relatively straightforward, prefer to inline the liquid instead of declaring extra variables. In smaller components it doesn't make a big difference, but in bigger ones it helps not having to scroll up and down to know what is being applied where.\n\n**✅ Do this (inline approach):**\n\n```liquid\n<div\n  class='component component--{{ settings.style_modifier }}'\n  style='\n    color: {{ settings.text_color }};\n    {% if settings.show_border %}\n      border: 1px solid {{ settings.border_color }};\n    {% endif %}\n  '\n>\n  <h2>{{ 'sections.component.title' | t }}</h2>\n\n  {{ content | truncate: settings.max_length | default: 200 }}\n\n  <a\n    href='{{ link_url }}'\n    class='link--{{ settings.link_style | default: 'primary' }}'\n  >\n    {{ 'general.read_more' | t }}\n  </a>\n</div>\n```\n\n**❌ Don't do this (variable declaration approach):**\n\n```liquid\n{% liquid\n  assign component_class = 'component component--' | append: settings.style_modifier\n  assign text_color = settings.text_color\n  assign truncate_length = settings.max_length | default: 200\n  assign link_class = 'link--' | append: settings.link_style | default: 'primary'\n%}\n\n{% capture component_style %}\n  color: {{ text_color }};\n  {% if settings.show_border %}\n    border: 1px solid {{ settings.border_color }};\n  {% endif %}\n{% endcapture %}\n\n<div\n  class='{{ component_class }}'\n  style='{{ component_style }}'\n>\n  <h2>{{ 'sections.component.title' | t }}</h2>\n\n  {{ content | truncate: truncate_length }}\n\n  <a\n    href='{{ link_url }}'\n    class='{{ link_class }}'\n  >\n    {{ 'general.read_more' | t }}\n  </a>\n</div>\n```\n\n**Exceptions:**\n\n- When Liquid filter parameters require string values and complex logic cannot be inlined\n- When the same complex calculation is used multiple times\n- When the logic is extremely complex and would harm readability\n- When you need to build a string incrementally with conditional parts\n\n**Benefits:**\n\n- Easier to understand what's being applied where\n- No need to scroll up and down to find variable definitions\n- Reduces cognitive load in larger components\n- Makes the code more maintainable\n"
  },
  {
    "path": ".cursor/rules/locales.mdc",
    "content": "---\ndescription: Locales coding standards and best practices guide\nglobs: locales/*.json\nalwaysApply: false\n---\n# Translation Development Standards\n\nAuto-attached when working in `locales/` directory.\n\n## File Structure\n\n```\nlocales/\n├── en.default.json     # English (required)\n├── es.json             # Spanish\n├── fr.json             # French\n└── de.json             # German\n```\n\n## Key Organization\n\n**Hierarchical Structure:**\n```json\n{\n  \"general\": {\n    \"meta\": {\n      \"title\": \"{{ shop_name }}\",\n      \"description\": \"{{ shop_description }}\"\n    },\n    \"accessibility\": {\n      \"skip_to_content\": \"Skip to content\",\n      \"close\": \"Close\"\n    }\n  },\n  \"products\": {\n    \"add_to_cart\": \"Add to cart\",\n    \"quick_view\": \"Quick view\",\n    \"price\": {\n      \"regular\": \"Regular price\",\n      \"sale\": \"Sale price\",\n      \"unit\": \"Unit price\"\n    }\n  }\n}\n```\n**Usage**\n```liquid\n{{ 'general.meta.title' | t: shop_name: shop.name }}\n{{ 'general.meta.description' | t: shop_description: shop.description }}\n```\n\n## Translation Guidelines\n\n**Key Naming:**\n- Use descriptive, hierarchical keys\n- Maximum 3 levels deep\n- Use snake_case for key names\n- Group related translations\n\n**Content Rules:**\n- Keep text concise for UI elements\n- Use variables for dynamic content\n- Consider character limits\n- Maintain consistent terminology\n\n**Schema Translations:**\n\nUse the rules outlined in our [typescript schema](schemas/schema.d.ts) to determine the appropriate key structure for schema translations.\n"
  },
  {
    "path": ".cursor/rules/localization.mdc",
    "content": "---\ndescription: Localization coding standards and best practices guide\nglobs: *.liquid,schemas/*\nalwaysApply: false\n---\n# Localization Standards\n\n## Translation Requirements\n\n- **Every user-facing text** must use translation filters\n- **Update `locales/en.default.json`** with all new keys\n- **Use descriptive, hierarchical keys** for organization\n- **Only add English text** - translators handle other languages\n\n## Translation Filter Usage\n\n**Use `{{ 'key' | t }}` for all text:**\n\n```liquid\n<!-- Good -->\n<h2>{{ 'sections.featured_collection.title' | t }}</h2>\n<p>{{ 'sections.featured_collection.description' | t }}</p>\n<button>{{ 'products.add_to_cart' | t }}</button>\n\n<!-- Bad -->\n<h2>Featured Collection</h2>\n<p>Check out our best products</p>\n<button>Add to cart</button>\n```\n\n## Translation with Variables\n\n**Use variables for interpolation:**\n\n```liquid\n<!-- Liquid template -->\n<p>{{ 'products.price_range' | t: min: product.price_min | money, max: product.price_max | money }}</p>\n<p>{{ 'general.pagination.page' | t: page: paginate.current_page, pages: paginate.pages }}</p>\n```\n\n**Corresponding keys in Locale files:**\n\n```json\n{\n  \"products\": {\n    \"price_range\": \"From {{ min }} to {{ max }}\"\n  },\n  \"general\": {\n    \"pagination\": {\n      \"page\": \"Page {{ page }} of {{ pages }}\"\n    }\n  }\n}\n```\n\n## Best Practices\n\n**Content Guidelines:**\n- Write clear, concise text\n- Use sentence case for UI elements\n- Be consistent with terminology\n- Consider character limits for UI elements\n\n**Variable Usage:**\n- Use interpolation rather than appending strings together\n- Naming should be prioritize clarity over brevity\n- Escape variables whenever they aren't expected to output HTML: `{{ variable | escape }}`\n"
  },
  {
    "path": ".cursor/rules/mobile-accessibility-standards.mdc",
    "content": "---\ndescription: Mobile accessibility standards per WCAG 2.5.8 Target Size (Minimum), 2.4.1 Bypass Blocks, and 1.3.4 Orientation requirements\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.css, *.scss, *.sass, *.less\nalwaysApply: false\n---\n\n# Mobile Accessibility Best Practices\n\nEnsures mobile interfaces follow WCAG compliance and provide proper accessibility for touch interactions, spacing, and orientation flexibility.\n\n<rule>\nname: mobile_accessibility_standards\ndescription: Enforce mobile accessibility standards per WCAG requirements for touch targets, spacing, and orientation\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts|css|scss|sass|less)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Touch targets smaller than minimum recommended size\n      - pattern: \"(width|height):\\\\s*(?:1[0-9]|2[0-3])\\\\s*(?:px|rem|em|%)\"\n        pattern_negate: \"(min-width|min-height|max-width|max-height)\"\n        message: \"Touch targets should be at least 24x24px (Level AA) or 44x44px (Level AAA) for optimal accessibility. Use CSS padding to increase touch area without affecting visual design.\"\n\n      # Touch targets with insufficient padding\n      - pattern: \"padding:\\\\s*(?:0|1|2|3|4)\\\\s*(?:px|rem|em)\"\n        pattern_negate: \"(min-width|min-height|max-width|max-height)\"\n        message: \"Consider increasing padding to create larger touch targets. Google recommends 48x48px with 8px spacing, Apple recommends 44x44px minimum.\"\n\n      # Interactive elements without proper touch target sizing\n      - pattern: \"<(button|a|input|select|textarea)[^>]*>\"\n        pattern_negate: \"(min-width|min-height|width|height|padding)\"\n        message: \"Interactive elements should have sufficient touch target size. Use CSS min-width/min-height or padding to ensure accessibility compliance.\"\n\n      # Touch targets too close together (less than 8px spacing)\n      - pattern: \"(margin|gap):\\\\s*(?:0|1|2|3|4|5|6|7)\\\\s*(?:px|rem|em)\"\n        pattern_negate: \"(min-width|min-height|max-width|max-height)\"\n        message: \"Touch targets should have at least 8px spacing between them to prevent accidental activation. Consider increasing margins or gaps.\"\n\n      # Fixed orientation restrictions\n      - pattern: \"orientation:\\\\s*(portrait|landscape)\"\n        message: \"Avoid restricting content orientation. Allow users to consume content in any orientation they prefer or require for their computing environment.\"\n\n      # Viewport meta tag preventing orientation changes\n      - pattern: \"<meta[^>]*name=\\\"viewport\\\"[^>]*>\"\n        pattern_negate: \"(width=device-width|initial-scale)\"\n        message: \"Viewport meta tag should support responsive design and orientation flexibility. Avoid restrictions that prevent content reflow.\"\n\n      # CSS that prevents orientation flexibility\n      - pattern: \"@media\\\\s*\\\\(orientation:\\\\s*(portrait|landscape)\\\\)\"\n        pattern_negate: \"(min-width|max-width|flex-direction|grid-template)\"\n        message: \"Orientation media queries should enhance layout, not restrict functionality. Ensure content remains accessible in both orientations.\"\n\n      # Fixed positioning that may cause issues in different orientations\n      - pattern: \"position:\\\\s*fixed\"\n        pattern_negate: \"(top|bottom|left|right|transform)\"\n        message: \"Fixed positioning may cause accessibility issues in different orientations. Consider using relative positioning with responsive adjustments.\"\n\n      # Touch targets without proper focus indicators\n      - pattern: \"<(button|a|input|select|textarea)[^>]*>\"\n        pattern_negate: \"(:focus|:focus-visible|outline|box-shadow)\"\n        message: \"Touch targets should have visible focus indicators for keyboard navigation accessibility.\"\n\n      # Mobile-specific elements without touch-friendly sizing\n      - pattern: \"(?i)<(button|a|input|select|textarea)[^>]*class=\\\"[^\\\"]*(?:mobile|touch|small)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(min-width|min-height|width|height|padding)\"\n        message: \"Mobile-specific interactive elements must have adequate touch target sizes for accessibility compliance.\"\n\n      # Grid layouts without proper spacing\n      - pattern: \"display:\\\\s*grid\"\n        pattern_negate: \"(gap|grid-gap|margin|padding)\"\n        message: \"Grid layouts should include proper spacing between elements to prevent accidental touch activation.\"\n\n      # Flexbox layouts without proper spacing\n      - pattern: \"display:\\\\s*flex\"\n        pattern_negate: \"(gap|margin|padding|justify-content|align-items)\"\n        message: \"Flexbox layouts should include proper spacing and alignment to ensure touch target accessibility.\"\n\n  - type: suggest\n    message: |\n      **WCAG Mobile Accessibility Requirements:**\n\n      **Touch Target Size (WCAG 2.5.8 Target Size Minimum):**\n      - **Level AA (Required):** Minimum 24x24 pixels\n      - **Recommended:** 44x44 pixels or larger for optimal usability\n      - **Industry Standards:** Google (48x48px), Apple (44x44px)\n      - **Spacing:** At least 8 pixels between touch targets\n\n      **Touch Target Implementation:**\n\n      **1. CSS Padding Approach:**\n      ```css\n      /* Good: Touch target meeting minimum requirements */\n      .touch-button {\n        min-width: 24px;  /* WCAG 2.5.8 AA minimum */\n        min-height: 24px;\n        padding: 12px 16px; /* Padding increases effective touch area */\n        border: none;\n        background: #0056b3;\n        color: white;\n        border-radius: 4px;\n      }\n\n      /* Better: Larger touch target for optimal usability */\n      .touch-button-optimal {\n        min-width: 44px;  /* Recommended size */\n        min-height: 44px;\n        padding: 12px 16px;\n        border: none;\n        background: #0056b3;\n        color: white;\n        border-radius: 4px;\n      }\n\n      /* Good: Icon button with sufficient touch area */\n      .icon-button {\n        width: 24px;\n        height: 24px;\n        padding: 12px; /* Total touch area: 48x48px */\n        border: none;\n        background: transparent;\n      }\n      ```\n\n      **2. Minimum Dimensions:**\n      ```css\n      /* Good: Meets WCAG 2.5.8 AA minimum */\n      .mobile-button {\n        min-width: 24px;\n        min-height: 24px;\n        padding: 8px 16px;\n        font-size: 16px; /* Prevents zoom on iOS */\n      }\n\n      /* Better: Recommended size for optimal usability */\n      .mobile-button-optimal {\n        min-width: 44px;\n        min-height: 44px;\n        padding: 8px 16px;\n        font-size: 16px;\n      }\n\n      /* Good: Responsive touch targets */\n      .responsive-button {\n        min-width: clamp(24px, 8vw, 120px);\n        min-height: clamp(24px, 8vh, 60px);\n        padding: 12px;\n      }\n      ```\n\n      **3. Touch Target Spacing:**\n      ```css\n      /* Good: Proper spacing between touch targets */\n      .button-group {\n        display: flex;\n        gap: 12px; /* 8px minimum, 12px recommended */\n        align-items: center;\n      }\n\n      /* Good: Grid with minimum touch target size */\n      .touch-grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(24px, 1fr));\n        gap: 12px;\n        padding: 16px;\n      }\n\n      /* Better: Grid with recommended touch target size */\n      .touch-grid-optimal {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(44px, 1fr));\n        gap: 12px;\n        padding: 16px;\n      }\n      ```\n\n      **Spacing Between Elements (WCAG 2.4.1 Bypass Blocks):**\n\n      **1. White Space for Navigation:**\n      ```css\n      /* Good: Adequate spacing for motor impairment users */\n      .navigation-links {\n        display: flex;\n        gap: 16px; /* Prevents accidental activation */\n        padding: 20px;\n        flex-wrap: wrap;\n      }\n\n      /* Good: Callout action spacing */\n      .callout-actions {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n        gap: 20px; /* Generous spacing for accessibility */\n        margin: 24px 0;\n      }\n      ```\n\n      **2. Touch-Friendly Spacing:**\n      ```css\n      /* Good: Touch-friendly button spacing */\n      .touch-buttons {\n        display: flex;\n        flex-direction: column;\n        gap: 16px; /* Vertical spacing for thumb navigation */\n      }\n\n      /* Good: Horizontal button spacing */\n      .horizontal-buttons {\n        display: flex;\n        gap: 12px;\n        padding: 0 16px; /* Side padding for edge safety */\n      }\n      ```\n\n      **Orientation Flexibility (WCAG 1.3.4 Orientation):**\n\n      **1. Responsive Design Implementation:**\n      ```css\n      /* Good: Flexible layout that works in any orientation */\n      .responsive-container {\n        display: flex;\n        flex-direction: row;\n        gap: 16px;\n        padding: 20px;\n      }\n\n      /* Responsive adjustments for different orientations */\n      @media (orientation: portrait) {\n        .responsive-container {\n          flex-direction: column;\n          gap: 12px;\n        }\n      }\n\n      @media (orientation: landscape) {\n        .responsive-container {\n          flex-direction: row;\n          gap: 20px;\n        }\n      }\n      ```\n\n      **2. Viewport Meta Tag:**\n      ```html\n      <!-- Good: Flexible viewport configuration -->\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes\">\n      ```\n\n      **3. CSS Grid for Orientation Flexibility:**\n      ```css\n      /* Good: Grid that adapts to orientation */\n      .adaptive-grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n        gap: 20px;\n        padding: 20px;\n      }\n\n      /* Orientation-specific adjustments */\n      @media (orientation: portrait) {\n        .adaptive-grid {\n          grid-template-columns: 1fr;\n          gap: 16px;\n        }\n      }\n      ```\n\n      **Mobile Accessibility Best Practices:**\n\n      **1. Touch Target Guidelines:**\n      - **Minimum size:** 24x24px per WCAG 2.5.8 AA\n      - **Recommended size:** 44x44px or larger for optimal accessibility\n      - **Spacing:** At least 8px between interactive elements\n      - **Padding:** Use CSS padding to increase touch area\n      - **Visual feedback:** Provide clear touch feedback\n      - **Font size:** Minimum 16px to prevent zoom on iOS\n\n      **2. Spacing and Layout:**\n      - **White space:** Generous spacing prevents accidental activation\n      - **Grid gaps:** Use CSS Grid gap property for consistent spacing\n      - **Flexbox spacing:** Use gap property or margins for flex layouts\n      - **Touch margins:** Add margins around touch targets for safety\n      - **Visual separation:** Clear visual boundaries between interactive elements\n\n      **3. Orientation Support:**\n      - **Responsive design:** Content should reflow in any orientation\n      - **Flexible layouts:** Use CSS Grid and Flexbox for adaptability\n      - **No restrictions:** Avoid forcing specific orientations\n      - **User choice:** Allow users to choose their preferred orientation\n      - **Testing:** Test in both portrait and landscape modes\n\n      **Implementation Examples:**\n\n      **Touch-Friendly Button Component:**\n      ```html\n      <!-- Good: Accessible touch button meeting WCAG 2.5.8 AA -->\n      <button class=\"touch-button\"\n              type=\"button\"\n              aria-label=\"Submit form\">\n        Submit\n      </button>\n\n      <style>\n        .touch-button {\n          min-width: 24px;  /* WCAG 2.5.8 AA minimum */\n          min-height: 24px;\n          padding: 12px 24px; /* Padding creates larger effective size */\n          font-size: 16px;\n          border: 2px solid #0056b3;\n          background: #0056b3;\n          color: white;\n          border-radius: 6px;\n          cursor: pointer;\n          transition: all 0.2s ease;\n        }\n\n        .touch-button:hover,\n        .touch-button:focus {\n          background: #004085;\n          border-color: #004085;\n          outline: 3px solid #0056b3;\n          outline-offset: 2px;\n        }\n      </style>\n      ```\n\n      **Responsive Touch Grid:**\n      ```html\n      <!-- Good: Responsive touch-friendly grid -->\n      <div class=\"touch-grid\">\n        <button class=\"grid-button\">Action 1</button>\n        <button class=\"grid-button\">Action 2</button>\n        <button class=\"grid-button\">Action 3</button>\n        <button class=\"grid-button\">Action 4</button>\n      </div>\n\n      <style>\n        .touch-grid {\n          display: grid;\n          grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n          gap: 16px;\n          padding: 20px;\n        }\n\n        .grid-button {\n          min-width: 24px;  /* WCAG 2.5.8 AA minimum */\n          min-height: 24px;\n          padding: 16px; /* Padding creates larger effective size */\n          font-size: 16px;\n          border: 1px solid #ddd;\n          background: white;\n          border-radius: 4px;\n          cursor: pointer;\n        }\n\n        /* Orientation-specific adjustments */\n        @media (orientation: portrait) {\n          .touch-grid {\n            grid-template-columns: repeat(2, 1fr);\n            gap: 12px;\n          }\n        }\n\n        @media (orientation: landscape) {\n          .touch-grid {\n            grid-template-columns: repeat(4, 1fr);\n            gap: 20px;\n          }\n        }\n      </style>\n      ```\n\n      **Touch-Friendly Navigation:**\n      ```html\n      <!-- Good: Touch-friendly navigation menu -->\n      <nav class=\"touch-navigation\" role=\"navigation\">\n        <ul class=\"nav-list\">\n          <li><a href=\"/\" class=\"nav-link\">Home</a></li>\n          <li><a href=\"/about\" class=\"nav-link\">About</a></li>\n          <li><a href=\"/services\" class=\"nav-link\">Services</a></li>\n          <li><a href=\"/contact\" class=\"nav-link\">Contact</a></li>\n        </ul>\n      </nav>\n\n      <style>\n        .touch-navigation {\n          padding: 16px;\n        }\n\n        .nav-list {\n          display: flex;\n          flex-direction: column;\n          gap: 16px;\n          list-style: none;\n          margin: 0;\n          padding: 0;\n        }\n\n        .nav-link {\n          display: block;\n          min-height: 24px;  /* WCAG 2.5.8 AA minimum */\n          padding: 12px 16px; /* Padding creates larger effective size */\n          text-decoration: none;\n          color: #333;\n          background: #f8f9fa;\n          border-radius: 6px;\n          border: 2px solid transparent;\n          transition: all 0.2s ease;\n        }\n\n        .nav-link:hover,\n        .nav-link:focus {\n          background: #e9ecef;\n          border-color: #0056b3;\n          outline: none;\n        }\n\n        /* Landscape orientation adjustment */\n        @media (orientation: landscape) {\n          .nav-list {\n            flex-direction: row;\n            gap: 20px;\n          }\n        }\n      </style>\n      ```\n\n      **Testing and Validation:**\n\n      **Touch Target Testing:**\n      - Use browser dev tools to measure element dimensions\n      - Test with touch devices to verify target sizes\n      - Verify spacing between interactive elements\n      - Check that padding creates adequate touch areas\n      - Test with different screen densities\n\n      **Orientation Testing:**\n      - Test in both portrait and landscape modes\n      - Verify content reflows properly\n      - Check that functionality remains accessible\n      - Test with different device orientations\n      - Verify touch targets remain accessible\n\n      **Accessibility Testing:**\n      - Test with screen readers in different orientations\n      - Verify keyboard navigation works in all orientations\n      - Check that focus indicators remain visible\n      - Test with motor impairment simulators\n      - Validate touch target sizes meet WCAG requirements\n\n      **Common Mistakes to Avoid:**\n      - Touch targets smaller than 24x24px (WCAG 2.5.8 AA minimum)\n      - Not using recommended 44x44px or larger sizes for optimal usability\n      - Insufficient spacing between interactive elements (minimum 8px)\n      - Fixed orientation restrictions\n      - Viewport meta tags preventing orientation changes\n      - CSS that doesn't adapt to different orientations\n      - Touch targets without proper focus indicators\n      - Grid layouts without adequate gaps\n      - Flexbox layouts without proper spacing\n      - Fixed positioning that causes orientation issues\n      - Mobile elements without touch-friendly sizing\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/modal-accessibility.mdc",
    "content": "---\ndescription: Modal window accessibility compliance and ARIA Dialog Pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Modal Window Accessibility Standards\n\nEnsures modal windows follow WCAG compliance and ARIA Dialog Pattern specifications.\n\n<rule>\nname: modal_accessibility_standards\ndescription: Enforce modal window accessibility standards and ARIA Dialog Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Dialog role requirement\n      - pattern: \"(?i)<(div|section|article)[^>]*(?:modal|dialog)[^>]*>\"\n        pattern_negate: \"role=\\\"dialog\\\"\"\n        message: \"Modal containers must have role='dialog' attribute.\"\n\n      # aria-modal requirement\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*>\"\n        pattern_negate: \"aria-modal=\\\"true\\\"\"\n        message: \"Dialog elements must have aria-modal='true' attribute.\"\n\n      # aria-labelledby or aria-label requirement\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Dialog elements must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Empty aria-label check\n      - pattern: \"(?i)<[^>]*role=\\\"dialog\\\"[^>]*aria-label=\\\"\\\"[^>]*>\"\n        message: \"Dialog aria-label should not be empty; provide a meaningful description.\"\n\n      # Button without proper close functionality\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss|cancel)[^>]*>\"\n        pattern_negate: \"(onClick|onclick|@click|v-on:click)\"\n        message: \"Modal close buttons should have proper click handlers to close the dialog.\"\n\n      # Close button should have aria-label\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss|×|&times;)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*[Cc]lose[^\\\"]*\\\"\"\n        message: \"Modal close buttons should have aria-label='Close' or similar descriptive text for screen readers.\"\n\n      # Missing focus trap indicators\n      - pattern: \"(?i)(?:showModal|openModal|displayModal)\\\\s*\\\\(\"\n        message: \"When opening modals, ensure focus management is implemented (focus should move to an element inside the dialog).\"\n\n      # Modal launcher should have aria-haspopup\n      - pattern: \"(?i)<button[^>]*(?:open|show|launch)[^>]*(?:modal|dialog)[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Buttons that open modals should include aria-haspopup='dialog' to inform users a dialog will open.\"\n\n  - type: suggest\n    message: |\n      **Modal Window Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='dialog':** Set on the modal container element\n      - **aria-modal='true':** Indicates the dialog is modal\n      - **aria-labelledby:** Reference to visible dialog title, OR\n      - **aria-label:** Descriptive label if no visible title exists\n      - **aria-haspopup='dialog':** Set on buttons/elements that trigger the modal to inform users a dialog will open\n\n      **Keyboard Interaction Requirements:**\n      - **Initial Focus:** When dialog opens, focus must move to an element inside the dialog\n      - **Tab Cycling:** Tab key should cycle through tabbable elements within the dialog only\n      - **Shift+Tab:** Should cycle backwards through tabbable elements within the dialog\n      - **Escape Key:** Must close the dialog\n      - **Focus Trap:** Focus should be contained within the modal while open\n\n      **Focus Management:**\n      - Implement focus trapping to prevent tab navigation outside the modal\n      - Return focus to the triggering element when modal closes\n      - Move focus to the close button (first focusable element) when modal opens\n      - Ensure close button is positioned first in DOM order within the dialog\n\n      **Structure Requirements:**\n      - All interactive elements must be descendants of the dialog container\n      - Position close button first in DOM order within the dialog container\n      - Use semantic HTML within the modal (headings, buttons, form labels)\n      - Provide clear visual focus indicators\n      - Close buttons should use aria-label=\"Close\" with &times; entity for visual 'x' icon\n\n      **Example Implementation:**\n      ```html\n      <!-- Modal launcher -->\n      <button aria-haspopup=\"dialog\" onclick=\"openModal()\">Open Settings</button>\n\n      <!-- Modal dialog -->\n      <div role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-title\">\n        <button type=\"button\" aria-label=\"Close\" onclick=\"closeModal()\">&times;</button>\n        <h2 id=\"modal-title\">Modal Title</h2>\n        <p>Modal content...</p>\n      </div>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper event listeners for Escape key\n      - Manage body scroll when modal is open\n      - Handle focus restoration on modal close\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/product-card-accessibility.mdc",
    "content": "---\ndescription: Product card accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Product Card Component Accessibility Standards\n\nEnsures product card components follow WCAG compliance and implement proper single tab-stop navigation for keyboard and screen reader users.\n\n<rule>\nname: product_card_accessibility_standards\ndescription: Enforce product card component accessibility standards and single tab-stop navigation compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Product card missing article wrapper\n      - pattern: \"(?i)<(div|section)[^>]*(?:product.*card|card.*product)[^>]*>\"\n        pattern_negate: \"<article\"\n        message: \"Product cards should be wrapped with the article element for semantic structure.\"\n\n      # Product card missing proper link structure\n      - pattern: \"(?i)<article[^>]*(?:product.*card|card.*product)[^>]*>\"\n        pattern_negate: \"<a[^>]*>.*?</a>\"\n        message: \"Product cards must contain a link element for keyboard navigation and screen reader accessibility.\"\n\n      # Product title not wrapped in link\n      - pattern: \"(?i)<(h1|h2|h3|h4|h5|h6)[^>]*(?:product.*title|title.*product)[^>]*>\"\n        pattern_negate: \"<a[^>]*>.*?</a>\"\n        message: \"Product titles should be wrapped in link elements to provide proper navigation context.\"\n\n      # Heading not wrapping link element\n      - pattern: \"(?i)<(h1|h2|h3|h4|h5|h6)[^>]*(?:product.*title|title.*product)[^>]*>\"\n        pattern_negate: \"<a[^>]*>\"\n        message: \"Product card headings should wrap link elements to maintain proper heading semantics.\"\n\n      # Missing product image alt text\n      - pattern: \"(?i)<img[^>]*(?:product|card)[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]+\\\"\"\n        message: \"Product card images must have descriptive alt text for screen reader users.\"\n\n      # Empty alt text on product images\n      - pattern: \"(?i)<img[^>]*(?:product|card)[^>]*alt=\\\"\\\"[^>]*>\"\n        message: \"Product card images should not have empty alt text; provide descriptive text or use alt=\\\"\\\" only for decorative images.\"\n\n      # Product price missing proper semantic structure\n      - pattern: \"(?i)<(div|span)[^>]*(?:price|cost)[^>]*>\"\n        pattern_negate: \"(<span[^>]*aria-label|aria-label=\\\"[^\\\"]*price[^\\\"]*\\\")\"\n        message: \"Product prices should have proper semantic labeling for screen readers.\"\n\n      # Product description not in paragraph element\n      - pattern: \"(?i)<(div|span)[^>]*(?:product.*description|description.*product)[^>]*>\"\n        pattern_negate: \"<p\"\n        message: \"Product descriptions should be wrapped in paragraph elements for proper semantic structure.\"\n\n      # Missing focus indicators\n      - pattern: \"(?i)<a[^>]*(?:product.*card|card.*product)[^>]*>\"\n        pattern_negate: \"(focus|hover|active)\"\n        message: \"Product card links should have visible focus indicators for keyboard navigation.\"\n\n      # Product card without proper positioning context\n      - pattern: \"(?i)<article[^>]*(?:product.*card|card.*product)[^>]*>\"\n        pattern_negate: \"(position.*relative|position: relative)\"\n        message: \"Product card containers should have position: relative for proper link overlay positioning.\"\n\n      # Product card missing aria-labelledby\n      - pattern: \"(?i)<article[^>]*(?:product.*card|card.*product)[^>]*>\"\n        pattern_negate: \"aria-labelledby=\\\"[^\\\"]+\\\"\"\n        message: \"Product card articles should have aria-labelledby referencing the heading ID for better screen reader context.\"\n\n      # Product card heading missing ID\n      - pattern: \"(?i)<(h1|h2|h3|h4|h5|h6)[^>]*(?:product.*title|title.*product)[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Product card headings should have unique ID attributes for aria-labelledby reference.\"\n\n      # Mouse-only link missing tabindex=\"-1\"\n      - pattern: \"(?i)<a[^>]*class=\\\"[^\\\"]*product-link-mouse[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"tabindex=\\\"-1\\\"\"\n        message: \"Mouse-only product links should have tabindex='-1' to remove them from tab order.\"\n\n  - type: suggest\n    message: |\n      **Product Card Component Accessibility Best Practices:**\n\n      **Required Structure:**\n      - **article element:** Wrap each product card with the article element for semantic meaning\n      - **Single tab-stop:** Each product card should contain only one keyboard tab-stop\n      - **Link overlay:** Use absolutely positioned link that covers the entire card area\n      - **Heading wraps link:** The heading should wrap the link element to maintain proper heading semantics\n\n      **ARIA and Semantic Requirements:**\n      - **article role:** Implicit with article element, provides semantic structure\n      - **aria-labelledby:** Reference to the heading ID for article labeling\n      - **Heading ID:** Unique ID attribute for aria-labelledby reference\n      - **Link text:** Product title should be descriptive and unique\n      - **Image alt text:** Provide descriptive alt text for product images\n      - **Price text:** Use visible text for pricing information\n      - **Description text:** Use paragraph elements for product descriptions\n\n      **Keyboard Navigation Requirements:**\n      - **Single tab-stop:** Each product card should be navigable with one tab key press\n      - **Enter key:** Activate the link to navigate to product detail page\n      - **Focus indicators:** Provide clear visual focus indicators for keyboard users\n      - **Logical order:** Ensure tab order follows visual layout\n      - **Mouse-only links:** Use tabindex=\"-1\" to remove mouse-only links from tab order\n\n      **CSS Positioning Requirements:**\n      - **position: relative:** Set on card container for absolute positioning context\n      - **position: absolute:** Set on link element to cover card area\n      - **z-index:** Ensure link appears above other card content\n      - **pointer-events:** May need to manage pointer events for interactive elements\n\n      **Implementation Patterns:**\n\n      **Basic Product Card Structure:**\n      ```html\n      <article class=\"product-card\" aria-labelledby=\"product-123-title\">\n        <a href=\"/product/123\" class=\"product-link-mouse\" aria-hidden=\"true\" tabindex=\"-1\"></a>\n        <h2 id=\"product-123-title\" class=\"product-title\">\n          <a href=\"/product/123\" class=\"product-link\">Product Name</a>\n        </h2>\n        <img src=\"product-image.jpg\" alt=\"Product description\" class=\"product-image\">\n        <div class=\"product-price\">$29.99</div>\n        <p class=\"product-description\">Product description text...</p>\n      </article>\n      ```\n\n      **CSS for Visual Layout:**\n      ```css\n      .product-card {\n        position: relative;\n        display: flex;\n        flex-direction: column;\n      }\n\n      .product-title {\n        order: 2; /* Move heading after image visually */\n        margin: 0;\n        padding: 16px;\n      }\n\n      .product-image {\n        order: 1; /* Move image before heading visually */\n        width: 100%;\n        height: 200px;\n        object-fit: cover;\n      }\n      ```\n\n      **CSS for Link Overlay:**\n      ```css\n      .product-card {\n        position: relative;\n        /* Other card styling */\n      }\n\n      .product-link {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 1;\n        text-decoration: none;\n        /* Ensure link text is visible */\n        color: inherit;\n      }\n\n      .product-title {\n        /* Style the title within the link */\n        margin: 0;\n        padding: 1rem;\n      }\n      ```\n\n      **Advanced Product Card with Interactive Elements:**\n      ```html\n      <article class=\"product-card\" aria-labelledby=\"product-123-title\">\n        <a href=\"/product/123\" class=\"product-link-mouse\" aria-hidden=\"true\" tabindex=\"-1\"></a>\n        <h2 id=\"product-123-title\" class=\"product-title\">\n          <a href=\"/product/123\" class=\"product-link\">Product Name</a>\n        </h2>\n        <img src=\"product-image.jpg\" alt=\"Product description\" class=\"product-image\">\n        <div class=\"product-price\">$29.99</div>\n        <button class=\"add-to-cart\">Add to Cart</button>\n      </article>\n      ```\n\n      **CSS for Advanced Layout:**\n      ```css\n      .product-card {\n        position: relative;\n        display: flex;\n        flex-direction: column;\n      }\n\n      .product-title {\n        order: 2; /* Heading appears after image visually */\n        margin: 0;\n        padding: 16px;\n      }\n\n      .product-image {\n        order: 1; /* Image appears before heading visually */\n        width: 100%;\n        height: 200px;\n        object-fit: cover;\n      }\n\n      .product-content {\n        order: 3; /* Content appears after heading */\n        padding: 0 16px 16px;\n        position: relative;\n      }\n      ```\n\n      **CSS for Interactive Elements:**\n      ```css\n      .product-card {\n        position: relative;\n      }\n\n      .product-link {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 1;\n        /* Allow clicks to pass through to buttons */\n        pointer-events: none;\n      }\n\n      .product-title {\n        pointer-events: auto;\n      }\n\n      .add-to-cart {\n        position: relative;\n        z-index: 2;\n        /* Ensure button is above link overlay */\n      }\n      ```\n\n      **JavaScript Considerations:**\n      - Ensure proper event handling for interactive elements within cards\n      - Manage pointer events appropriately for overlay links\n      - Test keyboard navigation flow with screen readers\n      - Verify that screen readers can access all card content\n      - Consider implementing skip links for large product grids\n\n      **Accessibility Notes:**\n      - Screen readers will announce the link text (product title) when focusing\n      - Other card content remains discoverable through normal screen reader navigation\n      - The article element provides semantic structure for screen readers\n      - Ensure sufficient color contrast for all text elements\n      - Test with various screen reader and browser combinations\n      - Consider implementing skip links for large product grids (10+ items)\n\n      **Testing Requirements:**\n      - Navigate using Tab key only - each card should be one tab-stop\n      - Use screen reader to verify all content is accessible\n      - Test with keyboard-only navigation\n      - Verify focus indicators are visible and clear\n      - Test with high contrast mode enabled\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/product-filter-accessibility.mdc",
    "content": "---\ndescription: Product filter component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n\n# Product Filter Component Accessibility Standards\n\nEnsures product filter components follow WCAG compliance and WAI-ARIA Disclosure Pattern specifications, including sort controls and grid layout buttons.\n\n<rule>\nname: product_filter_accessibility_standards\ndescription: Enforce product filter component accessibility standards and WAI-ARIA Disclosure Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Filter disclosure button role requirement (for non-button elements)\n      - pattern: \"(?i)<(div|span)[^>]*(?:filter|disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"role=\\\"button\\\"\"\n        message: \"Non-button filter disclosure controls must have role='button'. Native button elements have implicit role and don't need explicit role attribute.\"\n\n      # Filter disclosure aria-expanded requirement\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:filter|disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Filter disclosure controls must have aria-expanded attribute set to 'true' or 'false'.\"\n\n      # Filter disclosure missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:filter|disclosure|expand|collapse)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Filter disclosure controls should handle keyboard events (Enter, Space, and Escape).\"\n\n      # Missing Escape key support for filter content\n      - pattern: \"(?i)<div[^>]*(?:filter.*content|content.*filter)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Filter content areas should handle Escape key to close filter and return focus to launcher.\"\n\n      # Filter disclosure content not a sibling\n      - pattern: \"(?i)<[^>]*role=\\\"button\\\"[^>]*(?:filter|disclosure)[^>]*>\"\n        pattern_negate: \"<(div|section)[^>]*id=\\\"[^\\\"]+\\\"[^>]*>\"\n        message: \"Filter disclosure content must be a sibling to the disclosure control in the DOM.\"\n\n      # Grid layout buttons missing aria-current\n      - pattern: \"(?i)<(button|div|span)[^>]*(?:grid|layout|view)[^>]*>\"\n        pattern_negate: \"aria-current=\\\"(true|false)\\\"\"\n        message: \"Grid layout buttons must have aria-current attribute set to 'true' or 'false'.\"\n\n      # Sort filter missing proper labeling\n      - pattern: \"(?i)<(button|div|span)[^>]*(?:sort|order)[^>]*>\"\n        pattern_negate: \"(aria-label|aria-labelledby)\"\n        message: \"Sort filter controls should have proper labeling for screen reader context.\"\n\n      # Sort filter using checkboxes instead of radio buttons\n      - pattern: \"(?i)<input[^>]*type=\\\"checkbox\\\"[^>]*(?:sort|order)[^>]*>\"\n        message: \"Sort filter options should use radio buttons since only one option can be selected at a time.\"\n\n      # Checkbox groups missing fieldset\n      - pattern: \"(?i)<input[^>]*type=\\\"checkbox\\\"[^>]*(?:filter|option)[^>]*>\"\n        pattern_negate: \"<fieldset\"\n        message: \"Filter checkbox groups should be wrapped in fieldset elements for proper grouping.\"\n\n      # Fieldset missing legend\n      - pattern: \"(?i)<fieldset[^>]*(?:filter|option)[^>]*>\"\n        pattern_negate: \"<legend\"\n        message: \"Filter fieldsets must have legend elements to provide context for the group.\"\n\n      # Filter options missing proper IDs\n      - pattern: \"(?i)<input[^>]*type=\\\"checkbox\\\"[^>]*(?:filter|option)[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Filter checkboxes should have unique ID attributes for proper labeling.\"\n\n      # Missing product count live region\n      - pattern: \"(?i)<[^>]*(?:product.*count|count.*product)[^>]*>\"\n        pattern_negate: \"role=\\\"status\\\"\"\n        message: \"Product count displays should use role='status' for screen reader announcements.\"\n\n\n\n      # Missing main products heading\n      - pattern: \"(?i)<[^>]*(?:product.*filter|filter.*product)[^>]*>\"\n        pattern_negate: \"<h1[^>]*>.*[Pp]roducts?[^<]*</h1>\"\n        message: \"Product filter pages should have an h1 heading with 'Products' for proper page structure.\"\n\n  - type: suggest\n    message: |\n      **Product Filter Component Accessibility Best Practices:**\n\n      **Page Structure Requirements:**\n      - Use `<h1>` for the main \"Products\" heading\n      - Wrap filter controls and product count in a `<div class=\"products-header\">`\n      - Remove separate section headings for filters and product cards\n      - Present filters, count, and products as one cohesive section\n\n      **Product Count Live Region:**\n      - Add product count display with `role=\"status\"`\n      - Use unique ID for the count text element (e.g., `id=\"product-count-text\"`)\n      - Update count dynamically as filters are applied/removed\n      - Ensure count is announced to screen readers when it changes\n\n      **Required ARIA Attributes:**\n      - **role='button':** Only required for non-button elements (native button elements have implicit role)\n      - **aria-expanded:** 'true' if filter content is visible, 'false' if hidden\n      - **aria-controls:** Reference to the ID of the associated filter content\n      - **aria-current:** Set on grid layout buttons ('true' for active, 'false' for inactive)\n      - **aria-label/aria-labelledby:** Provide context for sort controls\n\n      **DOM Structure Requirements:**\n      - Filter disclosure content MUST be a sibling to the disclosure control\n      - Checkbox groups should be wrapped in fieldset with legend\n      - Grid layout buttons should be grouped together\n      - Maintain logical reading order in the DOM\n\n      **Keyboard Interaction Requirements:**\n      - **Enter/Space:** Toggle filter disclosure content visibility\n      - **Tab:** Navigate through filter controls and options\n      - **Arrow keys:** Navigate within checkbox groups\n      - **Escape:** Close open filter disclosures and return focus to launcher button\n\n      **Implementation Patterns:**\n\n            **Complete Page Structure:**\n      ```html\n      <h1>Products</h1>\n\n      <div class=\"products-header\">\n        <form action=\"/products/filter\" method=\"get\" id=\"product-filters-form\">\n          <div class=\"filter-section\">\n            <!-- Filter groups here -->\n          </div>\n        </form>\n\n        <div role=\"status\" class=\"product-count\">\n          <span id=\"product-count-text\">3 products</span>\n        </div>\n      </div>\n\n      <div class=\"product-grid\" id=\"product-grid\">\n        <!-- Product cards here -->\n      </div>\n      ```\n\n      **Basic Filter Disclosure:**\n      ```html\n      <form action=\"/products/filter\" method=\"get\" id=\"product-filters-form\">\n        <div class=\"filter-group\">\n          <button type=\"button\"\n                  aria-expanded=\"false\"\n                  aria-controls=\"size-filter-content\">\n            Size Filter\n          </button>\n          <div id=\"size-filter-content\" hidden>\n            <fieldset>\n              <legend>Select sizes</legend>\n              <label for=\"size-s\">\n                <input type=\"checkbox\" id=\"size-s\" name=\"size\" value=\"s\">\n                Small\n              </label>\n              <label for=\"size-m\">\n                <input type=\"checkbox\" id=\"size-m\" name=\"size\" value=\"m\">\n                Medium\n              </label>\n              <label for=\"size-l\">\n                <input type=\"checkbox\" id=\"size-l\" name=\"size\" value=\"l\">\n                Large\n              </label>\n            </fieldset>\n          </div>\n        </div>\n      </form>\n      ```\n\n      **Sort Filter with Disclosure:**\n      ```html\n      <form action=\"/products/filter\" method=\"get\" id=\"product-filters-form\">\n        <div class=\"sort-filter\">\n          <button type=\"button\"\n                  aria-expanded=\"false\"\n                  aria-controls=\"sort-options-content\">\n            Sort by\n          </button>\n          <div id=\"sort-options-content\" hidden>\n            <fieldset>\n              <legend>Sort options</legend>\n              <label for=\"sort-featured\">\n                <input type=\"radio\" id=\"sort-featured\" name=\"sort\" value=\"featured\">\n                Featured\n              </label>\n              <label for=\"sort-date-newest\">\n                <input type=\"radio\" id=\"sort-date-newest\" name=\"sort\" value=\"date-newest\">\n                Date (Newest to Oldest)\n              </label>\n              <label for=\"sort-date-oldest\">\n                <input type=\"radio\" id=\"sort-date-oldest\" name=\"sort\" value=\"date-oldest\">\n                Date (Oldest to Newest)\n              </label>\n              <label for=\"sort-alphabetical-az\">\n                <input type=\"radio\" id=\"sort-alphabetical-az\" name=\"sort\" value=\"alphabetical-az\">\n                Alphabetical (A-Z)\n              </label>\n              <label for=\"sort-alphabetical-za\">\n                <input type=\"radio\" id=\"sort-alphabetical-za\" name=\"sort\" value=\"alphabetical-za\">\n                Alphabetical (Z-A)\n              </label>\n            </fieldset>\n          </div>\n        </div>\n      </form>\n      ```\n\n      **Grid Layout Controls:**\n      ```html\n      <div class=\"layout-controls\">\n        <button type=\"button\"\n                aria-current=\"true\"\n                aria-label=\"Grid layout\"\n                onclick=\"setLayout('grid')\">\n          <span class=\"sr-only\">Grid layout</span>\n          <svg><!-- Grid icon --></svg>\n        </button>\n        <button type=\"button\"\n                aria-current=\"false\"\n                aria-label=\"List layout\"\n                onclick=\"setLayout('list')\">\n          <span class=\"sr-only\">List layout</span>\n          <svg><!-- List icon --></svg>\n        </button>\n      </div>\n      ```\n\n      **JavaScript for Grid Layout:**\n      ```javascript\n      function setLayout(layout) {\n        const buttons = document.querySelectorAll('[aria-label*=\"layout\"]');\n\n        buttons.forEach(button => {\n          if (button.getAttribute('aria-label').includes(layout)) {\n            button.setAttribute('aria-current', 'true');\n          } else {\n            button.setAttribute('aria-current', 'false');\n          }\n        });\n\n        // Update visual layout\n        updateProductLayout(layout);\n      }\n      ```\n\n      **JavaScript for Filter Toggle with Escape Support:**\n      ```javascript\n      function toggleFilter(button) {\n        const isExpanded = button.getAttribute('aria-expanded') === 'true';\n        const content = document.getElementById(button.getAttribute('aria-controls'));\n\n        button.setAttribute('aria-expanded', !isExpanded);\n        content.hidden = isExpanded;\n\n        if (!isExpanded) {\n          // Add escape key listener to content\n          content.addEventListener('keydown', handleEscapeKey);\n        } else {\n          // Remove escape key listener\n          content.removeEventListener('keydown', handleEscapeKey);\n        }\n      }\n\n      function handleEscapeKey(event) {\n        if (event.key === 'Escape') {\n          const content = event.target.closest('[hidden]');\n          if (content) {\n            const button = document.querySelector(`[aria-controls=\"${content.id}\"]`);\n            if (button) {\n              button.setAttribute('aria-expanded', 'false');\n              content.hidden = true;\n              button.focus(); // Return focus to launcher\n              content.removeEventListener('keydown', handleEscapeKey);\n            }\n          }\n        }\n      }\n\n      // Update product count\n      function updateProductCount() {\n        const visibleProducts = document.querySelectorAll('.product-card:not([hidden])');\n        const count = visibleProducts.length;\n        const countText = document.getElementById('product-count-text');\n        countText.textContent = `${count} product${count !== 1 ? 's' : ''}`;\n      }\n\n      // Initialize product count on page load\n      document.addEventListener('DOMContentLoaded', function() {\n        updateProductCount();\n      });\n      ```\n\n      **Complete Filter Implementation:**\n      ```html\n      <h1>Products</h1>\n\n      <div class=\"products-header\">\n        <form action=\"/products/filter\" method=\"get\" id=\"product-filters-form\">\n          <div class=\"filter-section\">\n            <!-- Size Filter -->\n            <div class=\"filter-group\">\n              <button type=\"button\"\n                      aria-expanded=\"false\"\n                      aria-controls=\"size-filter-content\">\n                Size\n              </button>\n              <div id=\"size-filter-content\" hidden>\n                <fieldset>\n                  <legend>Select sizes</legend>\n                  <label for=\"size-s\">\n                    <input type=\"checkbox\" id=\"size-s\" name=\"size\" value=\"s\">\n                    Small\n                  </label>\n                  <label for=\"size-m\">\n                    <input type=\"checkbox\" id=\"size-m\" name=\"size\" value=\"m\">\n                    Medium\n                  </label>\n                  <label for=\"size-l\">\n                    <input type=\"checkbox\" id=\"size-l\" name=\"size\" value=\"l\">\n                    Large\n                  </label>\n                </fieldset>\n              </div>\n            </div>\n\n            <!-- Color Filter -->\n            <div class=\"filter-group\">\n              <button type=\"button\"\n                      aria-expanded=\"false\"\n                      aria-controls=\"color-filter-content\">\n                Color\n              </button>\n              <div id=\"color-filter-content\" hidden>\n                <fieldset>\n                  <legend>Select colors</legend>\n                  <label for=\"color-red\">\n                    <input type=\"checkbox\" id=\"color-red\" name=\"color\" value=\"red\">\n                    Red\n                  </label>\n                  <label for=\"color-blue\">\n                    <input type=\"checkbox\" id=\"color-blue\" name=\"color\" value=\"blue\">\n                    Blue\n                  </label>\n                  <label for=\"color-green\">\n                    <input type=\"checkbox\" id=\"color-green\" name=\"color\" value=\"green\">\n                    Green\n                  </label>\n                </fieldset>\n              </div>\n            </div>\n\n            <!-- Sort Filter -->\n            <div class=\"sort-filter\">\n              <button type=\"button\"\n                      aria-expanded=\"false\"\n                      aria-controls=\"sort-options-content\">\n                Sort by\n              </button>\n              <div id=\"sort-options-content\" hidden>\n                <fieldset>\n                  <legend>Sort options</legend>\n                  <label for=\"sort-featured\">\n                    <input type=\"radio\" id=\"sort-featured\" name=\"sort\" value=\"featured\">\n                    Featured\n                  </label>\n                  <label for=\"sort-date\">\n                    <input type=\"radio\" id=\"sort-date\" name=\"sort\" value=\"date\">\n                    Date\n                  </label>\n                  <label for=\"sort-alphabetical\">\n                    <input type=\"radio\" id=\"sort-alphabetical\" name=\"sort\" value=\"alphabetical\">\n                    Alphabetical\n                  </label>\n                </fieldset>\n              </div>\n            </div>\n\n            <!-- Layout Controls -->\n            <div class=\"layout-controls\">\n              <button type=\"button\"\n                      aria-current=\"true\"\n                      aria-label=\"Grid layout\"\n                      onclick=\"setLayout('grid')\">\n                <span class=\"sr-only\">Grid layout</span>\n                <svg><!-- Grid icon --></svg>\n              </button>\n              <button type=\"button\"\n                      aria-current=\"false\"\n                      aria-label=\"List layout\"\n                      onclick=\"setLayout('list')\">\n                <span class=\"sr-only\">List layout</span>\n                <svg><!-- List icon --></svg>\n              </button>\n            </div>\n          </div>\n        </form>\n\n        <div role=\"status\" class=\"product-count\">\n          <span id=\"product-count-text\">3 products</span>\n        </div>\n      </div>\n\n      <div class=\"product-grid\" id=\"product-grid\">\n        <!-- Product cards here -->\n      </div>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement Enter and Space key handlers for disclosure toggles\n      - Update aria-expanded state when filter content toggles\n      - Manage aria-current state for layout buttons\n      - Handle filter state changes and update product display\n      - Implement proper focus management when filters open/close\n      - Consider implementing live regions for dynamic content updates\n\n      **Accessibility Notes:**\n      - Filter content MUST be a sibling to the control in the DOM\n      - Use fieldset and legend for checkbox/radio groups\n      - Provide clear labels for all filter controls\n      - Test with screen readers to ensure proper announcement\n      - Consider adding aria-live regions for dynamic filter results\n      - Maintain proper focus management when filters toggle\n      - Ensure grid layout buttons have clear visual and screen reader indicators\n\n      **Testing Requirements:**\n      - Test keyboard navigation through all filter controls\n      - Verify disclosure content opens/closes with keyboard\n      - Test screen reader announcement of filter states\n      - Verify aria-current updates correctly on layout changes\n      - Test focus management when filters open/close\n      - Ensure filter results update properly with screen readers\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/product-media-gallery-accessibility.mdc",
    "content": "---\ndescription: Enforce product media gallery component accessibility standards and proper landmark structure for media galleries\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n\n# Product Media Gallery Component Accessibility Standards\n\nEnsures product media gallery components follow WCAG compliance and provide proper accessibility for image, video, and 3D model galleries with screen reader support and keyboard navigation.\n\n<rule>\nname: product_media_gallery_accessibility_standards\ndescription: Enforce product media gallery component accessibility standards and proper landmark structure for media galleries\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Missing gallery container landmark role\n      - pattern: \"(?i)<(div|section)[^>]*(?:gallery|media.*gallery|product.*gallery)[^>]*>\"\n        pattern_negate: \"role=\\\"region\\\"\"\n        message: \"Product media gallery containers must have role='region' to provide proper landmark structure.\"\n\n      # Missing gallery landmark aria-labelledby\n      - pattern: \"(?i)<[^>]*role=\\\"region\\\"[^>]*(?:gallery|media.*gallery|product.*gallery)[^>]*>\"\n        pattern_negate: \"aria-labelledby=\\\"[^\\\"]+\\\"\"\n        message: \"Gallery region must have aria-labelledby referencing a heading element for proper screen reader identification.\"\n\n      # Missing gallery landmark heading\n      - pattern: \"(?i)<[^>]*role=\\\"region\\\"[^>]*(?:gallery|media.*gallery|product.*gallery)[^>]*>\"\n        pattern_negate: \"<h[1-6][^>]*id=\\\"[^\\\"]+\\\"[^>]*>\"\n        message: \"Gallery region must contain a heading element with unique ID for aria-labelledby reference.\"\n\n      # Missing gallery viewer container\n      - pattern: \"(?i)<[^>]*role=\\\"region\\\"[^>]*(?:gallery|media.*gallery|product.*gallery)[^>]*>\"\n        pattern_negate: \"<(div|section)[^>]*(?:viewer|display|main.*image)[^>]*>\"\n        message: \"Gallery region must contain a gallery viewer container for displaying selected media.\"\n\n      # Gallery viewer missing proper image alt text\n      - pattern: \"(?i)<img[^>]*(?:gallery|viewer|main.*image)[^>]*>\"\n        pattern_negate: \"alt=\\\"[^\\\"]+\\\"\"\n        message: \"Gallery viewer images must have descriptive alt text via alt attribute for screen reader accessibility.\"\n\n      # Hidden media not properly hidden from assistive technology\n      - pattern: \"(?i)<(img|video|iframe)[^>]*(?:gallery|media)[^>]*>\"\n        pattern_negate: \"(hidden|aria-hidden=\\\"true\\\"|display.*none|visibility.*hidden)\"\n        message: \"Hidden media items must use hidden attribute to remove them from both visual and assistive technology access.\"\n\n      # Thumbnail buttons missing button element structure\n      - pattern: \"(?i)<(div|span)[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"(<button|role=\\\"button\\\")\"\n        message: \"Thumbnail media selectors must use button elements or have role='button' for proper keyboard accessibility.\"\n\n      # Thumbnail buttons missing descriptive aria-label\n      - pattern: \"(?i)<button[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*[Ll]oad[^\\\"]*[Mm]edia[^\\\"]*[Gg]allery[^\\\"]*[Vv]iewer[^\\\"]*\\\"\"\n        message: \"Thumbnail buttons must have descriptive aria-label like 'Load media 1 into gallery viewer' for screen reader context.\"\n\n      # Missing aria-current on active thumbnail\n      - pattern: \"(?i)<button[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"aria-current=\\\"(true|false)\\\"\"\n        message: \"Thumbnail buttons must have aria-current attribute to indicate which media is currently loaded in the viewer.\"\n\n      # Missing aria-describedby on thumbnail buttons\n      - pattern: \"(?i)<button[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"aria-describedby=\\\"[^\\\"]+\\\"\"\n        message: \"Thumbnail buttons must have aria-describedby referencing the underlying media ID for alt text context.\"\n\n      # Missing aria-controls on thumbnail buttons\n      - pattern: \"(?i)<button[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n        message: \"Thumbnail buttons must have aria-controls referencing the gallery viewer container ID.\"\n\n      # Missing live region for media loading announcements\n      - pattern: \"(?i)<(div|section)[^>]*(?:gallery|media.*gallery|product.*gallery)[^>]*>\"\n        pattern_negate: \"role=\\\"status\\\"\"\n        message: \"Gallery must include a live region with role='status' for announcing media loading completion to screen readers.\"\n\n      # Live region with unnecessary aria-hidden attribute\n      - pattern: \"(?i)<[^>]*role=\\\"status\\\"[^>]*(?:gallery|media)[^>]*aria-hidden=\\\"true\\\"[^>]*>\"\n        message: \"Gallery live region should not use aria-hidden='true' when content is dynamically managed through JavaScript.\"\n\n      # Live region with redundant aria-live attribute\n      - pattern: \"(?i)<[^>]*role=\\\"status\\\"[^>]*aria-live=\\\"[^\\\"]*\\\"[^>]*>\"\n        message: \"Live regions with role='status' should not include aria-live attribute as it's redundant and unnecessary.\"\n\n      # Live region with unnecessary aria-hidden attribute\n      - pattern: \"(?i)<[^>]*role=\\\"status\\\"[^>]*aria-hidden=\\\"true\\\"[^>]*>\"\n        message: \"Live regions with role='status' should not use aria-hidden='true' when content is dynamically managed through JavaScript.\"\n\n      # Missing list structure for thumbnail grid layout\n      - pattern: \"(?i)<(div|section)[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"(<ul|<ol|<li)\"\n        message: \"Desktop thumbnail layouts should use list structure (ul/ol/li) to convey the number of available media items.\"\n\n      # Mobile slider missing navigation controls\n      - pattern: \"(?i)<(div|section)[^>]*(?:mobile.*slider|slider.*mobile|thumbnail.*slider)[^>]*>\"\n        pattern_negate: \"(previous|next|arrow|navigation)\"\n        message: \"Mobile thumbnail sliders must include previous/next navigation controls for accessing hidden thumbnails.\"\n\n      # Mobile slider missing proper hiding of off-screen content\n      - pattern: \"(?i)<(div|section)[^>]*(?:mobile.*slider|slider.*mobile|thumbnail.*slider)[^>]*>\"\n        pattern_negate: \"(hidden|aria-hidden=\\\"true\\\"|display.*none)\"\n        message: \"Mobile slider content not currently visible must be hidden from both visual and assistive technology access.\"\n\n      # Zoom button missing proper labeling\n      - pattern: \"(?i)<button[^>]*(?:zoom|expand|enlarge)[^>]*(?:gallery|viewer)[^>]*>\"\n        pattern_negate: \"aria-label=\\\"[^\\\"]*[Zz]oom[^\\\"]*[Ii]mage[^\\\"]*\\\"\"\n        message: \"Gallery zoom buttons must have aria-label='Zoom image' for proper screen reader identification.\"\n\n      # Zoom button missing modal functionality\n      - pattern: \"(?i)<button[^>]*(?:zoom|expand|enlarge)[^>]*(?:gallery|viewer)[^>]*>\"\n        pattern_negate: \"(onClick|onclick|@click|v-on:click|role=\\\"button\\\")\"\n        message: \"Gallery zoom buttons must have proper click handlers to launch modal windows for expanded viewing.\"\n\n      # Zoom button missing aria-haspopup\n      - pattern: \"(?i)<button[^>]*(?:zoom|expand|enlarge)[^>]*(?:gallery|viewer)[^>]*>\"\n        pattern_negate: \"aria-haspopup=\\\"dialog\\\"\"\n        message: \"Gallery zoom buttons must have aria-haspopup='dialog' to indicate they open a dialog popup.\"\n\n      # Missing focus management for media changes\n      - pattern: \"(?i)<button[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"(onClick|onclick|@click|v-on:click)\"\n        message: \"Thumbnail buttons must have click handlers to load media into the gallery viewer and manage focus appropriately.\"\n\n      # Missing focus restoration on modal close\n      - pattern: \"(?i)<button[^>]*(?:close|dismiss)[^>]*(?:modal|dialog)[^>]*>\"\n        pattern_negate: \"(onClick|onclick|@click|v-on:click)\"\n        message: \"Modal close buttons should have proper click handlers to close the dialog and restore focus to the activator.\"\n\n      # Gallery viewer missing proper ID for aria-controls reference\n      - pattern: \"(?i)<(div|section)[^>]*(?:viewer|display|main.*image)[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Gallery viewer container must have unique ID for aria-controls reference from thumbnail buttons.\"\n\n      # Thumbnail media missing proper ID for aria-describedby reference\n      - pattern: \"(?i)<(img|video|iframe)[^>]*(?:thumbnail|thumb)[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Thumbnail media items must have unique IDs for aria-describedby reference from thumbnail buttons.\"\n\n  - type: suggest\n    message: |\n      **Product Media Gallery Component Accessibility Best Practices:**\n\n      **1. Gallery Container Structure:**\n      ```html\n      <!-- Gallery region landmark -->\n      <div role=\"region\" aria-labelledby=\"gallery-heading\" class=\"product-gallery\">\n        <h2 id=\"gallery-heading\" class=\"visually-hidden\">Gallery Viewer</h2>\n        <!-- Gallery viewer for main media display -->\n        <div id=\"gallery-viewer\" class=\"gallery-viewer\">\n          <img src=\"product-1.jpg\"\n               alt=\"Product front view showing design details\"\n               class=\"main-image\">\n\n          <!-- Optional zoom button -->\n          <button type=\"button\"\n                  class=\"zoom-button\"\n                  aria-label=\"Zoom image\"\n                  aria-haspopup=\"dialog\"\n                  onclick=\"openImageModal()\">\n            <svg aria-hidden=\"true\" width=\"24\" height=\"24\">\n              <!-- Zoom icon -->\n            </svg>\n          </button>\n        </div>\n\n        <!-- Thumbnail navigation -->\n        <div class=\"thumbnail-section\">\n          <ul class=\"thumbnail-list\">\n            <li>\n              <button type=\"button\"\n                      class=\"thumbnail-button\"\n                      aria-label=\"Load media 1 into gallery viewer\"\n                      aria-current=\"true\"\n                      aria-describedby=\"media-1\"\n                      aria-controls=\"gallery-viewer\"\n                      onclick=\"loadMedia(1)\">\n                <img src=\"product-1-thumb.jpg\"\n                     id=\"media-1\"\n                     alt=\"Product front view thumbnail\"\n                     class=\"thumbnail-image\">\n              </button>\n            </li>\n            <li>\n              <button type=\"button\"\n                      class=\"thumbnail-button\"\n                      aria-label=\"Load media 2 into gallery viewer\"\n                      aria-current=\"false\"\n                      aria-describedby=\"media-2\"\n                      aria-controls=\"gallery-viewer\"\n                      onclick=\"loadMedia(2)\">\n                <img src=\"product-2-thumb.jpg\"\n                     id=\"media-2\"\n                     alt=\"Product side view thumbnail\"\n                     class=\"thumbnail-image\">\n              </button>\n            </li>\n          </ul>\n        </div>\n\n        <!-- Live region for announcements -->\n        <div class=\"visually-hidden\"\n             role=\"status\"\n             id=\"gallery-announcement\">\n        </div>\n      </div>\n      ```\n\n      **2. JavaScript Media Loading Function:**\n      ```javascript\n      function loadMedia(mediaIndex) {\n        const galleryViewer = document.getElementById('gallery-viewer');\n        const thumbnailButtons = document.querySelectorAll('.thumbnail-button');\n        const announcement = document.getElementById('gallery-announcement');\n\n        // Update aria-current states\n        thumbnailButtons.forEach((button, index) => {\n          button.setAttribute('aria-current', index === mediaIndex - 1 ? 'true' : 'false');\n        });\n\n        // Load new media into viewer\n        const newMedia = getMediaByIndex(mediaIndex);\n        galleryViewer.innerHTML = `\n          <img src=\"${newMedia.src}\"\n               alt=\"${newMedia.alt}\"\n               class=\"main-image\">\n          <button type=\"button\"\n                  class=\"zoom-button\"\n                  aria-label=\"Zoom image\"\n                  onclick=\"openImageModal()\">\n            <svg aria-hidden=\"true\" width=\"24\" height=\"24\">\n              <!-- Zoom icon -->\n            </svg>\n          </button>\n        `;\n\n        // Announce media change\n        announcement.textContent = `Media ${mediaIndex} is now available in gallery view`;\n\n        // Hide announcement after 3 seconds\n        setTimeout(() => {\n          announcement.textContent = '';\n        }, 3000);\n\n        // Maintain focus on thumbnail button\n        event.target.focus();\n      }\n      ```\n\n      **3. Unified Thumbnail System Implementation:**\n      ```html\n      <!-- Single thumbnail list for both desktop and mobile -->\n      <div class=\"thumbnail-container\">\n        <button type=\"button\"\n                class=\"slider-nav prev\"\n                aria-label=\"Previous thumbnails\"\n                onclick=\"slideThumbnails('prev')\">\n          <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n            <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n          </svg>\n        </button>\n\n        <ul class=\"thumbnail-list\" id=\"thumbnails\">\n          <li>\n            <button type=\"button\"\n                    class=\"thumbnail-button\"\n                    aria-label=\"Load media 1 into gallery viewer\"\n                    aria-current=\"true\"\n                    aria-describedby=\"media-1\"\n                    aria-controls=\"gallery-viewer\"\n                    onclick=\"loadMedia(1)\">\n              <img src=\"product-1-thumb.jpg\"\n                   id=\"media-1\"\n                   alt=\"Product front view thumbnail\"\n                   class=\"thumbnail-image\">\n            </button>\n          </li>\n          <li>\n            <button type=\"button\"\n                    class=\"thumbnail-button\"\n                    aria-label=\"Load media 2 into gallery viewer\"\n                    aria-current=\"false\"\n                    aria-describedby=\"media-2\"\n                    aria-controls=\"gallery-viewer\"\n                    onclick=\"loadMedia(2)\">\n              <img src=\"product-2-thumb.jpg\"\n                   id=\"media-2\"\n                   alt=\"Product side view thumbnail\"\n                   class=\"thumbnail-image\">\n            </button>\n          </li>\n          <!-- Additional thumbnails as needed -->\n        </ul>\n\n        <button type=\"button\"\n                class=\"slider-nav next\"\n                aria-label=\"Next thumbnails\"\n                onclick=\"slideThumbnails('next')\">\n          <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n            <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n          </svg>\n        </button>\n      </div>\n      ```\n\n      **4. CSS for Unified Thumbnail System:**\n      ```css\n      /* Thumbnail container with navigation */\n      .thumbnail-container {\n        position: relative;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 1rem;\n        max-width: 100%;\n      }\n\n      /* Desktop grid layout */\n      .thumbnail-list {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));\n        gap: 12px;\n        list-style: none;\n        margin: 0 auto;\n        padding: 0;\n        flex-wrap: wrap;\n        transition: transform 0.3s ease-in-out;\n        text-align: center;\n      }\n\n      /* Mobile slider layout */\n      @media screen and (max-width: 749px) {\n        .thumbnail-container {\n          overflow: hidden;\n          padding: 0 50px;\n          display: flex;\n          align-items: center;\n          justify-content: center;\n        }\n\n        .thumbnail-list {\n          flex-wrap: nowrap;\n          justify-content: center;\n          gap: 8px;\n          min-width: max-content;\n          transform: translateX(0);\n          position: relative;\n          left: 50%;\n          margin-left: -50%;\n        }\n\n        .slider-nav {\n          display: block;\n          position: absolute;\n          top: 50%;\n          transform: translateY(-50%);\n          z-index: 2;\n        }\n\n        .slider-nav.prev {\n          left: 0;\n        }\n\n        .slider-nav.next {\n          right: 0;\n        }\n      }\n\n      /* Hide navigation on desktop */\n      @media screen and (min-width: 750px) {\n        .slider-nav {\n          display: none;\n        }\n      }\n      ```\n\n      **5. Modal Window Integration:**\n      ```javascript\n      function openImageModal() {\n        const galleryViewer = document.getElementById('gallery-viewer');\n        const currentImage = galleryViewer.querySelector('.main-image');\n        const zoomButton = document.querySelector('.zoom-button');\n\n        // Create modal with current image\n        const modal = document.createElement('div');\n        modal.setAttribute('role', 'dialog');\n        modal.setAttribute('aria-modal', 'true');\n        modal.setAttribute('aria-labelledby', 'modal-title');\n        modal.className = 'image-modal';\n\n        modal.innerHTML = `\n          <div class=\"modal-content\">\n            <button type=\"button\"\n                    class=\"close-button\"\n                    aria-label=\"Close modal\"\n                    onclick=\"closeImageModal()\">\n              &times;\n            </button>\n            <h2 id=\"modal-title\" class=\"visually-hidden\">Product Image</h2>\n            <img src=\"${currentImage.src}\"\n                 alt=\"${currentImage.alt}\"\n                 class=\"modal-image\">\n          </div>\n        `;\n\n        document.body.appendChild(modal);\n\n        // Focus management\n        const closeButton = modal.querySelector('.close-button');\n        closeButton.focus();\n\n        // Trap focus within modal\n        trapFocus(modal);\n      }\n\n      function closeImageModal() {\n        const modal = document.querySelector('.image-modal');\n        if (modal) {\n          // Restore focus to the zoom button\n          const zoomButton = document.querySelector('.zoom-button');\n          if (zoomButton) {\n            zoomButton.focus();\n          }\n          modal.remove();\n        }\n      }\n\n      // Infinite loop thumbnail navigation\n      function slideThumbnails(direction) {\n        const thumbnailList = document.querySelector('#thumbnails');\n        const thumbnails = thumbnailList.querySelectorAll('li');\n        const visibleCount = 3; // Number of visible thumbnails on mobile\n        const thumbnailWidth = 68; // 60px width + 8px gap\n        const currentTransform = getComputedStyle(thumbnailList).transform;\n        const currentX = currentTransform === 'none' ? 0 : parseInt(currentTransform.split(',')[4]) || 0;\n\n        let newX = currentX;\n\n        if (direction === 'next') {\n          newX = currentX - (visibleCount * thumbnailWidth);\n        } else if (direction === 'prev') {\n          newX = currentX + (visibleCount * thumbnailWidth);\n        }\n\n        // Infinite loop - wrap around when reaching the end\n        const totalWidth = thumbnails.length * thumbnailWidth;\n        if (newX <= -totalWidth) {\n          newX = 0;\n        } else if (newX > 0) {\n          newX = -totalWidth + (visibleCount * thumbnailWidth);\n        }\n\n        thumbnailList.style.transform = `translateX(${newX}px)`;\n      }\n      ```\n\n      **6. Accessibility Testing Checklist:**\n      ```javascript\n      function testGalleryAccessibility() {\n        const issues = [];\n\n        // Check landmark structure\n        const galleryRegion = document.querySelector('[role=\"region\"][aria-label*=\"Gallery\"]');\n        if (!galleryRegion) {\n          issues.push('Missing gallery region landmark');\n        }\n\n        // Check thumbnail button accessibility\n        const thumbnailButtons = document.querySelectorAll('.thumbnail-button');\n        thumbnailButtons.forEach((button, index) => {\n          if (!button.getAttribute('aria-label')) {\n            issues.push(`Thumbnail button ${index + 1} missing aria-label`);\n          }\n          if (!button.getAttribute('aria-describedby')) {\n            issues.push(`Thumbnail button ${index + 1} missing aria-describedby`);\n          }\n          if (!button.getAttribute('aria-controls')) {\n            issues.push(`Thumbnail button ${index + 1} missing aria-controls`);\n          }\n        });\n\n        // Check live region\n        const liveRegion = document.querySelector('[role=\"status\"]');\n        if (!liveRegion) {\n          issues.push('Missing live region for announcements');\n        }\n\n        // Check image alt text\n        const images = document.querySelectorAll('img');\n        images.forEach((img, index) => {\n          if (!img.alt) {\n            issues.push(`Image ${index + 1} missing alt text`);\n          }\n        });\n\n        return issues;\n      }\n      ```\n\n      **Gallery Structure Requirements:**\n\n      **Landmark Structure:**\n      - **role=\"region\"**: On gallery container\n      - **aria-labelledby**: References heading ID for gallery identification\n      - **Heading element**: h2-h6 with unique ID for semantic structure\n      - **Proper heading hierarchy**: Use h2-h6 for gallery sections\n\n      **Gallery Viewer:**\n      - **Unique ID**: For aria-controls reference\n      - **Alt text**: Descriptive alt text on main images\n      - **Zoom button**: Properly labeled with aria-label and aria-haspopup=\"dialog\"\n      - **Focus management**: Maintain focus during media changes\n      - **Modal focus restoration**: Return focus to zoom button when modal closes\n\n      **Thumbnail Navigation:**\n      - **Button elements**: Use native button or role=\"button\"\n      - **Descriptive labels**: aria-label with \"Load media X into gallery viewer\"\n      - **State indication**: aria-current=\"true\" for active media\n      - **Context information**: aria-describedby for media alt text\n      - **Control reference**: aria-controls for gallery viewer\n\n      **Live Announcements:**\n      - **role=\"status\"**: For live region functionality (no aria-live needed)\n      - **Dynamic content management**: JavaScript inserts/removes text content\n      - **No aria-hidden**: Content managed through JavaScript, not ARIA attributes\n      - **Timing control**: 3-second display before hiding\n\n      **Mobile Responsiveness:**\n      - **Unified system**: Single thumbnail list for both desktop and mobile\n      - **Infinite loop navigation**: Previous/next controls with seamless wrapping\n      - **Smooth animations**: CSS transitions for thumbnail sliding\n      - **Responsive layout**: Grid on desktop, horizontal slider on mobile\n      - **Touch accessibility**: Proper touch targets and gestures\n\n      **Modal Integration:**\n      - **Zoom functionality**: Button overlaid on gallery viewer\n      - **Modal compliance**: Follow modal accessibility standards\n      - **Focus management**: Proper focus trapping and restoration\n      - **Close controls**: Accessible close button with proper labeling\n\n      **Testing and Validation:**\n      - Test with screen readers (NVDA, JAWS, VoiceOver)\n      - Verify landmark navigation works correctly\n      - Check thumbnail button announcements\n      - Test unified thumbnail system on both desktop and mobile\n      - Validate infinite loop navigation functionality\n      - Test smooth thumbnail sliding animations\n      - Validate modal window accessibility\n      - Ensure focus management works properly\n      - Test with keyboard-only navigation\n      - Verify responsive design across different screen sizes\n      - Test thumbnail center alignment on all devices\n\n      **Common Mistakes to Avoid:**\n      - Missing role=\"region\" on gallery container\n      - Incomplete aria-labelledby on gallery region\n      - Missing heading element with unique ID for aria-labelledby\n      - Missing alt text on gallery images\n      - Thumbnail buttons without proper button semantics\n      - Missing aria-current state management\n      - Incomplete aria-describedby references\n      - Missing aria-controls on thumbnail buttons\n      - Live region not properly managed\n      - Separate thumbnail systems for desktop and mobile (use unified system)\n      - Mobile slider without infinite loop navigation\n      - Zoom button without modal functionality\n      - Missing focus management during media changes\n      - Missing aria-haspopup=\"dialog\" on zoom button\n      - Missing focus restoration when modal closes\n      - Redundant aria-live attribute on role=\"status\" elements\n      - Unnecessary aria-hidden on dynamically managed live regions\n      - Missing smooth animations for thumbnail navigation\n      - Incomplete responsive design implementation\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\ndescription:\nglobs:\nalwaysApply: false\n---\n"
  },
  {
    "path": ".cursor/rules/prompts-and-references.mdc",
    "content": "---\ndescription:\nglobs:\nalwaysApply: true\n---\n# Prompts and References\n\nThe prompts and references directories contain documentation and guides for AI agents to follow when working on various tasks in the Horizon theme.\n\n## Living Documents\n\n**Important**: All files in the `.cursor/prompts/` and `.cursor/references/` folders are living documents. This means:\n\n- They should be updated as new cases are encountered\n- When you discover a useful pattern, edge case, or solution while working on an issue, update the relevant file\n- If something in these files doesn't work as expected, fix it immediately\n- Add examples from real implementation experiences\n- Remove or update outdated information\n\n**CRITICAL ACTION REQUIREMENT**: When you encounter any pattern, issue, or solution while working - immediately update the relevant documentation file WITHOUT being asked. This includes:\n- Code patterns to avoid (like console.log in tests)\n- Better ways to accomplish tasks\n- Edge cases or pitfalls discovered\n- Clarifications for ambiguous instructions\n- New tools or commands that work better\n\nDo not wait for the user to suggest documentation updates. Proactively maintaining these living documents is part of completing any task.\n\n## Purpose\n\nThese documentation files serve as:\n- Step-by-step guides for common tasks\n- Documentation of best practices learned from experience\n- References for handling edge cases and pitfalls\n- Templates for consistent workflows\n\n## Usage\n\nWhen an AI agent is asked to perform a task that has corresponding documentation:\n1. The agent should follow the documented steps\n2. If the steps need adjustment based on the specific situation, the agent should note what changes were needed\n3. **MANDATORY**: Update the documentation immediately with any new learnings, patterns, or pitfalls discovered during the task - do not wait to be asked\n\n## Examples of Living Document Updates\n\n- Adding a new pitfall discovered during implementation\n- Clarifying a step that was ambiguous\n- Adding a reference to a newly created documentation file\n- Updating commands or scripts that have changed\n- Adding examples of good vs bad practices\n"
  },
  {
    "path": ".cursor/rules/sale-price-accessibility.mdc",
    "content": "---\ndescription: Sale price component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Sale Price Component Accessibility Standards\n\nEnsures sale price components follow WCAG compliance and provide proper context for screen reader users.\n\n<rule>\nname: sale_price_accessibility_standards\ndescription: Enforce sale price component accessibility standards and screen reader context compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Sale price missing screen reader context\n      - pattern: \"(?i)<[^>]*(?:sale|discount|price)[^>]*>.*\\\\$[0-9]+.*\\\\$[0-9]+\"\n        pattern_negate: \"(class.*sr-only|class.*visually-hidden)\"\n        message: \"Sale price components must include visually hidden text to explain regular and sale prices.\"\n\n      # Strike-through price missing context\n      - pattern: \"(?i)<[^>]*(?:strike|line-through|text-decoration)[^>]*>.*\\\\$[0-9]+\"\n        pattern_negate: \"(Regular price|Original price|Was|Before)\"\n        message: \"Strike-through prices must include visually hidden context like 'Regular price' or 'Original price'.\"\n\n      # Sale price missing context\n      - pattern: \"(?i)<[^>]*(?:sale|discount|offer)[^>]*>.*\\\\$[0-9]+\"\n        pattern_negate: \"(Sale price|Now|Current price|Discounted price)\"\n        message: \"Sale prices must include visually hidden context like 'Sale price' or 'Now'.\"\n\n      # Missing visually hidden elements for context\n      - pattern: \"(?i)<[^>]*class=\\\"[^\\\"]*(?:sale|price|discount)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(sr-only|visually-hidden|screen-reader-only)\"\n        message: \"Sale price components should include visually hidden elements for screen reader context.\"\n\n      # Unnecessary aria-hidden on visible price content\n      - pattern: \"(?i)<[^>]*class=\\\"[^\\\"]*(?:price|sale|discount)[^\\\"]*\\\"[^>]*aria-hidden=\\\"true\\\"[^>]*>\"\n        message: \"Visible price content should not be hidden from screen readers with aria-hidden. Only decorative elements should use aria-hidden.\"\n\n  - type: suggest\n    message: |\n      **Sale Price Component Accessibility Best Practices:**\n\n      **Required Screen Reader Context:**\n      - **Regular Price:** Must include \"Regular price\" or \"Original price\" context\n      - **Sale Price:** Must include \"Sale price\" or \"Now\" context\n      - **Visual Hiding:** Use visually hidden elements to provide context without affecting visual design\n\n      **Screen Reader Announcement Requirements:**\n      - Regular price should announce: \"Regular price, $X\"\n      - Sale price should announce: \"Sale price, $Y\"\n      - Discount should announce: \"X% OFF\" (visible badge text is sufficient)\n      - Complete announcement: \"Regular price, $45, Sale price, $35, 20% OFF\"\n\n      **Implementation Patterns:**\n\n      **Basic Sale Price Structure:**\n      ```html\n      <div class=\"price-container\">\n        <span class=\"sr-only\">Regular price, </span>\n        <span class=\"regular-price\">$45.00</span>\n        <span class=\"sr-only\">Sale price, </span>\n        <span class=\"sale-price\">$35.00</span>\n        <span class=\"discount-badge\">20% OFF</span>\n      </div>\n      ```\n\n      **CSS for Visually Hidden Elements:**\n      ```css\n      .sr-only {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        padding: 0;\n        margin: -1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n        border: 0;\n      }\n      ```\n\n      **Complex Sale Price Examples:**\n\n      **With Multiple Discounts:**\n      ```html\n      <div class=\"price-container\">\n        <span class=\"sr-only\">Regular price, </span>\n        <span class=\"regular-price\">$100.00</span>\n        <span class=\"sr-only\">Sale price, </span>\n        <span class=\"sale-price\">$75.00</span>\n        <span class=\"discount\">25% OFF</span>\n        <span class=\"sr-only\">Member price, </span>\n        <span class=\"member-price\">$67.50</span>\n        <span class=\"savings-amount\">Extra 10% OFF</span>\n      </div>\n      ```\n\n      **With Currency and Formatting:**\n      ```html\n      <div class=\"price-container\">\n        <span class=\"sr-only\">Regular price, </span>\n        <span class=\"regular-price\">$1,299.99</span>\n        <span class=\"sr-only\">Sale price, </span>\n        <span class=\"sale-price\">$999.99</span>\n        <span class=\"savings-amount\">Save $300</span>\n      </div>\n      ```\n\n      **Button Implementation:**\n      ```html\n      <!-- Good: Natural button text -->\n      <button class=\"add-to-cart-btn\">\n        Add to Cart\n      </button>\n      ```\n\n      **JavaScript Considerations:**\n      - Dynamically update visually hidden context when prices change\n      - Calculate and update discount percentages automatically\n      - Handle currency formatting for different locales\n      - Ensure context is updated when prices are updated via AJAX\n\n      **Dynamic Price Updates:**\n      ```javascript\n      function updateSalePrice(regularPrice, salePrice) {\n        const regularElement = document.querySelector('.regular-price');\n        const saleElement = document.querySelector('.sale-price');\n        const discountElement = document.querySelector('.discount');\n\n        // Calculate discount percentage\n        const discount = Math.round(((regularPrice - salePrice) / regularPrice) * 100);\n\n        // Update visual elements\n        regularElement.textContent = `$${regularPrice.toFixed(2)}`;\n        saleElement.textContent = `$${salePrice.toFixed(2)}`;\n        discountElement.textContent = `${discount}% OFF`;\n      }\n      ```\n\n      **Accessibility Notes:**\n      - Screen reader context should be concise but clear\n      - Avoid redundant information in visual and screen reader content\n      - Test with actual screen readers to ensure proper announcement\n      - Consider using aria-live regions for dynamic price updates\n      - Ensure price information is accessible in product listings and detail pages\n      - Handle cases where sale prices are temporary or time-limited\n      - Provide context for different types of discounts (percentage, fixed amount, member-only)\n      - Do not hide visible price content from screen readers with aria-hidden\n      - Let natural button text serve as the accessible name when sufficient\n\n      **Common Patterns to Avoid:**\n      - Don't rely solely on visual styling (strike-through, colors) to convey meaning\n      - Don't use generic terms like \"price\" without context\n      - Don't announce prices without indicating which is regular vs sale\n      - Don't forget to announce discount percentages or savings amounts\n      - Don't use decorative elements without proper screen reader alternatives\n      - Don't hide visible price content with aria-hidden=\"true\"\n      - Don't duplicate discount information in visually hidden text when visible badges are sufficient\n\n      **Color Contrast Requirements:**\n      - Ensure all text meets WCAG 2.2 contrast requirements (4.5:1 for normal text)\n      - Savings amounts and discount text must be readable against background\n      - Test contrast ratios for all price-related text elements\n      - Use darker colors for better accessibility (e.g., #157347 instead of #28a745)\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/schemas.mdc",
    "content": "---\ndescription:\nglobs: blocks/*.liquid,sections/*.liquid,schemas/*\nalwaysApply: false\n---\n\n# Schema Standards\n\nEvery section and block must include a `{% schema %}` tag with valid JSON structure.\n\nWe write our schemas in the schemas folder and then run `npm run build:schemas` to push them to the `.liquid` files. This allows us to take advantage of Typescript for validation and reuse parts of schemas to avoid re-writing them many times.\n\n## Schema Structure\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"required\": [\"name\", \"settings\"],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"maxLength\": 50\n    },\n    \"tag\": {\n      \"type\": \"string\",\n      \"enum\": [\"div\", \"section\", \"aside\", \"header\", \"footer\", \"main\"]\n    },\n    \"class\": {\n      \"type\": \"string\"\n    },\n    \"settings\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"type\", \"id\", \"label\"],\n        \"properties\": {\n          \"type\": {\n            \"enum\": [\n              \"text\",\n              \"textarea\",\n              \"number\",\n              \"range\",\n              \"color\",\n              \"checkbox\",\n              \"select\",\n              \"radio\",\n              \"collection\",\n              \"product\",\n              \"blog\",\n              \"page\",\n              \"header\",\n              \"paragraph\",\n              \"image_picker\",\n              \"font_picker\",\n              \"video\",\n              \"richtext\"\n            ]\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"pattern\": \"^[a-z][a-z0-9_]*$\"\n          },\n          \"label\": {\n            \"type\": \"string\",\n            \"maxLength\": 30\n          },\n          \"visible_if\": {\n            \"type\": \"string\",\n            \"pattern\": \"\\\\{\\\\{\\\\s+[a-zA-Z_][a-zA-Z0-9_]*\\\\s+\\\\}\\\\}\"\n          }\n        }\n      }\n    },\n    \"blocks\": {\n      \"type\": \"array\",\n      \"maxItems\": 20,\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"type\", \"name\", \"settings\"],\n        \"properties\": {\n          \"type\": {\n            \"type\": \"string\",\n            \"pattern\": \"^(@theme|@app|[a-z][a-z0-9_]*)$\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"maxLength\": 30\n          },\n          \"settings\": {\n            \"type\": \"array\"\n          }\n        }\n      }\n    },\n    \"presets\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"name\"],\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\"\n          },\n          \"settings\": {\n            \"type\": \"object\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n## Setting Types and Usage\n\n### Input settings\n\nThese are the bulk of the settings with which the merchant will interact.\n\nSee [input settings documentation](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/settings/input-settings)\n\n### Sidebar settings\n\nThese are informative settings to guide the merchant.\n\nSee [sidebar settings documentation](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/settings/sidebar-settings)\n\n## Best practices\n\n### Label Guidelines\n\n- Keep labels concise (under 30 characters)\n- Setting type provides context - \"Columns\" not \"Number of columns\"\n- No verb-based labels for checkboxes\n- Use title case: \"Show Vendor\" not \"show vendor\"\n\n### Translation Keys\n\n- Schema names must use valid translation keys: `'t:names.keyname'`\n- Keys must exist in `locales/en.default.schema.json` under the `names` section\n- **If a key doesn't exist, add it to the `names` section** (e.g., `\"carousel\": \"Carousel\"`)\n- Run `npm run build:schemas` after making changes\n\n### Setting Organization Rules\n\n**1. Resource Pickers First**\n\n- Collection, product, blog, page pickers come first\n- These are required for section functionality\n\n**2. Visual Impact Order**\n\n- Layout settings (columns, spacing)\n- Typography settings (fonts, sizes)\n- Color settings (background, text)\n- Padding/margin last\n\n**3. Group settings using Headers**\n\n```json\n{\n  \"type\": \"header\",\n  \"content\": \"Layout\"\n}\n```\n\n### Schema Structure\n\n**Minimal schema:**\n\n```javascript\nexport default {\n  name: 't:names.section',\n  settings: [\n    /* settings array */\n  ],\n};\n```\n\n**With presets (optional):**\n\n```javascript\nexport default {\n  name: 't:names.section',\n  settings: [\n    /* settings array */\n  ],\n  presets: [{ name: 't:names.section', settings: {} }],\n};\n```\n\n## Nested Blocks in Presets\n\nWhen a block has nested `blocks`, you must include a `block_order` array.\n\n```javascript\nblocks: {\n  'product-details': {\n    type: '_product-details',\n    static: true,\n    blocks: {\n      header: {\n        type: 'group',\n        blocks: {\n          title: { type: 'product-title' },\n          price: { type: 'price' },\n        },\n        block_order: ['title', 'price'],\n      },\n    },\n    block_order: ['header'],\n  },\n}\n```\n"
  },
  {
    "path": ".cursor/rules/sections.mdc",
    "content": "---\ndescription: Section coding standards and best practices guide\nglobs: sections/*.liquid\nalwaysApply: false\n---\n# Section Development Standards\n\n## Section Requirements\n\nEvery section must include:\n\n- `{% schema %}` tag with valid JSON\n- Proper HTML semantic structure\n- CSS scoping with section classes\n- Translation keys for all text\n\n## Section Patterns\n\n**Basic Section Structure:**\n\n```liquid\n{% liquid\n  assign section_id = section.settings.custom_id | default: section.id\n  assign section_class = 'section-' | append: section.type\n%}\n\n<section\n  id=\"{{ section_id }}\"\n  class=\"{{ section_class }}\"\n  style=\"\n    --section-padding-top: {{ section.settings.padding_top }}px;\n    --section-padding-bottom: {{ section.settings.padding_bottom }}px;\n  \"\n>\n  <div class=\"page-width\">\n    {% content_for 'blocks %}\n  </div>\n</section>\n\n{% stylesheet %}\n.{{ section_class }} {\n  padding-top: var(--section-padding-top, 40px);\n  padding-bottom: var(--section-padding-bottom, 40px);\n}\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.section_name\",\n  \"tag\": \"section\",\n  \"class\": \"section-name\",\n  \"blocks\": [\n    {\"type\": \"@theme\"},\n    {\"type\": \"@app\"}\n  ],\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"padding_top\",\n      \"label\": \"t:settings.padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"default\": 40,\n      \"unit\": \"px\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.section_name\"\n    }\n  ]\n}\n{% endschema %}\n```\n\n## Performance Patterns\n\n- Use `{% liquid %}` for multiline logic\n- Lazy load images with `loading=\"lazy\"`\n- Scope CSS variables to section\n- Use `container-queries` for responsive behavior\n\n[section-example.liquid](mdc:.cursor/rules/examples/section-example.liquid)\n"
  },
  {
    "path": ".cursor/rules/slider-accessibility.mdc",
    "content": "---\ndescription: Slider component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Slider Component Accessibility Standards\n\nEnsures slider components follow WCAG compliance and WAI-ARIA Slider Pattern specifications.\n\n<rule>\nname: slider_accessibility_standards\ndescription: Enforce slider component accessibility standards and WAI-ARIA Slider Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Slider role requirement\n      - pattern: \"(?i)<(div|input)[^>]*(?:slider|range)[^>]*>\"\n        pattern_negate: \"role=\\\"slider\\\"\"\n        message: \"Slider controls must have role='slider' attribute.\"\n\n      # aria-valuenow requirement\n      - pattern: \"(?i)<[^>]*role=\\\"slider\\\"[^>]*>\"\n        pattern_negate: \"aria-valuenow=\\\"[0-9.-]+\\\"\"\n        message: \"Slider elements must have aria-valuenow attribute set to the current value.\"\n\n      # aria-valuemin requirement\n      - pattern: \"(?i)<[^>]*role=\\\"slider\\\"[^>]*>\"\n        pattern_negate: \"aria-valuemin=\\\"[0-9.-]+\\\"\"\n        message: \"Slider elements must have aria-valuemin attribute set to the minimum allowed value.\"\n\n      # aria-valuemax requirement\n      - pattern: \"(?i)<[^>]*role=\\\"slider\\\"[^>]*>\"\n        pattern_negate: \"aria-valuemax=\\\"[0-9.-]+\\\"\"\n        message: \"Slider elements must have aria-valuemax attribute set to the maximum allowed value.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"slider\\\"[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Slider elements should handle keyboard events (Arrow keys, Home, End, Page Up/Down).\"\n\n      # Missing label\n      - pattern: \"(?i)<[^>]*role=\\\"slider\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Slider elements must have either aria-labelledby or aria-label for accessibility.\"\n\n  - type: suggest\n    message: |\n      **Slider Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='slider':** Set on the slider control element\n      - **aria-valuenow:** Current value of the slider\n      - **aria-valuemin:** Minimum allowed value\n      - **aria-valuemax:** Maximum allowed value\n      - **aria-valuetext:** (Optional) User-friendly text representation of the value\n      - **aria-orientation:** (Optional) 'vertical' for vertical sliders, defaults to 'horizontal'\n      - **aria-labelledby:** Reference to visible label, OR\n      - **aria-label:** Descriptive label if no visible label exists\n\n      **Keyboard Interaction Requirements:**\n      - **Right/Up Arrow:** Increase value by one step\n      - **Left/Down Arrow:** Decrease value by one step\n      - **Home:** Set to minimum value\n      - **End:** Set to maximum value\n      - **Page Up:** (Optional) Increase by larger step\n      - **Page Down:** (Optional) Decrease by larger step\n\n      **Implementation Example:**\n      ```html\n      <div class=\"slider-container\">\n        <label id=\"slider-label\" for=\"slider\">Select a value:</label>\n        <div class=\"slider-wrapper\">\n          <div role=\"slider\"\n               id=\"slider\"\n               tabindex=\"0\"\n               aria-labelledby=\"slider-label\"\n               aria-valuemin=\"0\"\n               aria-valuemax=\"100\"\n               aria-valuenow=\"50\"\n               aria-valuetext=\"50%\">\n            <div class=\"slider-track\">\n              <div class=\"slider-fill\" style=\"width: 50%\"></div>\n              <div class=\"slider-thumb\" style=\"left: 50%\"></div>\n            </div>\n          </div>\n          <div class=\"slider-value\" aria-hidden=\"true\">50%</div>\n        </div>\n      </div>\n\n      <script>\n        const slider = document.querySelector('[role=\"slider\"]');\n        const thumb = slider.querySelector('.slider-thumb');\n        const fill = slider.querySelector('.slider-fill');\n        const valueDisplay = document.querySelector('.slider-value');\n\n        const min = parseInt(slider.getAttribute('aria-valuemin'));\n        const max = parseInt(slider.getAttribute('aria-valuemax'));\n        const step = 1; // Define step value\n\n        function updateSlider(value) {\n          // Ensure value is within bounds\n          value = Math.max(min, Math.min(max, value));\n\n          // Update ARIA attributes\n          slider.setAttribute('aria-valuenow', value);\n          slider.setAttribute('aria-valuetext', `${value}%`);\n\n          // Update visual elements\n          thumb.style.left = `${value}%`;\n          fill.style.width = `${value}%`;\n          valueDisplay.textContent = `${value}%`;\n        }\n\n        // Keyboard interaction\n        slider.addEventListener('keydown', (event) => {\n          let newValue = parseInt(slider.getAttribute('aria-valuenow'));\n\n          switch(event.key) {\n            case 'ArrowRight':\n            case 'ArrowUp':\n              newValue += step;\n              break;\n            case 'ArrowLeft':\n            case 'ArrowDown':\n              newValue -= step;\n              break;\n            case 'Home':\n              newValue = min;\n              break;\n            case 'End':\n              newValue = max;\n              break;\n            case 'PageUp':\n              newValue += step * 10; // Larger step\n              break;\n            case 'PageDown':\n              newValue -= step * 10; // Larger step\n              break;\n            default:\n              return;\n          }\n\n          event.preventDefault();\n          updateSlider(newValue);\n        });\n      </script>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement all required keyboard interactions\n      - Update ARIA attributes dynamically\n      - Ensure values stay within min/max bounds\n      - Provide visual feedback for value changes\n      - Handle both mouse and touch interactions\n      - Consider implementing smooth animations\n      - Support both horizontal and vertical orientations\n\n      **Accessibility Notes:**\n      - Ensure proper focus management\n      - Provide clear visual focus indicators\n      - Support high contrast mode\n      - Test with screen readers\n      - Consider touch target sizes\n      - Provide visual feedback for interactions\n      - Support both mouse and keyboard users\n      - Consider adding value announcements for screen readers\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/snippets.mdc",
    "content": "---\ndescription:\nglobs: snippets/*.liquid\nalwaysApply: false\n---\n# Snippet Development Standards\n\n## Snippet Documentation\n\nEvery snippet must include JSDoc-style comments using LiquidDoc:\n\n```liquid\n{% doc %}\n  Product Card Component\n\n  Renders a product card with customizable options.\n\n  @param product {Object} Product object (required)\n  @param show_vendor {Boolean} Display vendor name (default: false)\n  @param show_quick_add {Boolean} Show quick add button (default: false)\n  @param image_ratio {String} Image aspect ratio (default: 'adapt')\n  @param lazy_load {Boolean} Enable lazy loading (default: true)\n  @param card_class {String} Additional CSS classes\n\n  @example\n    {% render 'product-card',\n       product: product,\n       show_vendor: true,\n       image_ratio: 'square'\n    %}\n{% enddoc %}\n```\n\n## Parameter Handling\n\nAlways provide defaults and validate parameters:\n\n```liquid\n{% liquid\n  # Parameter validation and defaults\n  assign product = product | default: empty\n  assign show_vendor = show_vendor | default: false\n  assign show_quick_add = show_quick_add | default: false\n  assign image_ratio = image_ratio | default: 'adapt'\n  assign lazy_load = lazy_load | default: true\n  assign card_class = card_class | default: ''\n\n  # Early return if required parameters missing\n  unless product != empty\n    echo '<!-- Error: product parameter required for product-card snippet -->'\n    break\n  endunless\n%}\n```\n\n## Common Snippet Patterns\n\n**Icon Snippet:**\n```liquid\n{% comment %}\n  @param icon {String} Icon name (required)\n  @param size {String} Icon size class (default: 'icon--medium')\n  @param class {String} Additional classes\n{% endcomment %}\n\n{% liquid\n  assign icon = icon | default: ''\n  assign size = size | default: 'icon--medium'\n  assign class = class | default: ''\n\n  unless icon != blank\n    break\n  endunless\n%}\n\n<svg class=\"icon {{ size }} {{ class }}\" aria-hidden=\"true\" focusable=\"false\">\n  <use href=\"#icon-{{ icon }}\"></use>\n</svg>\n```\n\n**Price Snippet:**\n```liquid\n{% comment %}\n  @param product {Object} Product object (required)\n  @param show_compare_at {Boolean} Show compare at price (default: true)\n  @param show_unit_price {Boolean} Show unit price (default: false)\n{% endcomment %}\n\n{% liquid\n  assign show_compare_at = show_compare_at | default: true\n  assign show_unit_price = show_unit_price | default: false\n%}\n\n<div class=\"price\">\n  <div class=\"price__regular\">\n    {{ product.price | money }}\n  </div>\n\n  {% if show_compare_at and product.compare_at_price > product.price %}\n    <div class=\"price__compare-at\">\n      <s>{{ product.compare_at_price | money }}</s>\n    </div>\n  {% endif %}\n\n  {% if show_unit_price and product.selected_or_first_available_variant.unit_price_measurement %}\n    <div class=\"price__unit\">\n      {{ product.selected_or_first_available_variant.unit_price | money }}/\n      {%- if product.selected_or_first_available_variant.unit_price_measurement.reference_value != 1 -%}\n        {{ product.selected_or_first_available_variant.unit_price_measurement.reference_value }}\n      {%- endif -%}\n      {{ product.selected_or_first_available_variant.unit_price_measurement.reference_unit }}\n    </div>\n  {% endif %}\n</div>\n```\n\n## Testing Patterns\n\nInclude testing scenarios in comments:\n\n```liquid\n{% comment %}\n  Test cases:\n  - Product with variants\n  - Product without image\n  - Product with compare_at_price\n  - Product with unit pricing\n  - Out of stock product\n{% endcomment %}\n```\n\n[snippet-example.liquid](mdc:.cursor/rules/examples/snippet-example.liquid)\n"
  },
  {
    "path": ".cursor/rules/switch-accessibility.mdc",
    "content": "---\ndescription: Switch component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Switch Component Accessibility Standards\n\nEnsures switch components follow WCAG compliance and WAI-ARIA Switch Pattern specifications.\n\n<rule>\nname: switch_accessibility_standards\ndescription: Enforce switch component accessibility standards and WAI-ARIA Switch Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Switch role requirement\n      - pattern: \"(?i)<(div|span|button)[^>]*(?:switch|toggle)[^>]*>\"\n        pattern_negate: \"role=\\\"switch\\\"\"\n        message: \"Switch elements must have role='switch' attribute.\"\n\n      # Missing aria-checked state\n      - pattern: \"(?i)<[^>]*role=\\\"switch\\\"[^>]*>\"\n        pattern_negate: \"aria-checked=\\\"(true|false)\\\"\"\n        message: \"Switch elements must have aria-checked attribute set to 'true' or 'false'.\"\n\n      # Missing accessible label\n      - pattern: \"(?i)<[^>]*role=\\\"switch\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Switch elements must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Empty aria-label check\n      - pattern: \"(?i)<[^>]*role=\\\"switch\\\"[^>]*aria-label=\\\"\\\"[^>]*>\"\n        message: \"Switch aria-label should not be empty; provide a meaningful description.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"switch\\\"[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Switch elements should handle keyboard events (Space, optionally Enter).\"\n\n      # Switch group missing proper structure\n      - pattern: \"(?i)<(div|section)[^>]*(?:switch.*group|group.*switch)[^>]*>\"\n        pattern_negate: \"(role=\\\"group\\\"|fieldset)\"\n        message: \"Switch groups must use role='group' or fieldset element.\"\n\n      # Switch group missing label\n      - pattern: \"(?i)<[^>]*role=\\\"group\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|legend)\"\n        message: \"Switch groups must have aria-labelledby or legend element for labeling.\"\n\n  - type: suggest\n    message: |\n      **Switch Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='switch':** Set on the input element\n      - **aria-checked:** 'true' if switch is on, 'false' if off\n      - **aria-labelledby:** Reference to visible label, OR\n      - **aria-label:** Descriptive label if no visible label exists\n\n      **Optional ARIA Attributes:**\n      - **aria-describedby:** Reference to additional descriptive text\n      - **aria-disabled:** 'true' if switch cannot be toggled\n\n      **Keyboard Interaction Requirements:**\n      - **Space:** Toggle switch state\n      - **Enter:** (Optional) Toggle switch state\n      - **Tab/Shift+Tab:** Move through all focusable elements in page order\n\n      **Structure Requirements:**\n      - Switch must have a visible label that doesn't change with state\n      - Use semantic HTML within the switch (buttons, spans)\n      - Provide clear visual focus indicators\n      - Consider using native checkbox input with role='switch' for better semantics\n\n      **Implementation Patterns:**\n\n      **Basic Switch:**\n      ```html\n      <div class=\"switch\">\n        <input type=\"checkbox\"\n               id=\"notifications\"\n               role=\"switch\"\n               aria-checked=\"false\"\n               tabindex=\"0\">\n        <span class=\"switch-slider\"></span>\n      </div>\n      <label for=\"notifications\">Notifications</label>\n      ```\n\n      **Switch with Description:**\n      ```html\n      <div class=\"switch\">\n        <input type=\"checkbox\"\n               id=\"dark-mode\"\n               role=\"switch\"\n               aria-checked=\"false\"\n               tabindex=\"0\"\n               aria-describedby=\"dark-mode-desc\">\n        <span class=\"switch-slider\"></span>\n      </div>\n      <label for=\"dark-mode\">Dark Mode</label>\n      <span id=\"dark-mode-desc\">Enable dark mode for reduced eye strain</span>\n      ```\n\n      **Switch Group:**\n      ```html\n      <fieldset>\n        <legend>Notification Settings</legend>\n        <div class=\"switch\">\n          <input type=\"checkbox\"\n                 id=\"email-notifications\"\n                 role=\"switch\"\n                 aria-checked=\"false\"\n                 tabindex=\"0\">\n          <span class=\"switch-slider\"></span>\n        </div>\n        <label for=\"email-notifications\">Email Notifications</label>\n      </fieldset>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement Space and optional Enter key handlers\n      - Update aria-checked state when switch toggles\n      - Ensure focus management is maintained\n      - Consider implementing disabled state\n      - Use CSS transitions for smooth state changes\n\n      **Accessibility Notes:**\n      - Choose between switch, checkbox, or toggle button based on semantics\n      - Use switch when on/off semantics are clearer than checked/unchecked\n      - Ensure visual state changes are clear and maintainable\n      - Test with screen readers to ensure proper announcement\n      - Consider implementing a visible focus indicator\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/tab-accessibility.mdc",
    "content": "---\ndescription: Tab component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Tab Component Accessibility Standards\n\nEnsures tab components follow WCAG compliance and WAI-ARIA Tab Pattern specifications.\n\n<rule>\nname: tab_accessibility_standards\ndescription: Enforce tab component accessibility standards and WAI-ARIA Tab Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Tablist role requirement\n      - pattern: \"(?i)<(div|nav|section)[^>]*(?:tab.*list|list.*tab)[^>]*>\"\n        pattern_negate: \"role=\\\"tablist\\\"\"\n        message: \"Tab list container must have role='tablist' attribute.\"\n\n      # Tab role requirement\n      - pattern: \"(?i)<(button|a|div)[^>]*(?:tab)[^>]*>\"\n        pattern_negate: \"role=\\\"tab\\\"\"\n        message: \"Tab elements must have role='tab' attribute.\"\n\n      # Tabpanel role requirement\n      - pattern: \"(?i)<(div|section)[^>]*(?:tab.*panel|panel.*tab)[^>]*>\"\n        pattern_negate: \"role=\\\"tabpanel\\\"\"\n        message: \"Tab panel elements must have role='tabpanel' attribute.\"\n\n      # Missing aria-selected state\n      - pattern: \"(?i)<[^>]*role=\\\"tab\\\"[^>]*>\"\n        pattern_negate: \"aria-selected=\\\"(true|false)\\\"\"\n        message: \"Tab elements must have aria-selected attribute set to 'true' or 'false'.\"\n\n      # Missing aria-controls\n      - pattern: \"(?i)<[^>]*role=\\\"tab\\\"[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n        message: \"Tab elements must have aria-controls attribute referencing their associated panel.\"\n\n      # Missing aria-labelledby on tabpanel\n      - pattern: \"(?i)<[^>]*role=\\\"tabpanel\\\"[^>]*>\"\n        pattern_negate: \"aria-labelledby=\\\"[^\\\"]+\\\"\"\n        message: \"Tab panel elements must have aria-labelledby referencing their associated tab.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<[^>]*role=\\\"tab\\\"[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Tab elements should handle keyboard events (Arrow keys, Space, Enter, Home, End).\"\n\n      # Missing tablist label\n      - pattern: \"(?i)<[^>]*role=\\\"tablist\\\"[^>]*>\"\n        pattern_negate: \"(aria-labelledby|aria-label)\"\n        message: \"Tab list must have either aria-labelledby or aria-label for accessibility.\"\n\n      # Empty aria-label check\n      - pattern: \"(?i)<[^>]*role=\\\"tablist\\\"[^>]*aria-label=\\\"\\\"[^>]*>\"\n        message: \"Tab list aria-label should not be empty; provide a meaningful description.\"\n\n  - type: suggest\n    message: |\n      **Tab Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='tablist':** Set on the container of tab elements\n      - **role='tab':** Set on each tab element\n      - **role='tabpanel':** Set on each panel element\n      - **aria-selected:** 'true' for active tab, 'false' for inactive tabs\n      - **aria-controls:** On tab elements, referencing their panel\n      - **aria-labelledby:** On tab panels, referencing their tab\n      - **aria-labelledby/aria-label:** On tablist for accessibility\n\n      **Optional ARIA Attributes:**\n      - **aria-orientation:** 'vertical' if tabs are vertically oriented\n      - **aria-haspopup:** Set on tabs with popup menus\n      - **aria-disabled:** 'true' if tab cannot be activated\n\n      **Keyboard Interaction Requirements:**\n      - **Tab:** Move focus into/out of tab list\n      - **Left/Right Arrow:** Move between tabs (horizontal)\n      - **Up/Down Arrow:** Move between tabs (vertical)\n      - **Space/Enter:** Activate focused tab\n      - **Home:** Move to first tab\n      - **End:** Move to last tab\n      - **Shift + F10:** Open popup menu if available\n      - **Delete:** (Optional) Remove tab\n\n      **Structure Requirements:**\n      - Tab list must contain all tab elements\n      - Each tab must be associated with exactly one panel\n      - Active tab must be visually distinct\n      - Tab panels must be properly labeled\n      - Consider using native button elements for tabs\n\n      **Implementation Patterns:**\n\n      **Basic Tab Structure:**\n      ```html\n      <div role=\"tablist\" aria-label=\"Settings\">\n        <button role=\"tab\"\n                aria-selected=\"true\"\n                aria-controls=\"panel-1\"\n                id=\"tab-1\">\n          Account\n        </button>\n        <button role=\"tab\"\n                aria-selected=\"false\"\n                aria-controls=\"panel-2\"\n                id=\"tab-2\">\n          Security\n        </button>\n      </div>\n\n      <div role=\"tabpanel\"\n           id=\"panel-1\"\n           aria-labelledby=\"tab-1\">\n        Account settings content...\n      </div>\n      <div role=\"tabpanel\"\n           id=\"panel-2\"\n           aria-labelledby=\"tab-2\"\n           hidden>\n        Security settings content...\n      </div>\n      ```\n\n      **Vertical Tab List:**\n      ```html\n      <div role=\"tablist\"\n           aria-label=\"Settings\"\n           aria-orientation=\"vertical\">\n        <button role=\"tab\"\n                aria-selected=\"true\"\n                aria-controls=\"panel-1\"\n                id=\"tab-1\">\n          Account\n        </button>\n        <button role=\"tab\"\n                aria-selected=\"false\"\n                aria-controls=\"panel-2\"\n                id=\"tab-2\">\n          Security\n        </button>\n      </div>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement keyboard navigation between tabs\n      - Handle tab activation on Space/Enter\n      - Update aria-selected states\n      - Manage focus when switching tabs\n      - Handle optional features (Home/End, Delete)\n      - Consider implementing automatic activation\n      - Ensure proper focus management\n\n      **Accessibility Notes:**\n      - Choose between automatic and manual activation\n      - Ensure visual focus indicators are clear\n      - Test with screen readers for proper announcement\n      - Consider implementing skip links for long tab lists\n      - Maintain proper heading structure within panels\n      - Ensure sufficient color contrast for active/inactive states\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/table-accessibility.mdc",
    "content": "---\ndescription: Table element accessibility compliance\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: true\n---\n# Table Element Accessibility Standards\n\nEnsures table elements follow WCAG compliance and provide proper structure for screen reader navigation and data relationships.\n\n<rule>\nname: table_accessibility_standards\ndescription: Enforce table element accessibility standards per WCAG 1.3.1 Info and Relationships requirements\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Table headers must use th elements\n      - pattern: \"(?i)<table[^>]*>.*<td[^>]*>.*</td>.*<td[^>]*>.*</td>\"\n        pattern_negate: \"<th[^>]*>\"\n        message: \"Data tables must use th elements for headers. Use th for header cells and td for data cells.\"\n\n      # Missing scope attribute on th elements\n      - pattern: \"(?i)<th[^>]*>\"\n        pattern_negate: \"scope=\\\"(col|row|colgroup|rowgroup)\\\"\"\n        message: \"Table header cells should have scope attribute set to 'col', 'row', 'colgroup', or 'rowgroup' for proper associations.\"\n\n      # Data cells not associated with headers\n      - pattern: \"(?i)<td[^>]*>\"\n        pattern_negate: \"(scope=\\\"(col|row)\\\"|headers=\\\"[^\\\"]+\\\"|<th[^>]*scope)\"\n        message: \"Table data cells must be associated with their corresponding header cells via scope or headers attributes.\"\n\n      # Layout table with headers\n      - pattern: \"(?i)<table[^>]*class=\\\"[^\\\"]*(?:layout|grid|position)[^\\\"]*\\\"[^>]*>\"\n        pattern_negate: \"(role=\\\"table\\\"|data-table)\"\n        message: \"Layout tables should not contain header elements. Use role='table' for data tables or remove headers from layout tables.\"\n\n      # Missing caption or accessible name\n      - pattern: \"(?i)<table[^>]*>\"\n        pattern_negate: \"(<caption|aria-label|aria-labelledby)\"\n        message: \"Data tables should have a caption element or aria-label/aria-labelledby for accessibility.\"\n\n      # Empty caption\n      - pattern: \"(?i)<caption[^>]*>\\\\s*</caption>\"\n        message: \"Table caption should contain meaningful text describing the table's purpose.\"\n\n      # Generic caption text\n      - pattern: \"(?i)<caption[^>]*>\\\\s*(table|data|information)\\\\s*</caption>\"\n        message: \"Table caption should be specific and descriptive, not generic.\"\n\n      # Missing table structure elements\n      - pattern: \"(?i)<table[^>]*>.*<tr[^>]*>.*<td[^>]*>\"\n        pattern_negate: \"(<thead|<tbody|<tfoot)\"\n        message: \"Complex tables should use thead, tbody, and tfoot elements for proper structure.\"\n\n      # Incorrect role usage\n      - pattern: \"(?i)role=\\\"(table|rowgroup|cell|columnheader|rowheader)\\\"\"\n        pattern_negate: \"(<table|<tbody|<thead|<tfoot|<td|<th)\"\n        message: \"Table roles should only be used when native HTML table elements are not available.\"\n\n      # Missing headers attribute for complex associations\n      - pattern: \"(?i)<td[^>]*>\"\n        pattern_negate: \"(headers=\\\"[^\\\"]+\\\"|scope=\\\"(col|row)\\\")\"\n        message: \"Data cells in complex tables should have headers attribute referencing their associated header IDs.\"\n\n      # Missing ID on header cells for headers attribute\n      - pattern: \"(?i)<td[^>]*headers=\\\"[^\\\"]+\\\"[^>]*>\"\n        pattern_negate: \"<th[^>]*id=\\\"[^\\\"]+\\\"[^>]*>\"\n        message: \"Header cells referenced by headers attribute must have unique ID attributes.\"\n\n      # Nested tables without proper isolation\n      - pattern: \"(?i)<table[^>]*>.*<table[^>]*>\"\n        pattern_negate: \"(role=\\\"table\\\"|aria-label|aria-labelledby)\"\n        message: \"Nested tables should have proper accessible names and structure to avoid confusion.\"\n\n      # Table without proper row structure\n      - pattern: \"(?i)<table[^>]*>\"\n        pattern_negate: \"<tr[^>]*>\"\n        message: \"Tables must contain tr (table row) elements for proper structure.\"\n\n      # Missing table role when using ARIA\n      - pattern: \"(?i)role=\\\"(rowgroup|cell|columnheader|rowheader)\\\"\"\n        pattern_negate: \"role=\\\"table\\\"\"\n        message: \"When using table ARIA roles, the table element must have role='table'.\"\n\n  - type: suggest\n    message: |\n      **WCAG 1.3.1 Table Accessibility Requirements:**\n\n      **Table Headers:**\n      - **Header Tag:** Table headers MUST be designated with `th` elements\n      - **Meaningful Header:** Header text MUST accurately describe the category of corresponding data cells\n      - **Header Associations:** Data cells MUST be associated with their corresponding header cells\n      - **Scope Attribute:** Use `scope=\"col\"` and `scope=\"row\"` for simple tables\n      - **Complex Associations:** Use `headers` and `id` attributes for complex header relationships\n\n      **Tabular Data:**\n      - **Tables:** Tabular data SHOULD be represented in a `table` element\n      - **Data Relationships:** WCAG 1.3.1 requires data to be associated with their labels\n\n      **Caption Requirements:**\n      - **Caption:** Data tables SHOULD have a `caption` element or accessible name\n      - **Meaningful Caption:** Caption SHOULD describe the table's identity or purpose\n      - **Unique Caption:** Each table SHOULD have a unique caption within the page context\n\n      **Layout Tables:**\n      - **Avoid Layout Tables:** Tables SHOULD NOT be used for purely visual layout\n      - **No Headers in Layout:** Layout tables MUST NOT contain header elements\n\n      **HTML Markup Requirements:**\n      - **Native Elements:** Use semantic HTML `table`, `caption`, `tr`, `th`, `td`, `thead`, `tbody`, `tfoot`\n      - **ARIA Roles:** Only use table roles when native HTML is not available\n\n      **Implementation Patterns:**\n\n      **Basic Data Table:**\n      ```html\n      <table>\n        <caption>Monthly Sales Report - Q1 2024</caption>\n        <thead>\n          <tr>\n            <th scope=\"col\">Month</th>\n            <th scope=\"col\">Revenue</th>\n            <th scope=\"col\">Units Sold</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>January</td>\n            <td>$45,000</td>\n            <td>1,200</td>\n          </tr>\n          <tr>\n            <td>February</td>\n            <td>$52,000</td>\n            <td>1,350</td>\n          </tr>\n        </tbody>\n      </table>\n      ```\n\n      **Complex Table with Multiple Headers:**\n      ```html\n      <table>\n        <caption>Product Performance by Region and Quarter</caption>\n        <thead>\n          <tr>\n            <th scope=\"col\" rowspan=\"2\">Product</th>\n            <th scope=\"colgroup\" colspan=\"2\">Q1 2024</th>\n            <th scope=\"colgroup\" colspan=\"2\">Q2 2024</th>\n          </tr>\n          <tr>\n            <th scope=\"col\">North</th>\n            <th scope=\"col\">South</th>\n            <th scope=\"col\">North</th>\n            <th scope=\"col\">South</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <th scope=\"row\">Widget A</th>\n            <td>150</td>\n            <td>200</td>\n            <td>175</td>\n            <td>225</td>\n          </tr>\n          <tr>\n            <th scope=\"row\">Widget B</th>\n            <td>300</td>\n            <td>250</td>\n            <td>325</td>\n            <td>275</td>\n          </tr>\n        </tbody>\n      </table>\n      ```\n\n      **Table with Headers Attribute:**\n      ```html\n      <table>\n        <caption>Employee Directory</caption>\n        <thead>\n          <tr>\n            <th id=\"name\">Name</th>\n            <th id=\"department\">Department</th>\n            <th id=\"email\">Email</th>\n            <th id=\"phone\">Phone</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td headers=\"name\">John Smith</td>\n            <td headers=\"department\">Engineering</td>\n            <td headers=\"email\">john.smith@company.com</td>\n            <td headers=\"phone\">555-0101</td>\n          </tr>\n          <tr>\n            <td headers=\"name\">Jane Doe</td>\n            <td headers=\"department\">Marketing</td>\n            <td headers=\"email\">jane.doe@company.com</td>\n            <td headers=\"phone\">555-0102</td>\n          </tr>\n        </tbody>\n      </table>\n      ```\n\n      **ARIA Table (when native HTML not available):**\n      ```html\n      <div role=\"table\" aria-label=\"Product Inventory\">\n        <div role=\"rowgroup\">\n          <div role=\"row\">\n            <div role=\"columnheader\" scope=\"col\">Product</div>\n            <div role=\"columnheader\" scope=\"col\">Stock</div>\n            <div role=\"columnheader\" scope=\"col\">Price</div>\n          </div>\n        </div>\n        <div role=\"rowgroup\">\n          <div role=\"row\">\n            <div role=\"cell\">Widget A</div>\n            <div role=\"cell\">150</div>\n            <div role=\"cell\">$25.00</div>\n          </div>\n          <div role=\"row\">\n            <div role=\"cell\">Widget B</div>\n            <div role=\"cell\">200</div>\n            <div role=\"cell\">$30.00</div>\n          </div>\n        </div>\n      </div>\n      ```\n\n      **Table Structure Guidelines:**\n\n      **Simple Tables:**\n      - Use `th` with `scope=\"col\"` for column headers\n      - Use `th` with `scope=\"row\"` for row headers\n      - Include meaningful `caption` element\n\n      **Complex Tables:**\n      - Use `thead`, `tbody`, `tfoot` for structure\n      - Use `headers` and `id` attributes for complex associations\n      - Consider using `colgroup` and `rowgroup` for grouped headers\n\n      **Layout Tables (Avoid):**\n      ```html\n      <!-- ❌ Bad: Using table for layout -->\n      <table>\n        <tr>\n          <td>Header</td>\n          <td>Content</td>\n        </tr>\n      </table>\n\n      <!-- ✅ Good: Using CSS for layout -->\n      <div class=\"layout-container\">\n        <header>Header</header>\n        <main>Content</main>\n      </div>\n      ```\n\n      **Caption Best Practices:**\n      ```html\n      <!-- ✅ Good: Specific and descriptive -->\n      <table>\n        <caption>Monthly Sales Performance - Q1 2024</caption>\n        <!-- table content -->\n      </table>\n\n      <!-- ❌ Bad: Generic caption -->\n      <table>\n        <caption>Data Table</caption>\n        <!-- table content -->\n      </table>\n      ```\n\n      **Scope Attribute Usage:**\n      ```html\n      <!-- Column headers -->\n      <th scope=\"col\">Product Name</th>\n      <th scope=\"col\">Price</th>\n\n      <!-- Row headers -->\n      <th scope=\"row\">Widget A</th>\n      <th scope=\"row\">Widget B</th>\n\n      <!-- Group headers -->\n      <th scope=\"colgroup\" colspan=\"2\">Q1 2024</th>\n      <th scope=\"rowgroup\" rowspan=\"3\">Product Category</th>\n      ```\n\n      **Testing and Validation:**\n      - Test with screen readers to verify header associations\n      - Verify table navigation works properly\n      - Check that captions are announced correctly\n      - Test keyboard navigation through table cells\n      - Validate scope attributes are used appropriately\n      - Ensure complex tables have proper header associations\n\n      **Common Mistakes to Avoid:**\n      - Using `td` elements for headers instead of `th`\n      - Missing scope attributes on header cells\n      - Using tables for layout purposes\n      - Generic or meaningless captions\n      - Missing accessible names for tables\n      - Incorrect use of ARIA table roles\n      - Nested tables without proper isolation\n      - Missing header associations in complex tables\n      - Using layout tables with header elements\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": ".cursor/rules/templates.mdc",
    "content": "---\ndescription:\nglobs: templates/*.json\nalwaysApply: false\n---\n# Templates\n\nAll JSON templates must follow this exact structure:\n\n## Required Schema\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"required\": [\"sections\"],\n  \"properties\": {\n    \"sections\": {\n      \"type\": \"object\",\n      \"patternProperties\": {\n        \"^[a-zA-Z0-9_-]+$\": {\n          \"type\": \"object\",\n          \"required\": [\"type\"],\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"settings\": {\n              \"type\": \"object\"\n            },\n            \"blocks\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"required\": [\"type\"],\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\"\n                  },\n                  \"settings\": {\n                    \"type\": \"object\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"order\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  }\n}\n```\n\n## Template Structure Rules\n\n- Every template must have a `sections` object\n- Section keys must be alphanumeric with dashes/underscores\n- Each section must have a `type` property\n- `settings` and `blocks` are optional\n- `order` array defines section sequence\n- Blocks must have a `type` property\n\n\n## Template Types\n\n**Standard Templates:**\n- `index.json` - Homepage\n- `product.json` - Product pages\n- `collection.json` - Collection pages\n- `page.json` - Static pages\n- `blog.json` - Blog listing\n- `article.json` - Blog posts\n- `cart.json` - Shopping cart\n- `search.json` - Search results\n\n**Alternate Templates:**\nAlternative templates may exist for any of the standard templates, following the structure `template-name.template-suffix.template-file-type`, for example: `product.alternate.json`\n\n## Valid Template Examples\n\n**Product Template:**\n```json\n{\n  \"sections\": {\n    \"header\": {\n      \"type\": \"header\"\n    },\n    \"main\": {\n      \"type\": \"main-product\",\n      \"settings\": {\n        \"show_vendor\": true,\n        \"show_sku\": false,\n        \"media_size\": \"medium\"\n      },\n      \"blocks\": {\n        \"title\": {\n          \"type\": \"title\",\n          \"settings\": {}\n        },\n        \"price\": {\n          \"type\": \"price\",\n          \"settings\": {\n            \"show_compare_at\": true\n          }\n        },\n        \"variant_picker\": {\n          \"type\": \"variant_picker\",\n          \"settings\": {\n            \"picker_type\": \"dropdown\"\n          }\n        }\n      },\n      \"block_order\": [\"title\", \"price\", \"variant_picker\"]\n    },\n    \"footer\": {\n      \"type\": \"footer\"\n    }\n  },\n  \"order\": [\"header\", \"main\", \"footer\"]\n}\n```\n\n**Collection Template:**\n```json\n{\n  \"sections\": {\n    \"header\": {\n      \"type\": \"header\"\n    },\n    \"collection-banner\": {\n      \"type\": \"collection-banner\",\n      \"settings\": {\n        \"show_collection_description\": true,\n        \"show_collection_image\": false\n      }\n    },\n    \"main\": {\n      \"type\": \"main-collection-product-grid\",\n      \"settings\": {\n        \"products_per_page\": 24,\n        \"columns_desktop\": 4,\n        \"columns_mobile\": 2\n      }\n    }\n  },\n  \"order\": [\"header\", \"collection-banner\", \"main\"]\n}\n```\n"
  },
  {
    "path": ".cursor/rules/theme-settings.mdc",
    "content": "---\ndescription: Guidelines and examples for organizing and structuring the Shopify theme settings schema.\nglobs: config/settings_schema.json\nalwaysApply: false\n---\n# Settings Schema Standards\n\n## Settings Schema Structure\n\n```json\n{\n  \"name\": \"theme_info\",\n  \"theme_name\": \"Theme Name\",\n  \"theme_version\": \"1.0.0\",\n  \"theme_author\": \"Author Name\",\n  \"theme_documentation_url\": \"https://...\",\n  \"theme_support_url\": \"https://...\"\n},\n{\n  \"name\": \"Colors\",\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"Brand Colors\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"color_primary\",\n      \"label\": \"Primary\",\n      \"default\": \"#121212\"\n    }\n  ]\n}\n```\n\n## Setting Categories\n\n**Typography:**\n- `font_picker` for font selections\n- `range` for font sizes (12-72px)\n- `select` for font weights\n\n**Layout:**\n- `range` for spacing (0-100px)\n- `select` for layout options\n- `checkbox` for feature toggles\n\n**Performance:**\n- `checkbox` for lazy loading\n- `select` for image quality\n- `number` for pagination limits\n"
  },
  {
    "path": ".cursor/rules/tooltip-accessibility.mdc",
    "content": "---\ndescription: Tooltip component accessibility compliance pattern\nglobs: *.vue, *.jsx, *.tsx, *.html, *.php, *.js, *.ts, *.liquid\nalwaysApply: false\n---\n# Tooltip Component Accessibility Standards\n\nEnsures tooltip components follow WCAG compliance and WAI-ARIA Tooltip Pattern specifications.\n\n<rule>\nname: tooltip_accessibility_standards\ndescription: Enforce tooltip component accessibility standards and WAI-ARIA Tooltip Pattern compliance\nfilters:\n  - type: file_extension\n    pattern: \"\\\\.(vue|jsx|tsx|html|liquid|php|js|ts)$\"\n\nactions:\n  - type: enforce\n    conditions:\n      # Tooltip trigger role requirement\n      - pattern: \"(?i)<button[^>]*(?:tooltip|info|help)[^>]*>\"\n        pattern_negate: \"role=\\\"button\\\"\"\n        message: \"Tooltip trigger buttons should have role='button' (or use native button element which has implicit role).\"\n\n      # Tooltip trigger missing aria-expanded\n      - pattern: \"(?i)<button[^>]*(?:tooltip|info|help)[^>]*>\"\n        pattern_negate: \"aria-expanded=\\\"(true|false)\\\"\"\n        message: \"Tooltip trigger buttons must have aria-expanded attribute set to 'true' or 'false'.\"\n\n      # Tooltip trigger missing aria-controls\n      - pattern: \"(?i)<button[^>]*(?:tooltip|info|help)[^>]*>\"\n        pattern_negate: \"aria-controls=\\\"[^\\\"]+\\\"\"\n        message: \"Tooltip trigger buttons must have aria-controls attribute referencing the ID of the associated tooltip.\"\n\n      # Tooltip container missing role\n      - pattern: \"(?i)<(div|span)[^>]*(?:tooltip|info|help)[^>]*>\"\n        pattern_negate: \"role=\\\"tooltip\\\"\"\n        message: \"Tooltip containers must have role='tooltip' attribute.\"\n\n      # Tooltip missing proper identification\n      - pattern: \"(?i)<[^>]*role=\\\"tooltip\\\"[^>]*>\"\n        pattern_negate: \"id=\\\"[^\\\"]+\\\"\"\n        message: \"Tooltip containers must have unique ID attributes for aria-controls reference.\"\n\n      # Missing keyboard event handlers\n      - pattern: \"(?i)<button[^>]*(?:tooltip|info|help)[^>]*>\"\n        pattern_negate: \"(onKeyDown|onkeydown|@keydown|v-on:keydown)\"\n        message: \"Tooltip trigger buttons should handle keyboard events (Enter, Space, Escape).\"\n\n  - type: suggest\n    message: |\n      **Tooltip Component Accessibility Best Practices:**\n\n      **Required ARIA Attributes:**\n      - **role='button':** Set on tooltip trigger elements (or use native button)\n      - **role='tooltip':** Set on tooltip container elements\n      - **aria-expanded:** 'true' if tooltip is visible, 'false' if hidden\n      - **aria-controls:** Reference to the ID of the associated tooltip content\n\n      **Interaction Patterns:**\n\n      **Mouse Hover Interaction:**\n      - Show tooltip on activator mouse hover\n      - Hide tooltip on activator mouse leave\n      - Keep tooltip visible when hovering over tooltip container\n      - No click required for hover interaction\n\n      **Mouse Click Interaction:**\n      - Show tooltip on activator mouse hover\n      - Hide tooltip on activator mouse click\n      - Show tooltip again on activator mouse click\n      - Toggle behavior for click interaction\n\n      **Keyboard Interaction:**\n      - Show tooltip on Enter or Space keypress\n      - Hide tooltip on Escape keypress\n      - Focus management should be handled appropriately\n\n      **Mobile/Touch Interaction:**\n      - Show tooltip on activator click/touch\n      - Hide tooltip on activator or document click/touch\n      - No hover events on touch devices\n\n      **DOM Structure Requirements:**\n      - Tooltip content must be a sibling to the trigger element\n      - Tooltip should be positioned after the trigger in DOM order\n      - Use CSS positioning for visual placement\n      - Ensure tooltip is visible in the viewport\n\n      **Implementation Patterns:**\n\n      **Basic Tooltip Structure:**\n      ```html\n      <div class=\"tooltip-wrapper\">\n        <button class=\"tooltip-trigger\"\n                role=\"button\"\n                aria-expanded=\"false\"\n                aria-controls=\"tooltip-1\">\n          Trigger Text\n        </button>\n        <div id=\"tooltip-1\"\n             role=\"tooltip\">\n          Tooltip content\n        </div>\n      </div>\n      ```\n\n      **JavaScript Considerations:**\n      - Implement proper event listeners for each interaction type\n      - Handle touch device detection\n      - Manage focus and blur events\n      - Ensure proper event cleanup\n      - Handle viewport positioning\n      - Implement proper event delegation for document clicks\n      - Track click state to prevent hover interference\n      - Handle state transitions between interaction types\n      - Maintain tooltip visibility when hovering over tooltip content\n\n      **Accessibility Notes:**\n      - Tooltips should not contain interactive elements\n      - Consider using native title attribute for simple tooltips\n      - Ensure tooltip content is accessible to screen readers\n      - Test with screen readers to ensure proper announcement\n      - Consider using aria-live regions for dynamic content\n\nmetadata:\n  priority: high\n  version: 1.0\n</rule>\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2025-present Shopify Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, sell and/or create derivative works of the Software or any part thereof, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe rights granted above may only be exercised to develop themes that integrate or interoperate with Shopify software or services. All other uses of the Software are strictly prohibited.\n\nFor the avoidance of doubt, you may not submit, list, market, sell, distribute, or otherwise make available any theme that is based on, derived from, or incorporates any portion of the Software (a “Derived Theme”) via the Shopify Theme Store, any other Shopify-operated channel, or any off-platform channel (including your own website or third-party marketplaces). Shopify may determine, in its sole discretion, whether a theme is a Derived Theme for purposes of this restriction. You may not circumvent this restriction by making insubstantial changes, reformatting or reorganizing code, or by otherwise claiming independent creation.\n\nNotwithstanding the foregoing, you may deliver a Derived Theme directly to merchants as part of services engagements, solely for those merchants’ own use in their Shopify stores. Any such delivery may not be marketed or offered as a general-purpose product, and the Derived Theme may not be resold, relicensed, or redistributed by you or the merchant.\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Horizon\n\n[Getting started](#getting-started) |\n[Staying up to date with Horizon changes](#staying-up-to-date-with-horizon-changes) |\n[Developer tools](#developer-tools) |\n[Contributing](#contributing) |\n[License](#license)\n\nHorizon is the flagship of a new generation of first party Shopify themes. It incorporates the latest Liquid Storefronts features, including [theme blocks](https://shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks/quick-start?framework=liquid).\n\n- **Web-native in its purest form:** Themes run on the [evergreen web](https://www.w3.org/2001/tag/doc/evergreen-web/). We leverage the latest web browsers to their fullest, while maintaining support for the older ones through progressive enhancement—not polyfills.\n- **Lean, fast, and reliable:** Functionality and design defaults to “no” until it meets this requirement. Code ships on quality. Themes must be built with purpose. They shouldn’t support each and every feature in Shopify.\n- **Server-rendered:** HTML must be rendered by Shopify servers using Liquid. Business logic and platform primitives such as translations and money formatting don’t belong on the client. Async and on-demand rendering of parts of the page is OK, but we do it sparingly as a progressive enhancement.\n- **Functional, not pixel-perfect:** The Web doesn’t require each page to be rendered pixel-perfect by each browser engine. Using semantic markup, progressive enhancement, and clever design, we ensure that themes remain functional regardless of the browser.\n\n## Getting started\n\nWe recommend using the Skeleton Theme as a starting point for a theme development project. [Learn more on Shopify.dev](https://shopify.dev/themes/getting-started/create).\n\nTo create a new theme project based on Horizon:\n\n```sh\ngit clone https://github.com/Shopify/horizon.git\n```\n\nInstall the [Shopify CLI](https://shopify.dev/docs/storefronts/themes/tools/cli) to connect your local project to a Shopify store. Learn about the [theme developer tools](https://shopify.dev/docs/storefronts/themes/tools) available, and the suggested [developer tools](#developer-tools) below.\n\nPlease note that the `main` branch may include code for features not yet released. You may encounter Liquid API properties that are not publicly documented, but will be when the feature is officially rolled out.\n\n### Shopify Theme Store development\n\nIf you're building a theme for the Shopify Theme Store, then do not use Horizon as a starting point. Themes based on, derived from, or incorporating Horizon are not eligible for submission to to the Shopify Theme Store. Use the [Skeleton Theme](https://github.com/Shopify/skeleton-theme) instead.\n\n## Staying up to date with Horizon changes\n\nSay you're building a new theme off Horizon but you still want to be able to pull in the latest changes, you can add a remote `upstream` pointing to this Horizon repository.\n\n1. Navigate to your local theme folder.\n2. Verify the list of remotes and validate that you have both an `origin` and `upstream`:\n\n```sh\ngit remote -v\n```\n\n3. If you don't see an `upstream`, you can add one that points to Shopify's Horizon repository:\n\n```sh\ngit remote add upstream https://github.com/Shopify/horizon.git\n```\n\n4. Pull in the latest Horizon changes into your repository:\n\n```sh\ngit fetch upstream\ngit pull upstream main\n```\n\n## Developer tools\n\nThere are a number of really useful tools that the Shopify Themes team uses during development. Horizon is already set up to work with these tools.\n\n### Shopify CLI\n\n[Shopify CLI](https://shopify.dev/docs/storefronts/themes/tools/cli) helps you build Shopify themes faster and is used to automate and enhance your local development workflow. It comes bundled with a suite of commands for developing Shopify themes—everything from working with themes on a Shopify store (e.g. creating, publishing, deleting themes) or launching a development server for local theme development.\n\nYou can follow this [quick start guide for theme developers](https://shopify.dev/docs/themes/tools/cli) to get started.\n\n### Theme Check\n\nWe recommend using [Theme Check](https://github.com/shopify/theme-check) as a way to validate and lint your Shopify themes.\n\nWe've added Theme Check to Horizon's [list of VS Code extensions](/.vscode/extensions.json) so if you're using Visual Studio Code as your code editor of choice, you'll be prompted to install the [Theme Check VS Code](https://marketplace.visualstudio.com/items?itemName=Shopify.theme-check-vscode) extension upon opening VS Code after you've forked and cloned Horizon.\n\nYou can also run it from a terminal with the following Shopify CLI command:\n\n```bash\nshopify theme check\n```\n\nYou can follow the [theme check documentation](https://shopify.dev/docs/storefronts/themes/tools/theme-check) for more details.\n\n#### Shopify/theme-check-action\n\nHorizon runs [Theme Check](#Theme-Check) on every commit via [Shopify/theme-check-action](https://github.com/Shopify/theme-check-action).\n\n## Contributing\n\nWe are not accepting contributions to Horizon at this time.\n\n## License\n\nCopyright (c) 2025-present Shopify Inc. See [LICENSE](/LICENSE.md) for further details.\n"
  },
  {
    "path": "assets/accordion-custom.js",
    "content": "import { mediaQueryLarge, isMobileBreakpoint } from '@theme/utilities';\n\n// Accordion\n// Still extends HTMLElement over Component so that refs are still available to parent components (e.g. SortingFilterComponent)\nclass AccordionCustom extends HTMLElement {\n  /** @type {HTMLDetailsElement} */\n  get details() {\n    const details = this.querySelector('details');\n\n    if (!(details instanceof HTMLDetailsElement)) throw new Error('Details element not found');\n\n    return details;\n  }\n\n  /** @type {HTMLElement} */\n  get summary() {\n    const summary = this.details.querySelector('summary');\n\n    if (!(summary instanceof HTMLElement)) throw new Error('Summary element not found');\n\n    return summary;\n  }\n\n  get #disableOnMobile() {\n    return this.dataset.disableOnMobile === 'true';\n  }\n\n  get #disableOnDesktop() {\n    return this.dataset.disableOnDesktop === 'true';\n  }\n\n  get #closeWithEscape() {\n    return this.dataset.closeWithEscape === 'true';\n  }\n\n  #controller = new AbortController();\n\n  connectedCallback() {\n    const { signal } = this.#controller;\n\n    this.#setDefaultOpenState();\n\n    this.addEventListener('keydown', this.#handleKeyDown, { signal });\n    this.summary.addEventListener('click', this.handleClick, { signal });\n    mediaQueryLarge.addEventListener('change', this.#handleMediaQueryChange, { signal });\n  }\n\n  /**\n   * Handles the disconnect event.\n   */\n  disconnectedCallback() {\n    // Disconnect all the event listeners\n    this.#controller.abort();\n  }\n\n  /**\n   * Handles the click event.\n   * @param {Event} event - The event.\n   */\n  handleClick = (event) => {\n    const isMobile = isMobileBreakpoint();\n    const isDesktop = !isMobile;\n\n    // Stop default behaviour from the browser\n    if ((isMobile && this.#disableOnMobile) || (isDesktop && this.#disableOnDesktop)) {\n      event.preventDefault();\n      return;\n    }\n  };\n\n  /**\n   * Handles the media query change event.\n   */\n  #handleMediaQueryChange = () => {\n    this.#setDefaultOpenState();\n  };\n\n  /**\n   * Sets the default open state of the accordion based on the `open-by-default-on-mobile` and `open-by-default-on-desktop` attributes.\n   */\n  #setDefaultOpenState() {\n    const isMobile = isMobileBreakpoint();\n\n    this.details.open =\n      (isMobile && this.hasAttribute('open-by-default-on-mobile')) ||\n      (!isMobile && this.hasAttribute('open-by-default-on-desktop'));\n  }\n\n  /**\n   * Handles keydown events for the accordion\n   *\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  #handleKeyDown(event) {\n    // Close the accordion when used as a menu\n    if (event.key === 'Escape' && this.#closeWithEscape) {\n      event.preventDefault();\n\n      this.details.open = false;\n      this.summary.focus();\n    }\n  }\n}\n\nif (!customElements.get('accordion-custom')) {\n  customElements.define('accordion-custom', AccordionCustom);\n}\n"
  },
  {
    "path": "assets/anchored-popover.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce, requestIdleCallback } from '@theme/utilities';\n\n/**\n * A custom element that manages the popover + popover trigger relationship for anchoring.\n * Calculates the trigger position and inlines custom properties on the popover element\n * that can be consumed by CSS for positioning.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} popover – The popover element.\n * @property {HTMLElement} trigger – The popover trigger element.\n *\n * @extends Component<Refs>\n *\n * @example\n * ```html\n * <anchored-popover-component data-close-on-resize>\n *   <button data-ref=\"trigger\" popovertarget=\"menu\">Open Menu</button>\n *   <div data-ref=\"popover\" id=\"menu\" popover>Menu content</div>\n * </anchored-popover-component>\n * ```\n *\n * @property {string[]} requiredRefs - Required refs: 'popover' and 'trigger'\n * @property {number} [interaction_delay] - The delay in milliseconds for the hover interaction\n * @property {string} [data-close-on-resize] - When present, closes popover on window resize\n * @property {string} [data-hover-triggered] - When present, makes the popover function via pointerenter/leave\n * @property {number | null} [popoverTrigger] - The timeout for the popover trigger\n */\nexport class AnchoredPopoverComponent extends Component {\n  requiredRefs = ['popover', 'trigger'];\n  interaction_delay = 200;\n  #popoverTrigger = /** @type {number | null} */ (null);\n\n  #onTriggerEnter = () => {\n    const { trigger, popover } = this.refs;\n    trigger.dataset.hoverActive = 'true';\n    if (!popover.matches(':popover-open')) {\n      this.#popoverTrigger = setTimeout(() => {\n        if (trigger.matches('[data-hover-active]')) popover.showPopover();\n      }, this.interaction_delay);\n    }\n  };\n\n  #onTriggerLeave = () => {\n    const { trigger, popover } = this.refs;\n    delete trigger.dataset.hoverActive;\n    if (this.#popoverTrigger) clearTimeout(this.#popoverTrigger);\n    if (popover.matches(':popover-open')) {\n      this.#popoverTrigger = setTimeout(() => {\n        popover.hidePopover();\n      }, this.interaction_delay);\n    }\n  };\n\n  #onPopoverEnter = () => {\n    if (this.#popoverTrigger) clearTimeout(this.#popoverTrigger);\n  };\n\n  #onPopoverLeave = () => {\n    const { popover } = this.refs;\n    this.#popoverTrigger = setTimeout(() => {\n      popover.hidePopover();\n    }, this.interaction_delay);\n  };\n\n  /**\n   * Updates the popover position by calculating trigger element bounds\n   * and setting CSS custom properties on the popover element.\n   */\n  #updatePosition = async () => {\n    const { popover, trigger } = this.refs;\n    if (!popover || !trigger) return;\n    const positions = trigger.getBoundingClientRect();\n    popover.style.setProperty('--anchor-top', `${positions.top}`);\n    popover.style.setProperty('--anchor-right', `${window.innerWidth - positions.right}`);\n    popover.style.setProperty('--anchor-bottom', `${window.innerHeight - positions.bottom}`);\n    popover.style.setProperty('--anchor-left', `${positions.left}`);\n    popover.style.setProperty('--anchor-height', `${positions.height}`);\n    popover.style.setProperty('--anchor-width', `${positions.width}`);\n  };\n\n  /**\n   * Debounced resize handler that optionally closes the popover\n   * when the window is resized, based on the data-close-on-resize attribute.\n   */\n  #resizeListener = debounce(() => {\n    const popover = /** @type {HTMLElement} */ (this.refs.popover);\n    if (popover && popover.matches(':popover-open')) {\n      popover.hidePopover();\n    }\n  }, 100);\n\n  /**\n   * Component initialization - sets up event listeners for resize and popover toggle events.\n   */\n  connectedCallback() {\n    super.connectedCallback();\n    const { popover, trigger } = this.refs;\n    if (this.dataset.closeOnResize) {\n      popover.addEventListener('beforetoggle', (event) => {\n        const evt = /** @type {ToggleEvent} */ (event);\n        window[evt.newState === 'open' ? 'addEventListener' : 'removeEventListener']('resize', this.#resizeListener);\n      });\n    }\n    if (this.dataset.hoverTriggered) {\n      trigger.addEventListener('pointerenter', this.#onTriggerEnter);\n      trigger.addEventListener('pointerleave', this.#onTriggerLeave);\n      popover.addEventListener('pointerenter', this.#onPopoverEnter);\n      popover.addEventListener('pointerleave', this.#onPopoverLeave);\n    }\n    if (!CSS.supports('position-anchor: --trigger')) {\n      popover.addEventListener('beforetoggle', () => {\n        this.#updatePosition();\n      });\n      requestIdleCallback(() => {\n        this.#updatePosition();\n      });\n    }\n  }\n\n  /**\n   * Component cleanup - removes resize event listener.\n   */\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener('resize', this.#resizeListener);\n  }\n}\n\nif (!customElements.get('anchored-popover-component')) {\n  customElements.define('anchored-popover-component', AnchoredPopoverComponent);\n}\n"
  },
  {
    "path": "assets/announcement-bar.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * Announcement banner custom element that allows fading between content.\n * Based on the Slideshow component.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} slideshowContainer\n * @property {HTMLElement[]} [slides]\n * @property {HTMLButtonElement} [previous]\n * @property {HTMLButtonElement} [next]\n *\n * @extends {Component<Refs>}\n */\nexport class AnnouncementBar extends Component {\n  #current = 0;\n\n  /**\n   * The interval ID for automatic playback.\n   * @type {number|undefined}\n   */\n  #interval = undefined;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener('mouseenter', this.suspend);\n    this.addEventListener('mouseleave', this.resume);\n    document.addEventListener('visibilitychange', this.#handleVisibilityChange);\n\n    this.play();\n  }\n\n  next() {\n    this.current += 1;\n  }\n\n  previous() {\n    this.current -= 1;\n  }\n\n  /**\n   * Starts automatic slide playback.\n   * @param {number} [interval] - The time interval in seconds between slides.\n   */\n  play(interval = this.autoplayInterval) {\n    if (!this.autoplay) return;\n\n    this.paused = false;\n\n    this.#interval = setInterval(() => {\n      if (this.matches(':hover') || document.hidden) return;\n\n      this.next();\n    }, interval);\n  }\n\n  /**\n   * Pauses automatic slide playback.\n   */\n  pause() {\n    this.paused = true;\n    this.suspend();\n  }\n\n  get paused() {\n    return this.hasAttribute('paused');\n  }\n\n  set paused(paused) {\n    this.toggleAttribute('paused', paused);\n  }\n\n  /**\n   * Suspends automatic slide playback.\n   */\n  suspend() {\n    clearInterval(this.#interval);\n    this.#interval = undefined;\n  }\n\n  /**\n   * Resumes automatic slide playback if autoplay is enabled.\n   */\n  resume() {\n    if (!this.autoplay || this.paused) return;\n\n    this.pause();\n    this.play();\n  }\n\n  get autoplay() {\n    return Boolean(this.autoplayInterval);\n  }\n\n  get autoplayInterval() {\n    const interval = this.getAttribute('autoplay');\n    const value = parseInt(`${interval}`, 10);\n\n    if (Number.isNaN(value)) return undefined;\n\n    return value * 1000;\n  }\n\n  get current() {\n    return this.#current;\n  }\n\n  set current(current) {\n    this.#current = current;\n\n    let relativeIndex = current % (this.refs.slides ?? []).length;\n    if (relativeIndex < 0) {\n      relativeIndex += (this.refs.slides ?? []).length;\n    }\n\n    this.refs.slides?.forEach((slide, index) => {\n      slide.setAttribute('aria-hidden', `${index !== relativeIndex}`);\n    });\n  }\n\n  /**\n   * Pause the slideshow when the page is hidden.\n   */\n  #handleVisibilityChange = () => (document.hidden ? this.pause() : this.resume());\n}\n\nif (!customElements.get('announcement-bar-component')) {\n  customElements.define('announcement-bar-component', AnnouncementBar);\n}\n"
  },
  {
    "path": "assets/auto-close-details.js",
    "content": "(function autoCloseDetails() {\n  document.addEventListener('click', function (event) {\n    const detailsToClose = [...document.querySelectorAll('details[data-auto-close-details][open]')].filter(\n      (element) => {\n        const closingOn = window.innerWidth < 750 ? 'mobile' : 'desktop';\n        return (\n          element.getAttribute('data-auto-close-details')?.includes(closingOn) &&\n          !(event.target instanceof Node && element.contains(event.target))\n        );\n      }\n    );\n\n    for (const detailsElement of detailsToClose) detailsElement.removeAttribute('open');\n  });\n})();\n"
  },
  {
    "path": "assets/base.css",
    "content": "* {\n  box-sizing: border-box;\n}\n\nbody {\n  color: var(--color-foreground);\n  background: var(--color-background);\n  display: flex;\n  flex-direction: column;\n  margin: 0;\n  min-height: 100svh;\n  font-variation-settings: 'slnt' 0;\n}\n\n:root {\n  --hover-lift-amount: 4px;\n  --hover-scale-amount: 1.03;\n  --hover-subtle-zoom-amount: 1.015;\n  --hover-shadow-color: var(--color-shadow);\n  --hover-transition-duration: 0.25s;\n  --hover-transition-timing: ease-out;\n  --surface-transition-duration: 0.3s;\n  --surface-transition-timing: var(--ease-out-quad);\n  --submenu-animation-speed: 360ms;\n  --submenu-animation-easing: cubic-bezier(0.25, 0.1, 0.25, 1);\n}\n\nhtml {\n  /* Firefox */\n  scrollbar-width: thin;\n  scrollbar-color: rgb(var(--color-foreground-rgb) / var(--opacity-40)) var(--color-background);\n  scroll-behavior: smooth;\n}\n\nhtml[scroll-lock] {\n  overflow: hidden;\n}\n\nimg,\npicture,\nvideo,\ncanvas,\nsvg {\n  display: block;\n  max-width: 100%;\n}\n\nimg {\n  width: 100%;\n  height: auto;\n}\n\ninput,\ntextarea,\nselect {\n  font: inherit;\n  border-radius: var(--style-border-radius-inputs);\n}\n\ninput:hover,\ntextarea:hover {\n  background-color: var(--color-input-hover-background);\n}\n\n/** override ios and firefox defaults */\nselect {\n  background-color: var(--color-background);\n  color: currentcolor;\n}\n\n.collection-card,\n.featured-blog-posts-card {\n  width: 100%;\n  position: relative;\n  height: 100%;\n}\n\n/* Editorial layout */\n.resource-list:not(.hidden--desktop) .collection-card--flexible-aspect-ratio,\n.resource-list:not(.hidden--desktop) .blog-post-card--flexible-aspect-ratio {\n  .collection-card__image,\n  .featured-blog-posts-card__image,\n  .blog-placeholder-svg {\n    aspect-ratio: 99;\n    height: 100%;\n  }\n\n  .collection-card__inner,\n  .featured-blog-posts-card__inner {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n  }\n\n  .collection-card__content,\n  .featured-blog-posts-card__content {\n    flex-shrink: 0;\n  }\n\n  &:not(.collection-card--image-bg) .collection-card__content,\n  .featured-blog-posts-card__content {\n    height: auto;\n  }\n}\n\n.collection-card__inner,\n.featured-blog-posts-card__inner {\n  width: 100%;\n  overflow: hidden;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  z-index: var(--layer-flat);\n  pointer-events: none;\n}\n\n.collection-card__content,\n.featured-blog-posts-card__content {\n  display: flex;\n  position: relative;\n  height: 100%;\n  width: 100%;\n  gap: var(--gap);\n}\n\n.collection-card__link,\n.featured-blog-posts-card__link {\n  position: absolute;\n  inset: 0;\n\n  /* allows focus outline to have radius in supported browsers */\n  border-radius: var(--border-radius);\n}\n\n.product-card,\n.collection-card,\n.resource-card,\n.predictive-search-results__card--product,\n.predictive-search-results__card {\n  position: relative;\n  transition: transform var(--hover-transition-duration) var(--hover-transition-timing),\n    box-shadow var(--hover-transition-duration) var(--hover-transition-timing);\n  z-index: var(--layer-flat);\n}\n\n.product-card__link {\n  position: absolute;\n  inset: 0;\n}\n\n.product-card__content {\n  position: relative;\n}\n\n.product-card__content {\n  cursor: pointer;\n}\n\n.product-card__content slideshow-component {\n  --cursor: pointer;\n}\n\n.predictive-search-results__card .product-card,\n.predictive-search-results__card .collection-card,\n.predictive-search-results__card .resource-card {\n  transition: none;\n  will-change: auto;\n}\n\n@media (any-pointer: fine) and (prefers-reduced-motion: no-preference) {\n  .card-hover-effect-lift .product-card:hover,\n  .card-hover-effect-lift .collection-card:hover,\n  .card-hover-effect-lift .resource-card:hover,\n  .card-hover-effect-lift .predictive-search-results__card:hover {\n    transform: translateY(calc(-1 * var(--hover-lift-amount)));\n  }\n\n  .card-hover-effect-lift .header .product-card:hover,\n  .card-hover-effect-lift .header .collection-card:hover,\n  .card-hover-effect-lift .header .resource-card:hover,\n  .card-hover-effect-lift .header-drawer .product-card:hover,\n  .card-hover-effect-lift .header-drawer .collection-card:hover,\n  .card-hover-effect-lift .header-drawer .resource-card:hover {\n    transform: none;\n  }\n\n  .card-hover-effect-scale .product-card:hover,\n  .card-hover-effect-scale .collection-card:hover,\n  .card-hover-effect-scale .resource-card:hover,\n  .card-hover-effect-scale .predictive-search-results__card:hover {\n    transform: scale(var(--hover-scale-amount));\n  }\n\n  .card-hover-effect-scale .header .product-card:hover,\n  .card-hover-effect-scale .header .collection-card:hover,\n  .card-hover-effect-scale .header .resource-card:hover,\n  .card-hover-effect-scale .header-drawer .product-card:hover,\n  .card-hover-effect-scale .header-drawer .collection-card:hover,\n  .card-hover-effect-scale .header-drawer .resource-card:hover {\n    transform: none;\n  }\n\n  .card-hover-effect-subtle-zoom .card-gallery,\n  .card-hover-effect-subtle-zoom .collection-card__image,\n  .card-hover-effect-subtle-zoom .product-card__image,\n  .card-hover-effect-subtle-zoom .resource-card__image {\n    overflow: hidden;\n    transition: transform var(--hover-transition-duration) var(--hover-transition-timing);\n  }\n\n  .predictive-search-results__card .card-gallery,\n  .predictive-search-results__card .collection-card__image,\n  .predictive-search-results__card .product-card__image,\n  .predictive-search-results__card .resource-card__image {\n    transition: none;\n  }\n\n  .card-hover-effect-subtle-zoom .product-card:hover .card-gallery,\n  .card-hover-effect-subtle-zoom .collection-card:hover .collection-card__image,\n  .card-hover-effect-subtle-zoom .product-card:hover .product-card__image,\n  .card-hover-effect-subtle-zoom .resource-card:hover .resource-card__image,\n  .card-hover-effect-subtle-zoom .predictive-search-results__card:hover {\n    transform: scale(var(--hover-subtle-zoom-amount));\n  }\n\n  .card-hover-effect-subtle-zoom .header .product-card:hover .card-gallery,\n  .card-hover-effect-subtle-zoom .header .collection-card:hover .collection-card__image,\n  .card-hover-effect-subtle-zoom .header .product-card:hover .product-card__image,\n  .card-hover-effect-subtle-zoom .header .resource-card:hover .resource-card__image,\n  .card-hover-effect-subtle-zoom .header-drawer .product-card:hover .card-gallery,\n  .card-hover-effect-subtle-zoom .header-drawer .collection-card:hover .collection-card__image,\n  .card-hover-effect-subtle-zoom .header-drawer .product-card:hover .product-card__image,\n  .card-hover-effect-subtle-zoom .header-drawer .resource-card:hover .resource-card__image {\n    transform: none;\n  }\n\n  .predictive-search-results__card .product-card:hover,\n  .predictive-search-results__card .collection-card:hover,\n  .predictive-search-results__card .resource-card:hover,\n  .header .product-card:hover,\n  .header .collection-card:hover,\n  .header .resource-card:hover,\n  .header-drawer .product-card:hover,\n  .header-drawer .collection-card:hover,\n  .header-drawer .resource-card:hover {\n    transform: none;\n    box-shadow: none;\n  }\n}\n\ndialog {\n  /* the ::backdrop inherits from the originating element, custom properties must be set on the dialog element */\n  --backdrop-color-rgb: var(--color-shadow-rgb);\n\n  background-color: var(--color-background);\n  color: var(--color-foreground);\n}\n\np,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  overflow-wrap: break-word;\n}\n\n.wrap-text {\n  overflow-wrap: break-word;\n  word-break: break-word;\n  hyphens: auto;\n}\n\np:empty {\n  display: none;\n}\n\n:first-child:is(p, h1, h2, h3, h4, h5, h6),\n:first-child:empty + :where(p, h1, h2, h3, h4, h5, h6) {\n  margin-block-start: 0;\n}\n\n/* Remove bottom margin from last text item, or previous to last if the last is empty */\n:last-child:is(p, h1, h2, h3, h4, h5, h6),\n:where(p, h1, h2, h3, h4, h5, h6):nth-child(2):has(+ :last-child:empty) {\n  margin-block-end: 0;\n}\n\n/* view transitions */\n@media (prefers-reduced-motion: no-preference) {\n  @view-transition {\n    navigation: auto;\n  }\n\n  /* Keep page interactive while view transitions are running */\n  :root {\n    view-transition-name: none;\n  }\n\n  /* Have the root transition during page navigation */\n  html:active-view-transition-type(page-navigation),\n  html:active-view-transition-type(product-image-transition) {\n    view-transition-name: root-custom;\n  }\n\n  ::view-transition {\n    pointer-events: none;\n  }\n\n  html:active-view-transition-type(page-navigation) main[data-page-transition-enabled='true'] {\n    view-transition-name: main-content;\n  }\n\n  html:active-view-transition-type(page-navigation) main[data-product-transition='true'][data-template*='product'] {\n    view-transition-name: none;\n  }\n\n  ::view-transition-old(main-content) {\n    animation: var(--view-transition-old-main-content);\n  }\n\n  ::view-transition-new(main-content) {\n    animation: var(--view-transition-new-main-content);\n  }\n\n  html:active-view-transition-type(product-image-transition) {\n    [data-view-transition-type='product-image-transition'] {\n      view-transition-name: product-image-transition;\n    }\n\n    [data-view-transition-type='product-details'] {\n      view-transition-name: product-details;\n    }\n  }\n\n  ::view-transition-group(product-image-transition) {\n    z-index: 1;\n  }\n\n  ::view-transition-group(product-image-transition),\n  ::view-transition-group(product-details) {\n    animation-duration: var(--animation-speed);\n    animation-timing-function: var(--animation-easing);\n  }\n\n  ::view-transition-old(product-image-transition),\n  ::view-transition-new(product-image-transition) {\n    block-size: 100%;\n    overflow: hidden;\n    object-fit: cover;\n    animation-duration: 0.25s;\n    animation-timing-function: var(--animation-easing);\n  }\n\n  ::view-transition-new(product-details) {\n    animation: var(--view-transition-new-main-content);\n  }\n}\n\n/* Focus */\n*:focus-visible {\n  outline: var(--focus-outline-width) solid currentcolor;\n  outline-offset: var(--focus-outline-offset);\n}\n\n@supports not selector(:focus-visible) {\n  *:focus {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n}\n\n.focus-inset {\n  outline-offset: calc(var(--focus-outline-width) * -1);\n}\n\n/* Layout */\n.content-for-layout {\n  flex: 1;\n}\n\n/* Set up page widths & margins */\n.page-width-wide,\n.page-width-normal,\n.page-width-narrow,\n.page-width-content {\n  --page-margin: 16px;\n}\n\n@media screen and (min-width: 750px) {\n  .page-width-wide,\n  .page-width-normal,\n  .page-width-narrow,\n  .page-width-content {\n    --page-margin: 40px;\n  }\n}\n\n.page-width-wide {\n  /* NOTE: This results in a page width of 2400px because of how we set up margins with grid */\n  --page-content-width: var(--wide-page-width);\n  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));\n}\n\n.page-width-normal {\n  --page-content-width: var(--normal-page-width);\n  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));\n}\n\n.page-width-narrow,\n.page-width-content {\n  /* NOTE: This results in a page width of 1400px because of how we set up margins with grid */\n  --page-content-width: var(--narrow-page-width);\n  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));\n}\n\n.page-width-content {\n  --page-content-width: var(--normal-content-width);\n  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));\n}\n\n/* Section width full vs. page\n   The reason we use a grid to contain the section is to allow for the section to have a\n   full-width background image even if the section content is constrained by the page width. Do not try\n   to rewrite this to max-width: --page-width; margin: 0 auto;, it doesn't work. */\n.section {\n  --full-page-grid-central-column-width: min(\n    var(--page-width) - var(--page-margin) * 2,\n    calc(100% - var(--page-margin) * 2)\n  );\n  --full-page-grid-margin: minmax(var(--page-margin), 1fr);\n  --full-page-grid-with-margins: var(--full-page-grid-margin) var(--full-page-grid-central-column-width)\n    var(--full-page-grid-margin);\n\n  /* Utility variable gives the grid's first column width. Provides an offset width for components like carousels */\n  --util-page-margin-offset: max(\n    var(--page-margin),\n    calc((100% - min(var(--page-content-width), 100% - var(--page-margin) * 2)) / 2)\n  );\n\n  /* Offset for full-width sections to account for the page margin,\n  used for Marquee — note that --util-page-margin-offset doesn't work here */\n  --full-page-margin-inline-offset: calc(((100vw - var(--full-page-grid-central-column-width)) / 2) * -1);\n\n  width: 100%;\n\n  /* This is required to make background images work, which are <img> rendered absolutely */\n  position: relative;\n\n  /* Set up the grid */\n  display: grid;\n  grid-template-columns: var(--full-page-grid-with-margins);\n  min-height: var(--section-min-height, 'auto');\n}\n\n/* Place all direct children in the center column by default */\n.section > * {\n  grid-column: 2;\n}\n\n/* Make the actual section background transparent, and instead apply it to a separate sibling element to enable stacking with hero shadow  */\n.shopify-section:not(.header-section) :is(.section, .cart-summary) {\n  background: transparent;\n}\n\n.shopify-section:not(.header-section):has(.section) {\n  position: relative;\n}\n\n.shopify-section:not(.header-section) .section-background {\n  content: '';\n  position: absolute;\n  inset: 0;\n  z-index: var(--layer-section-background);\n}\n\n/* For page-width sections, all content goes in the center column */\n.section--page-width > * {\n  grid-column: 2;\n}\n\n/* For full-width sections, content spans all columns */\n.section--full-width > * {\n  grid-column: 1 / -1;\n}\n\n@media screen and (max-width: 749px) {\n  .section--mobile-full-width > * {\n    grid-column: 1 / -1;\n  }\n}\n\n/* Some page-width sections should still extend all the way to the right edge of the page, e.g. collection carousel */\n.section--page-width.section--full-width-right > * {\n  grid-column: 2 / 4;\n}\n\n/* For full-width sections with margin, content still spans full width but with space on the sides */\n.section--full-width.section--full-width-margin > * {\n  grid-column: 1 / -1;\n\n  @media screen and (min-width: 750px) {\n    padding-left: var(--page-margin);\n    padding-right: var(--page-margin);\n  }\n}\n\n/* Some section content break out to full width of the page */\n.section > .force-full-width {\n  grid-column: 1 / -1;\n}\n\n.section--height-small {\n  --section-min-height: var(--section-height-small);\n}\n\n.section--height-medium {\n  --section-min-height: var(--section-height-medium);\n}\n\n.section--height-large {\n  --section-min-height: var(--section-height-large);\n}\n\n.section--height-full-screen {\n  --section-min-height: 100svh;\n}\n\n.section-content-wrapper.section-content-wrapper {\n  min-height: calc(var(--section-min-height, 'auto') - var(--section-height-offset, 0px));\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n/* Utility */\n\n.hidden {\n  /* stylelint-disable-next-line declaration-no-important */\n  display: none !important;\n}\n\n@media screen and (max-width: 749px) {\n  .hidden--mobile,\n  .mobile\\:hidden {\n    /* stylelint-disable-next-line declaration-no-important */\n    display: none !important;\n  }\n}\n\n@media screen and (min-width: 750px) {\n  .hidden--desktop,\n  .desktop\\:hidden {\n    /* stylelint-disable-next-line declaration-no-important */\n    display: none !important;\n  }\n}\n\n.hide-when-empty:empty {\n  /* stylelint-disable-next-line declaration-no-important */\n  display: none !important;\n}\n\n.visually-hidden:not(:focus, :active) {\n  /* stylelint-disable-next-line declaration-no-important */\n  position: absolute !important;\n  overflow: hidden;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  border: 0;\n  clip: rect(0 0 0 0);\n  /* stylelint-disable-next-line declaration-no-important */\n  word-wrap: normal !important;\n}\n\n@media screen and (max-width: 749px) {\n  .is-visually-hidden-mobile:not(:focus, :active) {\n    /* stylelint-disable-next-line declaration-no-important */\n    position: absolute !important;\n    overflow: hidden;\n    width: 1px;\n    height: 1px;\n    margin: -1px;\n    padding: 0;\n    border: 0;\n    clip: rect(0 0 0 0);\n    /* stylelint-disable-next-line declaration-no-important */\n    word-wrap: normal !important;\n  }\n}\n\n.contents {\n  display: contents;\n}\n\n.flex {\n  display: flex;\n  gap: var(--gap-md);\n}\n\n.grid {\n  --centered-column-number: 12;\n  --full-width-column-number: 14;\n  --centered: column-1 / span var(--centered-column-number);\n  --full-width: column-0 / span var(--full-width-column-number);\n\n  display: flex;\n  flex-direction: column;\n}\n\n@media screen and (min-width: 750px) {\n  .grid {\n    display: grid;\n    gap: 0;\n    grid-template-columns: var(--margin-4xl) repeat(var(--centered-column-number), minmax(0, 1fr)) var(--margin-4xl);\n    grid-template-areas: 'column-0 column-1 column-2 column-3 column-4 column-5 column-6 column-7 column-8 column-9 column-10 column-11 column-12 column-13';\n  }\n}\n\n@media screen and (min-width: 1400px) {\n  .grid {\n    grid-template-columns:\n      1fr repeat(\n        var(--centered-column-number),\n        minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))\n      )\n      1fr;\n  }\n}\n\n.flex {\n  display: flex;\n  gap: var(--gap-md);\n}\n\n.flip-x {\n  scale: -1 1;\n}\n\n.flip-y {\n  scale: 1 -1;\n}\n\n.list-unstyled {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.text-left {\n  --text-align: left;\n\n  text-align: left;\n}\n\n.text-center {\n  --text-align: center;\n\n  text-align: center;\n}\n\n.text-right {\n  --text-align: right;\n\n  text-align: right;\n}\n\n.text-inherit {\n  color: inherit;\n}\n\n.user-select-text {\n  user-select: text;\n}\n\n.justify-left {\n  justify-content: left;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-right {\n  justify-content: right;\n}\n\n.title--aligned-center {\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n}\n\n.background-image-container {\n  overflow: hidden;\n  position: absolute;\n  inset: 0;\n  opacity: var(--image-opacity);\n}\n\n.background-image-container img,\n.background-image-container svg {\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n}\n\n.background-image-fit img,\n.background-image-fit svg {\n  object-fit: contain;\n}\n\n.svg-wrapper {\n  color: currentcolor;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  width: var(--icon-size-sm);\n  height: var(--icon-size-sm);\n  pointer-events: none;\n}\n\n.svg-wrapper--smaller {\n  width: var(--icon-size-2xs);\n  height: var(--icon-size-2xs);\n}\n\n.svg-wrapper--small {\n  width: var(--icon-size-xs);\n  height: var(--icon-size-xs);\n}\n\n.svg-wrapper > svg {\n  width: var(--icon-size-sm);\n  height: var(--icon-size-sm);\n}\n\n.relative {\n  position: relative;\n}\n\n/* Icons */\n.icon-success,\n.icon-error {\n  width: var(--icon-size-md);\n  height: var(--icon-size-md);\n  flex-shrink: 0;\n}\n\n.icon-success {\n  color: var(--color-success);\n}\n\n.icon-error {\n  fill: var(--color-error);\n}\n\n.icon-default {\n  fill: currentColor;\n}\n\n[data-placeholder='true'] * {\n  cursor: default;\n}\n\nslideshow-component [data-placeholder='true'] * {\n  cursor: grab;\n}\n\n/* Base text and heading styles */\nbody,\n.paragraph:not(.button),\n.paragraph > *,\n.text-block.paragraph :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-paragraph--family);\n  font-style: var(--font-paragraph--style);\n  font-weight: var(--font-paragraph--weight);\n  font-size: var(--font-paragraph--size);\n  line-height: var(--font-paragraph--line-height);\n  text-transform: var(--font-paragraph--case);\n  -webkit-font-smoothing: antialiased;\n  color: var(--color, var(--color-foreground));\n}\n\n/* Ensure inputs with type presets maintain minimum 16px on mobile to prevent iOS zoom */\n@media screen and (max-width: 1200px) {\n  input.paragraph.paragraph,\n  input.paragraph.paragraph:not([type]),\n  textarea.paragraph.paragraph,\n  select.paragraph.paragraph {\n    font-size: max(1rem, var(--font-paragraph--size));\n  }\n}\n\n.paragraph > small {\n  font-size: smaller;\n}\n\n/* Typography presets */\n\nh1,\n.h1.h1,\n.text-block.h1 > *,\n.text-block.h1 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h1--family);\n  font-style: var(--font-h1--style);\n  font-weight: var(--font-h1--weight);\n  font-size: var(--font-h1--size);\n  line-height: var(--font-h1--line-height);\n  letter-spacing: var(--font-h1--letter-spacing);\n  text-transform: var(--font-h1--case);\n  color: var(--color, var(--font-h1-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h1.h1,\n  textarea.h1.h1,\n  select.h1.h1 {\n    font-size: max(1rem, var(--font-h1--size));\n  }\n}\n\nh2,\n.h2.h2,\n.text-block.h2 > *,\n.text-block.h2 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h2--family);\n  font-style: var(--font-h2--style);\n  font-weight: var(--font-h2--weight);\n  font-size: var(--font-h2--size);\n  line-height: var(--font-h2--line-height);\n  letter-spacing: var(--font-h2--letter-spacing);\n  text-transform: var(--font-h2--case);\n  color: var(--color, var(--font-h2-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h2.h2,\n  textarea.h2.h2,\n  select.h2.h2 {\n    font-size: max(1rem, var(--font-h2--size));\n  }\n}\n\nh3,\n.h3,\n.h3.h3,\n.text-block.h3 > *,\n.text-block.h3 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h3--family);\n  font-style: var(--font-h3--style);\n  font-weight: var(--font-h3--weight);\n  font-size: var(--font-h3--size);\n  line-height: var(--font-h3--line-height);\n  letter-spacing: var(--font-h3--letter-spacing);\n  text-transform: var(--font-h3--case);\n  color: var(--color, var(--font-h3-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h3,\n  textarea.h3,\n  select.h3 {\n    font-size: max(1rem, var(--font-h3--size));\n  }\n}\n\nh4,\n.h4.h4,\n.text-block.h4 > *,\n.text-block.h4 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h4--family);\n  font-style: var(--font-h4--style);\n  font-weight: var(--font-h4--weight);\n  font-size: var(--font-h4--size);\n  line-height: var(--font-h4--line-height);\n  letter-spacing: var(--font-h4--letter-spacing);\n  text-transform: var(--font-h4--case);\n  color: var(--color, var(--font-h4-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h4.h4,\n  textarea.h4.h4,\n  select.h4.h4 {\n    font-size: max(1rem, var(--font-h4--size));\n  }\n}\n\nh5,\n.h5.h5,\n.text-block.h5 > *,\n.text-block.h5 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h5--family);\n  font-style: var(--font-h5--style);\n  font-weight: var(--font-h5--weight);\n  font-size: var(--font-h5--size);\n  line-height: var(--font-h5--line-height);\n  letter-spacing: var(--font-h5--letter-spacing);\n  text-transform: var(--font-h5--case);\n  color: var(--color, var(--font-h5-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h5.h5,\n  textarea.h5.h5,\n  select.h5.h5 {\n    font-size: max(1rem, var(--font-h5--size));\n  }\n}\n\nh6,\n.h6.h6,\n.text-block.h6 > *,\n.text-block.h6 :is(h1, h2, h3, h4, h5, h6) {\n  font-family: var(--font-h6--family);\n  font-style: var(--font-h6--style);\n  font-weight: var(--font-h6--weight);\n  font-size: var(--font-h6--size);\n  line-height: var(--font-h6--line-height);\n  letter-spacing: var(--font-h6--letter-spacing);\n  text-transform: var(--font-h6--case);\n  color: var(--color, var(--font-h6-color));\n}\n\n@media screen and (max-width: 1200px) {\n  input.h6.h6,\n  textarea.h6.h6,\n  select.h6.h6 {\n    font-size: max(1rem, var(--font-h6--size));\n  }\n}\n\n:first-child:is(.h1, .h2, .h3, .h4, .h5, .h6) {\n  margin-block-start: 0;\n}\n\n:last-child:is(.h1, .h2, .h3, .h4, .h5, .h6) {\n  margin-block-end: 0;\n}\n\n/* Links */\na {\n  --button-color: var(--color, var(--color-primary));\n\n  color: var(--button-color);\n  text-decoration-color: transparent;\n  text-decoration-thickness: 0.075em;\n  text-underline-offset: 0.125em;\n  transition: text-decoration-color var(--animation-speed) var(--animation-easing),\n    color var(--animation-speed) var(--animation-easing);\n}\n\n:is(h1, h2, h3, h4, h5, h6, p) > a:hover {\n  --button-color: var(--color, var(--color-primary-hover));\n}\n\n/* Add underline to text using our paragraph styles only. */\np:not(.h1, .h2, .h3, .h4, .h5, .h6) a:where(:not(.button, .button-secondary)),\n.rte :is(p, ul, ol, table):not(.h1, .h2, .h3, .h4, .h5, .h6) a:where(:not(.button, .button-secondary)) {\n  text-decoration-color: currentcolor;\n\n  &:hover {\n    text-decoration-color: transparent;\n    color: var(--color-primary-hover);\n  }\n}\n\n.container-background-image {\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center center;\n}\n\ndetails[open] .summary-closed {\n  display: none;\n}\n\ndetails:not([open]) .summary-open {\n  display: none;\n}\n\ndetails[open] > summary .icon-animated > svg {\n  transform: rotate(180deg);\n}\n\n/* iOS fix: hide the default arrow on the summary */\nsummary::-webkit-details-marker {\n  display: none;\n}\n\n/* When header is transparent, pull the first main content section up to sit under the floating header */\nbody:has(.header[transparent]) .content-for-layout > .shopify-section:first-child {\n  margin-top: calc(var(--header-group-height) * -1);\n}\n\nbody:has(.header[transparent]) #header-group > .header-section {\n  z-index: var(--layer-sticky);\n}\n\n/* All other header group content should be beneath the floating header,\nbut above the rest of the page content */\nbody:has(.header[transparent]) #header-group > *:not(.header-section) {\n  z-index: calc(var(--layer-sticky) - 1);\n}\n\n/* Featured collection block */\n.featured-collection-block {\n  width: 100%;\n}\n\n/* Product grid */\n.product-grid-container {\n  display: block;\n  width: 100%;\n  padding-block: var(--padding-block-start) var(--padding-block-end);\n\n  @media screen and (min-width: 750px) {\n    display: grid;\n  }\n}\n\n.product-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--product-grid-gap);\n  margin: auto;\n  padding: 0;\n  list-style: none;\n}\n\n@media screen and (min-width: 750px) {\n  .product-grid {\n    grid-template-columns: var(--product-grid-columns-desktop);\n  }\n}\n\n.product-grid :is(h3, p) {\n  margin: 0;\n}\n\n.product-grid__item {\n  border: var(--product-card-border-width) solid rgb(var(--color-border-rgb) / var(--product-card-border-opacity));\n}\n\n.product-grid--organic[product-grid-view='default'] .product-grid__item {\n  height: fit-content;\n}\n\n.product-grid__card.product-grid__card {\n  display: flex;\n  flex-flow: column nowrap;\n  gap: var(--product-card-gap);\n  align-items: var(--product-card-alignment);\n  text-decoration: none;\n  color: var(--color, var(--color-foreground));\n  padding-block: var(--padding-block-start) var(--padding-block-end);\n  padding-inline: var(--padding-inline-start) var(--padding-inline-end);\n  overflow: hidden;\n}\n\n[product-grid-view='zoom-out'] .product-grid__card {\n  row-gap: var(--padding-xs);\n}\n\n[product-grid-view='default'] {\n  --product-grid-gap: 16px;\n  --padding-block-start: 24px;\n  --padding-block-end: 24px;\n  --padding-inline-start: 0px;\n  --padding-inline-end: 0px;\n}\n\n[product-grid-view='default'] .product-grid__item {\n  padding-block: 0;\n}\n\n[product-grid-view='mobile-single'],\n.product-grid-mobile--large {\n  @media screen and (max-width: 749px) {\n    grid-template-columns: 1fr;\n  }\n}\n\n.product-grid__card .group-block > * {\n  @media screen and (max-width: 749px) {\n    flex-direction: column;\n  }\n}\n\nul[product-grid-view='zoom-out'] .product-grid__card > * {\n  display: none;\n}\n\nul[product-grid-view='zoom-out'] .product-grid__card .card-gallery {\n  display: block;\n}\n\n[product-grid-view='zoom-out']\n  .card-gallery\n  > :is(quick-add-component, .product-badges, slideshow-component > slideshow-controls) {\n  display: none;\n}\n\nul[product-grid-view='zoom-out'] .card-gallery > img {\n  display: block;\n}\n\n[product-grid-view='zoom-out'] {\n  --product-grid-columns-desktop: repeat(\n    10,\n    minmax(clamp(50px, calc(100% - 9 * var(--product-grid-gap)) / 10, 80px), 1fr)\n  );\n}\n\n.product-grid-view-zoom-out--details {\n  display: none;\n}\n\n.product-grid-view-zoom-out--details .h4,\n.product-grid-view-zoom-out--details span,\n.product-grid-view-zoom-out--details s {\n  font-size: var(--font-size--xs);\n  font-family: var(--font-paragraph--family);\n}\n\n.product-grid-view-zoom-out--details span {\n  font-weight: 500;\n}\n\n.product-grid-view-zoom-out--details .h4 {\n  line-height: 1.3;\n  font-weight: 400;\n}\n\n.product-grid-view-zoom-out--details > span.h6,\n.product-grid-view-zoom-out--details > div.h6 > product-price {\n  display: inline-block;\n  line-height: 0;\n  margin-top: var(--margin-2xs);\n}\n\n.product-grid-view-zoom-out--details > span.h6 > *,\n.product-grid-view-zoom-out--details > div.h6 > * > * {\n  line-height: 1.2;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root:active-view-transition-type(product-grid) {\n    details[open] floating-panel-component {\n      view-transition-name: panel-content;\n\n      .checkbox *,\n      .facets__pill-label {\n        transition: none;\n      }\n\n      .facets--vertical & {\n        view-transition-name: none;\n      }\n    }\n\n    .product-grid {\n      view-transition-name: product-grid;\n    }\n\n    footer {\n      view-transition-name: footer;\n    }\n\n    .product-grid__item,\n    floating-panel-component {\n      transition: none;\n    }\n  }\n}\n\n::view-transition-group(panel-content) {\n  z-index: 1;\n}\n\n::view-transition-new(product-grid) {\n  animation-delay: 150ms;\n  animation-name: fadeInUp;\n  animation-duration: var(--animation-speed);\n  animation-timing-function: var(--animation-easing);\n}\n\nresults-list[initialized] {\n  .product-grid__item {\n    transition: opacity var(--animation-speed) var(--animation-easing),\n      transform var(--animation-speed) var(--animation-easing);\n\n    @starting-style {\n      opacity: 0;\n      transform: translateY(10px);\n    }\n  }\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n/* Collection and product list cards have equal heights */\n:is(.product-grid__item, .resource-list__item) .product-card {\n  display: grid;\n  height: 100%;\n}\n\n/* Video background */\n.video-background,\n.video-background * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\n.video-background--cover * {\n  object-fit: cover;\n}\n\n.video-background--contain * {\n  object-fit: contain;\n}\n\n.text-block {\n  width: 100%;\n}\n\n.text-block > *:first-child,\n.text-block > *:first-child:empty + * {\n  margin-block-start: 0;\n}\n\n.text-block > *:last-child,\n.text-block > *:has(+ *:last-child:empty) {\n  margin-block-end: 0;\n}\n\n/* This is to deal with the margin applied to the p when custom styles are enabled. The p isn't the first child anymore due to the style tag */\n.text-block > style + * {\n  margin-block-start: 0;\n}\n\n/* Dialog */\n.dialog-modal {\n  border: none;\n  box-shadow: var(--shadow-popover);\n\n  @media screen and (min-width: 750px) {\n    border-radius: var(--style-border-radius-popover);\n    max-width: var(--normal-content-width);\n  }\n\n  @media screen and (max-width: 749px) {\n    max-width: 100%;\n    max-height: 100%;\n    height: 100dvh;\n    width: 100dvw;\n    padding: var(--padding-md);\n  }\n}\n\n.dialog-modal::backdrop {\n  transition: backdrop-filter var(--animation-speed) var(--animation-easing);\n  backdrop-filter: brightness(1);\n  background: rgb(var(--backdrop-color-rgb) / var(--backdrop-opacity));\n}\n\n.dialog-modal[open] {\n  animation: elementSlideInTop var(--animation-speed) var(--animation-easing) forwards;\n\n  &::backdrop {\n    animation: backdropFilter var(--animation-speed) var(--animation-easing) forwards;\n    transition: opacity var(--animation-speed) var(--animation-easing);\n  }\n}\n\n.dialog-modal.dialog-closing {\n  animation: elementSlideOutTop var(--animation-speed) var(--animation-easing) forwards;\n\n  &::backdrop {\n    opacity: 0;\n  }\n}\n\n/* stylelint-disable value-keyword-case */\n.dialog-drawer {\n  --dialog-drawer-opening-animation: move-and-fade;\n  --dialog-drawer-closing-animation: move-and-fade;\n}\n\n.dialog-drawer--right {\n  --dialog-drawer-opening-animation: move-and-fade;\n  --dialog-drawer-closing-animation: move-and-fade;\n}\n/* stylelint-enable value-keyword-case */\n\n.dialog-drawer[open] {\n  --start-x: var(--custom-transform-from, 100%);\n  --end-x: var(--custom-transform-to, 0px);\n  --start-opacity: 1;\n\n  animation: var(--dialog-drawer-opening-animation) var(--animation-speed) var(--animation-easing) forwards;\n}\n\n.dialog-drawer[open].dialog-closing {\n  --start-x: 0px;\n  --end-x: 100%;\n  --start-opacity: 1;\n  --end-opacity: 1;\n\n  animation: var(--dialog-drawer-closing-animation) var(--animation-speed) var(--animation-easing);\n}\n\n.dialog-drawer--right[open] {\n  --start-x: -100%;\n  --start-opacity: 1;\n}\n\n.dialog-drawer--right[open].dialog-closing {\n  --start-x: 0px;\n  --end-x: -100%;\n  --start-opacity: 1;\n  --end-opacity: 1;\n\n  animation: var(--dialog-drawer-closing-animation) var(--animation-speed) var(--animation-easing);\n}\n\n/* Buttons */\n.button,\n.button-secondary,\nbutton.shopify-payment-button__button--unbranded {\n  --text-align: center;\n\n  display: grid;\n  align-content: center;\n  text-decoration: none;\n  text-align: var(--text-align);\n  color: var(--button-color);\n  appearance: none;\n  background-color: var(--button-background-color);\n  border: none;\n  font-family: var(--font-paragraph--family);\n  font-style: var(--font-paragraph--style);\n  font-weight: var(--font-paragraph--weight);\n  font-size: var(--font-paragraph--size);\n  line-height: var(--font-paragraph--line-height);\n  margin-block: 0;\n  transition: color var(--animation-speed) var(--animation-easing),\n    box-shadow var(--animation-speed) var(--animation-easing),\n    background-color var(--animation-speed) var(--animation-easing);\n  cursor: pointer;\n  width: fit-content;\n  box-shadow: inset 0 0 0 var(--button-border-width) var(--button-border-color);\n  padding-block: var(--button-padding-block);\n  padding-inline: var(--button-padding-inline);\n}\n\n.button {\n  font-family: var(--button-font-family-primary);\n  text-transform: var(--button-text-case-primary);\n  border-radius: var(--style-border-radius-buttons-primary);\n}\n\n.button:not(.button-secondary, .button-unstyled) {\n  outline-color: var(--button-background-color);\n}\n\n.button-secondary {\n  font-family: var(--button-font-family-secondary);\n  text-transform: var(--button-text-case-secondary);\n  border-radius: var(--style-border-radius-buttons-secondary);\n}\n\nbutton.shopify-payment-button__button--unbranded {\n  font-family: var(--button-font-family-primary);\n  text-transform: var(--button-text-case-primary);\n}\n\ntextarea,\ninput:not([type='checkbox'], [type='radio']) {\n  background-color: var(--color-input-background);\n  border-color: var(--color-input-border);\n}\n\ntextarea::placeholder,\ninput::placeholder {\n  color: var(--color-input-text);\n}\n\ntextarea:not(:placeholder-shown)::placeholder,\ninput:not(:placeholder-shown)::placeholder {\n  opacity: 0;\n}\n\n/* The declaration above is messing with buttons that have an attribute of hidden as it overwrites the display value */\n.button[hidden] {\n  display: none;\n}\n\n.button[aria-disabled='true'],\n.button-secondary[aria-disabled='true'],\n.button:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.button,\nbutton.shopify-payment-button__button--unbranded {\n  --button-color: var(--color-primary-button-text);\n  --button-background-color: var(--color-primary-button-background);\n  --button-border-color: var(--color-primary-button-border);\n  --button-border-width: var(--style-border-width-primary);\n}\n\n.button:hover,\nbutton.shopify-payment-button__button--unbranded:hover:not([disabled]) {\n  --button-color: var(--color-primary-button-hover-text);\n  --button-background-color: var(--color-primary-button-hover-background);\n  --button-border-color: var(--color-primary-button-hover-border);\n}\n\n.button-secondary {\n  --button-color: var(--color-secondary-button-text);\n  --button-background-color: var(--color-secondary-button-background);\n  --button-border-color: var(--color-secondary-button-border);\n  --button-border-width: var(--style-border-width-secondary);\n}\n\n.button-secondary:hover {\n  --button-color: var(--color-secondary-button-hover-text);\n  --button-background-color: var(--color-secondary-button-hover-background);\n  --button-border-color: var(--color-secondary-button-hover-border);\n}\n\n/* Needed to override the default Shopify styles */\nbutton.shopify-payment-button__button--unbranded:hover:not([disabled]) {\n  background-color: var(--button-background-color);\n}\n\n.button-unstyled {\n  display: block;\n  padding: 0;\n  background-color: inherit;\n  color: inherit;\n  border: 0;\n  border-radius: 0;\n  overflow: hidden;\n  box-shadow: none;\n  font-family: var(--font-paragraph--family);\n  font-style: var(--font-paragraph--style);\n  font-size: var(--font-paragraph--size);\n}\n\n.button-unstyled:hover {\n  background-color: inherit;\n}\n\n.button-unstyled--with-icon {\n  color: var(--color-foreground);\n  display: flex;\n  gap: var(--gap-2xs);\n  align-items: center;\n}\n\n.button-unstyled--transparent {\n  background-color: transparent;\n  box-shadow: none;\n}\n\n/* Show more */\n\n.show-more__button {\n  color: var(--color-primary);\n  cursor: pointer;\n}\n\n.show-more__button:hover {\n  @media screen and (min-width: 750px) {\n    color: var(--color-primary-hover);\n  }\n}\n\n.show-more__label {\n  text-align: start;\n  font-size: var(--font-size--body-md);\n  font-family: var(--font-paragraph--family);\n}\n\n.show-more__button .svg-wrapper {\n  width: var(--icon-size-xs);\n  height: var(--icon-size-xs);\n}\n\n.show-more[data-expanded='true'] .show-more__label--more,\n.show-more[data-expanded='false'] .show-more__label--less {\n  display: none;\n}\n\n.link {\n  display: inline-block;\n  text-align: center;\n}\n\nshopify-accelerated-checkout,\nshopify-accelerated-checkout-cart {\n  --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-primary);\n  --shopify-accelerated-checkout-button-block-size: var(--height-buy-buttons);\n}\n\n.product-form-buttons:has(.add-to-cart-button.button-secondary)\n  :is(shopify-accelerated-checkout, shopify-accelerated-checkout-cart) {\n  --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-secondary);\n  --shopify-accelerated-checkout-button-block-size: var(--height-buy-buttons);\n}\n\n/* Collapsible row */\n\n.icon-caret svg {\n  transition: transform var(--animation-speed) var(--animation-easing);\n}\n\n.icon-caret--forward svg {\n  transform: rotate(-90deg);\n}\n\n.icon-caret--backward svg {\n  transform: rotate(90deg);\n}\n\nsummary {\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n  list-style: none;\n  padding-block: var(--padding-sm);\n}\n\nsummary:hover {\n  color: var(--color-primary-hover);\n}\n\nsummary .svg-wrapper {\n  margin-inline-start: auto;\n  height: var(--icon-size-xs);\n  width: var(--icon-size-xs);\n  transition: transform var(--animation-speed) var(--animation-easing);\n}\n\n/* Shared plus/minus icon animations */\nsummary .icon-plus :is(.horizontal, .vertical),\n.show-more__button .icon-plus :is(.horizontal, .vertical) {\n  transition: transform var(--animation-speed) var(--animation-easing);\n  transform: rotate(0deg);\n  transform-origin: 50% 50%;\n  opacity: 1;\n}\n\ndetails[open] > summary .icon-plus .horizontal,\n.details-open > summary .icon-plus .horizontal,\n.show-more:where([data-expanded='true']) .show-more__button .icon-plus .horizontal {\n  transform: rotate(90deg);\n}\n\ndetails[open] > summary .icon-plus .vertical,\n.details-open > summary .icon-plus .vertical,\n.show-more:where([data-expanded='true']) .show-more__button .icon-plus .vertical {\n  transform: rotate(90deg);\n  opacity: 0;\n}\n\n/* Product Media */\nmedia-gallery {\n  display: block;\n  width: 100%;\n}\n\n:where(media-gallery, .product-grid__item) {\n  .media-gallery__grid {\n    grid-template-columns: 1fr;\n    gap: var(--image-gap);\n  }\n}\n\n.product-media-gallery__slideshow--single-media slideshow-container {\n  @media screen and (max-width: 749px) {\n    grid-area: unset;\n  }\n}\n\n:not(.dialog-zoomed-gallery) > .product-media-container {\n  --slide-width: 100%;\n\n  display: flex;\n  aspect-ratio: var(--gallery-aspect-ratio, var(--media-preview-ratio));\n  max-height: var(--constrained-height);\n  width: var(--slide-width, 100%);\n\n  /* Relative position needed for video and 3d models */\n  position: relative;\n  overflow: hidden;\n\n  &:where(.constrain-height) {\n    /* arbitrary offset value based on average theme spacing and header height */\n    --viewport-offset: 400px;\n    --constrained-min-height: 300px;\n    --constrained-height: max(var(--constrained-min-height), calc(100vh - var(--viewport-offset)));\n\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  @supports (--test: round(up, 100%, 1px)) {\n    /* width and overflow forces children to shrink to parent width */\n    --slide-width: round(up, 100%, 1px);\n  }\n}\n\nmedia-gallery:where(.media-gallery--grid) .media-gallery__grid {\n  display: none;\n}\n\nmedia-gallery.media-gallery--grid .media-gallery__grid .product-media-container {\n  /* Needed for safari to stretch to full grid height */\n  height: 100%;\n}\n\n.product-media :is(deferred-media, product-model) {\n  position: absolute;\n}\n\n@media screen and (max-width: 749px) {\n  .product-media-container.constrain-height {\n    max-height: none;\n  }\n}\n\n@media screen and (min-width: 750px) {\n  .product-media-container.constrain-height {\n    --viewport-offset: var(--header-height, 100px);\n    --constrained-min-height: 500px;\n  }\n\n  body:has(header-component[transparent]) .product-media-container.constrain-height {\n    --viewport-offset: 0px;\n  }\n\n  .media-gallery--two-column .media-gallery__grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .media-gallery--large-first-image .product-media-container:first-child,\n  .media-gallery--two-column .product-media-container:only-child {\n    /* First child spans 2 columns */\n    grid-column: span 2;\n  }\n\n  /* Display grid view as a carousel on mobile, grid on desktop */\n  media-gallery:is(.media-gallery--grid) slideshow-component {\n    display: none;\n  }\n\n  media-gallery:where(.media-gallery--grid) .media-gallery__grid {\n    display: grid;\n  }\n}\n\n.product-media-container--model {\n  /* Usefull when view in your space is shown */\n  flex-direction: column;\n}\n\n.shopify-model-viewer-ui__controls-area {\n  bottom: calc(var(--minimum-touch-target) + var(--padding-sm));\n}\n\n.product-media-container img {\n  aspect-ratio: inherit;\n  object-fit: contain;\n}\n\n.product-media-container.media-fit-contain img {\n  object-position: center center;\n}\n\n.product-media-container.media-fit {\n  --product-media-fit: cover;\n\n  img {\n    object-fit: var(--product-media-fit);\n  }\n}\n\n/* Media gallery zoom dialog */\n.product-media-container__zoom-button {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  z-index: var(--layer-flat);\n  cursor: zoom-in;\n  background-color: transparent;\n\n  &:hover {\n    background-color: transparent;\n  }\n}\n\nzoom-dialog dialog {\n  width: 100vw;\n  height: 100vh;\n  border: none;\n  margin: 0;\n  padding: 0;\n  max-width: 100%;\n  max-height: 100%;\n  background: #fff;\n  opacity: 0;\n  transition: opacity var(--animation-speed) var(--animation-easing);\n  scrollbar-width: none;\n\n  &[open] {\n    opacity: 1;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    scroll-behavior: smooth;\n  }\n\n  &::backdrop {\n    background: transparent;\n  }\n}\n\n/* Animate the UI elements in only after the view transition is complete */\n.close-button {\n  position: fixed;\n  top: var(--margin-lg);\n  right: var(--margin-lg);\n  width: var(--minimum-touch-target);\n  height: var(--minimum-touch-target);\n  z-index: var(--layer-flat);\n  background-color: transparent;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  /* For the outline radius */\n  border-radius: 50%;\n}\n\n/* This triggers iOS < 16.4. The outline bug is not recognized as a lack of @supports */\n\n@supports not (background-color: rgb(from red 150 g b / alpha)) {\n  /**\n    There is a bug in safari < 16.4 that causes the outline to not follow the elements border radius. This is a workaround.\n    Using element selector to increase specificity.\n  **/\n\n  .close-button:focus-visible {\n    outline: none;\n    overflow: visible;\n  }\n\n  .close-button:focus-visible::after {\n    content: '';\n    position: absolute;\n    inset: calc(-1 * var(--focus-outline-offset));\n    border: var(--focus-outline-width) solid currentColor;\n    border-radius: 50%;\n    display: inherit;\n  }\n}\n\n.dialog--closed .close-button {\n  animation: elementSlideOutBottom calc(var(--animation-speed) * 0.5) var(--animation-easing) forwards;\n}\n\n.dialog-thumbnails-list-container {\n  position: fixed;\n  width: 100%;\n  bottom: 0;\n  display: flex;\n  z-index: var(--layer-raised);\n}\n\n.dialog-thumbnails-list {\n  --active-thumbnail-border-color: rgb(var(--color-border-rgb) / var(--media-border-opacity));\n\n  position: relative;\n  display: inline-flex;\n  flex-direction: row;\n  gap: 8px;\n  bottom: 0;\n  overflow-x: auto;\n  opacity: 0;\n  padding: var(--padding-lg);\n  margin-inline: auto;\n  scrollbar-width: none;\n  animation: thumbnailsSlideInBottom calc(var(--animation-speed) * 0.75) var(--animation-easing) forwards;\n  animation-delay: calc(var(--animation-speed) * 1.5);\n}\n\n.dialog--closed .dialog-thumbnails-list {\n  animation: thumbnailsSlideOutBottom var(--animation-speed) var(--animation-easing) forwards;\n}\n\n@media screen and (min-width: 750px) {\n  .dialog-thumbnails-list {\n    position: fixed;\n    flex-direction: column;\n    inset: 50% var(--margin-lg) auto auto;\n    right: 0;\n    max-height: calc(100vh - 200px);\n    overflow-y: auto;\n    animation: thumbnailsSlideInTop var(--spring-d220-b0-duration) var(--spring-d220-b0-easing) forwards;\n    animation-delay: calc(var(--spring-d220-b0-duration) * 0.5);\n  }\n\n  .dialog--closed .dialog-thumbnails-list {\n    animation: thumbnailsSlideOutTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n}\n\n.dialog-thumbnails-list__thumbnail {\n  width: var(--thumbnail-width);\n  height: auto;\n  transition: transform var(--animation-speed) var(--animation-easing);\n  flex-shrink: 0;\n  border-radius: var(--media-radius);\n\n  img {\n    height: 100%;\n    object-fit: cover;\n    border-radius: var(--media-radius);\n    aspect-ratio: var(--aspect-ratio);\n  }\n\n  &:is([aria-selected='true']) {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: calc(var(--focus-outline-offset) / 2);\n    border: var(--style-border-width) solid var(--active-thumbnail-border-color);\n  }\n}\n\n@supports (anchor-name: --test) {\n  .dialog-thumbnails-list:has(.dialog-thumbnails-list__thumbnail:is([aria-selected='true']))::after {\n    --inset-offset: calc(var(--focus-outline-offset) / 2);\n\n    content: '';\n    position: absolute;\n    inset: anchor(top) anchor(right) anchor(bottom) anchor(left);\n    position-anchor: --selected-thumbnail;\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: calc(var(--focus-outline-offset) / 2);\n    border: var(--style-border-width) solid var(--active-thumbnail-border-color);\n    border-radius: var(--media-radius);\n    z-index: var(--layer-raised);\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .dialog-thumbnails-list:has(.dialog-thumbnails-list__thumbnail:is([aria-selected='true']))::after {\n      transition-property: inset;\n      transition-duration: var(--spring-d180-b0-duration);\n      transition-timing-function: var(--spring-d180-b0-easing);\n    }\n  }\n\n  .dialog-thumbnails-list__thumbnail:is([aria-selected='true']) {\n    outline: none;\n    border: none;\n    anchor-name: --selected-thumbnail;\n  }\n}\n\n.close-button:hover {\n  background-color: transparent;\n  opacity: 0.8;\n}\n\n.close-button svg {\n  width: var(--icon-size-xs);\n  height: var(--icon-size-xs);\n}\n\n/* Product media */\n.product-media {\n  display: flex;\n  flex: 1;\n}\n\n/* If the product media is already providing an image cover, hide images provided by sibling deferred-media */\n.product-media__image ~ * .deferred-media__poster-image {\n  display: none;\n}\n\n/* If the product media is playing, hide the preview image */\n.product-media-container:has(.deferred-media__playing) .product-media__image {\n  opacity: 0;\n  transition: opacity var(--animation-speed) var(--animation-easing);\n}\n\n/* Deferred media & Product model  */\n:is(product-model, deferred-media) {\n  /* Height needed to make sure when it's set to be stretched, it takes the full height */\n  height: 100%;\n  width: 100%;\n  position: relative;\n}\n\nproduct-model model-viewer,\n/* Media that have a poster button sibling providing the size should be absolute-positioned.\nOtherwise, it should be a block to rely on its own size */\n:is(deferred-media, product-model) > .deferred-media__poster-button ~ *:not(template) {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n\n  /* Required to make sure the absolute position respects the padding of the wrapper: */\n  padding: inherit;\n}\n\nslideshow-slide .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {\n  bottom: var(--padding-sm);\n  right: var(--padding-sm);\n}\n\n.dialog-zoomed-gallery .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {\n  /* Move the controls above the thumbnails. Need to calculate the height of the thumbnails list */\n  bottom: calc(var(--thumbnail-width) / var(--media-preview-ratio) + var(--padding-lg) * 2);\n  right: var(--padding-lg);\n}\n\n@media screen and (max-width: 749px) {\n  slideshow-component:has(:not(.mobile\\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter))\n    .shopify-model-viewer-ui__controls-area {\n    /* Position the controls just above the counter */\n    bottom: calc(var(--minimum-touch-target) + var(--padding-sm));\n  }\n}\n\n@media screen and (min-width: 750px) {\n  slideshow-component:has(:not(.desktop\\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter))\n    .shopify-model-viewer-ui__controls-area {\n    /* Position the controls just above the counter */\n    bottom: calc(var(--minimum-touch-target) + var(--padding-sm));\n  }\n\n  .dialog-zoomed-gallery .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {\n    /* Move the controls up to match the padding on the thumbnails */\n    bottom: var(--padding-lg);\n\n    /* Move the controls to the left of the thumbnails list on the right */\n    right: calc(var(--thumbnail-width) + var(--padding-lg) * 2);\n  }\n}\n\n:is(deferred-media, .video-placeholder-wrapper).border-style {\n  /* Apply the border radius to the video */\n  overflow: hidden;\n}\n\ndeferred-media {\n  /* The overflow hidden in the deferred-media won't let the button show the focus ring */\n  &:has(:focus-visible) {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  @supports not selector(:focus-visible) {\n    &:has(:focus) {\n      outline: var(--focus-outline-width) solid currentcolor;\n      outline-offset: var(--focus-outline-offset);\n    }\n  }\n}\n\n.deferred-media__poster-button {\n  width: 100%;\n  height: 100%;\n  aspect-ratio: var(--video-aspect-ratio, auto);\n}\n\n.deferred-media__poster-button.deferred-media__playing {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n}\n\ndeferred-media img {\n  height: 100%;\n  object-fit: cover;\n  transition: opacity 0.3s ease;\n}\n\ndeferred-media iframe {\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: none;\n  aspect-ratio: var(--size-style-aspect-ratio, auto);\n}\n\ndeferred-media[data-media-loaded] img {\n  opacity: 0;\n}\n\n.deferred-media__poster-icon,\n.video-placeholder-wrapper__poster-icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.deferred-media__poster-icon svg,\n.video-placeholder-wrapper__poster-icon svg {\n  width: var(--button-size);\n  height: var(--button-size);\n  color: var(--color-white);\n  filter: drop-shadow(var(--shadow-button));\n\n  &:hover {\n    color: rgb(var(--color-white-rgb) / var(--opacity-80));\n  }\n\n  @media screen and (min-width: 750px) {\n    width: 4rem;\n    height: 4rem;\n  }\n}\n\ndeferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) {\n  /* only apply this on the video block not product media */\n  object-fit: cover;\n  height: 100%;\n  aspect-ratio: var(--size-style-aspect-ratio, auto);\n}\n\n.button-shopify-xr {\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: var(--padding-md);\n}\n\n.button-shopify-xr > svg {\n  width: var(--icon-size-sm);\n  height: var(--icon-size-sm);\n  margin-inline-end: var(--margin-md);\n}\n\n.button-shopify-xr[data-shopify-xr-hidden] {\n  display: none;\n}\n\n/* Swatches */\n.swatch {\n  --color-border: rgb(var(--color-foreground-rgb) / var(--style-border-swatch-opacity));\n  --min-width-unitless: 15.9999; /* want to avoid division by 0 */\n  --min-height-unitless: 15.9999; /* want to avoid division by 0 */\n  --min-height: 16px;\n  --min-width: 16px;\n\n  /* mobile values */\n  --scaling-factor: 0.5;\n  --max-swatch-size: 28px;\n  --max-pill-size: 20px;\n  --max-filter-size: 32px;\n\n  /* From the settings */\n  --offset-swatch-width: calc(var(--variant-picker-swatch-width-unitless) - var(--min-width-unitless));\n  --offset-swatch-height: calc(var(--variant-picker-swatch-height-unitless) - var(--min-height-unitless));\n\n  /**\n    Offset values are obtained from the following formulas:\n      offset-width = width - min-width\n      offset-height = height - min-height\n\n    The offset-scaled-width and heigth are obtained by extending the line from\n    [min,min] to [W,H] and taking the intersection with a square that starts at\n    [min,min] and ends at [max,max].\n\n    The extending line forms right angle triangles with the [min,min]->[max,max]\n    box that enable us to derive the following formulas\n\n    We also want the result to always be smaller than the input (pdp > everywhere else)\n    by some scaling factor.\n  */\n  --offset-scaled-width: calc(\n    var(--scaling-factor) * var(--offset-swatch-width) / var(--offset-swatch-height) * var(--offset-max-swatch-size)\n  );\n  --offset-scaled-height: calc(\n    var(--scaling-factor) * var(--offset-swatch-height) / var(--offset-swatch-width) * var(--offset-max-swatch-size)\n  );\n  --offset-max-swatch-size: calc(var(--max-swatch-size) - var(--min-width));\n\n  /* width = min(m + sU, (m + s * W'/H' * M'), M) */\n  --swatch-width: min(\n    calc(var(--min-width) + var(--scaling-factor) * var(--offset-swatch-width) * 1px),\n    calc(var(--min-width) + var(--offset-scaled-width)),\n    var(--max-swatch-size)\n  );\n\n  /* height = min(m + sV, (m + s * H'/W' * M'), M) */\n  --swatch-height: min(\n    calc(var(--min-height) + var(--scaling-factor) * var(--offset-swatch-height) * 1px),\n    calc(var(--min-height) + var(--offset-scaled-height)),\n    var(--max-swatch-size)\n  );\n\n  display: block;\n  background: var(--swatch-background);\n  background-position: var(--swatch-focal-point, center);\n  border-radius: var(--variant-picker-swatch-radius);\n  border: var(--style-border-swatch-width) var(--style-border-swatch-style) var(--color-border);\n  width: var(--swatch-width);\n  height: var(--swatch-height);\n\n  /* This is different than `background-size: cover` because we use `box-sizing: border-box`,\n   * doing it like makes the background clip under the border without repeating.\n   */\n  background-size: var(--swatch-width) var(--swatch-height);\n\n  &.swatch--unavailable {\n    border-style: dashed;\n  }\n\n  &.swatch--unscaled {\n    /* for when you want fixed sizing (e.g. pdp) */\n    --swatch-width: var(--variant-picker-swatch-width);\n    --swatch-height: var(--variant-picker-swatch-height);\n  }\n\n  &.swatch--filter {\n    --swatch-width: var(--max-filter-size);\n    --swatch-height: var(--max-filter-size);\n\n    border-radius: var(--variant-picker-swatch-radius);\n  }\n\n  &.swatch--pill {\n    --swatch-width: var(--max-pill-size);\n    --swatch-height: var(--max-pill-size);\n\n    border-radius: var(--variant-picker-swatch-radius);\n  }\n\n  /* swatches in filters and pills always have a border  */\n  &.swatch--filter,\n  &.swatch--pill {\n    --style-border-swatch-width: var(--variant-picker-border-width);\n    --style-border-swatch-style: var(--variant-picker-border-style);\n    --color-border: rgb(var(--color-foreground-rgb) / var(--variant-picker-border-opacity));\n  }\n\n  &.swatch--variant-image {\n    background-size: cover;\n  }\n\n  @media screen and (min-width: 750px) {\n    /* desktop values */\n    --max-swatch-size: 32px;\n    --max-pill-size: 16px;\n    --max-filter-size: 28px;\n    --scaling-factor: 0.65;\n  }\n}\n\n.variant-picker .variant-option--buttons label:has(.swatch) {\n  border-radius: var(--variant-picker-swatch-radius);\n}\n\n/* Variant option component */\n.variant-option {\n  --options-border-radius: var(--variant-picker-button-radius);\n  --options-border-width: var(--variant-picker-button-border-width);\n  --variant-option-padding-inline: var(--padding-md);\n}\n\n.variant-option + .variant-option {\n  margin-top: var(--padding-lg);\n}\n\n.variant-option--swatches {\n  --options-border-radius: var(--variant-picker-swatch-radius);\n\n  width: 100%;\n\n  overflow-list::part(list) {\n    padding-block: var(--overflow-list-padding-block, 0);\n    padding-inline: var(--overflow-list-padding-inline, 0);\n  }\n}\n\n.variant-option--swatches > overflow-list {\n  justify-content: var(--product-swatches-alignment);\n\n  @media screen and (max-width: 749px) {\n    justify-content: var(--product-swatches-alignment-mobile);\n  }\n}\n\n.variant-option--buttons {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--gap-sm);\n  margin: 0;\n  padding: 0;\n  border: none;\n}\n\n.variant-option--buttons legend {\n  padding: 0;\n  margin-block-end: var(--margin-xs);\n}\n\n.variant-option__swatch-value {\n  padding-inline-start: var(--padding-xs);\n  color: rgb(var(--color-foreground-rgb) / var(--opacity-70));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .variant-option__button-label,\n  .variant-option__select-wrapper,\n  .variant-option__button-label::before,\n  .variant-option__button-label::after,\n  .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true'])\n    .variant-option__button-label__pill,\n  .variant-option__button-label:not(.variant-option__button-label--has-swatch) svg line:last-of-type {\n    transition-duration: var(--animation-speed);\n    transition-timing-function: var(--animation-easing);\n  }\n\n  .variant-option__button-label__pill {\n    transition-property: transform;\n  }\n\n  .variant-option__button-label:not(.variant-option__button-label--has-swatch) svg line:last-of-type {\n    transition-property: clip-path;\n  }\n\n  .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true'])\n    .variant-option__button-label__pill {\n    transition-property: transform;\n  }\n\n  .variant-option__button-label::after {\n    transition-property: clip-path;\n  }\n\n  .variant-option__button-label::before {\n    transition-property: border-color;\n  }\n\n  .variant-option__select-wrapper,\n  .variant-option__button-label {\n    transition-property: background-color, border-color, color;\n  }\n}\n\n.variant-option__button-label {\n  --variant-picker-stroke-color: var(--color-variant-border);\n\n  cursor: pointer;\n  display: flex;\n  flex: 0 0 3.25em;\n  align-items: center;\n  position: relative;\n  padding-block: var(--padding-sm);\n  padding-inline: var(--padding-lg);\n  border: var(--options-border-width) solid var(--color-variant-border);\n  border-radius: var(--options-border-radius);\n  overflow: clip;\n  justify-content: center;\n  min-height: 3.25em;\n  min-width: fit-content;\n  white-space: nowrap;\n  background-color: var(--color-variant-background);\n  color: var(--color-variant-text);\n  gap: 0;\n\n  &:hover,\n  &:hover:has([aria-disabled='true']):has([data-option-available='false']) {\n    background-color: var(--color-variant-hover-background);\n    border-color: var(--color-variant-hover-border);\n    color: var(--color-variant-hover-text);\n  }\n\n  /* we need something like overflow-clip-margin to use the pseudoelement but it doesn't work in Safari */\n\n  /* so instead use the layered background image trick */\n  &:not(.variant-option__button-label--has-swatch):has([data-option-available='false']) {\n    border-width: 0;\n  }\n\n  /* ::after/::before act as a fake border for the button style variant */\n\n  /* ::after is the unavailable variant border that clips in */\n  &:not(.variant-option__button-label--has-swatch)::before,\n  &:has([data-option-available='false']):not(.variant-option__button-label--has-swatch)::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    border: var(--options-border-width) solid var(--color-selected-variant-border);\n    border-radius: inherit;\n    pointer-events: none;\n    z-index: 2;\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(var(--clip, 0 0 0 0));\n  }\n\n  &:has([data-option-available='false']):not(.variant-option__button-label--has-swatch)::before {\n    inset: 0;\n  }\n\n  &:not(.variant-option__button-label--has-swatch)::before {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(0 0 0 0);\n    border-color: var(--color-variant-border);\n    inset: calc(var(--options-border-width) * -1);\n  }\n\n  &:has(:checked):not(.variant-option__button-label--has-swatch, :has([data-option-available='false']))::before {\n    border-color: var(--color-selected-variant-border);\n  }\n\n  /* setting left/right accounts for variant buttons of different widths */\n  &:not(:has(:checked)):has(~ label > :checked),\n  &:has(:checked):has(~ label > [data-previous-checked='true']) {\n    .variant-option__button-label__pill {\n      right: 0;\n      left: unset;\n    }\n  }\n\n  &:has([data-previous-checked='true']) ~ label:has([data-current-checked='true']),\n  &:has(:checked) ~ label {\n    .variant-option__button-label__pill {\n      left: 0;\n      right: unset;\n    }\n  }\n\n  &:not(:has(:checked)):has(~ label > :checked) {\n    --pill-offset: calc(100% + 1px);\n  }\n\n  &:has(:checked) ~ label {\n    --pill-offset: calc(-100% - 1px);\n  }\n\n  &:has([data-current-checked='true']):first-of-type\n    ~ label:last-of-type:not(.variant-option__button-label--has-swatch),\n  &:not(:has(:checked)):has(~ label > :checked):not(.variant-option__button-label--has-swatch) {\n    --clip: 0 0 0 100%;\n  }\n\n  &:not(:has([data-current-checked='true'])):first-of-type:has(~ label:last-of-type > :checked):not(\n      .variant-option__button-label--has-swatch\n    ),\n  &:has(:checked) ~ label:not(.variant-option__button-label--has-swatch) {\n    --clip: 0 100% 0 0;\n  }\n\n  &:has([data-previous-checked='true'], [data-current-checked='true']) .variant-option__button-label__pill {\n    width: max(var(--pill-width-current, 100%), var(--pill-width-previous, 100%));\n  }\n\n  @media screen and (min-width: 750px) {\n    padding: var(--padding-xs) var(--variant-option-padding-inline);\n  }\n}\n\n/* wrap around only for 3 or more variants in a row */\n\n/* the more complex selector rules here produce the wrap around effect for first/last variants */\n.variant-option--buttons:has(:nth-of-type(3)) {\n  .variant-option__button-label:has([data-current-checked='true']):first-of-type ~ label:last-of-type {\n    --pill-offset: calc(100% + 1px);\n  }\n\n  .variant-option__button-label:not(:has([data-current-checked='true'])):first-of-type:has(\n      ~ label:last-of-type > :checked\n    ) {\n    --pill-offset: calc(-100% - 1px);\n  }\n}\n\n.variant-option__button-label__pill {\n  background: var(--color-selected-variant-background);\n  position: absolute;\n  top: calc(var(--options-border-width) * -1);\n  bottom: calc(var(--options-border-width) * -1);\n  border-radius: inherit;\n  pointer-events: none;\n  width: 100%;\n  transform: translateX(var(--pill-offset, 0));\n}\n\n.variant-option__button-label__text {\n  pointer-events: none;\n  text-align: start;\n  text-wrap: auto;\n  z-index: 2;\n}\n\n.variant-option--equal-width-buttons {\n  --variant-min-width: clamp(44px, calc(var(--variant-option-padding-inline) * 2 + var(--variant-ch)), 100%);\n\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(var(--variant-min-width), 1fr));\n\n  .variant-option__button-label {\n    min-width: var(--variant-min-width);\n  }\n\n  .variant-option__button-label__text {\n    text-align: center;\n    text-wrap: balance;\n  }\n}\n\n.variant-option__button-label:has(:focus-visible) {\n  --variant-picker-stroke-color: var(--color-foreground);\n\n  border-color: var(--color-foreground);\n  outline: var(--focus-outline-width) solid var(--color-foreground);\n  outline-offset: var(--focus-outline-offset);\n}\n\n.variant-option__button-label--has-swatch {\n  --focus-outline-radius: var(--variant-picker-swatch-radius);\n\n  padding: 0;\n  border: none;\n  flex-basis: auto;\n  min-height: auto;\n}\n\n/* Override global label:has(input) display rule with higher specificity */\n.variant-option__button-label--has-swatch:has(input) {\n  display: block;\n}\n\n.variant-option__button-label:has(:checked) {\n  color: var(--color-selected-variant-text);\n  border-color: var(--color-selected-variant-border);\n}\n\n.variant-option__button-label:has(:checked):hover {\n  border-color: var(--color-selected-variant-hover-border);\n  color: var(--color-selected-variant-hover-text);\n\n  .variant-option__button-label__pill {\n    background-color: var(--color-selected-variant-hover-background);\n  }\n}\n\n.variant-option__button-label:has([data-option-available='false']) {\n  color: rgb(var(--color-variant-text-rgb) / var(--opacity-60));\n}\n\n.variant-option__button-label--has-swatch:hover {\n  outline: var(--focus-outline-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55));\n  outline-offset: var(--focus-outline-offset);\n}\n\n.variant-option__button-label--has-swatch:has(:checked) {\n  --focus-outline: var(--focus-outline-width) solid var(--color-foreground);\n\n  outline: var(--focus-outline);\n  outline-offset: var(--focus-outline-offset);\n}\n\n/* This triggers iOS < 16.4. The outline bug is not recognized as a lack of @supports */\n@supports not (background-color: rgb(from red 150 g b / alpha)) {\n  /** There is a bug in safari < 16.4 that causes the outline to not follow the elements border radius. This is a workaround. **/\n  .variant-option__button-label--has-swatch:has(:checked),\n  .variant-option__button-label:has(:focus-visible) .swatch {\n    outline: none;\n    position: relative;\n    overflow: visible;\n  }\n\n  .variant-option__button-label--has-swatch:has(:checked)::after,\n  .variant-option__button-label:has(:focus-visible) .swatch::after {\n    content: '';\n    position: absolute;\n    inset: calc(-1 * var(--focus-outline-offset));\n    border: var(--focus-outline);\n    border-radius: var(--focus-outline-radius, 50%);\n    background-color: transparent;\n    display: inherit;\n  }\n}\n\n.variant-option__button-label:has([data-option-available='false']):has(:checked) {\n  background-color: inherit;\n  color: rgb(var(--color-variant-text-rgb) / var(--opacity-60));\n}\n\n.variant-option__button-label input {\n  /* remove the checkbox from the page flow */\n  position: absolute;\n\n  /* set the dimensions to match those of the label */\n  inset: 0;\n\n  /* hide it */\n  opacity: 0;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  height: 100%;\n  aspect-ratio: unset;\n  border: none;\n  border-radius: 0;\n  background: transparent;\n  appearance: auto;\n  display: block;\n  cursor: pointer;\n}\n\n.variant-option__button-label svg {\n  position: absolute;\n  left: var(--options-border-width);\n  top: var(--options-border-width);\n  height: calc(100% - (var(--options-border-width) * 2));\n  width: calc(100% - (var(--options-border-width) * 2));\n  cursor: pointer;\n  pointer-events: none;\n  stroke-width: var(--style-border-width);\n  stroke: var(--variant-picker-stroke-color);\n}\n\n.variant-option__button-label:not(.variant-option__button-label--has-swatch) svg {\n  stroke: var(--color-variant-border);\n\n  line {\n    stroke-width: var(--options-border-width);\n  }\n\n  line:last-of-type {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(var(--clip, 0 0 0 0));\n    stroke: rgb(var(--color-variant-text-rgb) / 1);\n  }\n}\n\n.sticky-content {\n  position: sticky;\n  top: var(--sticky-header-offset, 0);\n  z-index: var(--layer-flat);\n}\n\n@media screen and (min-width: 750px) {\n  .sticky-content--desktop,\n  .sticky-content--desktop.full-height--desktop > .group-block {\n    position: sticky;\n    top: var(--sticky-header-offset, 0);\n    z-index: var(--layer-flat);\n  }\n}\n\n.price,\n.compare-at-price,\n.unit-price {\n  white-space: nowrap;\n}\n\n.unit-price {\n  display: block;\n  font-size: min(0.85em, var(--font-paragraph--size));\n  color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n}\n\n.tax-note.tax-note.tax-note {\n  font-size: min(0.85em, var(--font-paragraph--size));\n  font-weight: var(--font-paragraph--weight);\n  color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n}\n\nproduct-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) {\n  margin-block: 0;\n}\n\n.compare-at-price {\n  opacity: 0.4;\n  text-decoration-line: line-through;\n  text-decoration-thickness: 1.5px;\n}\n\n.card-gallery {\n  position: relative;\n}\n\n@container (max-width: 70px) {\n  .card-gallery:hover .quick-add__button {\n    display: none;\n  }\n}\n\n/* Hide \"Add\" button when \"Choose\" button is shown */\n[data-quick-add-button='choose'] add-to-cart-component {\n  display: none;\n}\n\n/* Hide \"Choose\" button when \"Add\" button is shown */\n[data-quick-add-button='add'] .quick-add__button--choose {\n  display: none;\n}\n\n/* Drawer */\n.drawer {\n  background-color: var(--color-background);\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: var(--sidebar-width);\n  z-index: var(--layer-raised);\n  transform: translateX(-120%);\n  transition: transform var(--animation-speed) var(--animation-easing);\n}\n\n.drawer[data-open='true'] {\n  transform: translateX(0);\n}\n\n.drawer-toggle {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  cursor: pointer;\n}\n\n.drawer__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: var(--drawer-header-block-padding) var(--drawer-inline-padding);\n}\n\n.drawer__title {\n  font-size: var(--font-h2--size);\n  margin: 0;\n}\n\n.drawer__close {\n  width: var(--minimum-touch-target);\n  height: var(--minimum-touch-target);\n}\n\n.drawer__content {\n  display: block;\n  padding: var(--drawer-content-block-padding) var(--drawer-inline-padding);\n  width: 100%;\n}\n\n/* Background overlay */\n.background-overlay {\n  position: relative;\n\n  &::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: var(--background-overlay-color, rgb(0 0 0 / 15%));\n  }\n}\n\n/* Spacing style */\n.spacing-style {\n  --spacing-scale: var(--spacing-scale-md);\n\n  @media screen and (min-width: 990px) {\n    --spacing-scale: var(--spacing-scale-default);\n  }\n\n  /* Must disable this, when you use these with calc and another unit type, things break — see logo.liquid */\n  /* stylelint-disable length-zero-no-unit */\n  --padding-block: 0px;\n  --padding-block-start: var(--padding-block, 0px);\n  --padding-block-end: var(--padding-block, 0px);\n  --padding-inline: 0px;\n  --padding-inline-start: var(--padding-inline, 0px);\n  --padding-inline-end: var(--padding-inline, 0px);\n  --margin-block: 0px;\n  --margin-block-start: var(--margin-block, 0px);\n  --margin-block-end: var(--margin-block, 0px);\n  --margin-inline: 0px;\n  --margin-inline-start: var(--margin-inline, 0px);\n  --margin-inline-end: var(--margin-inline, 0px);\n}\n\n.spacing-style,\n.inherit-spacing {\n  padding-block: calc(var(--padding-block-start) + var(--section-top-offset, 0px)) var(--padding-block-end);\n  padding-inline: var(--padding-inline-start) var(--padding-inline-end);\n  margin-block: var(--margin-block-start) var(--margin-block-end);\n  margin-inline: var(--margin-inline-start) var(--margin-inline-end);\n}\n\n/* Size style */\n.size-style {\n  width: var(--size-style-width-mobile, var(--size-style-width));\n  height: var(--size-style-height-mobile, var(--size-style-height));\n\n  @media screen and (min-width: 750px) {\n    width: var(--size-style-width);\n    height: var(--size-style-height);\n  }\n}\n\n/* Custom Typography style */\n.custom-typography,\n.custom-typography > * {\n  font-family: var(--font-family);\n  font-weight: var(--font-weight);\n  text-transform: var(--text-transform);\n  text-wrap: var(--text-wrap);\n  line-height: var(--line-height);\n  letter-spacing: var(--letter-spacing);\n}\n\n.custom-typography {\n  h1 {\n    line-height: var(--line-height--display, var(--line-height));\n  }\n\n  h2,\n  h3,\n  h4 {\n    line-height: var(--line-height--heading, var(--line-height));\n  }\n\n  p {\n    line-height: var(--line-height--body, var(--line-height));\n  }\n}\n\n.custom-font-size,\n.custom-font-size > * {\n  font-size: var(--font-size);\n}\n\n.custom-font-weight,\n.custom-font-weight > * {\n  font-weight: var(--font-weight);\n}\n\n/* Border override style */\n.border-style {\n  border-width: var(--border-width);\n  border-style: var(--border-style);\n  border-color: var(--border-color);\n  border-radius: var(--border-radius);\n}\n\n/* Gap scaling style */\n.gap-style,\n.layout-panel-flex {\n  --gap-scale: var(--spacing-scale-md);\n\n  @media screen and (min-width: 990px) {\n    --gap-scale: var(--spacing-scale-default);\n  }\n}\n\n.layout-panel-flex {\n  display: flex;\n  gap: var(--gap);\n  height: 100%;\n}\n\n.layout-panel-flex--row {\n  flex-flow: row var(--flex-wrap);\n  justify-content: var(--horizontal-alignment);\n  align-items: var(--vertical-alignment);\n}\n\n.layout-panel-flex--column {\n  flex-flow: column var(--flex-wrap);\n  align-items: var(--horizontal-alignment);\n  justify-content: var(--vertical-alignment);\n}\n\n@media screen and (max-width: 749px) {\n  .mobile-column {\n    flex-flow: column nowrap;\n    align-items: var(--horizontal-alignment);\n    justify-content: var(--vertical-alignment-mobile);\n  }\n\n  .layout-panel-flex--row:not(.mobile-column) {\n    flex-wrap: var(--flex-wrap-mobile);\n\n    > .menu {\n      flex: 1 1 min-content;\n    }\n\n    > .text-block {\n      flex: 1 1 var(--max-width--display-tight);\n    }\n\n    > .image-block {\n      flex: 1 1 var(--size-style-width-mobile-min);\n    }\n\n    > .button {\n      flex: 0 0 fit-content;\n    }\n  }\n}\n\n@media screen and (min-width: 750px) {\n  .layout-panel-flex {\n    flex-direction: var(--flex-direction);\n  }\n}\n\n/* Form fields */\n.field {\n  position: relative;\n  width: 100%;\n  display: flex;\n  transition: box-shadow var(--animation-speed) ease;\n}\n\n.field__input {\n  flex-grow: 1;\n  text-align: left;\n  border-radius: var(--style-border-radius-inputs);\n  transition: box-shadow var(--animation-speed) ease, background-color var(--animation-speed) ease;\n  padding: var(--input-padding);\n  box-shadow: var(--input-box-shadow);\n  background-color: var(--color-input-background);\n  color: var(--color-input-text);\n  border: none;\n  outline: none;\n  font-size: var(--font-paragraph--size);\n\n  &:autofill {\n    background-color: var(--color-input-background);\n    color: var(--color-input-text);\n  }\n}\n\n.field__input:is(:focus, :hover) {\n  box-shadow: var(--input-box-shadow-focus);\n  background-color: var(--color-input-hover-background);\n}\n\n.field__input--button-radius {\n  border-radius: var(--style-border-radius-buttons-primary);\n}\n\n.field__input--button-padding {\n  padding-inline: var(--padding-3xl);\n}\n\n.field__label {\n  color: rgb(var(--color-input-text-rgb) / var(--opacity-80));\n  font-size: var(--font-paragraph--size);\n  left: var(--input-padding-x);\n  top: 50%;\n  transform: translateY(-50%);\n  margin-bottom: 0;\n  pointer-events: none;\n  position: absolute;\n  transition: top var(--animation-speed) ease, font-size var(--animation-speed) ease;\n}\n\n/* RTE styles */\n.rte,\n.shopify-policy__title {\n  :is(h1, h2, h3, h4, h5, h6) {\n    margin-block: clamp(1.5rem, 1em * 3.3, 2.5rem) var(--font-heading--spacing);\n  }\n\n  :first-child:is(p, h1, h2, h3, h4, h5, h6),\n  :first-child:empty + :is(p, h1, h2, h3, h4, h5, h6) {\n    margin-block-start: 0;\n  }\n\n  ul,\n  ol {\n    margin-block-start: 0;\n    padding-inline-start: 1.5em;\n  }\n\n  /* Only apply margin-block-end to the higher level list, not nested lists */\n  :is(ul, ol):not(:is(ul, ol) :is(ul, ol)) {\n    margin-block-end: 1em;\n  }\n\n  blockquote {\n    margin-inline: 1.5em 2.3em;\n    margin-block: 3.8em;\n    padding-inline-start: 0.8em;\n    border-inline-start: 1.5px solid rgb(var(--color-foreground-rgb) / var(--opacity-25));\n    font-style: italic;\n    font-weight: 500;\n  }\n\n  .rte-table-wrapper {\n    overflow-x: auto;\n  }\n\n  table {\n    /* stylelint-disable-next-line declaration-no-important */\n    width: 100% !important;\n    border-collapse: collapse;\n  }\n\n  tr:not(:has(td)),\n  thead {\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n    font-weight: bold;\n    text-transform: uppercase;\n  }\n\n  tr:has(td) {\n    border-bottom: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10));\n  }\n\n  th,\n  td {\n    text-align: start;\n    padding-inline: var(--padding-md);\n    padding-block: var(--padding-sm);\n  }\n}\n\n.shopify-policy__container {\n  padding-block: var(--padding-xl);\n}\n\n.checkbox {\n  --checkbox-top: 50%;\n  --checkbox-left: 1.5px;\n  --checkbox-offset: 3px;\n  --checkbox-path-opacity: 0;\n  --checkbox-cursor: pointer;\n\n  position: relative;\n  display: flex;\n  align-items: center;\n\n  &:has(.checkbox__input:checked) {\n    --checkbox-path-opacity: 1;\n  }\n\n  &.checkbox--disabled {\n    --checkbox-cursor: not-allowed;\n  }\n}\n\n.checkbox__input {\n  position: absolute;\n  opacity: 0;\n  margin: 0;\n  padding: 0;\n  width: var(--checkbox-size);\n  height: var(--checkbox-size);\n  aspect-ratio: unset;\n  border: none;\n  border-radius: 0;\n  background: transparent;\n  appearance: auto;\n  display: block;\n  cursor: pointer;\n\n  /* Outline is on the SVG instead, to allow it to have border-radius */\n  &:focus-visible {\n    outline: none;\n  }\n\n  &:focus-visible + .checkbox__label .icon-checkmark {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  &:checked + .checkbox__label .icon-checkmark {\n    background-color: var(--color-foreground);\n    border-color: var(--color-foreground);\n  }\n\n  &:disabled + .checkbox__label .icon-checkmark {\n    background-color: var(--input-disabled-background-color);\n    border-color: var(--input-disabled-border-color);\n  }\n}\n\n.checkbox__label {\n  position: relative;\n  display: inline-flex;\n  cursor: var(--checkbox-cursor);\n  line-height: var(--checkbox-size);\n  min-width: var(--minimum-touch-target);\n}\n\n.checkbox .icon-checkmark {\n  height: var(--checkbox-size);\n  width: var(--checkbox-size);\n  flex-shrink: 0;\n  border: var(--checkbox-border);\n  border-radius: var(--checkbox-border-radius);\n  background-color: var(--color-background);\n}\n\n.checkbox__label-text {\n  padding-inline-start: var(--checkbox-label-padding);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.checkbox .icon-checkmark path {\n  stroke: var(--color-background);\n  opacity: var(--checkbox-path-opacity);\n  transition: opacity var(--animation-speed) var(--animation-easing);\n}\n\n.checkbox__input:disabled + .checkbox__label {\n  color: var(--input-disabled-text-color);\n}\n\n/* Radio buttons and checkboxes - shared base styles */\n:where(input[type='radio']),\n:where(input[type='checkbox']) {\n  width: var(--checkbox-size);\n  height: var(--checkbox-size);\n  aspect-ratio: 1;\n  margin: 0;\n  margin-inline-end: var(--padding-3xs);\n  padding: 0;\n  border: var(--checkbox-border);\n  appearance: none;\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  cursor: pointer;\n}\n\n/* Radio buttons */\ninput[type='radio'] {\n  border-radius: var(--style-border-radius-50);\n  background: transparent;\n  transition: border-color 0.2s ease, background-color 0.2s ease;\n}\n\n:where(input[type='radio']):checked {\n  border-color: var(--color-foreground);\n  background: var(--color-background);\n}\n\n:where(input[type='radio']):checked::after {\n  content: '';\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  width: calc(var(--checkbox-size) / 2);\n  height: calc(var(--checkbox-size) / 2);\n  background: var(--color-foreground);\n  border-radius: var(--style-border-radius-50);\n  transition: background 0.2s ease;\n}\n\n:where(input[type='radio']):disabled {\n  border-color: var(--input-disabled-border-color);\n  background-color: var(--input-disabled-background-color);\n  cursor: not-allowed;\n}\n\n:where(input[type='radio']):disabled:checked::after {\n  background: var(--input-disabled-background-color);\n}\n\n:where(input[type='radio']):not(:disabled):hover {\n  border-color: rgb(var(--color-foreground-rgb) / var(--opacity-40-60));\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n}\n\n:where(input[type='radio']):not(:disabled):hover:checked {\n  border-color: var(--color-foreground);\n  background-color: var(--color-background);\n}\n\n:where(input[type='radio']):not(:disabled):hover:checked::after {\n  background: rgb(var(--color-foreground-rgb) / var(--opacity-85));\n}\n\n/* Checkboxes */\n:where(input[type='checkbox']) {\n  border-radius: var(--checkbox-border-radius);\n  background-color: var(--color-background);\n  transition: border-color 0.2s ease, background-color 0.2s ease;\n}\n\n:where(input[type='checkbox']):checked {\n  background-color: var(--color-foreground);\n  border-color: var(--color-foreground);\n}\n\n:where(input[type='checkbox']):checked::after {\n  content: '';\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  width: var(--checkbox-size);\n  height: var(--checkbox-size);\n  background-color: var(--color-background);\n  mask-image: url(\"data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.75439 10.7485L7.68601 14.5888C7.79288 14.7288 7.84632 14.7988 7.91174 14.8242C7.96907 14.8466 8.03262 14.8469 8.09022 14.8253C8.15596 14.8007 8.21026 14.7314 8.31886 14.5927L15.2475 5.74658' stroke='black' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n  mask-size: contain;\n  mask-repeat: no-repeat;\n  mask-position: center;\n}\n\n:where(input[type='checkbox']):not(:disabled):hover {\n  border-color: rgb(var(--color-foreground-rgb) / var(--opacity-40-60));\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n}\n\n:where(input[type='checkbox']):not(:disabled):hover:checked {\n  border-color: var(--color-foreground);\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-85));\n}\n\n:where(input[type='checkbox']):disabled {\n  background-color: var(--input-disabled-background-color);\n  border-color: var(--input-disabled-border-color);\n  cursor: not-allowed;\n}\n\n:where(input[type='checkbox']):disabled:checked::after {\n  background-color: var(--input-disabled-text-color);\n}\n\n/* Shared styles for radio buttons and checkboxes */\n:where(input[type='radio']) + label,\n:where(input[type='checkbox']) + label {\n  display: inline;\n  vertical-align: middle;\n  cursor: pointer;\n}\n\n:where(input[type='radio']):disabled + label,\n:where(input[type='checkbox']):disabled + label {\n  color: var(--input-disabled-text-color);\n  cursor: not-allowed;\n}\n\n/* Flexbox for labels wrapping radio buttons or checkboxes */\nlabel:has(input[type='radio']),\nlabel:has(input[type='checkbox']) {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--padding-2xs);\n  cursor: pointer;\n}\n\nlabel:has(input[type='radio']:disabled),\nlabel:has(input[type='checkbox']:disabled) {\n  cursor: not-allowed;\n}\n\n/* Override for swatch labels to maintain block display */\n.variant-option__button-label--has-swatch:has(input[type='radio']) {\n  display: block;\n}\n\n/* Add to cart button */\n.button[id^='BuyButtons-ProductSubmitButton-'] {\n  position: relative;\n  overflow: hidden;\n}\n\n/* Cart items component */\n.cart-items-component {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n}\n\n/* Cart bubble */\n.cart-bubble {\n  --cart-padding: 0.2em;\n\n  position: relative;\n  width: 20px;\n  aspect-ratio: 1;\n  border-radius: 50%;\n  border-width: 0;\n  display: flex;\n  line-height: normal;\n  align-items: center;\n  justify-content: center;\n  color: var(--color-primary-button-text);\n  padding-inline: var(--cart-padding);\n}\n\n.cart-bubble[data-maintain-ratio] {\n  aspect-ratio: 1;\n}\n\n.cart-bubble[data-maintain-ratio] .cart-bubble__background {\n  border-radius: var(--style-border-radius-50);\n}\n\n.cart-bubble__background {\n  position: absolute;\n  inset: 0;\n  background-color: var(--color-primary-button-background);\n  border-radius: var(--style-border-radius-lg);\n}\n\n.cart-bubble__text {\n  font-size: var(--font-size--3xs);\n  z-index: var(--layer-flat);\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* Cart typography */\n.cart-primary-typography {\n  font-family: var(--cart-primary-font-family);\n  font-style: var(--cart-primary-font-style);\n  font-weight: var(--cart-primary-font-weight);\n}\n\n.cart-secondary-typography {\n  font-family: var(--cart-secondary-font-family);\n  font-style: var(--cart-secondary-font-style);\n  font-weight: var(--cart-secondary-font-weight);\n}\n\n/* Quantity selector */\n.quantity-selector {\n  --quantity-selector-width: 124px;\n\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  color: var(--color-input-text);\n  background-color: var(--color-input-background);\n  border: var(--style-border-width-inputs) solid var(--color-input-border);\n  border-radius: var(--style-border-radius-inputs);\n  flex: 1 1 var(--quantity-selector-width);\n  align-self: stretch;\n  transition: background-color var(--animation-speed) var(--animation-easing);\n\n  &:hover {\n    background-color: var(--color-input-hover-background);\n  }\n}\n\n.product-form-buttons:has(.add-to-cart-button.button-secondary) .quantity-selector {\n  border-radius: var(--style-border-radius-buttons-secondary);\n}\n\n.quantity-selector :is(.quantity-minus, .quantity-plus) {\n  /* Unset button styles */\n  padding: 0;\n  background: transparent;\n  box-shadow: none;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  width: var(--minimum-touch-target);\n  height: var(--minimum-touch-target);\n  flex-shrink: 0;\n  color: var(--color-input-text);\n}\n\n.quantity-selector .quantity-minus {\n  border-start-start-radius: var(--style-border-radius-inputs);\n  border-end-start-radius: var(--style-border-radius-inputs);\n}\n\n.quantity-selector .quantity-plus {\n  border-start-end-radius: var(--style-border-radius-inputs);\n  border-end-end-radius: var(--style-border-radius-inputs);\n}\n\n.product-details .quantity-selector,\n.quick-add-modal .quantity-selector {\n  border-radius: var(--style-border-radius-buttons-primary);\n}\n\n.product-details .quantity-selector .quantity-minus,\n.quick-add-modal .quantity-selector .quantity-minus {\n  border-start-start-radius: var(--style-border-radius-buttons-primary);\n  border-end-start-radius: var(--style-border-radius-buttons-primary);\n}\n\n.product-details .quantity-selector .quantity-plus,\n.quick-add-modal .quantity-selector .quantity-plus {\n  border-start-end-radius: var(--style-border-radius-buttons-primary);\n  border-end-end-radius: var(--style-border-radius-buttons-primary);\n}\n\n.quantity-selector .svg-wrapper {\n  transition: transform var(--animation-speed) var(--animation-easing);\n}\n\n.quantity-selector svg {\n  width: var(--icon-size-xs);\n  height: var(--icon-size-xs);\n}\n\n:is(.quantity-minus, .quantity-plus):active .svg-wrapper {\n  transform: scale(0.9);\n}\n\n.quantity-selector input[type='number'] {\n  margin: 0;\n  text-align: center;\n  border: none;\n  appearance: none;\n  max-width: calc(var(--quantity-selector-width) - var(--minimum-touch-target) * 2);\n  border-radius: var(--style-border-radius-buttons);\n  color: var(--color-input-text);\n  background-color: transparent;\n}\n\n/* Chrome, Safari, Edge, Opera */\n.quantity-selector input[type='number']::-webkit-inner-spin-button,\n.quantity-selector input[type='number']::-webkit-outer-spin-button {\n  appearance: none;\n}\n\n/* Firefox */\n.quantity-selector input[type='number'] {\n  appearance: textfield;\n}\n\n/* Pills (used in facets and predictive search) */\n\n.pills__pill {\n  --pills-pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));\n\n  color: var(--color-foreground);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--gap-sm);\n  min-width: 48px;\n  padding: 6px 12px;\n  border-radius: var(--style-border-radius-pills);\n  cursor: pointer;\n  background-color: var(--pills-pill-background-color);\n  transition: background-color var(--animation-speed) var(--animation-easing);\n\n  &:hover {\n    --pills-pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\n  }\n\n  @media screen and (max-width: 749px) {\n    padding: var(--padding-xs) var(--padding-md);\n  }\n}\n\n.pills__pill > .svg-wrapper {\n  --close-icon-opacity: 0.4;\n  --icon-stroke-width: 1px;\n\n  color: var(--color-foreground);\n}\n\n.pills__pill--swatch {\n  @media screen and (max-width: 749px) {\n    padding-inline-start: var(--padding-sm);\n  }\n}\n\n.pills__pill--swatch .swatch {\n  margin-right: -4px;\n}\n\n.pills__pill--desktop-small {\n  @media screen and (min-width: 750px) {\n    font-size: var(--font-size--xs);\n  }\n}\n\n/* Fly to cart animation */\nfly-to-cart {\n  --offset-y: 10px;\n\n  position: fixed;\n  width: var(--width, 40px);\n  height: var(--height, 40px);\n  left: 0;\n  top: 0;\n  z-index: calc(infinity);\n  pointer-events: none;\n  border-radius: var(--style-border-radius-buttons-primary);\n  overflow: hidden;\n  object-fit: cover;\n  background-size: cover;\n  background-position: center;\n  opacity: 0;\n  background-color: var(--color-foreground);\n  translate: var(--start-x, 0) var(--start-y, 0);\n  transform: translate(-50%, -50%);\n  animation-name: travel-x, travel-y, travel-scale;\n  animation-timing-function: var(--x-timing), var(--y-timing), var(--scale-timing);\n  animation-duration: 0.6s;\n  animation-composition: accumulate;\n  animation-fill-mode: both;\n}\n\nfly-to-cart.fly-to-cart--main {\n  --x-timing: cubic-bezier(0.7, -5, 0.98, 0.5);\n  --y-timing: cubic-bezier(0.15, 0.57, 0.9, 1.05);\n  --scale-timing: cubic-bezier(0.85, 0.05, 0.96, 1);\n}\n\nfly-to-cart.fly-to-cart--quick {\n  --x-timing: cubic-bezier(0, -0.1, 1, 0.32);\n  --y-timing: cubic-bezier(0, 0.92, 0.92, 1.04);\n  --scale-timing: cubic-bezier(0.86, 0.08, 0.98, 0.98);\n\n  animation-duration: 0.6s;\n}\n\nfly-to-cart.fly-to-cart--sticky {\n  --x-timing: cubic-bezier(0.98, -0.8, 0.92, 0.5);\n  --y-timing: cubic-bezier(0.14, 0.56, 0.92, 1.04);\n  --scale-timing: cubic-bezier(0.86, 0.08, 0.98, 0.98);\n  --radius: var(--style-border-radius-buttons-primary);\n\n  @media screen and (max-width: 749px) {\n    --x-timing: cubic-bezier(0.98, -0.1, 0.92, 0.5);\n  }\n\n  animation-duration: 0.8s;\n}\n\n@keyframes travel-scale {\n  0% {\n    opacity: var(--start-opacity, 1);\n  }\n\n  5% {\n    opacity: 1;\n  }\n\n  100% {\n    border-radius: 50%;\n    opacity: 1;\n    transform: translate(-50%, calc(-50% + var(--offset-y))) scale(0.25);\n  }\n}\n\n@keyframes travel-x {\n  to {\n    translate: var(--travel-x, 0) 0;\n  }\n}\n\n@keyframes travel-y {\n  to {\n    translate: 0 var(--travel-y, 0);\n  }\n}\n\n/* ------------------------------------------------------------------------------ */\n\n/* Collection Wrapper - Shared layout CSS for collection and search pages */\n\n/* ------------------------------------------------------------------------------ */\n\n.collection-wrapper {\n  @media screen and (min-width: 750px) {\n    --facets-vertical-col-width: 6;\n\n    grid-template-columns:\n      1fr repeat(\n        var(--centered-column-number),\n        minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))\n      )\n      1fr;\n  }\n\n  @media screen and (min-width: 990px) {\n    --facets-vertical-col-width: 5;\n  }\n}\n\n.collection-wrapper:has(.facets-block-wrapper--full-width),\n.collection-wrapper:has(.collection-wrapper--full-width) {\n  @media screen and (min-width: 750px) {\n    grid-column: 1 / -1;\n    grid-template-columns:\n      minmax(var(--page-margin), 1fr) repeat(\n        var(--centered-column-number),\n        minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))\n      )\n      minmax(var(--page-margin), 1fr);\n  }\n}\n\n.collection-wrapper:has(.facets--vertical) .facets-block-wrapper--vertical:not(.hidden) ~ .main-collection-grid {\n  @media screen and (min-width: 750px) {\n    grid-column: var(--facets-vertical-col-width) / var(--full-width-column-number);\n  }\n}\n\n.collection-wrapper:has(.facets-block-wrapper--vertical:not(#filters-drawer)):has(.collection-wrapper--full-width) {\n  @media screen and (min-width: 750px) {\n    grid-column: 1 / -1;\n    grid-template-columns: 0fr repeat(var(--centered-column-number), minmax(0, 1fr)) 0fr;\n  }\n}\n\n:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile)\n  [product-grid-view='default']\n  .product-grid__card {\n  @media screen and (max-width: 749px) {\n    padding-inline-start: max(var(--padding-xs), var(--padding-inline-start));\n    padding-inline-end: max(var(--padding-xs), var(--padding-inline-end));\n  }\n}\n\n:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile)\n  [product-grid-view='mobile-single']\n  .product-grid__card {\n  @media screen and (max-width: 749px) {\n    padding-inline-start: max(var(--padding-xs), var(--padding-inline-start));\n    padding-inline-end: max(var(--padding-xs), var(--padding-inline-end));\n  }\n}\n\n/* Make product media go edge-to-edge by using negative margins */\n:is(.collection-wrapper--full-width) .card-gallery,\n:is(.collection-wrapper--full-width-on-mobile) .card-gallery {\n  @media screen and (max-width: 749px) {\n    margin-inline-start: calc(-1 * max(var(--padding-xs), var(--padding-inline-start)));\n    margin-inline-end: calc(-1 * max(var(--padding-xs), var(--padding-inline-end)));\n  }\n}\n\n.collection-wrapper--full-width .main-collection-grid__title {\n  margin-left: var(--page-margin);\n}\n\n.collection-wrapper--full-width-on-mobile .main-collection-grid__title {\n  @media screen and (max-width: 749px) {\n    margin-left: var(--page-margin);\n  }\n}\n\n.collection-wrapper--grid-full-width .facets--vertical:not(.facets--drawer) {\n  @media screen and (min-width: 750px) {\n    padding-inline-start: max(var(--padding-sm), var(--padding-inline-start));\n  }\n}\n\n.collection-wrapper:has(.product-grid-mobile--large) .facets-mobile-wrapper.facets-controls-wrapper {\n  @media screen and (max-width: 749px) {\n    display: none;\n  }\n}\n\n.collection-wrapper:has(> .facets--horizontal) .facets__panel[open] {\n  @media screen and (min-width: 750px) {\n    z-index: var(--facets-open-z-index);\n  }\n}\n\n/* ------------------------------------------------------------------------------ */\n\n/* ------------------------------------------------------------------------------ */\n\n/* Animation declarations - to be kept at the bottom of the file for ease of find */\n@keyframes grow {\n  0% {\n    transform: scale(1);\n  }\n\n  50% {\n    transform: scale(1.2);\n  }\n\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes move-and-fade {\n  from {\n    transform: translate(var(--start-x, 0), var(--start-y, 0));\n    opacity: var(--start-opacity, 0);\n  }\n\n  to {\n    transform: translate(var(--end-x, 0), var(--end-y, 0));\n    opacity: var(--end-opacity, 1);\n  }\n}\n\n@keyframes slideInTopViewTransition {\n  from {\n    transform: translateY(100px);\n  }\n}\n\n@keyframes elementSlideInTop {\n  from {\n    margin-top: var(--padding-sm);\n    opacity: 0;\n  }\n\n  to {\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n\n@keyframes elementSlideOutTop {\n  from {\n    transform: translateY(0);\n    opacity: 1;\n  }\n\n  to {\n    transform: translateY(var(--padding-sm));\n    opacity: 0;\n  }\n}\n\n@keyframes elementSlideInBottom {\n  from {\n    transform: translateY(calc(-1 * var(--padding-sm)));\n    opacity: 0;\n  }\n\n  to {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes elementSlideOutBottom {\n  from {\n    transform: translateY(0);\n    opacity: 1;\n  }\n\n  to {\n    transform: translateY(calc(-1 * var(--padding-sm)));\n    opacity: 0;\n  }\n}\n\n@keyframes thumbnailsSlideInTop {\n  from {\n    transform: translateY(calc(-50% + var(--margin-lg)));\n    opacity: 0;\n  }\n\n  to {\n    transform: translateY(-50%);\n    opacity: 1;\n  }\n}\n\n@keyframes thumbnailsSlideOutTop {\n  from {\n    transform: translateY(-50%);\n    opacity: 1;\n  }\n\n  to {\n    transform: translateY(calc(-50% + var(--margin-lg)));\n    opacity: 0;\n  }\n}\n\n@keyframes thumbnailsSlideInBottom {\n  from {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  to {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes thumbnailsSlideOutBottom {\n  from {\n    transform: translateY(0);\n    opacity: 1;\n  }\n\n  to {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n}\n\n@keyframes search-element-slide-in-bottom {\n  0% {\n    transform: translateY(20px);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes search-element-slide-out-bottom {\n  0% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n\n  100% {\n    transform: translateY(20px);\n    opacity: 0;\n  }\n}\n\n@keyframes dialogZoom {\n  from {\n    opacity: 1;\n    transform: scale(1) translateY(0);\n  }\n\n  to {\n    opacity: 0;\n    transform: scale(0.95) translateY(1em);\n  }\n}\n\n@keyframes thumbnail-selected {\n  0%,\n  100% {\n    box-shadow: 0 0 0 2px transparent;\n    scale: 0.9;\n  }\n\n  50% {\n    box-shadow: 0 0 0 2px #000;\n    scale: 1;\n  }\n}\n\n@keyframes backdropFilter {\n  from {\n    backdrop-filter: brightness(1);\n  }\n\n  to {\n    backdrop-filter: brightness(0.75);\n  }\n}\n\n@keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n@keyframes modalSlideInTop {\n  from {\n    transform: translateY(var(--padding-sm));\n    opacity: 0;\n  }\n\n  to {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes modalSlideOutTop {\n  from {\n    transform: translateY(0);\n    opacity: 1;\n  }\n\n  to {\n    transform: translateY(var(--padding-sm));\n    opacity: 0;\n  }\n}\n\n.bubble {\n  display: inline-flex;\n  height: calc(var(--variant-picker-swatch-height) / 1.5);\n  font-size: var(--font-size--xs);\n  border-radius: 20px;\n  min-width: 20px;\n  padding: 0 6px;\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\n  color: var(--color-foreground);\n  align-items: center;\n  justify-content: center;\n}\n\n.bubble svg {\n  width: 12px;\n  height: 12px;\n}\n\n.top-shadow::before {\n  content: '';\n  box-shadow: 0 0 10px var(--color-shadow);\n  position: absolute;\n  z-index: var(--layer-lowest);\n  inset: 0;\n  clip-path: inset(-50px 0 0 0); /* stylelint-disable-line */\n}\n\n@media screen and (min-width: 750px) {\n  .top-shadow--mobile::before {\n    display: none;\n  }\n}\n\n.bottom-shadow::before {\n  content: '';\n  box-shadow: 0 0 10px var(--color-shadow);\n  position: absolute;\n  z-index: var(--layer-lowest);\n  inset: 0;\n  clip-path: inset(0 0 -50px 0); /* stylelint-disable-line */\n}\n\n@media screen and (min-width: 750px) {\n  .bottom-shadow--mobile::before {\n    display: none;\n  }\n}\n\n.video-placeholder-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  aspect-ratio: var(--size-style-aspect-ratio, auto);\n}\n\n:not(deferred-media) > .video-placeholder-wrapper {\n  width: var(--video-placeholder-width);\n}\n\n.video-placeholder-wrapper > * {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  object-position: center;\n}\n\n/*\n * Slideshow Component\n */\nslideshow-component {\n  --cursor: grab;\n  --slide-offset: 6px;\n\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  timeline-scope: var(--slideshow-timeline);\n}\n\nslideshow-component.slideshow--content-below-media slideshow-slide {\n  display: grid;\n}\n\n.slideshow--content-below-media slideshow-slide :is(.slide__image-container, .slide__content) {\n  position: static;\n}\n\n.slideshow--content-below-media slideshow-slide {\n  grid-template-rows: var(--grid-template-rows);\n\n  @media screen and (min-width: 750px) {\n    grid-template-rows: var(--grid-template-rows-desktop);\n  }\n}\n\n.slide__content {\n  @supports (animation-timeline: auto) {\n    opacity: 0;\n    animation: slide-reveal both linear;\n    animation-timeline: var(--slideshow-timeline);\n  }\n\n  @media (prefers-reduced-motion) {\n    opacity: 1;\n    animation: none;\n  }\n}\n\n/*\n * Force Safari to recalculate the timeline state on timeline refresh (after loop)\n*/\nslideshow-component[refreshing-timeline] .slide__content {\n  animation: none;\n}\n\n.slideshow--single-media {\n  --cursor: default;\n}\n\na slideshow-component {\n  --cursor: pointer;\n}\n\n/*\n * Slideshow Slides\n */\nslideshow-slides {\n  width: 100%;\n  position: relative;\n  display: flex;\n  overflow-x: scroll;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  scrollbar-color: transparent transparent;\n  scrollbar-width: none;\n  gap: var(--slideshow-gap, 0);\n  cursor: var(--cursor);\n  min-height: var(--slide-min-height);\n\n  @media (prefers-reduced-motion) {\n    scroll-behavior: auto;\n  }\n\n  &::-webkit-scrollbar {\n    width: 0;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    background: transparent;\n    border: none;\n  }\n\n  @media screen and (min-width: 750px) {\n    min-height: var(--slide-min-height-desktop);\n  }\n}\n\nslideshow-component[disabled='true'] slideshow-slides {\n  overflow: hidden;\n}\n\n/**\n * By default, slideshows have overflow: hidden (no compositor layer).\n * When the slideshow enters the viewport, JavaScript adds [in-viewport] which enables scrolling.\n */\nslideshow-component:not([in-viewport]) slideshow-slides {\n  overflow: hidden;\n}\n\nslideshow-component[mobile-disabled] slideshow-slides {\n  @media screen and (max-width: 749px) {\n    overflow: hidden;\n  }\n}\n\nslideshow-slide {\n  position: relative;\n  scroll-snap-align: center;\n  width: var(--slide-width, 100%);\n  max-height: 100%;\n  flex-shrink: 0;\n  view-timeline-name: var(--slideshow-timeline);\n  view-timeline-axis: inline;\n  content-visibility: auto;\n  contain-intrinsic-size: auto none;\n  border-radius: var(--corner-radius, 0);\n  overflow: hidden;\n\n  slideshow-component[actioned] &,\n  &[aria-hidden='false'] {\n    content-visibility: visible;\n  }\n\n  slideshow-component slideshow-slide:not([aria-hidden='false']) {\n    content-visibility: hidden;\n  }\n\n  &[hidden]:not([reveal]) {\n    display: none;\n  }\n\n  /* Make inactive slides appear clickable */\n  &[aria-hidden='true'] {\n    cursor: pointer;\n  }\n}\n\nslideshow-slide .slide__image-container--rounded {\n  border-radius: var(--corner-radius, 0);\n}\n\nslideshow-slide.product-media-container--tallest {\n  content-visibility: visible;\n}\n\n@media screen and (max-width: 749px) {\n  /* Media gallery has a peeking slide on the right side always, and on the left side when the current slide is the last one */\n  .media-gallery--hint\n    :is(\n      slideshow-slide:has(+ slideshow-slide[aria-hidden='false']:last-of-type),\n      slideshow-slide[aria-hidden='false'] + slideshow-slide\n    ) {\n    content-visibility: auto;\n\n    slideshow-component[actioned] & {\n      content-visibility: visible;\n    }\n  }\n}\n\n/*\n * Collection and Resource list carousels have peeking slides on both sides.\n * Card galleries preview the next or previous images on 'pointerenter', so we\n * try to kick load them beforehand (they are lazy loaded otherwise).\n */\n:is(.resource-list__carousel, .card-gallery)\n  :is(\n    slideshow-slide:has(+ slideshow-slide[aria-hidden='false']),\n    slideshow-slide[aria-hidden='false'] + slideshow-slide\n  ) {\n  content-visibility: auto;\n\n  slideshow-component[actioned] & {\n    content-visibility: visible;\n  }\n}\n\n/*\n * Be specific about HTML children structure to avoid targeting nested slideshows.\n * Ensure that the content is 'visible' while scrolling instead of 'auto' to avoid issues in Safari.\n */\nslideshow-component:is([dragging], [transitioning], :hover) > slideshow-container > slideshow-slides > slideshow-slide {\n  content-visibility: visible;\n}\n\nslideshow-slides[gutters*='start'] {\n  padding-inline-start: var(--gutter-slide-width, 0);\n  scroll-padding-inline-start: var(--gutter-slide-width, 0);\n}\n\nslideshow-slides[gutters*='end'] {\n  padding-inline-end: var(--gutter-slide-width, 0);\n}\n\nslideshow-component[dragging] {\n  --cursor: grabbing;\n\n  * {\n    pointer-events: none;\n  }\n}\n\nslideshow-component[dragging] slideshow-arrows {\n  display: none;\n}\n\nslideshow-container {\n  width: 100%;\n  display: block;\n  position: relative;\n  grid-area: container;\n  container-type: inline-size;\n  background-color: var(--color-background);\n}\n\n@media screen and (min-width: 750px) {\n  .media-gallery--carousel slideshow-component:has(slideshow-controls[thumbnails]) {\n    &:has(slideshow-controls[pagination-position='right']) {\n      display: grid;\n      grid-template:\n        'container controls' auto\n        'arrows controls' min-content\n        / 1fr auto;\n    }\n\n    &:has(slideshow-controls[pagination-position='left']) {\n      display: grid;\n      grid-template:\n        'controls container' auto\n        'controls arrows' min-content\n        / auto 1fr;\n    }\n\n    slideshow-controls[pagination-position='left'] {\n      order: -1;\n    }\n  }\n}\n\n/* Slideshow Play/Pause */\n.slideshow-control:is(.icon-pause, .icon-play) {\n  color: var(--color-active);\n\n  &:hover {\n    color: var(--color-hover);\n  }\n\n  svg {\n    display: none;\n  }\n}\n\nslideshow-component:is([autoplay]) {\n  &:is([paused]) {\n    .icon-play > svg {\n      display: block;\n    }\n  }\n\n  &:not([paused]) {\n    .icon-pause > svg {\n      display: block;\n    }\n  }\n}\n\n/* Slideshow Arrows */\nslideshow-arrows {\n  --cursor-previous: w-resize;\n  --cursor-next: e-resize;\n\n  position: absolute;\n  inset: 0;\n  display: flex;\n  z-index: var(--layer-heightened);\n  pointer-events: none;\n  mix-blend-mode: difference;\n  align-items: flex-end;\n\n  &[position='left'] {\n    justify-content: flex-start;\n    padding-inline: var(--padding-xs);\n  }\n\n  &[position='right'] {\n    justify-content: flex-end;\n    padding-inline: var(--padding-xs);\n  }\n\n  &[position='center'] {\n    justify-content: space-between;\n    align-items: center;\n  }\n}\n\nslideshow-arrows:has(.slideshow-control--shape-square),\nslideshow-arrows:has(.slideshow-control--shape-circle) {\n  mix-blend-mode: normal;\n}\n\nslideshow-component[disabled='true'] slideshow-arrows {\n  display: none;\n}\n\nslideshow-arrows .slideshow-control {\n  pointer-events: auto;\n  opacity: 0;\n  min-height: var(--minimum-touch-target);\n  min-width: var(--minimum-touch-target);\n  padding: 0 var(--padding-xs);\n  color: var(--color-white);\n}\n\nslideshow-arrows .slideshow-control.slideshow-control--style-none {\n  display: none;\n}\n\n.media-gallery--carousel slideshow-arrows .slideshow-control {\n  padding-inline: 0 var(--padding-md);\n  opacity: 1;\n}\n\n.card-gallery slideshow-arrows .slideshow-control {\n  /* Align icons with quick-add button */\n  padding-inline: var(--padding-xl);\n\n  @container (max-width: 249px) {\n    padding-inline: 0 var(--padding-sm);\n  }\n}\n\n:not(.media-gallery--carousel)\n  > :is(slideshow-component:hover, slideshow-component:focus-within):not(:has(slideshow-controls:hover))\n  > slideshow-container\n  > slideshow-arrows\n  .slideshow-control {\n  animation: arrowsSlideIn var(--animation-speed) var(--animation-easing) forwards;\n}\n\n@keyframes arrowsSlideIn {\n  from {\n    transform: translate(var(--padding-sm), 0);\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n@keyframes slide-reveal {\n  0% {\n    translate: calc(var(--slideshow-slide-offset, 6) * 1rem) 0;\n    opacity: 0;\n  }\n\n  50% {\n    opacity: 1;\n  }\n\n  100% {\n    translate: calc(var(--slideshow-slide-offset, 6) * -1rem) 0;\n    opacity: 0;\n  }\n}\n\n.section-resource-list,\n.section-carousel {\n  row-gap: var(--gap);\n}\n\n.section-resource-list__content {\n  display: flex;\n  flex-direction: column;\n  align-items: var(--horizontal-alignment);\n  gap: var(--gap);\n  width: 100%;\n}\n\n.section-resource-list__content:empty {\n  display: none;\n}\n\n.section-resource-list__header:is(:empty, :has(.group-block-content:empty)),\n.section-resource-list__content:empty {\n  display: none;\n}\n\n:where(.section-resource-list.section--full-width) product-card[data-product-transition] > .group-block,\n:where(.section-carousel.section--full-width) product-card[data-product-transition] > .group-block {\n  @media screen and (max-width: 749px) {\n    padding-inline: max(var(--padding-xs), var(--padding-inline-start))\n      max(var(--padding-xs), var(--padding-inline-end));\n  }\n}\n\n.resource-list--carousel-mobile {\n  display: block;\n\n  @media screen and (min-width: 750px) {\n    display: none;\n  }\n}\n\n.resource-list {\n  --resource-list-mobile-gap-max: 9999px;\n  --resource-list-column-gap: min(var(--resource-list-column-gap-desktop), var(--resource-list-mobile-gap-max));\n  --resource-list-row-gap: min(var(--resource-list-row-gap-desktop), var(--resource-list-mobile-gap-max));\n\n  width: 100%;\n\n  @media screen and (max-width: 749px) {\n    --resource-list-mobile-gap-max: 12px;\n  }\n\n  @container resource-list (max-width: 749px) {\n    --resource-list-mobile-gap-max: 12px;\n  }\n}\n\n.resource-list--grid {\n  display: grid;\n  gap: var(--resource-list-row-gap) var(--resource-list-column-gap);\n  grid-template-columns: var(--resource-list-columns-mobile);\n\n  @media screen and (min-width: 750px) {\n    grid-template-columns: var(--resource-list-columns);\n  }\n\n  @container resource-list (max-width: 449px) {\n    grid-template-columns: var(--resource-list-columns-mobile);\n  }\n\n  @container resource-list(min-width: 450px) and (max-width: 749px) {\n    --resource-list-columns-per-row: 3;\n\n    grid-template-columns: repeat(var(--resource-list-columns-per-row), 1fr);\n\n    /* Avoid orphan in last row when there are 4, 7, or 10 items */\n    &:has(.resource-list__item:first-child:nth-last-child(3n + 1)),\n    /* Clean two full rows when there are 8 items */\n    &:has(.resource-list__item:first-child:nth-last-child(8n)) {\n      --resource-list-columns-per-row: 4;\n    }\n  }\n\n  @container resource-list (min-width: 750px) {\n    grid-template-columns: repeat(var(--resource-list-columns-per-row), 1fr);\n\n    &:has(.resource-list__item:first-child:nth-last-child(n + 9)) {\n      --resource-list-columns-per-row: 5;\n    }\n\n    &:has(.resource-list__item:first-child:nth-last-child(n + 7):nth-last-child(-n + 8)) {\n      --resource-list-columns-per-row: 4;\n    }\n\n    &:has(.resource-list__item:first-child:nth-last-child(6)) {\n      --resource-list-columns-per-row: 3;\n    }\n\n    &:has(.resource-list__item:first-child:nth-last-child(5)) {\n      --resource-list-columns-per-row: 5;\n    }\n\n    &:has(.resource-list__item:first-child:nth-last-child(-n + 4)) {\n      --resource-list-columns-per-row: 4;\n    }\n  }\n\n  @container resource-list (min-width: 1200px) {\n    &:has(.resource-list__item:first-child:nth-last-child(6)) {\n      --resource-list-columns-per-row: 6;\n    }\n  }\n}\n\n.resource-list__item {\n  height: 100%;\n  color: var(--color-foreground);\n  text-decoration: none;\n}\n\n.resource-list__carousel {\n  --slide-width: 60vw;\n\n  width: 100%;\n  position: relative;\n  container-type: inline-size;\n  container-name: resource-list-carousel;\n\n  .slideshow-control[disabled] {\n    display: none;\n  }\n\n  .slideshow-control--next {\n    margin-inline-start: auto;\n  }\n}\n\n@container resource-list-carousel (max-width: 749px) {\n  .resource-list__carousel .resource-list__slide {\n    --slide-width: clamp(150px, var(--mobile-card-size, 60cqw), var(--slide-width-max));\n  }\n}\n\n@container resource-list-carousel (min-width: 750px) {\n  .resource-list__carousel .resource-list__slide {\n    --section-slide-width: calc(\n      (100% - (var(--resource-list-column-gap) * (var(--column-count) - 1)) - var(--peek-next-slide-size)) /\n        var(--column-count)\n    );\n    --fallback-slide-width: clamp(150px, var(--mobile-card-size, 60cqw), var(--slide-width-max));\n    --slide-width: var(--section-slide-width, var(--fallback-slide-width));\n  }\n}\n\n.resource-list__carousel slideshow-slides {\n  gap: var(--resource-list-column-gap);\n\n  /* Add padding to prevent hover animations from being clipped in slideshow\n     15px accommodates:\n     - Scale effect (9px on each side from 1.03 scale)\n     - Lift effect (4px upward movement)\n     - Shadow (15px spread with -5px offset)\n     Using 16px for better alignment with our spacing scale */\n\n  margin-block: -16px;\n  padding-block: 16px;\n}\n\n.resource-list__carousel slideshow-arrows {\n  padding-inline: var(--util-page-margin-offset);\n}\n\n.resource-list__carousel .resource-list__slide {\n  width: var(--slide-width);\n  flex: 0 0 auto;\n  scroll-snap-align: start;\n  min-width: 0;\n}\n\n/* Base styles */\n.group-block,\n.group-block-content {\n  position: relative;\n}\n\n.group-block:has(> video-background-component),\n.group-block:has(> .background-image-container) {\n  overflow: hidden;\n}\n\n.group-block-content {\n  height: 100%;\n  width: 100%;\n}\n\n/* Container styles */\n.section-content-wrapper.section-content-wrapper:where(.layout-panel-flex) .group-block--fill {\n  flex: 1;\n}\n\n/* Flex behavior for width variants */\n.layout-panel-flex--row > .group-block--width-fit {\n  flex: 0;\n}\n\n.layout-panel-flex--row > .group-block--width-fill {\n  flex: 1;\n}\n\n.layout-panel-flex--row > .group-block--width-custom {\n  flex-basis: var(--size-style-width);\n}\n\n/* Dimension utilities - Height */\n.group-block--height-fit {\n  height: auto;\n}\n\n.group-block--height-custom,\n.group-block--height-fill {\n  height: var(--size-style-height);\n}\n\n/* Flex behavior for height variants */\n.layout-panel-flex--column > .group-block--height-fit {\n  flex: 0 1 auto;\n}\n\n.layout-panel-flex--column > .group-block--height-fill {\n  flex: 1;\n}\n\n.layout-panel-flex--column > .group-block--height-custom {\n  flex-basis: var(--size-style-height);\n}\n\naccordion-custom {\n  details {\n    &::details-content,\n    .details-content {\n      block-size: 0;\n      overflow-y: clip;\n      opacity: 0;\n      interpolate-size: allow-keywords;\n      transition: content-visibility var(--animation-speed-slow) allow-discrete,\n        padding-block var(--animation-speed-slow) var(--animation-easing),\n        opacity var(--animation-speed-slow) var(--animation-easing),\n        block-size var(--animation-speed-slow) var(--animation-easing);\n    }\n\n    /* Disable transitions when the content toggle is not caused by the direct user interaction, e.g. opening the filters on mobile. */\n    &:not(:focus-within)::details-content,\n    &:not(:focus-within) .details-content {\n      transition: none;\n    }\n\n    &:not([open]) {\n      &::details-content,\n      .details-content {\n        padding-block: 0;\n      }\n    }\n\n    &[open] {\n      &::details-content,\n      .details-content {\n        opacity: 1;\n        block-size: auto;\n\n        @starting-style {\n          block-size: 0;\n          opacity: 0;\n          overflow-y: clip;\n        }\n\n        &:focus-within {\n          overflow-y: visible;\n        }\n      }\n    }\n  }\n}\n\naccordion-custom[data-disable-on-mobile='true'] summary {\n  @media screen and (max-width: 749px) {\n    cursor: auto;\n  }\n}\n\naccordion-custom[data-disable-on-desktop='true'] summary {\n  @media screen and (min-width: 750px) {\n    cursor: auto;\n  }\n}\n\ntext-component {\n  --shimmer-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n  --shimmer-color-light: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n  --shimmer-speed: 1.25s;\n\n  display: inline-block;\n  position: relative;\n  transition: color var(--animation-speed-slow) ease;\n  line-height: 1;\n\n  &::after {\n    content: attr(value);\n    position: absolute;\n    inset: 0;\n    color: transparent;\n    opacity: 0;\n    transition: opacity var(--animation-speed-slow) var(--animation-easing);\n    pointer-events: none;\n    background-image: linear-gradient(\n      -85deg,\n      var(--shimmer-text-color) 10%,\n      var(--shimmer-color-light) 50%,\n      var(--shimmer-text-color) 90%\n    );\n    background-clip: text;\n    background-size: 200% 100%;\n    background-position: 100% 0;\n    place-content: center;\n  }\n\n  &[shimmer] {\n    color: transparent;\n\n    &::after {\n      opacity: 1;\n      animation: text-shimmer var(--shimmer-speed) infinite linear;\n    }\n  }\n}\n\n@keyframes text-shimmer {\n  0% {\n    background-position: 100% 0;\n  }\n\n  100% {\n    background-position: -100% 0;\n  }\n}\n\n/* Animation transitions */\n.transition-background-color {\n  transition: background-color var(--animation-speed-medium) ease-in-out;\n}\n\n.transition-transform {\n  transition: transform var(--animation-speed-medium) var(--animation-timing-bounce);\n}\n\n.transition-border-color {\n  transition: border-color var(--animation-speed-medium) var(--animation-timing-hover);\n}\n\n/* Global scrollbar styles */\n\n/* Webkit browsers */\n::-webkit-scrollbar {\n  width: 20px;\n}\n\n::-webkit-scrollbar-track {\n  background-color: transparent;\n}\n\n::-webkit-scrollbar-thumb {\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-40));\n  border-radius: 20px;\n  border: 6px solid transparent;\n  background-clip: content-box;\n  transition: background-color 0.2s;\n}\n\n::-webkit-scrollbar-thumb:hover {\n  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-60));\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  html {\n    scroll-behavior: smooth;\n  }\n}\n\n/* Product card title truncation - applied only to zoom-out view */\n[product-grid-view='zoom-out'] :is(.product-card, .product-grid__card) :is(h4, .h4) {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  -webkit-line-clamp: 3;\n}\n\n/* Product card title truncation - applied on mobile regardless of view */\n@media screen and (max-width: 749px) {\n  :is(.product-card, .product-grid__card) :is(h4, .h4) {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    -webkit-line-clamp: 3;\n  }\n}\n\n.product-card:hover,\n.collection-card:hover,\n.resource-card:hover,\n.predictive-search-results__card--product:hover,\n.predictive-search-results__card:hover {\n  position: relative;\n  z-index: var(--layer-raised);\n  transition: transform var(--hover-transition-duration) var(--hover-transition-timing),\n    box-shadow var(--hover-transition-duration) var(--hover-transition-timing);\n}\n\n.header .product-card:hover,\n.header .collection-card:hover,\n.header .resource-card:hover,\n.header-drawer .product-card:hover,\n.header-drawer .collection-card:hover,\n.header-drawer .resource-card:hover {\n  z-index: auto;\n  transform: none;\n  box-shadow: none;\n}\n\n.predictive-search-results__inner {\n  flex-grow: 1;\n  overflow-y: auto;\n  padding-block: var(--padding-lg);\n  container-type: inline-size;\n  color: var(--color-foreground);\n}\n\n/* Prevent iOS zoom on input focus by ensuring minimum 16px font size on mobile */\n@media screen and (max-width: 1200px) {\n  input,\n  textarea,\n  select,\n  /* Higher specificity to override type preset classes like .paragraph, .h1, etc. */\n  .paragraph.paragraph input,\n  .paragraph.paragraph textarea,\n  .paragraph.paragraph select,\n  .h1.h1 input,\n  .h1.h1 textarea,\n  .h1.h1 select,\n  .h2.h2 input,\n  .h2.h2 textarea,\n  .h2.h2 select,\n  .h3.h3 input,\n  .h3.h3 textarea,\n  .h3.h3 select,\n  .h4.h4 input,\n  .h4.h4 textarea,\n  .h4.h4 select,\n  .h5.h5 input,\n  .h5.h5 textarea,\n  .h5.h5 select,\n  .h6.h6 input,\n  .h6.h6 textarea,\n  .h6.h6 select {\n    font-size: max(1rem, 100%);\n  }\n}\n\n.product-recommendations {\n  display: block;\n}\n\n.product-recommendations__skeleton-item {\n  aspect-ratio: 3 / 4;\n  background-color: var(--color-foreground);\n  opacity: var(--skeleton-opacity);\n  border-radius: 4px;\n}\n\n@media screen and (max-width: 749px) {\n  .product-recommendations__skeleton-item:nth-child(2n + 1) {\n    display: none;\n  }\n}\n\nproduct-recommendations:has([data-has-recommendations='false']) {\n  display: none;\n}\n\n.add-to-cart-button {\n  --text-speed: 0.26;\n  --base-delay: calc(var(--text-speed) * 0.25);\n  --tick-speed: 0.1;\n  --ring-speed: 0.2;\n  --check-speed: 0.2;\n  --burst-speed: 0.32;\n  --step-delay: 3;\n  --speed: 1;\n\n  user-select: none;\n  transition-property: color, box-shadow, background-color, scale, translate;\n  transition-duration: var(--animation-speed);\n  transition-timing-function: var(--ease-out-cubic);\n\n  &:active {\n    scale: 0.99;\n    translate: 0 1px;\n  }\n}\n\n.add-to-cart-button .svg-wrapper .checkmark-burst {\n  width: 30px;\n  height: 30px;\n}\n\n.add-to-cart-text {\n  --atc-opacity: 0;\n  --atc-destination: -1em;\n\n  display: flex;\n  gap: var(--gap-2xs);\n  align-items: center;\n  justify-content: center;\n  animation-duration: var(--animation-speed);\n  animation-timing-function: var(--animation-easing);\n  animation-fill-mode: forwards;\n  transition: width var(--animation-speed) var(--animation-easing),\n    opacity var(--animation-speed) var(--animation-easing);\n}\n\n.add-to-cart__added {\n  --atc-opacity: 1;\n  --atc-destination: 0px;\n\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  translate: -50% -50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.3rem;\n}\n\n.add-to-cart__added-icon {\n  width: 32px;\n  height: 32px;\n}\n\n[data-added='true'] .add-to-cart-text,\n[data-added='true'] .add-to-cart__added {\n  animation-name: atc-slide;\n}\n\n.checkmark-burst {\n  opacity: 0;\n  overflow: visible;\n\n  .burst {\n    rotate: 20deg;\n  }\n\n  .check {\n    opacity: 0.2;\n    scale: 0.8;\n    filter: blur(2px);\n    transform: translateZ(0);\n  }\n\n  :is(.ring, .line, .check, .burst, .tick) {\n    transform-box: fill-box;\n    transform-origin: center;\n  }\n\n  :is(.line) {\n    stroke-dasharray: 1.5 1.5;\n    stroke-dashoffset: -1.5;\n    translate: 0 -180%;\n  }\n\n  g {\n    transform-origin: center;\n    rotate: calc(var(--index) * (360 / 8) * 1deg);\n  }\n}\n\n.add-to-cart-button[data-added='true'] .checkmark-burst {\n  opacity: 1;\n}\n\n.add-to-cart-button[data-added='true'] {\n  .check {\n    opacity: 1;\n    scale: 1;\n    filter: blur(0);\n  }\n\n  .tick {\n    scale: 1.75;\n  }\n\n  .ring {\n    opacity: 0;\n    scale: 1;\n  }\n\n  .line {\n    stroke-dashoffset: 1.5;\n  }\n\n  .add-to-cart-text {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: circle(0% at 50% 50%);\n    filter: blur(2px);\n    opacity: 0;\n    translate: 0 4px;\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .add-to-cart-button[data-added='true'] {\n    .check {\n      transition-property: opacity, scale, filter;\n      transition-duration: calc(calc(var(--check-speed) * 1s));\n      transition-delay: calc((var(--base-delay) * 1s));\n      transition-timing-function: var(--ease-out-quad);\n    }\n\n    .tick {\n      transition-property: scale;\n      transition-duration: calc((calc(var(--tick-speed) * 1s)));\n      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * (var(--step-delay) * 1.1))) * 1s));\n      transition-timing-function: ease-out;\n    }\n\n    .ring {\n      transition-property: opacity, scale;\n      transition-duration: calc((calc(var(--ring-speed) * 1s)));\n      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay))) * 1s));\n      transition-timing-function: var(--ease-out-quad);\n    }\n\n    .line {\n      transition-property: stroke-dashoffset;\n      transition-duration: calc((calc(var(--burst-speed) * 1s)));\n      transition-delay: calc(((var(--base-delay) + (var(--check-speed) * var(--step-delay))) * 1s));\n      transition-timing-function: var(--ease-out-cubic);\n    }\n  }\n\n  .add-to-cart-text {\n    transition-property: clip-path, opacity, filter, translate;\n    transition-duration: calc((var(--text-speed) * 0.6s)), calc((var(--text-speed) * 1s));\n    transition-timing-function: ease-out;\n  }\n}\n\n.add-to-cart-text {\n  /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n  clip-path: circle(100% at 50% 50%);\n}\n\n@keyframes atc-slide {\n  to {\n    opacity: var(--atc-opacity, 1);\n    translate: 0px var(--atc-destination, 0px);\n  }\n}\n"
  },
  {
    "path": "assets/blog-posts-list.js",
    "content": "import PaginatedList from '@theme/paginated-list';\n\n/**\n * A custom element that renders a paginated blog posts list\n */\nexport default class BlogPostsList extends PaginatedList {}\n\nif (!customElements.get('blog-posts-list')) {\n  customElements.define('blog-posts-list', BlogPostsList);\n}\n"
  },
  {
    "path": "assets/cart-discount.js",
    "content": "import { Component } from '@theme/component';\nimport { morphSection } from '@theme/section-renderer';\nimport { DiscountUpdateEvent } from '@theme/events';\nimport { fetchConfig } from '@theme/utilities';\nimport { cartPerformance } from '@theme/performance';\n\n/**\n * A custom element that applies a discount to the cart.\n *\n * @typedef {Object} CartDiscountComponentRefs\n * @property {HTMLElement} cartDiscountError - The error element.\n * @property {HTMLElement} cartDiscountErrorDiscountCode - The discount code error element.\n * @property {HTMLElement} cartDiscountErrorShipping - The shipping error element.\n */\n\n/**\n * @extends {Component<CartDiscountComponentRefs>}\n */\nclass CartDiscount extends Component {\n  requiredRefs = ['cartDiscountError', 'cartDiscountErrorDiscountCode', 'cartDiscountErrorShipping'];\n\n  /** @type {AbortController | null} */\n  #activeFetch = null;\n\n  #createAbortController() {\n    if (this.#activeFetch) {\n      this.#activeFetch.abort();\n    }\n\n    const abortController = new AbortController();\n    this.#activeFetch = abortController;\n    return abortController;\n  }\n\n  /**\n   * Handles updates to the cart note.\n   * @param {SubmitEvent} event - The submit event on our form.\n   */\n  applyDiscount = async (event) => {\n    const { cartDiscountError, cartDiscountErrorDiscountCode, cartDiscountErrorShipping } = this.refs;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const form = event.target;\n    if (!(form instanceof HTMLFormElement)) return;\n\n    const discountCode = form.querySelector('input[name=\"discount\"]');\n    if (!(discountCode instanceof HTMLInputElement) || typeof this.dataset.sectionId !== 'string') return;\n\n    const discountCodeValue = discountCode.value;\n\n    const abortController = this.#createAbortController();\n\n    try {\n      const existingDiscounts = this.#existingDiscounts();\n      if (existingDiscounts.includes(discountCodeValue)) return;\n\n      cartDiscountError.classList.add('hidden');\n      cartDiscountErrorDiscountCode.classList.add('hidden');\n      cartDiscountErrorShipping.classList.add('hidden');\n\n      const config = fetchConfig('json', {\n        body: JSON.stringify({\n          discount: [...existingDiscounts, discountCodeValue].join(','),\n          sections: [this.dataset.sectionId],\n        }),\n      });\n\n      const response = await fetch(Theme.routes.cart_update_url, {\n        ...config,\n        signal: abortController.signal,\n      });\n\n      const data = await response.json();\n\n      if (\n        data.discount_codes.find((/** @type {{ code: string; applicable: boolean; }} */ discount) => {\n          return discount.code === discountCodeValue && discount.applicable === false;\n        })\n      ) {\n        discountCode.value = '';\n        this.#handleDiscountError('discount_code');\n        return;\n      }\n\n      const newHtml = data.sections[this.dataset.sectionId];\n      const parsedHtml = new DOMParser().parseFromString(newHtml, 'text/html');\n      const section = parsedHtml.getElementById(`shopify-section-${this.dataset.sectionId}`);\n      const discountCodes = section?.querySelectorAll('.cart-discount__pill') || [];\n      if (section) {\n        const codes = Array.from(discountCodes)\n          .map((element) => (element instanceof HTMLLIElement ? element.dataset.discountCode : null))\n          .filter(Boolean);\n        // Before morphing, we need to check if the shipping discount is applicable in the UI\n        // we check the liquid logic compared to the cart payload to assess whether we leveraged\n        // a valid shipping discount code.\n        if (\n          codes.length === existingDiscounts.length &&\n          codes.every((/** @type {string} */ code) => existingDiscounts.includes(code)) &&\n          data.discount_codes.find((/** @type {{ code: string; applicable: boolean; }} */ discount) => {\n            return discount.code === discountCodeValue && discount.applicable === true;\n          })\n        ) {\n          this.#handleDiscountError('shipping');\n          discountCode.value = '';\n          return;\n        }\n      }\n\n      document.dispatchEvent(new DiscountUpdateEvent(data, this.id));\n      morphSection(this.dataset.sectionId, newHtml);\n    } catch (error) {\n    } finally {\n      this.#activeFetch = null;\n      cartPerformance.measureFromEvent('discount-update:user-action', event);\n    }\n  };\n\n  /**\n   * Handles removing a discount from the cart.\n   * @param {MouseEvent | KeyboardEvent} event - The mouse or keyboard event in our pill.\n   */\n  removeDiscount = async (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (\n      (event instanceof KeyboardEvent && event.key !== 'Enter') ||\n      !(event instanceof MouseEvent) ||\n      !(event.target instanceof HTMLElement) ||\n      typeof this.dataset.sectionId !== 'string'\n    ) {\n      return;\n    }\n\n    const pill = event.target.closest('.cart-discount__pill');\n    if (!(pill instanceof HTMLLIElement)) return;\n\n    const discountCode = pill.dataset.discountCode;\n    if (!discountCode) return;\n\n    const existingDiscounts = this.#existingDiscounts();\n    const index = existingDiscounts.indexOf(discountCode);\n    if (index === -1) return;\n\n    existingDiscounts.splice(index, 1);\n\n    const abortController = this.#createAbortController();\n\n    try {\n      const config = fetchConfig('json', {\n        body: JSON.stringify({ discount: existingDiscounts.join(','), sections: [this.dataset.sectionId] }),\n      });\n\n      const response = await fetch(Theme.routes.cart_update_url, {\n        ...config,\n        signal: abortController.signal,\n      });\n\n      const data = await response.json();\n\n      document.dispatchEvent(new DiscountUpdateEvent(data, this.id));\n      morphSection(this.dataset.sectionId, data.sections[this.dataset.sectionId]);\n    } catch (error) {\n    } finally {\n      this.#activeFetch = null;\n    }\n  };\n\n  /**\n   * Handles the discount error.\n   *\n   * @param {'discount_code' | 'shipping'} type - The type of discount error.\n   */\n  #handleDiscountError(type) {\n    const { cartDiscountError, cartDiscountErrorDiscountCode, cartDiscountErrorShipping } = this.refs;\n    const target = type === 'discount_code' ? cartDiscountErrorDiscountCode : cartDiscountErrorShipping;\n    cartDiscountError.classList.remove('hidden');\n    target.classList.remove('hidden');\n  }\n\n  /**\n   * Returns an array of existing discount codes.\n   * @returns {string[]}\n   */\n  #existingDiscounts() {\n    /** @type {string[]} */\n    const discountCodes = [];\n    const discountPills = this.querySelectorAll('.cart-discount__pill');\n    for (const pill of discountPills) {\n      if (pill instanceof HTMLLIElement && typeof pill.dataset.discountCode === 'string') {\n        discountCodes.push(pill.dataset.discountCode);\n      }\n    }\n\n    return discountCodes;\n  }\n}\n\nif (!customElements.get('cart-discount-component')) {\n  customElements.define('cart-discount-component', CartDiscount);\n}\n"
  },
  {
    "path": "assets/cart-drawer.js",
    "content": "import { DialogComponent, DialogOpenEvent, DialogCloseEvent } from '@theme/dialog';\nimport { CartAddEvent } from '@theme/events';\nimport { isMobileBreakpoint } from '@theme/utilities';\n\n/**\n * A custom element that manages a cart drawer.\n *\n * @typedef {object} Refs\n * @property {HTMLDialogElement} dialog - The dialog element.\n *\n * @extends {DialogComponent}\n */\nclass CartDrawerComponent extends DialogComponent {\n  /** @type {number} */\n  #summaryThreshold = 0.5;\n\n  /** @type {AbortController | null} */\n  #historyAbortController = null;\n\n  connectedCallback() {\n    super.connectedCallback();\n    document.addEventListener(CartAddEvent.eventName, this.#handleCartAdd);\n    this.addEventListener(DialogOpenEvent.eventName, this.#updateStickyState);\n    this.addEventListener(DialogOpenEvent.eventName, this.#handleHistoryOpen);\n    this.addEventListener(DialogCloseEvent.eventName, this.#handleHistoryClose);\n\n    if (history.state?.cartDrawerOpen) {\n      history.replaceState(null, '');\n    }\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    document.removeEventListener(CartAddEvent.eventName, this.#handleCartAdd);\n    this.removeEventListener(DialogOpenEvent.eventName, this.#updateStickyState);\n    this.removeEventListener(DialogOpenEvent.eventName, this.#handleHistoryOpen);\n    this.removeEventListener(DialogCloseEvent.eventName, this.#handleHistoryClose);\n    this.#historyAbortController?.abort();\n  }\n\n  #handleHistoryOpen = () => {\n    if (!isMobileBreakpoint()) return;\n\n    if (!history.state?.cartDrawerOpen) {\n      history.pushState({ cartDrawerOpen: true }, '');\n    }\n\n    this.#historyAbortController = new AbortController();\n    window.addEventListener('popstate', this.#handlePopState, { signal: this.#historyAbortController.signal });\n  };\n\n  #handleHistoryClose = () => {\n    this.#historyAbortController?.abort();\n    if (history.state?.cartDrawerOpen) {\n      history.back();\n    }\n  };\n\n  #handlePopState = async () => {\n    if (this.refs.dialog?.open) {\n      this.refs.dialog.style.setProperty('--dialog-drawer-closing-animation', 'none');\n      await this.closeDialog();\n      this.refs.dialog.style.removeProperty('--dialog-drawer-closing-animation');\n    }\n  };\n\n  #handleCartAdd = () => {\n    if (this.hasAttribute('auto-open')) {\n      this.showDialog();\n    }\n  };\n\n  open() {\n    this.showDialog();\n\n    /**\n     * Close cart drawer when installments CTA is clicked to avoid overlapping dialogs\n     */\n    customElements.whenDefined('shopify-payment-terms').then(() => {\n      const installmentsContent = document.querySelector('shopify-payment-terms')?.shadowRoot;\n      const cta = installmentsContent?.querySelector('#shopify-installments-cta');\n      cta?.addEventListener('click', this.closeDialog, { once: true });\n    });\n  }\n\n  close() {\n    this.closeDialog();\n  }\n\n  #updateStickyState() {\n    const { dialog } = /** @type {Refs} */ (this.refs);\n    if (!dialog) return;\n\n    // Refs do not cross nested `*-component` boundaries (e.g., `cart-items-component`), so we query within the dialog.\n    const content = dialog.querySelector('.cart-drawer__content');\n    const summary = dialog.querySelector('.cart-drawer__summary');\n\n    if (!content || !summary) {\n      // Ensure the dialog doesn't get stuck in \"unsticky\" mode when summary disappears (e.g., empty cart).\n      dialog.setAttribute('cart-summary-sticky', 'false');\n      return;\n    }\n\n    const drawerHeight = dialog.getBoundingClientRect().height;\n    const summaryHeight = summary.getBoundingClientRect().height;\n    const ratio = summaryHeight / drawerHeight;\n    dialog.setAttribute('cart-summary-sticky', ratio > this.#summaryThreshold ? 'false' : 'true');\n  }\n}\n\nif (!customElements.get('cart-drawer-component')) {\n  customElements.define('cart-drawer-component', CartDrawerComponent);\n}\n"
  },
  {
    "path": "assets/cart-icon.js",
    "content": "import { Component } from '@theme/component';\nimport { onAnimationEnd } from '@theme/utilities';\nimport { ThemeEvents, CartUpdateEvent } from '@theme/events';\n\n/**\n * A custom element that displays a cart icon.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} cartBubble - The cart bubble element.\n * @property {HTMLElement} cartBubbleText - The cart bubble text element.\n * @property {HTMLElement} cartBubbleCount - The cart bubble count element.\n *\n * @extends {Component<Refs>}\n */\nclass CartIcon extends Component {\n  requiredRefs = ['cartBubble', 'cartBubbleText', 'cartBubbleCount'];\n\n  /** @type {number} */\n  get currentCartCount() {\n    return parseInt(this.refs.cartBubbleCount.textContent ?? '0', 10);\n  }\n\n  set currentCartCount(value) {\n    this.refs.cartBubbleCount.textContent = value < 100 ? String(value) : '';\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    document.addEventListener(ThemeEvents.cartUpdate, this.onCartUpdate);\n    window.addEventListener('pageshow', this.onPageShow);\n    this.ensureCartBubbleIsCorrect();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    document.removeEventListener(ThemeEvents.cartUpdate, this.onCartUpdate);\n    window.removeEventListener('pageshow', this.onPageShow);\n  }\n\n  /**\n   * Handles the page show event when the page is restored from cache.\n   * @param {PageTransitionEvent} event - The page show event.\n   */\n  onPageShow = (event) => {\n    if (event.persisted) {\n      this.ensureCartBubbleIsCorrect();\n    }\n  };\n\n  /**\n   * Handles the cart update event.\n   * @param {CartUpdateEvent} event - The cart update event.\n   */\n  onCartUpdate = async (event) => {\n    const itemCount = event.detail.data?.itemCount ?? 0;\n    const comingFromProductForm = event.detail.data?.source === 'product-form-component';\n\n    this.renderCartBubble(itemCount, comingFromProductForm);\n  };\n\n  /**\n   * Renders the cart bubble.\n   * @param {number} itemCount - The number of items in the cart.\n   * @param {boolean} comingFromProductForm - Whether the cart update is coming from the product form.\n   */\n  renderCartBubble = async (itemCount, comingFromProductForm, animate = true) => {\n    // If the cart update is coming from the product form, we add to the current cart count, otherwise we set the new cart count\n\n    this.refs.cartBubbleCount.classList.toggle('hidden', itemCount === 0);\n    this.refs.cartBubble.classList.toggle('visually-hidden', itemCount === 0);\n\n    this.currentCartCount = comingFromProductForm ? this.currentCartCount + itemCount : itemCount;\n\n    this.classList.toggle('header-actions__cart-icon--has-cart', itemCount > 0);\n\n    sessionStorage.setItem(\n      'cart-count',\n      JSON.stringify({\n        value: String(this.currentCartCount),\n        timestamp: Date.now(),\n      })\n    );\n\n    if (!animate || itemCount === 0) return;\n\n    // Ensure element is visible before starting animation\n    // Use requestAnimationFrame to ensure the browser sees the state change\n    await new Promise((resolve) => requestAnimationFrame(resolve));\n\n    this.refs.cartBubble.classList.add('cart-bubble--animating');\n    await onAnimationEnd(this.refs.cartBubbleText);\n\n    this.refs.cartBubble.classList.remove('cart-bubble--animating');\n  };\n\n  /**\n   * Checks if the cart count is correct.\n   */\n  ensureCartBubbleIsCorrect = () => {\n    // Ensure refs are available\n    if (!this.refs.cartBubbleCount) return;\n\n    const sessionStorageCount = sessionStorage.getItem('cart-count');\n\n    // If no session storage data, nothing to check\n    if (sessionStorageCount === null) return;\n\n    const visibleCount = this.refs.cartBubbleCount.textContent;\n\n    try {\n      const { value, timestamp } = JSON.parse(sessionStorageCount);\n\n      // Check if the stored count matches what's visible\n      if (value === visibleCount) return;\n\n      // Only update if timestamp is recent (within 10 seconds)\n      if (Date.now() - timestamp < 10000) {\n        const count = parseInt(value, 10);\n\n        if (count >= 0) {\n          this.renderCartBubble(count, false, false);\n        }\n      }\n    } catch (_) {\n      // no-op\n    }\n  };\n}\n\nif (!customElements.get('cart-icon')) {\n  customElements.define('cart-icon', CartIcon);\n}\n"
  },
  {
    "path": "assets/cart-note.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce, fetchConfig } from '@theme/utilities';\nimport { cartPerformance } from '@theme/performance';\n\n/**\n * A custom element that displays a cart note.\n */\nclass CartNote extends Component {\n  /** @type {AbortController | null} */\n  #activeFetch = null;\n\n  /**\n   * Handles updates to the cart note.\n   * @param {InputEvent} event - The input event in our text-area.\n   */\n  updateCartNote = debounce(async (event) => {\n    if (!(event.target instanceof HTMLTextAreaElement)) return;\n\n    const note = event.target.value;\n    if (this.#activeFetch) {\n      this.#activeFetch.abort();\n    }\n\n    const abortController = new AbortController();\n    this.#activeFetch = abortController;\n\n    try {\n      const config = fetchConfig('json', {\n        body: JSON.stringify({ note }),\n      });\n\n      await fetch(Theme.routes.cart_update_url, {\n        ...config,\n        signal: abortController.signal,\n      });\n    } catch (error) {\n    } finally {\n      this.#activeFetch = null;\n      cartPerformance.measureFromEvent('note-update:user-action', event);\n    }\n  }, 200);\n}\n\nif (!customElements.get('cart-note')) {\n  customElements.define('cart-note', CartNote);\n}\n"
  },
  {
    "path": "assets/collection-links.js",
    "content": "import { Component } from '@theme/component';\nimport { closest, clamp, center, getVisibleElements } from '@theme/utilities';\nimport { SlideshowSelectEvent } from '@theme/events';\nimport { Scroller } from '@theme/scrolling';\nimport { cycleFocus } from '@theme/focus';\n\n/**\n * Collection links component\n *\n * @typedef {Object} Refs\n * @property {HTMLElement} container\n * @property {HTMLElement[]} [images]\n * @property {HTMLElement[]} [links]\n * @property {import('slideshow').Slideshow} slideshow\n *\n * @extends {Component<Refs>}\n */\nclass CollectionLinks extends Component {\n  requiredRefs = ['container'];\n\n  /** @type {Scroller} */\n  #scroll;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener('keydown', this.#handleKeydown);\n    this.addEventListener(SlideshowSelectEvent.eventName, this.#handleSlideshowSelect);\n\n    this.#scroll = new Scroller(this.refs.container, { onScroll: this.#handleScroll });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.#scroll.destroy();\n  }\n\n  get links() {\n    return this.refs.links || [];\n  }\n\n  get currentIndex() {\n    return this.links.findIndex((link) => link.getAttribute('aria-current') === 'true');\n  }\n\n  /**\n   * Public method to select a collection link\n   *\n   * @param {number} targetIndex\n   * @param {PointerEvent} [event]\n   */\n  select(targetIndex, event) {\n    this.#updateSelectedLink(targetIndex);\n    this.refs.slideshow?.select(targetIndex, undefined, { animate: false });\n    if (event) this.#revealImage(event);\n  }\n\n  /**\n   * Update the selected link\n   *\n   * @param {number} index\n   */\n  #updateSelectedLink(index) {\n    const { links } = this;\n    const selectedIndex = clamp(index, 0, links.length - 1);\n\n    for (const [index, link] of links.entries()) {\n      link.setAttribute('aria-current', Boolean(index === selectedIndex).toString());\n    }\n  }\n\n  /**\n   * Handle slideshow select event\n   *\n   * @param {SlideshowSelectEvent} event\n   */\n  #handleSlideshowSelect = async (event) => {\n    if (!event.detail.userInitiated) return;\n\n    const { index } = event.detail;\n    if (index === this.currentIndex) return;\n\n    const selectedLink = this.links[index];\n    if (!selectedLink) return;\n\n    this.#updateSelectedLink(index);\n\n    this.#scroll.to(selectedLink);\n  };\n\n  /**\n   * Cycle focus to the next or previous link\n   *\n   * @param {KeyboardEvent} event\n   */\n  #handleKeydown(event) {\n    let modifier = 0;\n\n    switch (event.key) {\n      case 'ArrowRight':\n      case 'ArrowDown':\n        modifier = 1;\n        break;\n      case 'ArrowLeft':\n      case 'ArrowUp':\n        modifier = -1;\n        break;\n    }\n\n    if (!modifier) return;\n\n    event.preventDefault();\n    cycleFocus(this.links, modifier);\n  }\n\n  /**\n   * Handle scroll event\n   */\n  #handleScroll = () => {\n    const { links } = this;\n    const { container } = this.refs;\n    const visibleLinks = getVisibleElements(this, links, 0.1);\n\n    if (visibleLinks.length === 0) return;\n    const centers = visibleLinks.map((link) => center(link, 'x'));\n    const referencePoint = center(container, 'x');\n    const closestCenter = closest(centers, referencePoint);\n    const closestVisibleLink = visibleLinks[centers.indexOf(closestCenter)];\n\n    if (!closestVisibleLink) return;\n\n    const index = links.indexOf(closestVisibleLink);\n\n    this.select(index);\n  };\n\n  /**\n   * Clear all selections\n   */\n  clearSelections = () => {\n    // Clear all selections when mouse leaves container\n    const { links } = this;\n    const { images } = this.refs;\n\n    // Reset all links to unselected state (opacity will reset via CSS)\n    for (const link of links) {\n      link.setAttribute('aria-current', 'false');\n    }\n\n    // Hide any revealed images\n    if (images) {\n      for (const image of images) {\n        image.removeAttribute('reveal');\n      }\n    }\n  };\n\n  /**\n   * Reveal an image\n   *\n   * @param {Event} event\n   */\n  #revealImage(event) {\n    if (!(event instanceof PointerEvent)) return;\n    if (event.pointerType === 'touch') return;\n\n    const { target } = event;\n    if (!(target instanceof HTMLElement)) return;\n\n    const { images } = this.refs;\n    const index = this.links.indexOf(target);\n    const selectedImage = images?.[index];\n\n    if (!selectedImage) return;\n\n    // Cache image dimensions to avoid repeated layout reads\n    let cachedImageHeight = selectedImage.offsetHeight;\n    let cachedImageWidth = selectedImage.offsetWidth;\n\n    /** @type {number | null} */\n    let rafId = null;\n\n    /** @param {PointerEvent} event */\n    const updateImagePosition = (event) => {\n      // Throttle with requestAnimationFrame to avoid layout thrashing\n      if (rafId !== null) return;\n\n      rafId = requestAnimationFrame(() => {\n        rafId = null;\n\n        const viewportHeight = window.innerHeight;\n        const viewportWidth = window.innerWidth;\n        const offset = 15;\n\n        const wouldBeCutOff = event.clientY + cachedImageHeight + offset > viewportHeight;\n        const yPos = wouldBeCutOff ? event.clientY - cachedImageHeight - offset : event.clientY + offset;\n\n        const xPos = Math.min(Math.max(offset, event.clientX + offset), viewportWidth - cachedImageWidth - offset);\n\n        selectedImage.style.setProperty('--x', `${xPos}px`);\n        selectedImage.style.setProperty('--y', `${yPos}px`);\n      });\n    };\n\n    const reset = () => {\n      if (rafId !== null) {\n        cancelAnimationFrame(rafId);\n        rafId = null;\n      }\n      selectedImage.removeAttribute('reveal');\n      target.removeEventListener('mousemove', updateImagePosition);\n    };\n\n    updateImagePosition(event);\n\n    for (const image of images) {\n      if (image === selectedImage) {\n        image.setAttribute('reveal', '');\n      } else {\n        image.removeAttribute('reveal');\n      }\n    }\n\n    target.addEventListener('mousemove', updateImagePosition);\n    target.addEventListener('mouseleave', reset, { once: true });\n  }\n}\n\nif (!customElements.get('collection-links-component')) {\n  customElements.define('collection-links-component', CollectionLinks);\n}\n"
  },
  {
    "path": "assets/comparison-slider.js",
    "content": "import { Component } from '@theme/component';\nimport { oncePerEditorSession } from '@theme/utilities';\n\n/**\n * Comparison slider component for comparing two images\n *\n * @typedef {object} ComparisonSliderRefs\n * @property {HTMLElement} mediaWrapper - The container for the images\n * @property {HTMLInputElement} slider - The range input element\n * @property {HTMLElement} afterImage - The image that gets revealed\n *\n * @extends {Component<ComparisonSliderRefs>}\n *\n * @property {string[]} requiredRefs - Required refs: 'mediaWrapper', 'slider', and 'afterImage'\n */\nexport class ComparisonSliderComponent extends Component {\n  requiredRefs = ['mediaWrapper', 'slider', 'afterImage'];\n\n  constructor() {\n    super();\n    this.hasAnimated = false;\n    this.boundHandleIntersection = this.handleIntersection.bind(this);\n  }\n\n  /**\n   * Called when component is added to DOM\n   */\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { mediaWrapper } = this.refs;\n\n    // Get orientation from media wrapper\n    this.orientation = mediaWrapper.dataset.orientation || 'horizontal';\n\n    // Initialize the position\n    this.sync();\n\n    // Set up intersection observer for animation\n    this.setupIntersectionObserver();\n  }\n\n  /**\n   * Sync the CSS custom property with the input value\n   */\n  sync() {\n    const { mediaWrapper, slider } = this.refs;\n    // Skip sync during animation to prevent lag\n    if (this.isAnimating) return;\n\n    const val = (Number(slider.value) - Number(slider.min)) / (Number(slider.max) - Number(slider.min));\n    const compareValue = Math.round(val * 100);\n\n    // Set the CSS custom property on the media wrapper\n    mediaWrapper.style.setProperty('--compare', String(compareValue));\n  }\n\n  /**\n   * Clean up when component is removed\n   */\n  disconnectedCallback() {\n    // Clean up intersection observer\n    if (this.intersectionObserver) {\n      this.intersectionObserver.disconnect();\n    }\n  }\n\n  /**\n   * Set the slider value and update display\n   * @param {number} value - Value between 0-100 (0 = all after, 100 = all before)\n   */\n  setValue(value) {\n    const { slider } = this.refs;\n    if (!slider) return;\n\n    slider.value = String(value);\n    this.sync();\n  }\n\n  /**\n   * Animate the slider handle to give users a hint about the interaction\n   */\n  animateSlider() {\n    const { mediaWrapper, slider } = this.refs;\n    if (this.hasAnimated) return;\n\n    this.hasAnimated = true;\n    this.isAnimating = true;\n\n    // Enable transition for smooth animation\n    mediaWrapper.style.setProperty('--transition-duration', '0.5s');\n\n    // Create a subtle sliding animation by only setting CSS property\n    setTimeout(() => {\n      mediaWrapper.style.setProperty('--compare', '40');\n    }, 100);\n\n    setTimeout(() => {\n      mediaWrapper.style.setProperty('--compare', '60');\n    }, 600);\n\n    setTimeout(() => {\n      mediaWrapper.style.setProperty('--compare', '50');\n    }, 1100);\n\n    setTimeout(() => {\n      // Remove transition after animation and sync slider value\n      mediaWrapper.style.setProperty('--transition-duration', '0s');\n      // Sync the slider value to match the final position\n      slider.value = '50';\n      this.isAnimating = false;\n    }, 1600);\n  }\n\n  /**\n   * Set up intersection observer to detect when section comes into view\n   */\n  setupIntersectionObserver() {\n    if (!window.IntersectionObserver) return;\n\n    const options = {\n      root: null,\n      rootMargin: '0px',\n      threshold: 0.5, // Trigger when 50% of the component is visible\n    };\n\n    this.intersectionObserver = new IntersectionObserver(this.boundHandleIntersection, options);\n    this.intersectionObserver.observe(this);\n  }\n\n  /**\n   * Handle intersection observer callback\n   * @param {IntersectionObserverEntry[]} entries\n   */\n  handleIntersection(entries) {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting && !this.hasAnimated) {\n        // Add a small delay to ensure everything is rendered\n        setTimeout(() => {\n          oncePerEditorSession(this, `comparison-slider-animated`, () => {\n            this.animateSlider();\n          });\n        }, 300);\n\n        // Disconnect observer after first animation\n        if (this.intersectionObserver) {\n          this.intersectionObserver.disconnect();\n        }\n      }\n    });\n  }\n}\n\n// Register the custom element\nif (!customElements.get('comparison-slider-component')) {\n  customElements.define('comparison-slider-component', ComparisonSliderComponent);\n}\n"
  },
  {
    "path": "assets/component-cart-items.js",
    "content": "import { Component } from '@theme/component';\nimport {\n  fetchConfig,\n  debounce,\n  onAnimationEnd,\n  prefersReducedMotion,\n  resetShimmer,\n  startViewTransition,\n} from '@theme/utilities';\nimport { morphSection, sectionRenderer } from '@theme/section-renderer';\nimport {\n  ThemeEvents,\n  CartUpdateEvent,\n  QuantitySelectorUpdateEvent,\n  CartAddEvent,\n  DiscountUpdateEvent,\n} from '@theme/events';\nimport { cartPerformance } from '@theme/performance';\n\n/** @typedef {import('./utilities').TextComponent} TextComponent */\n\n/**\n * A custom element that displays a cart items component.\n *\n * @typedef {object} Refs\n * @property {HTMLElement[]} quantitySelectors - The quantity selector elements.\n * @property {HTMLTableRowElement[]} cartItemRows - The cart item rows.\n * @property {TextComponent} cartTotal - The cart total.\n *\n * @extends {Component<Refs>}\n */\nclass CartItemsComponent extends Component {\n  #debouncedOnChange = debounce(this.#onQuantityChange, 300).bind(this);\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    document.addEventListener(ThemeEvents.cartUpdate, this.#handleCartUpdate);\n    document.addEventListener(ThemeEvents.discountUpdate, this.handleDiscountUpdate);\n    document.addEventListener(ThemeEvents.quantitySelectorUpdate, this.#debouncedOnChange);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    document.removeEventListener(ThemeEvents.cartUpdate, this.#handleCartUpdate);\n    document.removeEventListener(ThemeEvents.quantitySelectorUpdate, this.#debouncedOnChange);\n  }\n\n  /**\n   * Handles QuantitySelectorUpdateEvent change event.\n   * @param {QuantitySelectorUpdateEvent} event - The event.\n   */\n  #onQuantityChange(event) {\n    if (!(event.target instanceof Node) || !this.contains(event.target)) return;\n\n    const { quantity, cartLine: line } = event.detail;\n\n    // Cart items require a line number\n    if (!line) return;\n\n    if (quantity === 0) {\n      return this.onLineItemRemove(line);\n    }\n\n    this.updateQuantity({\n      line,\n      quantity,\n      action: 'change',\n    });\n    const lineItemRow = this.refs.cartItemRows[line - 1];\n\n    if (!lineItemRow) return;\n\n    const textComponent = /** @type {TextComponent | undefined} */ (lineItemRow.querySelector('text-component'));\n    textComponent?.shimmer();\n  }\n\n  /**\n   * Handles the line item removal.\n   * @param {number} line - The line item index.\n   */\n  onLineItemRemove(line) {\n    this.updateQuantity({\n      line,\n      quantity: 0,\n      action: 'clear',\n    });\n\n    const cartItemRowToRemove = this.refs.cartItemRows[line - 1];\n\n    if (!cartItemRowToRemove) return;\n\n    const rowsToRemove = [\n      cartItemRowToRemove,\n      // Get all nested lines of the row to remove\n      ...this.refs.cartItemRows.filter((row) => row.dataset.parentKey === cartItemRowToRemove.dataset.key),\n    ];\n\n    // If the cart item row is the last row, optimistically trigger the cart empty state\n    const isEmptyCart = rowsToRemove.length == this.refs.cartItemRows.length;\n\n    const template = document.getElementById('empty-cart-template');\n    if (isEmptyCart && template instanceof HTMLTemplateElement) {\n      const clone = document.importNode(template.content, true);\n\n      startViewTransition(() => {\n        this.replaceChildren(clone);\n      }, [this.isDrawer ? 'empty-cart-drawer' : 'empty-cart-page']);\n\n      return;\n    }\n\n    // Add class to the row to trigger the animation\n    rowsToRemove.forEach((row) => {\n      const remove = () => row.remove();\n\n      if (prefersReducedMotion()) return remove();\n\n      row.style.setProperty('--row-height', `${row.clientHeight}px`);\n      row.classList.add('removing');\n\n      // Remove the row after the animation ends\n      onAnimationEnd(row, remove);\n    });\n  }\n\n  /**\n   * Updates the quantity.\n   * @param {Object} config - The config.\n   * @param {number} config.line - The line.\n   * @param {number} config.quantity - The quantity.\n   * @param {string} config.action - The action.\n   */\n  updateQuantity(config) {\n    const cartPerformaceUpdateMarker = cartPerformance.createStartingMarker(`${config.action}:user-action`);\n\n    this.#disableCartItems();\n\n    const { line, quantity } = config;\n    const { cartTotal } = this.refs;\n\n    const cartItemsComponents = document.querySelectorAll('cart-items-component');\n    const sectionsToUpdate = new Set([this.sectionId]);\n    cartItemsComponents.forEach((item) => {\n      if (item instanceof HTMLElement && item.dataset.sectionId) {\n        sectionsToUpdate.add(item.dataset.sectionId);\n      }\n    });\n\n    const body = JSON.stringify({\n      line: line,\n      quantity: quantity,\n      sections: Array.from(sectionsToUpdate).join(','),\n      sections_url: window.location.pathname,\n    });\n\n    cartTotal?.shimmer();\n\n    fetch(`${Theme.routes.cart_change_url}`, fetchConfig('json', { body }))\n      .then((response) => {\n        return response.text();\n      })\n      .then((responseText) => {\n        const parsedResponseText = JSON.parse(responseText);\n\n        resetShimmer(this);\n\n        if (parsedResponseText.errors) {\n          this.#handleCartError(line, parsedResponseText);\n          return;\n        }\n\n        const newSectionHTML = new DOMParser().parseFromString(\n          parsedResponseText.sections[this.sectionId],\n          'text/html'\n        );\n\n        // Grab the new cart item count from a hidden element\n        const newCartHiddenItemCount = newSectionHTML.querySelector('[ref=\"cartItemCount\"]')?.textContent;\n        const newCartItemCount = newCartHiddenItemCount ? parseInt(newCartHiddenItemCount, 10) : 0;\n\n        // Update data-cart-quantity for all matching variants\n        this.#updateQuantitySelectors(parsedResponseText);\n\n        this.dispatchEvent(\n          new CartUpdateEvent(parsedResponseText, this.sectionId, {\n            itemCount: newCartItemCount,\n            source: 'cart-items-component',\n            sections: parsedResponseText.sections,\n          })\n        );\n\n        morphSection(this.sectionId, parsedResponseText.sections[this.sectionId], this.isDrawer ? 'hydration' : 'full');\n\n        this.#updateCartQuantitySelectorButtonStates();\n      })\n      .catch((error) => {\n        console.error(error);\n      })\n      .finally(() => {\n        this.#enableCartItems();\n        cartPerformance.measureFromMarker(cartPerformaceUpdateMarker);\n      });\n  }\n\n  /**\n   * Handles the discount update.\n   * @param {DiscountUpdateEvent} event - The event.\n   */\n  handleDiscountUpdate = (event) => {\n    this.#handleCartUpdate(event);\n  };\n\n  /**\n   * Handles the cart error.\n   * @param {number} line - The line.\n   * @param {Object} parsedResponseText - The parsed response text.\n   * @param {string} parsedResponseText.errors - The errors.\n   */\n  #handleCartError = (line, parsedResponseText) => {\n    const quantitySelector = this.refs.quantitySelectors[line - 1];\n    const quantityInput = quantitySelector?.querySelector('input');\n\n    if (!quantityInput) throw new Error('Quantity input not found');\n\n    quantityInput.value = quantityInput.defaultValue;\n\n    const cartItemError = this.refs[`cartItemError-${line}`];\n    const cartItemErrorContainer = this.refs[`cartItemErrorContainer-${line}`];\n\n    if (!(cartItemError instanceof HTMLElement)) throw new Error('Cart item error not found');\n    if (!(cartItemErrorContainer instanceof HTMLElement)) throw new Error('Cart item error container not found');\n\n    cartItemError.textContent = parsedResponseText.errors;\n    cartItemErrorContainer.classList.remove('hidden');\n  };\n\n  /**\n   * Handles the cart update.\n   *\n   * @param {DiscountUpdateEvent | CartUpdateEvent | CartAddEvent} event\n   */\n  #handleCartUpdate = (event) => {\n    if (event instanceof DiscountUpdateEvent) {\n      sectionRenderer.renderSection(this.sectionId, { cache: false });\n      return;\n    }\n    if (event.target === this) return;\n\n    const cartItemsHtml = event.detail.data.sections?.[this.sectionId];\n    if (cartItemsHtml) {\n      morphSection(this.sectionId, cartItemsHtml);\n\n      // Update button states for all cart quantity selectors after morph\n      this.#updateCartQuantitySelectorButtonStates();\n    } else {\n      sectionRenderer.renderSection(this.sectionId, { cache: false });\n    }\n  };\n\n  /**\n   * Disables the cart items.\n   */\n  #disableCartItems() {\n    this.classList.add('cart-items-disabled');\n  }\n\n  /**\n   * Enables the cart items.\n   */\n  #enableCartItems() {\n    this.classList.remove('cart-items-disabled');\n  }\n\n  /**\n   * Updates quantity selectors for all matching variants in the cart.\n   * @param {Object} updatedCart - The updated cart object.\n   * @param {Array<{variant_id: number, quantity: number}>} [updatedCart.items] - The cart items.\n   */\n  #updateQuantitySelectors(updatedCart) {\n    if (!updatedCart.items) return;\n\n    for (const item of updatedCart.items) {\n      const variantId = item.variant_id.toString();\n      const selectors = document.querySelectorAll(`quantity-selector-component[data-variant-id=\"${variantId}\"]`);\n\n      for (const selector of selectors) {\n        const input = selector.querySelector('input[data-cart-quantity]');\n        if (!input) continue;\n\n        input.setAttribute('data-cart-quantity', item.quantity.toString());\n\n        // Update the quantity selector's internal state\n        if ('updateCartQuantity' in selector && typeof selector.updateCartQuantity === 'function') {\n          selector.updateCartQuantity();\n        }\n      }\n    }\n  }\n\n  /**\n   * Updates button states for all cart quantity selector components.\n   */\n  #updateCartQuantitySelectorButtonStates() {\n    for (const selector of document.querySelectorAll('cart-quantity-selector-component')) {\n      /** @type {any} */ (selector).updateButtonStates?.();\n    }\n  }\n\n  /**\n   * Gets the section id.\n   * @returns {string} The section id.\n   */\n  get sectionId() {\n    const { sectionId } = this.dataset;\n\n    if (!sectionId) throw new Error('Section id missing');\n\n    return sectionId;\n  }\n\n  /**\n   * @returns {boolean} Whether the component is a drawer.\n   */\n  get isDrawer() {\n    return this.dataset.drawer !== undefined;\n  }\n}\n\nif (!customElements.get('cart-items-component')) {\n  customElements.define('cart-items-component', CartItemsComponent);\n}\n"
  },
  {
    "path": "assets/component-cart-quantity-selector.js",
    "content": "import { QuantitySelectorComponent } from '@theme/component-quantity-selector';\n\n/**\n * A custom element that allows the user to select a quantity in the cart.\n * Extends QuantitySelectorComponent but uses absolute max limits instead of effective max.\n * Semantics: \"What should the total quantity BE in the cart\" vs \"How many to ADD to cart\"\n *\n * @extends {QuantitySelectorComponent}\n */\nclass CartQuantitySelectorComponent extends QuantitySelectorComponent {\n  /**\n   * Gets the effective maximum value for cart quantity selector\n   * Cart page: uses absolute max (how much can be in cart total)\n   * @returns {number | null} The effective max, or null if no max\n   */\n  getEffectiveMax() {\n    const { max } = this.getCurrentValues();\n    return max; // Cart uses absolute max, not max minus cart quantity\n  }\n\n  /**\n   * Updates button states based on current value and limits\n   * Cart buttons are always managed client-side, never server-disabled\n   */\n  updateButtonStates() {\n    const { minusButton, plusButton } = this.refs;\n    const { min, value } = this.getCurrentValues();\n    const effectiveMax = this.getEffectiveMax();\n\n    // Cart buttons are always dynamically managed\n    minusButton.disabled = value <= min;\n    plusButton.disabled = effectiveMax !== null && value >= effectiveMax;\n  }\n}\n\nif (!customElements.get('cart-quantity-selector-component')) {\n  customElements.define('cart-quantity-selector-component', CartQuantitySelectorComponent);\n}\n"
  },
  {
    "path": "assets/component-quantity-selector.js",
    "content": "import { Component } from '@theme/component';\nimport { QuantitySelectorUpdateEvent } from '@theme/events';\nimport { parseIntOrDefault } from '@theme/utilities';\n\n/**\n * A custom element that allows the user to select a quantity.\n *\n * This component follows a pure event-driven architecture where quantity changes\n * are broadcast via QuantitySelectorUpdateEvent. Parent components that contain\n * quantity selectors listen for these events and handle them according to their\n * specific needs, with event filtering ensuring each parent only processes events\n * from its own quantity selectors to prevent conflicts between different cart\n * update strategies.\n *\n * @typedef {Object} Refs\n * @property {HTMLInputElement} quantityInput\n * @property {HTMLButtonElement} minusButton\n * @property {HTMLButtonElement} plusButton\n *\n * @extends {Component<Refs>}\n */\nexport class QuantitySelectorComponent extends Component {\n  requiredRefs = ['quantityInput', 'minusButton', 'plusButton'];\n  serverDisabledMinus = false;\n  serverDisabledPlus = false;\n  initialized = false;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    // Capture server-disabled state on first load\n    const { minusButton, plusButton } = this.refs;\n\n    if (minusButton.disabled) {\n      this.serverDisabledMinus = true;\n    }\n    if (plusButton.disabled) {\n      this.serverDisabledPlus = true;\n    }\n\n    this.initialized = true;\n    this.updateButtonStates();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n\n  /**\n   * Updates cart quantity and refreshes component state\n   * @param {number} cartQty - The quantity currently in cart for this variant\n   */\n  setCartQuantity(cartQty) {\n    this.refs.quantityInput.setAttribute('data-cart-quantity', cartQty.toString());\n    this.updateCartQuantity();\n  }\n\n  /**\n   * Checks if the current quantity can be added to cart without exceeding max\n   * @returns {{canAdd: boolean, maxQuantity: number|null, cartQuantity: number, quantityToAdd: number}} Validation result\n   */\n  canAddToCart() {\n    const { max, cartQuantity, value } = this.getCurrentValues();\n    const quantityToAdd = value;\n    const wouldExceedMax = max !== null && cartQuantity + quantityToAdd > max;\n\n    return {\n      canAdd: !wouldExceedMax,\n      maxQuantity: max,\n      cartQuantity,\n      quantityToAdd,\n    };\n  }\n\n  /**\n   * Gets the current quantity value\n   * @returns {string} The current value\n   */\n  getValue() {\n    return this.refs.quantityInput.value;\n  }\n\n  /**\n   * Sets the current quantity value\n   * @param {string} value - The value to set\n   */\n  setValue(value) {\n    this.refs.quantityInput.value = value;\n  }\n\n  /**\n   * Updates min/max/step constraints and snaps value to valid increment\n   * @param {string} min - Minimum value\n   * @param {string|null} max - Maximum value (null if no max)\n   * @param {string} step - Step increment\n   */\n  updateConstraints(min, max, step) {\n    const { quantityInput } = this.refs;\n    const currentValue = parseInt(quantityInput.value) || 0;\n\n    quantityInput.min = min;\n    if (max) {\n      quantityInput.max = max;\n    } else {\n      quantityInput.removeAttribute('max');\n    }\n    quantityInput.step = step;\n\n    const newMin = parseIntOrDefault(min, 1);\n    const newStep = parseIntOrDefault(step, 1);\n    const effectiveMax = this.getEffectiveMax();\n\n    // Snap to valid increment if not already aligned\n    let newValue = currentValue;\n    if ((currentValue - newMin) % newStep !== 0) {\n      // Snap DOWN to closest valid increment\n      newValue = newMin + Math.floor((currentValue - newMin) / newStep) * newStep;\n    }\n\n    // Ensure value is within bounds\n    newValue = Math.max(newMin, Math.min(effectiveMax ?? Infinity, newValue));\n\n    if (newValue !== currentValue) {\n      quantityInput.value = newValue.toString();\n    }\n\n    this.updateButtonStates();\n  }\n\n  /**\n   * Gets current values from DOM (fresh read every time)\n   * @returns {{min: number, max: number|null, step: number, value: number, cartQuantity: number}}\n   */\n  getCurrentValues() {\n    const { quantityInput } = this.refs;\n\n    return {\n      min: parseIntOrDefault(quantityInput.min, 1),\n      max: parseIntOrDefault(quantityInput.max, null),\n      step: parseIntOrDefault(quantityInput.step, 1),\n      value: parseIntOrDefault(quantityInput.value, 0),\n      cartQuantity: parseIntOrDefault(quantityInput.getAttribute('data-cart-quantity'), 0),\n    };\n  }\n\n  /**\n   * Gets the effective maximum value for this quantity selector\n   * Product page: max - cartQuantity (how many can be added)\n   * Override in subclass for different behavior\n   * @returns {number | null} The effective max, or null if no max\n   */\n  getEffectiveMax() {\n    const { max, cartQuantity, min } = this.getCurrentValues();\n    if (max === null) return null;\n    // Product page: can only add what's left\n    return Math.max(max - cartQuantity, min);\n  }\n\n  /**\n   * Updates button states based on current value and limits\n   */\n  updateButtonStates() {\n    const { minusButton, plusButton } = this.refs;\n    const { min, value } = this.getCurrentValues();\n    const effectiveMax = this.getEffectiveMax();\n\n    // Only manage buttons that weren't server-disabled\n    if (!this.serverDisabledMinus) {\n      minusButton.disabled = value <= min;\n    }\n\n    if (!this.serverDisabledPlus) {\n      plusButton.disabled = effectiveMax !== null && value >= effectiveMax;\n    }\n  }\n\n  /**\n   * Updates quantity by a given step\n   * @param {number} stepMultiplier - Positive for increase, negative for decrease\n   */\n  updateQuantity(stepMultiplier) {\n    const { quantityInput } = this.refs;\n    const { min, step, value } = this.getCurrentValues();\n    const effectiveMax = this.getEffectiveMax();\n\n    const newValue = Math.min(effectiveMax ?? Infinity, Math.max(min, value + step * stepMultiplier));\n\n    quantityInput.value = newValue.toString();\n    this.onQuantityChange();\n    this.updateButtonStates();\n  }\n\n  /**\n   * Handles the quantity increase event.\n   * @param {Event} event - The event.\n   */\n  increaseQuantity(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n    event.preventDefault();\n    this.updateQuantity(1);\n  }\n\n  /**\n   * Handles the quantity decrease event.\n   * @param {Event} event - The event.\n   */\n  decreaseQuantity(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n    event.preventDefault();\n    this.updateQuantity(-1);\n  }\n\n  /**\n   * When our input gets focused, we want to fully select the value.\n   * @param {FocusEvent} event\n   */\n  selectInputValue(event) {\n    const { quantityInput } = this.refs;\n    if (!(event.target instanceof HTMLInputElement) || document.activeElement !== quantityInput) return;\n\n    quantityInput.select();\n  }\n\n  /**\n   * Handles the quantity set event (on blur).\n   * Validates and snaps to valid values.\n   * @param {Event} event - The event.\n   */\n  setQuantity(event) {\n    if (!(event.target instanceof HTMLInputElement)) return;\n\n    event.preventDefault();\n    const { quantityInput } = this.refs;\n    const { min, step } = this.getCurrentValues();\n    const effectiveMax = this.getEffectiveMax();\n\n    // Snap to bounds\n    const quantity = Math.min(effectiveMax ?? Infinity, Math.max(min, parseInt(event.target.value) || 0));\n\n    // Validate step increment\n    if ((quantity - min) % step !== 0) {\n      // Set the invalid value and trigger native HTML validation\n      quantityInput.value = quantity.toString();\n      quantityInput.reportValidity();\n      return;\n    }\n\n    quantityInput.value = quantity.toString();\n    this.onQuantityChange();\n    this.updateButtonStates();\n  }\n\n  /**\n   * Handles the quantity change event.\n   */\n  onQuantityChange() {\n    const { quantityInput } = this.refs;\n    const newValue = parseInt(quantityInput.value);\n\n    this.dispatchEvent(new QuantitySelectorUpdateEvent(newValue, Number(quantityInput.dataset.cartLine) || undefined));\n  }\n\n  /**\n   * Updates the cart quantity from data attribute and refreshes button states\n   * Called when cart is updated from external sources\n   */\n  updateCartQuantity() {\n    const { quantityInput } = this.refs;\n    const { min, value } = this.getCurrentValues();\n    const effectiveMax = this.getEffectiveMax();\n\n    // Clamp value to new effective max if necessary\n    const clampedValue = Math.min(effectiveMax ?? Infinity, Math.max(min, value));\n\n    if (clampedValue !== value) {\n      quantityInput.value = clampedValue.toString();\n    }\n\n    this.updateButtonStates();\n  }\n\n  /**\n   * Gets the quantity input.\n   * @returns {HTMLInputElement} The quantity input.\n   */\n  get quantityInput() {\n    if (!this.refs.quantityInput) {\n      throw new Error('Missing <input ref=\"quantityInput\" /> inside <quantity-selector-component />');\n    }\n\n    return this.refs.quantityInput;\n  }\n}\n\nif (!customElements.get('quantity-selector-component')) {\n  customElements.define('quantity-selector-component', QuantitySelectorComponent);\n}\n"
  },
  {
    "path": "assets/component.js",
    "content": "import { requestIdleCallback } from '@theme/utilities';\n\n/*\n * Declarative shadow DOM is only initialized on the initial render of the page.\n * If the component is mounted after the browser finishes the initial render,\n * the shadow root needs to be manually hydrated.\n */\nexport class DeclarativeShadowElement extends HTMLElement {\n  connectedCallback() {\n    if (!this.shadowRoot) {\n      const template = this.querySelector(':scope > template[shadowrootmode=\"open\"]');\n\n      if (!(template instanceof HTMLTemplateElement)) return;\n\n      const shadow = this.attachShadow({ mode: 'open' });\n      shadow.append(template.content.cloneNode(true));\n    }\n  }\n}\n\n/**\n * @typedef {Record<string, Element | Element[] | undefined>} Refs\n */\n\n/**\n * @template {Refs} T\n * @typedef {T & Refs} RefsType\n */\n\n/**\n * Base class that powers our custom web components.\n *\n * Manages references to child elements with `ref` attributes and sets up mutation observers to keep\n * the refs updated when the DOM changes. Also handles declarative event listeners using.\n *\n * @template {Refs} [T=Refs]\n * @extends {DeclarativeShadowElement}\n */\nexport class Component extends DeclarativeShadowElement {\n  /**\n   * An object holding references to child elements with `ref` attributes.\n   *\n   * @type {RefsType<T>}\n   */\n  refs = /** @type {RefsType<T>} */ ({});\n\n  /**\n   * An array of required refs. If a ref is not found, an error will be thrown.\n   *\n   * @type {string[] | undefined}\n   */\n  requiredRefs;\n\n  /**\n   * Gets the root node of the component, which is either its shadow root or the component itself.\n   *\n   * @returns {(ShadowRoot | Component<T>)[]} The root nodes.\n   */\n  get roots() {\n    return this.shadowRoot ? [this, this.shadowRoot] : [this];\n  }\n\n  /**\n   * Called when the element is connected to the document's DOM.\n   *\n   * Initializes event listeners and refs.\n   */\n  connectedCallback() {\n    super.connectedCallback();\n    registerEventListeners();\n\n    this.#updateRefs();\n\n    requestIdleCallback(() => {\n      for (const root of this.roots) {\n        this.#mutationObserver.observe(root, {\n          childList: true,\n          subtree: true,\n          attributes: true,\n          attributeFilter: ['ref'],\n          attributeOldValue: true,\n        });\n      }\n    });\n  }\n\n  /**\n   * Called when the element is re-rendered by the Section Rendering API.\n   */\n  updatedCallback() {\n    this.#mutationObserver.takeRecords();\n    this.#updateRefs();\n  }\n\n  /**\n   * Called when the element is disconnected from the document's DOM.\n   *\n   * Disconnects the mutation observer.\n   */\n  disconnectedCallback() {\n    this.#mutationObserver.disconnect();\n  }\n\n  /**\n   * Updates the `refs` object by querying all descendant elements with `ref` attributes and storing references to them.\n   *\n   * This method is called to keep the `refs` object in sync with the DOM.\n   */\n  #updateRefs() {\n    const refs = /** @type any */ ({});\n    const elements = this.roots.reduce((acc, root) => {\n      for (const element of root.querySelectorAll('[ref]')) {\n        if (!this.#isDescendant(element)) continue;\n        acc.add(element);\n      }\n\n      return acc;\n    }, /** @type {Set<Element>} */ (new Set()));\n\n    for (const ref of elements) {\n      const refName = ref.getAttribute('ref') ?? '';\n      const isArray = refName.endsWith('[]');\n      const path = isArray ? refName.slice(0, -2) : refName;\n\n      if (isArray) {\n        const array = Array.isArray(refs[path]) ? refs[path] : [];\n\n        array.push(ref);\n        refs[path] = array;\n      } else {\n        refs[path] = ref;\n      }\n    }\n\n    if (this.requiredRefs?.length) {\n      for (const ref of this.requiredRefs) {\n        if (!(ref in refs)) {\n          throw new MissingRefError(ref, this);\n        }\n      }\n    }\n\n    this.refs = /** @type {RefsType<T>} */ (refs);\n  }\n\n  /**\n   * MutationObserver instance to observe changes in the component's DOM subtree and update refs accordingly.\n   *\n   * @type {MutationObserver}\n   */\n  #mutationObserver = new MutationObserver((mutations) => {\n    if (\n      mutations.some(\n        (m) =>\n          (m.type === 'attributes' && this.#isDescendant(m.target)) ||\n          (m.type === 'childList' && [...m.addedNodes, ...m.removedNodes].some(this.#isDescendant))\n      )\n    ) {\n      this.#updateRefs();\n    }\n  });\n\n  /**\n   * Checks if a given node is a descendant of this component.\n   *\n   * @param {Node} node - The node to check.\n   * @returns {boolean} True if the node is a descendant of this component.\n   */\n  #isDescendant = (node) => getClosestComponent(getAncestor(node)) === this;\n}\n\n/**\n * Get the ancestor of a given node.\n *\n * @param {Node} node - The node to get the ancestor of.\n * @returns {Node | null} The ancestor of the node or null if none is found.\n */\nfunction getAncestor(node) {\n  if (node.parentNode) return node.parentNode;\n\n  const root = node.getRootNode();\n  if (root instanceof ShadowRoot) return root.host;\n\n  return null;\n}\n\n/**\n * Recursively finds the closest ancestor that is an instance of `Component`.\n *\n * @param {Node | null} node - The starting node to search from.\n * @returns {HTMLElement | null} The closest ancestor `Component` instance or null if none is found.\n */\nfunction getClosestComponent(node) {\n  if (!node) return null;\n  if (node instanceof Component) return node;\n  if (node instanceof HTMLElement && node.tagName.toLowerCase().endsWith('-component')) return node;\n\n  const ancestor = getAncestor(node);\n  if (ancestor) return getClosestComponent(ancestor);\n\n  return null;\n}\n\n/**\n * Initializes the event listeners for custom event handling.\n *\n * Sets up event listeners for specified events and delegates the handling of those events\n * to methods defined on the closest `Component` instance, based on custom attributes.\n */\nlet initialized = false;\n\nfunction registerEventListeners() {\n  if (initialized) return;\n  initialized = true;\n\n  const events = ['click', 'change', 'select', 'focus', 'blur', 'submit', 'input', 'keydown', 'keyup', 'toggle'];\n  const shouldBubble = ['focus', 'blur'];\n  const expensiveEvents = ['pointerenter', 'pointerleave'];\n\n  for (const eventName of [...events, ...expensiveEvents]) {\n    const attribute = `on:${eventName}`;\n\n    document.addEventListener(\n      eventName,\n      (event) => {\n        const element = getElement(event);\n\n        if (!element) return;\n\n        const proxiedEvent =\n          event.target !== element\n            ? new Proxy(event, {\n                get(target, property) {\n                  if (property === 'target') return element;\n\n                  const value = Reflect.get(target, property);\n\n                  if (typeof value === 'function') {\n                    return value.bind(target);\n                  }\n\n                  return value;\n                },\n              })\n            : event;\n\n        const value = element.getAttribute(attribute) ?? '';\n        let [selector, method] = value.split('/');\n        // Extract the last segment of the attribute value delimited by `?` or `/`\n        // Do not use lookback for Safari 16.0 compatibility\n        const matches = value.match(/([\\/\\?][^\\/\\?]+)([\\/\\?][^\\/\\?]+)$/);\n        const data = matches ? matches[2] : null;\n        const instance = selector\n          ? selector.startsWith('#')\n            ? document.querySelector(selector)\n            : element.closest(selector)\n          : getClosestComponent(element);\n\n        if (!(instance instanceof Component) || !method) return;\n\n        method = method.replace(/\\?.*/, '');\n\n        const callback = /** @type {any} */ (instance)[method];\n\n        if (typeof callback === 'function') {\n          try {\n            /** @type {(Event | Data)[]} */\n            const args = [proxiedEvent];\n\n            if (data) args.unshift(parseData(data));\n\n            callback.call(instance, ...args);\n          } catch (error) {\n            console.error(error);\n          }\n        }\n      },\n      { capture: true }\n    );\n  }\n\n  /** @param {Event} event */\n  function getElement(event) {\n    const target = event.composedPath?.()[0] ?? event.target;\n\n    if (!(target instanceof Element)) return;\n\n    if (target.hasAttribute(`on:${event.type}`)) {\n      return target;\n    }\n\n    if (expensiveEvents.includes(event.type)) {\n      return null;\n    }\n\n    return event.bubbles || shouldBubble.includes(event.type) ? target.closest(`[on\\\\:${event.type}]`) : null;\n  }\n}\n\n/**\n * Parses a string to extract data based on a delimiter.\n *\n * @param {string} str - The string to parse.\n * @returns {Object|Array<string|number>|string} The parsed data.\n */\nfunction parseData(str) {\n  const delimiter = str[0];\n  const data = str.slice(1);\n\n  return delimiter === '?'\n    ? Object.fromEntries(\n        Array.from(new URLSearchParams(data).entries()).map(([key, value]) => [key, parseValue(value)])\n      )\n    : parseValue(data);\n}\n\n/**\n * @typedef {Object|Array<string|number>|string} Data\n */\n\n/**\n * Parses a string value to its appropriate type.\n *\n * @param {string} str - The string to parse.\n * @returns {Data} The parsed value.\n */\nfunction parseValue(str) {\n  if (str === 'true') return true;\n  if (str === 'false') return false;\n\n  const maybeNumber = Number(str);\n  if (!isNaN(maybeNumber) && str.trim() !== '') return maybeNumber;\n\n  return str;\n}\n\n/**\n * Throws a formatted error when a required ref is not found in the component.\n */\nclass MissingRefError extends Error {\n  /**\n   * @param {string} ref\n   * @param {Component} component\n   */\n  constructor(ref, component) {\n    super(`Required ref \"${ref}\" not found in component ${component.tagName.toLowerCase()}`);\n  }\n}\n"
  },
  {
    "path": "assets/copy-to-clipboard.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * Handles copying text to clipboard, from an event like a click.\n * Optionally, reveals a success message after copying.\n * @extends {Component}\n */\nclass CopyToClipboardComponent extends Component {\n  copyToClipboard() {\n    const copyContent = this.getAttribute('text-to-copy');\n\n    if (!copyContent) return;\n\n    navigator.clipboard.writeText(copyContent);\n\n    const copySuccessMessage = this.refs.copySuccessMessage;\n\n    if (copySuccessMessage instanceof Element) {\n      copySuccessMessage.classList.remove('visually-hidden');\n    }\n  }\n}\n\nif (!customElements.get('copy-to-clipboard-component')) {\n  customElements.define('copy-to-clipboard-component', CopyToClipboardComponent);\n}\n"
  },
  {
    "path": "assets/dialog.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce, isClickedOutside, onAnimationEnd } from '@theme/utilities';\n\n/**\n * A custom element that manages a dialog.\n *\n * @typedef {object} Refs\n * @property {HTMLDialogElement} dialog – The dialog element.\n *\n * @extends Component<Refs>\n */\nexport class DialogComponent extends Component {\n  requiredRefs = ['dialog'];\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    if (this.minWidth || this.maxWidth) {\n      window.addEventListener('resize', this.#handleResize);\n    }\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.minWidth || this.maxWidth) {\n      window.removeEventListener('resize', this.#handleResize);\n    }\n  }\n\n  #handleResize = debounce(() => {\n    const { minWidth, maxWidth } = this;\n\n    if (!minWidth && !maxWidth) return;\n\n    const windowWidth = window.innerWidth;\n    if (windowWidth < minWidth || windowWidth > maxWidth) {\n      this.closeDialog();\n    }\n  }, 50);\n\n  #previousScrollY = 0;\n\n  /**\n   * Shows the dialog.\n   */\n  showDialog() {\n    const { dialog } = this.refs;\n\n    if (dialog.open) return;\n\n    const scrollY = window.scrollY;\n    this.#previousScrollY = scrollY;\n\n    // Prevent layout thrashing by separating DOM reads from DOM writes\n    requestAnimationFrame(() => {\n      document.body.style.width = '100%';\n      document.body.style.position = 'fixed';\n      document.body.style.top = `-${scrollY}px`;\n\n      dialog.showModal();\n      this.dispatchEvent(new DialogOpenEvent());\n\n      this.addEventListener('click', this.#handleClick);\n      this.addEventListener('keydown', this.#handleKeyDown);\n    });\n  }\n\n  /**\n   * Closes the dialog.\n   */\n  closeDialog = async () => {\n    const { dialog } = this.refs;\n\n    if (!dialog.open) return;\n\n    this.removeEventListener('click', this.#handleClick);\n    this.removeEventListener('keydown', this.#handleKeyDown);\n\n    // Force browser to restart animation by resetting it\n    // Temporarily remove any existing animation state\n    dialog.style.animation = 'none';\n\n    // Force a reflow\n    void dialog.offsetWidth;\n\n    // Now add the closing class and restore animation\n    dialog.classList.add('dialog-closing');\n    dialog.style.animation = '';\n\n    await onAnimationEnd(dialog, undefined, {\n      subtree: false,\n    });\n\n    document.body.style.width = '';\n    document.body.style.position = '';\n    document.body.style.top = '';\n    window.scrollTo({ top: this.#previousScrollY, behavior: 'instant' });\n\n    dialog.close();\n    dialog.classList.remove('dialog-closing');\n\n    this.dispatchEvent(new DialogCloseEvent());\n  };\n\n  /**\n   * Toggles the dialog.\n   */\n  toggleDialog = () => {\n    if (this.refs.dialog.open) {\n      this.closeDialog();\n    } else {\n      this.showDialog();\n    }\n  };\n\n  /**\n   * Closes the dialog when the user clicks outside of it.\n   *\n   * @param {MouseEvent} event - The mouse event.\n   */\n  #handleClick(event) {\n    const { dialog } = this.refs;\n\n    if (isClickedOutside(event, dialog)) {\n      this.closeDialog();\n    }\n  }\n\n  /**\n   * Closes the dialog when the user presses the escape key.\n   *\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  #handleKeyDown(event) {\n    if (event.key !== 'Escape') return;\n\n    event.preventDefault();\n    this.closeDialog();\n  }\n\n  /**\n   * Gets the minimum width of the dialog.\n   *\n   * @returns {number} The minimum width of the dialog.\n   */\n  get minWidth() {\n    return Number(this.getAttribute('dialog-active-min-width'));\n  }\n\n  /**\n   * Gets the maximum width of the dialog.\n   *\n   * @returns {number} The maximum width of the dialog.\n   */\n  get maxWidth() {\n    return Number(this.getAttribute('dialog-active-max-width'));\n  }\n}\n\nif (!customElements.get('dialog-component')) customElements.define('dialog-component', DialogComponent);\n\nexport class DialogOpenEvent extends CustomEvent {\n  constructor() {\n    super(DialogOpenEvent.eventName);\n  }\n\n  static eventName = 'dialog:open';\n}\n\nexport class DialogCloseEvent extends CustomEvent {\n  constructor() {\n    super(DialogCloseEvent.eventName);\n  }\n\n  static eventName = 'dialog:close';\n}\n\ndocument.addEventListener(\n  'toggle',\n  (event) => {\n    if (event.target instanceof HTMLDetailsElement) {\n      if (event.target.hasAttribute('scroll-lock')) {\n        const { open } = event.target;\n        if (open) {\n          document.documentElement.setAttribute('scroll-lock', '');\n        } else {\n          document.documentElement.removeAttribute('scroll-lock');\n        }\n      }\n    }\n  },\n  { capture: true }\n);\n"
  },
  {
    "path": "assets/drag-zoom-wrapper.js",
    "content": "import { DialogCloseEvent } from './dialog.js';\nimport { clamp, preventDefault, isMobileBreakpoint } from './utilities.js';\nimport { Component } from '@theme/component';\n\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 5;\nconst DEFAULT_ZOOM = 1.5;\nconst DOUBLE_TAP_DELAY = 300;\nconst DOUBLE_TAP_DISTANCE = 50;\nconst DRAG_THRESHOLD = 10;\n\n/**\n * @typedef {object} Refs\n * @property {HTMLImageElement} image - The image element to zoom and drag.\n */\n\n/** @extends {Component<Refs>} */\nexport class DragZoomWrapper extends Component {\n  requiredRefs = ['image'];\n  #controller = new AbortController();\n  /** @type {number} */\n  #scale = DEFAULT_ZOOM;\n  /** @type {number} */\n  #initialDistance = 0;\n  /** @type {number} */\n  #startScale = DEFAULT_ZOOM;\n  /** @type {Point} */\n  #translate = { x: 0, y: 0 };\n  /** @type {Point} */\n  #startPosition = { x: 0, y: 0 };\n  /** @type {Point} */\n  #startTranslate = { x: 0, y: 0 };\n  /** @type {boolean} */\n  #isDragging = false;\n  /** @type {boolean} */\n  #initialized = false;\n  /** @type {number | null} */\n  #animationFrame = null;\n  /** @type {number} */\n  #lastTapTime = 0;\n  /** @type {Point | null} */\n  #lastTapPosition = null;\n\n  /** @type {boolean} */\n  #hasDraggedBeyondThreshold = false;\n\n  /** @type {boolean} */\n  #hasManualZoom = false;\n\n  get #image() {\n    return this.refs.image;\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    if (!this.#image) return;\n\n    this.#initResizeListener();\n    window.addEventListener(DialogCloseEvent.eventName, this.#resetZoom);\n\n    if (!isMobileBreakpoint()) return;\n\n    this.#initEventListeners();\n    this.#updateTransform();\n  }\n\n  #initResizeListener() {\n    this.#resizeObserver.observe(this);\n  }\n\n  #initEventListeners() {\n    if (this.#initialized) return;\n    this.#initialized = true;\n    const { signal } = this.#controller;\n    const options = { passive: false, signal };\n\n    this.addEventListener('touchstart', this.#handleTouchStart, options);\n    this.addEventListener('touchmove', this.#handleTouchMove, options);\n    this.addEventListener('touchend', this.#handleTouchEnd, options);\n\n    // Initialize transform immediately\n    this.#updateTransform();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener(DialogCloseEvent.eventName, this.#resetZoom);\n    this.#controller.abort();\n    this.#resizeObserver.disconnect();\n    this.#cancelAnimationFrame();\n  }\n\n  #handleResize = () => {\n    if (!this.#initialized && isMobileBreakpoint()) {\n      this.#initEventListeners();\n    }\n\n    if (this.#initialized) {\n      this.#requestUpdateTransform();\n    }\n  };\n\n  #resizeObserver = new ResizeObserver(this.#handleResize);\n\n  /**\n   * @param {TouchEvent} event\n   */\n  #handleTouchStart = (event) => {\n    preventDefault(event);\n\n    const touchCount = event.touches.length;\n\n    if (touchCount === 2) {\n      // Early exit if touches are invalid\n      const touch1 = event.touches[0];\n      const touch2 = event.touches[1];\n      if (!touch1 || !touch2) return;\n\n      // Avoid object allocation by passing touches directly\n      this.#startZoomGestureFromTouches(touch1, touch2);\n    } else if (touchCount === 1) {\n      const touch = event.touches[0];\n      if (!touch) return;\n\n      // Use performance.now() for better precision and performance\n      const currentTime = performance.now();\n      const timeSinceLastTap = currentTime - this.#lastTapTime;\n\n      // Early exit if too much time has passed\n      if (timeSinceLastTap >= DOUBLE_TAP_DELAY) {\n        this.#storeTapInfo(currentTime, touch);\n        this.#startDragGestureFromTouch(touch);\n        return;\n      }\n\n      // Only check distance if we have a previous tap within time window\n      if (this.#lastTapPosition) {\n        // Distance calculation with early exit\n        const distance = getDistance(touch, this.#lastTapPosition);\n\n        if (distance < DOUBLE_TAP_DISTANCE) {\n          // This is a double-tap, handle zoom toggle\n          this.#handleDoubleTapFromTouch(touch);\n          this.#lastTapTime = 0; // Reset to prevent triple-tap\n          this.#lastTapPosition = null;\n          return;\n        }\n      }\n\n      // Store tap info for potential double-tap detection\n      this.#storeTapInfo(currentTime, touch);\n      this.#startDragGestureFromTouch(touch);\n    }\n  };\n\n  /**\n   * Start a zoom gesture with two touches\n   * @param {Touch} touch1\n   * @param {Touch} touch2\n   */\n  #startZoomGestureFromTouches(touch1, touch2) {\n    // Calculate initial distance between touches\n    this.#initialDistance = getDistance(touch1, touch2);\n    this.#startScale = this.#scale;\n    this.#isDragging = false;\n  }\n\n  /**\n   * Start a drag gesture with a single touch\n   * @param {Touch} touch\n   */\n  #startDragGestureFromTouch(touch) {\n    this.#startPosition = { x: touch.clientX, y: touch.clientY };\n    this.#startTranslate = { x: this.#translate.x, y: this.#translate.y };\n    this.#isDragging = true;\n    this.#hasDraggedBeyondThreshold = false;\n  }\n\n  /**\n   * Store tap information for double-tap detection\n   * @param {number} currentTime\n   * @param {Touch} touch\n   */\n  #storeTapInfo(currentTime, touch) {\n    this.#lastTapTime = currentTime;\n    this.#lastTapPosition = { x: touch.clientX, y: touch.clientY };\n  }\n\n  /**\n   * Handle double-tap zoom toggle from touch\n   * @param {Touch} touch - The touch where the double-tap occurred\n   */\n  #handleDoubleTapFromTouch(touch) {\n    const containerCenter = {\n      x: this.clientWidth / 2,\n      y: this.clientHeight / 2,\n    };\n\n    let targetZoom;\n\n    // If manual zoom has been used, reset to 1x\n    if (this.#hasManualZoom) {\n      targetZoom = MIN_ZOOM; // 1x\n      this.#hasManualZoom = false; // Reset the flag\n      this.#translate = { x: 0, y: 0 }; // Center the image\n    } else {\n      // Toggle between zoom levels: 1x ↔ 1.5x\n      const tolerance = 0.05; // Small tolerance for floating point comparison\n\n      if (Math.abs(this.#scale - MIN_ZOOM) < tolerance) {\n        // Currently at 1x, go to 1.5x\n        targetZoom = DEFAULT_ZOOM;\n      } else {\n        // Currently at 1.5x or any other level, go to 1x\n        targetZoom = MIN_ZOOM;\n      }\n    }\n\n    // If we're not going to 1x, adjust translation to center zoom on the tap point\n    if (targetZoom !== MIN_ZOOM) {\n      const oldScale = this.#scale;\n      this.#scale = Math.min(MAX_ZOOM, targetZoom);\n\n      // Calculate the distance from tap point to container center\n      const distanceFromCenter = {\n        x: touch.clientX - containerCenter.x,\n        y: touch.clientY - containerCenter.y,\n      };\n\n      // Adjust translation to center zoom on the tap point\n      const scaleDelta = this.#scale / oldScale - 1.0;\n      this.#translate.x -= (distanceFromCenter.x * scaleDelta) / this.#scale;\n      this.#translate.y -= (distanceFromCenter.y * scaleDelta) / this.#scale;\n    } else {\n      // Going to 1x, set the scale and center the image\n      this.#scale = targetZoom;\n      this.#translate = { x: 0, y: 0 }; // Center the image when going to 1x\n    }\n\n    this.#requestUpdateTransform();\n  }\n\n  /**\n   * @param {TouchEvent} event\n   */\n  #handleTouchMove = (event) => {\n    preventDefault(event);\n\n    const touchCount = event.touches.length;\n\n    if (touchCount === 2) {\n      const touch1 = event.touches[0];\n      const touch2 = event.touches[1];\n      if (touch1 && touch2) {\n        this.#processZoomGesture(touch1, touch2);\n      }\n    } else if (touchCount === 1 && this.#isDragging) {\n      const touch = event.touches[0];\n      if (touch) {\n        this.#processDragGesture(touch);\n      }\n    }\n  };\n\n  /**\n   * Process zoom gesture from touches\n   * @param {Touch} touch1\n   * @param {Touch} touch2\n   */\n  #processZoomGesture(touch1, touch2) {\n    // Calculate midpoint directly without object allocation\n    const midX = (touch1.clientX + touch2.clientX) / 2;\n    const midY = (touch1.clientY + touch2.clientY) / 2;\n\n    // Calculate current distance between touches\n    const currentDistance = getDistance(touch1, touch2);\n\n    const oldScale = this.#scale;\n\n    // Calculate and apply new scale\n    const newScale = (currentDistance / this.#initialDistance) * this.#startScale;\n    this.#scale = clamp(newScale, MIN_ZOOM, MAX_ZOOM);\n\n    // Mark that manual zoom has been used\n    this.#hasManualZoom = true;\n\n    // Adjust translation to keep the pinch midpoint stationary\n    const containerCenterX = this.clientWidth / 2;\n    const containerCenterY = this.clientHeight / 2;\n\n    const distanceFromCenterX = midX - containerCenterX;\n    const distanceFromCenterY = midY - containerCenterY;\n\n    // Calculate how the image position needs to change to keep the midpoint stationary\n    const scaleDelta = this.#scale / oldScale - 1.0;\n\n    // Apply correction to prevent zooming on the opposite side of the midpoint\n    this.#translate.x -= (distanceFromCenterX * scaleDelta) / this.#scale;\n    this.#translate.y -= (distanceFromCenterY * scaleDelta) / this.#scale;\n\n    this.#requestUpdateTransform();\n    this.#isDragging = false;\n  }\n\n  /**\n   * Process drag gesture from touch\n   * @param {Touch} touch\n   */\n  #processDragGesture(touch) {\n    // Check if we've moved beyond the drag threshold\n    const distance = getDistance(touch, this.#startPosition);\n\n    if (!this.#hasDraggedBeyondThreshold && distance < DRAG_THRESHOLD) {\n      // Movement is too small, don't process as drag yet\n      return;\n    }\n\n    this.#hasDraggedBeyondThreshold = true;\n\n    // Calculate movement deltas for translation\n    const dx = touch.clientX - this.#startPosition.x;\n    const dy = touch.clientY - this.#startPosition.y;\n\n    // Calculate new translation directly\n    this.#translate.x = this.#startTranslate.x + dx / this.#scale;\n    this.#translate.y = this.#startTranslate.y + dy / this.#scale;\n\n    this.#requestUpdateTransform();\n  }\n\n  /**\n   * @param {TouchEvent} event\n   */\n  #handleTouchEnd = (event) => {\n    if (event.touches.length === 0) {\n      this.#isDragging = false;\n      this.#requestUpdateTransform();\n\n      this.#hasDraggedBeyondThreshold = false;\n    }\n  };\n\n  /**\n   * Constrain image translation to keep it within the viewport\n   */\n  #constrainTranslation() {\n    const containerWidth = this.clientWidth;\n    const containerHeight = this.clientHeight;\n    if (!containerWidth || !containerHeight || !this.#image) return;\n\n    // Keep scale between MIN_ZOOM (1) and MAX_ZOOM (5)\n    this.#scale = clamp(this.#scale, MIN_ZOOM, MAX_ZOOM);\n\n    // At minimum zoom (1x), the full image should be visible with no dragging allowed\n    if (this.#scale <= MIN_ZOOM) {\n      this.#translate.x = 0;\n      this.#translate.y = 0;\n      return;\n    }\n\n    // Get wrapper dimensions\n    const wrapperRect = this.getBoundingClientRect();\n\n    // Calculate ACTUAL image content dimensions at current zoom\n    // The image element may fill the wrapper, but the content has its own aspect ratio\n    const imageElement = this.#image;\n    let naturalWidth, naturalHeight;\n\n    // Try to get natural dimensions\n    if (imageElement.naturalWidth > 0 && imageElement.naturalHeight > 0) {\n      naturalWidth = imageElement.naturalWidth;\n      naturalHeight = imageElement.naturalHeight;\n    } else {\n      // Fallback: assume square image if we can't get natural dimensions\n      naturalWidth = wrapperRect.width;\n      naturalHeight = wrapperRect.width;\n    }\n\n    // Calculate how the image fits within the wrapper (object-fit: contain behavior)\n    const imageAspectRatio = naturalWidth / naturalHeight;\n    const wrapperAspectRatio = wrapperRect.width / wrapperRect.height;\n\n    let actualImageWidth, actualImageHeight;\n\n    if (imageAspectRatio > wrapperAspectRatio) {\n      // Image is wider - width fits exactly, height is smaller (letterboxed top/bottom)\n      actualImageWidth = wrapperRect.width;\n      actualImageHeight = actualImageWidth / imageAspectRatio;\n    } else {\n      // Image is taller - height fits exactly, width is smaller (letterboxed left/right)\n      actualImageHeight = wrapperRect.height;\n      actualImageWidth = actualImageHeight * imageAspectRatio;\n    }\n\n    // Apply current zoom scale\n    const scaledImageWidth = actualImageWidth * this.#scale;\n    const scaledImageHeight = actualImageHeight * this.#scale;\n\n    // SIMPLE APPROACH: Calculate constraints directly from image content dimensions\n    // If image content is larger than wrapper, calculate max translation directly\n\n    const horizontalOverflow = Math.max(0, scaledImageWidth - wrapperRect.width);\n    const verticalOverflow = Math.max(0, scaledImageHeight - wrapperRect.height);\n\n    // Max translation is half the overflow (since image starts centered)\n    const maxTranslateX = horizontalOverflow / 2 / this.#scale;\n    const maxTranslateY = verticalOverflow / 2 / this.#scale;\n\n    // Apply symmetric constraints (object-fit: contain behavior)\n    // Image starts centered, can move maxTranslate in each direction\n    this.#translate.x = clamp(this.#translate.x, -maxTranslateX, maxTranslateX);\n    this.#translate.y = clamp(this.#translate.y, -maxTranslateY, maxTranslateY);\n\n    // Apply final transforms to CSS\n    this.style.setProperty('--drag-zoom-scale', this.#scale.toString());\n    this.style.setProperty('--drag-zoom-translate-x', `${this.#translate.x}px`);\n    this.style.setProperty('--drag-zoom-translate-y', `${this.#translate.y}px`);\n  }\n\n  /**\n   * Request an animation frame to update the transform\n   */\n  #requestUpdateTransform = () => {\n    if (!this.#animationFrame) {\n      this.#animationFrame = requestAnimationFrame(this.#updateTransform);\n    }\n  };\n\n  /**\n   * Cancel any pending animation frame\n   */\n  #cancelAnimationFrame() {\n    if (this.#animationFrame) {\n      cancelAnimationFrame(this.#animationFrame);\n      this.#animationFrame = null;\n    }\n  }\n\n  #updateTransform = () => {\n    this.#animationFrame = null;\n\n    this.#constrainTranslation();\n    this.style.setProperty('--drag-zoom-scale', this.#scale.toString());\n    this.style.setProperty('--drag-zoom-translate-x', `${this.#translate.x}px`);\n    this.style.setProperty('--drag-zoom-translate-y', `${this.#translate.y}px`);\n  };\n\n  /**\n   * Reset zoom to default state (1.5x scale, centered position)\n   * Called when zoom is exited/closed\n   */\n  #resetZoom = () => {\n    // Reset scale and translation to defaults\n    this.#scale = DEFAULT_ZOOM;\n    this.#startScale = DEFAULT_ZOOM;\n    this.#translate.x = 0;\n    this.#translate.y = 0;\n\n    // Reset gesture state to prevent interference on next zoom open\n    this.#startPosition = { x: 0, y: 0 };\n    this.#startTranslate = { x: 0, y: 0 };\n    this.#isDragging = false;\n    this.#lastTapTime = 0;\n    this.#lastTapPosition = null;\n    this.#hasDraggedBeyondThreshold = false;\n\n    // Update CSS properties to reflect reset state\n    this.style.setProperty('--drag-zoom-scale', DEFAULT_ZOOM.toString());\n    this.style.setProperty('--drag-zoom-translate-x', '0px');\n    this.style.setProperty('--drag-zoom-translate-y', '0px');\n  };\n\n  destroy() {\n    this.#controller.abort();\n    this.#cancelAnimationFrame();\n  }\n}\n\n/**\n * Calculate distance between two points or touches\n * @param {Point | Touch} point1 - First point or touch\n * @param {Point | Touch} point2 - Second point or touch\n * @returns {number} Distance between the points\n */\nfunction getDistance(point1, point2) {\n  // Handle both Point objects (x, y) and Touch objects (clientX, clientY)\n  const x1 = /** @type {Point} */ (point1).x ?? /** @type {Touch} */ (point1).clientX;\n  const y1 = /** @type {Point} */ (point1).y ?? /** @type {Touch} */ (point1).clientY;\n  const x2 = /** @type {Point} */ (point2).x ?? /** @type {Touch} */ (point2).clientX;\n  const y2 = /** @type {Point} */ (point2).y ?? /** @type {Touch} */ (point2).clientY;\n\n  const dx = x1 - x2;\n  const dy = y1 - y2;\n  return Math.sqrt(dx * dx + dy * dy);\n}\n\nif (!customElements.get('drag-zoom-wrapper')) {\n  customElements.define('drag-zoom-wrapper', DragZoomWrapper);\n}\n\n/**\n * @typedef {Object} Point\n * @property {number} x\n * @property {number} y\n */\n\n/**\n * @typedef {HTMLElement} ZoomDialogElement\n * @property {Function} close - Method to close the zoom dialog\n */\n"
  },
  {
    "path": "assets/events.js",
    "content": "/**\n * @namespace ThemeEvents\n * @description A collection of theme-specific events that can be used to trigger and listen for changes anywhere in the theme.\n * @example\n * document.dispatchEvent(new VariantUpdateEvent(variant, sectionId, { html }));\n * document.addEventListener(ThemeEvents.variantUpdate, (e) => { console.log(e.detail.variant) });\n */\nexport class ThemeEvents {\n  /** @static @constant {string} Event triggered when a variant is selected */\n  static variantSelected = 'variant:selected';\n  /** @static @constant {string} Event triggered when a variant is changed */\n  static variantUpdate = 'variant:update';\n  /** @static @constant {string} Event triggered when the cart items or quantities are updated */\n  static cartUpdate = 'cart:update';\n  /** @static @constant {string} Event triggered when a cart update fails */\n  static cartError = 'cart:error';\n  /** @static @constant {string} Event triggered when a media (video, 3d model) is loaded */\n  static mediaStartedPlaying = 'media:started-playing';\n  // Event triggered when quantity-selector value is changed\n  static quantitySelectorUpdate = 'quantity-selector:update';\n  /** @static @constant {string} Event triggered when a predictive search is expanded */\n  static megaMenuHover = 'megaMenu:hover';\n  /** @static @constant {string} Event triggered when a zoom dialog media is selected */\n  static zoomMediaSelected = 'zoom-media:selected';\n  /** @static @constant {string} Event triggered when a discount is applied */\n  static discountUpdate = 'discount:update';\n  /** @static @constant {string} Event triggered when changing collection filters */\n  static FilterUpdate = 'filter:update';\n}\n\n/**\n * Event fired when a variant is selected\n * @extends {Event}\n */\nexport class VariantSelectedEvent extends Event {\n  /**\n   * Creates a new VariantSelectedEvent\n   * @param {Object} resource - The new variant object\n   * @param {string} resource.id - The option value id\n   */\n  constructor(resource) {\n    super(ThemeEvents.variantSelected, { bubbles: true });\n    this.detail = {\n      resource,\n    };\n  }\n}\n\n/**\n * Event fired after a variant is updated\n * @extends {Event}\n */\nexport class VariantUpdateEvent extends Event {\n  /**\n   * Creates a new VariantUpdateEvent\n   * @param {Object} resource - The new variant object\n   * @param {string} resource.id - The id of the variant\n   * @param {boolean} resource.available - Whether the variant is available\n   * @param {boolean} resource.inventory_management - Whether the variant has inventory management\n   * @param {string} [resource.sku] - The SKU of the variant\n   * @param {Object} [resource.featured_media] - The featured media of the variant\n   * @param {string} [resource.featured_media.id] - The id of the featured media\n   * @param {Object} [resource.featured_media.preview_image] - The preview image of the featured media\n   * @param {string} [resource.featured_media.preview_image.src] - The src URL of the preview image\n   * @param {string} sourceId - The id of the element the action was triggered from\n   * @param {Object} data - Additional event data\n   * @param {Document} data.html - The new document fragment for the variant\n   * @param {string} data.productId - The product ID of the updated variant, used to ensure the correct product form is updated\n   * @param {Object} [data.newProduct] - If a new product was loaded as part of the variant update (combined listing)\n   * @param {string} data.newProduct.id - The id of the new product\n   * @param {string} data.newProduct.url - The url of the new product\n   */\n  constructor(resource, sourceId, data) {\n    super(ThemeEvents.variantUpdate, { bubbles: true });\n    this.detail = {\n      resource: resource || null,\n      sourceId,\n      data: {\n        html: data.html,\n        productId: data.productId,\n        newProduct: data.newProduct,\n      },\n    };\n  }\n}\n\n/**\n * Event class for cart additions\n * @extends {Event}\n */\nexport class CartAddEvent extends Event {\n  /**\n   * Creates a new CartAddEvent\n   * @param {Object} [resource] - The new cart object\n   * @param {string} [sourceId] - The id of the element the action was triggered from\n   * @param {Object} [data] - Additional event data\n   * @param {boolean} [data.didError] - Whether the cart operation failed\n   * @param {string} [data.source] - The source of the cart update\n   * @param {string} [data.productId] - The id of the product card that was updated\n   * @param {number} [data.itemCount] - The number of items in the cart\n   * @param {string} [data.variantId] - The id of the product variant that was added\n   * @param {Record<string, string>} [data.sections] - The sections affected by the cart operation\n   */\n  constructor(resource, sourceId, data) {\n    super(CartAddEvent.eventName, { bubbles: true });\n    this.detail = {\n      resource,\n      sourceId,\n      data: {\n        ...data,\n      },\n    };\n  }\n\n  static eventName = ThemeEvents.cartUpdate;\n}\n\n/**\n * Event class for cart updates\n * @extends {Event}\n */\nexport class CartUpdateEvent extends Event {\n  /**\n   * Creates a new CartUpdateEvent\n   * @param {Object} resource - The new cart object\n   * @param {string} sourceId - The id of the element the action was triggered from\n   * @param {Object} [data] - Additional event data\n   * @param {boolean} [data.didError] - Whether the cart operation failed\n   * @param {string} [data.source] - The source of the cart update\n   * @param {string} [data.productId] - The id of the product card that was updated\n   * @param {number} [data.itemCount] - The number of items in the cart\n   * @param {string} [data.variantId] - The id of the product variant that was updated\n   * @param {Record<string, string>} [data.sections] - The sections affected by the cart operation\n   */\n  constructor(resource, sourceId, data) {\n    super(ThemeEvents.cartUpdate, { bubbles: true });\n    this.detail = {\n      resource,\n      sourceId,\n      data: {\n        ...data,\n      },\n    };\n  }\n}\n\n/**\n * Event class for cart errors\n * @extends {Event}\n */\nexport class CartErrorEvent extends Event {\n  /**\n   * Creates a new CartErrorEvent\n   * @param {string} sourceId - The id of the element the action was triggered from\n   * @param {string} message - A message from the server response\n   * @param {Object} description - Description from the server response\n   * @param {Object} errors - Errors from the server response\n   */\n  constructor(sourceId, message, description, errors) {\n    super(ThemeEvents.cartError, { bubbles: true });\n    this.detail = {\n      sourceId,\n      data: {\n        message,\n        errors,\n        description,\n      },\n    };\n  }\n}\n\n/**\n * Event class for quantity-selector updates\n * @extends {Event}\n */\nexport class QuantitySelectorUpdateEvent extends Event {\n  /**\n   * Creates a new QuantitySelectorUpdateEvent\n   * @param {number} quantity - Quantity value\n   * @param {number} [cartLine] - The id of the updated cart line\n   */\n  constructor(quantity, cartLine) {\n    super(ThemeEvents.quantitySelectorUpdate, { bubbles: true });\n    this.detail = {\n      quantity,\n      cartLine,\n    };\n  }\n}\n\n/**\n * Event class for quantity-selector updates\n * @extends {Event}\n */\nexport class DiscountUpdateEvent extends Event {\n  /**\n   * Creates a new DiscountUpdateEvent\n   * @param {Object} resource - The new cart object\n   * @param {string} sourceId - The id of the element the action was triggered from\n   */\n  constructor(resource, sourceId) {\n    super(ThemeEvents.discountUpdate, { bubbles: true });\n    this.detail = {\n      resource,\n      sourceId,\n    };\n  }\n}\n\n/**\n * Event class for media playback starts\n * @extends {Event}\n */\nexport class MediaStartedPlayingEvent extends Event {\n  /**\n   * Creates a new MediaStartedPlayingEvent\n   * @param {HTMLElement} resource - The element containing the video that emitted the event\n   */\n  constructor(resource) {\n    super(ThemeEvents.mediaStartedPlaying, { bubbles: true });\n    this.detail = {\n      resource,\n    };\n  }\n}\n\n/**\n * @typedef {Object} SlideshowSelectEventData\n * @property {number} index\n * @property {string | null} id\n * @property {Element} slide\n * @property {number} previousIndex\n * @property {boolean} userInitiated\n * @property {'select' | 'scroll' | 'drag'} trigger\n */\n\nexport class SlideshowSelectEvent extends Event {\n  /**  @param {SlideshowSelectEventData} data */\n  constructor(data) {\n    super(SlideshowSelectEvent.eventName, { bubbles: true });\n    this.detail = data;\n  }\n\n  /** @type {SlideshowSelectEventData} */\n  detail;\n\n  static eventName = 'slideshow:select';\n}\n\n/**\n * Event class for zoom dialog media selection\n * @extends {Event}\n */\nexport class ZoomMediaSelectedEvent extends Event {\n  /**\n   * Creates a new ZoomMediaSelectedEvent\n   * @param {number} index - The index of the selected media\n   */\n  constructor(index) {\n    super(ThemeEvents.zoomMediaSelected, { bubbles: true });\n    this.detail = {\n      index,\n    };\n  }\n}\n\n/**\n * Event class for mega menu hover being hovered over\n * @extends {Event}\n */\nexport class MegaMenuHoverEvent extends Event {\n  constructor() {\n    super(ThemeEvents.megaMenuHover, { bubbles: true });\n  }\n}\n\n/** Event class for facet filtering updates */\nexport class FilterUpdateEvent extends Event {\n  /** @param {URLSearchParams} queryParams */\n  constructor(queryParams) {\n    super(ThemeEvents.FilterUpdate, { bubbles: true });\n    this.detail = {\n      queryParams,\n    };\n  }\n\n  shouldShowClearAll() {\n    return [...this.detail.queryParams.entries()].filter(([key]) => key.startsWith('filter.')).length > 0;\n  }\n}\n"
  },
  {
    "path": "assets/facets.js",
    "content": "import { sectionRenderer } from '@theme/section-renderer';\nimport { Component } from '@theme/component';\nimport { FilterUpdateEvent, ThemeEvents } from '@theme/events';\nimport { debounce, startViewTransition } from '@theme/utilities';\nimport { convertMoneyToMinorUnits, formatMoney } from '@theme/money-formatting';\n/**\n * Search query parameter.\n * @type {string}\n */\nconst SEARCH_QUERY = 'q';\n\n/**\n * Handles the main facets form functionality\n *\n * @typedef {Object} FacetsFormRefs\n * @property {HTMLFormElement} facetsForm - The main facets form element\n * @property {HTMLElement | undefined} facetStatus - The facet status element\n *\n * @extends {Component<FacetsFormRefs>}\n */\nclass FacetsFormComponent extends Component {\n  requiredRefs = ['facetsForm'];\n\n  /**\n   * Creates URL parameters from form data\n   * @param {FormData} [formData] - Optional form data to use instead of the main form\n   * @returns {URLSearchParams} The processed URL parameters\n   */\n  createURLParameters(formData = new FormData(this.refs.facetsForm)) {\n    let newParameters = new URLSearchParams(/** @type any */ (formData));\n\n    if (newParameters.get('filter.v.price.gte') === '') newParameters.delete('filter.v.price.gte');\n    if (newParameters.get('filter.v.price.lte') === '') newParameters.delete('filter.v.price.lte');\n\n    newParameters.delete('page');\n\n    const searchQuery = this.#getSearchQuery();\n    if (searchQuery) newParameters.set(SEARCH_QUERY, searchQuery);\n\n    return newParameters;\n  }\n\n  /**\n   * Gets the search query parameter from the current URL\n   * @returns {string} The search query\n   */\n  #getSearchQuery() {\n    const url = new URL(window.location.href);\n    return url.searchParams.get(SEARCH_QUERY) ?? '';\n  }\n\n  get sectionId() {\n    const id = this.getAttribute('section-id');\n    if (!id) throw new Error('Section ID is required');\n    return id;\n  }\n\n  /**\n   * Updates the URL hash with current filter parameters\n   */\n  #updateURLHash() {\n    const url = new URL(window.location.href);\n    const urlParameters = this.createURLParameters();\n\n    url.search = '';\n    for (const [param, value] of urlParameters.entries()) {\n      url.searchParams.append(param, value);\n    }\n\n    history.pushState({ urlParameters: urlParameters.toString() }, '', url.toString());\n  }\n\n  /**\n   * Updates filters and renders the section\n   */\n  updateFilters = () => {\n    this.#updateURLHash();\n    this.dispatchEvent(new FilterUpdateEvent(this.createURLParameters()));\n    this.#updateSection();\n  };\n\n  /**\n   * Updates the section\n   */\n  #updateSection() {\n    const viewTransition = !this.closest('dialog');\n\n    if (viewTransition) {\n      startViewTransition(() => sectionRenderer.renderSection(this.sectionId), ['product-grid']);\n    } else {\n      sectionRenderer.renderSection(this.sectionId);\n    }\n  }\n\n  /**\n   * Updates filters based on a provided URL\n   * @param {string} url - The URL to update filters with\n   */\n  updateFiltersByURL(url) {\n    history.pushState('', '', url);\n    this.dispatchEvent(new FilterUpdateEvent(this.createURLParameters()));\n    this.#updateSection();\n  }\n}\n\nif (!customElements.get('facets-form-component')) {\n  customElements.define('facets-form-component', FacetsFormComponent);\n}\n\n/**\n * @typedef {Object} FacetInputsRefs\n * @property {HTMLInputElement[]} facetInputs - The facet input elements\n */\n\n/**\n * Handles individual facet input functionality\n * @extends {Component<FacetInputsRefs>}\n */\nclass FacetInputsComponent extends Component {\n  get sectionId() {\n    const id = this.closest('.shopify-section')?.id;\n    if (!id) throw new Error('FacetInputs component must be a child of a section');\n    return id;\n  }\n\n  /**\n   * Updates filters and the selected facet summary\n   */\n  updateFilters() {\n    const facetsForm = this.closest('facets-form-component');\n\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n\n    facetsForm.updateFilters();\n    this.#updateSelectedFacetSummary();\n  }\n\n  /**\n   * Handles keydown events for the facets form\n   * @param {KeyboardEvent} event - The keydown event\n   */\n  handleKeyDown(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n    const closestInput = event.target.querySelector('input');\n\n    if (!(closestInput instanceof HTMLInputElement)) return;\n\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n      closestInput.checked = !closestInput.checked;\n      this.updateFilters();\n    }\n  }\n\n  /**\n   * Handles mouseover events on facet labels\n   * @param {MouseEvent} event - The mouseover event\n   */\n  prefetchPage = debounce((event) => {\n    if (!(event.target instanceof HTMLElement)) return;\n\n    const form = this.closest('form');\n    if (!form) return;\n\n    const formData = new FormData(form);\n    const inputElement = event.target.querySelector('input');\n\n    if (!(inputElement instanceof HTMLInputElement)) return;\n\n    if (!inputElement.checked) formData.append(inputElement.name, inputElement.value);\n\n    const facetsForm = this.closest('facets-form-component');\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n\n    const urlParameters = facetsForm.createURLParameters(formData);\n\n    const url = new URL(window.location.pathname, window.location.origin);\n\n    for (const [key, value] of urlParameters) url.searchParams.append(key, value);\n\n    if (inputElement.checked) url.searchParams.delete(inputElement.name, inputElement.value);\n\n    sectionRenderer.getSectionHTML(this.sectionId, true, url);\n  }, 200);\n\n  cancelPrefetchPage = () => this.prefetchPage.cancel();\n\n  /**\n   * Updates the selected facet summary\n   */\n  #updateSelectedFacetSummary() {\n    if (!this.refs.facetInputs) return;\n\n    const checkedInputElements = this.refs.facetInputs.filter((input) => input.checked);\n    const details = this.closest('details');\n    const statusComponent = details?.querySelector('facet-status-component');\n\n    if (!(statusComponent instanceof FacetStatusComponent)) return;\n\n    statusComponent.updateListSummary(checkedInputElements);\n  }\n}\n\nif (!customElements.get('facet-inputs-component')) {\n  customElements.define('facet-inputs-component', FacetInputsComponent);\n}\n\n/**\n * @typedef {Object} PriceFacetRefs\n * @property {HTMLInputElement} minInput - The minimum price input\n * @property {HTMLInputElement} maxInput - The maximum price input\n */\n\n/**\n * Handles price facet functionality\n * @extends {Component<PriceFacetRefs>}\n */\nclass PriceFacetComponent extends Component {\n  /** @type {string} */\n  currency;\n  /** @type {string} */\n  moneyFormat;\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('keydown', this.#onKeyDown);\n    this.currency = this.dataset.currency ?? 'USD';\n    this.moneyFormat = this.#extractMoneyPlaceholder(this.dataset.moneyFormat ?? '{{amount}}');\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener('keydown', this.#onKeyDown);\n  }\n\n  /**\n   * Extracts the placeholder from a money format string, removing currency symbols.\n   * @param {string} format - The money format (e.g., \"${{amount}}\", \"{{amount}} USD\")\n   * @returns {string} Just the placeholder (e.g., \"{{amount}}\")\n   */\n  #extractMoneyPlaceholder(format) {\n    const match = format.match(/{{\\s*\\w+\\s*}}/);\n    return match ? match[0] : '{{amount}}';\n  }\n\n  /**\n   * Handles keydown events to restrict input to valid characters\n   * @param {KeyboardEvent} event - The keydown event\n   */\n  #onKeyDown = (event) => {\n    if (event.metaKey) return;\n\n    const pattern = /[0-9]|\\.|,|'| |Tab|Backspace|Enter|ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Delete|Escape/;\n    if (!event.key.match(pattern)) event.preventDefault();\n  };\n\n  /**\n   * Updates price filter and results\n   */\n  updatePriceFilterAndResults() {\n    const { minInput, maxInput } = this.refs;\n\n    this.#adjustToValidValues(minInput);\n    this.#adjustToValidValues(maxInput);\n\n    const facetsForm = this.closest('facets-form-component');\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n\n    facetsForm.updateFilters();\n    this.#setMinAndMaxValues();\n    this.#updateSummary();\n  }\n\n  /**\n   * Parses a formatted money value into minor units\n   * displayValue can come from user input or API response\n   * @param {string} displayValue - The display value (e.g., \"10.50\" for USD, \"9,50\" for EUR, \"1000\" for JPY)\n   * @param {string} currency - The currency code\n   * @returns {number} The value in minor units\n   */\n  #parseDisplayValue(displayValue, currency) {\n    return convertMoneyToMinorUnits(displayValue, currency) ?? 0;\n  }\n\n  /**\n   * Adjusts input values to be within valid range\n   * @param {HTMLInputElement} input - The input element to adjust\n   */\n  #adjustToValidValues(input) {\n    if (input.value.trim() === '') return;\n\n    const { currency, moneyFormat } = this;\n    // Parse the user's input value using currency-aware parsing\n    const value = this.#parseDisplayValue(input.value, currency);\n\n    // data-min and data-max now contain raw minor unit values (not formatted)\n    const min = this.#parseDisplayValue(input.getAttribute('data-min') ?? '0', currency);\n    const max = this.#parseDisplayValue(input.getAttribute('data-max') ?? '0', currency);\n\n    if (value < min) {\n      input.value = formatMoney(min, moneyFormat, currency);\n    } else if (value > max) {\n      input.value = formatMoney(max, moneyFormat, currency);\n    }\n  }\n\n  /**\n   * Sets min and max values for the inputs\n   */\n  #setMinAndMaxValues() {\n    const { minInput, maxInput } = this.refs;\n\n    if (maxInput.value) minInput.setAttribute('data-max', maxInput.value);\n    if (minInput.value) maxInput.setAttribute('data-min', minInput.value);\n    if (minInput.value === '') maxInput.setAttribute('data-min', '0');\n    if (maxInput.value === '') minInput.setAttribute('data-max', maxInput.getAttribute('data-max') ?? '');\n  }\n\n  /**\n   * Updates the price summary\n   */\n  #updateSummary() {\n    const { minInput, maxInput } = this.refs;\n    const details = this.closest('details');\n    const statusComponent = details?.querySelector('facet-status-component');\n\n    if (!(statusComponent instanceof FacetStatusComponent)) return;\n\n    statusComponent?.updatePriceSummary(minInput, maxInput);\n  }\n}\n\nif (!customElements.get('price-facet-component')) {\n  customElements.define('price-facet-component', PriceFacetComponent);\n}\n\n/**\n * Handles clearing of facet filters\n * @extends {Component}\n */\nclass FacetClearComponent extends Component {\n  requiredRefs = ['clearButton'];\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener('keyup', this.#handleKeyUp);\n    document.addEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    document.removeEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  /**\n   * Clears the filter\n   * @param {Event} event - The click event\n   */\n  clearFilter(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n\n    if (event instanceof KeyboardEvent) {\n      if (event.key !== 'Enter' && event.key !== ' ') {\n        return;\n      }\n      event.preventDefault();\n    }\n\n    const container = event.target.closest('facet-inputs-component, price-facet-component');\n    container?.querySelectorAll('[type=\"checkbox\"]:checked, input').forEach((input) => {\n      if (input instanceof HTMLInputElement) {\n        input.checked = false;\n        input.value = '';\n      }\n    });\n\n    const details = event.target.closest('details');\n    const statusComponent = details?.querySelector('facet-status-component');\n\n    if (!(statusComponent instanceof FacetStatusComponent)) return;\n\n    statusComponent.clearSummary();\n\n    const facetsForm = this.closest('facets-form-component');\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n\n    facetsForm.updateFilters();\n  }\n\n  /**\n   * Handles keyup events\n   * @param {KeyboardEvent} event - The keyup event\n   */\n  #handleKeyUp = (event) => {\n    if (event.metaKey) return;\n    if (event.key === 'Enter') this.clearFilter(event);\n  };\n\n  /**\n   * Toggle clear button visibility when filters are applied. Happens before the\n   * Section Rendering Request resolves.\n   *\n   * @param {FilterUpdateEvent} event\n   */\n  #handleFilterUpdate = (event) => {\n    const { clearButton } = this.refs;\n    if (clearButton instanceof Element) {\n      clearButton.classList.toggle('facets__clear--active', event.shouldShowClearAll());\n    }\n  };\n}\n\nif (!customElements.get('facet-clear-component')) {\n  customElements.define('facet-clear-component', FacetClearComponent);\n}\n\n/**\n * @typedef {Object} FacetRemoveComponentRefs\n * @property {HTMLInputElement | undefined} clearButton - The button to clear filters\n */\n\n/**\n * Handles removal of individual facet filters\n * @extends {Component<FacetRemoveComponentRefs>}\n */\nclass FacetRemoveComponent extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    document.addEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    document.removeEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  /**\n   * Removes the filter\n   * @param {Object} data - The data object\n   * @param {string} data.form - The form to remove the filter from\n   * @param {Event} event - The click event\n   */\n  removeFilter({ form }, event) {\n    if (event instanceof KeyboardEvent) {\n      if (event.key !== 'Enter' && event.key !== ' ') {\n        return;\n      }\n      event.preventDefault();\n    }\n\n    const url = this.dataset.url;\n    if (!url) return;\n\n    const facetsForm = form ? document.getElementById(form) : this.closest('facets-form-component');\n\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n\n    facetsForm.updateFiltersByURL(url);\n  }\n\n  /**\n   * Toggle clear button visibility when filters are applied. Happens before the\n   * Section Rendering Request resolves.\n   *\n   * @param {FilterUpdateEvent} event\n   */\n  #handleFilterUpdate = (event) => {\n    const { clearButton } = this.refs;\n    if (clearButton instanceof Element) {\n      const activeClass = this.getAttribute('active-class') || 'active';\n      clearButton.classList.toggle(activeClass, event.shouldShowClearAll());\n    }\n  };\n}\n\nif (!customElements.get('facet-remove-component')) {\n  customElements.define('facet-remove-component', FacetRemoveComponent);\n}\n\n/**\n * Handles sorting filter functionality\n *\n * @typedef {Object} SortingFilterRefs\n * @property {HTMLDetailsElement} details - The details element\n * @property {HTMLElement} summary - The summary element\n * @property {HTMLElement} listbox - The listbox element\n *\n * @extends {Component}\n */\nclass SortingFilterComponent extends Component {\n  requiredRefs = ['details', 'summary', 'listbox'];\n\n  /**\n   * Handles keyboard navigation in the sorting dropdown\n   * @param {KeyboardEvent} event - The keyboard event\n   */\n  handleKeyDown = (event) => {\n    const { listbox } = this.refs;\n    if (!(listbox instanceof Element)) return;\n\n    const options = Array.from(listbox.querySelectorAll('[role=\"option\"]'));\n    const currentFocused = options.find((option) => option instanceof HTMLElement && option.tabIndex === 0);\n    let newFocusIndex = currentFocused ? options.indexOf(currentFocused) : 0;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        newFocusIndex = Math.min(newFocusIndex + 1, options.length - 1);\n        this.#moveFocus(options, newFocusIndex);\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        newFocusIndex = Math.max(newFocusIndex - 1, 0);\n        this.#moveFocus(options, newFocusIndex);\n        break;\n\n      case 'Enter':\n      case ' ':\n        if (event.target instanceof Element) {\n          const targetOption = event.target.closest('[role=\"option\"]');\n          if (targetOption) {\n            event.preventDefault();\n            this.#selectOption(targetOption);\n          }\n        }\n        break;\n\n      case 'Escape':\n        event.preventDefault();\n        this.#closeDropdown();\n        break;\n    }\n  };\n\n  /**\n   * Handles details toggle event\n   */\n  handleToggle = () => {\n    const { details, summary, listbox } = this.refs;\n    if (!(details instanceof HTMLDetailsElement) || !(summary instanceof HTMLElement)) return;\n\n    const isOpen = details.open;\n    summary.setAttribute('aria-expanded', isOpen.toString());\n\n    if (isOpen && listbox instanceof Element) {\n      // Move focus to selected option when dropdown opens\n      const selectedOption = listbox.querySelector('[aria-selected=\"true\"]');\n      if (selectedOption instanceof HTMLElement) {\n        selectedOption.focus();\n      }\n    }\n  };\n\n  /**\n   * Moves focus between options\n   * @param {Element[]} options - The option elements\n   * @param {number} newIndex - The index of the option to focus\n   */\n  #moveFocus(options, newIndex) {\n    // Remove tabindex from all options\n    options.forEach((option) => {\n      if (option instanceof HTMLElement) {\n        option.tabIndex = -1;\n      }\n    });\n\n    // Set tabindex and focus on new option\n    const targetOption = options[newIndex];\n    if (targetOption instanceof HTMLElement) {\n      targetOption.tabIndex = 0;\n      targetOption.focus();\n    }\n  }\n\n  /**\n   * Selects an option and triggers form submission\n   * @param {Element} option - The option element to select\n   */\n  #selectOption(option) {\n    const input = option.querySelector('input[type=\"radio\"]');\n    if (input instanceof HTMLInputElement && option instanceof HTMLElement) {\n      // Update aria-selected states\n      this.querySelectorAll('[role=\"option\"]').forEach((opt) => {\n        opt.setAttribute('aria-selected', 'false');\n      });\n      option.setAttribute('aria-selected', 'true');\n\n      // Trigger click on the input to ensure normal form behavior\n      input.click();\n\n      // Close dropdown and return focus (handles tabIndex reset)\n      this.#closeDropdown();\n    }\n  }\n\n  /**\n   * Closes the dropdown and returns focus to summary\n   */\n  #closeDropdown() {\n    const { details, summary } = this.refs;\n    if (details instanceof HTMLDetailsElement) {\n      // Reset focus to match the actual selected option\n      const options = this.querySelectorAll('[role=\"option\"]');\n      const selectedOption = this.querySelector('[aria-selected=\"true\"]');\n\n      options.forEach((opt) => {\n        if (opt instanceof HTMLElement) {\n          opt.tabIndex = -1;\n        }\n      });\n\n      if (selectedOption instanceof HTMLElement) {\n        selectedOption.tabIndex = 0;\n      }\n\n      details.open = false;\n      if (summary instanceof HTMLElement) {\n        summary.focus();\n      }\n    }\n  }\n\n  /**\n   * Updates filter and sorting\n   * @param {Event} event - The change event\n   */\n  updateFilterAndSorting(event) {\n    const facetsForm =\n      this.closest('facets-form-component') || this.closest('.shopify-section')?.querySelector('facets-form-component');\n\n    if (!(facetsForm instanceof FacetsFormComponent)) return;\n    const isMobile = window.innerWidth < 750;\n\n    const shouldDisable = this.dataset.shouldUseSelectOnMobile === 'true';\n\n    // Because we have a select element on mobile and a bunch of radio buttons on desktop,\n    // we need to disable the input during \"form-submission\" to prevent duplicate entries.\n    if (shouldDisable) {\n      if (isMobile) {\n        const inputs = this.querySelectorAll('input[name=\"sort_by\"]');\n        inputs.forEach((input) => {\n          if (!(input instanceof HTMLInputElement)) return;\n          input.disabled = true;\n        });\n      } else {\n        const selectElement = this.querySelector('select[name=\"sort_by\"]');\n        if (!(selectElement instanceof HTMLSelectElement)) return;\n        selectElement.disabled = true;\n      }\n    }\n\n    facetsForm.updateFilters();\n    this.updateFacetStatus(event);\n\n    // Re-enable the input after the form-submission\n    if (shouldDisable) {\n      if (isMobile) {\n        const inputs = this.querySelectorAll('input[name=\"sort_by\"]');\n        inputs.forEach((input) => {\n          if (!(input instanceof HTMLInputElement)) return;\n          input.disabled = false;\n        });\n      } else {\n        const selectElement = this.querySelector('select[name=\"sort_by\"]');\n        if (!(selectElement instanceof HTMLSelectElement)) return;\n        selectElement.disabled = false;\n      }\n    }\n\n    // Close the details element when a value is selected\n    const { details } = this.refs;\n    if (!(details instanceof HTMLDetailsElement)) return;\n    details.open = false;\n  }\n\n  /**\n   * Updates the facet status\n   * @param {Event} event - The change event\n   */\n  updateFacetStatus(event) {\n    if (!(event.target instanceof HTMLSelectElement)) return;\n\n    const details = this.querySelector('details');\n    if (!details) return;\n\n    const facetStatus = details.querySelector('facet-status-component');\n    if (!(facetStatus instanceof FacetStatusComponent)) return;\n\n    facetStatus.textContent =\n      event.target.value !== details.dataset.defaultSortBy ? event.target.dataset.optionName ?? '' : '';\n  }\n}\n\nif (!customElements.get('sorting-filter-component')) {\n  customElements.define('sorting-filter-component', SortingFilterComponent);\n}\n\n/**\n * @typedef {Object} FacetStatusRefs\n * @property {HTMLElement} facetStatus - The facet status element\n */\n\n/**\n * Handles facet status display\n * @extends {Component<FacetStatusRefs>}\n */\nclass FacetStatusComponent extends Component {\n  /**\n   * Updates the list summary\n   * @param {HTMLInputElement[]} checkedInputElements - The checked input elements\n   */\n  updateListSummary(checkedInputElements) {\n    const checkedInputElementsCount = checkedInputElements.length;\n\n    this.getAttribute('facet-type') === 'swatches'\n      ? this.#updateSwatchSummary(checkedInputElements, checkedInputElementsCount)\n      : this.#updateBubbleSummary(checkedInputElements, checkedInputElementsCount);\n  }\n\n  /**\n   * Updates the swatch summary\n   * @param {HTMLInputElement[]} checkedInputElements - The checked input elements\n   * @param {number} checkedInputElementsCount - The number of checked inputs\n   */\n  #updateSwatchSummary(checkedInputElements, checkedInputElementsCount) {\n    const { facetStatus } = this.refs;\n    facetStatus.classList.remove('bubble', 'facets__bubble');\n\n    if (checkedInputElementsCount === 0) {\n      facetStatus.innerHTML = '';\n      return;\n    }\n\n    if (checkedInputElementsCount > 3) {\n      facetStatus.innerHTML = checkedInputElementsCount.toString();\n      facetStatus.classList.add('bubble', 'facets__bubble');\n      return;\n    }\n\n    facetStatus.innerHTML = Array.from(checkedInputElements)\n      .map((inputElement) => {\n        const swatch = inputElement.parentElement?.querySelector('span.swatch');\n        return swatch?.outerHTML ?? '';\n      })\n      .join('');\n  }\n\n  /**\n   * Updates the bubble summary\n   * @param {HTMLInputElement[]} checkedInputElements - The checked input elements\n   * @param {number} checkedInputElementsCount - The number of checked inputs\n   */\n  #updateBubbleSummary(checkedInputElements, checkedInputElementsCount) {\n    const { facetStatus } = this.refs;\n    const filterStyle = this.dataset.filterStyle;\n\n    facetStatus.classList.remove('bubble', 'facets__bubble');\n\n    if (checkedInputElementsCount === 0) {\n      facetStatus.innerHTML = '';\n      return;\n    }\n\n    if (filterStyle === 'horizontal' && checkedInputElementsCount === 1) {\n      facetStatus.innerHTML = checkedInputElements[0]?.dataset.label ?? '';\n      return;\n    }\n\n    facetStatus.innerHTML = checkedInputElementsCount.toString();\n    facetStatus.classList.add('bubble', 'facets__bubble');\n  }\n\n  /**\n   * Updates the price summary\n   * @param {HTMLInputElement} minInput - The minimum price input\n   * @param {HTMLInputElement} maxInput - The maximum price input\n   */\n  updatePriceSummary(minInput, maxInput) {\n    const minInputValue = minInput.value;\n    const maxInputValue = maxInput.value;\n    const { facetStatus } = this.refs;\n\n    if (!minInputValue && !maxInputValue) {\n      facetStatus.innerHTML = '';\n      return;\n    }\n\n    const currency = facetStatus.dataset.currency || '';\n    const minInputNum = this.#parseCents(minInputValue, '0', currency);\n    const maxInputNum = this.#parseCents(maxInputValue, facetStatus.dataset.rangeMax, currency);\n    facetStatus.innerHTML = `${this.#formatMoney(minInputNum)}–${this.#formatMoney(maxInputNum)}`;\n  }\n\n  /**\n   * Parses a decimal number as minor units (cents for most currencies, but adjusted for zero-decimal currencies)\n   * @param {string} value - The stringified decimal number to parse\n   * @param {string} fallback - The fallback value in case `value` is invalid (formatted string like \"11,400\")\n   * @param {string} currency - The currency code (e.g., 'USD', 'JPY', 'KRW')\n   * @returns {number} The money value in minor units\n   */\n  #parseCents(value, fallback = '0', currency = '') {\n    // Try to parse the value\n    const result = convertMoneyToMinorUnits(value, currency);\n    if (result !== null) return result;\n\n    // Fall back to parsing the fallback string (which may have formatting like \"11,400\")\n    const fallbackResult = convertMoneyToMinorUnits(fallback, currency);\n    if (fallbackResult !== null) return fallbackResult;\n\n    // Last resort: clean and parse as integer\n    const cleanFallback = fallback.replace(/[^\\d]/g, '');\n    return parseInt(cleanFallback, 10) || 0;\n  }\n\n  /**\n   * Formats money, replicated the implementation of the `money` liquid filters\n   * @param {number} moneyValue - The money value\n   * @returns {string} The formatted money value\n   */\n  #formatMoney(moneyValue) {\n    if (!(this.refs.moneyFormat instanceof HTMLTemplateElement)) return '';\n\n    const format = this.refs.moneyFormat.content.textContent || '{{amount}}';\n    const currency = this.refs.facetStatus.dataset.currency || '';\n\n    return formatMoney(moneyValue, format, currency);\n  }\n\n  /**\n   * Clears the summary\n   */\n  clearSummary() {\n    this.refs.facetStatus.innerHTML = '';\n  }\n}\n\nif (!customElements.get('facet-status-component')) {\n  customElements.define('facet-status-component', FacetStatusComponent);\n}\n"
  },
  {
    "path": "assets/floating-panel.js",
    "content": "import { debounce, requestIdleCallback, viewTransition } from '@theme/utilities';\nimport { Component } from '@theme/component';\n\nconst OFFSET = 40;\n\n/**\n * A custom element that manages a floating panel.\n */\nexport class FloatingPanelComponent extends Component {\n  #updatePosition = async () => {\n    // Wait for any view transitions to finish\n    if (viewTransition.current) await viewTransition.current;\n\n    const rect = this.getBoundingClientRect();\n    const viewportWidth = window.innerWidth;\n\n    this.style.top = OFFSET + 'px';\n\n    if (rect.right > viewportWidth) {\n      const overflowAmount = rect.right - viewportWidth + OFFSET;\n      this.style.left = `-${overflowAmount}px`;\n    }\n\n    if (rect.left < 0) {\n      const overflowAmount = Math.abs(rect.left) + OFFSET;\n      this.style.left = `${overflowAmount}px`;\n    }\n\n    this.#mutationObserver.takeRecords();\n  };\n\n  #mutationObserver = new MutationObserver(this.#updatePosition);\n\n  #resizeListener = debounce(() => {\n    const parent = this.closest('details');\n    const closeOnResize = this.dataset.closeOnResize === 'true';\n    if (parent instanceof HTMLDetailsElement && closeOnResize) {\n      parent.open = false;\n      parent.removeAttribute('open');\n      this.#updatePosition();\n    }\n  }, 100);\n\n  connectedCallback() {\n    super.connectedCallback();\n    window.addEventListener('resize', this.#resizeListener);\n\n    requestIdleCallback(() => {\n      this.#updatePosition();\n      this.#mutationObserver.observe(this, { attributes: true });\n    });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener('resize', this.#resizeListener);\n    this.#mutationObserver.disconnect();\n  }\n}\n\nif (!customElements.get('floating-panel-component')) {\n  customElements.define('floating-panel-component', FloatingPanelComponent);\n}\n"
  },
  {
    "path": "assets/fly-to-cart.js",
    "content": "import { yieldToMainThread } from '@theme/utilities';\nimport { Component } from '@theme/component';\n\n/**\n * FlyToCart custom element for animating product images to cart\n * This component creates a visual effect of a product \"flying\" to the cart when added\n */\nclass FlyToCart extends Component {\n  /** @type {Element} */\n  source;\n\n  /** @type {boolean} */\n  useSourceSize = false;\n\n  /** @type {Element} */\n  destination;\n\n  connectedCallback() {\n    super.connectedCallback();\n    const intersectionObserver = new IntersectionObserver((entries) => {\n      /** @type {DOMRectReadOnly | null} */\n      let sourceRect = null;\n      /** @type {DOMRectReadOnly | null} */\n      let destinationRect = null;\n\n      entries.forEach((entry) => {\n        if (entry.target === this.source) {\n          sourceRect = entry.boundingClientRect;\n        } else if (entry.target === this.destination) {\n          destinationRect = entry.boundingClientRect;\n        }\n      });\n\n      if (sourceRect && destinationRect) {\n        this.#animate(sourceRect, destinationRect);\n      }\n\n      intersectionObserver.disconnect();\n    });\n    intersectionObserver.observe(this.source);\n    intersectionObserver.observe(this.destination);\n  }\n\n  /**\n   * Animates the flying thingy along the bezier curve.\n   * @param {DOMRectReadOnly} sourceRect - The bounding client rect of the source.\n   * @param {DOMRectReadOnly} destinationRect - The bounding client rect of the destination.\n   */\n  #animate = async (sourceRect, destinationRect) => {\n    //Define bezier curve points\n    const startPoint = {\n      x: sourceRect.left + sourceRect.width / 2,\n      y: sourceRect.top + sourceRect.height / 2,\n    };\n\n    const endPoint = {\n      x: destinationRect.left + destinationRect.width / 2,\n      y: destinationRect.top + destinationRect.height / 2,\n    };\n\n    // Position the flying thingy back to the start point\n    if (this.useSourceSize) {\n      this.style.setProperty('--width', `${sourceRect.width}px`);\n      this.style.setProperty('--height', `${sourceRect.height}px`);\n    }\n    this.style.setProperty('--start-x', `${startPoint.x}px`);\n    this.style.setProperty('--start-y', `${startPoint.y}px`);\n    this.style.setProperty('--travel-x', `${endPoint.x - startPoint.x}px`);\n    this.style.setProperty('--travel-y', `${endPoint.y - startPoint.y}px`);\n\n    await yieldToMainThread();\n\n    await Promise.allSettled(this.getAnimations().map((a) => a.finished));\n    this.remove();\n  };\n}\n\nif (!customElements.get('fly-to-cart')) {\n  customElements.define('fly-to-cart', FlyToCart);\n}\n"
  },
  {
    "path": "assets/focus.js",
    "content": "// Store references to our event handlers so we can remove them.\n/** @type {Record<string, (event: Event) => void>} */\nconst trapFocusHandlers = {};\n\n/**\n * Get all focusable elements within a container.\n * @param {HTMLElement} container - The container to get focusable elements from.\n * @returns {HTMLElement[]} An array of focusable elements.\n */\nfunction getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\n/**\n * Trap focus within the given container.\n * @param {HTMLElement} container - The container to trap focus within.\n */\nexport function trapFocus(container) {\n  // Clean up any previously set traps.\n  removeTrapFocus();\n\n  // Gather focusable elements.\n  const focusable = getFocusableElements(container);\n  if (!focusable.length) {\n    // If nothing is focusable, just abort—no need to trap.\n    return;\n  }\n\n  const first = focusable[0];\n  const last = focusable[focusable.length - 1];\n\n  // Keydown handler for cycling focus with Tab and Shift+Tab\n  /** @type {(event: KeyboardEvent) => void} */\n  trapFocusHandlers.keydown = (event) => {\n    if (event.key !== 'Tab') return;\n\n    const activeEl = document.activeElement;\n\n    // If on the last focusable and tabbing forward, go to first\n    if (!event.shiftKey && activeEl === last) {\n      event.preventDefault();\n      first?.focus();\n    }\n    // If on the first (or the container) and shift-tabbing, go to last\n    else if (event.shiftKey && (activeEl === first || activeEl === container)) {\n      event.preventDefault();\n      last?.focus();\n    }\n  };\n\n  // Focusin (capturing) handler to forcibly keep focus in the container\n  /** @type {(event: FocusEvent) => void} */\n  trapFocusHandlers.focusin = (event) => {\n    // If the newly focused element isn't inside the container, redirect focus back.\n    if (event.target instanceof Node && !container.contains(event.target)) {\n      event.stopPropagation();\n      // E.g., refocus the first focusable element:\n      first?.focus();\n    }\n  };\n\n  // Attach the handlers\n  document.addEventListener('keydown', trapFocusHandlers.keydown, true);\n  // Use capture phase for focusin so we can catch it before it lands outside\n  document.addEventListener('focusin', trapFocusHandlers.focusin, true);\n\n  // Finally, put focus where you want it.\n  container.focus();\n}\n\n/**\n * Remove focus trap and optionally refocus another element.\n */\nexport function removeTrapFocus() {\n  trapFocusHandlers.keydown && document.removeEventListener('keydown', trapFocusHandlers.keydown, true);\n  trapFocusHandlers.focusin && document.removeEventListener('focusin', trapFocusHandlers.focusin, true);\n}\n\n/**\n * Cycle focus to the next or previous link\n *\n * @param {HTMLElement[]} items\n * @param {number} increment\n */\nexport function cycleFocus(items, increment) {\n  const currentIndex = items.findIndex((item) => item.matches(':focus'));\n  let targetIndex = currentIndex + increment;\n\n  if (targetIndex >= items.length) {\n    targetIndex = 0;\n  } else if (targetIndex < 0) {\n    targetIndex = items.length - 1;\n  }\n\n  const targetItem = items[targetIndex];\n\n  if (!targetItem) return;\n\n  targetItem.focus();\n}\n"
  },
  {
    "path": "assets/gift-card-recipient-form.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents, CartErrorEvent, CartAddEvent } from '@theme/events';\n\n/**\n * @typedef {Object} GiftCardRecipientFormRefs\n * @property {HTMLInputElement} myEmailButton - Button for selecting my email option\n * @property {HTMLInputElement} recipientEmailButton - Button for selecting recipient email option\n * @property {HTMLDivElement} recipientFields - Container for recipient form fields\n * @property {HTMLInputElement} recipientEmail - Recipient email input field\n * @property {HTMLInputElement} recipientName - Recipient name input field\n * @property {HTMLTextAreaElement} recipientMessage - Recipient message textarea\n * @property {HTMLInputElement} recipientSendOn - Send on date input\n * @property {HTMLInputElement} [timezoneOffset] - Timezone offset hidden input (optional)\n * @property {HTMLInputElement} [controlFlag] - Shopify gift card control flag (optional as it's dynamically queried)\n * @property {HTMLDivElement} [emailError] - Email error message container (optional)\n * @property {HTMLDivElement} [nameError] - Name error message container (optional)\n * @property {HTMLDivElement} [messageError] - Message error message container (optional)\n * @property {HTMLDivElement} [sendOnError] - Send on error message container (optional)\n * @property {HTMLSpanElement} [characterCount] - Character count display element (optional)\n * @property {HTMLDivElement} [liveRegion] - Live region for screen reader announcements (optional)\n */\n\n/**\n * @extends {Component<GiftCardRecipientFormRefs>}\n */\nclass GiftCardRecipientForm extends Component {\n  static DeliveryMode = {\n    SELF: 'self', // Send to my email\n    RECIPIENT: 'recipient_form', // Send to recipient's email with form\n  };\n\n  #currentMode = GiftCardRecipientForm.DeliveryMode.SELF;\n\n  // Store bound event handlers for cleanup\n  /** @type {(() => void) | null} */\n  #updateCharacterCountBound = null;\n  /** @type {((event: Event) => void) | null} */\n  #displayCartErrorBound = null;\n  /** @type {(() => void) | null} */\n  #cartAddEventBound = null;\n\n  requiredRefs = [\n    'myEmailButton',\n    'recipientEmailButton',\n    'recipientFields',\n    'recipientEmail',\n    'recipientName',\n    'recipientMessage',\n    'recipientSendOn',\n  ];\n\n  /**\n   * Get all recipient input fields\n   * @returns {(HTMLInputElement | HTMLTextAreaElement)[]} Array of input fields\n   */\n  get #inputFields() {\n    return [this.refs.recipientEmail, this.refs.recipientName, this.refs.recipientMessage, this.refs.recipientSendOn];\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#initializeForm();\n\n    this.#updateCharacterCountBound = () => this.#updateCharacterCount();\n    this.refs.recipientMessage.addEventListener('input', this.#updateCharacterCountBound);\n\n    this.#displayCartErrorBound = this.#displayCartError.bind(this);\n    // @ts-ignore - #displayCartErrorBound is guaranteed to be non-null here\n    document.addEventListener(ThemeEvents.cartError, this.#displayCartErrorBound);\n\n    this.#cartAddEventBound = () => this.#handleCartAdd();\n    document.addEventListener(ThemeEvents.cartUpdate, this.#cartAddEventBound);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    if (this.#updateCharacterCountBound) {\n      this.refs.recipientMessage.removeEventListener('input', this.#updateCharacterCountBound);\n      this.#updateCharacterCountBound = null;\n    }\n\n    if (this.#displayCartErrorBound) {\n      document.removeEventListener(ThemeEvents.cartError, this.#displayCartErrorBound);\n      this.#displayCartErrorBound = null;\n    }\n\n    if (this.#cartAddEventBound) {\n      document.removeEventListener(ThemeEvents.cartUpdate, this.#cartAddEventBound);\n      this.#cartAddEventBound = null;\n    }\n  }\n\n  /**\n   * Initialize form with default state, self delivery is selected by default\n   */\n  #initializeForm() {\n    this.#updateButtonStates(GiftCardRecipientForm.DeliveryMode.SELF);\n\n    this.refs.recipientFields.hidden = true;\n\n    this.#clearRecipientFields();\n    this.#disableRecipientFields();\n    this.#setDateConstraints();\n  }\n\n  /**\n   * Handle toggle between my email and recipient email\n   * @param {string} mode - Delivery mode (either 'self' or 'recipient_form')\n   * @param {Event} _event - Change event (unused)\n   */\n  toggleRecipientForm(mode, _event) {\n    // Validate mode\n    if (!Object.values(GiftCardRecipientForm.DeliveryMode).includes(mode)) {\n      throw new Error(\n        `Invalid delivery mode: ${mode}. Must be one of: ${Object.values(GiftCardRecipientForm.DeliveryMode).join(\n          ', '\n        )}`\n      );\n    }\n\n    if (this.#currentMode === mode) return;\n    this.#currentMode = mode;\n\n    this.#updateFormState();\n  }\n\n  /**\n   * Update form state based on current mode\n   */\n  #updateFormState() {\n    const { DeliveryMode } = GiftCardRecipientForm;\n    const isRecipientMode = this.#currentMode === DeliveryMode.RECIPIENT;\n\n    this.#updateButtonStates(this.#currentMode);\n\n    this.refs.recipientFields.hidden = !isRecipientMode;\n\n    if (isRecipientMode) {\n      this.#enableRecipientFields();\n\n      this.#updateCharacterCount();\n\n      // Announce to screen readers\n      if (this.refs.liveRegion) {\n        this.refs.liveRegion.textContent =\n          Theme.translations?.recipient_form_fields_visible || 'Recipient form fields are now visible';\n      }\n\n      // Focus first field for accessibility\n      this.refs.recipientEmail.focus();\n    } else {\n      this.#clearRecipientFields();\n      this.#disableRecipientFields();\n\n      // Announce to screen readers\n      if (this.refs.liveRegion) {\n        this.refs.liveRegion.textContent =\n          Theme.translations?.recipient_form_fields_hidden || 'Recipient form fields are now hidden';\n      }\n    }\n\n    this.dispatchEvent(\n      new CustomEvent('recipient:toggle', {\n        detail: {\n          mode: this.#currentMode,\n          recipientFormVisible: isRecipientMode,\n        },\n        bubbles: true,\n      })\n    );\n  }\n\n  /**\n   * Update radio button states\n   * @param {string} mode - Current delivery mode\n   */\n  #updateButtonStates(mode) {\n    const { DeliveryMode } = GiftCardRecipientForm;\n\n    switch (mode) {\n      case DeliveryMode.SELF:\n        this.refs.myEmailButton.checked = true;\n        this.refs.recipientEmailButton.checked = false;\n        break;\n\n      case DeliveryMode.RECIPIENT:\n        this.refs.myEmailButton.checked = false;\n        this.refs.recipientEmailButton.checked = true;\n        break;\n\n      default:\n        console.warn(`Unknown delivery mode: ${mode}`);\n        // Default to self delivery\n        this.refs.myEmailButton.checked = true;\n        this.refs.recipientEmailButton.checked = false;\n    }\n  }\n\n  /**\n   * Clear all recipient form fields\n   */\n  #clearRecipientFields() {\n    for (const field of this.#inputFields) {\n      field.value = '';\n    }\n\n    this.#updateCharacterCount();\n    this.#clearErrorMessages();\n  }\n\n  /**\n   * Disable recipient form fields when sending to self\n   */\n  #disableRecipientFields() {\n    for (const field of this.#inputFields) {\n      field.disabled = true;\n      field.removeAttribute('required');\n      field.removeAttribute('aria-invalid');\n      field.removeAttribute('aria-describedby');\n    }\n\n    // Remove control field when sending to self\n    const controlFlag = this.querySelector('input[name=\"properties[__shopify_send_gift_card_to_recipient]\"]');\n    if (controlFlag) {\n      controlFlag.remove();\n    }\n\n    if (this.refs.timezoneOffset) {\n      this.refs.timezoneOffset.disabled = true;\n      this.refs.timezoneOffset.value = '';\n    }\n\n    this.#clearErrorMessages();\n  }\n\n  /**\n   * Enable recipient form fields when sending to recipient\n   */\n  #enableRecipientFields() {\n    for (const field of this.#inputFields) {\n      field.disabled = false;\n      if (field === this.refs.recipientEmail) {\n        field.setAttribute('required', 'required');\n      }\n    }\n\n    // Add control field when sending to recipient\n    let controlFlag = this.querySelector('input[name=\"properties[__shopify_send_gift_card_to_recipient]\"]');\n    if (!controlFlag) {\n      const input = document.createElement('input');\n      input.type = 'hidden';\n      input.name = 'properties[__shopify_send_gift_card_to_recipient]';\n      input.value = 'on';\n      this.appendChild(input);\n    }\n\n    // Enable and set timezone offset\n    if (this.refs.timezoneOffset) {\n      this.refs.timezoneOffset.disabled = false;\n      this.refs.timezoneOffset.value = new Date().getTimezoneOffset().toString();\n    }\n\n    // Set date constraints when enabling fields\n    this.#setDateConstraints();\n  }\n\n  /**\n   * Update character count display\n   */\n  #updateCharacterCount() {\n    if (!this.refs.characterCount) return;\n\n    const currentLength = this.refs.recipientMessage.value.length;\n    const maxLength = this.refs.recipientMessage.maxLength;\n\n    const template = this.refs.characterCount.getAttribute('data-template');\n    if (!template) return;\n\n    const updatedText = template.replace('[current]', currentLength.toString()).replace('[max]', maxLength.toString());\n\n    this.refs.characterCount.textContent = updatedText;\n  }\n\n  /**\n   * Set date constraints for the send on date picker\n   * Prevents selecting past dates and limits to 90 days in the future\n   */\n  #setDateConstraints() {\n    const today = new Date();\n    const maxDate = new Date();\n    maxDate.setDate(today.getDate() + 90);\n\n    // Format dates as YYYY-MM-DD\n    /**\n     * @param {Date} date\n     * @returns {string}\n     */\n    const formatDate = (date) => {\n      const year = date.getFullYear();\n      const month = String(date.getMonth() + 1).padStart(2, '0');\n      const day = String(date.getDate()).padStart(2, '0');\n      return `${year}-${month}-${day}`;\n    };\n\n    this.refs.recipientSendOn.setAttribute('min', formatDate(today));\n    this.refs.recipientSendOn.setAttribute('max', formatDate(maxDate));\n  }\n\n  /**\n   * Handles cart error events\n   * @param {CartErrorEvent} event - The cart error event\n   */\n  #displayCartError(event) {\n    if (event.detail?.data) {\n      const { message, errors, description } = event.detail.data;\n\n      // Display the error message\n      if (errors && typeof errors === 'object') {\n        this.#displayErrorMessage(message || 'There was an error', errors);\n      } else if (message) {\n        this.#displayErrorMessage(message, description);\n      }\n    }\n  }\n\n  /**\n   * Display error messages in the appropriate error containers\n   * @param {string} title - The main error message title\n   * @param {Object} body - Error details\n   */\n  #displayErrorMessage(title, body) {\n    this.#clearErrorMessages();\n\n    if (typeof body === 'object' && body !== null) {\n      /** @type {Record<string, {inputRef: string, errorRef: string}>} */\n      const fieldMap = {\n        email: { inputRef: 'recipientEmail', errorRef: 'emailError' },\n        name: { inputRef: 'recipientName', errorRef: 'nameError' },\n        message: { inputRef: 'recipientMessage', errorRef: 'messageError' },\n        send_on: { inputRef: 'recipientSendOn', errorRef: 'sendOnError' },\n      };\n\n      for (const [field, errorMessages] of Object.entries(body)) {\n        const fieldConfig = fieldMap[field];\n        if (!fieldConfig) continue;\n\n        const { inputRef, errorRef } = fieldConfig;\n        const errorContainer = this.refs[errorRef];\n        const inputElement = this.refs[inputRef];\n\n        if (errorContainer && errorContainer instanceof HTMLElement) {\n          const errorTextElement = errorContainer.querySelector('span');\n          if (errorTextElement) {\n            const message = Array.isArray(errorMessages) ? errorMessages.join(', ') : errorMessages;\n            errorTextElement.textContent = `${message}.`;\n          }\n\n          errorContainer.classList.remove('hidden');\n        }\n\n        if (inputElement && inputElement instanceof HTMLElement) {\n          // Set ARIA attributes for accessibility\n          inputElement.setAttribute('aria-invalid', 'true');\n          const errorId = `RecipientForm-${field}-error-${this.dataset.sectionId || 'default'}`;\n          inputElement.setAttribute('aria-describedby', errorId);\n        }\n      }\n    }\n\n    // Announce errors to screen readers\n    if (this.refs.liveRegion) {\n      this.refs.liveRegion.textContent =\n        title || Theme.translations?.recipient_form_error || 'There was an error with the form submission';\n    }\n  }\n\n  /**\n   * Clear all error messages and reset ARIA attributes\n   */\n  #clearErrorMessages() {\n    // List of error container refs\n    const errorRefs = ['emailError', 'nameError', 'messageError', 'sendOnError'];\n\n    for (const errorRef of errorRefs) {\n      const errorContainer = this.refs[errorRef];\n      if (errorContainer && errorContainer instanceof HTMLElement) {\n        errorContainer.classList.add('hidden');\n        const errorTextElement = errorContainer.querySelector('span');\n        if (errorTextElement) {\n          errorTextElement.textContent = '';\n        }\n      }\n    }\n\n    // Remove ARIA attributes from all input fields\n    for (const field of this.#inputFields) {\n      field.removeAttribute('aria-invalid');\n      field.removeAttribute('aria-describedby');\n    }\n\n    // Clear live region announcement\n    if (this.refs.liveRegion) {\n      this.refs.liveRegion.textContent = '';\n    }\n  }\n\n  #handleCartAdd() {\n    this.#clearErrorMessages();\n  }\n}\n\n// Register the custom element\ncustomElements.define('gift-card-recipient-form', GiftCardRecipientForm);\n"
  },
  {
    "path": "assets/global.d.ts",
    "content": "export {};\n\ndeclare global {\n  interface Shopify {\n    country: string;\n    currency: {\n      active: string;\n      rate: string;\n    };\n    designMode: boolean;\n    locale: string;\n    shop: string;\n    loadFeatures(features: ShopifyFeature[], callback?: LoadCallback): void;\n    ModelViewerUI?: ModelViewer;\n    visualPreviewMode: boolean;\n  }\n\n  interface Theme {\n    translations: Record<string, string>;\n    routes: {\n      cart_add_url: string;\n      cart_change_url: string;\n      cart_update_url: string;\n      cart_url: string;\n      predictive_search_url: string;\n      search_url: string;\n    };\n    utilities: {\n      scheduler: {\n        schedule: (task: () => void) => void;\n      };\n    };\n    template: {\n      name: string;\n    };\n  }\n\n  interface Window {\n    Shopify: Shopify;\n  }\n\n  declare const Shopify: Shopify;\n  declare const Theme: Theme;\n\n  type LoadCallback = (error: Error | undefined) => void;\n\n  // Refer to https://github.com/Shopify/shopify/blob/main/areas/core/shopify/app/assets/javascripts/storefront/load_feature/load_features.js\n  interface ShopifyFeature {\n    name: string;\n    version: string;\n    onLoad?: LoadCallback;\n  }\n\n  // Refer to https://github.com/Shopify/model-viewer-ui/blob/main/src/js/model-viewer-ui.js\n  interface ModelViewer {\n    new (\n      element: Element,\n      options?: {\n        focusOnPlay?: boolean;\n      }\n    ): ModelViewer;\n    play(): void;\n    pause(): void;\n    toggleFullscreen(): void;\n    zoom(amount: number): void;\n    destroy(): void;\n  }\n\n  // Device Memory API - https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory\n  interface Navigator {\n    readonly deviceMemory?: number;\n  }\n}\n"
  },
  {
    "path": "assets/header-drawer.js",
    "content": "import { Component } from '@theme/component';\nimport { trapFocus, removeTrapFocus } from '@theme/focus';\nimport { onAnimationEnd, removeWillChangeOnAnimationEnd } from '@theme/utilities';\n\n/**\n * A custom element that manages the main menu drawer.\n *\n * @typedef {object} Refs\n * @property {HTMLDetailsElement} details - The details element.\n * @property {HTMLDivElement} menuDrawer - The slideable drawer panel containing the menu.\n *\n * @extends {Component<Refs>}\n */\nclass HeaderDrawer extends Component {\n  requiredRefs = ['details', 'menuDrawer'];\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener('keyup', this.#onKeyUp);\n    this.#setupAnimatedElementListeners();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener('keyup', this.#onKeyUp);\n  }\n\n  /**\n   * Close the main menu drawer when the Escape key is pressed\n   * @param {KeyboardEvent} event\n   */\n  #onKeyUp = (event) => {\n    if (event.key !== 'Escape') return;\n\n    this.#close(this.#getDetailsElement(event));\n  };\n\n  /**\n   * @returns {boolean} Whether the main menu drawer is open\n   */\n  get isOpen() {\n    return this.refs.details.hasAttribute('open');\n  }\n\n  /**\n   * Get the closest details element to the event target\n   * @param {Event | undefined} event\n   * @returns {HTMLDetailsElement}\n   */\n  #getDetailsElement(event) {\n    if (!(event?.target instanceof Element)) return this.refs.details;\n\n    return event.target.closest('details') ?? this.refs.details;\n  }\n\n  /**\n   * Toggle the main menu drawer\n   */\n  toggle() {\n    return this.isOpen ? this.close() : this.open();\n  }\n\n  /**\n   * Open the closest drawer or the main menu drawer\n   * @param {string} [target]\n   * @param {Event} [event]\n   */\n  open(target, event) {\n    const details = this.#getDetailsElement(event);\n    const summary = details.querySelector('summary');\n\n    if (!summary) return;\n\n    summary.setAttribute('aria-expanded', 'true');\n\n    this.preventInitialAccordionAnimations(details);\n    requestAnimationFrame(() => {\n      details.classList.add('menu-open');\n\n      if (target) {\n        this.refs.menuDrawer.classList.add('menu-drawer--has-submenu-opened');\n      }\n\n      // Wait for the drawer animation to complete before trapping focus\n      const drawer = details.querySelector('.menu-drawer, .menu-drawer__submenu');\n      onAnimationEnd(drawer || details, () => trapFocus(details), { subtree: false });\n    });\n  }\n\n  /**\n   * Go back or close the main menu drawer\n   * @param {Event} [event]\n   */\n  back(event) {\n    this.#close(this.#getDetailsElement(event));\n  }\n\n  /**\n   * Close the main menu drawer\n   */\n  close() {\n    this.#close(this.refs.details);\n  }\n\n  /**\n   * Close the closest menu or submenu that is open\n   *\n   * @param {HTMLDetailsElement} details\n   */\n  #close(details) {\n    const summary = details.querySelector('summary');\n\n    if (!summary) return;\n\n    summary.setAttribute('aria-expanded', 'false');\n    details.classList.remove('menu-open');\n    this.refs.menuDrawer.classList.remove('menu-drawer--has-submenu-opened');\n\n    // Wait for the .menu-drawer element's transition, not the entire details subtree\n    // This avoids waiting for child accordion/resource-card animations which can cause issues on Firefox\n    const drawer = details.querySelector('.menu-drawer, .menu-drawer__submenu');\n\n    onAnimationEnd(\n      drawer || details,\n      () => {\n        reset(details);\n        if (details === this.refs.details) {\n          removeTrapFocus();\n          const openDetails = this.querySelectorAll('details[open]:not(accordion-custom > details)');\n          openDetails.forEach(reset);\n        } else {\n          trapFocus(this.refs.details);\n        }\n      },\n      { subtree: false }\n    );\n  }\n\n  /**\n   * Attach animationend event listeners to all animated elements to remove will-change after animation\n   * to remove the stacking context and allow submenus to be positioned correctly\n   */\n  #setupAnimatedElementListeners() {\n    const allAnimated = this.querySelectorAll('.menu-drawer__animated-element');\n    allAnimated.forEach((element) => {\n      element.addEventListener('animationend', removeWillChangeOnAnimationEnd);\n    });\n  }\n\n  /**\n   * Temporarily disables accordion animations to prevent unwanted transitions when the drawer opens.\n   * Adds a no-animation class to accordion content elements, then removes it after 100ms to\n   * re-enable animations for user interactions.\n   * @param {HTMLDetailsElement} details - The details element containing the accordions\n   */\n  preventInitialAccordionAnimations(details) {\n    const content = details.querySelectorAll('accordion-custom .details-content');\n\n    content.forEach((element) => {\n      if (element instanceof HTMLElement) {\n        element.classList.add('details-content--no-animation');\n      }\n    });\n    setTimeout(() => {\n      content.forEach((element) => {\n        if (element instanceof HTMLElement) {\n          element.classList.remove('details-content--no-animation');\n        }\n      });\n    }, 100);\n  }\n}\n\nif (!customElements.get('header-drawer')) {\n  customElements.define('header-drawer', HeaderDrawer);\n}\n\n/**\n * Reset an open details element to its original state\n *\n * @param {HTMLDetailsElement} element\n */\nfunction reset(element) {\n  element.classList.remove('menu-open');\n  element.removeAttribute('open');\n  element.querySelector('summary')?.setAttribute('aria-expanded', 'false');\n}\n"
  },
  {
    "path": "assets/header-menu.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce, onDocumentLoaded, setHeaderMenuStyle } from '@theme/utilities';\nimport { MegaMenuHoverEvent } from '@theme/events';\n\n/**\n * A custom element that manages a header menu.\n *\n * @typedef {Object} State\n * @property {HTMLElement | null} activeItem - The currently active menu item.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} overflowMenu - The overflow menu.\n * @property {HTMLElement[]} [submenu] - The submenu in each respective menu item.\n *\n * @extends {Component<Refs>}\n */\nclass HeaderMenu extends Component {\n  requiredRefs = ['overflowMenu'];\n\n  /**\n   * @type {MutationObserver | null}\n   */\n  #submenuMutationObserver = null;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    onDocumentLoaded(this.#preloadImages);\n    window.addEventListener('resize', this.#resizeListener);\n    this.overflowMenu?.addEventListener('pointerleave', this.#overflowSubmenuListener);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener('resize', this.#resizeListener);\n    this.overflowMenu?.removeEventListener('pointerleave', this.#overflowSubmenuListener);\n    this.#cleanupMutationObserver();\n  }\n\n  /**\n   * Debounced resize event listener to recalculate menu style\n   */\n  #resizeListener = debounce(() => {\n    setHeaderMenuStyle();\n  }, 100);\n\n\n  #overflowSubmenuListener = () => {\n    this.#deactivate();\n  };\n\n  /**\n   * @type {State}\n   */\n  #state = {\n    activeItem: null,\n  };\n\n  /**\n   * Get the overflow menu\n   */\n  get overflowMenu() {\n    return /** @type {HTMLElement | null} */ (this.refs.overflowMenu?.shadowRoot?.querySelector('[part=\"overflow\"]'));\n  }\n\n  /**\n   * Whether the overflow list is hovered\n   * @returns {boolean}\n   */\n  get overflowListHovered() {\n    return this.refs.overflowMenu?.shadowRoot?.querySelector('[part=\"overflow-list\"]')?.matches(':hover') ?? false;\n  }\n\n  get headerComponent() {\n    return /** @type {HTMLElement | null} */ (this.closest('header-component'));\n  }\n\n  /**\n   * Activate the selected menu item immediately\n   * @param {PointerEvent | FocusEvent} event\n   */\n  activate = (event) => {\n    this.dispatchEvent(new MegaMenuHoverEvent());\n\n    if (!(event.target instanceof Element) || !this.headerComponent) return;\n\n    let item = findMenuItem(event.target);\n\n    if (!item || item == this.#state.activeItem) return;\n\n    const isDefaultSlot = event.target.slot === '';\n\n    this.dataset.overflowExpanded = (!isDefaultSlot).toString();\n\n    const previouslyActiveItem = this.#state.activeItem;\n\n    if (previouslyActiveItem) {\n      previouslyActiveItem.ariaExpanded = 'false';\n    }\n\n    this.#state.activeItem = item;\n    this.ariaExpanded = 'true';\n    item.ariaExpanded = 'true';\n\n    let submenu = findSubmenu(item);\n    const hasSubmenu = Boolean(submenu);\n\n    if (!hasSubmenu && !isDefaultSlot) {\n      submenu = this.overflowMenu;\n    }\n\n    if (submenu) {\n      // Mark submenu as active for content-visibility optimization\n      submenu.dataset.active = '';\n\n      // Cleanup any existing mutation observer from previous menu activations\n      this.#cleanupMutationObserver();\n\n      // Monitor DOM mutations to catch deferred content injection (from section hydration)\n      this.#submenuMutationObserver = new MutationObserver(() => {\n        requestAnimationFrame(() => {\n          // Double requestAnimationFrame to ensure the height is properly calculated and not defaulting to the contain-intrinsic-size\n          requestAnimationFrame(() => {\n            if (submenu.offsetHeight > 0) {\n              this.headerComponent?.style.setProperty('--submenu-height', `${submenu.offsetHeight}px`);\n              this.#cleanupMutationObserver();\n            }\n          });\n        });\n      });\n      this.#submenuMutationObserver.observe(submenu, {childList: true, subtree: true});\n\n      // Auto-disconnect after 500ms to prevent memory leaks\n      setTimeout(() => {\n        this.#cleanupMutationObserver();\n      }, 500);\n    }\n\n    let finalHeight = submenu?.offsetHeight || 0;\n\n    // For overflow menu, the height needs to be either content of the submenu or the total height of the menu list links\n    if (!isDefaultSlot) {\n      const overflowListHeight = this.#getOverflowListLinksHeight();\n      if (hasSubmenu) {\n        /* Note: When the submenu is inside the overflow menu, its offsetHeight is not valid due to the lack of padding\n         * we could add the padding variables to the submenu.offsetHeight, but measuring the overflowMenu.offsetHeight is just easier */\n        const overflowHeight = this.overflowMenu?.offsetHeight || 0;\n        finalHeight = Math.max(overflowHeight, overflowListHeight);\n      } else {\n        finalHeight = overflowListHeight;\n      }\n    }\n\n    if (!submenu) {\n      // If there is no content to open, don't try to open it\n      finalHeight = 0;\n    }\n\n    this.headerComponent.style.setProperty('--submenu-height', `${finalHeight}px`);\n    this.#setFullOpenHeaderHeight(finalHeight);\n    this.style.setProperty('--submenu-opacity', '1');\n  };\n\n  /**\n   * Deactivate the active item after a delay\n   * @param {PointerEvent | FocusEvent} event\n   */\n  deactivate(event) {\n    if (!(event.target instanceof Element)) return;\n\n    const menu = findSubmenu(this.#state.activeItem);\n    const isMovingWithinMenu = event.relatedTarget instanceof Node && menu?.contains(document.activeElement);\n    const isMovingToSubmenu =\n      event.relatedTarget instanceof Node && event.type === 'blur' && menu?.contains(event.relatedTarget);\n    const isMovingToOverflowMenu =\n      event.relatedTarget instanceof Node && event.relatedTarget.parentElement?.matches('[slot=\"overflow\"]');\n\n    if (isMovingWithinMenu || isMovingToOverflowMenu || isMovingToSubmenu) return;\n\n    this.#deactivate();\n  }\n\n  /**\n   * Deactivate the active item immediately\n   * @param {HTMLElement | null} [item]\n   */\n  #deactivate = (item = this.#state.activeItem) => {\n    if (!item || item != this.#state.activeItem) return;\n\n    // Don't deactivate if the overflow menu or overflow list is still being hovered\n    if (this.overflowListHovered || this.overflowMenu?.matches(':hover')) return;\n\n    this.headerComponent?.style.setProperty('--submenu-height', '0px');\n    this.#setFullOpenHeaderHeight(0);\n    this.style.setProperty('--submenu-opacity', '0');\n    this.dataset.overflowExpanded = 'false';\n\n    const submenu = findSubmenu(item);\n\n    this.#state.activeItem = null;\n    this.ariaExpanded = 'false';\n    item.ariaExpanded = 'false';\n\n    // Remove active state from submenu after animation completes\n    if (submenu) {\n      delete submenu.dataset.active;\n    }\n  };\n\n  #getOverflowListLinksHeight() {\n    const slottedMenuLinks = this.overflowMenu?.querySelector('slot')?.assignedElements();\n    if (!slottedMenuLinks) return this.overflowMenu?.offsetHeight || 0;\n\n    /**\n     * @param {(submenu: HTMLElement) => void} cb\n     */\n    const mapSubmenus = (cb) => {\n      slottedMenuLinks.forEach((link) => {\n        const submenu = /** @type {HTMLElement | null} */ (link.querySelector('[ref=\"submenu[]\"]'));\n        if (submenu) {\n          cb(submenu);\n        }\n      });\n    }\n\n    mapSubmenus((submenu) => {\n      submenu.style.setProperty('display', 'none');\n    });\n    const height = this.overflowMenu?.offsetHeight || 0;\n    mapSubmenus((submenu) => {\n      submenu.style.removeProperty('display');\n    });\n    return height;\n  }\n\n  /**\n   * Calculate and set the full open header height. If the submenu is not open, the full open header height is 0.\n   * @param {number} submenuHeight\n   */\n  #setFullOpenHeaderHeight(submenuHeight) {\n    if (!this.headerComponent) return;\n\n    const isOverlapSituation = this.headerComponent.hasAttribute('data-submenu-overlap-bottom-row');\n\n    const headerVisibleHeight =\n      isOverlapSituation && this.headerComponent.offsetHeight > 0\n        ? /** @type {HTMLElement | null} */ (this.headerComponent.querySelector('.header__row--top'))?.offsetHeight ?? 0\n        : this.headerComponent.offsetHeight;\n\n    const nothingToOpen = submenuHeight === 0;\n    const fullOpenHeaderHeight = nothingToOpen ? 0 : submenuHeight + (headerVisibleHeight ?? 0);\n\n    this.headerComponent?.style.setProperty('--full-open-header-height', `${fullOpenHeaderHeight}px`);\n  }\n\n  /**\n   * Preload images that are set to load lazily.\n   */\n  #preloadImages = () => {\n    const images = this.querySelectorAll('img[loading=\"lazy\"]');\n    images?.forEach((image) => image.removeAttribute('loading'));\n  };\n\n  #cleanupMutationObserver() {\n    this.#submenuMutationObserver?.disconnect();\n    this.#submenuMutationObserver = null;\n  }\n}\n\nif (!customElements.get('header-menu')) {\n  customElements.define('header-menu', HeaderMenu);\n}\n\n/**\n * Find the closest menu item.\n * @param {Element | null | undefined} element\n * @returns {HTMLElement | null}\n */\nfunction findMenuItem(element) {\n  if (!(element instanceof Element)) return null;\n\n  if (element?.matches('[slot=\"more\"')) {\n    // Select the first overflowing menu item when hovering over the \"More\" item\n    return findMenuItem(element.parentElement?.querySelector('[slot=\"overflow\"]'));\n  }\n\n  return element?.querySelector('[ref=\"menuitem\"]');\n}\n\n/**\n * Find the closest submenu.\n * @param {Element | null | undefined} element\n * @returns {HTMLElement | null}\n */\nfunction findSubmenu(element) {\n  const submenu = element?.parentElement?.querySelector('[ref=\"submenu[]\"]');\n  return submenu instanceof HTMLElement ? submenu : null;\n}\n"
  },
  {
    "path": "assets/header.js",
    "content": "import { Component } from '@theme/component';\nimport { onDocumentLoaded, changeMetaThemeColor, setHeaderMenuStyle } from '@theme/utilities';\n\n/**\n * @typedef {Object} HeaderComponentRefs\n * @property {HTMLDivElement} headerDrawerContainer - The header drawer container element\n * @property {HTMLElement} headerMenu - The header menu element\n * @property {HTMLElement} headerRowTop - The header top row element\n */\n\n/**\n * @typedef {CustomEvent<{ minimumReached: boolean }>} OverflowMinimumEvent\n */\n\n/**\n * A custom element that manages the site header.\n *\n * @extends {Component<HeaderComponentRefs>}\n */\n\nclass HeaderComponent extends Component {\n  requiredRefs = ['headerDrawerContainer', 'headerMenu', 'headerRowTop'];\n\n  /**\n   * Width of window when header drawer was hidden\n   * @type {number | null}\n   */\n  #menuDrawerHiddenWidth = null;\n\n  /**\n   * An intersection observer for monitoring sticky header position\n   * @type {IntersectionObserver | null}\n   */\n  #intersectionObserver = null;\n\n  /**\n   * Whether the header has been scrolled offscreen, when sticky behavior is 'scroll-up'\n   * @type {boolean}\n   */\n  #offscreen = false;\n\n  /**\n   * The last recorded scrollTop of the document, when sticky behavior is 'scroll-up\n   * @type {number}\n   */\n  #lastScrollTop = 0;\n\n  /**\n   * A timeout to allow for hiding animation, when sticky behavior is 'scroll-up'\n   * @type {number | null}\n   */\n  #timeout = null;\n\n  /**\n   * RAF ID for scroll handler throttling\n   * @type {number | null}\n   */\n  #scrollRafId = null;\n\n  /**\n   * Keeps the global `--header-height` custom property up to date,\n   * which other theme components can then consume\n   */\n  #resizeObserver = new ResizeObserver(([entry]) => {\n    if (!entry || !entry.borderBoxSize[0]) return;\n\n    // The initial height is calculated using the .offsetHeight property, which returns an integer.\n    // We round to the nearest integer to avoid unnecessaary reflows.\n    const roundedHeaderHeight = Math.round(entry.borderBoxSize[0].blockSize);\n    document.body.style.setProperty('--header-height', `${roundedHeaderHeight}px`);\n\n    // Check if the menu drawer should be hidden in favor of the header menu\n    if (this.#menuDrawerHiddenWidth && window.innerWidth > this.#menuDrawerHiddenWidth) {\n      this.#updateMenuVisibility(false);\n    }\n  });\n\n  /**\n   * Observes the header while scrolling the viewport to track when its actively sticky\n   * @param {Boolean} alwaysSticky - Determines if we need to observe when the header is offscreen\n   */\n  #observeStickyPosition = (alwaysSticky = true) => {\n    if (this.#intersectionObserver) return;\n\n    const config = {\n      threshold: alwaysSticky ? 1 : 0,\n    };\n\n    this.#intersectionObserver = new IntersectionObserver(([entry]) => {\n      if (!entry) return;\n\n      const { isIntersecting } = entry;\n\n      if (alwaysSticky) {\n        this.dataset.stickyState = isIntersecting ? 'inactive' : 'active';\n        if (this.dataset.themeColor) changeMetaThemeColor(this.dataset.themeColor);\n      } else {\n        this.#offscreen = !isIntersecting || this.dataset.stickyState === 'active';\n      }\n    }, config);\n\n    this.#intersectionObserver.observe(this);\n  };\n\n  /**\n   * Handles the overflow minimum event from the header menu\n   * @param {OverflowMinimumEvent} event\n   */\n  #handleOverflowMinimum = (event) => {\n    this.#updateMenuVisibility(event.detail.minimumReached);\n  };\n\n  /**\n   * Updates the visibility of the menu and drawer\n   * @param {boolean} hideMenu - Whether to hide the menu and show the drawer\n   */\n  #updateMenuVisibility(hideMenu) {\n    if (hideMenu) {\n      this.#menuDrawerHiddenWidth = window.innerWidth;\n    } else {\n      this.#menuDrawerHiddenWidth = null;\n    }\n    setHeaderMenuStyle();\n  }\n\n  #handleWindowScroll = () => {\n    if (this.#scrollRafId !== null) return;\n\n    this.#scrollRafId = requestAnimationFrame(() => {\n      this.#scrollRafId = null;\n      this.#updateScrollState();\n    });\n  };\n\n  #updateScrollState = () => {\n    const stickyMode = this.getAttribute('sticky');\n    if (!this.#offscreen && stickyMode !== 'always') return;\n\n    const scrollTop = document.scrollingElement?.scrollTop ?? 0;\n    const headerTop = this.getBoundingClientRect().top;\n    const isScrollingUp = scrollTop < this.#lastScrollTop;\n    const isAtTop = headerTop >= 0;\n\n    if (this.#timeout) {\n      clearTimeout(this.#timeout);\n      this.#timeout = null;\n    }\n\n    if (stickyMode === 'always') {\n      if (isAtTop) {\n        this.dataset.scrollDirection = 'none';\n      } else if (isScrollingUp) {\n        this.dataset.scrollDirection = 'up';\n      } else {\n        this.dataset.scrollDirection = 'down';\n      }\n\n      this.#lastScrollTop = scrollTop;\n      return;\n    }\n\n    if (isScrollingUp) {\n      if (isAtTop) {\n        // reset sticky state when header is scrolled up to natural position\n        this.#offscreen = false;\n        this.dataset.stickyState = 'inactive';\n        this.dataset.scrollDirection = 'none';\n      } else {\n        // show sticky header when scrolling up\n        this.dataset.stickyState = 'active';\n        this.dataset.scrollDirection = 'up';\n      }\n    } else if (this.dataset.stickyState === 'active') {\n      this.dataset.scrollDirection = 'none';\n\n      this.dataset.stickyState = 'idle';\n    } else {\n      this.dataset.scrollDirection = 'none';\n      this.dataset.stickyState = 'idle';\n    }\n\n    this.#lastScrollTop = scrollTop;\n  };\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#resizeObserver.observe(this);\n    this.addEventListener('overflowMinimum', this.#handleOverflowMinimum);\n\n    const stickyMode = this.getAttribute('sticky');\n    if (stickyMode) {\n      this.#observeStickyPosition(stickyMode === 'always');\n\n      if (stickyMode === 'scroll-up' || stickyMode === 'always') {\n        document.addEventListener('scroll', this.#handleWindowScroll);\n      }\n    }\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#resizeObserver.disconnect();\n    this.#intersectionObserver?.disconnect();\n    this.removeEventListener('overflowMinimum', this.#handleOverflowMinimum);\n    document.removeEventListener('scroll', this.#handleWindowScroll);\n    if (this.#scrollRafId !== null) {\n      cancelAnimationFrame(this.#scrollRafId);\n      this.#scrollRafId = null;\n    }\n    document.body.style.setProperty('--header-height', '0px');\n  }\n}\n\nif (!customElements.get('header-component')) {\n  customElements.define('header-component', HeaderComponent);\n}\n\nonDocumentLoaded(() => {\n  const header = document.querySelector('header-component');\n  const headerGroup = document.querySelector('#header-group');\n\n  // Note: Initial header heights are set via inline script in theme.liquid\n  // This ResizeObserver handles dynamic updates after page load\n\n  // Update header group height on resize of any child\n  if (headerGroup) {\n    const resizeObserver = new ResizeObserver((entries) => {\n      const headerGroupHeight = entries.reduce((totalHeight, entry) => {\n        if (\n          entry.target !== header ||\n          (header.hasAttribute('transparent') && header.parentElement?.nextElementSibling)\n        ) {\n          return totalHeight + (entry.borderBoxSize[0]?.blockSize ?? 0);\n        }\n        return totalHeight;\n      }, 0);\n      // The initial height is calculated using the .offsetHeight property, which returns an integer.\n      // We round to the nearest integer to avoid unnecessaary reflows.\n      const roundedHeaderGroupHeight = Math.round(headerGroupHeight);\n      document.body.style.setProperty('--header-group-height', `${roundedHeaderGroupHeight}px`);\n    });\n\n    if (header instanceof HTMLElement) {\n      resizeObserver.observe(header);\n    }\n\n    // Observe all children of the header group\n    const children = headerGroup.children;\n    for (let i = 0; i < children.length; i++) {\n      const element = children[i];\n      if (element instanceof HTMLElement) {\n        resizeObserver.observe(element);\n      }\n    }\n\n    // Also observe the header group itself for child changes\n    const mutationObserver = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        if (mutation.type === 'childList') {\n          // Re-observe all children when the list changes\n          const children = headerGroup.children;\n          for (let i = 0; i < children.length; i++) {\n            const element = children[i];\n            if (element instanceof HTMLElement) {\n              resizeObserver.observe(element);\n            }\n          }\n        }\n      }\n    });\n\n    mutationObserver.observe(headerGroup, { childList: true });\n  }\n});\n"
  },
  {
    "path": "assets/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \"./\",\n    \"checkJs\": true,\n    \"target\": \"ES2020\",\n    \"noImplicitAny\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"strictNullChecks\": true,\n    \"types\": [\"./global.d.ts\"],\n    \"paths\": {\n      \"@theme/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "assets/jumbo-text.js",
    "content": "import { ResizeNotifier, prefersReducedMotion, yieldToMainThread } from '@theme/utilities';\nimport { Component } from '@theme/component';\n\n/**\n * A custom element that automatically sizes text to fit its container width.\n */\nclass JumboText extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    this.#setIntersectionObserver();\n\n    // We need window listener to account for flex containers not shrinking until we reset the font size.\n    window.addEventListener('resize', this.#windowResizeListener);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#resizeObserver.disconnect();\n    this.#intersectionObserver?.disconnect();\n\n    window.removeEventListener('resize', this.#windowResizeListener);\n  }\n\n  #firstResize = true;\n\n  /**\n   * Sets the intersection observer to calculate the optimal font size when the text is in view.\n   */\n  #setIntersectionObserver() {\n    // The threshold could be different based on the repetition of the animation.\n    this.#intersectionObserver = new IntersectionObserver(\n      (entries) => {\n        // We observe a single element, so we only need the latest entry.\n        const entry = entries[entries.length - 1];\n\n        if (!entry) {\n          return;\n        }\n\n        // Initial calculation\n        if (entry.isIntersecting && this.#firstResize) {\n          this.#handleResize(entry.boundingClientRect.width);\n        }\n\n        if (this.dataset.textEffect && this.dataset.textEffect !== 'none' && !prefersReducedMotion()) {\n          if (entry.intersectionRatio >= 0.3) {\n            this.classList.add('ready');\n            if (this.dataset.animationRepeat === 'false') {\n              this.#intersectionObserver?.unobserve(entry.target);\n            }\n            // We need to wait for resize recalculations to apply before triggering transitions.\n            yieldToMainThread().then(() => {\n              this.classList.add('jumbo-text-visible');\n            });\n          } else {\n            this.classList.remove('ready', 'jumbo-text-visible');\n          }\n        }\n      },\n      { threshold: [0, 0.3] }\n    );\n\n    this.#intersectionObserver?.observe(this);\n  }\n\n  /**\n   * Calculates the optimal font size to make the text fit the container.\n   * @param {number} containerWidth - The width of the jumbo-text element.\n   */\n  #calculateOptimalFontSize = (containerWidth) => {\n    const { widestChild: firstPassWidestChild, widestChildWidth: firstPassWidestChildWidth } = this.#findWidestChild();\n    if (!firstPassWidestChild || !firstPassWidestChildWidth) {\n      return;\n    }\n\n    const currentFontSize = parseFloat(window.getComputedStyle(firstPassWidestChild).fontSize);\n    const firstPassFontSize = Math.round(((currentFontSize * containerWidth) / firstPassWidestChildWidth) * 100) / 100;\n\n    // Disconnect the resize observer\n    this.#resizeObserver.disconnect();\n\n    this.style.fontSize = this.#clampFontSize(firstPassFontSize);\n\n    // The way the text grows is mostly proportional, but not fully linear.\n    // Doing a single pass was good enough in 95% of cases, but we need a second one to dial in the final value.\n    const { widestChild: secondPassWidestChild, widestChildWidth: secondPassWidestChildWidth } =\n      this.#findWidestChild();\n    if (!secondPassWidestChild || !secondPassWidestChildWidth) {\n      return;\n    }\n\n    // The -0.15 was chosen by trial and error. It doesn't influence large font sizes much, but helps smaller ones fit better.\n    const secondPassFontSize =\n      Math.floor(((firstPassFontSize * containerWidth) / secondPassWidestChildWidth) * 100) / 100 - 0.15;\n\n    if (secondPassFontSize !== firstPassFontSize) {\n      this.style.fontSize = this.#clampFontSize(secondPassFontSize);\n    }\n\n    this.classList.add('ready');\n\n    this.#resizeObserver.observe(this);\n  };\n\n  #findWidestChild = () => {\n    let widestChild = null;\n    let widestChildWidth = 0;\n\n    for (const child of this.children) {\n      if (!(child instanceof HTMLElement)) {\n        continue;\n      }\n\n      const { width: childWidth } = child.getBoundingClientRect();\n\n      if (!widestChild || childWidth > widestChildWidth) {\n        widestChildWidth = childWidth;\n        widestChild = child;\n      }\n    }\n    return { widestChild, widestChildWidth };\n  };\n\n  /**\n   * Clamps the font size between a minimum and maximum value.\n   * @param {number} fontSize - The font size to clamp.\n   * @returns {string} The clamped font size with pixels suffix.\n   */\n  #clampFontSize = (fontSize) => {\n    const minFontSize = 1;\n    const maxFontSize = 500;\n\n    return `${Math.min(Math.max(fontSize, minFontSize), maxFontSize)}px`;\n  };\n\n  /**\n   * @param {number | undefined} containerWidth - The width of the <jumbo-text> element.\n   */\n  #handleResize = (containerWidth = undefined) => {\n    // Check for empty text\n    if (!this.textContent?.trim()) {\n      return;\n    }\n\n    if (containerWidth === undefined) {\n      containerWidth = this.offsetWidth;\n    }\n\n    if (containerWidth <= 0) return;\n\n    // Reset font size to make sure we allow the container to shrink if it needs to.\n    if (!this.#firstResize) {\n      this.classList.remove('ready');\n      this.style.fontSize = '';\n    }\n\n    this.#calculateOptimalFontSize(containerWidth);\n\n    this.#firstResize = false;\n\n    if (this.dataset.capText === 'true') {\n      return;\n    }\n\n    // We assume that the component won't be at the bottom of the page unless it's inside the last section.\n    const allSections = Array.from(document.querySelectorAll('.shopify-section'));\n    const lastSection = allSections[allSections.length - 1];\n\n    if (lastSection && !lastSection.contains(this)) {\n      return;\n    }\n\n    // Check if jumbo text is close to the bottom of the page. If it is, then use `cap text` instead of `cap alphabetic`.\n    // This reserves space for descender characters so they don't overflow and cause extra space at the bottom of the page.\n    const rect = this.getBoundingClientRect();\n    const bottom = rect.bottom + window.scrollY;\n    const distanceFromBottom = document.documentElement.offsetHeight - bottom;\n    this.dataset.capText = (distanceFromBottom <= 100).toString();\n  };\n\n  #windowResizeListener = () => this.#handleResize();\n\n  #resizeObserver = new ResizeNotifier((entries) => this.#handleResize(entries[0]?.borderBoxSize?.[0]?.inlineSize));\n  /**\n   * @type {IntersectionObserver | null}\n   */\n  #intersectionObserver = null;\n}\n\n// Register once\nif (!customElements.get('jumbo-text')) {\n  customElements.define('jumbo-text', JumboText);\n}\n"
  },
  {
    "path": "assets/layered-slideshow.js",
    "content": "import { Component } from '@theme/component';\nimport { isMobileBreakpoint, mediaQueryLarge } from '@theme/utilities';\n\n/**\n * @typedef {Object} LayeredSlideshowRefs\n * @property {HTMLElement} container\n * @property {HTMLElement[]} tabs\n * @property {HTMLElement[]} panels\n */\n\n/**\n * @typedef {Object} DragState\n * @property {number} target\n * @property {number} start\n * @property {number} max\n * @property {number} activeSize - The resolved pixel size of the active panel at drag start\n * @property {boolean} left\n * @property {boolean} [dragging]\n * @property {boolean} [prevent]\n * @property {number} [progress]\n */\n\nconst DRAG_THRESHOLD = 5;\nconst MAX_DRAG_WIDTH_RATIO = 0.8;\nconst DRAG_COMPLETE_THRESHOLD = 0.5;\nconst INACTIVE_SIZE = 56; // Px size of inactive tabs on desktop\nconst INACTIVE_MOBILE_SIZE = 44; // Px size of inactive tabs on mobile\nconst FOCUSABLE_SELECTOR =\n  'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/** @extends {Component<LayeredSlideshowRefs>} */\nexport class LayeredSlideshowComponent extends Component {\n  requiredRefs = ['container'];\n  #active = 0;\n  /** @type {DragState | null} */\n  #drag = null;\n  /** @type {AbortController | null} */\n  #abort = null;\n  #isMobile = false;\n  /** @type {ResizeObserver | null} */\n  #heightObserver = null;\n  /** @type {MutationObserver | null} */\n  #contentObserver = null;\n  /** @type {ResizeObserver | null} */\n  #containerObserver = null;\n\n  /** @returns {number} The inactive tab size in pixels based on current viewport */\n  get #inactiveSize() {\n    return this.#isMobile ? INACTIVE_MOBILE_SIZE : INACTIVE_SIZE;\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    const { tabs } = this.refs;\n    if (!tabs?.length) return;\n\n    this.#active = Math.max(\n      0,\n      tabs.findIndex((t) => t.getAttribute('aria-selected') === 'true')\n    );\n\n    this.#isMobile = isMobileBreakpoint();\n    mediaQueryLarge.addEventListener('change', this.#handleMediaQueryChange);\n\n    this.#containerObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        if (entry.contentBoxSize) {\n          // Use contentBoxSize if available for better precision, or fallback to contentRect\n          const boxSize = entry.contentBoxSize[0];\n          const isMobile = this.#isMobile;\n\n          let size;\n          if (boxSize) {\n            size = isMobile ? boxSize.blockSize : boxSize.inlineSize;\n          } else {\n            size = isMobile ? entry.contentRect.height : entry.contentRect.width;\n          }\n\n          this.#updateGridSizes(size);\n        }\n      }\n    });\n    this.#containerObserver.observe(this.refs.container);\n\n    this.#updateActiveTab();\n    this.#setupEventListeners();\n    this.#observeContentHeight();\n  }\n\n  #setupEventListeners() {\n    this.#abort?.abort();\n    this.#abort = new AbortController();\n    const opts = { signal: this.#abort.signal };\n    const { container, tabs } = this.refs;\n\n    this.addEventListener('keydown', (e) => this.#handleKeydown(e), opts);\n\n    for (const [i, tab] of tabs.entries()) {\n      tab.addEventListener('click', (e) => this.#handleTabClick(e, i), opts);\n      tab.addEventListener('focus', (e) => this.#handleTabFocus(e, i), opts);\n    }\n\n    this.#setupPanelFocusManagement(opts);\n\n    if (!this.#isMobile) {\n      container.addEventListener('pointerdown', (e) => this.#startDrag(e), opts);\n      container.addEventListener('click', (e) => this.#preventClickDuringDrag(e), { ...opts, capture: true });\n    }\n  }\n\n  #handleKeydown(/** @type {KeyboardEvent} */ e) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (target.getAttribute('role') !== 'tab') return;\n\n    const { tabs } = this.refs;\n    if (!tabs) return;\n\n    const i = tabs.indexOf(target);\n    const navMap = {\n      [this.#isMobile ? 'ArrowUp' : 'ArrowLeft']: -1,\n      [this.#isMobile ? 'ArrowDown' : 'ArrowRight']: 1,\n      Home: -i,\n      End: tabs.length - 1 - i,\n    };\n\n    const offset = navMap[e.key];\n    if (offset !== undefined) {\n      e.preventDefault();\n      const nextIndex = (i + offset + tabs.length) % tabs.length;\n      tabs[nextIndex]?.focus();\n      this.#activate(nextIndex);\n    }\n  }\n\n  #handleTabClick(/** @type {MouseEvent} */ e, /** @type {number} */ index) {\n    e.preventDefault();\n    this.#activate(index);\n  }\n\n  #handleTabFocus(/** @type {FocusEvent} */ e, /** @type {number} */ index) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (target.matches(':focus-visible')) {\n      this.#activate(index);\n    }\n  }\n\n  /**\n   * @param {AddEventListenerOptions & { signal: AbortSignal }} opts\n   */\n  #setupPanelFocusManagement(opts) {\n    const { panels } = this.refs;\n    if (!panels) return;\n\n    for (const [index, panel] of panels.entries()) {\n      panel.addEventListener('keydown', (event) => this.#handlePanelKeydown(event, index), opts);\n    }\n  }\n\n  /**\n   * @param {KeyboardEvent} event\n   * @param {number} index\n   */\n  #handlePanelKeydown(event, index) {\n    if (event.key !== 'Tab') return;\n\n    const { panels } = this.refs;\n    const panel = /** @type {HTMLElement} */ (event.currentTarget);\n    const focusable = this.#getFocusableElements(panel);\n    const firstFocusable = focusable[0];\n    const lastFocusable = focusable[focusable.length - 1];\n\n    if (event.shiftKey) {\n      const isAtStart =\n        (firstFocusable && document.activeElement === firstFocusable) ||\n        (!focusable.length && document.activeElement === panel);\n      if (isAtStart && index > 0) {\n        event.preventDefault();\n        this.#activate(index - 1);\n        this.#focusPanelEdge(index - 1, 'end');\n      }\n      return;\n    }\n\n    const isAtEnd =\n      (lastFocusable && document.activeElement === lastFocusable) ||\n      (!focusable.length && document.activeElement === panel);\n\n    if (isAtEnd && panels && index < panels.length - 1) {\n      event.preventDefault();\n      this.#activate(index + 1);\n      this.#focusPanelEdge(index + 1, 'start');\n    }\n  }\n\n  /**\n   * @param {number} index\n   * @param {'start' | 'end'} [position]\n   */\n  #focusPanelEdge(index, position = 'start') {\n    const panel = this.refs.panels?.[index];\n    if (!panel) return;\n\n    const focusable = this.#getFocusableElements(panel);\n    const target = position === 'end' ? focusable[focusable.length - 1] : focusable[0];\n\n    requestAnimationFrame(() => (target ?? panel).focus());\n  }\n\n  /**\n   * @param {HTMLElement} panel\n   * @returns {HTMLElement[]}\n   */\n  #getFocusableElements(panel) {\n    return Array.from(panel.querySelectorAll(FOCUSABLE_SELECTOR))\n      .filter((el) => !el.closest('[inert]'))\n      .map((el) => /** @type {HTMLElement} */ (el));\n  }\n\n  #preventClickDuringDrag(/** @type {MouseEvent} */ e) {\n    const target = /** @type {HTMLElement} */ (e.target);\n    if (this.#drag?.prevent && target.closest('[role=\"tab\"]')) {\n      e.stopImmediatePropagation();\n      e.preventDefault();\n    }\n  }\n\n  #handleMediaQueryChange = () => {\n    const wasMobile = this.#isMobile;\n    this.#isMobile = isMobileBreakpoint();\n\n    if (wasMobile !== this.#isMobile) {\n      const { container } = this.refs;\n      container.setAttribute('data-instant-transitions', '');\n\n      this.#clearHeightStyles();\n      // Re-calculate height first so grid calculation has correct container dimensions\n      this.#observeContentHeight();\n      this.#updateActiveTab();\n      this.#setupEventListeners();\n\n      requestAnimationFrame(() => {\n        container.removeAttribute('data-instant-transitions');\n      });\n    }\n  };\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abort?.abort();\n    this.#heightObserver?.disconnect();\n    this.#heightObserver = null;\n    this.#contentObserver?.disconnect();\n    this.#contentObserver = null;\n    this.#containerObserver?.disconnect();\n    this.#containerObserver = null;\n    mediaQueryLarge.removeEventListener('change', this.#handleMediaQueryChange);\n  }\n\n  /**\n   * Public method to select a slide by index\n   * @param {number} index\n   * @param {{ instant?: boolean }} [options]\n   */\n  select(index, { instant = false } = {}) {\n    this.#activate(index, instant);\n  }\n\n  /**\n   * @param {number} index\n   * @param {boolean} [instant]\n   */\n  #activate(index, instant = false) {\n    const { container, tabs } = this.refs;\n    if (!tabs || index === this.#active || index < 0 || index >= tabs.length) return;\n\n    if (instant) {\n      container.setAttribute('data-instant-transitions', '');\n    }\n\n    this.#active = index;\n    this.#updateActiveTab();\n\n    if (instant) {\n      // Double rAF to ensure layout is fully settled before re-enabling transitions\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          container.removeAttribute('data-instant-transitions');\n        });\n      });\n    }\n  }\n\n  #updateActiveTab() {\n    const { tabs, panels } = this.refs;\n\n    for (const [i, tab] of tabs?.entries() ?? []) {\n      const isActive = i === this.#active;\n      tab.setAttribute('aria-selected', String(isActive));\n      tab.setAttribute('tabindex', isActive ? '0' : '-1');\n    }\n\n    for (const [i, panel] of panels?.entries() ?? []) {\n      const isActive = i === this.#active;\n      panel.toggleAttribute('inert', !isActive);\n      panel.setAttribute('tabindex', isActive ? '0' : '-1');\n\n      const video = panel.querySelector('video');\n      if (video) {\n        isActive ? video.play() : video.pause();\n      }\n    }\n\n    this.#updateGridSizes();\n  }\n\n  /**\n   * @param {number} [containerSize] - Override container size (used during viewport switch)\n   */\n  #updateGridSizes(containerSize) {\n    const { container, tabs } = this.refs;\n    if (!tabs) return;\n    const inactiveSize = this.#inactiveSize;\n    const size =\n      containerSize ??\n      (this.#isMobile ? container.getBoundingClientRect().height : container.getBoundingClientRect().width);\n    const activeSize = size - inactiveSize * (tabs.length - 1);\n    const sizes = tabs.map((_, i) => (i === this.#active ? `${activeSize}px` : `${inactiveSize}px`));\n    container.style.setProperty('--active-tab', sizes.join(' '));\n  }\n\n  /**\n   * @param {PointerEvent} event\n   */\n  #startDrag(event) {\n    if (this.#isMobile) return;\n\n    const { tabs } = this.refs;\n    if (!tabs) return;\n\n    const eventTarget = /** @type {HTMLElement} */ (event.target);\n    const tab = eventTarget.closest('[role=\"tab\"]');\n    if (tab) {\n      const i = tabs.indexOf(/** @type {HTMLElement} */ (tab));\n      if (i === this.#active) return;\n      const target = i > this.#active ? i + 1 : i;\n      if (target >= tabs.length) return;\n\n      this.#initializeDrag(event, target);\n    } else {\n      this.#initializeDrag(event);\n    }\n  }\n\n  /**\n   * @param {PointerEvent} event\n   * @param {number} [initialTarget]\n   */\n  #initializeDrag(event, initialTarget) {\n    const { container, tabs } = this.refs;\n    if (!tabs) return;\n\n    // Calculate active size from container dimensions\n    const containerWidth = container.getBoundingClientRect().width;\n    const inactiveSize = this.#inactiveSize;\n    const activeSize = containerWidth - inactiveSize * (tabs.length - 1);\n\n    this.#drag = {\n      target: initialTarget ?? -1,\n      start: event.clientX,\n      max: containerWidth * MAX_DRAG_WIDTH_RATIO,\n      activeSize,\n      left: initialTarget !== undefined ? initialTarget > this.#active : false,\n    };\n\n    const ac = new AbortController();\n    const opts = { signal: ac.signal };\n\n    document.addEventListener('pointermove', (e) => this.#handleDrag(e), opts);\n    document.addEventListener('pointerup', () => this.#endDrag(ac), opts);\n    document.addEventListener('pointercancel', () => this.#endDrag(ac), opts);\n\n    event.preventDefault();\n  }\n\n  /**\n   * @param {PointerEvent} event\n   */\n  #handleDrag(event) {\n    if (!this.#drag) return;\n\n    const { container, tabs } = this.refs;\n    if (!container || !tabs) return;\n\n    const delta = event.clientX - this.#drag.start;\n    const move = Math.abs(delta);\n\n    if (!this.#drag.dragging && move >= DRAG_THRESHOLD) {\n      if (this.#drag.target === -1) {\n        if (delta > 0 && this.#active > 0) {\n          this.#drag.target = this.#active - 1;\n          this.#drag.left = false;\n        } else if (delta < 0 && this.#active < tabs.length - 1) {\n          this.#drag.target = this.#active + 1;\n          this.#drag.left = true;\n        } else {\n          return;\n        }\n      }\n      this.#drag.dragging = true;\n      container.setAttribute('data-dragging', '');\n    }\n\n    if (!this.#drag.dragging) return;\n\n    const correct = this.#drag.left ? delta < 0 : delta > 0;\n    const progress = correct ? Math.min(move / this.#drag.max, 1) : 0;\n\n    const inactiveSize = this.#inactiveSize;\n    const activeSize = this.#drag.activeSize;\n    const range = activeSize - inactiveSize;\n    const sizes = tabs.map((_, i) => {\n      if (i === this.#active) {\n        const active = Math.max(inactiveSize, activeSize - range * progress);\n        return `${active}px`;\n      }\n      if (i === this.#drag?.target) {\n        const drag = inactiveSize + range * progress;\n        return `${drag}px`;\n      }\n      return `${inactiveSize}px`;\n    });\n\n    container.style.setProperty('--active-tab', sizes.join(' '));\n    this.#drag.progress = progress;\n  }\n\n  /**\n   * @param {AbortController} ac\n   */\n  #endDrag(ac) {\n    if (!this.#drag) return;\n\n    const { container } = this.refs;\n    container?.removeAttribute('data-dragging');\n\n    if (this.#drag.dragging) {\n      this.#drag.prevent = true;\n      setTimeout(() => (this.#drag = null), 100);\n\n      if (this.#drag.progress && this.#drag.progress >= DRAG_COMPLETE_THRESHOLD) {\n        this.#activate(this.#drag.target);\n      } else {\n        this.#updateActiveTab();\n      }\n    } else {\n      this.#drag = null;\n    }\n\n    ac.abort();\n  }\n\n  #observeContentHeight() {\n    const { panels } = this.refs;\n\n    this.#heightObserver?.disconnect();\n    this.#heightObserver = new ResizeObserver(() => this.#syncHeight());\n\n    this.#contentObserver?.disconnect();\n    this.#contentObserver = new MutationObserver(() => this.#syncHeight());\n\n    for (const panel of panels ?? []) {\n      const content = panel.querySelector('.layered-slideshow__content');\n      const inner = content?.querySelector('.group-block-content');\n\n      // Observe all relevant elements for resize\n      if (inner) this.#heightObserver.observe(inner);\n      if (content) this.#heightObserver.observe(content);\n\n      // Observe content for DOM mutations (new blocks, text changes)\n      const target = inner ?? content;\n      if (target) {\n        this.#contentObserver.observe(target, {\n          childList: true,\n          subtree: true,\n          characterData: true,\n        });\n      }\n    }\n\n    this.#syncHeight();\n  }\n\n  #syncHeight() {\n    const { container } = this.refs;\n    const contentHeight = this.#getMaxContentHeight();\n    const isAuto = container.getAttribute('size') === 'auto';\n\n    if (this.#isMobile) {\n      this.#syncMobileHeight(contentHeight, isAuto);\n    } else {\n      this.#syncDesktopHeight(contentHeight, isAuto);\n    }\n  }\n\n  /**\n   * @param {number} contentHeight\n   * @param {boolean} isAuto\n   */\n  #syncDesktopHeight(contentHeight, isAuto) {\n    const { container } = this.refs;\n\n    if (isAuto) {\n      // Auto mode: fit to content height\n      let minHeightTemp = Math.max(contentHeight, 150);\n      container.style.height = `${minHeightTemp}px`;\n      this.style.minHeight = `${minHeightTemp}px`;\n    } else {\n      // Temporarily clear inline style to measure CSS-defined min-height\n      const savedMinHeight = this.style.minHeight;\n      this.style.minHeight = '';\n      const cssMinHeight = parseFloat(getComputedStyle(this).minHeight) || 0;\n      this.style.minHeight = savedMinHeight;\n\n      // Only set inline heights when content exceeds CSS min-height\n      if (contentHeight > cssMinHeight) {\n        this.style.minHeight = `${contentHeight}px`;\n        container.style.height = `${contentHeight}px`;\n      } else {\n        this.style.minHeight = '';\n        container.style.height = '';\n      }\n    }\n  }\n\n  /**\n   * @param {number} contentHeight\n   * @param {boolean} isAuto\n   */\n  #syncMobileHeight(contentHeight, isAuto) {\n    const { container, tabs } = this.refs;\n    if (!container || !tabs) return;\n\n    const containerStyles = getComputedStyle(container);\n    const inactiveStackHeight = (tabs.length - 1) * this.#inactiveSize;\n\n    let minPanelHeight;\n\n    if (isAuto) {\n      // Auto mode: fit to content height with reasonable minimum\n      minPanelHeight = 150;\n    } else {\n      // CSS variable is set on component, try reading from container (inherited) or component directly\n      const inheritedValue = containerStyles.getPropertyValue('--layered-panel-height-mobile');\n      const componentValue = getComputedStyle(this).getPropertyValue('--layered-panel-height-mobile');\n      minPanelHeight = parseFloat(inheritedValue || componentValue) || 260;\n    }\n\n    const requiredActiveHeight = Math.max(minPanelHeight, contentHeight);\n\n    container.style.setProperty('--active-panel-height', `${requiredActiveHeight}px`);\n    container.style.height = `${requiredActiveHeight + inactiveStackHeight}px`;\n  }\n\n  #clearHeightStyles() {\n    const { container } = this.refs;\n\n    this.style.minHeight = '';\n    container.style.height = '';\n    container.style.removeProperty('--active-panel-height');\n  }\n\n  #getMaxContentHeight() {\n    const { panels } = this.refs;\n    let max = 0;\n\n    for (const panel of panels ?? []) {\n      const content = panel.querySelector('.layered-slideshow__content');\n      if (!content) continue;\n\n      const inner = /** @type {HTMLElement} */ (content.querySelector('.group-block-content') ?? content);\n\n      // Temporarily set height to auto for accurate measurement\n      // This is needed because height: 100% collapses when parent has no height\n      const savedHeight = inner.style.height;\n      inner.style.height = 'auto';\n\n      const styles = getComputedStyle(content);\n      const paddingTop = parseFloat(styles.paddingBlockStart || styles.paddingTop) || 0;\n      const paddingBottom = parseFloat(styles.paddingBlockEnd || styles.paddingBottom) || 0;\n\n      const height = (inner.scrollHeight || 0) + paddingTop + paddingBottom;\n      if (height > max) max = height;\n\n      // Restore original height\n      inner.style.height = savedHeight;\n    }\n\n    return max;\n  }\n}\n\ncustomElements.define('layered-slideshow-component', LayeredSlideshowComponent);\n"
  },
  {
    "path": "assets/local-pickup.js",
    "content": "import { Component } from '@theme/component';\nimport { morph } from '@theme/morph';\nimport { ThemeEvents, VariantUpdateEvent } from '@theme/events';\n\nclass LocalPickup extends Component {\n  /** @type {AbortController | undefined} */\n  #activeFetch;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    const closestSection = this.closest(`.shopify-section, dialog`);\n\n    /** @type {(event: VariantUpdateEvent) => void} */\n    const variantUpdated = (event) => {\n      if (event.detail.data.newProduct) {\n        this.dataset.productUrl = event.detail.data.newProduct.url;\n      }\n\n      const variantId = event.detail.resource ? event.detail.resource.id : null;\n      const variantAvailable = event.detail.resource ? event.detail.resource.available : null;\n      if (variantId !== this.dataset.variantId) {\n        if (variantId && variantAvailable) {\n          this.removeAttribute('hidden');\n          this.dataset.variantId = variantId;\n          this.#fetchAvailability(variantId);\n        } else {\n          this.setAttribute('hidden', '');\n        }\n      }\n    };\n\n    closestSection?.addEventListener(ThemeEvents.variantUpdate, variantUpdated);\n\n    this.disconnectedCallback = () => {\n      closestSection?.removeEventListener(ThemeEvents.variantUpdate, variantUpdated);\n    };\n  }\n\n  #createAbortController() {\n    if (this.#activeFetch) this.#activeFetch.abort();\n    this.#activeFetch = new AbortController();\n    return this.#activeFetch;\n  }\n\n  /**\n   * Fetches the availability of a variant.\n   * @param {string} variantId - The ID of the variant to fetch availability for.\n   */\n  #fetchAvailability = (variantId) => {\n    if (!variantId) return;\n\n    const abortController = this.#createAbortController();\n\n    const url = this.dataset.productUrl;\n    fetch(`${url}?variant=${variantId}&section_id=${this.dataset.sectionId}`, {\n      signal: abortController.signal,\n    })\n      .then((response) => response.text())\n      .then((text) => {\n        if (abortController.signal.aborted) return;\n\n        const html = new DOMParser().parseFromString(text, 'text/html');\n        const wrapper = html.querySelector(`local-pickup[data-variant-id=\"${variantId}\"]`);\n        if (wrapper) {\n          this.removeAttribute('hidden');\n          morph(this, wrapper);\n        } else this.setAttribute('hidden', '');\n      })\n      .catch((_e) => {\n        if (abortController.signal.aborted) return;\n        this.setAttribute('hidden', '');\n      });\n  };\n}\n\nif (!customElements.get('local-pickup')) {\n  customElements.define('local-pickup', LocalPickup);\n}\n"
  },
  {
    "path": "assets/localization.js",
    "content": "import { Component } from '@theme/component';\nimport { isClickedOutside, normalizeString, onAnimationEnd } from '@theme/utilities';\n\n/**\n * A custom element that displays a localization form.\n *\n * @typedef {object} FormRefs\n * @property {HTMLDivElement} countryList - The country list element.\n * @property {HTMLInputElement} countryInput - The country input element.\n * @property {HTMLUListElement[]} countryListItems - The country list items element.\n * @property {HTMLFormElement} form - The form element.\n * @property {HTMLDivElement} liveRegion - The live region element.\n * @property {HTMLSelectElement} languageInput - The language input element.\n * @property {HTMLSpanElement} noResultsMessage - The no results message element.\n * @property {HTMLUListElement} popularCountries - The popular countries element.\n * @property {HTMLInputElement} search - The search input element.\n * @property {HTMLButtonElement} resetButton - The reset button element.\n *\n * @extends {Component<FormRefs>}\n */\nclass LocalizationFormComponent extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.refs.search && this.refs.search.addEventListener('keydown', this.#onSearchKeyDown);\n    this.refs.countryList && this.refs.countryList.addEventListener('keydown', this.#onContainerKeyDown);\n    this.refs.countryList && this.refs.countryList.addEventListener('scroll', this.#onCountryListScroll);\n\n    // Resizing the language input can be expensive for browsers that don't support field-sizing: content.\n    // Spliting it into separate tasks at least helps when there are multiple localization forms on the page.\n    setTimeout(() => this.resizeLanguageInput(), 0);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.refs.search && this.refs.search.removeEventListener('keydown', this.#onSearchKeyDown);\n    this.refs.countryList && this.refs.countryList.removeEventListener('keydown', this.#onContainerKeyDown);\n    this.refs.countryList && this.refs.countryList.removeEventListener('scroll', this.#onCountryListScroll);\n  }\n\n  /**\n   * Handles the keydown event for the container.\n   *\n   * @param {KeyboardEvent} event - The event object.\n   */\n  #onContainerKeyDown = (event) => {\n    const { countryInput, countryListItems, form } = this.refs;\n\n    switch (event.key) {\n      case 'ArrowUp':\n        event.preventDefault();\n        event.stopPropagation();\n        this.#changeCountryFocus('UP');\n        break;\n      case 'ArrowDown':\n        event.preventDefault();\n        event.stopPropagation();\n        this.#changeCountryFocus('DOWN');\n        break;\n      case 'Enter': {\n        event.preventDefault();\n        event.stopPropagation();\n        const focusedItem = countryListItems.find((item) => item.getAttribute('aria-selected') === 'true');\n\n        if (focusedItem) {\n          countryInput.value = focusedItem.dataset.value ?? '';\n          form.submit();\n        }\n        break;\n      }\n    }\n\n    if (!this.refs.search) return;\n\n    setTimeout(() => {\n      const focusableItems = this.refs.countryListItems.filter((item) => !item.hasAttribute('hidden'));\n      const focusedItemIndex = focusableItems.findIndex((item) => item === document.activeElement);\n      const focusedItem = focusableItems[focusedItemIndex];\n\n      if (focusedItem) {\n        this.refs.search.setAttribute('aria-activedescendant', focusedItem.id);\n      } else {\n        this.refs.search.setAttribute('aria-activedescendant', '');\n      }\n    });\n  };\n\n  /**\n   * Selects a country.\n   *\n   * @param {string} countryName - The name of the country to select.\n   * @param {Event} event - The event object.\n   */\n  selectCountry = (countryName, event) => {\n    event.preventDefault();\n    const { countryInput, form } = this.refs;\n\n    countryInput.value = countryName;\n    form?.submit();\n  };\n\n  /**\n   * Changes the language of the localization form.\n   *\n   * @param {Event} event - The event object.\n   */\n  changeLanguage(event) {\n    const { form, languageInput } = this.refs;\n    const value = event.target instanceof HTMLSelectElement ? event.target.value : null;\n\n    if (value) {\n      languageInput.value = value;\n      this.resizeLanguageInput();\n      form.submit();\n    }\n  }\n\n  resizeLanguageInput() {\n    const { languageInput } = this.refs;\n\n    if (!languageInput || CSS.supports('field-sizing', 'content')) return;\n\n    // Hide all options except the selected option\n    for (const option of languageInput.options) {\n      if (!option.selected) {\n        option.dataset.optionLabel = option.textContent || '';\n        option.innerText = '';\n      }\n    }\n\n    // Calculate the width of the select element (which is based on the width of the widest option)\n    languageInput.style.width = 'fit-content';\n    const originalElementWidth = `${Math.ceil(languageInput.offsetWidth) + 1}px`;\n\n    // Fix the width of the select element\n    if (languageInput.offsetWidth > 0) {\n      languageInput.style.width = originalElementWidth;\n    }\n\n    // Add back all option labels\n    for (const option of languageInput.options) {\n      if (option.dataset.optionLabel) {\n        option.textContent = option.dataset.optionLabel;\n        delete option.dataset.optionLabel;\n      }\n    }\n  }\n\n  /**\n   * Finds matches for a given search value in a country element.\n   *\n   * @typedef {Object} Options\n   * @property {boolean} [matchLabel] - Whether to match the label.\n   * @property {boolean} [matchAlias] - Whether to match the alias.\n   * @property {boolean} [matchIso] - Whether to match the iso.\n   * @property {boolean} [matchCurrency] - Whether to match the currency.\n   * @property {boolean} [labelMatchStart] - Whether to match the label start.\n   * @property {boolean} [aliasExactMatch] - Whether to match the alias exact match.\n   *\n   * @typedef {Object} MatchTypes\n   * @property {boolean} [label] - Whether the label matches the search value.\n   * @property {boolean} [alias] - Whether the alias matches the search value.\n   * @property {boolean} [iso] - Whether the iso matches the search value.\n   * @property {boolean} [currency] - Whether the currency matches the search value.\n   *\n   * @param {string} searchValue - The search value to find matches for.\n   * @param {HTMLElement} countryEl - The country element to find matches in.\n   * @param {Options} options - The options for the search.\n   * @returns {MatchTypes} The matches found in the country element.\n   */\n  #findMatches(\n    searchValue,\n    countryEl,\n    options = {\n      // Which data types (label, alias, iso) to match against\n      matchLabel: true,\n      matchAlias: true,\n      matchIso: true,\n      matchCurrency: true,\n      // If true, the search value must match the start of the label\n      labelMatchStart: false,\n      // If true, a result will not display unless the search value equals an alias in its entirety\n      aliasExactMatch: false,\n    }\n  ) {\n    let matchTypes = {};\n    const { aliases, value: iso } = countryEl.dataset;\n\n    if (options.matchLabel) {\n      const countryName = normalizeString(countryEl.querySelector('.country')?.textContent ?? '');\n\n      if (!countryName) return matchTypes;\n\n      matchTypes.label = options.labelMatchStart\n        ? countryName.startsWith(searchValue)\n        : countryName.includes(searchValue);\n    }\n\n    if (options.matchCurrency) {\n      const currency = normalizeString(countryEl.querySelector('.localization-form__currency')?.textContent ?? '');\n      matchTypes.currency = currency.includes(searchValue);\n    }\n\n    if (options.matchIso) {\n      matchTypes.iso = normalizeString(iso ?? '') == searchValue;\n    }\n\n    if (options.matchAlias) {\n      const countryAliases = aliases?.split(',').map((alias) => normalizeString(alias));\n\n      if (!countryAliases) return matchTypes;\n\n      matchTypes.alias =\n        countryAliases.length > 0 &&\n        countryAliases.find((alias) =>\n          options.aliasExactMatch ? alias === searchValue : alias.startsWith(searchValue)\n        ) !== undefined;\n    }\n\n    return matchTypes;\n  }\n\n  /**\n   * Highlights matching text in a string by wrapping it in <mark> tags.\n   *\n   * @param {string | null} text - The text to highlight.\n   * @param {string} searchValue - The search value to highlight.\n   * @returns {string} The text with matching parts wrapped in <mark> tags.\n   */\n  #highlightMatches(text, searchValue) {\n    if (!text || !searchValue) return text ?? '';\n\n    const normalizedText = normalizeString(text);\n    const normalizedSearch = normalizeString(searchValue);\n    const startIndex = normalizedText.indexOf(normalizedSearch);\n\n    if (startIndex === -1) return text;\n\n    const endIndex = startIndex + normalizedSearch.length;\n    const before = text.slice(0, startIndex);\n    const match = text.slice(startIndex, endIndex);\n    const after = text.slice(endIndex);\n\n    let result = '';\n    if (before) {\n      result += `<mark>${before}</mark>`;\n    }\n    result += match;\n    if (after) {\n      result += `<mark>${after}</mark>`;\n    }\n    return result;\n  }\n\n  /**\n   * Filters the countries based on the search value.\n   */\n  filterCountries() {\n    const { countryList, countryListItems, liveRegion, noResultsMessage, popularCountries, resetButton, search } =\n      this.refs;\n    const { labelResultsCount } = this.dataset;\n    const searchValue = normalizeString(search.value);\n    let countVisibleCountries = 0;\n\n    resetButton.toggleAttribute('hidden', !searchValue);\n\n    if (popularCountries) {\n      popularCountries.toggleAttribute('hidden', Boolean(searchValue));\n    }\n\n    const wrapper = this.querySelector('.country-selector-form__wrapper');\n    if (wrapper) {\n      wrapper.classList.toggle('is-searching', !!searchValue);\n    }\n\n    for (const countryEl of countryListItems) {\n      if (searchValue === '') {\n        countryEl.removeAttribute('hidden');\n        const countrySpan = countryEl.querySelector('.country');\n        if (countrySpan) {\n          // eslint-disable-next-line no-self-assign\n          countrySpan.textContent = countrySpan.textContent;\n        }\n        countVisibleCountries++;\n      } else {\n        const matches = this.#findMatches(searchValue, countryEl);\n\n        // In the future, we could reorder/rank filtered results based on the match types\n        if (matches.label || matches.alias || matches.iso || matches.currency) {\n          countryEl.removeAttribute('hidden');\n          const countrySpan = countryEl.querySelector('.country');\n          if (countrySpan) {\n            countrySpan.innerHTML = this.#highlightMatches(countrySpan.textContent, searchValue);\n          }\n          countVisibleCountries++;\n        } else {\n          countryEl.setAttribute('hidden', '');\n        }\n      }\n    }\n\n    if (liveRegion && labelResultsCount) {\n      liveRegion.innerText = labelResultsCount.replace('[count]', `${countVisibleCountries}`);\n    }\n\n    noResultsMessage.hidden = countVisibleCountries > 0;\n    countryList.scrollTop = 0;\n  }\n\n  /**\n   * Changes the focus of the country list items.\n   *\n   * @param {string} direction - The direction to change the focus.\n   */\n  #changeCountryFocus(direction) {\n    const { countryListItems } = this.refs;\n    const focusableItems = countryListItems.filter((item) => !item.hasAttribute('hidden'));\n    const focusedItemIndex = focusableItems.findIndex((item) => item === document.activeElement);\n    const focusedItem = focusableItems[focusedItemIndex];\n    let itemToFocus;\n\n    if (direction === 'UP') {\n      itemToFocus =\n        focusedItemIndex > 0 ? focusableItems[focusedItemIndex - 1] : focusableItems[focusableItems.length - 1];\n    } else {\n      itemToFocus =\n        focusedItemIndex < focusableItems.length - 1 ? focusableItems[focusedItemIndex + 1] : focusableItems[0];\n    }\n\n    if (focusedItem) {\n      focusedItem.setAttribute('aria-selected', 'false');\n    }\n    itemToFocus?.setAttribute('aria-selected', 'true');\n    itemToFocus?.focus();\n  }\n\n  /**\n   * Resets the countries filter.\n   *\n   * @param {Event} event - The event object.\n   */\n  resetCountriesFilter(event) {\n    const { search } = this.refs;\n\n    event.stopPropagation();\n    search.value = '';\n    this.filterCountries();\n    search.setAttribute('aria-activedescendant', '');\n    search.focus();\n  }\n\n  /**\n   * Handles the keydown event for the search input.\n   *\n   * @param {KeyboardEvent} event - The event object.\n   */\n  #onSearchKeyDown = (event) => {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.#onContainerKeyDown(event);\n  };\n\n  /**\n   * Resets the form.\n   */\n  resetForm() {\n    const { search } = this.refs;\n\n    if (!search) return;\n\n    if (search.value != '') {\n      search.value = '';\n      this.filterCountries();\n      search.setAttribute('aria-activedescendant', '');\n    }\n  }\n\n  /**\n   * Focuses the search input.\n   */\n  focusSearchInput = () => {\n    const { search } = this.refs;\n\n    search?.focus();\n  };\n\n  /**\n   * Handles the scroll event on the country list.\n   *\n   * @param {Event} event - The scroll event object.\n   */\n  #onCountryListScroll = (event) => {\n    const countryFilter = this.querySelector('.country-filter');\n    const countryList = event.target instanceof HTMLElement ? event.target : null;\n\n    if (countryFilter && countryList) {\n      const shouldShowBorder = countryList.scrollTop > 0;\n      countryFilter.classList.toggle('is-scrolled', shouldShowBorder);\n    }\n  };\n}\n\n/**\n * A custom element that displays a dropdown localization form.\n *\n * @typedef {object} DropdownRefs\n * @property {HTMLButtonElement} button - The button element.\n * @property {HTMLDivElement} panel - The panel element.\n * @property {LocalizationFormComponent} localizationForm - The localization form component.\n *\n * @extends {Component<DropdownRefs>}\n */\nclass DropdownLocalizationComponent extends Component {\n  get isHidden() {\n    return this.refs.panel.hasAttribute('hidden');\n  }\n\n  /**\n   * Toggles the panel.\n   */\n  toggleSelector() {\n    return this.isHidden ? this.showPanel() : this.hidePanel();\n  }\n\n  /**\n   * Shows the panel.\n   */\n  showPanel() {\n    if (!this.isHidden) return;\n\n    this.addEventListener('keyup', this.#handleKeyUp);\n    document.addEventListener('click', this.#handleClickOutside);\n\n    this.refs.panel.removeAttribute('hidden');\n    this.refs.button.setAttribute('aria-expanded', 'true');\n\n    onAnimationEnd(this.refs.panel, () => {\n      this.#updateWidth();\n      this.refs.localizationForm?.focusSearchInput();\n    });\n  }\n\n  /**\n   * Hides the panel.\n   */\n  hidePanel = () => {\n    if (this.isHidden) return;\n\n    this.removeEventListener('keyup', this.#handleKeyUp);\n    document.removeEventListener('click', this.#handleClickOutside);\n\n    this.refs.button?.setAttribute('aria-expanded', 'false');\n    this.refs.panel.setAttribute('hidden', '');\n    this.refs.localizationForm?.resetForm();\n  };\n\n  /**\n   * Handles the click outside event.\n   *\n   * @param {PointerEvent} event - The event object.\n   */\n  #handleClickOutside = (event) => {\n    if (isClickedOutside(event, this)) {\n      this.hidePanel();\n    }\n  };\n\n  /**\n   * Updates the width of the panel.\n   */\n  #updateWidth() {\n    this.style.setProperty('--width', `${this.refs.localizationForm.offsetWidth}px`);\n  }\n\n  /**\n   * Handles the keyup event.\n   *\n   * @param {KeyboardEvent} event - The event object.\n   */\n  #handleKeyUp = (event) => {\n    switch (event.key) {\n      case 'Escape':\n        this.hidePanel();\n        event.stopPropagation();\n        this.refs.button?.focus();\n        break;\n    }\n  };\n}\n\n/**\n * A custom element that displays a drawer localization form.\n *\n * @typedef {object} DrawerRefs\n * @property {HTMLDialogElement} dialog - The dialog element.\n * @property {LocalizationFormComponent} localizationForm - The localization form component.\n *\n * @extends {Component<DrawerRefs>}\n */\nclass DrawerLocalizationComponent extends Component {\n  /**\n   * Toggles the dialog.\n   *\n   * @param {ToggleEvent} event - The event object.\n   */\n  toggle(event) {\n    const { target } = event;\n    const { localizationForm } = this.refs;\n\n    if (!localizationForm || !(target instanceof HTMLDetailsElement)) return;\n\n    const countryList = localizationForm.querySelector('.country-selector-form__wrapper');\n\n    if (target.open) {\n      if (countryList) countryList.addEventListener('scroll', this.#onCountryListScroll);\n      onAnimationEnd(target, localizationForm.focusSearchInput);\n    } else {\n      countryList?.removeEventListener('scroll', this.#onCountryListScroll);\n      localizationForm.resetForm();\n    }\n  }\n\n  /**\n   * Handles the scroll event on the country list.\n   *\n   * @param {Event} event - The scroll event object.\n   */\n  #onCountryListScroll = (event) => {\n    const countryFilter = this.querySelector('.country-filter');\n    const countryList = event.target instanceof HTMLElement ? event.target : null;\n\n    if (countryFilter && countryList) {\n      const shouldShowBorder = countryList.scrollTop > 0;\n      countryFilter.classList.toggle('is-scrolled', shouldShowBorder);\n    }\n  };\n}\n\nif (!customElements.get('localization-form-component')) {\n  customElements.define('localization-form-component', LocalizationFormComponent);\n}\n\nif (!customElements.get('dropdown-localization-component')) {\n  customElements.define('dropdown-localization-component', DropdownLocalizationComponent);\n}\n\nif (!customElements.get('drawer-localization-component')) {\n  customElements.define('drawer-localization-component', DrawerLocalizationComponent);\n}\n"
  },
  {
    "path": "assets/marquee.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce } from '@theme/utilities';\n\nconst ANIMATION_OPTIONS = {\n  duration: 500,\n};\n\n/**\n * A custom element that displays a marquee.\n *\n * @typedef {object} Refs\n * @property {HTMLElement} wrapper - The wrapper element.\n * @property {HTMLElement} content - The content element.\n * @property {HTMLElement[]} marqueeItems - The marquee items collection.\n *\n * @extends Component<Refs>\n */\nclass MarqueeComponent extends Component {\n  requiredRefs = ['wrapper', 'content', 'marqueeItems'];\n\n  async connectedCallback() {\n    super.connectedCallback();\n\n    const { marqueeItems } = this.refs;\n    if (marqueeItems.length === 0) return;\n\n    const { numberOfCopies } = await this.#queryNumberOfCopies();\n\n    const speed = this.#calculateSpeed(numberOfCopies);\n\n    this.#addRepeatedItems(numberOfCopies);\n    this.#duplicateContent();\n\n    this.#setSpeed(speed);\n\n    window.addEventListener('resize', this.#handleResize);\n    this.addEventListener('pointerenter', this.#slowDown);\n    this.addEventListener('pointerleave', this.#speedUp);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    window.removeEventListener('resize', this.#handleResize);\n    this.removeEventListener('pointerenter', this.#slowDown);\n    this.removeEventListener('pointerleave', this.#speedUp);\n  }\n\n  /**\n   * @type {{ cancel: () => void, current: number } | null}\n   */\n  #animation = null;\n\n  /**\n   * @type {number | null}\n   */\n  #marqueeWidth = null;\n\n  #slowDown = debounce(() => {\n    if (this.#animation) return;\n\n    const animation = this.refs.wrapper.getAnimations()[0];\n\n    if (!animation) return;\n\n    this.#animation = animateValue({\n      ...ANIMATION_OPTIONS,\n      from: 1,\n      to: 0,\n      onUpdate: (value) => animation.updatePlaybackRate(value),\n      onComplete: () => {\n        this.#animation = null;\n      },\n    });\n  }, ANIMATION_OPTIONS.duration);\n\n  #speedUp() {\n    this.#slowDown.cancel();\n\n    const animation = this.refs.wrapper.getAnimations()[0];\n\n    if (!animation || animation.playbackRate === 1) return;\n\n    const from = this.#animation?.current ?? 0;\n    this.#animation?.cancel();\n\n    this.#animation = animateValue({\n      ...ANIMATION_OPTIONS,\n      from,\n      to: 1,\n      onUpdate: (value) => animation.updatePlaybackRate(value),\n      onComplete: () => {\n        this.#animation = null;\n      },\n    });\n  }\n\n  get clonedContent() {\n    const { content, wrapper } = this.refs;\n    const lastChild = wrapper.lastElementChild;\n\n    return content !== lastChild ? lastChild : null;\n  }\n\n  /**\n   * @param {number} value\n   */\n  #setSpeed(value) {\n    this.style.setProperty('--marquee-speed', `${value}s`);\n  }\n\n  async #queryNumberOfCopies() {\n    const { marqueeItems } = this.refs;\n\n    return new Promise((resolve) => {\n      if (!marqueeItems[0]) {\n        // Wrapping the resolve in a setTimeout here and below splits each marquee reflow into a separate task.\n        return setTimeout(() => resolve({ numberOfCopies: 1, isHorizontalResize: true }), 0);\n      }\n\n      const intersectionObserver = new IntersectionObserver(\n        (entries) => {\n          const firstEntry = entries[0];\n          if (!firstEntry) return;\n          intersectionObserver.disconnect();\n\n          const { width: marqueeWidth } = firstEntry.rootBounds ?? { width: 0 };\n          const { width: marqueeItemsWidth } = firstEntry.boundingClientRect;\n\n          const isHorizontalResize = this.#marqueeWidth !== marqueeWidth;\n          this.#marqueeWidth = marqueeWidth;\n\n          setTimeout(() => {\n            resolve({\n              numberOfCopies: marqueeItemsWidth === 0 ? 1 : Math.ceil(marqueeWidth / marqueeItemsWidth),\n              isHorizontalResize,\n            });\n          }, 0);\n        },\n        { root: this }\n      );\n      intersectionObserver.observe(marqueeItems[0]);\n    });\n  }\n\n  /**\n   * @param {number} numberOfCopies\n   */\n  #calculateSpeed(numberOfCopies) {\n    const speedFactor = Number(this.getAttribute('data-speed-factor'));\n    const speed = Math.sqrt(numberOfCopies) * speedFactor;\n\n    return speed;\n  }\n\n  #handleResize = debounce(async () => {\n    const { marqueeItems } = this.refs;\n    const { newNumberOfCopies, isHorizontalResize } = await this.#queryNumberOfCopies();\n\n    // opt out of marquee manipulation on vertical resizes\n    if (!isHorizontalResize) return;\n\n    const currentNumberOfCopies = marqueeItems.length;\n    const speed = this.#calculateSpeed(newNumberOfCopies);\n\n    if (newNumberOfCopies > currentNumberOfCopies) {\n      this.#addRepeatedItems(newNumberOfCopies - currentNumberOfCopies);\n    } else if (newNumberOfCopies < currentNumberOfCopies) {\n      this.#removeRepeatedItems(currentNumberOfCopies - newNumberOfCopies);\n    }\n\n    this.#duplicateContent();\n    this.#setSpeed(speed);\n    this.#restartAnimation();\n  }, 250);\n\n  #restartAnimation() {\n    const animations = this.refs.wrapper.getAnimations();\n\n    requestAnimationFrame(() => {\n      for (const animation of animations) {\n        animation.currentTime = 0;\n      }\n    });\n  }\n\n  #duplicateContent() {\n    this.clonedContent?.remove();\n\n    const clone = /** @type {HTMLElement} */ (this.refs.content.cloneNode(true));\n\n    clone.setAttribute('aria-hidden', 'true');\n    clone.removeAttribute('ref');\n\n    this.refs.wrapper.appendChild(clone);\n  }\n\n  /**\n   * @param {number} numberOfCopies\n   */\n  #addRepeatedItems(numberOfCopies) {\n    const { content, marqueeItems } = this.refs;\n\n    if (!marqueeItems[0]) return;\n\n    for (let i = 0; i < numberOfCopies - 1; i++) {\n      const clone = marqueeItems[0].cloneNode(true);\n      content.appendChild(clone);\n    }\n  }\n\n  /**\n   * @param {number} numberOfCopies\n   */\n  #removeRepeatedItems(numberOfCopies) {\n    const { content } = this.refs;\n    const children = Array.from(content.children);\n\n    const itemsToRemove = Math.min(numberOfCopies, children.length - 1);\n\n    for (let i = 0; i < itemsToRemove; i++) {\n      content.lastElementChild?.remove();\n    }\n  }\n}\n\n// Define the animateValue function\n/**\n * Animate a numeric property smoothly.\n * @param {Object} params - The parameters for the animation.\n * @param {number} params.from - The starting value.\n * @param {number} params.to - The ending value.\n * @param {number} params.duration - The duration of the animation in milliseconds.\n * @param {function(number): void} params.onUpdate - The function to call on each update.\n * @param {function(number): number} [params.easing] - The easing function.\n * @param {function(): void} [params.onComplete] - The function to call when the animation completes.\n */\nfunction animateValue({ from, to, duration, onUpdate, easing = (t) => t * t * (3 - 2 * t), onComplete }) {\n  const startTime = performance.now();\n  let cancelled = false;\n  let currentValue = from;\n\n  /**\n   * @param {number} currentTime - The current time in milliseconds.\n   */\n  function animate(currentTime) {\n    if (cancelled) return;\n\n    const elapsed = currentTime - startTime;\n    const progress = Math.min(elapsed / duration, 1);\n    const easedProgress = easing(progress);\n    currentValue = from + (to - from) * easedProgress;\n\n    onUpdate(currentValue);\n\n    if (progress < 1) {\n      requestAnimationFrame(animate);\n    } else if (typeof onComplete === 'function') {\n      onComplete();\n    }\n  }\n\n  requestAnimationFrame(animate);\n\n  return {\n    get current() {\n      return currentValue;\n    },\n    cancel() {\n      cancelled = true;\n    },\n  };\n}\n\nif (!customElements.get('marquee-component')) {\n  customElements.define('marquee-component', MarqueeComponent);\n}\n"
  },
  {
    "path": "assets/media-gallery.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents, VariantUpdateEvent, ZoomMediaSelectedEvent } from '@theme/events';\n\n/**\n * A custom element that renders a media gallery.\n *\n * @typedef {object} Refs\n * @property {import('./zoom-dialog').ZoomDialog} [zoomDialogComponent] - The zoom dialog component.\n * @property {import('./slideshow').Slideshow} [slideshow] - The slideshow component.\n * @property {HTMLElement[]} [media] - The media elements.\n *\n * @extends Component<Refs>\n */\nexport class MediaGallery extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { signal } = this.#controller;\n    const target = this.closest('.shopify-section, dialog');\n\n    target?.addEventListener(ThemeEvents.variantUpdate, this.#handleVariantUpdate, { signal });\n    this.refs.zoomDialogComponent?.addEventListener(ThemeEvents.zoomMediaSelected, this.#handleZoomMediaSelected, {\n      signal,\n    });\n  }\n\n  #controller = new AbortController();\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.#controller.abort();\n  }\n\n  /**\n   * Handles a variant update event by replacing the current media gallery with a new one.\n   *\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  #handleVariantUpdate = (event) => {\n    const source = event.detail.data.html;\n\n    if (!source) return;\n    const newMediaGallery = source.querySelector('media-gallery');\n\n    if (!newMediaGallery) return;\n\n    this.replaceWith(newMediaGallery);\n  };\n\n  /**\n   * Handles the 'zoom-media:selected' event.\n   * @param {ZoomMediaSelectedEvent} event - The zoom-media:selected event.\n   */\n  #handleZoomMediaSelected = async (event) => {\n    this.slideshow?.select(event.detail.index, undefined, { animate: false });\n  };\n\n  /**\n   * Zooms the media gallery.\n   *\n   * @param {number} index - The index of the media to zoom.\n   * @param {PointerEvent} event - The pointer event.\n   */\n  zoom(index, event) {\n    this.refs.zoomDialogComponent?.open(index, event);\n  }\n\n  /**\n   * Preloads an image.\n   * @param {number} index - The index of the media to preload.\n   */\n  preloadImage(index) {\n    const zoomDialogMedia = this.refs.zoomDialogComponent?.refs.media[index];\n    if (!zoomDialogMedia) return;\n\n    this.refs.zoomDialogComponent?.loadHighResolutionImage(zoomDialogMedia);\n  }\n\n  get slideshow() {\n    return this.refs.slideshow;\n  }\n\n  get media() {\n    return this.refs.media;\n  }\n\n  get presentation() {\n    return this.dataset.presentation;\n  }\n}\n\nif (!customElements.get('media-gallery')) {\n  customElements.define('media-gallery', MediaGallery);\n}\n"
  },
  {
    "path": "assets/media.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents, MediaStartedPlayingEvent } from '@theme/events';\nimport { DialogCloseEvent } from '@theme/dialog';\n\n/**\n * A deferred media element\n * @typedef {Object} Refs\n * @property {HTMLElement} deferredMediaPlayButton - The button to show the deferred media content\n * @property {HTMLElement} toggleMediaButton - The button to toggle the media\n *\n * @extends {Component<Refs>}\n */\nclass DeferredMedia extends Component {\n  /** @type {boolean} */\n  isPlaying = false;\n\n  #abortController = new AbortController();\n\n  connectedCallback() {\n    super.connectedCallback();\n    const signal = this.#abortController.signal;\n    // If we're to use deferred media for images, we will need to run this only when it's not an image type media\n    document.addEventListener(ThemeEvents.mediaStartedPlaying, this.pauseMedia.bind(this), { signal });\n    window.addEventListener(DialogCloseEvent.eventName, this.pauseMedia.bind(this), { signal });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abortController.abort();\n  }\n\n  /**\n   * Updates the visual hint for play/pause state\n   * @param {boolean} isPlaying - Whether the video is currently playing\n   */\n  updatePlayPauseHint(isPlaying) {\n    const toggleMediaButton = this.refs.toggleMediaButton;\n    if (toggleMediaButton instanceof HTMLElement) {\n      toggleMediaButton.classList.remove('hidden');\n      const playIcon = toggleMediaButton.querySelector('.icon-play');\n      if (playIcon) playIcon.classList.toggle('hidden', isPlaying);\n      const pauseIcon = toggleMediaButton.querySelector('.icon-pause');\n      if (pauseIcon) pauseIcon.classList.toggle('hidden', !isPlaying);\n    }\n  }\n\n  /**\n   * Shows the deferred media content\n   */\n  showDeferredMedia = () => {\n    this.loadContent(true);\n    this.isPlaying = true;\n    this.updatePlayPauseHint(this.isPlaying);\n  };\n\n  /**\n   * Loads the content\n   * @param {boolean} [focus] - Whether to focus the content\n   */\n  loadContent(focus = true) {\n    if (this.getAttribute('data-media-loaded')) return;\n\n    this.dispatchEvent(new MediaStartedPlayingEvent(this));\n\n    const content = this.querySelector('template')?.content.firstElementChild?.cloneNode(true);\n\n    if (!content) return;\n\n    this.setAttribute('data-media-loaded', 'true');\n    this.appendChild(content);\n\n    if (focus && content instanceof HTMLElement) {\n      content.focus();\n    }\n\n    this.refs.deferredMediaPlayButton?.classList.add('deferred-media__playing');\n\n    if (content instanceof HTMLVideoElement && content.getAttribute('autoplay')) {\n      // force autoplay for safari\n      content.play();\n    }\n  }\n\n  /**\n   * Toggle play/pause state of the media\n   */\n  toggleMedia() {\n    if (this.isPlaying) {\n      this.pauseMedia();\n    } else {\n      this.playMedia();\n    }\n  }\n\n  playMedia() {\n    /** @type {HTMLIFrameElement | null} */\n    const iframe = this.querySelector('iframe[data-video-type]');\n    if (iframe) {\n      iframe.contentWindow?.postMessage(\n        iframe.dataset.videoType === 'youtube'\n          ? '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}'\n          : '{\"method\":\"play\"}',\n        '*'\n      );\n    } else {\n      this.querySelector('video')?.play();\n    }\n    this.isPlaying = true;\n    this.updatePlayPauseHint(this.isPlaying);\n  }\n\n  /**\n   * Pauses the media\n   */\n  pauseMedia() {\n    /** @type {HTMLIFrameElement | null} */\n    const iframe = this.querySelector('iframe[data-video-type]');\n\n    if (iframe) {\n      iframe.contentWindow?.postMessage(\n        iframe.dataset.videoType === 'youtube'\n          ? '{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}'\n          : '{\"method\":\"pause\"}',\n        '*'\n      );\n    } else {\n      this.querySelector('video')?.pause();\n    }\n    this.isPlaying = false;\n\n    // If we've already revealed the deferred media, we should toggle the play/pause hint\n    if (this.getAttribute('data-media-loaded')) {\n      this.updatePlayPauseHint(this.isPlaying);\n    }\n  }\n}\n\nif (!customElements.get('deferred-media')) {\n  customElements.define('deferred-media', DeferredMedia);\n}\n\n/**\n * A product model\n */\nclass ProductModel extends DeferredMedia {\n  #abortController = new AbortController();\n\n  loadContent() {\n    super.loadContent();\n\n    Shopify.loadFeatures([\n      {\n        name: 'model-viewer-ui',\n        version: '1.0',\n        onLoad: this.setupModelViewerUI.bind(this),\n      },\n    ]);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abortController.abort();\n  }\n\n  pauseMedia() {\n    super.pauseMedia();\n    this.modelViewerUI?.pause();\n  }\n\n  playMedia() {\n    super.playMedia();\n    this.modelViewerUI?.play();\n  }\n\n  /**\n   * @param {Error[]} errors\n   */\n  async setupModelViewerUI(errors) {\n    if (errors) return;\n\n    if (!Shopify.ModelViewerUI) {\n      await this.#waitForModelViewerUI();\n    }\n\n    if (!Shopify.ModelViewerUI) return;\n\n    const element = this.querySelector('model-viewer');\n    if (!element) return;\n\n    const signal = this.#abortController.signal;\n\n    this.modelViewerUI = new Shopify.ModelViewerUI(element);\n    if (!this.modelViewerUI) return;\n\n    this.playMedia();\n\n    // Track pointer events to detect taps\n    let pointerStartX = 0;\n    let pointerStartY = 0;\n\n    element.addEventListener(\n      'pointerdown',\n      (/** @type {PointerEvent} */ event) => {\n        pointerStartX = event.clientX;\n        pointerStartY = event.clientY;\n      },\n      { signal }\n    );\n\n    element.addEventListener(\n      'click',\n      (/** @type {PointerEvent} */ event) => {\n        const distanceX = Math.abs(event.clientX - pointerStartX);\n        const distanceY = Math.abs(event.clientY - pointerStartY);\n        const totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n\n        // Try to ensure that this is a tap, not a drag.\n        if (totalDistance < 10) {\n          // When the model is paused, it has its own button overlay for playing the model again.\n          // If we're receiving a click event, it means the model is playing, all we can do is pause it.\n          this.pauseMedia();\n        }\n      },\n      { signal }\n    );\n  }\n\n  /**\n   * Waits for Shopify.ModelViewerUI to be defined.\n   * This seems to be necessary for Safari since Shopify.ModelViewerUI is always undefined on the first try.\n   * @returns {Promise<void>}\n   */\n  async #waitForModelViewerUI() {\n    const maxAttempts = 10;\n    const interval = 50;\n\n    for (let i = 0; i < maxAttempts; i++) {\n      if (Shopify.ModelViewerUI) {\n        return;\n      }\n      await new Promise((resolve) => setTimeout(resolve, interval));\n    }\n  }\n}\n\nif (!customElements.get('product-model')) {\n  customElements.define('product-model', ProductModel);\n}\n"
  },
  {
    "path": "assets/money-formatting.js",
    "content": "/**\n * Money formatting utilities to replicate Shopify's `money` liquid filter client-side.\n * Using server-side output for money formatting is preferred, like fetching HTML responses from the Section Rendering API.\n * These utilities are intended for cases where UI needs to be updated in real-time, like a price filter state change while the user is typing.\n * @module money-formatting\n */\n\n/**\n * Default currency decimals used in most currencies\n * @constant {number}\n */\nconst DEFAULT_CURRENCY_DECIMALS = 2;\n\n/**\n * Decimal precision for currencies that have a non-default precision\n * @type {Record<string, number>}\n */\nconst CURRENCY_DECIMALS = {\n  BHD: 3,\n  BIF: 0,\n  BYR: 0,\n  CLF: 4,\n  CLP: 0,\n  DJF: 0,\n  GNF: 0,\n  IQD: 3,\n  ISK: 0,\n  JOD: 3,\n  JPY: 0,\n  KMF: 0,\n  KRW: 0,\n  KWD: 3,\n  LYD: 3,\n  MRO: 5,\n  OMR: 3,\n  PYG: 0,\n  RWF: 0,\n  TND: 3,\n  UGX: 0,\n  UYI: 0,\n  UYW: 4,\n  VND: 0,\n  VUV: 0,\n  XAF: 0,\n  XAG: 0,\n  XAU: 0,\n  XBA: 0,\n  XBB: 0,\n  XBC: 0,\n  XBD: 0,\n  XDR: 0,\n  XOF: 0,\n  XPD: 0,\n  XPF: 0,\n  XPT: 0,\n  XSU: 0,\n  XTS: 0,\n  XUA: 0,\n};\n\n/**\n * Parses a money string into minor units (the smallest denomination of a currency).\n * Does not assume the money string is formatted in a specific way, aims to be resilient to user input.\n * Example: convertMoneyToMinorUnits(\"1.000,50\", \"EUR\") → 100050\n * Example: convertMoneyToMinorUnits(\"1 000.50\", \"EUR\") → 100050\n * Minor units are cents for USD/EUR (100 cents = $1), yen for JPY (no subdivision),\n * or fils for KWD (1000 fils = 1 dinar). This allows precise integer arithmetic.\n * Handles multiple formats: US (1,000.50), European (1.000,50), and multi-separator (2,000,000.50).\n * @param {string} value - The string value to parse\n * @param {string} currency - The currency code\n * @returns {number|null} The value in minor units, or null if parsing failed\n */\nexport function convertMoneyToMinorUnits(value, currency) {\n  const precision = CURRENCY_DECIMALS[currency.toUpperCase()] ?? DEFAULT_CURRENCY_DECIMALS;\n  const multiplier = Math.pow(10, precision);\n\n  if (!value || !value.trim()) {\n    return null;\n  }\n\n  // Split on non-digit characters to handle both . and , as decimal separators\n  const parts = value\n    .trim()\n    .split(/[^0-9]/)\n    .filter(Boolean);\n\n  if (parts.length === 0) return null;\n\n  // Determine if the last segment is a decimal portion:\n  // - For currencies with decimals (precision > 0), if last segment has digits <= precision, it's likely a decimal\n  // - For zero-decimal currencies (JPY), or if last segment has more digits than precision, it's a thousands separator\n  // Examples: \"2,000,000.50\" USD → [\"2\",\"000\",\"000\",\"50\"] → last \"50\" (2 ≤ 2) = decimal\n  //           \"2,000,000\" USD → [\"2\",\"000\",\"000\"] → last \"000\" (3 > 2) = thousands\n  //           \"9,500\" KWD (3 dec) → [\"9\",\"500\"] → last \"500\" (3 ≤ 3) = decimal\n  const lastPart = parts[parts.length - 1] ?? '';\n  const lastPartIsDecimal = precision > 0 && parts.length > 1 && lastPart.length <= precision;\n\n  let wholeStr, fractionStr;\n\n  if (lastPartIsDecimal) {\n    // Last part is decimal, everything else is the whole number\n    fractionStr = lastPart;\n    wholeStr = parts.slice(0, -1).join('');\n  } else {\n    // All parts are the whole number (no decimal portion)\n    wholeStr = parts.join('');\n    fractionStr = '';\n  }\n\n  const whole = parseInt(wholeStr, 10);\n  if (isNaN(whole)) return null;\n\n  let fraction = 0;\n\n  if (precision > 0 && fractionStr) {\n    const fractionStrLength = fractionStr.length;\n    fraction = parseInt(fractionStr, 10) || 0;\n    fraction = fraction * Math.pow(10, precision - fractionStrLength);\n  }\n\n  return whole * multiplier + fraction;\n}\n\n/**\n * Formats money in minor units\n * @param {number} moneyValue - The money value in minor units\n * @param {string} thousandsSeparator - The thousands separator\n * @param {string} decimalSeparator - The decimal separator\n * @param {number} precision - The display precision\n * @param {number} divisor - The divisor to convert minor units to major units\n * @returns {string} The formatted money value\n */\nfunction formatCents(moneyValue, thousandsSeparator, decimalSeparator, precision, divisor) {\n  const roundedNumber = (moneyValue / divisor).toFixed(precision);\n\n  let [a, b] = roundedNumber.split('.');\n  if (!a) a = '0';\n  if (!b) b = '';\n\n  // Split by groups of 3 digits\n  a = a.replace(/\\d(?=(\\d\\d\\d)+(?!\\d))/g, (digit) => digit + thousandsSeparator);\n\n  return precision <= 0 ? a : a + decimalSeparator + b.padEnd(precision, '0');\n}\n\n/**\n * Formats money, replicating the implementation of the `money` liquid filters\n * @param {number} moneyValue - The money value in minor units\n * @param {string} format - The Shopify's money format template (e.g., '{{amount}}', '${{amount}}')\n * @param {string} currency - The currency code (e.g., 'USD', 'JPY')\n * @returns {string} The formatted money value\n */\nexport function formatMoney(moneyValue, format, currency) {\n  // Calculate divisor based on currency's native precision\n  const currencyPrecision = CURRENCY_DECIMALS[currency.toUpperCase()] ?? DEFAULT_CURRENCY_DECIMALS;\n  const divisor = Math.pow(10, currencyPrecision);\n\n  return format.replace(/{{\\s*(\\w+)\\s*}}/g, (_, placeholder) => {\n    if (typeof placeholder !== 'string') return '';\n    if (placeholder === 'currency') return currency;\n\n    let thousandsSeparator = ',';\n    let decimalSeparator = '.';\n    let precision = currencyPrecision;\n\n    switch (placeholder) {\n      case 'amount':\n      // Check first since it's the most common, use defaults.\n        break;\n      case 'amount_no_decimals':\n        precision = 0;\n        break;\n      case 'amount_with_comma_separator':\n      thousandsSeparator = '.';\n      decimalSeparator = ',';\n      break;\n      case 'amount_no_decimals_with_comma_separator':\n      // Weirdly, this is correct. It uses amount_with_comma_separator's\n      // behaviour but removes decimals, resulting in an unintuitive\n      // output that can't possibly include commas, despite the name.\n      thousandsSeparator = '.';\n      precision = 0;\n      break;\n    case 'amount_no_decimals_with_space_separator':\n      thousandsSeparator = ' ';\n      precision = 0;\n      break;\n    case 'amount_with_space_separator':\n      thousandsSeparator = ' ';\n      decimalSeparator = ',';\n      break;\n    case 'amount_with_period_and_space_separator':\n      thousandsSeparator = ' ';\n      decimalSeparator = '.';\n      break;\n    case 'amount_with_apostrophe_separator':\n      thousandsSeparator = \"'\";\n      decimalSeparator = '.';\n      break;\n    default:\n      break;\n    }\n\n    return formatCents(moneyValue, thousandsSeparator, decimalSeparator, precision, divisor);\n  });\n}\n"
  },
  {
    "path": "assets/morph.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [childrenOnly] - Only update children\n * @property {(node: Node | undefined) => string|number|undefined} [getNodeKey] - Get node key for matching\n * @property {(oldNode: Node, newNode: Node) => void} [onBeforeUpdate] - Pre-update hook\n * @property {(node: Node) => void} [onAfterUpdate] - Post-update hook\n * @property {(oldNode: Node, newNode: Node) => boolean} [reject] - Reject a node from being morphed\n * @property {boolean} [hydrationMode] - If true, only morph subtrees whose elements have `data-hydration-key=\"<non-empty>\"`, matched by that value\n */\n\nconst HYDRATION_KEY_ATTRIBUTE = 'data-hydration-key';\n\n/**\n * The options for the morph\n * @type {Options}\n */\nexport const MORPH_OPTIONS = {\n  childrenOnly: true,\n  hydrationMode: false,\n  reject(oldNode, newNode) {\n    if (newNode.nodeType === Node.TEXT_NODE && newNode.nodeValue?.trim() === '') {\n      return true;\n    }\n\n    if (\n      newNode instanceof HTMLTemplateElement &&\n      newNode.shadowRootMode === 'open' &&\n      oldNode.parentElement &&\n      newNode.parentElement &&\n      oldNode.parentElement.tagName === newNode.parentElement.tagName &&\n      oldNode.parentElement?.shadowRoot != null\n    ) {\n      // Ignore template elements of components that are already initialized\n      return true;\n    }\n\n    if (newNode.nodeType === Node.COMMENT_NODE && newNode.nodeValue === 'shopify:rendered_by_section_api') {\n      // Remove a comment node injected by the Section Rendering API in the Theme Editor\n      return true;\n    }\n\n    return false;\n  },\n  onBeforeUpdate(oldNode, newNode) {\n    if (oldNode instanceof Element && newNode instanceof Element) {\n      const attributes = ['product-grid-view', 'data-current-checked', 'data-previous-checked', 'cart-summary-sticky'];\n\n      for (const attribute of attributes) {\n        const oldValue = oldNode.getAttribute(attribute);\n        const newValue = newNode.getAttribute(attribute);\n\n        if (oldValue && oldValue !== newValue) {\n          newNode.setAttribute(attribute, oldValue);\n        }\n      }\n\n      // Special case for elements that need to keep their style\n      const elements = ['floating-panel-component', 'fieldset.variant-option'];\n      const ids = ['account-popover'];\n\n      for (const element of elements) {\n        if (oldNode.matches(element) && newNode.matches(element)) {\n          const oldStyle = oldNode.getAttribute('style');\n          if (oldStyle) newNode.setAttribute('style', oldStyle);\n        }\n      }\n      for (const id of ids) {\n        if (oldNode.id === id && newNode.id === id) {\n          const oldStyle = oldNode.getAttribute('style');\n          if (oldStyle) newNode.setAttribute('style', oldStyle);\n        }\n      }\n\n      // Preserve temporary view transition name\n      if (oldNode instanceof HTMLElement && newNode instanceof HTMLElement && oldNode.style.viewTransitionName) {\n        newNode.style.viewTransitionName = oldNode.style.viewTransitionName;\n      }\n    }\n  },\n  onAfterUpdate(node) {\n    if (node instanceof Component) {\n      queueMicrotask(() => node.updatedCallback());\n    }\n  },\n};\n\n/**\n * Morphs one DOM tree into another by comparing nodes and applying minimal changes\n * @param {Node} oldTree - The existing DOM tree\n * @param {Node | string} newTree - The new DOM tree to morph to\n * @param {Options} [options] - Configuration options\n * @returns {Node} The morphed DOM tree\n */\nexport function morph(oldTree, newTree, options = MORPH_OPTIONS) {\n  if (!oldTree || !newTree) {\n    throw new Error('Both oldTree and newTree must be provided');\n  }\n\n  if (typeof newTree === 'string') {\n    const parsedNewTree = new DOMParser().parseFromString(newTree, 'text/html').body.firstChild;\n    if (!parsedNewTree) {\n      throw new Error('newTree string is not valid HTML');\n    }\n    newTree = parsedNewTree;\n  }\n\n  if (options.hydrationMode && oldTree instanceof Element && newTree instanceof Element) {\n    morphHydrationByKey(oldTree, newTree, options);\n    return oldTree;\n  }\n\n  if (options.childrenOnly) {\n    updateChildren(newTree, oldTree, options);\n    return oldTree;\n  }\n\n  if (newTree.nodeType === 11) {\n    throw new Error('newTree should have one root node (not a DocumentFragment)');\n  }\n\n  return walk(newTree, oldTree, options);\n}\n\n/**\n * Collect targets under a root element that have a non-empty key for the attribute.\n * Includes the root itself if it matches.\n *\n * @param {Element} root\n * @returns {Element[]}\n */\nfunction collectHydrationTargets(root) {\n  const targets = [];\n  if (root.hasAttribute(HYDRATION_KEY_ATTRIBUTE)) targets.push(root);\n  targets.push(...root.querySelectorAll(`[${HYDRATION_KEY_ATTRIBUTE}]`));\n  return targets;\n}\n\n/**\n * Morph only keyed targets from `newRoot` into `oldRoot` (a.k.a. \"keyed lazy hydration\").\n *\n * Philosophy:\n * - This updates the *contents* of pre-existing targets. We intentionally do NOT insert new targets (or remove missing ones).\n * - By requiring targets to already exist in `oldRoot`, we preserve runtime state that may already\n *   be attached to the existing DOM (custom elements, listeners, focus, transient UI state) and preserve the layout and UI behavior.\n * - Intended use-case: avoid expensive server-side rendering operations in the initial render, and hydrate targeted sections after page load. e.g. Querying all product and collection drops in off-screen menus.\n *\n * Contract:\n * - An element is eligible only if it has `data-hydration-key=\"<non-empty>\"`.\n * - Matching uses ONLY that key value (no fallbacks) to avoid accidental cross-updates.\n * - Once a target is matched, we run a normal morph *within that target* (attributes + children).\n *\n * @param {Element} oldRoot\n * @param {Element} newRoot\n * @param {Options} options\n */\nfunction morphHydrationByKey(oldRoot, newRoot, options) {\n  const oldTargets = collectHydrationTargets(oldRoot);\n  const newTargets = collectHydrationTargets(newRoot);\n\n  /** @type {Map<string, Element[]>} */\n  const oldTargetsByKey = new Map();\n\n  for (const oldTarget of oldTargets) {\n    const key = oldTarget.getAttribute(HYDRATION_KEY_ATTRIBUTE);\n    if (key == null || key === '') continue;\n\n    const existing = oldTargetsByKey.get(key) ?? [];\n    existing.push(oldTarget);\n    oldTargetsByKey.set(key, existing);\n  }\n\n  for (const newTarget of newTargets) {\n    const key = newTarget.getAttribute(HYDRATION_KEY_ATTRIBUTE);\n    if (key == null || key === '') continue;\n\n    const matches = oldTargetsByKey.get(key);\n    const oldTarget = matches?.shift();\n    if (!oldTarget) continue;\n\n    // For keyed targets we want attribute updates as well, regardless of the caller's childrenOnly default.\n    morph(oldTarget, newTarget, {\n      ...options,\n      hydrationMode: false,\n      childrenOnly: false,\n    });\n  }\n}\n\n/**\n * Walk and morph a dom tree\n * @param {Node} newNode - The new node to morph to\n * @param {Node} oldNode - The old node to morph from\n * @param {Options} options - The options object\n * @returns {Node} The new node or the morphed old node\n */\nfunction walk(newNode, oldNode, options) {\n  // Skip morphing if there is no old or new node\n  if (!oldNode) return newNode;\n  if (!newNode) return oldNode;\n\n  // Skip morphing if nodes are identical\n  if (newNode.isSameNode?.(oldNode)) return oldNode;\n\n  // Check node type and tag name first\n  if (newNode.nodeType !== oldNode.nodeType) return newNode;\n  if (newNode instanceof Element && oldNode instanceof Element) {\n    // Skip morphing if the node is shopify-accelerated-checkout-cart https://shopify.dev/docs/storefronts/themes/pricing-payments/accelerated-checkout#implement-accelerated-checkout-buttons-on-cart\n    if (oldNode.tagName === 'SHOPIFY-ACCELERATED-CHECKOUT-CART') return oldNode;\n\n    if (newNode.tagName !== oldNode.tagName) return newNode;\n\n    // Only check keys for elements, and only if both nodes have keys\n    const newKey = getNodeKey(newNode, options);\n    const oldKey = getNodeKey(oldNode, options);\n    if (newKey && oldKey && newKey !== oldKey) return newNode;\n  }\n\n  // We can morph, update the node and its children\n  if (\n    oldNode instanceof Element &&\n    oldNode.hasAttribute('data-skip-node-update') &&\n    newNode instanceof Element &&\n    newNode.hasAttribute('data-skip-node-update')\n  ) {\n    // This is a special case where we don't want to morph the node, but we want to morph the children\n    updateChildren(newNode, oldNode, options);\n  } else {\n    updateNode(newNode, oldNode, options);\n    updateChildren(newNode, oldNode, options);\n  }\n\n  options.onAfterUpdate?.(newNode);\n\n  return oldNode;\n}\n\n/**\n * Core morphing function that updates attributes and special elements\n * @param {Node} newNode - Source node with desired state\n * @param {Node} oldNode - Target node to update\n * @param {Options} options - The options object\n */\nfunction updateNode(newNode, oldNode, options) {\n  options.onBeforeUpdate?.(oldNode, newNode);\n\n  if (\n    (newNode instanceof HTMLDetailsElement && oldNode instanceof HTMLDetailsElement) ||\n    (newNode instanceof HTMLDialogElement && oldNode instanceof HTMLDialogElement)\n  ) {\n    if (!newNode.hasAttribute('declarative-open')) {\n      newNode.open = oldNode.open;\n    }\n  }\n\n  if (oldNode instanceof HTMLElement && newNode instanceof HTMLElement) {\n    for (const attr of ['slot', 'sizes']) {\n      const oldValue = oldNode.getAttribute(attr);\n      const newValue = newNode.getAttribute(attr);\n\n      if (oldValue !== newValue) {\n        oldValue == null ? newNode.removeAttribute(attr) : newNode.setAttribute(attr, oldValue);\n      }\n    }\n  }\n\n  if (newNode instanceof Element && oldNode instanceof Element) {\n    if (!oldNode.isEqualNode(newNode)) {\n      copyAttributes(newNode, oldNode);\n    }\n  } else if (newNode instanceof Text || newNode instanceof Comment) {\n    if (oldNode.nodeValue !== newNode.nodeValue) {\n      oldNode.nodeValue = newNode.nodeValue;\n    }\n  }\n\n  // Handle special elements\n  if (newNode instanceof HTMLInputElement && oldNode instanceof HTMLInputElement) {\n    updateInput(newNode, oldNode);\n  } else if (newNode instanceof HTMLOptionElement && oldNode instanceof HTMLOptionElement) {\n    updateAttribute(newNode, oldNode, 'selected');\n  } else if (newNode instanceof HTMLTextAreaElement && oldNode instanceof HTMLTextAreaElement) {\n    updateTextarea(newNode, oldNode);\n  }\n}\n\n/**\n * Gets a node's key using the getNodeKey option if provided\n * @param {Node | undefined} node - The node to get the key from\n * @param {Options} [options] - The options object that may contain getNodeKey\n * @returns {string|number|undefined} The node's key if one exists\n */\nfunction getNodeKey(node, options) {\n  return options?.getNodeKey?.(node) ?? (node instanceof Element ? node.id : undefined);\n}\n\n/**\n * Updates a boolean attribute and its corresponding property on an element\n * @param {any} newNode - The new element\n * @param {any} oldNode - The existing element to update\n * @param {string} name - The name of the attribute/property to update\n */\nfunction updateAttribute(newNode, oldNode, name) {\n  if (newNode[name] !== oldNode[name]) {\n    oldNode[name] = newNode[name];\n    if (newNode[name] != null) {\n      oldNode.setAttribute(name, '');\n    } else {\n      oldNode.removeAttribute(name);\n    }\n  }\n}\n\n/**\n * Copies attributes from a new node to an old node, handling namespaced attributes\n * @param {Element} newNode - The new node to copy attributes from\n * @param {Element} oldNode - The existing node to update attributes on\n */\nfunction copyAttributes(newNode, oldNode) {\n  const oldAttrs = oldNode.attributes;\n  const newAttrs = newNode.attributes;\n\n  // Update or add new attributes\n  for (const attr of Array.from(newAttrs)) {\n    const { name: attrName, namespaceURI: attrNamespaceURI, value: attrValue } = attr;\n    const localName = attr.localName || attrName;\n\n    if (attrName === 'src' || attrName === 'href' || attrName === 'srcset' || attrName === 'poster') {\n      // Skip updating resource attributes when the value hasn't changed\n      // to prevent unnecessary network requests\n      if (oldNode.getAttribute(attrName) === attrValue) continue;\n    }\n\n    if (attrNamespaceURI) {\n      const fromValue = oldNode.getAttributeNS(attrNamespaceURI, localName);\n      if (fromValue !== attrValue) {\n        oldNode.setAttributeNS(attrNamespaceURI, localName, attrValue);\n      }\n    } else {\n      if (!oldNode.hasAttribute(attrName)) {\n        oldNode.setAttribute(attrName, attrValue);\n      } else {\n        const fromValue = oldNode.getAttribute(attrName);\n        if (fromValue !== attrValue) {\n          if (attrValue === 'null' || attrValue === 'undefined') {\n            oldNode.removeAttribute(attrName);\n          } else {\n            oldNode.setAttribute(attrName, attrValue);\n          }\n        }\n      }\n    }\n  }\n\n  // Remove old attributes not present in new node\n  for (const attr of Array.from(oldAttrs)) {\n    if (attr.specified === false) continue;\n\n    const { name: attrName, namespaceURI: attrNamespaceURI } = attr;\n    const localName = attr.localName || attrName;\n\n    if (attrNamespaceURI) {\n      if (!newNode.hasAttributeNS(attrNamespaceURI, localName)) {\n        oldNode.removeAttributeNS(attrNamespaceURI, localName);\n      }\n    } else if (!newNode.hasAttribute(attrName)) {\n      oldNode.removeAttribute(attrName);\n    }\n  }\n}\n\n/**\n * Updates special properties and attributes on input elements\n * Handles checked, disabled, indeterminate states and value\n * @param {HTMLInputElement} newNode - The new input element\n * @param {HTMLInputElement} oldNode - The existing input element to update\n */\nfunction updateInput(newNode, oldNode) {\n  const newValue = newNode.value;\n\n  updateAttribute(newNode, oldNode, 'checked');\n  updateAttribute(newNode, oldNode, 'disabled');\n\n  // Handle indeterminate state (cannot be set via HTML attribute)\n  if (newNode.indeterminate !== oldNode.indeterminate) {\n    oldNode.indeterminate = newNode.indeterminate;\n  }\n\n  // Skip file inputs since they can't be changed programmatically\n  if (oldNode.type === 'file') return;\n\n  if (newValue !== oldNode.value) {\n    oldNode.setAttribute('value', newValue);\n    oldNode.value = newValue;\n  }\n\n  if (newValue === 'null') {\n    oldNode.value = '';\n    oldNode.removeAttribute('value');\n  }\n\n  if (!newNode.hasAttributeNS(null, 'value')) {\n    oldNode.removeAttribute('value');\n  } else if (oldNode.type === 'range') {\n    // Update range input UI\n    oldNode.value = newValue;\n  }\n}\n\n/**\n * Updates the value of a textarea element\n * @param {HTMLTextAreaElement} newNode - The new textarea element\n * @param {HTMLTextAreaElement} oldNode - The existing textarea element to update\n */\nfunction updateTextarea(newNode, oldNode) {\n  const newValue = newNode.value;\n  if (newValue !== oldNode.value) {\n    oldNode.value = newValue;\n  }\n\n  const firstChild = oldNode.firstChild;\n  if (firstChild?.nodeType === Node.TEXT_NODE) {\n    if (newValue === '' && firstChild.nodeValue === oldNode.placeholder) {\n      return;\n    }\n    firstChild.nodeValue = newValue;\n  }\n}\n\n/**\n * If app scripts store references to the DOM on initialization, they will be invalidated by the morph because browsers don't re-execute them.\n * This function removes and recreates them to force re-execution.\n * @param {Element} container - The container element to search for app block scripts\n */\nfunction recreateAppBlockScripts(container) {\n  const scripts = container.querySelectorAll('.shopify-app-block script[src]');\n\n  for (const script of scripts) {\n    if (!(script instanceof HTMLScriptElement)) continue;\n\n    const parent = script.parentElement;\n    if (!parent) continue;\n\n    const newScript = document.createElement('script');\n    for (const attr of Array.from(script.attributes)) {\n      newScript.setAttribute(attr.name, attr.value);\n    }\n    if (script.textContent) {\n      newScript.textContent = script.textContent;\n    }\n\n    script.remove();\n    parent.appendChild(newScript);\n  }\n}\n\n/**\n * Update the children of elements\n * @param {Node} newNode - The new node to update children on\n * @param {Node} oldNode - The existing node to update children on\n * @param {Options} options - The options object\n */\nfunction updateChildren(newNode, oldNode, options) {\n  if (\n    oldNode instanceof Element &&\n    oldNode.hasAttribute('data-skip-subtree-update') &&\n    newNode instanceof Element &&\n    newNode.hasAttribute('data-skip-subtree-update')\n  ) {\n    return;\n  }\n\n  let oldChild, newChild, morphed, oldMatch;\n  let offset = 0;\n\n  for (let i = 0; ; i++) {\n    oldChild = oldNode.childNodes[i];\n    newChild = newNode.childNodes[i - offset];\n\n    // Both nodes are empty, do nothing\n    if (!oldChild && !newChild) {\n      break;\n    }\n\n    // There is no new child, remove old\n    if (!newChild) {\n      oldChild && oldNode.removeChild(oldChild);\n      i--;\n      continue;\n    }\n\n    // There is no old child, add new\n    if (!oldChild) {\n      oldNode.appendChild(newChild);\n      offset++;\n      continue;\n    }\n\n    // Both nodes are the same, morph\n    if (same(newChild, oldChild, options)) {\n      morphed = walk(newChild, oldChild, options);\n      if (morphed !== oldChild) {\n        oldNode.replaceChild(morphed, oldChild);\n        offset++;\n      }\n      continue;\n    }\n\n    if (options.reject?.(oldChild, newChild)) {\n      newNode.removeChild(newChild);\n      i--;\n      continue;\n    }\n\n    // Try to find a matching node to reorder\n    oldMatch = null;\n    for (let j = i; j < oldNode.childNodes.length; j++) {\n      const potentialOldNode = oldNode.childNodes[j];\n\n      if (potentialOldNode && same(potentialOldNode, newChild, options)) {\n        oldMatch = potentialOldNode;\n        break;\n      }\n    }\n\n    if (oldMatch) {\n      morphed = walk(newChild, oldMatch, options);\n      if (morphed !== oldMatch) offset++;\n      oldNode.insertBefore(morphed, oldChild);\n    } else if (!getNodeKey(newChild, options) && !getNodeKey(oldChild, options)) {\n      morphed = walk(newChild, oldChild, options);\n      if (morphed !== oldChild) {\n        oldNode.replaceChild(morphed, oldChild);\n        offset++;\n      }\n    } else {\n      oldNode.insertBefore(newChild, oldChild);\n      offset++;\n    }\n  }\n\n  // Recreate app block scripts to bypass browser script deduplication\n  if (oldNode instanceof Element) {\n    recreateAppBlockScripts(oldNode);\n  }\n}\n\n/**\n * Check if two nodes are the same\n * @param {Node} a - The first node\n * @param {Node} b - The second node\n * @param {Options} options - The options object\n * @returns {boolean} True if the nodes are the same, false otherwise\n */\nfunction same(a, b, options) {\n  // If node types don't match, they're not the same\n  if (a.nodeType !== b.nodeType) return false;\n\n  // For elements, check tag name first\n  if (a.nodeType === Node.ELEMENT_NODE) {\n    if (a instanceof Element && b instanceof Element && a.tagName !== b.tagName) return false;\n\n    // Only compare keys if both nodes have them\n    const aKey = getNodeKey(a, options);\n    const bKey = getNodeKey(b, options);\n    if (aKey && bKey && aKey !== bKey) return false;\n  }\n\n  // For text/comment nodes, compare content\n  if (a.nodeType === Node.TEXT_NODE && b.nodeType === Node.TEXT_NODE)\n    // Trim whitespace to avoid false negatives\n    return a.nodeValue?.trim() === b.nodeValue?.trim();\n  if (a.nodeType === Node.COMMENT_NODE && b.nodeType === Node.COMMENT_NODE) return a.nodeValue === b.nodeValue;\n\n  // If we get here and nodes are elements with same tag (and compatible keys), they're the same\n  return true;\n}\n"
  },
  {
    "path": "assets/overflow-list.css",
    "content": "[part='list'] {\n  display: flex;\n  flex-wrap: nowrap;\n  align-items: center;\n  justify-content: var(--overflow-list-alignment);\n  column-gap: 1rem;\n  padding-block: var(--overflow-list-padding-block, 0);\n  padding-inline: var(--overflow-list-padding-inline, 0);\n  height: 100%;\n\n  @media screen and (max-width: 749px) {\n    justify-content: var(--overflow-list-alignment-mobile);\n  }\n\n  overflow-x: auto;\n  overflow-y: hidden;\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n}\n\n[part='list'],\n[part='overflow-list'],\n[part='placeholder'] {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n/* Make sure the \"more\" slot can be measured */\nslot[name='more']:not([hidden]) {\n  display: flex;\n  height: 100%;\n  align-items: center;\n}\n\nslot[name='more'] .button {\n  cursor: pointer;\n  border: none;\n  background: none;\n  padding: 0;\n  margin: 0;\n  font-family: var(--font-paragraph-family);\n  font-size: var(--font-paragraph-size);\n  text-transform: var(--text-transform);\n  color: currentcolor;\n  text-align: start;\n}\n\n[part='overflow'] {\n  display: none;\n}\n\n[part='placeholder'] {\n  visibility: hidden;\n  width: 0;\n  height: 0;\n}\n\n:host([disabled]) {\n  slot[name='more'] {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "assets/overflow-list.js",
    "content": "import { ResizeNotifier } from '@theme/utilities';\nimport { DeclarativeShadowElement } from '@theme/component';\n\n/**\n * Event class for overflow minimum items updates\n * @extends {Event}\n */\nexport class OverflowMinimumEvent extends Event {\n  /**\n   * Creates a new OverflowMinimumEvent\n   * @param {boolean} minimumReached - Whether the minimum number of visible items has been reached\n   */\n  constructor(minimumReached) {\n    super('overflowMinimum', { bubbles: true });\n    this.detail = {\n      minimumReached,\n    };\n  }\n}\n\n/**\n * A custom element that wraps a list of items and moves them to an overflow slot when they don't fit.\n * This component is used in the header section and other areas.\n * @attr {string | null} minimum-items When set, the element enters a 'minimum-reached' state when visible items are at or below this number.\n * @example\n * <overflow-list minimum-items=\"2\">\n *   <!-- list items -->\n * </overflow-list>\n */\nexport class OverflowList extends DeclarativeShadowElement {\n  static get observedAttributes() {\n    return ['disabled', 'minimum-items'];\n  }\n\n  /**\n   * @param {string} name\n   * @param {string} oldValue\n   * @param {string} newValue\n   */\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === 'disabled') {\n      if (newValue === 'true') {\n        this.#reset();\n      } else {\n        this.#reflowItems();\n      }\n    }\n  }\n\n  async connectedCallback() {\n    super.connectedCallback();\n\n    // Styles for dynamically injected <overflow-list> elements are async.\n    // We need to wait for them to be loaded before initializing the element to properly calculate the overflow.\n    await this.#waitForStyles();\n\n    this.#initialize();\n  }\n\n  #waitForStyles() {\n    /** @type {HTMLLinkElement | null | undefined} */\n    const styles = this.shadowRoot?.querySelector('link[rel=\"stylesheet\"]');\n\n    // No styles or styles are already loaded.\n    if (!styles || styles.sheet) {\n      return Promise.resolve();\n    }\n\n    return new Promise((resolve) => {\n      styles.addEventListener('load', resolve);\n    });\n  }\n\n  /**\n   * Initialize the element\n   */\n  #initialize() {\n    const { shadowRoot } = this;\n\n    if (!shadowRoot) throw new Error('Missing shadow root');\n\n    const defaultSlot = shadowRoot.querySelector('slot:not([name])');\n    const overflowSlot = shadowRoot.querySelector('slot[name=\"overflow\"]');\n    const moreSlot = shadowRoot.querySelector('slot[name=\"more\"]');\n    const overflow = shadowRoot.querySelector('[part=\"overflow\"]');\n    const list = shadowRoot.querySelector('[part=\"list\"]');\n    const placeholder = shadowRoot.querySelector('[part=\"placeholder\"]');\n\n    if (\n      !(defaultSlot instanceof HTMLSlotElement) ||\n      !(overflowSlot instanceof HTMLSlotElement) ||\n      !(moreSlot instanceof HTMLSlotElement) ||\n      !(overflow instanceof HTMLElement) ||\n      !(list instanceof HTMLUListElement) ||\n      !(placeholder instanceof HTMLLIElement)\n    ) {\n      throw new Error('Invalid element types in <OverflowList />');\n    }\n\n    this.#refs = {\n      defaultSlot,\n      overflowSlot,\n      moreSlot,\n      overflow,\n      list,\n      placeholder,\n    };\n\n    // Add event listener for reflow requests\n    this.addEventListener(\n      'reflow',\n      /** @param {CustomEvent<{lastVisibleElement?: HTMLElement}>} event */ (event) => {\n        this.#reflowItems(0, event.detail.lastVisibleElement);\n      }\n    );\n\n    // When <overflow-list> is dynamically injected, the browser doesn't remove its <template> automatically.\n    // In theory, we could get rid of it now, or in DeclarativeShadowElement, but that would invalidate the layout.\n    // Instead, we ignore it for now and remove it later on the first reflow.\n    const elements = defaultSlot.assignedElements().filter((element) => !(element instanceof HTMLTemplateElement));\n    const firstElement = elements[0];\n    const lastElement = elements[elements.length - 1];\n\n    // Observe the first and last elements to trigger a reflow when they are visible.\n    // That way we can get their height from the IntersectionObserver for free (without reflows).\n    if (firstElement) {\n      this.#intersectionObserver.observe(firstElement);\n    }\n    if (lastElement && lastElement !== firstElement) {\n      this.#intersectionObserver.observe(lastElement);\n    }\n  }\n\n  disconnectedCallback() {\n    this.#resizeObserver.disconnect();\n    this.#mutationObserver.disconnect();\n    this.#intersectionObserver.disconnect();\n  }\n\n  get schedule() {\n    return typeof Theme?.utilities?.scheduler?.schedule === 'function'\n      ? Theme.utilities.scheduler.schedule\n      : /** @param {FrameRequestCallback} callback */ (callback) =>\n          requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  #scheduled = false;\n\n  /**\n   * Get the minimum number of items before changing the minimum-reached state\n   * @returns {number | null}\n   */\n  get minimumItems() {\n    const value = this.getAttribute('minimum-items');\n    return value ? parseInt(value, 10) : null;\n  }\n\n  get overflowSlot() {\n    const { overflowSlot } = this.#refs;\n    return overflowSlot;\n  }\n\n  get defaultSlot() {\n    const { defaultSlot } = this.#refs;\n    return defaultSlot;\n  }\n\n  /**\n   * @param {IntersectionObserverEntry[]} entries\n   */\n  #handleIntersection = (entries) => {\n    const entry = entries[0];\n    if (entry?.isIntersecting) {\n      this.#intersectionObserver.disconnect();\n      setTimeout(() => {\n        // Remove the leftover <template> for dynamically injected <overflow-list> elements.\n        this.querySelector(':scope > template[shadowrootmode=\"open\"]')?.remove();\n        this.#reflowItems(entry.boundingClientRect.height);\n      }, 0);\n    }\n  };\n\n  /**\n   * @type {ResizeObserverCallback & MutationCallback}\n   */\n  #handleChange = () => {\n    if (this.#scheduled) return;\n\n    this.#scheduled = true;\n\n    requestAnimationFrame(() =>\n      setTimeout(() => {\n        this.#reflowItems();\n        this.#scheduled = false;\n      }, 0)\n    );\n  };\n\n  /**\n   * Move all items to the default slot.\n   */\n  #moveItemsToDefaultSlot() {\n    const { defaultSlot, overflowSlot } = this.#refs;\n\n    for (const element of overflowSlot.assignedElements()) {\n      if (element.slot !== defaultSlot.name) {\n        element.slot = defaultSlot.name;\n      }\n    }\n  }\n\n  /**\n   * Reset the list to its initial state and disconnect the observers.\n   */\n  #reset() {\n    const { list } = this.#refs;\n\n    this.#unobserveChanges();\n    this.#moveItemsToDefaultSlot();\n\n    list.style.removeProperty('height');\n    this.style.setProperty('--overflow-count', '0');\n  }\n\n  /**\n   * Sets the minimum-reached attribute and dispatches a custom event based on visible elements count\n   * @param {Element[]} visibleElements - The currently visible elements\n   */\n  #updateMinimumReached(visibleElements) {\n    if (this.minimumItems !== null) {\n      const minimumReached = visibleElements.length < this.minimumItems;\n\n      if (minimumReached) {\n        this.setAttribute('minimum-reached', '');\n      } else {\n        this.removeAttribute('minimum-reached');\n      }\n\n      this.dispatchEvent(new OverflowMinimumEvent(minimumReached));\n    }\n  }\n\n  /**\n   * Show all items in the list.\n   */\n  showAll() {\n    const { placeholder } = this.#refs;\n\n    placeholder.style.setProperty('width', '0');\n    placeholder.style.setProperty('display', 'none');\n    this.setAttribute('disabled', 'true');\n  }\n\n  /**\n   * Reflow items based on available space within the list.\n   * @param {number} [listHeight] Initial height of the list\n   * @param {HTMLElement | null} [lastVisibleElement] Optional element to place in last visible position\n   */\n  #reflowItems = (listHeight = 0, lastVisibleElement = null) => {\n    const { defaultSlot, overflowSlot, moreSlot, list, placeholder } = this.#refs;\n\n    this.#unobserveChanges();\n\n    // Reset all elements to the default slot so we can check which ones overflow.\n    this.#moveItemsToDefaultSlot();\n\n    const elements = defaultSlot.assignedElements();\n    const lastElement = elements[elements.length - 1];\n\n    if (!lastElement) {\n      this.#observeChanges();\n      return;\n    }\n\n    /** @type {Element[]} */\n    let visibleElements = [];\n    /** @type {Element[]} */\n    let overflowingElements = [];\n    let placeholderWidth = 0;\n    let hasOverflow = false;\n\n    if (listHeight > 0) {\n      list.style.setProperty('height', `${listHeight}px`);\n    }\n\n    // Enable flex-wrap so overflowing items break to the next line. This makes calculations easier.\n    list.style.setProperty('flex-wrap', 'wrap');\n    placeholder.hidden = true;\n\n    // Putting the \"More\" item (and lastVisibleElement, if provided) at the start of the list lets us see which items will fit on the same row.\n    moreSlot.style.setProperty('order', '-1');\n    moreSlot.hidden = false;\n\n    lastVisibleElement?.style.setProperty('order', '-1');\n\n    const moreSlotRect = moreSlot.getBoundingClientRect();\n\n    elements.forEach((element) => {\n      const elementRect = element.getBoundingClientRect();\n\n      if (elementRect.top > moreSlotRect.top) {\n        if (!overflowingElements.length) {\n          placeholderWidth = elementRect.width;\n        }\n\n        hasOverflow = true;\n        overflowingElements.push(element);\n      } else {\n        visibleElements.push(element);\n      }\n    });\n\n    if (hasOverflow) {\n      moreSlot.style.removeProperty('order');\n    }\n    lastVisibleElement?.style.removeProperty('order');\n\n    // Move the elements to the correct slot.\n    for (const element of elements) {\n      const targetSlot = overflowingElements.includes(element) ? overflowSlot.name : defaultSlot.name;\n      if (element.slot !== targetSlot) {\n        element.slot = targetSlot;\n      }\n    }\n\n    list.style.setProperty('counter-reset', `overflow-count ${overflowingElements.length}`);\n    this.style.setProperty('--overflow-count', `${overflowingElements.length}`);\n\n    // Adjust the \"More\" button visibility.\n    moreSlot.hidden = !hasOverflow;\n\n    if (hasOverflow) {\n      // Set the width and height of the placeholder so the list can grow if there is space.\n      placeholder.style.width = `${placeholderWidth}px`;\n      placeholder.hidden = false;\n    }\n\n    // Reset the overflow property since children elements may need to display outside the list (e.g. dropdowns, popovers).\n    list.style.setProperty('overflow', 'unset');\n\n    hasOverflow && this.#updateMinimumReached(visibleElements);\n\n    this.#observeChanges();\n  };\n\n  #observeChanges() {\n    this.#resizeObserver.observe(this);\n    this.#mutationObserver.observe(this, { childList: true });\n  }\n\n  #unobserveChanges() {\n    this.#resizeObserver.disconnect();\n    this.#mutationObserver.disconnect();\n  }\n\n  /**\n   * @type {{\n   *   defaultSlot: HTMLSlotElement;\n   *   overflowSlot: HTMLSlotElement;\n   *   moreSlot: HTMLSlotElement;\n   *   overflow: HTMLElement;\n   *   list: HTMLUListElement;\n   *   placeholder: HTMLLIElement;\n   * }}\n   */\n  #refs;\n\n  /**\n   * @type {ResizeObserver}\n   */\n  #resizeObserver = new ResizeNotifier(this.#handleChange);\n\n  /**\n   * @type {MutationObserver}\n   */\n  #mutationObserver = new MutationObserver(this.#handleChange);\n\n  #intersectionObserver = new IntersectionObserver(this.#handleIntersection, {\n    // Extend the root margin to around one more viewport of a typical mobile screen.\n    rootMargin: '640px 360px 640px 360px',\n  });\n}\n\nif (!customElements.get('overflow-list')) {\n  customElements.define('overflow-list', OverflowList);\n}\n"
  },
  {
    "path": "assets/paginated-list-aspect-ratio.js",
    "content": "/**\n * A helper class to keep the set aspect ratio in a card gallery element in the theme editor.\n * This applies the aspect ratio to newly loaded product cards even when the setting has changed and is unsaved.\n */\nexport class PaginatedListAspectRatioHelper {\n  /** @type {string | null} */\n  #imageRatioSetting = null;\n\n  /**\n   * Aspect ratio values matching the theme's standardized values\n   * @type {Object.<string, string>}\n   */\n  #ASPECT_RATIOS = {\n    square: '1',\n    portrait: '0.8',\n    landscape: '1.778',\n  };\n\n  /**\n   * @param {Object} options - The options object\n   * @param {HTMLElement} options.templateCard - The template card gallery element to get the image ratio from\n   */\n  constructor({ templateCard }) {\n    if (!Shopify.designMode) return;\n    this.#storeImageRatioSettings(templateCard);\n  }\n\n  /**\n   * Process newly added elements and apply correct aspect ratios\n   */\n  processNewElements() {\n    if (!Shopify.designMode) return;\n    // Wait for the DOM to update\n    requestAnimationFrame(() => {\n      this.#imageRatioSetting === 'adapt' ? this.#fixAdaptiveAspectRatios() : this.#applyFixedAspectRatio();\n    });\n  }\n\n  /**\n   * Store the image ratio from the template card for later use\n   * @param {HTMLElement} templateCard - The template card gallery element to get the image ratio from\n   */\n  #storeImageRatioSettings(templateCard) {\n    this.#imageRatioSetting = templateCard.getAttribute('data-image-ratio');\n  }\n\n  /**\n   * Fix adaptive aspect ratios for newly added cards\n   * For the 'adapt' setting, each product should use its own image's aspect ratio\n   */\n  #fixAdaptiveAspectRatios() {\n    const newCardGalleries = this.#getUnprocessedGalleries();\n    if (!newCardGalleries.length) return;\n\n    const productRatioCache = new Map();\n\n    newCardGalleries.forEach((gallery) => {\n      if (!(gallery instanceof HTMLElement)) return;\n\n      const productId = gallery.getAttribute('data-product-id');\n      if (productId && productRatioCache.has(productId)) {\n        this.#applyAspectRatioToGallery(gallery, productRatioCache.get(productId));\n        return;\n      }\n\n      const img = gallery.querySelector('img');\n      if (!img) {\n        this.#applyAspectRatioToGallery(gallery, '1');\n        return;\n      }\n\n      const loadAndSetRatio = () => {\n        if (!img.naturalWidth || !img.naturalHeight) return;\n\n        const imgRatio = this.#getSafeImageAspectRatio(img.naturalWidth, img.naturalHeight);\n\n        if (productId) {\n          productRatioCache.set(productId, imgRatio);\n        }\n\n        this.#applyAspectRatioToGallery(gallery, imgRatio);\n      };\n\n      if (img.complete) {\n        loadAndSetRatio();\n      } else {\n        img.addEventListener('load', loadAndSetRatio, { once: true });\n      }\n    });\n  }\n\n  /**\n   * Apply a fixed aspect ratio to all card-gallery and media container elements\n   * Only used for non-adaptive modes (square, portrait, landscape)\n   */\n  #applyFixedAspectRatio() {\n    if (!this.#imageRatioSetting) return;\n\n    const aspectRatio = this.#getAspectRatioValue(this.#imageRatioSetting);\n    if (!aspectRatio) return;\n\n    const newCardGalleries = this.#getUnprocessedGalleries();\n    if (!newCardGalleries.length) return;\n\n    // Batch DOM operations for better performance\n    requestAnimationFrame(() => {\n      newCardGalleries.forEach((gallery) => {\n        if (!(gallery instanceof HTMLElement)) return;\n        this.#applyAspectRatioToGallery(gallery, aspectRatio);\n      });\n    });\n  }\n\n  /**\n   * Calculate a safe aspect ratio value from image dimensions\n   * Ensures the ratio stays within reasonable bounds and has consistent decimal places\n   * @param {number} width - Natural width of the image\n   * @param {number} height - Natural height of the image\n   * @returns {string} Normalized aspect ratio as a string\n   */\n  #getSafeImageAspectRatio(width, height) {\n    const rawRatio = width / height;\n    return Math.max(0.1, Math.min(10, rawRatio)).toFixed(3);\n  }\n\n  /**\n   * Get aspect ratio value based on setting\n   * @param {string} ratioSetting - The ratio setting name\n   * @returns {string|null} - The aspect ratio value or null\n   */\n  #getAspectRatioValue(ratioSetting) {\n    return this.#ASPECT_RATIOS[ratioSetting] || null;\n  }\n\n  /**\n   * Apply an aspect ratio to a gallery and all its media containers\n   * @param {HTMLElement} gallery - The gallery element\n   * @param {string} aspectRatio - The aspect ratio to apply\n   */\n  #applyAspectRatioToGallery(gallery, aspectRatio) {\n    if (!(gallery instanceof HTMLElement)) return;\n\n    gallery.style.setProperty('--gallery-aspect-ratio', aspectRatio);\n\n    const mediaContainers = gallery.querySelectorAll('.product-media-container');\n    mediaContainers.forEach((container) => {\n      if (container instanceof HTMLElement) {\n        container.style.aspectRatio = aspectRatio;\n      }\n    });\n\n    this.#markAsProcessed(gallery);\n  }\n\n  /**\n   * Get all unprocessed card galleries\n   * @returns {NodeListOf<Element>} List of unprocessed galleries\n   */\n  #getUnprocessedGalleries() {\n    return document.querySelectorAll('.card-gallery:not([data-aspect-ratio-applied])');\n  }\n\n  /**\n   * Mark gallery as processed\n   * @param {HTMLElement} gallery - The gallery element to mark as processed\n   */\n  #markAsProcessed(gallery) {\n    if (!(gallery instanceof HTMLElement)) return;\n    gallery.setAttribute('data-aspect-ratio-applied', 'true');\n  }\n}\n"
  },
  {
    "path": "assets/paginated-list.js",
    "content": "import { Component } from '@theme/component';\nimport { sectionRenderer } from '@theme/section-renderer';\nimport { requestIdleCallback, viewTransition } from '@theme/utilities';\nimport { ThemeEvents } from '@theme/events';\nimport { PaginatedListAspectRatioHelper } from '@theme/paginated-list-aspect-ratio';\n\n/**\n * A custom element that renders a paginated list of items.\n *\n * @typedef {object} Refs\n * @property {HTMLUListElement} [grid] - The grid element.\n * @property {HTMLSpanElement} [viewMorePrevious] - The view more previous button.\n * @property {HTMLSpanElement} [viewMoreNext] - The view more next button.\n * @property {HTMLElement[]} [cards] - The cards elements.\n *\n * @extends Component<Refs>\n */\nexport default class PaginatedList extends Component {\n  /**\n   * @type {Map<number, string>}\n   */\n  pages = new Map();\n\n  /** @type {IntersectionObserver | undefined} */\n  infinityScrollObserver;\n\n  /** @type {((value: void) => void) | null} */\n  #resolveNextPagePromise = null;\n\n  /** @type {((value: void) => void) | null} */\n  #resolvePreviousPagePromise = null;\n\n  /** @type {PaginatedListAspectRatioHelper} */\n  #aspectRatioHelper;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    /** @type {HTMLElement | null} */\n    const templateCard = this.querySelector('[ref=\"cardGallery\"]');\n    if (templateCard) {\n      this.#aspectRatioHelper = new PaginatedListAspectRatioHelper({\n        templateCard,\n      });\n    }\n\n    this.#fetchPage('next');\n    this.#fetchPage('previous');\n    this.#observeViewMore();\n\n    // Listen for filter updates to clear cached pages\n    document.addEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.infinityScrollObserver) {\n      this.infinityScrollObserver.disconnect();\n    }\n    // Remove the filter update listener\n    document.removeEventListener(ThemeEvents.FilterUpdate, this.#handleFilterUpdate);\n  }\n\n  #observeViewMore() {\n    const { viewMorePrevious, viewMoreNext } = this.refs;\n\n    // Return if neither element exists\n    if (!viewMorePrevious && !viewMoreNext) return;\n\n    // Create observer if it doesn't exist\n    if (!this.infinityScrollObserver) {\n      this.infinityScrollObserver = new IntersectionObserver(\n        async (entries) => {\n          // Wait for any in-progress view transitions to finish\n          if (viewTransition.current) await viewTransition.current;\n\n          for (const entry of entries) {\n            if (entry.isIntersecting) {\n              // Use current refs to check which element triggered\n              const { viewMorePrevious, viewMoreNext } = this.refs;\n\n              if (entry.target === viewMorePrevious) {\n                this.#renderPreviousPage();\n              } else if (entry.target === viewMoreNext) {\n                this.#renderNextPage();\n              }\n            }\n          }\n        },\n        {\n          rootMargin: '100px',\n        }\n      );\n    }\n\n    // Observe the view more elements\n    if (viewMorePrevious) {\n      this.infinityScrollObserver.observe(viewMorePrevious);\n    }\n\n    if (viewMoreNext) {\n      this.infinityScrollObserver.observe(viewMoreNext);\n    }\n  }\n\n  /**\n   * @param {{ page: number, url?: URL } | undefined} pageInfo - The page info\n   * @returns {boolean} Whether to use the page\n   */\n  #shouldUsePage(pageInfo) {\n    if (!pageInfo) return false;\n\n    const { grid } = this.refs;\n    const lastPage = grid?.dataset.lastPage;\n\n    if (!lastPage || pageInfo.page < 1 || pageInfo.page > Number(lastPage)) return false;\n\n    return true;\n  }\n\n  /**\n   * @param {\"previous\" | \"next\"} type\n   */\n  async #fetchPage(type) {\n    const page = this.#getPage(type);\n\n    // Always resolve the promise, even if we can't fetch the page\n    const resolvePromise = () => {\n      if (type === 'next') {\n        this.#resolveNextPagePromise?.();\n        this.#resolveNextPagePromise = null;\n      } else {\n        this.#resolvePreviousPagePromise?.();\n        this.#resolvePreviousPagePromise = null;\n      }\n    };\n\n    if (!page || !this.#shouldUsePage(page)) {\n      // Resolve the promise even if we can't fetch\n      resolvePromise();\n      return;\n    }\n\n    await this.#fetchSpecificPage(page.page, page.url);\n    resolvePromise();\n  }\n\n  /**\n   * @param {number} pageNumber - The page number to fetch\n   * @param {URL} [url] - Optional URL, will be constructed if not provided\n   */\n  async #fetchSpecificPage(pageNumber, url = undefined) {\n    const pageInfo = { page: pageNumber, url };\n\n    if (!url) {\n      const newUrl = new URL(window.location.href);\n      newUrl.searchParams.set('page', pageNumber.toString());\n      newUrl.hash = '';\n      pageInfo.url = newUrl;\n    }\n\n    if (!this.#shouldUsePage(pageInfo)) return;\n    const pageContent = await sectionRenderer.getSectionHTML(this.sectionId, true, pageInfo.url);\n    this.pages.set(pageNumber, pageContent);\n  }\n\n  async #renderNextPage() {\n    const { grid } = this.refs;\n\n    if (!grid) return;\n\n    const nextPage = this.#getPage('next');\n\n    if (!nextPage || !this.#shouldUsePage(nextPage)) return;\n    let nextPageItemElements = this.#getGridForPage(nextPage.page);\n\n    if (!nextPageItemElements) {\n      const promise = new Promise((res) => {\n        this.#resolveNextPagePromise = res;\n      });\n\n      // Trigger the fetch for this page\n      this.#fetchPage('next');\n\n      await promise;\n      nextPageItemElements = this.#getGridForPage(nextPage.page);\n      if (!nextPageItemElements) return;\n    }\n\n    grid.append(...nextPageItemElements);\n\n    this.#aspectRatioHelper.processNewElements();\n\n    history.pushState('', '', nextPage.url.toString());\n\n    requestIdleCallback(() => {\n      this.#fetchPage('next');\n    });\n  }\n\n  async #renderPreviousPage() {\n    const { grid } = this.refs;\n\n    if (!grid) return;\n\n    const previousPage = this.#getPage('previous');\n    if (!previousPage || !this.#shouldUsePage(previousPage)) return;\n\n    let previousPageItemElements = this.#getGridForPage(previousPage.page);\n    if (!previousPageItemElements) {\n      const promise = new Promise((res) => {\n        this.#resolvePreviousPagePromise = res;\n      });\n\n      // Trigger the fetch for this page\n      this.#fetchPage('previous');\n\n      await promise;\n      previousPageItemElements = this.#getGridForPage(previousPage.page);\n      if (!previousPageItemElements) return;\n    }\n\n    // Store the current scroll position and height of the first element\n    const scrollTop = window.scrollY;\n    const firstElement = grid.firstElementChild;\n    const oldHeight = firstElement ? firstElement.getBoundingClientRect().top + window.scrollY : 0;\n\n    // Prepend the new elements\n    grid.prepend(...previousPageItemElements);\n\n    this.#aspectRatioHelper.processNewElements();\n\n    history.pushState('', '', previousPage.url.toString());\n\n    // Calculate and adjust scroll position to maintain the same view\n    if (firstElement) {\n      const newHeight = firstElement.getBoundingClientRect().top + window.scrollY;\n      const heightDiff = newHeight - oldHeight;\n      window.scrollTo({\n        top: scrollTop + heightDiff,\n        behavior: 'instant',\n      });\n    }\n\n    requestIdleCallback(() => {\n      this.#fetchPage('previous');\n    });\n  }\n\n  /**\n   * @param {\"previous\" | \"next\"} type\n   * @returns {{ page: number, url: URL } | undefined}\n   */\n  #getPage(type) {\n    const { cards } = this.refs;\n    const isPrevious = type === 'previous';\n\n    if (!Array.isArray(cards)) return;\n\n    const targetCard = cards[isPrevious ? 0 : cards.length - 1];\n\n    if (!targetCard) return;\n\n    const currentCardPage = Number(targetCard.dataset.page);\n    const page = isPrevious ? currentCardPage - 1 : currentCardPage + 1;\n\n    const url = new URL(window.location.href);\n    url.searchParams.set('page', page.toString());\n    url.hash = '';\n\n    return {\n      page,\n      url,\n    };\n  }\n\n  /**\n   * @param {number} page\n   * @returns {NodeListOf<Element> | undefined}\n   */\n  #getGridForPage(page) {\n    const pageHTML = this.pages.get(page);\n\n    if (!pageHTML) return;\n\n    const parsedPage = new DOMParser().parseFromString(pageHTML, 'text/html');\n    const gridElement = parsedPage.querySelector('[ref=\"grid\"]');\n    if (!gridElement) return;\n    return gridElement.querySelectorAll(':scope > [ref=\"cards[]\"]');\n  }\n\n  get sectionId() {\n    const id = this.getAttribute('section-id');\n\n    if (!id) throw new Error('The section-id attribute is required');\n\n    return id;\n  }\n\n  /**\n   * Handle filter updates by clearing cached pages\n   */\n  #handleFilterUpdate = () => {\n    this.pages.clear();\n\n    // Resolve any pending promises to unblock waiting renders\n    this.#resolveNextPagePromise?.();\n    this.#resolvePreviousPagePromise?.();\n\n    this.#resolveNextPagePromise = null;\n    this.#resolvePreviousPagePromise = null;\n\n    // Store the current lastPage value to detect when it changes\n    const currentLastPage = this.refs.grid?.dataset.lastPage;\n\n    // We need to wait for the DOM to be updated with the new filtered content\n    // Using mutation observer to detect when the grid actually updates\n    const observer = new MutationObserver(() => {\n      // Check if data-last-page changed\n      const newLastPage = this.refs.grid?.dataset.lastPage;\n\n      if (newLastPage !== currentLastPage) {\n        observer.disconnect();\n\n        // Check if component is still connected\n        if (!this.isConnected) {\n          return;\n        }\n\n        // Now the DOM has been updated with the new filtered content\n        this.#observeViewMore();\n\n        // Fetch the next page\n        this.#fetchPage('next');\n      }\n    });\n\n    // Observe the grid for changes\n    const { grid } = this.refs;\n    if (grid) {\n      observer.observe(grid, {\n        attributes: true,\n        attributeFilter: ['data-last-page'],\n        childList: true, // Also watch for child changes in case the whole grid is replaced\n      });\n\n      // Set a timeout as a fallback in case the mutation never fires\n      setTimeout(() => {\n        if (observer) {\n          observer.disconnect();\n        }\n      }, 3000);\n    }\n  };\n}\n"
  },
  {
    "path": "assets/performance.js",
    "content": "class ThemePerformance {\n  /**\n   * @param {string} metricPrefix\n   */\n  constructor(metricPrefix) {\n    this.metricPrefix = metricPrefix;\n  }\n\n  /**\n   * @param {string} benchmarkName\n   * @returns {PerformanceMark}\n   */\n  createStartingMarker(benchmarkName) {\n    const metricName = `${this.metricPrefix}:${benchmarkName}`;\n    return performance.mark(`${metricName}:start`);\n  }\n\n  /**\n   * @param {string} benchmarkName\n   * @param {Event} event\n   * @returns {void}\n   */\n  measureFromEvent(benchmarkName, event) {\n    const metricName = `${this.metricPrefix}:${benchmarkName}`;\n    performance.mark(`${metricName}:start`, {\n      startTime: event.timeStamp,\n    });\n\n    performance.mark(`${metricName}:end`);\n\n    performance.measure(metricName, `${metricName}:start`, `${metricName}:end`);\n  }\n\n  /**\n   * @param {PerformanceMark} startMarker\n   * @returns {void}\n   */\n  measureFromMarker(startMarker) {\n    const metricName = startMarker.name.replace(/:start$/, '');\n    const endMarker = performance.mark(`${metricName}:end`);\n\n    performance.measure(metricName, startMarker.name, endMarker.name);\n  }\n\n  /**\n   * @param {string} benchmarkName\n   * @param {Function} callback\n   * @returns {void}\n   */\n  measure(benchmarkName, callback) {\n    const metricName = `${this.metricPrefix}:${benchmarkName}`;\n    performance.mark(`${metricName}:start`);\n\n    callback();\n\n    performance.mark(`${metricName}:end`);\n\n    performance.measure(benchmarkName, `${metricName}:start`, `${metricName}:end`);\n  }\n}\n\nexport const cartPerformance = new ThemePerformance('cart-performance');\n"
  },
  {
    "path": "assets/popover-polyfill.js",
    "content": "// src/events.ts\n// @ts-nocheck\n\n/**\n * @fileoverview\n * - Polyfill for the popover attribute, which is not supported in older Safari versions.\n *\n * @see https://popover.oddbird.net/\n */\n\nvar ToggleEvent = class extends Event {\n  oldState;\n  newState;\n  constructor(type, { oldState = '', newState = '', ...init } = {}) {\n    super(type, init);\n    this.oldState = String(oldState || '');\n    this.newState = String(newState || '');\n  }\n};\nvar popoverToggleTaskQueue = /* @__PURE__ */ new WeakMap();\nfunction queuePopoverToggleEventTask(element, oldState, newState) {\n  popoverToggleTaskQueue.set(\n    element,\n    setTimeout(() => {\n      if (!popoverToggleTaskQueue.has(element)) return;\n      element.dispatchEvent(\n        new ToggleEvent('toggle', {\n          cancelable: false,\n          oldState,\n          newState,\n        })\n      );\n    }, 0)\n  );\n}\n\n// src/popover-helpers.ts\nvar ShadowRoot = globalThis.ShadowRoot || function () {};\nvar HTMLDialogElement = globalThis.HTMLDialogElement || function () {};\nvar topLayerElements = /* @__PURE__ */ new WeakMap();\nvar autoPopoverList = /* @__PURE__ */ new WeakMap();\nvar hintPopoverList = /* @__PURE__ */ new WeakMap();\nvar visibilityState = /* @__PURE__ */ new WeakMap();\nfunction getPopoverVisibilityState(popover) {\n  return visibilityState.get(popover) || 'hidden';\n}\nvar popoverInvoker = /* @__PURE__ */ new WeakMap();\nfunction lastSetElement(set) {\n  return [...set].pop();\n}\nfunction popoverTargetAttributeActivationBehavior(element) {\n  const popover = element.popoverTargetElement;\n  if (!(popover instanceof HTMLElement)) {\n    return;\n  }\n  const visibility = getPopoverVisibilityState(popover);\n  if (element.popoverTargetAction === 'show' && visibility === 'showing') {\n    return;\n  }\n  if (element.popoverTargetAction === 'hide' && visibility === 'hidden') return;\n  if (visibility === 'showing') {\n    hidePopover(popover, true, true);\n  } else if (checkPopoverValidity(popover, false)) {\n    popoverInvoker.set(popover, element);\n    showPopover(popover);\n  }\n}\nfunction checkPopoverValidity(element, expectedToBeShowing) {\n  if (element.popover !== 'auto' && element.popover !== 'manual' && element.popover !== 'hint') {\n    return false;\n  }\n  if (!element.isConnected) return false;\n  if (expectedToBeShowing && getPopoverVisibilityState(element) !== 'showing') {\n    return false;\n  }\n  if (!expectedToBeShowing && getPopoverVisibilityState(element) !== 'hidden') {\n    return false;\n  }\n  if (element instanceof HTMLDialogElement && element.hasAttribute('open')) {\n    return false;\n  }\n  if (document.fullscreenElement === element) return false;\n  return true;\n}\nfunction getStackPosition(popover) {\n  if (!popover) return 0;\n  const autoPopovers = autoPopoverList.get(document) || /* @__PURE__ */ new Set();\n  const hintPopovers = hintPopoverList.get(document) || /* @__PURE__ */ new Set();\n  if (hintPopovers.has(popover)) {\n    return [...hintPopovers].indexOf(popover) + autoPopovers.size + 1;\n  }\n  if (autoPopovers.has(popover)) {\n    return [...autoPopovers].indexOf(popover) + 1;\n  }\n  return 0;\n}\nfunction topMostClickedPopover(target) {\n  const clickedPopover = nearestInclusiveOpenPopover(target);\n  const invokerPopover = nearestInclusiveTargetPopoverForInvoker(target);\n  if (getStackPosition(clickedPopover) > getStackPosition(invokerPopover)) {\n    return clickedPopover;\n  }\n  return invokerPopover;\n}\nfunction topmostAutoOrHintPopover(document2) {\n  let topmostPopover;\n  const hintPopovers = hintPopoverList.get(document2) || /* @__PURE__ */ new Set();\n  const autoPopovers = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n  const usedStack = hintPopovers.size > 0 ? hintPopovers : autoPopovers.size > 0 ? autoPopovers : null;\n  if (usedStack) {\n    topmostPopover = lastSetElement(usedStack);\n    if (!topmostPopover.isConnected) {\n      usedStack.delete(topmostPopover);\n      return topmostAutoOrHintPopover(document2);\n    }\n    return topmostPopover;\n  }\n  return null;\n}\nfunction topMostPopoverInList(list) {\n  for (const popover of list || []) {\n    if (!popover.isConnected) {\n      list.delete(popover);\n    } else {\n      return popover;\n    }\n  }\n  return null;\n}\nfunction getRootNode(node) {\n  if (typeof node.getRootNode === 'function') {\n    return node.getRootNode();\n  }\n  if (node.parentNode) return getRootNode(node.parentNode);\n  return node;\n}\nfunction nearestInclusiveOpenPopover(node) {\n  while (node) {\n    if (node instanceof HTMLElement && node.popover === 'auto' && visibilityState.get(node) === 'showing') {\n      return node;\n    }\n    node = (node instanceof Element && node.assignedSlot) || node.parentElement || getRootNode(node);\n    if (node instanceof ShadowRoot) node = node.host;\n    if (node instanceof Document) return;\n  }\n}\nfunction nearestInclusiveTargetPopoverForInvoker(node) {\n  while (node) {\n    const nodePopover = node.popoverTargetElement;\n    if (nodePopover instanceof HTMLElement) return nodePopover;\n    node = node.parentElement || getRootNode(node);\n    if (node instanceof ShadowRoot) node = node.host;\n    if (node instanceof Document) return;\n  }\n}\nfunction topMostPopoverAncestor(newPopover, list) {\n  const popoverPositions = /* @__PURE__ */ new Map();\n  let i = 0;\n  for (const popover of list || []) {\n    popoverPositions.set(popover, i);\n    i += 1;\n  }\n  popoverPositions.set(newPopover, i);\n  i += 1;\n  let topMostPopoverAncestor2 = null;\n  function checkAncestor(candidate) {\n    if (!candidate) return;\n    let okNesting = false;\n    let candidateAncestor = null;\n    let candidatePosition = null;\n    while (!okNesting) {\n      candidateAncestor = nearestInclusiveOpenPopover(candidate) || null;\n      if (candidateAncestor === null) return;\n      if (!popoverPositions.has(candidateAncestor)) return;\n      if (newPopover.popover === 'hint' || candidateAncestor.popover === 'auto') {\n        okNesting = true;\n      }\n      if (!okNesting) {\n        candidate = candidateAncestor.parentElement;\n      }\n    }\n    candidatePosition = popoverPositions.get(candidateAncestor);\n    if (topMostPopoverAncestor2 === null || popoverPositions.get(topMostPopoverAncestor2) < candidatePosition) {\n      topMostPopoverAncestor2 = candidateAncestor;\n    }\n  }\n  checkAncestor(newPopover.parentElement || getRootNode(newPopover));\n  return topMostPopoverAncestor2;\n}\nfunction isFocusable(focusTarget) {\n  if (focusTarget.hidden || focusTarget instanceof ShadowRoot) return false;\n  if (\n    focusTarget instanceof HTMLButtonElement ||\n    focusTarget instanceof HTMLInputElement ||\n    focusTarget instanceof HTMLSelectElement ||\n    focusTarget instanceof HTMLTextAreaElement ||\n    focusTarget instanceof HTMLOptGroupElement ||\n    focusTarget instanceof HTMLOptionElement ||\n    focusTarget instanceof HTMLFieldSetElement\n  ) {\n    if (focusTarget.disabled) return false;\n  }\n  if (focusTarget instanceof HTMLInputElement && focusTarget.type === 'hidden') {\n    return false;\n  }\n  if (focusTarget instanceof HTMLAnchorElement && focusTarget.href === '') {\n    return false;\n  }\n  return typeof focusTarget.tabIndex === 'number' && focusTarget.tabIndex !== -1;\n}\nfunction focusDelegate(focusTarget) {\n  if (focusTarget.shadowRoot && focusTarget.shadowRoot.delegatesFocus !== true) {\n    return null;\n  }\n  let whereToLook = focusTarget;\n  if (whereToLook.shadowRoot) {\n    whereToLook = whereToLook.shadowRoot;\n  }\n  let autoFocusDelegate = whereToLook.querySelector('[autofocus]');\n  if (autoFocusDelegate) {\n    return autoFocusDelegate;\n  } else {\n    const slots = whereToLook.querySelectorAll('slot');\n    for (const slot of slots) {\n      const assignedElements = slot.assignedElements({ flatten: true });\n      for (const el of assignedElements) {\n        if (el.hasAttribute('autofocus')) {\n          return el;\n        } else {\n          autoFocusDelegate = el.querySelector('[autofocus]');\n          if (autoFocusDelegate) {\n            return autoFocusDelegate;\n          }\n        }\n      }\n    }\n  }\n  const walker = focusTarget.ownerDocument.createTreeWalker(whereToLook, NodeFilter.SHOW_ELEMENT);\n  let descendant = walker.currentNode;\n  while (descendant) {\n    if (isFocusable(descendant)) {\n      return descendant;\n    }\n    descendant = walker.nextNode();\n  }\n}\nfunction popoverFocusingSteps(subject) {\n  var _a;\n  (_a = focusDelegate(subject)) == null ? void 0 : _a.focus();\n}\nvar previouslyFocusedElements = /* @__PURE__ */ new WeakMap();\nfunction showPopover(element) {\n  if (!checkPopoverValidity(element, false)) {\n    return;\n  }\n  const document2 = element.ownerDocument;\n  if (\n    !element.dispatchEvent(\n      new ToggleEvent('beforetoggle', {\n        cancelable: true,\n        oldState: 'closed',\n        newState: 'open',\n      })\n    )\n  ) {\n    return;\n  }\n  if (!checkPopoverValidity(element, false)) {\n    return;\n  }\n  let shouldRestoreFocus = false;\n  const originalType = element.popover;\n  let stackToAppendTo = null;\n  const autoAncestor = topMostPopoverAncestor(element, autoPopoverList.get(document2) || /* @__PURE__ */ new Set());\n  const hintAncestor = topMostPopoverAncestor(element, hintPopoverList.get(document2) || /* @__PURE__ */ new Set());\n  if (originalType === 'auto') {\n    closeAllOpenPopoversInList(hintPopoverList.get(document2) || /* @__PURE__ */ new Set(), shouldRestoreFocus, true);\n    const ancestor = autoAncestor || document2;\n    hideAllPopoversUntil(ancestor, shouldRestoreFocus, true);\n    stackToAppendTo = 'auto';\n  }\n  if (originalType === 'hint') {\n    if (hintAncestor) {\n      hideAllPopoversUntil(hintAncestor, shouldRestoreFocus, true);\n      stackToAppendTo = 'hint';\n    } else {\n      closeAllOpenPopoversInList(hintPopoverList.get(document2) || /* @__PURE__ */ new Set(), shouldRestoreFocus, true);\n      if (autoAncestor) {\n        hideAllPopoversUntil(autoAncestor, shouldRestoreFocus, true);\n        stackToAppendTo = 'auto';\n      } else {\n        stackToAppendTo = 'hint';\n      }\n    }\n  }\n  if (originalType === 'auto' || originalType === 'hint') {\n    if (originalType !== element.popover || !checkPopoverValidity(element, false)) {\n      return;\n    }\n    if (!topmostAutoOrHintPopover(document2)) {\n      shouldRestoreFocus = true;\n    }\n    if (stackToAppendTo === 'auto') {\n      if (!autoPopoverList.has(document2)) {\n        autoPopoverList.set(document2, /* @__PURE__ */ new Set());\n      }\n      autoPopoverList.get(document2).add(element);\n    } else if (stackToAppendTo === 'hint') {\n      if (!hintPopoverList.has(document2)) {\n        hintPopoverList.set(document2, /* @__PURE__ */ new Set());\n      }\n      hintPopoverList.get(document2).add(element);\n    }\n  }\n  previouslyFocusedElements.delete(element);\n  const originallyFocusedElement = document2.activeElement;\n  element.classList.add(':popover-open');\n  visibilityState.set(element, 'showing');\n  if (!topLayerElements.has(document2)) {\n    topLayerElements.set(document2, /* @__PURE__ */ new Set());\n  }\n  topLayerElements.get(document2).add(element);\n  setInvokerAriaExpanded(popoverInvoker.get(element), true);\n  popoverFocusingSteps(element);\n  if (shouldRestoreFocus && originallyFocusedElement && element.popover === 'auto') {\n    previouslyFocusedElements.set(element, originallyFocusedElement);\n  }\n  queuePopoverToggleEventTask(element, 'closed', 'open');\n}\nfunction hidePopover(element, focusPreviousElement = false, fireEvents = false) {\n  var _a, _b;\n  if (!checkPopoverValidity(element, true)) {\n    return;\n  }\n  const document2 = element.ownerDocument;\n  if (['auto', 'hint'].includes(element.popover)) {\n    hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n    if (!checkPopoverValidity(element, true)) {\n      return;\n    }\n  }\n  const autoList = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n  const autoPopoverListContainsElement = autoList.has(element) && lastSetElement(autoList) === element;\n  setInvokerAriaExpanded(popoverInvoker.get(element), false);\n  popoverInvoker.delete(element);\n  if (fireEvents) {\n    element.dispatchEvent(\n      new ToggleEvent('beforetoggle', {\n        oldState: 'open',\n        newState: 'closed',\n      })\n    );\n    if (autoPopoverListContainsElement && lastSetElement(autoList) !== element) {\n      hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n    }\n    if (!checkPopoverValidity(element, true)) {\n      return;\n    }\n  }\n  (_a = topLayerElements.get(document2)) == null ? void 0 : _a.delete(element);\n  autoList.delete(element);\n  (_b = hintPopoverList.get(document2)) == null ? void 0 : _b.delete(element);\n  element.classList.remove(':popover-open');\n  visibilityState.set(element, 'hidden');\n  if (fireEvents) {\n    queuePopoverToggleEventTask(element, 'open', 'closed');\n  }\n  const previouslyFocusedElement = previouslyFocusedElements.get(element);\n  if (previouslyFocusedElement) {\n    previouslyFocusedElements.delete(element);\n    if (focusPreviousElement) {\n      previouslyFocusedElement.focus();\n    }\n  }\n}\nfunction closeAllOpenPopovers(document2, focusPreviousElement = false, fireEvents = false) {\n  let popover = topmostAutoOrHintPopover(document2);\n  while (popover) {\n    hidePopover(popover, focusPreviousElement, fireEvents);\n    popover = topmostAutoOrHintPopover(document2);\n  }\n}\nfunction closeAllOpenPopoversInList(list, focusPreviousElement = false, fireEvents = false) {\n  let popover = topMostPopoverInList(list);\n  while (popover) {\n    hidePopover(popover, focusPreviousElement, fireEvents);\n    popover = topMostPopoverInList(list);\n  }\n}\nfunction hidePopoverStackUntil(endpoint, set, focusPreviousElement, fireEvents) {\n  let repeatingHide = false;\n  let hasRunOnce = false;\n  while (repeatingHide || !hasRunOnce) {\n    hasRunOnce = true;\n    let lastToHide = null;\n    let foundEndpoint = false;\n    for (const popover of set) {\n      if (popover === endpoint) {\n        foundEndpoint = true;\n      } else if (foundEndpoint) {\n        lastToHide = popover;\n        break;\n      }\n    }\n    if (!lastToHide) return;\n    while (getPopoverVisibilityState(lastToHide) === 'showing' && set.size) {\n      hidePopover(lastSetElement(set), focusPreviousElement, fireEvents);\n    }\n    if (set.has(endpoint) && lastSetElement(set) !== endpoint) {\n      repeatingHide = true;\n    }\n    if (repeatingHide) {\n      fireEvents = false;\n    }\n  }\n}\nfunction hideAllPopoversUntil(endpoint, focusPreviousElement, fireEvents) {\n  var _a, _b;\n  const document2 = endpoint.ownerDocument || endpoint;\n  if (endpoint instanceof Document) {\n    return closeAllOpenPopovers(document2, focusPreviousElement, fireEvents);\n  }\n  if ((_a = hintPopoverList.get(document2)) == null ? void 0 : _a.has(endpoint)) {\n    hidePopoverStackUntil(endpoint, hintPopoverList.get(document2), focusPreviousElement, fireEvents);\n    return;\n  }\n  closeAllOpenPopoversInList(\n    hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n    focusPreviousElement,\n    fireEvents\n  );\n  if (!((_b = autoPopoverList.get(document2)) == null ? void 0 : _b.has(endpoint))) {\n    return;\n  }\n  hidePopoverStackUntil(endpoint, autoPopoverList.get(document2), focusPreviousElement, fireEvents);\n}\nvar popoverPointerDownTargets = /* @__PURE__ */ new WeakMap();\nfunction lightDismissOpenPopovers(event) {\n  if (!event.isTrusted) return;\n  const target = event.composedPath()[0];\n  if (!target) return;\n  const document2 = target.ownerDocument;\n  const topMostPopover = topmostAutoOrHintPopover(document2);\n  if (!topMostPopover) return;\n  const ancestor = topMostClickedPopover(target);\n  if (ancestor && event.type === 'pointerdown') {\n    popoverPointerDownTargets.set(document2, ancestor);\n  } else if (event.type === 'pointerup') {\n    const sameTarget = popoverPointerDownTargets.get(document2) === ancestor;\n    popoverPointerDownTargets.delete(document2);\n    if (sameTarget) {\n      hideAllPopoversUntil(ancestor || document2, false, true);\n    }\n  }\n}\nvar initialAriaExpandedValue = /* @__PURE__ */ new WeakMap();\nfunction setInvokerAriaExpanded(el, force = false) {\n  if (!el) return;\n  if (!initialAriaExpandedValue.has(el)) {\n    initialAriaExpandedValue.set(el, el.getAttribute('aria-expanded'));\n  }\n  const popover = el.popoverTargetElement;\n  if (popover instanceof HTMLElement && popover.popover === 'auto') {\n    el.setAttribute('aria-expanded', String(force));\n  } else {\n    const initialValue = initialAriaExpandedValue.get(el);\n    if (!initialValue) {\n      el.removeAttribute('aria-expanded');\n    } else {\n      el.setAttribute('aria-expanded', initialValue);\n    }\n  }\n}\n\n// src/popover.ts\nvar ShadowRoot2 = globalThis.ShadowRoot || function () {};\nfunction isSupported() {\n  return (\n    typeof HTMLElement !== 'undefined' &&\n    typeof HTMLElement.prototype === 'object' &&\n    'popover' in HTMLElement.prototype\n  );\n}\nfunction patchSelectorFn(object, name, mapper) {\n  const original = object[name];\n  Object.defineProperty(object, name, {\n    value(selector) {\n      return original.call(this, mapper(selector));\n    },\n  });\n}\nvar nonEscapedPopoverSelector = /(^|[^\\\\]):popover-open\\b/g;\nfunction hasLayerSupport() {\n  return typeof globalThis.CSSLayerBlockRule === 'function';\n}\nfunction getStyles() {\n  const useLayer = hasLayerSupport();\n  return `\n${useLayer ? '@layer popover-polyfill {' : ''}\n  :where([popover]) {\n    position: fixed;\n    z-index: 2147483647;\n    inset: 0;\n    padding: 0.25em;\n    width: fit-content;\n    height: fit-content;\n    border-width: initial;\n    border-color: initial;\n    border-image: initial;\n    border-style: solid;\n    background-color: canvas;\n    color: canvastext;\n    overflow: auto;\n    margin: auto;\n  }\n\n  :where([popover]:not(.\\\\:popover-open)) {\n    display: none;\n  }\n\n  :where(dialog[popover].\\\\:popover-open) {\n    display: block;\n  }\n\n  :where(dialog[popover][open]) {\n    display: revert;\n  }\n\n  :where([anchor].\\\\:popover-open) {\n    inset: auto;\n  }\n\n  :where([anchor]:popover-open) {\n    inset: auto;\n  }\n\n  @supports not (background-color: canvas) {\n    :where([popover]) {\n      background-color: white;\n      color: black;\n    }\n  }\n\n  @supports (width: -moz-fit-content) {\n    :where([popover]) {\n      width: -moz-fit-content;\n      height: -moz-fit-content;\n    }\n  }\n\n  @supports not (inset: 0) {\n    :where([popover]) {\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n  }\n${useLayer ? '}' : ''}\n`;\n}\nvar popoverStyleSheet = null;\nfunction injectStyles(root) {\n  const styles = getStyles();\n  if (popoverStyleSheet === null) {\n    try {\n      popoverStyleSheet = new CSSStyleSheet();\n      popoverStyleSheet.replaceSync(styles);\n    } catch {\n      popoverStyleSheet = false;\n    }\n  }\n  if (popoverStyleSheet === false) {\n    const sheet = document.createElement('style');\n    sheet.textContent = styles;\n    if (root instanceof Document) {\n      root.head.prepend(sheet);\n    } else {\n      root.prepend(sheet);\n    }\n  } else {\n    root.adoptedStyleSheets = [popoverStyleSheet, ...root.adoptedStyleSheets];\n  }\n}\nfunction apply() {\n  if (typeof window === 'undefined') return;\n  window.ToggleEvent = window.ToggleEvent || ToggleEvent;\n  function rewriteSelector(selector) {\n    if (selector == null ? void 0 : selector.includes(':popover-open')) {\n      selector = selector.replace(nonEscapedPopoverSelector, '$1.\\\\:popover-open');\n    }\n    return selector;\n  }\n  patchSelectorFn(Document.prototype, 'querySelector', rewriteSelector);\n  patchSelectorFn(Document.prototype, 'querySelectorAll', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'querySelector', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'querySelectorAll', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'matches', rewriteSelector);\n  patchSelectorFn(Element.prototype, 'closest', rewriteSelector);\n  patchSelectorFn(DocumentFragment.prototype, 'querySelectorAll', rewriteSelector);\n  Object.defineProperties(HTMLElement.prototype, {\n    popover: {\n      enumerable: true,\n      configurable: true,\n      get() {\n        if (!this.hasAttribute('popover')) return null;\n        const value = (this.getAttribute('popover') || '').toLowerCase();\n        if (value === '' || value == 'auto') return 'auto';\n        if (value == 'hint') return 'hint';\n        return 'manual';\n      },\n      set(value) {\n        if (value === null) {\n          this.removeAttribute('popover');\n        } else {\n          this.setAttribute('popover', value);\n        }\n      },\n    },\n    showPopover: {\n      enumerable: true,\n      configurable: true,\n      value(options = {}) {\n        showPopover(this);\n      },\n    },\n    hidePopover: {\n      enumerable: true,\n      configurable: true,\n      value() {\n        hidePopover(this, true, true);\n      },\n    },\n    togglePopover: {\n      enumerable: true,\n      configurable: true,\n      value(options = {}) {\n        if (typeof options === 'boolean') {\n          options = { force: options };\n        }\n        if ((visibilityState.get(this) === 'showing' && options.force === void 0) || options.force === false) {\n          hidePopover(this, true, true);\n        } else if (options.force === void 0 || options.force === true) {\n          showPopover(this);\n        }\n        return visibilityState.get(this) === 'showing';\n      },\n    },\n  });\n  const originalAttachShadow = Element.prototype.attachShadow;\n  if (originalAttachShadow) {\n    Object.defineProperties(Element.prototype, {\n      attachShadow: {\n        enumerable: true,\n        configurable: true,\n        writable: true,\n        value(options) {\n          const shadowRoot = originalAttachShadow.call(this, options);\n          injectStyles(shadowRoot);\n          return shadowRoot;\n        },\n      },\n    });\n  }\n  const originalAttachInternals = HTMLElement.prototype.attachInternals;\n  if (originalAttachInternals) {\n    Object.defineProperties(HTMLElement.prototype, {\n      attachInternals: {\n        enumerable: true,\n        configurable: true,\n        writable: true,\n        value() {\n          const internals = originalAttachInternals.call(this);\n          if (internals.shadowRoot) {\n            injectStyles(internals.shadowRoot);\n          }\n          return internals;\n        },\n      },\n    });\n  }\n  const popoverTargetAssociatedElements = /* @__PURE__ */ new WeakMap();\n  function applyPopoverInvokerElementMixin(ElementClass) {\n    Object.defineProperties(ElementClass.prototype, {\n      popoverTargetElement: {\n        enumerable: true,\n        configurable: true,\n        set(targetElement) {\n          if (targetElement === null) {\n            this.removeAttribute('popovertarget');\n            popoverTargetAssociatedElements.delete(this);\n          } else if (!(targetElement instanceof Element)) {\n            throw new TypeError(`popoverTargetElement must be an element or null`);\n          } else {\n            this.setAttribute('popovertarget', '');\n            popoverTargetAssociatedElements.set(this, targetElement);\n          }\n        },\n        get() {\n          if (this.localName !== 'button' && this.localName !== 'input') {\n            return null;\n          }\n          if (this.localName === 'input' && this.type !== 'reset' && this.type !== 'image' && this.type !== 'button') {\n            return null;\n          }\n          if (this.disabled) {\n            return null;\n          }\n          if (this.form && this.type === 'submit') {\n            return null;\n          }\n          const targetElement = popoverTargetAssociatedElements.get(this);\n          if (targetElement && targetElement.isConnected) {\n            return targetElement;\n          } else if (targetElement && !targetElement.isConnected) {\n            popoverTargetAssociatedElements.delete(this);\n            return null;\n          }\n          const root = getRootNode(this);\n          const idref = this.getAttribute('popovertarget');\n          if ((root instanceof Document || root instanceof ShadowRoot2) && idref) {\n            return root.getElementById(idref) || null;\n          }\n          return null;\n        },\n      },\n      popoverTargetAction: {\n        enumerable: true,\n        configurable: true,\n        get() {\n          const value = (this.getAttribute('popovertargetaction') || '').toLowerCase();\n          if (value === 'show' || value === 'hide') return value;\n          return 'toggle';\n        },\n        set(value) {\n          this.setAttribute('popovertargetaction', value);\n        },\n      },\n    });\n  }\n  applyPopoverInvokerElementMixin(HTMLButtonElement);\n  applyPopoverInvokerElementMixin(HTMLInputElement);\n  const handleInvokerActivation = (event) => {\n    if (event.defaultPrevented) {\n      return;\n    }\n    const composedPath = event.composedPath();\n    const target = composedPath[0];\n    if (!(target instanceof Element) || (target == null ? void 0 : target.shadowRoot)) {\n      return;\n    }\n    const root = getRootNode(target);\n    if (!(root instanceof ShadowRoot2 || root instanceof Document)) {\n      return;\n    }\n    const invoker = composedPath.find((el) => {\n      var _a;\n      return (_a = el.matches) == null ? void 0 : _a.call(el, '[popovertargetaction],[popovertarget]');\n    });\n    if (invoker) {\n      popoverTargetAttributeActivationBehavior(invoker);\n      event.preventDefault();\n      return;\n    }\n  };\n  const onKeydown = (event) => {\n    const key = event.key;\n    const target = event.target;\n    if (!event.defaultPrevented && target && (key === 'Escape' || key === 'Esc')) {\n      hideAllPopoversUntil(target.ownerDocument, true, true);\n    }\n  };\n  const addEventListeners = (root) => {\n    root.addEventListener('click', handleInvokerActivation);\n    root.addEventListener('keydown', onKeydown);\n    root.addEventListener('pointerdown', lightDismissOpenPopovers);\n    root.addEventListener('pointerup', lightDismissOpenPopovers);\n  };\n  addEventListeners(document);\n  injectStyles(document);\n}\n\n// src/index.ts\nif (!isSupported()) apply();\n//# sourceMappingURL=popover.js.map\n"
  },
  {
    "path": "assets/predictive-search.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce, onAnimationEnd, prefersReducedMotion } from '@theme/utilities';\nimport { sectionRenderer } from '@theme/section-renderer';\nimport { morph } from '@theme/morph';\nimport { RecentlyViewed } from '@theme/recently-viewed-products';\nimport { DialogCloseEvent, DialogOpenEvent, DialogComponent } from '@theme/dialog';\n\n/**\n * A custom element that allows the user to search for resources available on the store.\n *\n * @typedef {object} Refs\n * @property {HTMLInputElement} searchInput - The search input element.\n * @property {HTMLElement} predictiveSearchResults - The predictive search results container.\n * @property {HTMLElement} resetButton - The reset button element.\n * @property {HTMLElement[]} [resultsItems] - The search results items elements.\n * @property {HTMLElement} [recentlyViewedWrapper] - The recently viewed products wrapper.\n * @property {HTMLElement[]} [recentlyViewedTitle] - The recently viewed title elements.\n * @property {HTMLElement[]} [recentlyViewedItems] - The recently viewed product items.\n * @extends {Component<Refs>}\n */\nclass PredictiveSearchComponent extends Component {\n  requiredRefs = ['searchInput', 'predictiveSearchResults', 'resetButton'];\n\n  #controller = new AbortController();\n\n  /**\n   * @type {AbortController | null}\n   */\n  #activeFetch = null;\n\n  #emptyStateLoaded = false;\n\n  /**\n   * Get the dialog component.\n   * @returns {DialogComponent | null} The dialog component.\n   */\n  get dialog() {\n    return this.closest('dialog-component');\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { dialog } = this;\n    const { signal } = this.#controller;\n\n    if (this.refs.searchInput.value.length > 0) {\n      this.#showResetButton();\n    }\n\n    if (dialog) {\n      document.addEventListener('keydown', this.#handleKeyboardShortcut, { signal });\n      dialog.addEventListener(DialogCloseEvent.eventName, this.#handleDialogClose, { signal });\n      dialog.addEventListener(DialogOpenEvent.eventName, this.#handleDialogOpen, { signal, once: true });\n\n      this.addEventListener('click', this.#handleModalClick, { signal });\n    }\n\n    if (RecentlyViewed.getProducts().length > 0) {\n      requestIdleCallback(() => {\n        this.#loadEmptyState();\n      });\n    }\n  }\n\n  /**\n   * Handles clicks within the predictive search modal to maintain focus on the input\n   * @param {MouseEvent} event - The mouse event\n   */\n  #handleModalClick = (event) => {\n    const target = /** @type {HTMLElement} */ (event.target);\n    const isInteractiveElement =\n      target instanceof HTMLButtonElement ||\n      target instanceof HTMLAnchorElement ||\n      target instanceof HTMLInputElement ||\n      target.closest('button') ||\n      target.closest('a') ||\n      target.closest('input');\n\n    if (!isInteractiveElement && this.refs.searchInput) {\n      this.refs.searchInput.focus();\n    }\n  };\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n  }\n\n  /**\n   * Handles the CMD+K key combination.\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  #handleKeyboardShortcut = (event) => {\n    if (event.metaKey && event.key === 'k') {\n      this.dialog?.toggleDialog();\n    }\n  };\n\n  /**\n   * Handles the dialog close event.\n   */\n  #handleDialogClose = () => {\n    this.#resetSearch();\n  };\n\n  #handleDialogOpen = () => {\n    if (!this.#emptyStateLoaded && RecentlyViewed.getProducts().length > 0) {\n      this.#loadEmptyState();\n    }\n  };\n\n  #loadEmptyState() {\n    if (this.#emptyStateLoaded) return;\n    this.#emptyStateLoaded = true;\n    this.resetSearch(false);\n  }\n\n  get #allResultsItems() {\n    const containers = Array.from(\n      this.querySelectorAll(\n        '.predictive-search-results__wrapper-queries, ' +\n          '.predictive-search-results__wrapper-products, ' +\n          '.predictive-search-results__list'\n      )\n    );\n\n    const allItems = containers\n      .flatMap((container) => {\n        if (container.classList.contains('predictive-search-results__wrapper-products')) {\n          return Array.from(container.querySelectorAll('.predictive-search-results__card'));\n        }\n        return Array.from(container.querySelectorAll('[ref=\"resultsItems[]\"], .predictive-search-results__card'));\n      })\n      .filter((item) => item instanceof HTMLElement);\n\n    return /** @type {HTMLElement[]} */ (allItems);\n  }\n\n  /**\n   * Track whether the last interaction was keyboard-based\n   * @type {boolean}\n   */\n  #isKeyboardNavigation = false;\n\n  get #currentIndex() {\n    return this.#allResultsItems?.findIndex((item) => item.getAttribute('aria-selected') === 'true') ?? -1;\n  }\n\n  set #currentIndex(index) {\n    if (!this.#allResultsItems?.length) return;\n\n    let activeItem = null;\n\n    this.#allResultsItems.forEach((item) => {\n      item.classList.remove('keyboard-focus');\n    });\n\n    for (const [itemIndex, item] of this.#allResultsItems.entries()) {\n      if (itemIndex === index) {\n        item.setAttribute('aria-selected', 'true');\n        if (this.#isKeyboardNavigation) {\n          item.classList.add('keyboard-focus');\n        }\n        activeItem = item;\n      } else {\n        item.removeAttribute('aria-selected');\n      }\n    }\n\n    activeItem?.scrollIntoView({ behavior: prefersReducedMotion() ? 'instant' : 'smooth', block: 'nearest' });\n    this.refs.searchInput.focus();\n  }\n\n  get #currentItem() {\n    return this.#allResultsItems?.[this.#currentIndex];\n  }\n\n  /**\n   * Navigate through the predictive search results using arrow keys or close them with the Escape key.\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  onSearchKeyDown = (event) => {\n    if (event.key === 'Escape') {\n      this.#resetSearch();\n      return;\n    }\n\n    if (!this.#allResultsItems?.length || event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n      return;\n    }\n\n    const currentIndex = this.#currentIndex;\n    const totalItems = this.#allResultsItems.length;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        this.#isKeyboardNavigation = true;\n        event.preventDefault();\n        this.#currentIndex = currentIndex < totalItems - 1 ? currentIndex + 1 : 0;\n        break;\n\n      case 'Tab':\n        if (event.shiftKey) {\n          this.#isKeyboardNavigation = true;\n          event.preventDefault();\n          this.#currentIndex = currentIndex > 0 ? currentIndex - 1 : totalItems - 1;\n        } else {\n          this.#isKeyboardNavigation = true;\n          event.preventDefault();\n          this.#currentIndex = currentIndex < totalItems - 1 ? currentIndex + 1 : 0;\n        }\n        break;\n\n      case 'ArrowUp':\n        this.#isKeyboardNavigation = true;\n        event.preventDefault();\n        this.#currentIndex = currentIndex > 0 ? currentIndex - 1 : totalItems - 1;\n        break;\n\n      case 'Enter': {\n        const singleResultContainer = this.refs.predictiveSearchResults.querySelector('[data-single-result-url]');\n        if (singleResultContainer instanceof HTMLElement && singleResultContainer.dataset.singleResultUrl) {\n          event.preventDefault();\n          window.location.href = singleResultContainer.dataset.singleResultUrl;\n          return;\n        }\n\n        if (this.#currentIndex >= 0) {\n          event.preventDefault();\n          this.#currentItem?.querySelector('a')?.click();\n        } else {\n          const searchUrl = new URL(Theme.routes.search_url, location.origin);\n          searchUrl.searchParams.set('q', this.refs.searchInput.value);\n          window.location.href = searchUrl.toString();\n        }\n        break;\n      }\n    }\n  };\n\n  /**\n   * Clears the recently viewed products.\n   * @param {Event} event - The event.\n   */\n  clearRecentlyViewedProducts(event) {\n    event.stopPropagation();\n\n    RecentlyViewed.clearProducts();\n\n    const { recentlyViewedItems, recentlyViewedTitle, recentlyViewedWrapper } = this.refs;\n\n    const allRecentlyViewedElements = [...(recentlyViewedItems || []), ...(recentlyViewedTitle || [])];\n\n    if (allRecentlyViewedElements.length === 0) {\n      return;\n    }\n\n    if (recentlyViewedWrapper) {\n      recentlyViewedWrapper.classList.add('removing');\n\n      onAnimationEnd(recentlyViewedWrapper, () => {\n        recentlyViewedWrapper.remove();\n      });\n    }\n  }\n\n  /**\n   * Reset the search state.\n   * @param {boolean} [keepFocus=true] - Whether to keep focus on input after reset\n   */\n  resetSearch = debounce((keepFocus = true) => {\n    if (keepFocus) {\n      this.refs.searchInput.focus();\n    }\n    this.#resetSearch();\n  }, 100);\n\n  /**\n   * Debounce the search handler to fetch and display search results based on the input value.\n   * Reset the current selection index and close results if the search term is empty.\n   */\n  search = debounce((event) => {\n    // If the input is not a text input (like using the Escape key), don't search\n    if (!event.inputType) return;\n\n    const searchTerm = this.refs.searchInput.value.trim();\n    this.#currentIndex = -1;\n\n    if (!searchTerm.length) {\n      this.#resetSearch();\n      return;\n    }\n\n    this.#showResetButton();\n    this.#getSearchResults(searchTerm);\n  }, 200);\n\n  /**\n   * Resets scroll positions for search results containers\n   */\n  #resetScrollPositions() {\n    requestAnimationFrame(() => {\n      this.refs.predictiveSearchResults.querySelector('.predictive-search-results__inner')?.scrollTo(0, 0);\n      this.querySelector('.predictive-search-form__content')?.scrollTo(0, 0);\n    });\n  }\n\n  /**\n   * Fetch search results using the section renderer and update the results container.\n   * @param {string} searchTerm - The term to search for\n   */\n  async #getSearchResults(searchTerm) {\n    if (!this.dataset.sectionId) return;\n\n    const url = new URL(Theme.routes.predictive_search_url, location.origin);\n    url.searchParams.set('q', searchTerm);\n    url.searchParams.set('resources[limit_scope]', 'each');\n\n    const { predictiveSearchResults } = this.refs;\n\n    const abortController = this.#createAbortController();\n\n    sectionRenderer\n      .getSectionHTML(this.dataset.sectionId, false, url)\n      .then((resultsMarkup) => {\n        if (!resultsMarkup) return;\n\n        if (abortController.signal.aborted) return;\n\n        morph(predictiveSearchResults, resultsMarkup);\n\n        this.#resetScrollPositions();\n      })\n      .catch((error) => {\n        if (abortController.signal.aborted) return;\n        throw error;\n      });\n  }\n\n  /**\n   * Fetch the markup for the recently viewed products.\n   * @returns {Promise<string | null>} The markup for the recently viewed products.\n   */\n  async #getRecentlyViewedProductsMarkup() {\n    if (!this.dataset.sectionId) return null;\n\n    const viewedProducts = RecentlyViewed.getProducts();\n    if (viewedProducts.length === 0) return null;\n\n    const url = new URL(Theme.routes.search_url, location.origin);\n    url.searchParams.set('q', viewedProducts.map(/** @param {string} id */ (id) => `id:${id}`).join(' OR '));\n    url.searchParams.set('resources[type]', 'product');\n\n    return sectionRenderer.getSectionHTML(this.dataset.sectionId, false, url);\n  }\n\n  #hideResetButton() {\n    const { resetButton } = this.refs;\n\n    resetButton.hidden = true;\n  }\n\n  #showResetButton() {\n    const { resetButton } = this.refs;\n\n    resetButton.hidden = false;\n  }\n\n  #createAbortController() {\n    const abortController = new AbortController();\n    if (this.#activeFetch) {\n      this.#activeFetch.abort();\n    }\n    this.#activeFetch = abortController;\n    return abortController;\n  }\n\n  #resetSearch = async () => {\n    const { predictiveSearchResults, searchInput } = this.refs;\n    const emptySectionId = 'predictive-search-empty';\n\n    this.#currentIndex = -1;\n    searchInput.value = '';\n    this.#hideResetButton();\n\n    const abortController = this.#createAbortController();\n    const url = new URL(window.location.href);\n    url.searchParams.delete('page');\n\n    const emptySectionMarkup = await sectionRenderer.getSectionHTML(emptySectionId, false, url);\n    const parsedEmptySectionMarkup = new DOMParser()\n      .parseFromString(emptySectionMarkup, 'text/html')\n      .querySelector('.predictive-search-empty-section');\n\n    if (!parsedEmptySectionMarkup) throw new Error('No empty section markup found');\n\n    /** This needs to be awaited and not .then so the DOM is already morphed\n     * when #closeResults is called and therefore the height is animated */\n    const viewedProducts = RecentlyViewed.getProducts();\n\n    if (viewedProducts.length > 0) {\n      const recentlyViewedMarkup = await this.#getRecentlyViewedProductsMarkup();\n      if (!recentlyViewedMarkup) return;\n\n      const parsedRecentlyViewedMarkup = new DOMParser().parseFromString(recentlyViewedMarkup, 'text/html');\n      const recentlyViewedProductsHtml = parsedRecentlyViewedMarkup.getElementById('predictive-search-products');\n      if (!recentlyViewedProductsHtml) return;\n\n      for (const child of recentlyViewedProductsHtml.children) {\n        if (child instanceof HTMLElement) {\n          child.setAttribute('ref', 'recentlyViewedWrapper');\n        }\n      }\n\n      const collectionElement = parsedEmptySectionMarkup.querySelector('#predictive-search-products');\n      if (!collectionElement) return;\n      collectionElement.prepend(...recentlyViewedProductsHtml.children);\n    }\n\n    if (abortController.signal.aborted) return;\n\n    morph(predictiveSearchResults, parsedEmptySectionMarkup);\n    this.#resetScrollPositions();\n  };\n}\n\nif (!customElements.get('predictive-search-component')) {\n  customElements.define('predictive-search-component', PredictiveSearchComponent);\n}\n"
  },
  {
    "path": "assets/price-per-item.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents } from '@theme/events';\n\n/**\n * Displays dynamic per-item pricing based on quantity and volume pricing tiers.\n * Updates automatically when quantity changes or cart is updated.\n *\n * @typedef {Object} PriceBreak\n * @property {number} quantity - Minimum quantity for this price tier\n * @property {string} price - Formatted price string (e.g., \"$9.50 USD\")\n *\n * @typedef {Object} PricePerItemRefs\n * @property {HTMLElement} [pricePerItemText] - The text element displaying the price\n *\n * @extends {Component<PricePerItemRefs>}\n */\nclass PricePerItemComponent extends Component {\n  /** @type {PriceBreak[]} */\n  #priceBreaks = [];\n  #abortController = new AbortController();\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#parsePriceBreaks();\n    this.#attachEventListeners();\n    this.#updatePriceDisplay();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#abortController.abort();\n  }\n\n  /**\n   * Parses price breaks from data attributes\n   */\n  #parsePriceBreaks() {\n    const minQuantity = parseInt(this.dataset.minQuantity || '') || 1;\n    const { variantPrice, priceBreaks: priceBreaksData } = this.dataset;\n\n    // Start with base price tier\n    if (variantPrice) {\n      this.#priceBreaks.push({ quantity: minQuantity, price: variantPrice });\n    }\n\n    // Parse additional price breaks from JSON array\n    if (priceBreaksData) {\n      const breaks = JSON.parse(priceBreaksData);\n      for (const { quantity, price } of breaks) {\n        if (quantity && price) {\n          this.#priceBreaks.push({ quantity: parseInt(quantity), price });\n        }\n      }\n    }\n\n    // Sort by quantity descending for efficient lookup\n    this.#priceBreaks.sort((a, b) => b.quantity - a.quantity);\n  }\n\n  /**\n   * Attaches event listeners for quantity and cart updates\n   */\n  #attachEventListeners() {\n    const { signal } = this.#abortController;\n\n    // Listen on document to catch all events (more reliable than form-only)\n    document.addEventListener(ThemeEvents.quantitySelectorUpdate, this.#handleQuantityUpdate, { signal });\n    document.addEventListener(ThemeEvents.cartUpdate, this.#handleCartUpdate, { signal });\n  }\n\n  /**\n   * Handles quantity selector updates\n   * @param {Event} event\n   */\n  #handleQuantityUpdate = (event) => {\n    // Only respond to updates for our variant's quantity selector\n    const form = this.closest('product-form-component');\n    if (!form || !(event.target instanceof Node) || !form.contains(event.target)) return;\n\n    this.#updatePriceDisplay();\n  };\n\n  /**\n   * Handles cart updates by refreshing display\n   */\n  #handleCartUpdate = () => {\n    this.#updatePriceDisplay();\n  };\n\n  /**\n   * Gets the total quantity (cart + current input value)\n   * @returns {number}\n   */\n  #getCurrentQuantity() {\n    const form = this.closest('product-form-component');\n    const quantityInput = /** @type {HTMLInputElement | null} */ (form?.querySelector('input[name=\"quantity\"]'));\n    if (!quantityInput) return 1;\n\n    // Read the current cart quantity from the data attribute\n    const cartQty = parseInt(quantityInput.getAttribute('data-cart-quantity') || '0') || 0;\n    // Read the current input value (quantity to add)\n    const inputQty = parseInt(quantityInput.value) || 1;\n\n    return cartQty + inputQty;\n  }\n\n  /**\n   * Updates the price display based on current quantity\n   */\n  updatePriceDisplay() {\n    if (!this.#priceBreaks.length || !this.refs.pricePerItemText) return;\n\n    const quantity = this.#getCurrentQuantity();\n\n    // Price breaks are sorted descending, find first tier that quantity qualifies for\n    const priceBreak =\n      this.#priceBreaks.find((pb) => quantity >= pb.quantity) ?? this.#priceBreaks[this.#priceBreaks.length - 1];\n\n    if (priceBreak) {\n      this.refs.pricePerItemText.innerHTML = `${this.dataset.atText} ${priceBreak.price}/${this.dataset.eachText}`;\n    }\n  }\n\n  /**\n   * Private wrapper for event handlers\n   */\n  #updatePriceDisplay = () => {\n    this.updatePriceDisplay();\n  };\n}\n\nif (!customElements.get('price-per-item')) {\n  customElements.define('price-per-item', PricePerItemComponent);\n}\n"
  },
  {
    "path": "assets/product-card.js",
    "content": "import { OverflowList } from '@theme/overflow-list';\nimport VariantPicker from '@theme/variant-picker';\nimport { Component } from '@theme/component';\nimport { debounce, isDesktopBreakpoint, mediaQueryLarge, yieldToMainThread } from '@theme/utilities';\nimport { ThemeEvents, VariantSelectedEvent, VariantUpdateEvent, SlideshowSelectEvent } from '@theme/events';\nimport { morph } from '@theme/morph';\n\n/**\n * @typedef {object} ProductCardLinkRefs\n * @property {HTMLElement} [cardGallery] - The card gallery element.\n * @property {HTMLImageElement[]} [imagesToTransition] - The images to transition.\n */\n\n/**\n * A custom element for product links with images for transitions to PDP.\n * This is a base class that is extended by ProductCard.\n * Used directly by resource-card.liquid for non-product-card scenarios.\n *\n * @template {ProductCardLinkRefs} [T=ProductCardLinkRefs]\n * @extends {Component<T>}\n */\nexport class ProductCardLink extends Component {\n  get productTransitionEnabled() {\n    return this.getAttribute('data-product-transition') === 'true';\n  }\n\n  get featuredMediaUrl() {\n    return this.getAttribute('data-featured-media-url');\n  }\n\n  /**\n   * Handles the click event for view transitions.\n   * @param {Event} event\n   */\n  handleViewTransition(event) {\n    // If the event has been prevented, don't do anything, another component is handling the click\n    if (event.defaultPrevented) return;\n\n    // If the event was on an interactive element, don't do anything, this is not a navigation\n    if (event.target instanceof Element) {\n      const interactiveElement = event.target.closest('button, input, label, select, [tabindex=\"1\"]');\n      if (interactiveElement) return;\n    }\n\n    if (!this.productTransitionEnabled) return;\n\n    const { cardGallery } = this.refs;\n    if (!cardGallery || !cardGallery.hasAttribute('data-view-transition-to-main-product')) return;\n\n    // Check on the current active image, whether it's a product card image or a resource card image\n    const { imagesToTransition } = this.refs;\n    const activeImage =\n      imagesToTransition?.find(\n        (/** @type {HTMLImageElement} */ image) =>\n          image.closest('slideshow-slide')?.getAttribute('aria-hidden') === 'false'\n      ) || imagesToTransition?.[imagesToTransition.length - 1];\n\n    if (activeImage instanceof HTMLImageElement) this.#setImageSrcset(activeImage);\n\n    cardGallery.setAttribute('data-view-transition-type', 'product-image-transition');\n    cardGallery.setAttribute('data-view-transition-triggered', 'true');\n  }\n\n  /**\n   * Sets the srcset for the image\n   * @param {HTMLImageElement} image\n   */\n  #setImageSrcset(image) {\n    if (!this.featuredMediaUrl) return;\n\n    const currentImageUrl = new URL(image.currentSrc);\n\n    // Deliberately not using origin, as it includes the protocol, which is usually skipped for featured media\n    const currentImageRawUrl = currentImageUrl.host + currentImageUrl.pathname;\n\n    if (!this.featuredMediaUrl.includes(currentImageRawUrl)) {\n      const imageFade = image.animate([{ opacity: 0.8 }, { opacity: 1 }], {\n        duration: 125,\n        easing: 'ease-in-out',\n      });\n\n      imageFade.onfinish = () => {\n        image.srcset = this.featuredMediaUrl ?? '';\n      };\n    }\n  }\n}\n\nif (!customElements.get('product-card-link')) {\n  customElements.define('product-card-link', ProductCardLink);\n}\n\n/**\n * A custom element that displays a product card.\n * Extends ProductCardLink to inherit view transition functionality.\n *\n * @typedef {object} ProductCardRefs\n * @property {HTMLAnchorElement} productCardLink - The product card link element.\n * @property {import('slideshow').Slideshow} [slideshow] - The slideshow component.\n * @property {import('quick-add').QuickAddComponent} [quickAdd] - The quick add component.\n * @property {HTMLElement} [cardGallery] - The card gallery component.\n * @property {HTMLImageElement[]} [imagesToTransition] - The images to transition.\n * @extends {ProductCardLink<ProductCardRefs>}\n */\nexport class ProductCard extends ProductCardLink {\n  requiredRefs = ['productCardLink'];\n\n  get productPageUrl() {\n    return this.refs.productCardLink.href;\n  }\n\n  /**\n   * Gets the currently selected variant ID from the product card\n   * @returns {string | null} The variant ID or null if none selected\n   */\n  getSelectedVariantId() {\n    const checkedInput = /** @type {HTMLInputElement | null} */ (\n      this.querySelector('input[type=\"radio\"]:checked[data-variant-id]')\n    );\n\n    return checkedInput?.dataset.variantId || null;\n  }\n\n  /**\n   * Gets the product card link element\n   * @returns {HTMLAnchorElement | null} The product card link or null\n   */\n  getProductCardLink() {\n    return this.refs.productCardLink || null;\n  }\n\n  #fetchProductPageHandler = () => {\n    this.refs.quickAdd?.fetchProductPage(this.productPageUrl);\n  };\n\n  /**\n   * Navigates to a URL link. Respects modifier keys for opening in new tab/window.\n   * @param {Event} event - The event that triggered the navigation.\n   * @param {URL} url - The URL to navigate to.\n   */\n  #navigateToURL = (event, url) => {\n    // Check for modifier keys that should open in new tab/window (only for mouse events)\n    const shouldOpenInNewTab =\n      event instanceof MouseEvent && (event.metaKey || event.ctrlKey || event.shiftKey || event.button === 1);\n\n    if (shouldOpenInNewTab) {\n      event.preventDefault();\n      window.open(url.href, '_blank');\n      return;\n    } else {\n      window.location.href = url.href;\n    }\n  };\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    const link = this.refs.productCardLink;\n    if (!(link instanceof HTMLAnchorElement)) throw new Error('Product card link not found');\n    this.#handleQuickAdd();\n\n    this.addEventListener(ThemeEvents.variantUpdate, this.#handleVariantUpdate);\n    this.addEventListener(ThemeEvents.variantSelected, this.#handleVariantSelected);\n    this.addEventListener(SlideshowSelectEvent.eventName, this.#handleSlideshowSelect);\n    mediaQueryLarge.addEventListener('change', this.#handleQuickAdd);\n\n    this.addEventListener('click', this.navigateToProduct);\n\n    // Preload the next image on the slideshow to avoid white flashes on previewImage\n    setTimeout(() => {\n      if (this.refs.slideshow?.isNested) {\n        this.#preloadNextPreviewImage();\n      }\n    });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener('click', this.navigateToProduct);\n  }\n\n  #preloadNextPreviewImage() {\n    const currentSlide = this.refs.slideshow?.slides?.[this.refs.slideshow?.current];\n    currentSlide?.nextElementSibling?.querySelector('img[loading=\"lazy\"]')?.removeAttribute('loading');\n  }\n\n  /**\n   * Handles the quick add event.\n   */\n  #handleQuickAdd = () => {\n    this.removeEventListener('pointerenter', this.#fetchProductPageHandler);\n    this.removeEventListener('focusin', this.#fetchProductPageHandler);\n\n    if (isDesktopBreakpoint()) {\n      this.addEventListener('pointerenter', this.#fetchProductPageHandler);\n      this.addEventListener('focusin', this.#fetchProductPageHandler);\n    }\n  };\n\n  /**\n   * Handles the variant selected event.\n   * @param {VariantSelectedEvent} event - The variant selected event.\n   */\n  #handleVariantSelected = (event) => {\n    if (event.target !== this.variantPicker) {\n      this.variantPicker?.updateSelectedOption(event.detail.resource.id);\n    }\n  };\n\n  /**\n   * Handles the variant update event.\n   * Updates price, checks for unavailable variants, and updates product URL.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  #handleVariantUpdate = (event) => {\n    // Stop the event from bubbling up to the section, variant updates triggered from product cards are fully handled\n    // by this component and should not affect anything outside the card.\n    event.stopPropagation();\n\n    this.updatePrice(event);\n    this.#isUnavailableVariantSelected(event);\n    this.#updateProductUrl(event);\n    this.refs.quickAdd?.fetchProductPage(this.productPageUrl);\n\n    if (event.target !== this.variantPicker) {\n      this.variantPicker?.updateVariantPicker(event.detail.data.html);\n    }\n\n    this.#updateVariantImages();\n    this.#previousSlideIndex = null;\n\n    // Remove attribute after re-rendering since a variant selection has been made\n    this.removeAttribute('data-no-swatch-selected');\n\n    // Force overflow list to reflow after variant update\n    // This fixes an issue where the overflow counter doesn't update properly in some browsers\n    this.#updateOverflowList();\n  };\n\n  /**\n   * Forces the overflow list to recalculate by dispatching a reflow event.\n   * This ensures the overflow counter displays correctly after variant updates.\n   */\n  #updateOverflowList() {\n    // Find the overflow list in the variant picker\n    const overflowList = this.querySelector('swatches-variant-picker-component overflow-list');\n    const isActiveOverflowList = overflowList?.querySelector('[slot=\"overflow\"]') ? true : false;\n    if (!overflowList || !isActiveOverflowList) return;\n\n    // Use requestAnimationFrame to ensure DOM has been updated\n    requestAnimationFrame(() => {\n      // Dispatch a reflow event to trigger recalculation\n      overflowList.dispatchEvent(\n        new CustomEvent('reflow', {\n          bubbles: true,\n          detail: {},\n        })\n      );\n    });\n  }\n\n  /**\n   * Updates the DOM with a new price.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  updatePrice(event) {\n    const priceContainer = this.querySelectorAll(`product-price [ref='priceContainer']`)[1];\n    const newPriceElement = event.detail.data.html.querySelector(`product-price [ref='priceContainer']`);\n\n    if (newPriceElement && priceContainer) {\n      morph(priceContainer, newPriceElement);\n    }\n  }\n\n  /**\n   * Updates the product URL based on the variant update event.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  #updateProductUrl(event) {\n    const responseProductCard = event.detail.data.html?.querySelector('product-card');\n    const anchorElement = responseProductCard?.querySelector('a');\n    const featuredMediaUrl = responseProductCard?.getAttribute('data-featured-media-url');\n\n    // Update the featured media URL for view transitions (inherited from ProductCardLink)\n    if (featuredMediaUrl) {\n      this.setAttribute('data-featured-media-url', featuredMediaUrl);\n    }\n\n    if (anchorElement instanceof HTMLAnchorElement) {\n      // If the href is empty, don't update the product URL eg: unavailable variant\n      if (anchorElement.getAttribute('href')?.trim() === '') return;\n\n      const productUrl = anchorElement.href;\n      const { productCardLink, productTitleLink, cardGalleryLink } = this.refs;\n\n      productCardLink.href = productUrl;\n      if (cardGalleryLink instanceof HTMLAnchorElement) {\n        cardGalleryLink.href = productUrl;\n      }\n      if (productTitleLink instanceof HTMLAnchorElement) {\n        productTitleLink.href = productUrl;\n      }\n    }\n  }\n\n  /**\n   * Checks if an unavailable variant is selected.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  #isUnavailableVariantSelected(event) {\n    const allVariants = /** @type {NodeListOf<HTMLInputElement>} */ (\n      event.detail.data.html.querySelectorAll('input:checked')\n    );\n\n    for (const variant of allVariants) {\n      this.#toggleAddToCartButton(variant.dataset.optionAvailable === 'true');\n    }\n  }\n\n  /**\n   * Toggles the add to cart button state.\n   * @param {boolean} enable - Whether to enable or disable the button.\n   */\n  #toggleAddToCartButton(enable) {\n    const addToCartButton = this.querySelector('.add-to-cart__button button');\n\n    if (addToCartButton instanceof HTMLButtonElement) {\n      addToCartButton.disabled = !enable;\n    }\n  }\n\n  /**\n   * Hide the variant images that are not for the selected variant.\n   */\n  #updateVariantImages() {\n    const { slideshow } = this.refs;\n    if (!this.variantPicker?.selectedOption) {\n      return;\n    }\n\n    const selectedImageId = this.variantPicker?.selectedOption.dataset.optionMediaId;\n\n    if (slideshow && selectedImageId) {\n      const { slides = [] } = slideshow.refs;\n\n      for (const slide of slides) {\n        if (slide.getAttribute('variant-image') == null) continue;\n\n        slide.hidden = slide.getAttribute('slide-id') !== selectedImageId;\n      }\n\n      slideshow.select({ id: selectedImageId }, undefined, { animate: false });\n    }\n  }\n\n  /**\n   * Gets all variant inputs.\n   * @returns {NodeListOf<HTMLInputElement>} All variant input elements.\n   */\n  get allVariants() {\n    return this.querySelectorAll('input[data-variant-id]');\n  }\n\n  /**\n   * Gets the variant picker component.\n   * @returns {VariantPicker | null} The variant picker component.\n   */\n  get variantPicker() {\n    return this.querySelector('swatches-variant-picker-component');\n  }\n  /** @type {number | null} */\n  #previousSlideIndex = null;\n\n  /**\n   * Handles the slideshow select event.\n   * @param {SlideshowSelectEvent} event - The slideshow select event.\n   */\n  #handleSlideshowSelect = (event) => {\n    if (event.detail.userInitiated) {\n      this.#previousSlideIndex = event.detail.index;\n    }\n  };\n\n  /**\n   * Previews a variant.\n   * @param {string} id - The id of the variant to preview.\n   */\n  previewVariant(id) {\n    const { slideshow } = this.refs;\n\n    if (!slideshow) return;\n\n    this.resetVariant.cancel();\n    slideshow.select({ id }, undefined, { animate: false });\n  }\n\n  /**\n   * Previews the next image.\n   * @param {PointerEvent} event - The pointer event.\n   */\n  previewImage(event) {\n    if (event.pointerType !== 'mouse') return;\n\n    const { slideshow } = this.refs;\n\n    if (!slideshow) return;\n\n    this.resetVariant.cancel();\n\n    if (this.#previousSlideIndex != null && this.#previousSlideIndex > 0) {\n      slideshow.select(this.#previousSlideIndex, undefined, { animate: false });\n    } else {\n      slideshow.next(undefined, { animate: false });\n      setTimeout(() => this.#preloadNextPreviewImage());\n    }\n  }\n\n  /**\n   * Resets the image to the variant image.\n   * @param {PointerEvent} event - The pointer event.\n   */\n  resetImage(event) {\n    if (event.pointerType !== 'mouse') return;\n\n    const { slideshow } = this.refs;\n\n    if (!this.variantPicker) {\n      if (!slideshow) return;\n      slideshow.previous(undefined, { animate: false });\n    } else {\n      this.#resetVariant();\n    }\n  }\n\n  /**\n   * Resets the image to the variant image.\n   */\n  #resetVariant = () => {\n    const { slideshow } = this.refs;\n\n    if (!slideshow) return;\n\n    // If we have a selected variant, always use its image\n    if (this.variantPicker?.selectedOption) {\n      const id = this.variantPicker.selectedOption.dataset.optionMediaId;\n      if (id) {\n        slideshow.select({ id }, undefined, { animate: false });\n        return;\n      }\n    }\n\n    // No variant selected - use initial slide if it's valid\n    const initialSlide = slideshow.initialSlide;\n    const slideId = initialSlide?.getAttribute('slide-id');\n    if (initialSlide && slideshow.slides?.includes(initialSlide) && slideId) {\n      slideshow.select({ id: slideId }, undefined, { animate: false });\n      return;\n    }\n\n    // No valid initial slide or selected variant - go to previous\n    slideshow.previous(undefined, { animate: false });\n  };\n\n  /**\n   * Intercepts the click event on the product card anchor, we want\n   * to use this to add an intermediate state to the history.\n   * This intermediate state captures the page we were on so that we\n   * navigate back to the same page when the user navigates back.\n   * In addition to that, it captures the product card anchor so that we\n   * have the specific product card in view.\n   *\n   * A product card can have other interactive elements like variant picker,\n   * so we do not navigate if the click was on one of those elements.\n   *\n   * @param {Event} event\n   */\n  navigateToProduct = (event) => {\n    if (!(event.target instanceof Element)) return;\n\n    // Don't navigate if this product card is marked as no-navigation (e.g., in theme editor)\n    if (this.hasAttribute('data-no-navigation')) return;\n\n    const interactiveElement = event.target.closest('button, input, label, select, [tabindex=\"1\"]');\n\n    // If the click was on an interactive element, do nothing.\n    if (interactiveElement) {\n      return;\n    }\n\n    const link = this.refs.productCardLink;\n    if (!link.href) return;\n    const linkURL = new URL(link.href);\n\n    const productCardAnchor = link.getAttribute('id');\n    if (!productCardAnchor) return;\n\n    const infiniteResultsList = this.closest('results-list[infinite-scroll=\"true\"]');\n    if (!window.Shopify.designMode && infiniteResultsList) {\n      const url = new URL(window.location.href);\n      const parent = this.closest('li');\n      url.hash = productCardAnchor;\n      if (parent && parent.dataset.page) {\n        url.searchParams.set('page', parent.dataset.page);\n      }\n\n      yieldToMainThread().then(() => {\n        history.replaceState({}, '', url.toString());\n      });\n    }\n\n    const targetLink = event.target.closest('a');\n    // Let the native navigation handle the click if it was on a link.\n    if (!targetLink) {\n      this.#navigateToURL(event, linkURL);\n    }\n  };\n\n  /**\n   * Resets the variant.\n   */\n  resetVariant = debounce(this.#resetVariant, 100);\n}\n\nif (!customElements.get('product-card')) {\n  customElements.define('product-card', ProductCard);\n}\n\n/**\n * A custom element that displays a variant picker with swatches.\n * @typedef {import('@theme/variant-picker').VariantPickerRefs & {overflowList: HTMLElement}} SwatchesRefs\n */\n\n/**\n * @extends {VariantPicker<SwatchesRefs>}\n */\nclass SwatchesVariantPickerComponent extends VariantPicker {\n  connectedCallback() {\n    super.connectedCallback();\n\n    // Cache the parent product card\n    this.parentProductCard = this.closest('product-card');\n\n    // Listen for variant updates to apply pending URL changes\n    this.addEventListener(ThemeEvents.variantUpdate, this.#handleCardVariantUrlUpdate.bind(this));\n  }\n\n  /**\n   * Updates the card URL when a variant is selected.\n   */\n  #handleCardVariantUrlUpdate() {\n    if (this.pendingVariantId && this.parentProductCard instanceof ProductCard) {\n      const currentUrl = new URL(this.parentProductCard.refs.productCardLink.href);\n      currentUrl.searchParams.set('variant', this.pendingVariantId);\n      this.parentProductCard.refs.productCardLink.href = currentUrl.toString();\n      this.pendingVariantId = null;\n    }\n  }\n\n  /**\n   * Override the variantChanged method to handle unavailable swatches with available alternatives.\n   * @param {Event} event - The variant change event.\n   */\n  variantChanged(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n\n    // Check if this is a swatch input\n    const isSwatchInput = event.target instanceof HTMLInputElement && event.target.name?.includes('-swatch');\n    const clickedSwatch = event.target;\n    const availableCount = parseInt(clickedSwatch.dataset.availableCount || '0');\n    const firstAvailableVariantId = clickedSwatch.dataset.firstAvailableOrFirstVariantId;\n\n    // For swatch inputs, check if we need special handling\n    if (isSwatchInput && availableCount > 0 && firstAvailableVariantId) {\n      // If this is an unavailable variant but there are available alternatives\n      // Prevent the default handling\n      event.stopPropagation();\n\n      // Update the selected option visually\n      this.updateSelectedOption(clickedSwatch);\n\n      // Build request URL with the first available variant\n      const productUrl = this.dataset.productUrl?.split('?')[0];\n\n      if (!productUrl) return;\n\n      const url = new URL(productUrl, window.location.origin);\n      url.searchParams.set('variant', firstAvailableVariantId);\n      url.searchParams.set('section_id', 'section-rendering-product-card');\n\n      const requestUrl = url.href;\n\n      // Store the variant ID we want to apply to the URL\n      this.pendingVariantId = firstAvailableVariantId;\n\n      // Use parent's fetch method\n      this.fetchUpdatedSection(requestUrl);\n      return;\n    }\n\n    // For all other cases, use the default behavior\n    super.variantChanged(event);\n  }\n\n  /**\n   * Shows all swatches.\n   * @param {Event} [event] - The event that triggered the show all swatches.\n   */\n  showAllSwatches(event) {\n    event?.preventDefault();\n\n    const { overflowList } = this.refs;\n\n    if (overflowList instanceof OverflowList) {\n      overflowList.showAll();\n    }\n  }\n}\n\nif (!customElements.get('swatches-variant-picker-component')) {\n  customElements.define('swatches-variant-picker-component', SwatchesVariantPickerComponent);\n}\n"
  },
  {
    "path": "assets/product-custom-property.js",
    "content": "// assets/product-custom-property.js\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {object} ProductCustomPropertyRefs\n * @property {HTMLInputElement | HTMLTextAreaElement} textInput - The text input.\n * @property {HTMLElement} characterCount - The character count element.\n */\n\n/**\n * A custom element that manages product custom properties\n * @extends Component<ProductCustomPropertyRefs>\n */\nclass ProductCustomProperty extends Component {\n  handleInput() {\n    this.#updateCharacterCount();\n  }\n\n  #updateCharacterCount() {\n    const { characterCount, textInput } = this.refs;\n    const currentLength = textInput.value.length;\n    const maxLength = textInput.maxLength;\n\n    const template = characterCount.getAttribute('data-template');\n    if (!template) return;\n\n    const updatedText = template.replace('[current]', currentLength.toString()).replace('[max]', maxLength.toString());\n\n    characterCount.textContent = updatedText;\n  }\n}\n\ncustomElements.define('product-custom-property-component', ProductCustomProperty);\n"
  },
  {
    "path": "assets/product-form.js",
    "content": "import { Component } from '@theme/component';\nimport { fetchConfig, preloadImage, onAnimationEnd, yieldToMainThread } from '@theme/utilities';\nimport { ThemeEvents, CartAddEvent, CartErrorEvent, CartUpdateEvent, VariantUpdateEvent } from '@theme/events';\nimport { cartPerformance } from '@theme/performance';\nimport { morph } from '@theme/morph';\n\n// Error message display duration - gives users time to read the message\nconst ERROR_MESSAGE_DISPLAY_DURATION = 10000;\n\n// Button re-enable delay after error - prevents rapid repeat attempts\nconst ERROR_BUTTON_REENABLE_DELAY = 1000;\n\n// Success message display duration for screen readers\nconst SUCCESS_MESSAGE_DISPLAY_DURATION = 5000;\n\n/**\n * @typedef {HTMLElement & {\n *   source: Element,\n *   destination: Element,\n *   useSourceSize: string | boolean\n * }} FlyToCart\n */\n\n/**\n * A custom element that manages an add to cart button.\n *\n * @typedef {object} AddToCartRefs\n * @property {HTMLButtonElement} addToCartButton - The add to cart button.\n * @extends Component<AddToCartRefs>\n */\nexport class AddToCartComponent extends Component {\n  requiredRefs = ['addToCartButton'];\n\n  /** @type {number[] | undefined} */\n  #resetTimeouts = /** @type {number[]} */ ([]);\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener('pointerenter', this.#preloadImage);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    if (this.#resetTimeouts) {\n      this.#resetTimeouts.forEach(/** @param {number} timeoutId */ (timeoutId) => clearTimeout(timeoutId));\n    }\n    this.removeEventListener('pointerenter', this.#preloadImage);\n  }\n\n  /**\n   * Disables the add to cart button.\n   */\n  disable() {\n    this.refs.addToCartButton.disabled = true;\n  }\n\n  /**\n   * Enables the add to cart button.\n   */\n  enable() {\n    this.refs.addToCartButton.disabled = false;\n  }\n\n  /**\n   * Handles the click event for the add to cart button.\n   * @param {MouseEvent & {target: HTMLElement}} event - The click event.\n   */\n  handleClick(event) {\n    const form = this.closest('form');\n    if (!form?.checkValidity()) return;\n\n    // Check if adding would exceed max before animating\n    const productForm = /** @type {ProductFormComponent | null} */ (this.closest('product-form-component'));\n    const quantitySelector = productForm?.refs.quantitySelector;\n    if (quantitySelector?.canAddToCart) {\n      const validation = quantitySelector.canAddToCart();\n      // Don't animate if it would exceed max\n      if (!validation.canAdd) {\n        return;\n      }\n    }\n    if (this.refs.addToCartButton.dataset.puppet !== 'true') {\n      const animationEnabled = this.dataset.addToCartAnimation === 'true';\n      if (animationEnabled && !event.target.closest('.quick-add-modal')) {\n        this.#animateFlyToCart();\n      }\n      this.animateAddToCart();\n    }\n  }\n\n  #preloadImage = () => {\n    const image = this.dataset.productVariantMedia;\n\n    if (!image) return;\n\n    preloadImage(image);\n  };\n\n  /**\n   * Animates the fly to cart animation.\n   */\n  #animateFlyToCart() {\n    const { addToCartButton } = this.refs;\n    const cartIcon = document.querySelector('.header-actions__cart-icon');\n\n    const image = this.dataset.productVariantMedia;\n\n    if (!cartIcon || !addToCartButton || !image) return;\n\n    const flyToCartElement = /** @type {FlyToCart} */ (document.createElement('fly-to-cart'));\n\n    let flyToCartClass = addToCartButton.classList.contains('quick-add__button')\n      ? 'fly-to-cart--quick'\n      : 'fly-to-cart--main';\n\n    flyToCartElement.classList.add(flyToCartClass);\n    flyToCartElement.style.setProperty('background-image', `url(${image})`);\n    flyToCartElement.style.setProperty('--start-opacity', '0');\n    flyToCartElement.source = addToCartButton;\n    flyToCartElement.destination = cartIcon;\n\n    document.body.appendChild(flyToCartElement);\n  }\n\n  /**\n   * Animates the add to cart button.\n   */\n  animateAddToCart = async function () {\n    const { addToCartButton } = this.refs;\n\n    // Initialize the array if it doesn't exist\n    if (!this.#resetTimeouts) {\n      this.#resetTimeouts = [];\n    }\n\n    // Clear all existing timeouts\n    this.#resetTimeouts.forEach(/** @param {number} timeoutId */ (timeoutId) => clearTimeout(timeoutId));\n    this.#resetTimeouts = [];\n\n    if (addToCartButton.dataset.added !== 'true') {\n      addToCartButton.dataset.added = 'true';\n    }\n\n    // The onAnimationEnd can trigger a style recalculation so we yield to the main thread first.\n    await yieldToMainThread();\n    await onAnimationEnd(addToCartButton);\n\n    // Create new timeout and store it in the array\n    const timeoutId = setTimeout(() => {\n      addToCartButton.removeAttribute('data-added');\n\n      // Remove this timeout from the array\n      const index = this.#resetTimeouts.indexOf(timeoutId);\n      if (index > -1) {\n        this.#resetTimeouts.splice(index, 1); \n      }\n    }, 800);\n\n    this.#resetTimeouts.push(timeoutId);\n  };\n}\n\nif (!customElements.get('add-to-cart-component')) {\n  customElements.define('add-to-cart-component', AddToCartComponent);\n}\n\n/**\n * A custom element that manages a product form.\n *\n * @typedef {{items: Array<{quantity: number, variant_id: number}>}} Cart\n *\n * @typedef {object} ProductFormRefs\n * @property {HTMLInputElement} variantId - The form input for submitting the variant ID.\n * @property {AddToCartComponent | undefined} addToCartButtonContainer - The add to cart button container element.\n * @property {HTMLElement | undefined} addToCartTextError - The add to cart text error.\n * @property {HTMLElement | undefined} acceleratedCheckoutButtonContainer - The accelerated checkout button container element.\n * @property {HTMLElement} liveRegion - The live region.\n * @property {HTMLElement | undefined} quantityLabelCartCount - The quantity label cart count element.\n * @property {HTMLElement | undefined} quantityRules - The quantity rules element.\n * @property {HTMLElement | undefined} productFormButtons - The product form buttons container.\n * @property {HTMLElement | undefined} volumePricing - The volume pricing component.\n * @property {any | undefined} quantitySelector - The quantity selector component.\n * @property {HTMLElement | undefined} quantitySelectorWrapper - The quantity selector wrapper element.\n * @property {HTMLElement | undefined} quantityLabel - The quantity label element.\n * @property {HTMLElement | undefined} pricePerItem - The price per item component.\n *\n * @extends Component<ProductFormRefs>\n */\nclass ProductFormComponent extends Component {\n  requiredRefs = ['variantId', 'liveRegion'];\n  #abortController = new AbortController();\n\n  /** @type {number | undefined} */\n  #timeout;\n\n  /** @type {boolean} */\n  #variantChangeInProgress = false;\n\n  /** @type {Array<{variantId: string, quantity: number}>} */\n  #addToCartQueue = [];\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { signal } = this.#abortController;\n    const target = this.closest('.shopify-section, dialog, product-card');\n    target?.addEventListener(ThemeEvents.variantUpdate, this.#onVariantUpdate, { signal });\n    target?.addEventListener(ThemeEvents.variantSelected, this.#onVariantSelected, { signal });\n\n    // Listen for cart updates to sync data-cart-quantity\n    document.addEventListener(ThemeEvents.cartUpdate, this.#onCartUpdate, { signal });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.#abortController.abort();\n  }\n\n  /**\n   * Updates quantity selector with cart data for current variant\n   * @param {Cart} cart - The cart object with items array\n   * @returns {number} The cart quantity for the current variant\n   */\n  #updateCartQuantityFromData(cart) {\n    const variantIdInput = /** @type {HTMLInputElement | null} */ (this.querySelector('input[name=\"id\"]'));\n    if (!variantIdInput?.value || !cart?.items) return 0;\n\n    const cartItem = cart.items.find((item) => item.variant_id.toString() === variantIdInput.value.toString());\n    const cartQty = cartItem ? cartItem.quantity : 0;\n\n    // Use public API to update quantity selector\n    const quantitySelector = /** @type {any | undefined} */ (this.querySelector('quantity-selector-component'));\n    if (quantitySelector?.setCartQuantity) {\n      quantitySelector.setCartQuantity(cartQty);\n    }\n\n    // Update quantity label if it exists\n    this.#updateQuantityLabel(cartQty);\n\n    return cartQty;\n  }\n\n  /**\n   * Fetches cart and updates quantity selector for current variant\n   * @returns {Promise<number>} The cart quantity for the current variant\n   */\n  async #fetchAndUpdateCartQuantity() {\n    const variantIdInput = /** @type {HTMLInputElement | null} */ (this.querySelector('input[name=\"id\"]'));\n    if (!variantIdInput?.value) return 0;\n\n    try {\n      const response = await fetch('/cart.js');\n      const cart = await response.json();\n\n      return this.#updateCartQuantityFromData(cart);\n    } catch (error) {\n      console.error('Failed to fetch cart quantity:', error);\n      return 0;\n    }\n  }\n\n  /**\n   * Updates data-cart-quantity when cart is updated from elsewhere\n   * @param {CartUpdateEvent|CartAddEvent} event\n   */\n  #onCartUpdate = async (event) => {\n    // Skip if this event came from this component\n    if (event.detail?.sourceId === this.id || event.detail?.data?.source === 'product-form-component') return;\n\n    const cart = /** @type {Cart} */ (event.detail?.resource);\n    if (cart?.items) {\n      this.#updateCartQuantityFromData(cart);\n    } else {\n      await this.#fetchAndUpdateCartQuantity();\n    }\n  };\n\n  /** @param {Event} event */\n  handleSubmit(event) {\n    event.preventDefault();\n\n    if (this.#variantChangeInProgress) {\n      const intendedVariantId = this.#getIntendedVariantId();\n      const quantity = this.#getQuantity();\n\n      if (intendedVariantId) {\n        this.#addToCartQueue.push({ variantId: intendedVariantId, quantity });\n      }\n\n      this.refs.addToCartButtonContainer?.animateAddToCart?.();\n      return;\n    }\n\n    this.#processAddToCart(undefined, undefined, event);\n  }\n\n  /** @returns {string | undefined} */\n  #getIntendedVariantId() {\n    return new URL(window.location.href).searchParams.get('variant') || this.refs.variantId?.value || undefined;\n  }\n\n  /** @returns {number} */\n  #getQuantity() {\n    return Number(this.refs.quantitySelector?.getValue?.()) || Number(this.dataset.quantityDefault) || 1;\n  }\n\n  /**\n   * @param {string} [overrideVariantId]\n   * @param {number} [overrideQuantity]\n   * @param {Event} [event]\n   */\n  #processAddToCart(overrideVariantId, overrideQuantity, event) {\n    const { addToCartTextError } = this.refs;\n\n    if (this.#timeout) clearTimeout(this.#timeout);\n\n    const allAddToCartContainers = /** @type {NodeListOf<AddToCartComponent>} */ (\n      this.querySelectorAll('add-to-cart-component')\n    );\n\n    if (!overrideVariantId) {\n      const anyButtonDisabled = Array.from(allAddToCartContainers).some(\n        (container) => container.refs.addToCartButton?.disabled\n      );\n      if (anyButtonDisabled) return;\n    }\n\n    const form = this.querySelector('form');\n    if (!form) throw new Error('Product form element missing');\n\n    if (!overrideVariantId && this.refs.quantitySelector?.canAddToCart) {\n      const validation = this.refs.quantitySelector.canAddToCart();\n\n      if (!validation.canAdd) {\n        for (const container of allAddToCartContainers) {\n          container.disable();\n        }\n\n        const errorTemplate = this.dataset.quantityErrorMax || '';\n        const errorMessage = errorTemplate.replace('{{ maximum }}', validation.maxQuantity?.toString() || '');\n        if (addToCartTextError) {\n          addToCartTextError.classList.remove('hidden');\n\n          const textNode = addToCartTextError.childNodes[2];\n          if (textNode) {\n            textNode.textContent = errorMessage;\n          } else {\n            const newTextNode = document.createTextNode(errorMessage);\n            addToCartTextError.appendChild(newTextNode);\n          }\n\n          this.#setLiveRegionText(errorMessage);\n\n          if (this.#timeout) clearTimeout(this.#timeout);\n          this.#timeout = setTimeout(() => {\n            if (!addToCartTextError) return;\n            addToCartTextError.classList.add('hidden');\n            this.#clearLiveRegionText();\n          }, ERROR_MESSAGE_DISPLAY_DURATION);\n        }\n\n        setTimeout(() => {\n          for (const container of allAddToCartContainers) {\n            container.enable();\n          }\n        }, ERROR_BUTTON_REENABLE_DELAY);\n\n        return;\n      }\n    }\n\n    const formData = new FormData(form);\n\n    if (overrideVariantId) {\n      formData.set('id', overrideVariantId);\n    }\n    if (overrideQuantity !== undefined) {\n      formData.set('quantity', overrideQuantity.toString());\n    }\n\n    const cartItemsComponents = document.querySelectorAll('cart-items-component');\n    let cartItemComponentsSectionIds = [];\n    cartItemsComponents.forEach((item) => {\n      if (item instanceof HTMLElement && item.dataset.sectionId) {\n        cartItemComponentsSectionIds.push(item.dataset.sectionId);\n      }\n      formData.append('sections', cartItemComponentsSectionIds.join(','));\n    });\n\n    const fetchCfg = fetchConfig('javascript', { body: formData });\n\n    fetch(Theme.routes.cart_add_url, {\n      ...fetchCfg,\n      headers: {\n        ...fetchCfg.headers,\n        Accept: 'text/html',\n      },\n    })\n      .then((response) => response.json())\n      .then(async (response) => {\n        if (response.status) {\n          this.dispatchEvent(\n            new CartErrorEvent(form.getAttribute('id') || '', response.message, response.description, response.errors)\n          );\n\n          if (!addToCartTextError) return;\n          addToCartTextError.classList.remove('hidden');\n\n          // Reuse the text node if the user is spam-clicking\n          const textNode = addToCartTextError.childNodes[2];\n          if (textNode) {\n            textNode.textContent = response.message;\n          } else {\n            const newTextNode = document.createTextNode(response.message);\n            addToCartTextError.appendChild(newTextNode);\n          }\n\n          // Create or get existing error live region for screen readers\n          this.#setLiveRegionText(response.message);\n\n          this.#timeout = setTimeout(() => {\n            if (!addToCartTextError) return;\n            addToCartTextError.classList.add('hidden');\n\n            // Clear the announcement\n            this.#clearLiveRegionText();\n          }, ERROR_MESSAGE_DISPLAY_DURATION);\n\n          // When we add more than the maximum amount of items to the cart, we need to dispatch a cart update event\n          // because our back-end still adds the max allowed amount to the cart.\n          this.dispatchEvent(\n            new CartAddEvent({}, this.id, {\n              didError: true,\n              source: 'product-form-component',\n              itemCount: Number(formData.get('quantity')) || Number(this.dataset.quantityDefault),\n              productId: this.dataset.productId,\n            })\n          );\n\n          return;\n        } else {\n          const id = formData.get('id');\n\n          if (addToCartTextError) {\n            addToCartTextError.classList.add('hidden');\n            addToCartTextError.removeAttribute('aria-live');\n          }\n\n          if (!id) throw new Error('Form ID is required');\n\n          // Add aria-live region to inform screen readers that the item was added\n          // Get the added text from any add-to-cart button\n          const anyAddToCartButton = allAddToCartContainers[0]?.refs.addToCartButton;\n          if (anyAddToCartButton) {\n            const addedTextElement = anyAddToCartButton.querySelector('.add-to-cart-text--added');\n            const addedText = addedTextElement?.textContent?.trim() || Theme.translations.added;\n\n            this.#setLiveRegionText(addedText);\n\n            setTimeout(() => {\n              this.#clearLiveRegionText();\n            }, SUCCESS_MESSAGE_DISPLAY_DURATION);\n          }\n\n          // Fetch the updated cart to get the actual total quantity for this variant\n          await this.#fetchAndUpdateCartQuantity();\n\n          this.dispatchEvent(\n            new CartAddEvent({}, id.toString(), {\n              source: 'product-form-component',\n              itemCount: Number(formData.get('quantity')) || Number(this.dataset.quantityDefault),\n              productId: this.dataset.productId,\n              sections: response.sections,\n            })\n          );\n        }\n      })\n      .catch((error) => {\n        console.error(error);\n      })\n      .finally(() => {\n        if (event) {\n          cartPerformance.measureFromEvent('add:user-action', event);\n        }\n      });\n  }\n\n  /** @param {Array<{variantId: string, quantity: number}>} items */\n  #processBatchAddToCart(items) {\n    if (items.length === 0) return;\n\n    const { addToCartTextError } = this.refs;\n\n    if (this.#timeout) clearTimeout(this.#timeout);\n\n    const cartItemsComponents = document.querySelectorAll('cart-items-component');\n    const cartItemComponentsSectionIds = [];\n    for (const item of cartItemsComponents) {\n      if (item instanceof HTMLElement && item.dataset.sectionId) {\n        cartItemComponentsSectionIds.push(item.dataset.sectionId);\n      }\n    }\n\n    const payload = {\n      items: items.map((item) => ({\n        id: Number(item.variantId),\n        quantity: item.quantity,\n      })),\n      sections: cartItemComponentsSectionIds.join(','),\n    };\n\n    fetch(Theme.routes.cart_add_url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n      },\n      body: JSON.stringify(payload),\n    })\n      .then((response) => response.json())\n      .then(async (response) => {\n        if (response.status) {\n          this.dispatchEvent(\n            new CartErrorEvent(this.id, response.message, response.description, response.errors)\n          );\n\n          if (addToCartTextError) {\n            addToCartTextError.classList.remove('hidden');\n            const textNode = addToCartTextError.childNodes[2];\n            if (textNode) {\n              textNode.textContent = response.message;\n            } else {\n              addToCartTextError.appendChild(document.createTextNode(response.message));\n            }\n            this.#setLiveRegionText(response.message);\n\n            this.#timeout = setTimeout(() => {\n              addToCartTextError.classList.add('hidden');\n              this.#clearLiveRegionText();\n            }, ERROR_MESSAGE_DISPLAY_DURATION);\n          }\n\n          this.dispatchEvent(\n            new CartAddEvent({}, this.id, {\n              didError: true,\n              source: 'product-form-component',\n              itemCount: items.reduce((sum, item) => sum + item.quantity, 0),\n              productId: this.dataset.productId,\n            })\n          );\n          return;\n        }\n\n        if (addToCartTextError) {\n          addToCartTextError.classList.add('hidden');\n          addToCartTextError.removeAttribute('aria-live');\n        }\n\n        const allAddToCartContainers = /** @type {NodeListOf<AddToCartComponent>} */ (\n          this.querySelectorAll('add-to-cart-component')\n        );\n        const anyAddToCartButton = allAddToCartContainers[0]?.refs.addToCartButton;\n        if (anyAddToCartButton) {\n          const addedTextElement = anyAddToCartButton.querySelector('.add-to-cart-text--added');\n          const addedText = addedTextElement?.textContent?.trim() || Theme.translations.added;\n          this.#setLiveRegionText(addedText);\n          setTimeout(() => this.#clearLiveRegionText(), SUCCESS_MESSAGE_DISPLAY_DURATION);\n        }\n\n        await this.#fetchAndUpdateCartQuantity();\n\n        const totalQuantity = items.reduce((sum, item) => sum + item.quantity, 0);\n        this.dispatchEvent(\n          new CartAddEvent({}, this.id, {\n            source: 'product-form-component',\n            itemCount: totalQuantity,\n            productId: this.dataset.productId,\n            sections: response.sections,\n          })\n        );\n      })\n      .catch((error) => {\n        console.error(error);\n      });\n  }\n\n  /**\n   * Updates the quantity label with the current cart quantity\n   * @param {number} cartQty - The quantity in cart\n   */\n  #updateQuantityLabel(cartQty) {\n    const quantityLabel = this.refs.quantityLabelCartCount;\n    if (quantityLabel) {\n      const inCartText = quantityLabel.textContent?.match(/\\((\\d+)\\s+(.+)\\)/);\n      if (inCartText && inCartText[2]) {\n        quantityLabel.textContent = `(${cartQty} ${inCartText[2]})`;\n      }\n\n      // Show/hide based on quantity\n      quantityLabel.classList.toggle('hidden', cartQty === 0);\n    }\n  }\n\n  /**\n   * @param {*} text\n   */\n  #setLiveRegionText(text) {\n    const liveRegion = this.refs.liveRegion;\n    liveRegion.textContent = text;\n  }\n\n  #clearLiveRegionText() {\n    const liveRegion = this.refs.liveRegion;\n    liveRegion.textContent = '';\n  }\n\n  /**\n   * Morphs or removes/adds an element based on current and new element states\n   * @param {Element | null | undefined} currentElement - The current element in the DOM\n   * @param {Element | null | undefined} newElement - The new element from the server response\n   * @param {Element | null} [insertReferenceElement] - Element to insert before if adding new element\n   */\n  #morphOrUpdateElement(currentElement, newElement, insertReferenceElement = null) {\n    if (currentElement && newElement) {\n      morph(currentElement, newElement);\n    } else if (currentElement && !newElement) {\n      currentElement.remove();\n    } else if (!currentElement && newElement && insertReferenceElement) {\n      insertReferenceElement.insertAdjacentElement('beforebegin', /** @type {Element} */ (newElement.cloneNode(true)));\n    }\n  }\n\n  /**\n   * @param {VariantUpdateEvent} event\n   */\n  #onVariantUpdate = async (event) => {\n    if (event.detail.data.newProduct) {\n      this.dataset.productId = event.detail.data.newProduct.id;\n    } else if (event.detail.data.productId !== this.dataset.productId) {\n      return;\n    }\n\n    const { variantId } = this.refs;\n    variantId.value = event.detail.resource?.id ?? '';\n\n    this.#variantChangeInProgress = false;\n\n    if (this.#addToCartQueue.length > 0) {\n      const queuedItems = [...this.#addToCartQueue];\n      this.#addToCartQueue = [];\n      this.#processBatchAddToCart(queuedItems);\n    }\n\n    const { addToCartButtonContainer: currentAddToCartButtonContainer, acceleratedCheckoutButtonContainer } = this.refs;\n    const currentAddToCartButton = currentAddToCartButtonContainer?.refs.addToCartButton;\n\n    // Update state and text for add-to-cart button\n    if (!currentAddToCartButtonContainer || (!currentAddToCartButton && !acceleratedCheckoutButtonContainer)) return;\n\n    // Update the button state\n    if (event.detail.resource == null || event.detail.resource.available == false) {\n      currentAddToCartButtonContainer.disable();\n    } else {\n      currentAddToCartButtonContainer.enable();\n    }\n\n    const newAddToCartButton = event.detail.data.html.querySelector('product-form-component [ref=\"addToCartButton\"]');\n    if (newAddToCartButton && currentAddToCartButton) {\n      morph(currentAddToCartButton, newAddToCartButton);\n    }\n\n    if (acceleratedCheckoutButtonContainer) {\n      if (event.detail.resource == null || event.detail.resource.available == false) {\n        acceleratedCheckoutButtonContainer?.setAttribute('hidden', 'true');\n      } else {\n        acceleratedCheckoutButtonContainer?.removeAttribute('hidden');\n      }\n    }\n\n    // Set the data attribute for the product variant media if it exists\n    if (event.detail.resource) {\n      const productVariantMedia = event.detail.resource.featured_media?.preview_image?.src;\n      if (productVariantMedia) {\n        this.refs.addToCartButtonContainer?.setAttribute(\n          'data-product-variant-media',\n          productVariantMedia + '&width=100'\n        );\n      }\n    }\n\n    // Check if quantity rules, price-per-item, or add-to-cart are appearing/disappearing (causes layout shift)\n    const {\n      quantityRules,\n      pricePerItem,\n      quantitySelector,\n      productFormButtons,\n      quantityLabel,\n      quantitySelectorWrapper,\n    } = this.refs;\n\n    // Update quantity selector's min/max/step attributes and cart quantity for the new variant\n    const newQuantityInput = /** @type {HTMLInputElement | null} */ (\n      event.detail.data.html.querySelector('quantity-selector-component input[ref=\"quantityInput\"]')\n    );\n\n    if (quantitySelector?.updateConstraints && newQuantityInput) {\n      quantitySelector.updateConstraints(newQuantityInput.min, newQuantityInput.max || null, newQuantityInput.step);\n    }\n\n    const newQuantityRules = event.detail.data.html.querySelector('.quantity-rules');\n    const isQuantityRulesChanging = !!quantityRules !== !!newQuantityRules;\n\n    const newPricePerItem = event.detail.data.html.querySelector('price-per-item');\n    const isPricePerItemChanging = !!pricePerItem !== !!newPricePerItem;\n\n    if ((isQuantityRulesChanging || isPricePerItemChanging) && quantitySelector) {\n      // Store quantity value before morphing entire container\n      const currentQuantityValue = quantitySelector.getValue?.();\n\n      const newProductFormButtons = event.detail.data.html.querySelector('.product-form-buttons');\n\n      if (productFormButtons && newProductFormButtons) {\n        morph(productFormButtons, newProductFormButtons);\n\n        // Get the NEW quantity selector after morphing and update its constraints\n        const newQuantityInputElement = /** @type {HTMLInputElement | null} */ (\n          event.detail.data.html.querySelector('quantity-selector-component input[ref=\"quantityInput\"]')\n        );\n\n        if (this.refs.quantitySelector?.updateConstraints && newQuantityInputElement && currentQuantityValue) {\n          // Temporarily set the old value so updateConstraints can snap it properly\n          this.refs.quantitySelector.setValue(currentQuantityValue);\n          // updateConstraints will snap to valid increment if needed\n          this.refs.quantitySelector.updateConstraints(\n            newQuantityInputElement.min,\n            newQuantityInputElement.max || null,\n            newQuantityInputElement.step\n          );\n        }\n      }\n    } else {\n      // Update elements individually when layout isn't changing\n      /** @type {Array<[string, HTMLElement | undefined, HTMLElement | undefined]>} */\n      const morphTargets = [\n        ['.quantity-label', quantityLabel, quantitySelector],\n        ['.quantity-rules', quantityRules, this.refs.productFormButtons],\n        ['price-per-item', pricePerItem, quantitySelectorWrapper],\n      ];\n\n      for (const [selector, currentElement, fallback] of morphTargets) {\n        this.#morphOrUpdateElement(currentElement, event.detail.data.html.querySelector(selector), fallback);\n      }\n    }\n\n    // Morph volume pricing if it exists\n    const currentVolumePricing = this.refs.volumePricing;\n    const newVolumePricing = event.detail.data.html.querySelector('volume-pricing');\n    this.#morphOrUpdateElement(currentVolumePricing, newVolumePricing, this.refs.productFormButtons);\n\n    const hasB2BFeatures =\n      quantityRules || newQuantityRules || pricePerItem || newPricePerItem || currentVolumePricing || newVolumePricing;\n\n    if (!hasB2BFeatures) return;\n\n    // Fetch and update cart quantity for the new variant\n    await this.#fetchAndUpdateCartQuantity();\n  };\n\n  /** @param {import('./events').VariantSelectedEvent} _event */\n  #onVariantSelected = (_event) => {\n    this.#variantChangeInProgress = true;\n  };\n}\n\nif (!customElements.get('product-form-component')) {\n  customElements.define('product-form-component', ProductFormComponent);\n}\n"
  },
  {
    "path": "assets/product-hotspot.js",
    "content": "import { Component } from '@theme/component';\nimport { QuickAddComponent } from '@theme/quick-add';\nimport { isClickedOutside, isMobileBreakpoint, isTouchDevice, mediaQueryLarge } from '@theme/utilities';\n\n/**\n * A custom element that manages a dialog.\n *\n * @typedef {object} Refs\n * @property {HTMLDialogElement} dialog - The dialog element.\n * @property {HTMLButtonElement} trigger - The button element.\n * @property {HTMLAnchorElement} productLink - The product link element.\n *\n * @extends Component<Refs>\n */\n\nexport class ProductHotspotComponent extends Component {\n  requiredRefs = ['trigger', 'dialog'];\n  /** @type {(() => void) | null} */\n  #pointerenterHandler = null;\n  timer = /** @type {number | null} */ (null);\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    // Set up initial event listeners based on current breakpoint\n    this.#handleBreakpointChange();\n\n    // Listen for breakpoint changes\n    mediaQueryLarge.addEventListener('change', this.#handleBreakpointChange);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    // Clean up listeners\n    this.#removeDesktopListeners();\n    mediaQueryLarge.removeEventListener('change', this.#handleBreakpointChange);\n  }\n\n  /**\n   * Open the quick-add modal\n   * @returns {void}\n   */\n  #openQuickAddModal() {\n    const quickAddComponent = /** @type {QuickAddComponent | null} */ (this.querySelector('quick-add-component'));\n\n    if (!quickAddComponent) return;\n    quickAddComponent.handleClick(new MouseEvent('click', { bubbles: true, cancelable: true }));\n  }\n\n  /**\n   * Set up desktop event listeners (hover)\n   * @returns {void}\n   */\n  #setupDesktopListeners() {\n    const { trigger, dialog } = this.refs;\n\n    /** @type {() => void} */\n    const pointerenterHandler = () => {\n      if (dialog.open) return;\n\n      this.timer = setTimeout(() => {\n        this.showDialog();\n      }, 120);\n      // Add pointerleave listener when entering trigger\n      trigger.addEventListener('pointerleave', this.#handlePointerLeave);\n    };\n\n    this.#pointerenterHandler = pointerenterHandler;\n    trigger.addEventListener('pointerenter', pointerenterHandler);\n  }\n\n  /**\n   * Remove desktop event listeners from trigger\n   * @returns {void}\n   */\n  #removeDesktopListeners() {\n    const { trigger } = this.refs;\n\n    if (this.#pointerenterHandler) {\n      trigger.removeEventListener('pointerenter', this.#pointerenterHandler);\n      trigger.removeEventListener('pointerleave', this.#handlePointerLeave);\n      this.#pointerenterHandler = null;\n    }\n\n    // Clear any pending timer\n    if (this.timer) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n  }\n\n  /**\n   * Handle breakpoint changes\n   * @returns {void}\n   */\n  #handleBreakpointChange = () => {\n    // Remove existing listeners\n    this.#removeDesktopListeners();\n\n    // Set up desktop hover listeners only (mobile uses on:click in template)\n    if (!isMobileBreakpoint()) {\n      this.#setupDesktopListeners();\n    }\n  };\n\n  /**\n   * Calculate the placement of the dialog.\n   * @returns {Promise<void> | undefined}\n   */\n  #calculateDialogPlacement() {\n    const { trigger, dialog } = this.refs;\n\n    const hotspotsContainer = this.parentElement;\n\n    if (!hotspotsContainer) {\n      return;\n    }\n\n    // Spacing constants\n    const BUTTON_GAP = 10; // Gap between button and dialog\n    const CONTAINER_GAP = 10; // Gap from container edges\n    const TOTAL_GAP = BUTTON_GAP + CONTAINER_GAP;\n\n    // Get container bounds\n    const containerRect = hotspotsContainer?.getBoundingClientRect();\n\n    // Get button dimensions\n    const triggerRect = trigger.getBoundingClientRect();\n\n    // To get dialog dimensions, we need to temporarily show it invisibly\n    // Show dialog invisibly to measure it\n    dialog.style.visibility = 'hidden';\n    dialog.style.display = 'block';\n    dialog.style.transform = 'none';\n    dialog.removeAttribute('data-placement');\n\n    const { width: dialogWidth, height: dialogHeight } = dialog.getBoundingClientRect();\n\n    // Reset dialog state\n    dialog.style.removeProperty('display');\n    dialog.style.removeProperty('visibility');\n    dialog.style.removeProperty('transform');\n    // Calculate button position relative to container\n    const buttonLeft = triggerRect.left - containerRect.left;\n    const buttonRight = triggerRect.right - containerRect.left;\n    const buttonTop = triggerRect.top - containerRect.top;\n    const buttonBottom = triggerRect.bottom - containerRect.top;\n\n    // Calculate available space\n    const spaceRight = containerRect.width - buttonRight - CONTAINER_GAP;\n    const spaceLeft = buttonLeft - CONTAINER_GAP;\n\n    // Determine horizontal placement\n    let x = 'right';\n\n    if (spaceRight >= dialogWidth + BUTTON_GAP) {\n      x = 'right';\n    } else if (spaceLeft >= dialogWidth + BUTTON_GAP) {\n      x = 'left';\n    } else {\n      x = 'center';\n    }\n\n    // Determine vertical placement\n    let y = 'bottom';\n    let verticalOffset = 0;\n\n    if (x !== 'center') {\n      let dialogStartY = buttonTop; // Default to top-aligned\n      let dialogEndY = buttonTop + dialogHeight;\n\n      if (dialogEndY > containerRect.height - CONTAINER_GAP) {\n        // If top-aligned overflows bottom\n        dialogStartY = buttonBottom - dialogHeight;\n        dialogEndY = buttonBottom;\n        y = 'top';\n\n        if (dialogStartY < CONTAINER_GAP) {\n          // If bottom-aligned overflows top\n          verticalOffset = CONTAINER_GAP - dialogStartY;\n        } else if (dialogEndY > containerRect.height - CONTAINER_GAP) {\n          // If bottom-aligned overflows bottom\n          verticalOffset = -(dialogEndY - (containerRect.height - CONTAINER_GAP));\n        }\n      } else {\n        if (dialogStartY < CONTAINER_GAP) {\n          // If top-aligned overflows top\n          if (dialogStartY < CONTAINER_GAP) {\n            verticalOffset = CONTAINER_GAP - dialogStartY;\n          }\n          y = 'bottom';\n        }\n      }\n    } else {\n      // For center horizontal: position below or above button\n      if (containerRect.height - buttonBottom >= dialogHeight + TOTAL_GAP) {\n        y = 'bottom';\n      } else if (buttonTop >= dialogHeight + TOTAL_GAP) {\n        y = 'top';\n      } else {\n        // If neither fits well, choose based on button position\n        y = buttonTop < containerRect.height / 2 ? 'bottom' : 'top';\n      }\n    }\n\n    // Set placement data attribute\n    dialog.dataset.placement = `${x},${y}`;\n\n    // Apply vertical offset if needed to keep dialog in bounds\n    if (verticalOffset !== 0) {\n      dialog.style.setProperty('--dialog-vertical-offset', `${verticalOffset}px`);\n    } else {\n      dialog.style.removeProperty('--dialog-vertical-offset');\n    }\n\n    // Return a promise that resolves after a few ticks to ensure styles are applied\n    return new Promise((resolve) => setTimeout(resolve, 100));\n  }\n\n  /**\n   * Handle pointer leave.\n   * @param {PointerEvent} e - The event.\n   * @returns {void}\n   */\n  #handlePointerLeave = (e) => {\n    const { dialog, trigger } = this.refs;\n\n    // Clear open timer if leaving trigger before dialog opens\n    if (this.timer) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n\n    if (!dialog.open) return;\n\n    const isLeavingTrigger = e.target === trigger;\n    const isLeavingDialog = e.target === dialog;\n    const isGoingToDialog =\n      e.relatedTarget === dialog ||\n      (e.relatedTarget instanceof Element && e.relatedTarget.closest('dialog') === dialog);\n    const isGoingToTrigger = e.relatedTarget === trigger;\n\n    if ((isLeavingTrigger && !isGoingToDialog) || (isLeavingDialog && !isGoingToTrigger)) {\n      this.closeDialog();\n    }\n  };\n\n  /**\n   * Get the product link for the hotspot product.\n   * @returns {HTMLAnchorElement | null} The product link or null.\n   */\n  getHotspotProductLink() {\n    return this.refs.productLink || null;\n  }\n\n  /**\n   * Handle hotspot click - on mobile/touch devices opens quick-add, on desktop opens dialog\n   * @param {MouseEvent} e - The click event\n   * @returns {void}\n   */\n  handleHotspotClick = (e) => {\n    // Check if it's a touch device (tablets) or mobile breakpoint\n    if (isMobileBreakpoint() || isTouchDevice()) {\n      e.preventDefault();\n      e.stopPropagation();\n      this.#openQuickAddModal();\n    } else {\n      this.showDialog();\n    }\n  };\n\n  showDialog = async () => {\n    const { dialog } = this.refs;\n    await this.#calculateDialogPlacement();\n    dialog.dataset.showing = 'true';\n    dialog.show();\n    document.body.addEventListener('click', this.lightDismissMouse);\n    document.body.addEventListener('keydown', this.lightDismissKeyboard);\n    document.body.addEventListener('keyup', this.lightDismissKeyboard);\n    // Add pointerleave listener to dialog when it opens\n    dialog.addEventListener('pointerleave', this.#handlePointerLeave);\n  };\n\n  /**\n   * Close the dialog.\n   * @returns {Promise<void>}\n   */\n  closeDialog = async () => {\n    const { dialog, trigger } = this.refs;\n    dialog.dataset.closing = 'true';\n    dialog.close();\n    document.body.removeEventListener('click', this.lightDismissMouse);\n    document.body.removeEventListener('keydown', this.lightDismissKeyboard);\n    document.body.removeEventListener('keyup', this.lightDismissKeyboard);\n    // Remove pointerleave listeners when closing\n    dialog.removeEventListener('pointerleave', this.#handlePointerLeave);\n    trigger.removeEventListener('pointerleave', this.#handlePointerLeave);\n    // we need to use a data-attribute to keep transition-behavior working only when open\n    const animations = dialog.getAnimations({ subtree: true });\n    await Promise.allSettled(animations.map((a) => a.finished));\n    if (!dialog.open) {\n      delete dialog.dataset.showing;\n      delete dialog.dataset.closing;\n      delete dialog.dataset.placement;\n    }\n  };\n\n  /**\n   * Light dismiss the dialog.\n   * @param {MouseEvent} event - The event.\n   * @returns {void}\n   */\n  lightDismissMouse = (event) => {\n    const { dialog } = this.refs;\n    if (isClickedOutside(event, dialog)) {\n      this.closeDialog();\n    }\n  };\n\n  /**\n   * Light dismiss the dialog.\n   * @param {KeyboardEvent} event - The event.\n   * @returns {void}\n   */\n  lightDismissKeyboard = (event) => {\n    const { dialog } = this.refs;\n    if (\n      (event.type === 'keydown' && event.key === 'Escape') ||\n      (event.type === 'keyup' && !dialog.matches(':is(:focus, :focus-visible, :focus-within)'))\n    ) {\n      this.closeDialog();\n    }\n  };\n}\n\n// Register custom element\ncustomElements.define('product-hotspot-component', ProductHotspotComponent);\n"
  },
  {
    "path": "assets/product-inventory.js",
    "content": "import { ThemeEvents, VariantUpdateEvent } from '@theme/events';\nimport { morph } from '@theme/morph';\nimport { Component } from '@theme/component';\n\nclass ProductInventory extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    const closestSection = this.closest('.shopify-section, dialog');\n    closestSection?.addEventListener(ThemeEvents.variantUpdate, this.updateInventory);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    const closestSection = this.closest('.shopify-section, dialog');\n    closestSection?.removeEventListener(ThemeEvents.variantUpdate, this.updateInventory);\n  }\n\n  /**\n   * Updates the inventory.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  updateInventory = (event) => {\n    if (event.detail.data.newProduct) {\n      this.dataset.productId = event.detail.data.newProduct.id;\n    } else if (event.target instanceof HTMLElement && event.target.dataset.productId !== this.dataset.productId) {\n      return;\n    }\n\n    const newInventory = event.detail.data.html.querySelector('product-inventory');\n\n    if (!newInventory) return;\n\n    morph(this, newInventory, { childrenOnly: true });\n  };\n}\n\nif (!customElements.get('product-inventory')) {\n  customElements.define('product-inventory', ProductInventory);\n}\n"
  },
  {
    "path": "assets/product-price.js",
    "content": "import { ThemeEvents, VariantUpdateEvent } from '@theme/events';\nimport { Component } from '@theme/component';\n\n/**\n * @typedef {Object} ProductPriceRefs\n * @property {HTMLElement} priceContainer\n * @property {HTMLElement} [volumePricingNote]\n */\n\n/**\n * A custom element that displays a product price.\n * This component listens for variant update events and updates the price display accordingly.\n * It handles price updates from two different sources:\n * 1. Variant picker (in quick add modal or product page)\n * 2. Swatches variant picker (in product cards)\n *\n * @extends {Component<ProductPriceRefs>}\n */\nclass ProductPrice extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    const closestSection = this.closest('.shopify-section, dialog');\n    if (!closestSection) return;\n    closestSection.addEventListener(ThemeEvents.variantUpdate, this.updatePrice);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    const closestSection = this.closest('.shopify-section, dialog');\n    if (!closestSection) return;\n    closestSection.removeEventListener(ThemeEvents.variantUpdate, this.updatePrice);\n  }\n\n  /**\n   * Updates the price and volume pricing note.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  updatePrice = (event) => {\n    if (event.detail.data.newProduct) {\n      this.dataset.productId = event.detail.data.newProduct.id;\n    } else if (event.target instanceof HTMLElement && event.target.dataset.productId !== this.dataset.productId) {\n      return;\n    }\n\n    const { priceContainer, volumePricingNote } = this.refs;\n    // Find the new product-price element in the updated HTML\n    const newProductPrice = event.detail.data.html.querySelector(\n      `product-price[data-block-id=\"${this.dataset.blockId}\"]`\n    );\n    if (!newProductPrice) return;\n\n    // Update price container\n    const newPrice = newProductPrice.querySelector('[ref=\"priceContainer\"]');\n    if (newPrice && priceContainer) {\n      priceContainer.replaceWith(newPrice);\n    }\n\n    // Update volume pricing note\n    const newNote = newProductPrice.querySelector('[ref=\"volumePricingNote\"]');\n\n    if (!newNote) {\n      volumePricingNote?.remove();\n    } else if (!volumePricingNote) {\n      // Use newPrice since priceContainer was just replaced and now points to the detached element\n      newPrice?.insertAdjacentElement('afterend', /** @type {Element} */ (newNote.cloneNode(true)));\n    } else {\n      volumePricingNote.replaceWith(newNote);\n    }\n  };\n}\n\nif (!customElements.get('product-price')) {\n  customElements.define('product-price', ProductPrice);\n}\n"
  },
  {
    "path": "assets/product-recommendations.js",
    "content": "import { Component } from '@theme/component';\n\nclass ProductRecommendations extends Component {\n  /**\n   * The observer for the product recommendations\n   * @type {IntersectionObserver}\n   */\n  #intersectionObserver = new IntersectionObserver(\n    (entries, observer) => {\n      if (!entries[0]?.isIntersecting) return;\n\n      observer.disconnect();\n      this.#loadRecommendations();\n    },\n    { rootMargin: '0px 0px 400px 0px' }\n  );\n\n  /**\n   * Observing changes to the elements attributes\n   * @type {MutationObserver}\n   */\n  #mutationObserver = new MutationObserver((mutations) => {\n    for (const mutation of mutations) {\n      // Only attribute changes are interesting\n      if (mutation.target !== this || mutation.type !== 'attributes') continue;\n\n      // Ignore error attribute changes\n      if (mutation.attributeName === 'data-error') continue;\n\n      // Ignore addition of hidden class because it means there's an error with the display\n      if (mutation.attributeName === 'class' && this.classList.contains('hidden')) continue;\n\n      // Ignore when the data-recommendations-performed attribute has been set to 'true'\n      if (\n        mutation.attributeName === 'data-recommendations-performed' &&\n        this.dataset.recommendationsPerformed === 'true'\n      )\n        continue;\n\n      // All other attribute changes trigger a reload\n      this.#loadRecommendations();\n      break;\n    }\n  });\n\n  /**\n   * The cached recommendations\n   * @type {Record<string, string>}\n   */\n  #cachedRecommendations = {};\n\n  /**\n   * An abort controller for the active fetch (if there is one)\n   * @type {AbortController | null}\n   */\n  #activeFetch = null;\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#intersectionObserver.observe(this);\n    this.#mutationObserver.observe(this, { attributes: true });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#intersectionObserver.disconnect();\n    this.#mutationObserver.disconnect();\n  }\n\n  /**\n   * Load the product recommendations\n   */\n  #loadRecommendations() {\n    const { productId, recommendationsPerformed, sectionId, intent } = this.dataset;\n    const id = this.id;\n\n    if (!productId || !id) {\n      throw new Error('Product ID and an ID attribute are required');\n    }\n\n    // If the recommendations have already been loaded, accounts for the case where the Theme Editor\n    // is loaded the section from the editor's visual preview context.\n    if (recommendationsPerformed === 'true') {\n      return;\n    }\n\n    this.#fetchCachedRecommendations(productId, sectionId, intent)\n      .then((result) => {\n        if (!result.success) {\n          // The Theme Editor will place a section element element in the DOM whose section_id is not available\n          // to the Section Renderer API. In this case, we can safely ignore the error.\n          if (!Shopify.designMode) {\n            this.#handleError(new Error(`Server returned ${result.status}`));\n          }\n          return;\n        }\n\n        const html = document.createElement('div');\n        html.innerHTML = result.data || '';\n        const recommendations = html.querySelector(`product-recommendations[id=\"${id}\"]`);\n\n        if (recommendations?.innerHTML && recommendations.innerHTML.trim().length) {\n          this.dataset.recommendationsPerformed = 'true';\n          this.innerHTML = recommendations.innerHTML;\n        } else {\n          this.#handleError(new Error('No recommendations available'));\n        }\n      })\n      .catch((e) => {\n        this.#handleError(e);\n      });\n  }\n\n  /**\n   * Fetches the recommendations and cached the result for future use\n   * @param {string} productId\n   * @param {string | undefined} sectionId\n   * @param {string | undefined} intent\n   * @returns {Promise<{ success: true, data: string } | { success: false, status: number }>}\n   */\n  async #fetchCachedRecommendations(productId, sectionId, intent) {\n    const url = `${this.dataset.url}&product_id=${productId}&section_id=${sectionId}&intent=${intent}`;\n\n    const cachedResponse = this.#cachedRecommendations[url];\n    if (cachedResponse) {\n      return { success: true, data: cachedResponse };\n    }\n\n    this.#activeFetch?.abort();\n    this.#activeFetch = new AbortController();\n\n    try {\n      const response = await fetch(url, { signal: this.#activeFetch.signal });\n      if (!response.ok) {\n        return { success: false, status: response.status };\n      }\n\n      const text = await response.text();\n      this.#cachedRecommendations[url] = text;\n      return { success: true, data: text };\n    } finally {\n      this.#activeFetch = null;\n    }\n  }\n\n  /**\n   * Handle errors in a consistent way\n   * @param {Error} error\n   */\n  #handleError(error) {\n    console.error('Product recommendations error:', error.message);\n    this.classList.add('hidden');\n    this.dataset.error = 'Error loading product recommendations';\n  }\n}\n\nif (!customElements.get('product-recommendations')) {\n  customElements.define('product-recommendations', ProductRecommendations);\n}\n"
  },
  {
    "path": "assets/product-sku.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents, VariantUpdateEvent } from '@theme/events';\n\n/**\n * A custom element that displays a product SKU.\n * This component listens for variant update events and updates the SKU display accordingly.\n * It handles SKU updates from two different sources:\n * 1. Variant picker (in quick add modal or product page)\n * 2. Swatches variant picker (in product cards)\n *\n * @typedef {Object} Refs\n * @property {HTMLElement} skuContainer - The container element for the SKU\n * @property {HTMLElement} sku - The span element that displays the SKU text\n *\n * @extends {Component<Refs>}\n */\nclass ProductSkuComponent extends Component {\n  requiredRefs = ['skuContainer', 'sku'];\n\n  connectedCallback() {\n    super.connectedCallback();\n    const target = this.closest('[id*=\"ProductInformation-\"], [id*=\"QuickAdd-\"], product-card');\n    if (!target) return;\n    target.addEventListener(ThemeEvents.variantUpdate, this.updateSku);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    const target = this.closest('[id*=\"ProductInformation-\"], [id*=\"QuickAdd-\"], product-card');\n    if (!target) return;\n    target.removeEventListener(ThemeEvents.variantUpdate, this.updateSku);\n  }\n\n  /**\n   * Updates the SKU.\n   * @param {VariantUpdateEvent} event - The variant update event.\n   */\n  updateSku = (event) => {\n    if (event.detail.data.newProduct) {\n      this.dataset.productId = event.detail.data.newProduct.id;\n    }\n\n    if (event.target instanceof HTMLElement && event.target.dataset.productId !== this.dataset.productId) {\n      return;\n    }\n\n    // Use the variant data from the event\n    // The variant is in event.detail.resource\n    if (event.detail.resource) {\n      const variantSku = event.detail.resource.sku || '';\n\n      if (variantSku) {\n        // Show the component and update the SKU\n        this.style.display = 'block';\n        this.refs.sku.textContent = variantSku;\n      } else {\n        // Hide the entire component when SKU is empty\n        this.style.display = 'none';\n        this.refs.sku.textContent = '';\n      }\n    }\n  };\n}\n\nif (!customElements.get('product-sku-component')) {\n  customElements.define('product-sku-component', ProductSkuComponent);\n}\n"
  },
  {
    "path": "assets/product-title-truncation.js",
    "content": "import { Component } from '@theme/component';\n\n/** @typedef {typeof globalThis} Window */\n\n/**\n * A component that handles title truncation with responsive behavior\n *\n * @typedef {Object} Refs\n * @property {HTMLElement} [text] - The text element to truncate (optional)\n *\n * @extends {Component<Refs>}\n */\nclass ProductTitle extends Component {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#initializeTruncation();\n  }\n\n  /**\n   * Initialize the title truncation\n   */\n  #initializeTruncation() {\n    if ('ResizeObserver' in window) {\n      this.resizeObserver = new ResizeObserver(() => {\n        this.#calculateTruncation();\n      });\n\n      this.resizeObserver.observe(this);\n      this.#calculateTruncation();\n    } else {\n      /** @type {Window} */\n      (window).addEventListener('resize', this.#handleResize.bind(this));\n      this.#calculateTruncation();\n    }\n  }\n\n  /**\n   * Calculate truncation for the title\n   */\n  #calculateTruncation() {\n    /** @type {HTMLElement} */\n    const textElement = this.refs.text || this.querySelector('.title-text') || this;\n    if (!textElement.textContent) return;\n\n    const containerHeight = this.clientHeight;\n\n    const computedStyle = window.getComputedStyle(this);\n    const lineHeight = parseFloat(computedStyle.lineHeight);\n    const paddingTop = parseFloat(computedStyle.paddingTop);\n    const paddingBottom = parseFloat(computedStyle.paddingBottom);\n\n    const availableHeight = containerHeight - paddingTop - paddingBottom;\n    const maxLines = Math.max(1, Math.floor(availableHeight / lineHeight));\n\n    textElement.style.display = '-webkit-box';\n    textElement.style.webkitBoxOrient = 'vertical';\n    textElement.style.overflow = 'hidden';\n    textElement.style.textOverflow = 'ellipsis';\n    textElement.style.webkitLineClamp = String(maxLines);\n  }\n\n  /**\n   * Handle window resize events\n   */\n  #handleResize() {\n    this.#calculateTruncation();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n    }\n    window.removeEventListener('resize', this.#handleResize);\n  }\n}\n\nif (!customElements.get('product-title')) {\n  customElements.define('product-title', ProductTitle);\n}\n\nexport default ProductTitle;\n"
  },
  {
    "path": "assets/qr-code-generator.js",
    "content": "/* eslint-disable no-redeclare */\n\n/**\n * @fileoverview\n * - Using the 'QRCode for Javascript library'\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\n * - this library has no dependencies.\n *\n * @author davidshimjs\n * @see http://www.d-project.com/\n * @see http://jeromeetienne.github.com/jquery-qrcode/\n */\n\nconst QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 };\nconst QRErrorCorrectLevel = {\n  L: 1,\n  M: 0,\n  Q: 3,\n  H: 2,\n};\n\nconst QRMaskPattern = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7,\n};\n\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n/**\n * QR8bitByte constructor\n *\n * @param {string} data\n */\nfunction QR8bitByte(data) {\n  this.mode = QRMode.MODE_8BIT_BYTE;\n  this.data = data;\n  this.parsedData = [];\n\n  // Added to support UTF-8 Characters\n  for (var i = 0, l = this.data.length; i < l; i++) {\n    var byteArray = [];\n    var code = this.data.charCodeAt(i);\n\n    if (code > 0x10000) {\n      byteArray[0] = 0xf0 | ((code & 0x1c0000) >>> 18);\n      byteArray[1] = 0x80 | ((code & 0x3f000) >>> 12);\n      byteArray[2] = 0x80 | ((code & 0xfc0) >>> 6);\n      byteArray[3] = 0x80 | (code & 0x3f);\n    } else if (code > 0x800) {\n      byteArray[0] = 0xe0 | ((code & 0xf000) >>> 12);\n      byteArray[1] = 0x80 | ((code & 0xfc0) >>> 6);\n      byteArray[2] = 0x80 | (code & 0x3f);\n    } else if (code > 0x80) {\n      byteArray[0] = 0xc0 | ((code & 0x7c0) >>> 6);\n      byteArray[1] = 0x80 | (code & 0x3f);\n    } else {\n      byteArray[0] = code;\n    }\n\n    this.parsedData.push(byteArray);\n  }\n\n  this.parsedData = Array.prototype.concat.apply([], this.parsedData);\n\n  if (this.parsedData.length != this.data.length) {\n    this.parsedData.unshift(191);\n    this.parsedData.unshift(187);\n    this.parsedData.unshift(239);\n  }\n}\n\nQR8bitByte.prototype = {\n  /**\n   * @returns {number}\n   */\n  getLength: function () {\n    return this.parsedData.length;\n  },\n\n  /**\n   * @param {QRBitBuffer} buffer\n   */\n  write: function (buffer) {\n    for (var i = 0, l = this.parsedData.length; i < l; i++) {\n      buffer.put(this.parsedData[i], 8);\n    }\n  },\n};\n\n/**\n * @param {number} typeNumber\n * @param {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} errorCorrectLevel\n */\nfunction QRCodeModel(typeNumber, errorCorrectLevel) {\n  this.typeNumber = typeNumber;\n  this.errorCorrectLevel = errorCorrectLevel;\n  /** @type {(boolean|null)[][]|null} */\n  this.modules = null;\n  this.moduleCount = 0;\n  /** @type {number[]|null} */\n  this.dataCache = null;\n  /** @type {QR8bitByte[]} */\n  this.dataList = [];\n}\n\nQRCodeModel.prototype = {\n  /**\n   * Add data\n   *\n   * @param {string} data\n   */\n  addData: function (data) {\n    var newData = new QR8bitByte(data);\n    this.dataList.push(newData);\n    this.dataCache = null;\n  },\n\n  /**\n   * Check if a module is dark\n   *\n   * @param {number} row\n   * @param {number} col\n   * @returns {boolean}\n   */\n  isDark: function (row, col) {\n    if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n      throw new Error(row + ',' + col);\n    }\n    if (this.modules == null) {\n      return false;\n    }\n    return this.modules[row]?.[col] ?? false;\n  },\n  getModuleCount: function () {\n    return this.moduleCount;\n  },\n  make: function () {\n    this.makeImpl(false, this.getBestMaskPattern());\n  },\n\n  /**\n   * @param {boolean} test\n   * @param {number} maskPattern\n   */\n  makeImpl: function (test, maskPattern) {\n    this.moduleCount = this.typeNumber * 4 + 17;\n    this.modules = Array.from({ length: this.moduleCount }, () => Array.from({ length: this.moduleCount }, () => null));\n\n    this.setupPositionProbePattern(0, 0);\n    this.setupPositionProbePattern(this.moduleCount - 7, 0);\n    this.setupPositionProbePattern(0, this.moduleCount - 7);\n    this.setupPositionAdjustPattern();\n    this.setupTimingPattern();\n    this.setupTypeInfo(test, maskPattern);\n    if (this.typeNumber >= 7) {\n      this.setupTypeNumber(test);\n    }\n    if (this.dataCache == null) {\n      this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n    }\n    this.mapData(this.dataCache, maskPattern);\n  },\n\n  /**\n   * @param {number} row\n   * @param {number} col\n   */\n  setupPositionProbePattern: function (row, col) {\n    if (this.modules == null) {\n      return;\n    }\n    for (var r = -1; r <= 7; r++) {\n      if (row + r <= -1 || this.moduleCount <= row + r) continue;\n      const rowR = this.modules[row + r];\n      if (rowR === undefined) continue;\n      for (var c = -1; c <= 7; c++) {\n        if (col + c <= -1 || this.moduleCount <= col + c) continue;\n        if (\n          (0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n          (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n          (2 <= r && r <= 4 && 2 <= c && c <= 4)\n        ) {\n          rowR[col + c] = true;\n        } else {\n          rowR[col + c] = false;\n        }\n      }\n    }\n  },\n  getBestMaskPattern: function () {\n    var minLostPoint = 0;\n    var pattern = 0;\n    for (var i = 0; i < 8; i++) {\n      this.makeImpl(true, i);\n      var lostPoint = QRUtil.getLostPoint(this);\n      if (i == 0 || minLostPoint > lostPoint) {\n        minLostPoint = lostPoint;\n        pattern = i;\n      }\n    }\n    return pattern;\n  },\n  setupTimingPattern: function () {\n    if (this.modules == null) {\n      return;\n    }\n    for (var r = 8; r < this.moduleCount - 8; r++) {\n      const rowR = this.modules[r];\n      if (rowR === undefined) continue;\n      if (rowR[6] != null) {\n        continue;\n      }\n      rowR[6] = r % 2 == 0;\n    }\n    for (var c = 8; c < this.moduleCount - 8; c++) {\n      const rowN = this.modules[6];\n      if (rowN === undefined) continue;\n      if (rowN[c] != null) {\n        continue;\n      }\n      rowN[c] = c % 2 == 0;\n    }\n  },\n  setupPositionAdjustPattern: function () {\n    if (this.modules == null) {\n      return;\n    }\n    var pos = QRUtil.getPatternPosition(this.typeNumber);\n    for (var i = 0; i < pos.length; i++) {\n      for (var j = 0; j < pos.length; j++) {\n        var row = pos[i];\n        var col = pos[j];\n        if (row === undefined || col === undefined) continue;\n        if (this.modules[row]?.[col] != null) {\n          continue;\n        }\n        for (var r = -2; r <= 2; r++) {\n          const rowR = this.modules[row + r];\n          if (rowR === undefined) continue;\n          for (var c = -2; c <= 2; c++) {\n            if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n              rowR[col + c] = true;\n            } else {\n              rowR[col + c] = false;\n            }\n          }\n        }\n      }\n    }\n  },\n\n  /**\n   * @param {boolean} test\n   */\n  setupTypeNumber: function (test) {\n    if (this.modules == null) {\n      return;\n    }\n    var bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n    for (var i = 0; i < 18; i++) {\n      var mod = !test && ((bits >> i) & 1) == 1;\n      var row = this.modules[Math.floor(i / 3)];\n      if (row === undefined) continue;\n      row[(i % 3) + this.moduleCount - 8 - 3] = mod;\n    }\n    for (var i = 0; i < 18; i++) {\n      var mod = !test && ((bits >> i) & 1) == 1;\n      var row = this.modules[(i % 3) + this.moduleCount - 8 - 3];\n      if (row === undefined) continue;\n      row[Math.floor(i / 3)] = mod;\n    }\n  },\n\n  /**\n   * @param {boolean} test\n   * @param {number} maskPattern\n   */\n  setupTypeInfo: function (test, maskPattern) {\n    if (this.modules == null) {\n      return;\n    }\n    var data = (this.errorCorrectLevel << 3) | maskPattern;\n    var bits = QRUtil.getBCHTypeInfo(data);\n    for (var i = 0; i < 15; i++) {\n      var mod = !test && ((bits >> i) & 1) == 1;\n      if (i < 6) {\n        var row = this.modules[i];\n        if (row === undefined) continue;\n        row[8] = mod;\n      } else if (i < 8) {\n        var row = this.modules[i + 1];\n        if (row === undefined) continue;\n        row[8] = mod;\n      } else {\n        var row = this.modules[this.moduleCount - 15 + i];\n        if (row === undefined) continue;\n        row[8] = mod;\n      }\n    }\n    for (var i = 0; i < 15; i++) {\n      var mod = !test && ((bits >> i) & 1) == 1;\n      var row = this.modules[8];\n      if (row === undefined) continue;\n      if (i < 8) {\n        row[this.moduleCount - i - 1] = mod;\n      } else if (i < 9) {\n        row[15 - i - 1 + 1] = mod;\n      } else {\n        row[15 - i - 1] = mod;\n      }\n    }\n    var row = this.modules[this.moduleCount - 8];\n    if (row === undefined) return;\n    row[8] = !test;\n  },\n\n  /**\n   * @param {number[]} data\n   * @param {number} maskPattern\n   */\n  mapData: function (data, maskPattern) {\n    if (this.modules == null) {\n      return;\n    }\n    var inc = -1;\n    var row = this.moduleCount - 1;\n    var bitIndex = 7;\n    var byteIndex = 0;\n    for (var col = this.moduleCount - 1; col > 0; col -= 2) {\n      if (col == 6) col--;\n      while (true) {\n        for (var c = 0; c < 2; c++) {\n          if (this.modules[row]?.[col - c] == null) {\n            var dark = false;\n            if (byteIndex < data.length) {\n              var dataR = data[byteIndex];\n              if (dataR !== undefined) {\n                dark = ((dataR >>> bitIndex) & 1) == 1;\n              }\n            }\n            var mask = QRUtil.getMask(maskPattern, row, col - c);\n            if (mask) {\n              dark = !dark;\n            }\n            var rowR = this.modules[row];\n            if (rowR !== undefined) {\n              rowR[col - c] = dark;\n            }\n            bitIndex--;\n            if (bitIndex == -1) {\n              byteIndex++;\n              bitIndex = 7;\n            }\n          }\n        }\n        row += inc;\n        if (row < 0 || this.moduleCount <= row) {\n          row -= inc;\n          inc = -inc;\n          break;\n        }\n      }\n    }\n  },\n};\nQRCodeModel.PAD0 = 0xec;\nQRCodeModel.PAD1 = 0x11;\n\n/**\n * @param {number} typeNumber\n * @param {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} errorCorrectLevel\n * @param {QR8bitByte[]} dataList\n */\nQRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {\n  var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n  var buffer = new QRBitBuffer();\n  for (var i = 0; i < dataList.length; i++) {\n    var data = dataList[i];\n    if (data === undefined) continue;\n    buffer.put(data.mode, 4);\n    buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));\n    data.write(buffer);\n  }\n  var totalDataCount = 0;\n  for (var i = 0; i < rsBlocks.length; i++) {\n    var rsBlock = rsBlocks[i];\n    if (rsBlock === undefined) continue;\n    totalDataCount += rsBlock.dataCount;\n  }\n  if (buffer.getLengthInBits() > totalDataCount * 8) {\n    throw new Error('code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')');\n  }\n  if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n    buffer.put(0, 4);\n  }\n  while (buffer.getLengthInBits() % 8 != 0) {\n    buffer.putBit(false);\n  }\n  while (true) {\n    if (buffer.getLengthInBits() >= totalDataCount * 8) {\n      break;\n    }\n    buffer.put(QRCodeModel.PAD0, 8);\n    if (buffer.getLengthInBits() >= totalDataCount * 8) {\n      break;\n    }\n    buffer.put(QRCodeModel.PAD1, 8);\n  }\n  return QRCodeModel.createBytes(buffer, rsBlocks);\n};\n\n/**\n * @param {QRBitBuffer} buffer\n * @param {QRRSBlock[]} rsBlocks\n */\nQRCodeModel.createBytes = function (buffer, rsBlocks) {\n  var offset = 0;\n  var maxDcCount = 0;\n  var maxEcCount = 0;\n  var dcdata = new Array(rsBlocks.length);\n  var ecdata = new Array(rsBlocks.length);\n  for (var r = 0; r < rsBlocks.length; r++) {\n    var rsBlock = rsBlocks[r];\n    if (rsBlock === undefined) continue;\n    var dcCount = rsBlock.dataCount;\n    var ecCount = rsBlock.totalCount - dcCount;\n    maxDcCount = Math.max(maxDcCount, dcCount);\n    maxEcCount = Math.max(maxEcCount, ecCount);\n    dcdata[r] = new Array(dcCount);\n    for (var i = 0; i < dcdata[r].length; i++) {\n      var dataR = buffer.buffer[i + offset];\n      if (dataR !== undefined) {\n        dcdata[r][i] = 0xff & dataR;\n      }\n    }\n    offset += dcCount;\n    var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n    var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n    var modPoly = rawPoly.mod(rsPoly);\n    ecdata[r] = new Array(rsPoly.getLength() - 1);\n    for (var i = 0; i < ecdata[r].length; i++) {\n      var modIndex = i + modPoly.getLength() - ecdata[r].length;\n      ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;\n    }\n  }\n  var totalCodeCount = 0;\n  for (var i = 0; i < rsBlocks.length; i++) {\n    var rsBlock = rsBlocks[i];\n    if (rsBlock === undefined) continue;\n    totalCodeCount += rsBlock.totalCount;\n  }\n  var data = new Array(totalCodeCount);\n  var index = 0;\n  for (var i = 0; i < maxDcCount; i++) {\n    for (var r = 0; r < rsBlocks.length; r++) {\n      if (i < dcdata[r].length) {\n        data[index++] = dcdata[r][i];\n      }\n    }\n  }\n  for (var i = 0; i < maxEcCount; i++) {\n    for (var r = 0; r < rsBlocks.length; r++) {\n      if (i < ecdata[r].length) {\n        data[index++] = ecdata[r][i];\n      }\n    }\n  }\n  return data;\n};\n\nvar QRUtil = {\n  PATTERN_POSITION_TABLE: [\n    [],\n    [6, 18],\n    [6, 22],\n    [6, 26],\n    [6, 30],\n    [6, 34],\n    [6, 22, 38],\n    [6, 24, 42],\n    [6, 26, 46],\n    [6, 28, 50],\n    [6, 30, 54],\n    [6, 32, 58],\n    [6, 34, 62],\n    [6, 26, 46, 66],\n    [6, 26, 48, 70],\n    [6, 26, 50, 74],\n    [6, 30, 54, 78],\n    [6, 30, 56, 82],\n    [6, 30, 58, 86],\n    [6, 34, 62, 90],\n    [6, 28, 50, 72, 94],\n    [6, 26, 50, 74, 98],\n    [6, 30, 54, 78, 102],\n    [6, 28, 54, 80, 106],\n    [6, 32, 58, 84, 110],\n    [6, 30, 58, 86, 114],\n    [6, 34, 62, 90, 118],\n    [6, 26, 50, 74, 98, 122],\n    [6, 30, 54, 78, 102, 126],\n    [6, 26, 52, 78, 104, 130],\n    [6, 30, 56, 82, 108, 134],\n    [6, 34, 60, 86, 112, 138],\n    [6, 30, 58, 86, 114, 142],\n    [6, 34, 62, 90, 118, 146],\n    [6, 30, 54, 78, 102, 126, 150],\n    [6, 24, 50, 76, 102, 128, 154],\n    [6, 28, 54, 80, 106, 132, 158],\n    [6, 32, 58, 84, 110, 136, 162],\n    [6, 26, 54, 82, 110, 138, 166],\n    [6, 30, 58, 86, 114, 142, 170],\n  ],\n  G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n  G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n  G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),\n\n  /**\n   * @param {number} data\n   * @returns {number}\n   */\n  getBCHTypeInfo: function (data) {\n    var d = data << 10;\n    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n      d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n    }\n    return ((data << 10) | d) ^ QRUtil.G15_MASK;\n  },\n\n  /**\n   * @param {number} data\n   * @returns {number}\n   */\n  getBCHTypeNumber: function (data) {\n    var d = data << 12;\n    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n      d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n    }\n    return (data << 12) | d;\n  },\n\n  /**\n   * @param {number} data\n   * @returns {number}\n   */\n  getBCHDigit: function (data) {\n    var digit = 0;\n    while (data != 0) {\n      digit++;\n      data >>>= 1;\n    }\n    return digit;\n  },\n\n  /**\n   * @param {number} typeNumber\n   * @returns {number[]}\n   */\n  getPatternPosition: function (typeNumber) {\n    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1] ?? [];\n  },\n\n  /**\n   * @param {number} maskPattern\n   * @param {number} i\n   * @param {number} j\n   * @returns {boolean}\n   */\n  getMask: function (maskPattern, i, j) {\n    switch (maskPattern) {\n      case QRMaskPattern.PATTERN000:\n        return (i + j) % 2 == 0;\n      case QRMaskPattern.PATTERN001:\n        return i % 2 == 0;\n      case QRMaskPattern.PATTERN010:\n        return j % 3 == 0;\n      case QRMaskPattern.PATTERN011:\n        return (i + j) % 3 == 0;\n      case QRMaskPattern.PATTERN100:\n        return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;\n      case QRMaskPattern.PATTERN101:\n        return ((i * j) % 2) + ((i * j) % 3) == 0;\n      case QRMaskPattern.PATTERN110:\n        return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n      case QRMaskPattern.PATTERN111:\n        return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n      default:\n        throw new Error('bad maskPattern:' + maskPattern);\n    }\n  },\n\n  /**\n   * @param {number} errorCorrectLength\n   * @returns {QRPolynomial}\n   */\n  getErrorCorrectPolynomial: function (errorCorrectLength) {\n    var a = new QRPolynomial([1], 0);\n    for (var i = 0; i < errorCorrectLength; i++) {\n      a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));\n    }\n    return a;\n  },\n\n  /**\n   * @param {typeof QRMode[keyof typeof QRMode]} mode\n   * @param {number} type\n   * @returns {number}\n   */\n  getLengthInBits: function (mode, type) {\n    if (1 <= type && type < 10) {\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 10;\n        case QRMode.MODE_ALPHA_NUM:\n          return 9;\n        case QRMode.MODE_8BIT_BYTE:\n          return 8;\n        case QRMode.MODE_KANJI:\n          return 8;\n        default:\n          throw new Error('mode:' + mode);\n      }\n    } else if (type < 27) {\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 12;\n        case QRMode.MODE_ALPHA_NUM:\n          return 11;\n        case QRMode.MODE_8BIT_BYTE:\n          return 16;\n        case QRMode.MODE_KANJI:\n          return 10;\n        default:\n          throw new Error('mode:' + mode);\n      }\n    } else if (type < 41) {\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 14;\n        case QRMode.MODE_ALPHA_NUM:\n          return 13;\n        case QRMode.MODE_8BIT_BYTE:\n          return 16;\n        case QRMode.MODE_KANJI:\n          return 12;\n        default:\n          throw new Error('mode:' + mode);\n      }\n    } else {\n      throw new Error('type:' + type);\n    }\n  },\n\n  /**\n   * @param {QRCodeModel} qrCode\n   * @returns {number}\n   */\n  getLostPoint: function (qrCode) {\n    var moduleCount = qrCode.getModuleCount();\n    var lostPoint = 0;\n    for (var row = 0; row < moduleCount; row++) {\n      for (var col = 0; col < moduleCount; col++) {\n        var sameCount = 0;\n        var dark = qrCode.isDark(row, col);\n        for (var r = -1; r <= 1; r++) {\n          if (row + r < 0 || moduleCount <= row + r) {\n            continue;\n          }\n          for (var c = -1; c <= 1; c++) {\n            if (col + c < 0 || moduleCount <= col + c) {\n              continue;\n            }\n            if (r == 0 && c == 0) {\n              continue;\n            }\n            if (dark == qrCode.isDark(row + r, col + c)) {\n              sameCount++;\n            }\n          }\n        }\n        if (sameCount > 5) {\n          lostPoint += 3 + sameCount - 5;\n        }\n      }\n    }\n    for (var row = 0; row < moduleCount - 1; row++) {\n      for (var col = 0; col < moduleCount - 1; col++) {\n        var count = 0;\n        if (qrCode.isDark(row, col)) count++;\n        if (qrCode.isDark(row + 1, col)) count++;\n        if (qrCode.isDark(row, col + 1)) count++;\n        if (qrCode.isDark(row + 1, col + 1)) count++;\n        if (count == 0 || count == 4) {\n          lostPoint += 3;\n        }\n      }\n    }\n    for (var row = 0; row < moduleCount; row++) {\n      for (var col = 0; col < moduleCount - 6; col++) {\n        if (\n          qrCode.isDark(row, col) &&\n          !qrCode.isDark(row, col + 1) &&\n          qrCode.isDark(row, col + 2) &&\n          qrCode.isDark(row, col + 3) &&\n          qrCode.isDark(row, col + 4) &&\n          !qrCode.isDark(row, col + 5) &&\n          qrCode.isDark(row, col + 6)\n        ) {\n          lostPoint += 40;\n        }\n      }\n    }\n    for (var col = 0; col < moduleCount; col++) {\n      for (var row = 0; row < moduleCount - 6; row++) {\n        if (\n          qrCode.isDark(row, col) &&\n          !qrCode.isDark(row + 1, col) &&\n          qrCode.isDark(row + 2, col) &&\n          qrCode.isDark(row + 3, col) &&\n          qrCode.isDark(row + 4, col) &&\n          !qrCode.isDark(row + 5, col) &&\n          qrCode.isDark(row + 6, col)\n        ) {\n          lostPoint += 40;\n        }\n      }\n    }\n    var darkCount = 0;\n    for (var col = 0; col < moduleCount; col++) {\n      for (var row = 0; row < moduleCount; row++) {\n        if (qrCode.isDark(row, col)) {\n          darkCount++;\n        }\n      }\n    }\n    var ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n    lostPoint += ratio * 10;\n    return lostPoint;\n  },\n};\nvar QRMath = {\n  /**\n   * Get the log\n   *\n   * @param {number} n\n   * @returns {number}\n   */\n  glog: function (n) {\n    if (n < 1) {\n      throw new Error('glog(' + n + ')');\n    }\n    return QRMath.LOG_TABLE[n];\n  },\n\n  /**\n   * Get the exp\n   *\n   * @param {number} n\n   * @returns {number}\n   */\n  gexp: function (n) {\n    while (n < 0) {\n      n += 255;\n    }\n    while (n >= 256) {\n      n -= 255;\n    }\n    return QRMath.EXP_TABLE[n];\n  },\n  EXP_TABLE: new Array(256),\n  LOG_TABLE: new Array(256),\n};\nfor (var i = 0; i < 8; i++) {\n  QRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n  QRMath.EXP_TABLE[i] =\n    QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n  QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n}\n\n/**\n * @param {number[]} num\n * @param {number} shift\n */\nfunction QRPolynomial(num, shift) {\n  if (num.length == undefined) {\n    throw new Error(num.length + '/' + shift);\n  }\n  var offset = 0;\n  while (offset < num.length && num[offset] == 0) {\n    offset++;\n  }\n  this.num = new Array(num.length - offset + shift);\n  for (var i = 0; i < num.length - offset; i++) {\n    this.num[i] = num[i + offset];\n  }\n}\nQRPolynomial.prototype = {\n  /**\n   * @param {number} index\n   * @returns {number}\n   */\n  get: function (index) {\n    return this.num[index];\n  },\n\n  getLength: function () {\n    return this.num.length;\n  },\n\n  /**\n   * @param {QRPolynomial} e\n   * @returns {QRPolynomial}\n   */\n  multiply: function (e) {\n    var num = new Array(this.getLength() + e.getLength() - 1);\n    for (var i = 0; i < this.getLength(); i++) {\n      for (var j = 0; j < e.getLength(); j++) {\n        num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));\n      }\n    }\n    return new QRPolynomial(num, 0);\n  },\n\n  /**\n   * @param {QRPolynomial} e\n   * @returns {QRPolynomial}\n   */\n  mod: function (e) {\n    if (this.getLength() - e.getLength() < 0) {\n      return this;\n    }\n    var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));\n    var num = new Array(this.getLength());\n    for (var i = 0; i < this.getLength(); i++) {\n      num[i] = this.get(i);\n    }\n    for (var i = 0; i < e.getLength(); i++) {\n      num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);\n    }\n    return new QRPolynomial(num, 0).mod(e);\n  },\n};\n\n/**\n * @param {number} totalCount\n * @param {number} dataCount\n */\nfunction QRRSBlock(totalCount, dataCount) {\n  this.totalCount = totalCount;\n  this.dataCount = dataCount;\n}\nQRRSBlock.RS_BLOCK_TABLE = [\n  [1, 26, 19],\n  [1, 26, 16],\n  [1, 26, 13],\n  [1, 26, 9],\n  [1, 44, 34],\n  [1, 44, 28],\n  [1, 44, 22],\n  [1, 44, 16],\n  [1, 70, 55],\n  [1, 70, 44],\n  [2, 35, 17],\n  [2, 35, 13],\n  [1, 100, 80],\n  [2, 50, 32],\n  [2, 50, 24],\n  [4, 25, 9],\n  [1, 134, 108],\n  [2, 67, 43],\n  [2, 33, 15, 2, 34, 16],\n  [2, 33, 11, 2, 34, 12],\n  [2, 86, 68],\n  [4, 43, 27],\n  [4, 43, 19],\n  [4, 43, 15],\n  [2, 98, 78],\n  [4, 49, 31],\n  [2, 32, 14, 4, 33, 15],\n  [4, 39, 13, 1, 40, 14],\n  [2, 121, 97],\n  [2, 60, 38, 2, 61, 39],\n  [4, 40, 18, 2, 41, 19],\n  [4, 40, 14, 2, 41, 15],\n  [2, 146, 116],\n  [3, 58, 36, 2, 59, 37],\n  [4, 36, 16, 4, 37, 17],\n  [4, 36, 12, 4, 37, 13],\n  [2, 86, 68, 2, 87, 69],\n  [4, 69, 43, 1, 70, 44],\n  [6, 43, 19, 2, 44, 20],\n  [6, 43, 15, 2, 44, 16],\n  [4, 101, 81],\n  [1, 80, 50, 4, 81, 51],\n  [4, 50, 22, 4, 51, 23],\n  [3, 36, 12, 8, 37, 13],\n  [2, 116, 92, 2, 117, 93],\n  [6, 58, 36, 2, 59, 37],\n  [4, 46, 20, 6, 47, 21],\n  [7, 42, 14, 4, 43, 15],\n  [4, 133, 107],\n  [8, 59, 37, 1, 60, 38],\n  [8, 44, 20, 4, 45, 21],\n  [12, 33, 11, 4, 34, 12],\n  [3, 145, 115, 1, 146, 116],\n  [4, 64, 40, 5, 65, 41],\n  [11, 36, 16, 5, 37, 17],\n  [11, 36, 12, 5, 37, 13],\n  [5, 109, 87, 1, 110, 88],\n  [5, 65, 41, 5, 66, 42],\n  [5, 54, 24, 7, 55, 25],\n  [11, 36, 12],\n  [5, 122, 98, 1, 123, 99],\n  [7, 73, 45, 3, 74, 46],\n  [15, 43, 19, 2, 44, 20],\n  [3, 45, 15, 13, 46, 16],\n  [1, 135, 107, 5, 136, 108],\n  [10, 74, 46, 1, 75, 47],\n  [1, 50, 22, 15, 51, 23],\n  [2, 42, 14, 17, 43, 15],\n  [5, 150, 120, 1, 151, 121],\n  [9, 69, 43, 4, 70, 44],\n  [17, 50, 22, 1, 51, 23],\n  [2, 42, 14, 19, 43, 15],\n  [3, 141, 113, 4, 142, 114],\n  [3, 70, 44, 11, 71, 45],\n  [17, 47, 21, 4, 48, 22],\n  [9, 39, 13, 16, 40, 14],\n  [3, 135, 107, 5, 136, 108],\n  [3, 67, 41, 13, 68, 42],\n  [15, 54, 24, 5, 55, 25],\n  [15, 43, 15, 10, 44, 16],\n  [4, 144, 116, 4, 145, 117],\n  [17, 68, 42],\n  [17, 50, 22, 6, 51, 23],\n  [19, 46, 16, 6, 47, 17],\n  [2, 139, 111, 7, 140, 112],\n  [17, 74, 46],\n  [7, 54, 24, 16, 55, 25],\n  [34, 37, 13],\n  [4, 151, 121, 5, 152, 122],\n  [4, 75, 47, 14, 76, 48],\n  [11, 54, 24, 14, 55, 25],\n  [16, 45, 15, 14, 46, 16],\n  [6, 147, 117, 4, 148, 118],\n  [6, 73, 45, 14, 74, 46],\n  [11, 54, 24, 16, 55, 25],\n  [30, 46, 16, 2, 47, 17],\n  [8, 132, 106, 4, 133, 107],\n  [8, 75, 47, 13, 76, 48],\n  [7, 54, 24, 22, 55, 25],\n  [22, 45, 15, 13, 46, 16],\n  [10, 142, 114, 2, 143, 115],\n  [19, 74, 46, 4, 75, 47],\n  [28, 50, 22, 6, 51, 23],\n  [33, 46, 16, 4, 47, 17],\n  [8, 152, 122, 4, 153, 123],\n  [22, 73, 45, 3, 74, 46],\n  [8, 53, 23, 26, 54, 24],\n  [12, 45, 15, 28, 46, 16],\n  [3, 147, 117, 10, 148, 118],\n  [3, 73, 45, 23, 74, 46],\n  [4, 54, 24, 31, 55, 25],\n  [11, 45, 15, 31, 46, 16],\n  [7, 146, 116, 7, 147, 117],\n  [21, 73, 45, 7, 74, 46],\n  [1, 53, 23, 37, 54, 24],\n  [19, 45, 15, 26, 46, 16],\n  [5, 145, 115, 10, 146, 116],\n  [19, 75, 47, 10, 76, 48],\n  [15, 54, 24, 25, 55, 25],\n  [23, 45, 15, 25, 46, 16],\n  [13, 145, 115, 3, 146, 116],\n  [2, 74, 46, 29, 75, 47],\n  [42, 54, 24, 1, 55, 25],\n  [23, 45, 15, 28, 46, 16],\n  [17, 145, 115],\n  [10, 74, 46, 23, 75, 47],\n  [10, 54, 24, 35, 55, 25],\n  [19, 45, 15, 35, 46, 16],\n  [17, 145, 115, 1, 146, 116],\n  [14, 74, 46, 21, 75, 47],\n  [29, 54, 24, 19, 55, 25],\n  [11, 45, 15, 46, 46, 16],\n  [13, 145, 115, 6, 146, 116],\n  [14, 74, 46, 23, 75, 47],\n  [44, 54, 24, 7, 55, 25],\n  [59, 46, 16, 1, 47, 17],\n  [12, 151, 121, 7, 152, 122],\n  [12, 75, 47, 26, 76, 48],\n  [39, 54, 24, 14, 55, 25],\n  [22, 45, 15, 41, 46, 16],\n  [6, 151, 121, 14, 152, 122],\n  [6, 75, 47, 34, 76, 48],\n  [46, 54, 24, 10, 55, 25],\n  [2, 45, 15, 64, 46, 16],\n  [17, 152, 122, 4, 153, 123],\n  [29, 74, 46, 14, 75, 47],\n  [49, 54, 24, 10, 55, 25],\n  [24, 45, 15, 46, 46, 16],\n  [4, 152, 122, 18, 153, 123],\n  [13, 74, 46, 32, 75, 47],\n  [48, 54, 24, 14, 55, 25],\n  [42, 45, 15, 32, 46, 16],\n  [20, 147, 117, 4, 148, 118],\n  [40, 75, 47, 7, 76, 48],\n  [43, 54, 24, 22, 55, 25],\n  [10, 45, 15, 67, 46, 16],\n  [19, 148, 118, 6, 149, 119],\n  [18, 75, 47, 31, 76, 48],\n  [34, 54, 24, 34, 55, 25],\n  [20, 45, 15, 61, 46, 16],\n];\n\n/**\n * @param {number} typeNumber\n * @param {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} errorCorrectLevel\n * @returns {QRRSBlock[]}\n */\nQRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {\n  var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n  if (rsBlock == undefined) {\n    throw new Error('bad rs block @ typeNumber:' + typeNumber + '/errorCorrectLevel:' + errorCorrectLevel);\n  }\n  var length = rsBlock.length / 3;\n  var list = [];\n  for (var i = 0; i < length; i++) {\n    var count = rsBlock[i * 3 + 0];\n    var totalCount = rsBlock[i * 3 + 1];\n    var dataCount = rsBlock[i * 3 + 2];\n    if (count === undefined || totalCount === undefined || dataCount === undefined) {\n      throw new Error('bad rs block @ typeNumber:' + typeNumber + '/errorCorrectLevel:' + errorCorrectLevel);\n    }\n    for (var j = 0; j < count; j++) {\n      list.push(new QRRSBlock(totalCount, dataCount));\n    }\n  }\n  return list;\n};\n\n/**\n * @param {number} typeNumber\n * @param {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} errorCorrectLevel\n */\nQRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {\n  switch (errorCorrectLevel) {\n    case QRErrorCorrectLevel.L:\n      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n    case QRErrorCorrectLevel.M:\n      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n    case QRErrorCorrectLevel.Q:\n      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n    case QRErrorCorrectLevel.H:\n      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n    default:\n      return undefined;\n  }\n};\nfunction QRBitBuffer() {\n  /** @type {number[]} */\n  this.buffer = [];\n  /** @type {number} */\n  this.length = 0;\n}\nQRBitBuffer.prototype = {\n  /**\n   * @param {number} index\n   * @returns {boolean}\n   */\n  get: function (index) {\n    var bufIndex = Math.floor(index / 8);\n    const bufferAtIndex = this.buffer[bufIndex];\n    if (bufferAtIndex === undefined) {\n      throw new Error('buffer index out of bounds');\n    }\n    return ((bufferAtIndex >>> (7 - (index % 8))) & 1) == 1;\n  },\n  /**\n   * @param {number} num\n   * @param {number} length\n   */\n  put: function (num, length) {\n    for (var i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n    }\n  },\n  getLengthInBits: function () {\n    return this.length;\n  },\n  /**\n   * @param {boolean} bit\n   */\n  putBit: function (bit) {\n    var bufIndex = Math.floor(this.length / 8);\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0);\n    }\n    if (bit) {\n      const bufferAtIndex = this.buffer[bufIndex];\n      if (bufferAtIndex === undefined) {\n        throw new Error('buffer index out of bounds');\n      }\n      this.buffer[bufIndex] = bufferAtIndex | (0x80 >>> this.length % 8);\n    }\n    this.length++;\n  },\n};\nvar QRCodeLimitLength = [\n  [17, 14, 11, 7],\n  [32, 26, 20, 14],\n  [53, 42, 32, 24],\n  [78, 62, 46, 34],\n  [106, 84, 60, 44],\n  [134, 106, 74, 58],\n  [154, 122, 86, 64],\n  [192, 152, 108, 84],\n  [230, 180, 130, 98],\n  [271, 213, 151, 119],\n  [321, 251, 177, 137],\n  [367, 287, 203, 155],\n  [425, 331, 241, 177],\n  [458, 362, 258, 194],\n  [520, 412, 292, 220],\n  [586, 450, 322, 250],\n  [644, 504, 364, 280],\n  [718, 560, 394, 310],\n  [792, 624, 442, 338],\n  [858, 666, 482, 382],\n  [929, 711, 509, 403],\n  [1003, 779, 565, 439],\n  [1091, 857, 611, 461],\n  [1171, 911, 661, 511],\n  [1273, 997, 715, 535],\n  [1367, 1059, 751, 593],\n  [1465, 1125, 805, 625],\n  [1528, 1190, 868, 658],\n  [1628, 1264, 908, 698],\n  [1732, 1370, 982, 742],\n  [1840, 1452, 1030, 790],\n  [1952, 1538, 1112, 842],\n  [2068, 1628, 1168, 898],\n  [2188, 1722, 1228, 958],\n  [2303, 1809, 1283, 983],\n  [2431, 1911, 1351, 1051],\n  [2563, 1989, 1423, 1093],\n  [2699, 2099, 1499, 1139],\n  [2809, 2213, 1579, 1219],\n  [2953, 2331, 1663, 1273],\n];\n\nfunction isSupportCanvas() {\n  return typeof CanvasRenderingContext2D != 'undefined';\n}\n\nvar svgDrawer = (function () {\n  /**\n   * @param {Element} el\n   * @param {QRCodeOptions} htOption\n   */\n  var Drawing = function (el, htOption) {\n    this._el = el;\n    this._htOption = htOption;\n  };\n\n  /**\n   * @param {QRCodeModel} oQRCode\n   */\n  Drawing.prototype.draw = function (oQRCode) {\n    var _htOption = this._htOption;\n    var _el = this._el;\n    var nCount = oQRCode.getModuleCount();\n\n    this.clear();\n\n    /**\n     * @param {string} tag\n     * @param {Record<string, string>} attrs\n     * @returns {SVGElement}\n     */\n    function makeSVG(tag, attrs) {\n      var el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n      for (var k in attrs) {\n        if (attrs.hasOwnProperty(k)) {\n          const value = attrs[k];\n          if (value !== undefined) {\n            el.setAttribute(k, value);\n          }\n        }\n      }\n      return el;\n    }\n\n    var svg = makeSVG('svg', {\n      viewBox: '0 0 ' + String(nCount) + ' ' + String(nCount),\n      width: '100%',\n      height: '100%',\n      fill: _htOption.colorLight,\n    });\n    svg.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n    _el.appendChild(svg);\n\n    svg.appendChild(makeSVG('rect', { fill: _htOption.colorLight, width: '100%', height: '100%' }));\n    svg.appendChild(makeSVG('rect', { fill: _htOption.colorDark, width: '1', height: '1', id: 'template' }));\n\n    for (var row = 0; row < nCount; row++) {\n      for (var col = 0; col < nCount; col++) {\n        if (oQRCode.isDark(row, col)) {\n          var child = makeSVG('use', { x: String(col), y: String(row) });\n          child.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#template');\n          svg.appendChild(child);\n        }\n      }\n    }\n  };\n  Drawing.prototype.clear = function () {\n    while (this._el.hasChildNodes() && this._el.lastChild) this._el.removeChild(this._el.lastChild);\n  };\n\n  /**\n   * @type {null|(() => void)}\n   */\n  Drawing.prototype.makeImage = null;\n  return Drawing;\n})();\n\nvar useSVG = document.documentElement.tagName.toLowerCase() === 'svg';\n\n// Drawing in DOM by using Table tag\nvar Drawing = useSVG\n  ? svgDrawer\n  : !isSupportCanvas()\n  ? (function () {\n      /**\n       * @param {Element} el\n       * @param {QRCodeOptions} htOption\n       */\n      var Drawing = function (el, htOption) {\n        this._el = el;\n        this._htOption = htOption;\n      };\n\n      /**\n       * @param {QRCodeModel} oQRCode\n       */\n      Drawing.prototype.draw = function (oQRCode) {\n        var _htOption = this._htOption;\n        var _el = this._el;\n        var nCount = oQRCode.getModuleCount();\n        var nWidth = Math.floor(_htOption.width / nCount);\n        var nHeight = Math.floor(_htOption.height / nCount);\n        var aHTML = ['<table style=\"border:0;border-collapse:collapse;\">'];\n\n        for (var row = 0; row < nCount; row++) {\n          aHTML.push('<tr>');\n\n          for (var col = 0; col < nCount; col++) {\n            aHTML.push(\n              '<td style=\"border:0;border-collapse:collapse;padding:0;margin:0;width:' +\n                nWidth +\n                'px;height:' +\n                nHeight +\n                'px;background-color:' +\n                (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) +\n                ';\"></td>'\n            );\n          }\n\n          aHTML.push('</tr>');\n        }\n\n        aHTML.push('</table>');\n        _el.innerHTML = aHTML.join('');\n\n        // Fix the margin values as real size.\n        var elTable = _el.childNodes[0];\n        if (elTable instanceof HTMLElement) {\n          var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\n          var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;\n\n          if (nLeftMarginTable > 0 && nTopMarginTable > 0) {\n            elTable.style.margin = nTopMarginTable + 'px ' + nLeftMarginTable + 'px';\n          }\n        }\n      };\n\n      Drawing.prototype.clear = function () {\n        this._el.innerHTML = '';\n      };\n\n      /**\n       * @type {null|(() => void)}\n       */\n      Drawing.prototype.makeImage = null;\n      return Drawing;\n    })()\n  : (function () {\n      // Drawing in Canvas\n      function onMakeImage() {\n        this._elImage.src = this._elCanvas.toDataURL('image/png');\n        this._elImage.style.display = 'block';\n        this._elCanvas.style.display = 'none';\n      }\n\n      /**\n       * Drawing QRCode by using canvas\n       *\n       * @constructor\n       * @param {HTMLElement} el\n       * @param {QRCodeOptions} htOption\n       */\n      var Drawing = function (el, htOption) {\n        this._bIsPainted = false;\n\n        this._htOption = htOption;\n        this._elCanvas = document.createElement('canvas');\n        this._elCanvas.width = htOption.width;\n        this._elCanvas.height = htOption.height;\n        el.appendChild(this._elCanvas);\n        this._el = el;\n        this._oContext = this._elCanvas.getContext('2d');\n        if (!this._oContext) {\n          throw new Error('Canvas is not supported');\n        }\n        this._bIsPainted = false;\n        this._elImage = document.createElement('img');\n        this._elImage.alt = htOption.alt;\n        this._elImage.style.display = 'none';\n        this._el.appendChild(this._elImage);\n        /** @type {boolean|null} */\n        this._bSupportDataURI = null;\n      };\n\n      /**\n       * Draw the QRCode\n       *\n       * @param {QRCodeModel} oQRCode\n       */\n      Drawing.prototype.draw = function (oQRCode) {\n        var _elImage = this._elImage;\n        var _oContext = this._oContext;\n        var _htOption = this._htOption;\n\n        var nCount = oQRCode.getModuleCount();\n        var nWidth = _htOption.width / nCount;\n        var nHeight = _htOption.height / nCount;\n        var nRoundedWidth = Math.round(nWidth);\n        var nRoundedHeight = Math.round(nHeight);\n\n        _elImage.style.display = 'none';\n        this.clear();\n\n        for (var row = 0; row < nCount; row++) {\n          for (var col = 0; col < nCount; col++) {\n            var bIsDark = oQRCode.isDark(row, col);\n            var nLeft = col * nWidth;\n            var nTop = row * nHeight;\n            _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\n            _oContext.lineWidth = 1;\n            _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\n            _oContext.fillRect(nLeft, nTop, nWidth, nHeight);\n\n            // Anti-aliasing prevention processing\n            _oContext.strokeRect(Math.floor(nLeft) + 0.5, Math.floor(nTop) + 0.5, nRoundedWidth, nRoundedHeight);\n\n            _oContext.strokeRect(Math.ceil(nLeft) - 0.5, Math.ceil(nTop) - 0.5, nRoundedWidth, nRoundedHeight);\n          }\n        }\n\n        this._bIsPainted = true;\n      };\n\n      /**\n       * Make the image from Canvas if the browser supports Data URI.\n       */\n      Drawing.prototype.makeImage = function () {\n        if (this._bIsPainted) {\n          this.safeSetDataURI.call(this, onMakeImage);\n        }\n      };\n\n      /**\n       * Return whether the QRCode is painted or not\n       *\n       * @return {Boolean}\n       */\n      Drawing.prototype.isPainted = function () {\n        return this._bIsPainted;\n      };\n\n      Drawing.prototype.clear = function () {\n        this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\n        this._bIsPainted = false;\n      };\n\n      /**\n       * @private\n       * @param {Number} nNumber\n       */\n      Drawing.prototype.round = function (nNumber) {\n        if (!nNumber) {\n          return nNumber;\n        }\n\n        return Math.floor(nNumber * 1000) / 1000;\n      };\n\n      /**\n       * Check whether the user's browser supports Data URI or not\n       *\n       * @param {Function} fSuccess Occurs if it supports Data URI\n       * @param {Function} fFail Occurs if it doesn't support Data URI\n       */\n      Drawing.prototype.safeSetDataURI = function (fSuccess, fFail) {\n        var self = this;\n        self._fFail = fFail;\n        self._fSuccess = fSuccess;\n\n        // Check it just once\n        if (self._bSupportDataURI === null) {\n          var el = document.createElement('img');\n          var fOnError = function () {\n            self._bSupportDataURI = false;\n\n            if (self._fFail) {\n              self._fFail.call(self);\n            }\n          };\n          var fOnSuccess = function () {\n            self._bSupportDataURI = true;\n\n            if (self._fSuccess) {\n              self._fSuccess.call(self);\n            }\n          };\n\n          el.onabort = fOnError;\n          el.onerror = fOnError;\n          el.onload = fOnSuccess;\n          el.src =\n            'data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='; // the Image contains 1px data.\n          return;\n        } else if (self._bSupportDataURI === true && self._fSuccess) {\n          self._fSuccess.call(self);\n        } else if (self._bSupportDataURI === false && self._fFail) {\n          self._fFail.call(self);\n        }\n      };\n\n      return Drawing;\n    })();\n\n/**\n * Get the type by string length\n *\n * @private\n * @param {String} sText\n * @param {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} nCorrectLevel\n * @return {Number} type\n */\nfunction getTypeNumber(sText, nCorrectLevel) {\n  var nType = 1;\n  var length = getUTF8Length(sText);\n\n  for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\n    const QRCodeLimitLengthAtIndex = QRCodeLimitLength[i];\n    if (QRCodeLimitLengthAtIndex === undefined) {\n      throw new Error('QRCodeLimitLength index out of bounds');\n    }\n\n    /** @type {number|undefined} */\n    var nLimit = 0;\n\n    switch (nCorrectLevel) {\n      case QRErrorCorrectLevel.L:\n        nLimit = QRCodeLimitLengthAtIndex[0];\n        break;\n      case QRErrorCorrectLevel.M:\n        nLimit = QRCodeLimitLengthAtIndex[1];\n        break;\n      case QRErrorCorrectLevel.Q:\n        nLimit = QRCodeLimitLengthAtIndex[2];\n        break;\n      case QRErrorCorrectLevel.H:\n        nLimit = QRCodeLimitLengthAtIndex[3];\n        break;\n    }\n\n    if (nLimit === undefined) {\n      throw new Error('QRCodeLimitLength index out of bounds');\n    }\n\n    if (length <= nLimit) {\n      break;\n    } else {\n      nType++;\n    }\n  }\n\n  if (nType > QRCodeLimitLength.length) {\n    throw new Error('Too long data');\n  }\n\n  return nType;\n}\n\n/**\n * @param {string} sText\n * @returns {number}\n */\nfunction getUTF8Length(sText) {\n  const replacedText = encodeURI(sText)\n    .toString()\n    .replace(/\\%[0-9a-fA-F]{2}/g, 'a');\n\n  // If the encoded and replaced text length differs from original,\n  // it means we have non-ASCII characters, so add 3 bytes for UTF-8 BOM\n  const bomLength = replacedText.length !== sText.length ? 3 : 0;\n\n  return replacedText.length + bomLength;\n}\n\n/**\n * @param {String} sText link data\n */\nQRCode.prototype.makeCode = function (sText) {\n  this._oQRCode = new QRCodeModel(getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\n  this._oQRCode.addData(sText);\n  this._oQRCode.make();\n  this._el.title = sText;\n  this._oDrawing.draw(this._oQRCode);\n  this.makeImage();\n};\n\n/**\n * Make the Image from Canvas element\n * - It occurs automatically\n */\nQRCode.prototype.makeImage = function () {\n  // The makeImage method exists only in the canvas-based Drawing implementation but not in the SVG or table-based implementations\n  const drawing = this._oDrawing;\n  if (typeof drawing.makeImage == 'function') {\n    drawing.makeImage();\n  }\n};\n\nQRCode.prototype.clear = function () {\n  this._oDrawing.clear();\n};\n\n/**\n * @name QRCode.CorrectLevel\n */\nQRCode.CorrectLevel = QRErrorCorrectLevel;\n\n/**\n * @class QRCode\n * @constructor\n * @example\n * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\n *\n * @example\n * var oQRCode = new QRCode(\"test\", {\n *    text : \"http://naver.com\",\n *    width : 128,\n *    height : 128\n * });\n *\n * oQRCode.clear(); // Clear the QRCode.\n * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\n *\n * @typedef {Object} QRCodeOptions\n * @property {string} text  QRCode link data\n * @property {number} width\n * @property {number} height\n * @property {string} alt\n * @property {number} typeNumber\n * @property {string} colorDark\n * @property {string} colorLight\n * @property {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} correctLevel\n * @property {boolean} useSVG\n *\n * QRCodeOptions, but with properties optional so its easier to pass in only the properties you want to change\n * @typedef {Object} QRCodePartialOptions\n * @property {string} [text]  QRCode link data\n * @property {number} [width]\n * @property {number} [height]\n * @property {string} [alt]\n * @property {number} [typeNumber]\n * @property {string} [colorDark]\n * @property {string} [colorLight]\n * @property {typeof QRErrorCorrectLevel[keyof typeof QRErrorCorrectLevel]} [correctLevel]\n * @property {boolean} [useSVG]\n * @param {HTMLElement|String} el target element or 'id' attribute of element.\n * @param {QRCodePartialOptions|String} vOption\n */\nexport function QRCode(el, vOption) {\n  /**\n   * @type {QRCodeOptions}\n   */\n  const defaultOptions = {\n    text: '',\n    alt: '',\n    width: 256,\n    height: 256,\n    typeNumber: 4,\n    colorDark: '#000000',\n    colorLight: '#ffffff',\n    correctLevel: QRErrorCorrectLevel.H,\n    useSVG: false,\n  };\n\n  /**\n   * @type {QRCodeOptions}\n   */\n  this._htOption = {\n    ...defaultOptions,\n    ...(typeof vOption === 'string' ? { text: vOption } : vOption),\n  };\n\n  if (typeof el == 'string') {\n    const element = document.getElementById(el);\n    if (!element) {\n      throw new Error(`Element with id ${el} not found`);\n    }\n    el = element;\n  }\n\n  if (this._htOption.useSVG) {\n    Drawing = svgDrawer;\n  }\n\n  this._el = el;\n  this._oQRCode = null;\n  this._oDrawing = new Drawing(this._el, this._htOption);\n\n  if (this._htOption.text) {\n    this.makeCode(this._htOption.text);\n  }\n}\n"
  },
  {
    "path": "assets/qr-code-image.js",
    "content": "import { QRCode } from '@theme/qr-code-generator';\nimport { Component } from '@theme/component';\n/**\n * A custom element that displays a QR code image.\n *\n * @extends {Component}\n */\nclass QRCodeImage extends Component {\n  /** @type {number} */\n  #width = 72;\n  /** @type {number} */\n  #height = 72;\n  /** @type {string} */\n  #alt = '';\n\n  connectedCallback() {\n    super.connectedCallback();\n    const widthAttribute = this.getAttribute('width') ?? '';\n    this.#width = isNaN(parseInt(widthAttribute)) ? this.#width : parseInt(widthAttribute);\n    const heightAttribute = this.getAttribute('height') ?? '';\n    this.#height = isNaN(parseInt(heightAttribute)) ? this.#height : parseInt(heightAttribute);\n    this.#alt = this.getAttribute('alt') ?? this.#alt;\n\n    new QRCode(this, {\n      text: this.getAttribute('data-identifier') || '',\n      width: this.#width,\n      height: this.#height,\n      alt: this.#alt,\n    });\n  }\n}\n\nif (!customElements.get('qr-code-image')) {\n  customElements.define('qr-code-image', QRCodeImage);\n}\n"
  },
  {
    "path": "assets/quick-add.js",
    "content": "import { morph } from '@theme/morph';\nimport { Component } from '@theme/component';\nimport { CartUpdateEvent, ThemeEvents, VariantSelectedEvent } from '@theme/events';\nimport { DialogComponent, DialogCloseEvent } from '@theme/dialog';\nimport { mediaQueryLarge, isMobileBreakpoint, getIOSVersion } from '@theme/utilities';\nimport VariantPicker from '@theme/variant-picker';\n\nexport class QuickAddComponent extends Component {\n  /** @type {AbortController | null} */\n  #abortController = null;\n  /** @type {Map<string, Element>} */\n  #cachedContent = new Map();\n  /** @type {AbortController} */\n  #cartUpdateAbortController = new AbortController();\n\n  get productPageUrl() {\n    const productCard = /** @type {import('./product-card').ProductCard | null} */ (this.closest('product-card'));\n    const hotspotProduct = /** @type {import('./product-hotspot').ProductHotspotComponent | null} */ (\n      this.closest('product-hotspot-component')\n    );\n    const productLink = productCard?.getProductCardLink() || hotspotProduct?.getHotspotProductLink();\n\n    if (!productLink?.href) return '';\n\n    const url = new URL(productLink.href);\n\n    if (url.searchParams.has('variant')) {\n      return url.toString();\n    }\n\n    const selectedVariantId = this.#getSelectedVariantId();\n    if (selectedVariantId) {\n      url.searchParams.set('variant', selectedVariantId);\n    }\n\n    return url.toString();\n  }\n\n  /**\n   * Gets the currently selected variant ID from the product card\n   * @returns {string | null} The variant ID or null\n   */\n  #getSelectedVariantId() {\n    const productCard = /** @type {import('./product-card').ProductCard | null} */ (this.closest('product-card'));\n    return productCard?.getSelectedVariantId() || null;\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    mediaQueryLarge.addEventListener('change', this.#closeQuickAddModal);\n    document.addEventListener(ThemeEvents.cartUpdate, this.#handleCartUpdate, {\n      signal: this.#cartUpdateAbortController.signal,\n    });\n    document.addEventListener(ThemeEvents.variantSelected, this.#updateQuickAddButtonState.bind(this));\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    mediaQueryLarge.removeEventListener('change', this.#closeQuickAddModal);\n    this.#abortController?.abort();\n    this.#cartUpdateAbortController.abort();\n    document.removeEventListener(ThemeEvents.variantSelected, this.#updateQuickAddButtonState.bind(this));\n  }\n\n  /**\n   * Clears the cached content when cart is updated\n   */\n  #handleCartUpdate = () => {\n    this.#cachedContent.clear();\n  };\n\n  /**\n   * Re-renders the variant picker in the quick-add modal.\n   * @param {Element} newHtml - The element to re-render.\n   */\n  #updateVariantPicker(newHtml) {\n    const modalContent = document.getElementById('quick-add-modal-content');\n    if (!modalContent) return;\n    const variantPicker = /** @type {VariantPicker} */ (modalContent.querySelector('variant-picker'));\n    variantPicker.updateVariantPicker(newHtml);\n  }\n\n  /**\n   * Handles quick add button click\n   * @param {Event} event - The click event\n   */\n  handleClick = async (event) => {\n    event.preventDefault();\n\n    const currentUrl = this.productPageUrl;\n\n    // Check if we have cached content for this URL\n    let productGrid = this.#cachedContent.get(currentUrl);\n\n    if (!productGrid) {\n      // Fetch and cache the content\n      const html = await this.fetchProductPage(currentUrl);\n      if (html) {\n        const gridElement = html.querySelector('[data-product-grid-content]');\n        if (gridElement) {\n          // Cache the cloned element to avoid modifying the original\n          productGrid = /** @type {Element} */ (gridElement.cloneNode(true));\n          this.#cachedContent.set(currentUrl, productGrid);\n        }\n      }\n    }\n\n    if (productGrid) {\n      // Use a fresh clone from the cache\n      const freshContent = /** @type {Element} */ (productGrid.cloneNode(true));\n      await this.updateQuickAddModal(freshContent);\n      this.#updateVariantPicker(productGrid);\n    }\n\n    this.#openQuickAddModal();\n  };\n\n  #resetScroll() {\n    const dialogComponent = document.getElementById('quick-add-dialog');\n    if (!(dialogComponent instanceof QuickAddDialog)) return;\n\n    const productDetails = dialogComponent.querySelector('.product-details');\n    const productMedia = dialogComponent.querySelector('.product-information__media');\n    productDetails?.scrollTo({ top: 0, behavior: 'instant' });\n    productMedia?.scrollTo({ top: 0, behavior: 'instant' });\n  }\n\n  /** @param {QuickAddDialog} dialogComponent */\n  #stayVisibleUntilDialogCloses(dialogComponent) {\n    this.toggleAttribute('stay-visible', true);\n\n    dialogComponent.addEventListener(DialogCloseEvent.eventName, () => this.toggleAttribute('stay-visible', false), {\n      once: true,\n    });\n  }\n\n  #openQuickAddModal = () => {\n    const dialogComponent = document.getElementById('quick-add-dialog');\n    if (!(dialogComponent instanceof QuickAddDialog)) return;\n\n    this.#stayVisibleUntilDialogCloses(dialogComponent);\n\n    dialogComponent.showDialog();\n\n    // is nondeterministic when the open attribute is set on the dialog element after .showDialog() is called.\n    // Waiting until the open animation starts seemed to be the most reliable metric here.\n    const dialog = dialogComponent.refs?.dialog;\n    if (!dialog) return;\n    dialog.addEventListener('animationstart', this.#resetScroll.bind(this), { once: true });\n  };\n\n  #closeQuickAddModal = () => {\n    const dialogComponent = document.getElementById('quick-add-dialog');\n    if (!(dialogComponent instanceof QuickAddDialog)) return;\n\n    dialogComponent.closeDialog();\n  };\n\n  /**\n   * Fetches the product page content\n   * @param {string} productPageUrl - The URL of the product page to fetch\n   * @returns {Promise<Document | null>}\n   */\n  async fetchProductPage(productPageUrl) {\n    if (!productPageUrl) return null;\n\n    // We use this to abort the previous fetch request if it's still pending.\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    try {\n      const response = await fetch(productPageUrl, {\n        signal: this.#abortController.signal,\n      });\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch product page: HTTP error ${response.status}`);\n      }\n\n      const responseText = await response.text();\n      const html = new DOMParser().parseFromString(responseText, 'text/html');\n\n      return html;\n    } catch (error) {\n      if (error.name === 'AbortError') {\n        return null;\n      } else {\n        throw error;\n      }\n    } finally {\n      this.#abortController = null;\n    }\n  }\n\n  /**\n   * Re-renders the variant picker.\n   * @param {Element} productGrid - The product grid element\n   */\n  async updateQuickAddModal(productGrid) {\n    const modalContent = document.getElementById('quick-add-modal-content');\n\n    if (!productGrid || !modalContent) return;\n\n    if (isMobileBreakpoint()) {\n      const productDetails = productGrid.querySelector('.product-details');\n      const productFormComponent = productGrid.querySelector('product-form-component');\n      const variantPicker = productGrid.querySelector('variant-picker');\n      const productPrice = productGrid.querySelector('product-price');\n      const productTitle = document.createElement('a');\n      productTitle.textContent = this.dataset.productTitle || '';\n\n      // Make product title as a link to the product page\n      productTitle.href = this.productPageUrl;\n\n      const productHeader = document.createElement('div');\n      productHeader.classList.add('product-header');\n\n      productHeader.appendChild(productTitle);\n      if (productPrice) {\n        productHeader.appendChild(productPrice);\n      }\n      productGrid.appendChild(productHeader);\n\n      if (variantPicker) {\n        productGrid.appendChild(variantPicker);\n      }\n      if (productFormComponent) {\n        productGrid.appendChild(productFormComponent);\n      }\n\n      productDetails?.remove();\n    }\n\n    morph(modalContent, productGrid);\n\n    this.#syncVariantSelection(modalContent);\n  }\n\n  /**\n   * Updates the quick-add button state based on whether a swatch is selected\n   * @param {VariantSelectedEvent} event - The variant selected event\n   */\n  #updateQuickAddButtonState(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n    if (event.target.closest('product-card') !== this.closest('product-card')) return;\n    const productOptionsCount = this.dataset.productOptionsCount;\n    const quickAddButton = productOptionsCount === '1' ? 'add' : 'choose';\n    this.setAttribute('data-quick-add-button', quickAddButton);\n  }\n\n  /**\n   * Syncs the variant selection from the product card to the modal\n   * @param {Element} modalContent - The modal content element\n   */\n  #syncVariantSelection(modalContent) {\n    const selectedVariantId = this.#getSelectedVariantId();\n    if (!selectedVariantId) return;\n\n    // Find and check the corresponding input in the modal\n    const modalInputs = modalContent.querySelectorAll('input[type=\"radio\"][data-variant-id]');\n    for (const input of modalInputs) {\n      if (input instanceof HTMLInputElement && input.dataset.variantId === selectedVariantId && !input.checked) {\n        input.checked = true;\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n        break;\n      }\n    }\n  }\n}\n\nif (!customElements.get('quick-add-component')) {\n  customElements.define('quick-add-component', QuickAddComponent);\n}\n\nclass QuickAddDialog extends DialogComponent {\n  #abortController = new AbortController();\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.addEventListener(ThemeEvents.cartUpdate, this.handleCartUpdate, { signal: this.#abortController.signal });\n    this.addEventListener(ThemeEvents.variantUpdate, this.#updateProductTitleLink);\n\n    this.addEventListener(DialogCloseEvent.eventName, this.#handleDialogClose);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.#abortController.abort();\n    this.removeEventListener(DialogCloseEvent.eventName, this.#handleDialogClose);\n  }\n\n  /**\n   * Closes the dialog\n   * @param {CartUpdateEvent} event - The cart update event\n   */\n  handleCartUpdate = (event) => {\n    if (event.detail.data.didError) return;\n    this.closeDialog();\n  };\n\n  #updateProductTitleLink = (/** @type {CustomEvent} */ event) => {\n    const anchorElement = /** @type {HTMLAnchorElement} */ (\n      event.detail.data.html?.querySelector('.view-product-title a')\n    );\n    const viewMoreDetailsLink = /** @type {HTMLAnchorElement} */ (this.querySelector('.view-product-title a'));\n    const mobileProductTitle = /** @type {HTMLAnchorElement} */ (this.querySelector('.product-header a'));\n\n    if (!anchorElement) return;\n\n    if (viewMoreDetailsLink) viewMoreDetailsLink.href = anchorElement.href;\n    if (mobileProductTitle) mobileProductTitle.href = anchorElement.href;\n  };\n\n  #handleDialogClose = () => {\n    const iosVersion = getIOSVersion();\n    /**\n     * This is a patch to solve an issue with the UI freezing when the dialog is closed.\n     * To reproduce it, use iOS 16.0.\n     */\n    if (!iosVersion || iosVersion.major >= 17 || (iosVersion.major === 16 && iosVersion.minor >= 4)) return;\n\n    requestAnimationFrame(() => {\n      /** @type {HTMLElement | null} */\n      const grid = document.querySelector('#ResultsList [product-grid-view]');\n      if (grid) {\n        const currentWidth = grid.getBoundingClientRect().width;\n        grid.style.width = `${currentWidth - 1}px`;\n        requestAnimationFrame(() => {\n          grid.style.width = '';\n        });\n      }\n    });\n  };\n}\n\nif (!customElements.get('quick-add-dialog')) {\n  customElements.define('quick-add-dialog', QuickAddDialog);\n}\n"
  },
  {
    "path": "assets/quick-order-list.js",
    "content": "import { Component } from '@theme/component';\nimport { CartAddEvent, QuantitySelectorUpdateEvent, ThemeEvents } from '@theme/events';\nimport { debounce, fetchConfig, resetShimmer } from '@theme/utilities';\nimport { morphSection, sectionRenderer } from '@theme/section-renderer';\n\n/**\n * A custom element that manages the quick order list section.\n *\n * @typedef {object} QuickOrderListComponentRefs\n * @property {HTMLTableRowElement[]} variantRows - The variant row elements\n * @property {HTMLElement} confirmationPanel - The remove all confirmation dialog\n * @property {HTMLElement} totalInfo - The total info section element\n * @property {HTMLElement} errorContainer - The error message container\n * @property {HTMLElement} errorText - The error message text element\n * @property {HTMLElement} successContainer - The success message container\n * @property {HTMLElement} successText - The success message text element\n * @property {HTMLElement} [paginationNav] - The pagination navigation element\n *\n * @extends Component<QuickOrderListComponentRefs>\n */\nclass QuickOrderListComponent extends Component {\n  requiredRefs = [\n    'variantRows',\n    'confirmationPanel',\n    'totalInfo',\n    'errorContainer',\n    'errorText',\n    'successContainer',\n    'successText',\n  ];\n\n  /** @type {AbortController|null} */\n  #abortController = null;\n\n  /** @type {(event: Event) => void} */\n  #debouncedHandleQuantityUpdate;\n\n  /** @type {(event: Event) => void} */\n  #boundHandleCartUpdate;\n\n  /**\n   * Gets the current page number from pagination controls\n   * @returns {number}\n   */\n  get currentPage() {\n    if (this.refs.paginationNav && this.refs.paginationNav.dataset.current_page) {\n      const pageNum = parseInt(this.refs.paginationNav.dataset.current_page, 10);\n      if (!isNaN(pageNum)) {\n        return pageNum;\n      }\n    }\n    return 1;\n  }\n\n  /**\n   * Gets all cart variant IDs for the product from the data attribute\n   * @returns {number[]}\n   */\n  get cartVariantIds() {\n    const data = this.dataset.cartVariantIds;\n    if (!data) return [];\n\n    return JSON.parse(data);\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.#debouncedHandleQuantityUpdate = debounce(this.#handleQuantityUpdate.bind(this), 300);\n    this.#boundHandleCartUpdate = this.#handleCartUpdate.bind(this);\n\n    this.addEventListener(ThemeEvents.quantitySelectorUpdate, this.#debouncedHandleQuantityUpdate);\n    document.addEventListener(ThemeEvents.cartUpdate, this.#boundHandleCartUpdate);\n    this.addEventListener('keydown', this.#handleKeyDown, true);\n    this.addEventListener('keyup', this.#handleKeyup, true);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    this.removeEventListener(ThemeEvents.quantitySelectorUpdate, this.#debouncedHandleQuantityUpdate);\n    document.removeEventListener(ThemeEvents.cartUpdate, this.#boundHandleCartUpdate);\n    this.removeEventListener('keydown', this.#handleKeyDown, true);\n    this.removeEventListener('keyup', this.#handleKeyup, true);\n\n    this.#abortController?.abort();\n  }\n\n  /**\n   * @param {EventTarget | null} target\n   * @returns {target is HTMLInputElement}\n   */\n  #isQuantityInput(target) {\n    return target instanceof HTMLInputElement && target.matches('input[type=\"number\"][data-cart-quantity]');\n  }\n\n  /**\n   * Keyboard navigation:\n   * Enter key selects next quantity input\n   * Shift+Enter selects previous quantity input\n   * @param {KeyboardEvent} event\n   */\n  #handleKeyDown = (event) => {\n    if (event.key !== 'Enter' || !this.#isQuantityInput(event.target)) {\n      return;\n    }\n    event.preventDefault();\n\n    // Get all VISIBLE quantity inputs (exclude hidden mobile/desktop variants)\n    const allQuantityInputs = Array.from(this.querySelectorAll('input[type=\"number\"][data-cart-quantity]')).filter(\n      (input) => {\n        return input instanceof HTMLElement && input.offsetParent !== null;\n      }\n    );\n\n    if (allQuantityInputs.length <= 1) {\n      return;\n    }\n\n    const currentIndex = allQuantityInputs.indexOf(event.target);\n    if (currentIndex === -1) {\n      return;\n    }\n\n    const offset = event.shiftKey ? -1 : 1;\n    const nextIndex = (currentIndex + offset + allQuantityInputs.length) % allQuantityInputs.length;\n    const nextInput = allQuantityInputs[nextIndex];\n\n    event.target.blur();\n    if (nextInput instanceof HTMLInputElement) {\n      nextInput.select();\n    }\n  };\n\n  /**\n   * @param {KeyboardEvent} event\n   */\n  #handleKeyup = (event) => {\n    if ((event.key === 'Tab' || event.key === 'Enter') && this.#isQuantityInput(event.target)) {\n      this.#scrollToCenter(event.target);\n    }\n  };\n\n  /**\n   * @param {HTMLElement} element\n   */\n  #scrollToCenter(element) {\n    element.scrollIntoView({\n      block: 'center',\n      behavior: 'smooth',\n    });\n  }\n\n  /**\n   * Handles pagination events\n   * @param {Object<string, string>} data - URL search params\n   * @param {Event} event - The click event\n   */\n  async onPaginationControlClick(data, event) {\n    event.preventDefault();\n    const sectionId = this.dataset.sectionId;\n\n    if (!this.dataset.url || !sectionId) return;\n\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    const newURL = new URL(this.dataset.url, window.location.origin);\n    for (const [key, value] of Object.entries(data)) {\n      newURL.searchParams.set(key, value);\n    }\n\n    await sectionRenderer.renderSection(sectionId, {\n      url: newURL,\n    });\n    this.#scrollToTopOfSection();\n  }\n\n  /**\n   * Handles removing a single variant item (sets quantity to 0)\n   * @param {string} variantId - The variant ID to remove\n   * @param {Event} event - The click event\n   */\n  async onLineItemRemove(variantId, event) {\n    event.preventDefault();\n\n    const targetRow = this.refs.variantRows.find((row) => row.dataset.variantId === String(variantId));\n    if (!(targetRow instanceof HTMLElement)) return;\n\n    const quantityInput = targetRow.querySelector('input[type=\"number\"]');\n    if (quantityInput instanceof HTMLInputElement) {\n      quantityInput.value = '0';\n      quantityInput.dispatchEvent(new QuantitySelectorUpdateEvent(0, Number(quantityInput.dataset.cartLine)));\n    }\n  }\n\n  /**\n   * Handles removing all items from the cart\n   * @param {Event} event - The click event\n   */\n  async onRemoveAll(event) {\n    event.preventDefault();\n    const idsToRemove = this.cartVariantIds;\n\n    this.#clearSuccessMessage();\n    this.#clearErrorMessage();\n    this.#applyShimmerEffects(idsToRemove);\n\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    try {\n      /** @type {Record<string, number>} */\n      const updates = {};\n\n      if (idsToRemove.length > 0) {\n        for (const variantId of idsToRemove) {\n          updates[String(variantId)] = 0;\n        }\n      }\n\n      if (Object.keys(updates).length === 0) {\n        resetShimmer(this);\n        return;\n      }\n\n      const sectionIds = this.#getSectionIds();\n      const sectionsUrl = new URL(window.location.pathname, window.location.origin);\n      sectionsUrl.searchParams.set('page', this.currentPage.toString());\n\n      const body = JSON.stringify({\n        updates: updates,\n        sections: sectionIds.join(','),\n        sections_url: sectionsUrl.pathname + sectionsUrl.search,\n      });\n\n      const response = await fetch(Theme.routes.cart_update_url, {\n        ...fetchConfig('json', { body }),\n        signal: this.#abortController.signal,\n      });\n\n      const responseText = await response.text();\n      const data = JSON.parse(responseText);\n\n      resetShimmer(this);\n\n      if (data.errors) {\n        this.#showErrorMessage(data.errors);\n      } else {\n        this.#updateSectionHTML(data);\n        this.#toggleConfirmationPanel(false);\n\n        document.dispatchEvent(\n          new CartAddEvent(data, this.id, {\n            source: 'quick-order-remove-all',\n            sections: data.sections,\n          })\n        );\n      }\n    } catch (error) {\n      if (error.name !== 'AbortError') {\n        resetShimmer(this);\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Handles quantity selector updates\n   * @param {CustomEvent} event - The quantity update event\n   */\n  async #handleQuantityUpdate(event) {\n    if (!(event instanceof QuantitySelectorUpdateEvent)) return;\n\n    // Only handle events from our own quantity selectors\n    if (!(event.target instanceof Node) || !this.contains(event.target)) return;\n\n    const { quantity } = event.detail;\n    const target = event.target;\n    if (!(target instanceof HTMLElement)) return;\n\n    const variantRow = this.refs.variantRows.find((row) => {\n      return row.contains(target);\n    });\n\n    if (!variantRow) return;\n\n    const variantId = variantRow.dataset.variantId;\n    if (!variantId) return;\n\n    const quantityInput = /** @type {HTMLInputElement|null} */ (variantRow.querySelector('input[data-cart-quantity]'));\n    const currentCartQuantity = quantityInput ? parseInt(quantityInput.dataset.cartQuantity || '0') || 0 : 0;\n\n    this.#clearSuccessMessage();\n    this.#clearErrorMessage();\n\n    if (currentCartQuantity === quantity) {\n      return;\n    }\n\n    this.#applyShimmerEffects([variantId]);\n\n    this.#disableQuickOrderListItems();\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    try {\n      /** @type {Record<string, number>} */\n      const updates = {};\n      updates[variantId] = quantity;\n\n      // Include page parameter in sections URL to maintain pagination state\n      const sectionsUrl = new URL(window.location.pathname, window.location.origin);\n      sectionsUrl.searchParams.set('page', this.currentPage.toString());\n\n      const body = JSON.stringify({\n        updates: updates,\n        sections: this.#getSectionIds().join(','),\n        sections_url: sectionsUrl.pathname + sectionsUrl.search,\n      });\n\n      const response = await fetch(Theme.routes.cart_update_url, {\n        ...fetchConfig('json', { body }),\n        signal: this.#abortController.signal,\n      });\n\n      const responseText = await response.text();\n      const data = JSON.parse(responseText);\n\n      resetShimmer(this);\n\n      if (data.errors) {\n        this.#showErrorMessage(data.errors);\n        if (this.dataset.sectionId) {\n          const url = new URL(window.location.href);\n          url.searchParams.set('page', this.currentPage.toString());\n          await sectionRenderer.renderSection(this.dataset.sectionId, { cache: false, url });\n        }\n      } else {\n        this.#updateSectionHTML(data);\n\n        const quantityAdded = quantity - currentCartQuantity;\n        if (quantityAdded > 0) {\n          this.#showSuccessMessage(quantityAdded);\n        }\n\n        document.dispatchEvent(\n          new CartAddEvent(data, this.id, {\n            source: 'quick-order-quantity',\n            variantId: variantId,\n            sections: data.sections,\n          })\n        );\n      }\n    } catch (error) {\n      if (error.name !== 'AbortError') {\n        this.#enableQuickOrderListItems();\n        resetShimmer(this);\n        throw error;\n      }\n    }\n  }\n\n  /**\n   * Handles cart update events from other components\n   * @param {CustomEvent} event - The cart update event\n   */\n  async #handleCartUpdate(event) {\n    // Don't process our own events to avoid double updates\n    // Check if this event came from our own quantity update\n    if (event.detail?.source === 'quick-order-quantity' && event.detail?.sourceId === this.id) {\n      return;\n    }\n\n    this.#enableQuickOrderListItems();\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    if (event.detail?.data?.sections && this.dataset.sectionId) {\n      this.#updateSectionHTML(event.detail.data);\n      if (event.detail.data.sections[this.dataset.sectionId]) {\n        return;\n      }\n    }\n\n    if (this.dataset.sectionId) {\n      const url = new URL(window.location.href);\n      url.searchParams.set('page', this.currentPage.toString());\n\n      await sectionRenderer.renderSection(this.dataset.sectionId, {\n        cache: false,\n        url,\n      });\n    }\n  }\n\n  #disableQuickOrderListItems() {\n    this.classList.add('quick-order-list-disabled');\n  }\n\n  #enableQuickOrderListItems() {\n    this.classList.remove('quick-order-list-disabled');\n  }\n\n  /**\n   * Shows the remove all confirmation dialog\n   * @param {Event} event - The click event\n   */\n  showRemoveAllConfirmation(event) {\n    event.preventDefault();\n    this.#toggleConfirmationPanel(true);\n  }\n\n  /**\n   * Hides the remove all confirmation\n   * @param {Event} event - The click event\n   */\n  hideRemoveAllConfirmation(event) {\n    event.preventDefault();\n    this.#toggleConfirmationPanel(false);\n  }\n\n  /**\n   * Toggles the confirmation panel visibility\n   * @param {boolean} show\n   */\n  #toggleConfirmationPanel(show) {\n    this.refs.confirmationPanel.classList.toggle('hidden', !show);\n    this.refs.totalInfo.classList.toggle('confirmation-visible', show);\n  }\n\n  /**\n   * Shows an error message in the error container\n   * @param {string} message - The error message to display\n   */\n  #showErrorMessage(message) {\n    this.refs.errorText.textContent = message;\n    this.refs.errorContainer.classList.remove('hidden');\n  }\n\n  /**\n   * Hides the error messages\n   */\n  #clearErrorMessage() {\n    this.refs.errorContainer.classList.add('hidden');\n  }\n\n  /**\n   * Shows success message in the success container\n   * @param {number} quantityAdded - The number of items added\n   */\n  #showSuccessMessage(quantityAdded) {\n    this.#clearErrorMessage();\n\n    const oneItemText = Theme?.translations?.items_added_to_cart_one || '1 item added to cart';\n    const itemsText = Theme?.translations?.items_added_to_cart_other || '{{ count }} items added to cart';\n\n    const message = quantityAdded === 1 ? oneItemText : itemsText.replace('{{ count }}', quantityAdded.toString());\n\n    this.refs.successText.textContent = message;\n    this.refs.successContainer.classList.remove('hidden');\n  }\n\n  #clearSuccessMessage() {\n    this.refs.successContainer.classList.add('hidden');\n  }\n\n  /**\n   * Applies shimmer effects to price elements\n   * @param {Array<string|number>} variantIds - Array of variant IDs to apply shimmer to\n   */\n  #applyShimmerEffects(variantIds) {\n    for (const variantId of variantIds) {\n      const variantRow = this.refs.variantRows.find((row) => row.dataset.variantId === String(variantId));\n      if (variantRow) {\n        const variantTotal = /** @type {import('./utilities').TextComponent|null} */ (\n          variantRow.querySelector('.variant-item__total-price')\n        );\n        variantTotal?.shimmer();\n      }\n    }\n\n    const totalPrice = /** @type {import('./utilities').TextComponent|null} */ (\n      this.querySelector('text-component[ref=\"totalPrice\"]')\n    );\n    totalPrice?.shimmer();\n  }\n\n  #scrollToTopOfSection() {\n    // Defer layout read until scroll action to batch with other layout work\n    requestAnimationFrame(() => {\n      const top = this.getBoundingClientRect().top;\n      window.scrollTo({ top: top + window.scrollY, behavior: 'smooth' });\n    });\n  }\n\n  /**\n   * Updates section HTML using morphSection\n   * @param {{ sections?: Record<string, string> }} data - Response data containing sections\n   */\n  #updateSectionHTML(data) {\n    if (data.sections && this.dataset.sectionId) {\n      const sectionHtml = data.sections[this.dataset.sectionId];\n      if (sectionHtml) {\n        morphSection(this.dataset.sectionId, sectionHtml);\n      }\n    }\n  }\n\n  /**\n   * Gets the section IDs for updating\n   * @returns {string[]} Array of section IDs\n   */\n  #getSectionIds() {\n    const sectionIds = [];\n\n    if (this.dataset.sectionId) {\n      sectionIds.push(this.dataset.sectionId);\n    }\n\n    // Also include all cart-items-component sections (like cart drawer) for smooth updates\n    const cartItemsComponents = document.querySelectorAll('cart-items-component');\n    for (const component of cartItemsComponents) {\n      if (!(component instanceof HTMLElement)) continue;\n      if (component.dataset.sectionId && !sectionIds.includes(component.dataset.sectionId)) {\n        sectionIds.push(component.dataset.sectionId);\n      }\n    }\n\n    return sectionIds;\n  }\n}\n\nif (!customElements.get('quick-order-list-component')) {\n  customElements.define('quick-order-list-component', QuickOrderListComponent);\n}\n"
  },
  {
    "path": "assets/recently-viewed-products.js",
    "content": "/**\n * Updates the recently viewed products in localStorage.\n */\nexport class RecentlyViewed {\n  /** @static @constant {string} The key used to store the viewed products in session storage */\n  static #STORAGE_KEY = 'viewedProducts';\n  /** @static @constant {number} The maximum number of products to store */\n  static #MAX_PRODUCTS = 4;\n\n  /**\n   * Adds a product to the recently viewed products list.\n   * @param {string} productId - The ID of the product to add.\n   */\n  static addProduct(productId) {\n    let viewedProducts = this.getProducts();\n\n    viewedProducts = viewedProducts.filter((/** @type {string} */ id) => id !== productId);\n    viewedProducts.unshift(productId);\n    viewedProducts = viewedProducts.slice(0, this.#MAX_PRODUCTS);\n\n    localStorage.setItem(this.#STORAGE_KEY, JSON.stringify(viewedProducts));\n  }\n\n  static clearProducts() {\n    localStorage.removeItem(this.#STORAGE_KEY);\n  }\n\n  /**\n   * Retrieves the list of recently viewed products from session storage.\n   * @returns {string[]} The list of viewed products.\n   */\n  static getProducts() {\n    return JSON.parse(localStorage.getItem(this.#STORAGE_KEY) || '[]');\n  }\n}\n"
  },
  {
    "path": "assets/results-list.js",
    "content": "import { mediaQueryLarge, requestIdleCallback, startViewTransition } from '@theme/utilities';\nimport PaginatedList from '@theme/paginated-list';\n\n/**\n * A custom element that renders a pagniated results list\n */\nexport default class ResultsList extends PaginatedList {\n  connectedCallback() {\n    super.connectedCallback();\n\n    mediaQueryLarge.addEventListener('change', this.#handleMediaQueryChange);\n    this.setAttribute('initialized', '');\n  }\n\n  disconnectedCallback() {\n    mediaQueryLarge.removeEventListener('change', this.#handleMediaQueryChange);\n  }\n\n  /**\n   * Updates the layout.\n   *\n   * @param {Event} event\n   */\n  updateLayout({ target }) {\n    if (!(target instanceof HTMLInputElement)) return;\n\n    this.#animateLayoutChange(target.value);\n  }\n\n  /**\n   * Sets the layout.\n   *\n   * @param {string} value\n   */\n  #animateLayoutChange = async (value) => {\n    const { grid } = this.refs;\n\n    if (!grid) return;\n\n    await startViewTransition(() => this.#setLayout(value), ['product-grid']);\n\n    requestIdleCallback(() => {\n      const viewport = mediaQueryLarge.matches ? 'desktop' : 'mobile';\n      sessionStorage.setItem(`product-grid-view-${viewport}`, value);\n    });\n  };\n\n  /**\n   * Animates the layout change.\n   *\n   * @param {string} value\n   */\n  #setLayout(value) {\n    const { grid } = this.refs;\n    if (!grid) return;\n    grid.setAttribute('product-grid-view', value);\n  }\n\n  /**\n   * Handles the media query change event.\n   *\n   * @param {MediaQueryListEvent} event\n   */\n  #handleMediaQueryChange = (event) => {\n    const targetElement = event.matches\n      ? this.querySelector('[data-grid-layout=\"desktop-default-option\"]')\n      : this.querySelector('[data-grid-layout=\"mobile-option\"]');\n\n    if (!(targetElement instanceof HTMLInputElement)) return;\n\n    targetElement.checked = true;\n    this.#setLayout('default');\n  };\n}\n\nif (!customElements.get('results-list')) {\n  customElements.define('results-list', ResultsList);\n}\n"
  },
  {
    "path": "assets/rte-formatter.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * A custom element that formats rte content for easier styling\n */\nclass RTEFormatter extends Component {\n  connectedCallback() {\n    super.connectedCallback();\n    this.querySelectorAll('table').forEach(this.#formatTable);\n  }\n\n  /**\n   * Formats a table for easier styling\n   * @param {HTMLTableElement} table\n   */\n  #formatTable(table) {\n    const wrapper = document.createElement('div');\n    wrapper.classList.add('rte-table-wrapper');\n    const parent = table.parentNode;\n    if (parent) {\n      parent.insertBefore(wrapper, table);\n      wrapper.appendChild(table);\n    }\n  }\n}\n\nif (!customElements.get('rte-formatter')) {\n  customElements.define('rte-formatter', RTEFormatter);\n}\n"
  },
  {
    "path": "assets/scrolling.js",
    "content": "import { debounce, throttle, prefersReducedMotion } from '@theme/utilities';\n\n/**\n * Timeout duration (in milliseconds) after which scroll is considered to have ended.\n * @constant {number}\n */\nconst SCROLL_END_TIMEOUT = 50;\n\n/**\n * Class representing a Scroller that handles smooth scrolling and detects scroll end events.\n *\n * @class\n */\nexport class Scroller {\n  /**\n   * The element to apply scrolling to.\n   * @type {HTMLElement}\n   */\n  element;\n\n  /**\n   * Promise that resolves when scrolling ends.\n   * @type {Promise<void>|undefined}\n   */\n  #promise = undefined;\n\n  /**\n   * Function to resolve the scroll end promise.\n   * @type {Function|undefined}\n   */\n  #resolve = undefined;\n\n  /**\n   * Callback function to call while user is scrolling, throttled every 50ms.\n   * @type {() => void}\n   */\n  #throttledCallback;\n\n  /**\n   * Callback function invoked after user scroll ends.\n   * @type {() => void}\n   */\n  #endCallback;\n\n  /**\n   * Callback function invoked when scrolling starts, regardless of whether it was triggered by a user event.\n   * @type {(() => void) | undefined}\n   */\n  #onScrollInit;\n\n  /**\n   * Callback function invoked when scrolling ends, regardless of whether it was triggered by a user event.\n   * @type {(() => void) | undefined}\n   */\n  #onScrollEnd;\n\n  /**\n   * Whether the scroll was triggered by a user event.\n   * @type {boolean}\n   */\n  #userEvent = true;\n\n  /**\n   * Whether the next scroll event should be ignored.\n   * @type {boolean}\n   */\n  #ignore = false;\n\n  /**\n   * Whether the element is currently scrolling.\n   * @type {boolean}\n   */\n  #isScrolling = false;\n\n  /**\n   * Creates a Scroller instance.\n   *\n   * @param {HTMLElement} element - The element to apply scrolling to.\n   * @param {Object} options - The options for the scroller.\n   * @param {() => void} options.onScroll - Function to call while scrolling and after scrolling ends.\n   * @param {() => void} [options.onScrollStart] - Function to call when scrolling starts.\n   * @param {() => void} [options.onScrollEnd] - Function to call after scrolling ends.\n   */\n  constructor(element, options) {\n    this.#throttledCallback = throttle(options.onScroll, SCROLL_END_TIMEOUT);\n    this.#endCallback = options.onScroll;\n\n    this.#onScrollInit = options.onScrollStart;\n    this.#onScrollEnd = options.onScrollEnd;\n\n    this.element = element;\n    this.element.addEventListener('scroll', this.#handleScroll);\n  }\n\n  /**\n   * Scrolls to a specific position or element.\n   * @param {number | HTMLElement} input - The position in pixels or an element to scroll to.\n   * @param {Object} [options] - Options for the scroll.\n   * @param {boolean} [options.instant] - Whether to scroll instantly.\n   */\n  async to(input, options) {\n    let value;\n\n    if (input instanceof HTMLElement) {\n      const paddingStart = calculatePaddingStart(this.element, this.axis);\n      value = input[`offset${this.#edge}`] - paddingStart;\n    } else {\n      value = input;\n    }\n\n    const currentPosition = this.element[`scroll${this.#edge}`];\n    const willChange = currentPosition !== value;\n\n    if (willChange) {\n      this.#scroll({ ...options, method: 'scrollTo', value });\n    } else if (this.#isScrolling) {\n      // If the scroll has started but then it's released in the same original position,\n      // the scroll event will not fire, so we need to manually trigger the scroll end.\n      this.#handleScrollEnd(false);\n    }\n  }\n\n  /**\n   * Scrolls by a certain number of pixels.\n   * @param {number} value - The number of pixels to scroll by.\n   * @param {Object} [options] - Options for the scroll.\n   * @param {boolean} [options.instant] - Whether to scroll instantly.\n   */\n  by(value, options) {\n    this.#scroll({ ...options, method: 'scrollBy', value });\n  }\n\n  /**\n   * Scrolls the element.\n   * @param {Object} options - The options for the scroll.\n   * @param {'scrollTo' | 'scrollBy'} options.method - The method to use to scroll.\n   * @param {number} options.value - The value to scroll to.\n   * @param {boolean} [options.instant] - Whether to scroll instantly.\n   */\n  #scroll(options) {\n    const { method, value, instant = prefersReducedMotion() } = options;\n\n    this.#reset();\n    this.#ignore = instant;\n    this.#userEvent = false;\n\n    // Check if we need to scroll at all\n    const currentPosition = this.element[`scroll${this.#edge}`];\n    const targetPosition = method === 'scrollBy' ? currentPosition + value : value;\n    const scrollDistance = Math.abs(targetPosition - currentPosition);\n\n    // If the distance is negligible, don't scroll and resolve immediately\n    if (scrollDistance < 1) {\n      return Promise.resolve();\n    }\n\n    if (!instant) this.#setup();\n\n    this.element[method]({\n      [this.#edge.toLowerCase()]: value,\n      behavior: instant ? 'instant' : 'smooth',\n    });\n  }\n\n  /**\n   * Gets the scrolling axis ('x' or 'y') based on the element's dimensions.\n   * @type {'x' | 'y'}\n   * @readonly\n   */\n  get axis() {\n    return getScrollAxis(this.element);\n  }\n\n  /**\n   * Promise that resolves when scrolling ends.\n   * @type {Promise<void>}\n   * @readonly\n   */\n  get finished() {\n    return this.#promise ?? Promise.resolve();\n  }\n\n  /**\n   * Gets the scroll edge property ('Left' or 'Top') based on the axis.\n   * @returns {'Left' | 'Top'}\n   */\n  get #edge() {\n    return this.axis === 'x' ? 'Left' : 'Top';\n  }\n\n  /**\n   * Sets up the scroll end promise if not already set.\n   */\n  #setup() {\n    if (this.#promise) {\n      return;\n    }\n\n    this.#promise = new Promise((resolve) => (this.#resolve = resolve));\n  }\n\n  #reset = () => {\n    this.#handleScrollEnd.cancel();\n    this.#resolve?.();\n\n    this.#promise = undefined;\n    this.#resolve = undefined;\n    this.#userEvent = true;\n    this.#ignore = false;\n  };\n\n  /**\n   * Event handler for the 'scroll' event.\n   */\n  #handleScroll = () => {\n    if (!this.#isScrolling) {\n      this.#onScrollInit?.();\n      this.#isScrolling = true;\n    }\n\n    if (this.#ignore) {\n      this.#reset();\n      this.#handleScrollEnd(false);\n      return;\n    }\n\n    const userEvent = this.#userEvent;\n\n    this.#setup();\n    if (userEvent) this.#throttledCallback();\n    this.#handleScrollEnd(userEvent);\n  };\n\n  /**\n   * Handler called when scrolling has ended.\n   */\n  #handleScrollEnd = debounce(\n    /**\n     * @param {boolean} userEvent\n     */\n    (userEvent) => {\n      this.#resolve?.();\n      if (userEvent) this.#endCallback();\n      this.#reset();\n\n      if (this.#isScrolling) {\n        this.#onScrollEnd?.();\n        this.#isScrolling = false;\n      }\n    },\n    SCROLL_END_TIMEOUT\n  );\n\n  /**\n   * Sets the scroll snap behavior of the element.\n   * @param {boolean} value - Whether to enable scroll snap.\n   */\n  set snap(value) {\n    // Changing the snap behavior will trigger a scroll event, which we should ignore\n    this.#ignore = true;\n    this.element.style.setProperty('scroll-snap-type', value ? `${this.axis} mandatory` : 'none');\n  }\n\n  /**\n   * Destroys the Scroller instance.\n   */\n  destroy() {\n    this.element.removeEventListener('scroll', this.#handleScroll);\n  }\n}\n\n/**\n * Gets the scroll axis ('x' or 'y') based on the element's dimensions.\n * @param {HTMLElement} el - The element to get the scroll axis of.\n * @returns {'x' | 'y'}\n */\nfunction getScrollAxis(el) {\n  if (el.scrollHeight > el.clientHeight && el.scrollWidth === el.clientWidth) {\n    return 'y';\n  }\n\n  if (el.scrollWidth > el.clientWidth && el.scrollHeight === el.clientHeight) {\n    return 'x';\n  }\n\n  return el.scrollWidth > el.scrollHeight ? 'x' : 'y';\n}\n\n/**\n * Calculates the padding-start around an element to update the scroll offset.\n * @param {HTMLElement} element - The element to calculate the padding-start of.\n * @param {'x' | 'y'} axis - The axis to calculate the padding-start of.\n * @returns {number} The padding-start in pixels.\n */\nfunction calculatePaddingStart(element, axis) {\n  const computedStyle = getComputedStyle(element);\n  const value = axis === 'x' ? computedStyle.paddingInlineStart : computedStyle.paddingBlockStart;\n\n  return parseFloat(value);\n}\n\n/**\n * Scrolls an element into view.\n * @param {Element} element - The element to scroll into view.\n * @param {Object} options - The options for the scroll.\n * @param {ScrollBehavior} [options.behavior='smooth'] - The behavior of the scroll.\n * @param {'start' | 'center' | 'end'} [options.block='start'] - The block alignment of the element.\n * @param {'start' | 'center' | 'end'} [options.inline='start'] - The inline alignment of the element.\n * @param {Element} [options.ancestor] - The ancestor element to scroll into view.\n */\nexport function scrollIntoView(element, { ancestor, behavior = 'smooth', block = 'start', inline = 'start' } = {}) {\n  if (!ancestor) {\n    return element.scrollIntoView({ behavior, block, inline });\n  }\n\n  const elemRect = element.getBoundingClientRect();\n  const ancestorRect = ancestor.getBoundingClientRect();\n\n  /**\n   * Calculates the scroll offset for an element.\n   * @param {'start' | 'center' | 'end'} alignment - The alignment of the element.\n   * @param {number} ancestorStart - The start of the ancestor element.\n   * @param {number} ancestorLength - The length of the ancestor element.\n   * @param {number} elemStart - The start of the element.\n   * @param {number} elemLength - The length of the element.\n   * @param {number} currentScroll - The current scroll position.\n   * @returns {number} The scroll offset.\n   */\n  const calculateScrollOffset = (alignment, ancestorStart, ancestorLength, elemStart, elemLength, currentScroll) => {\n    switch (alignment) {\n      case 'start':\n        return currentScroll + elemStart - ancestorStart;\n      case 'center':\n        return currentScroll + elemStart - ancestorStart - ancestorLength / 2 + elemLength / 2;\n      case 'end':\n        return currentScroll + elemStart - ancestorStart - ancestorLength + elemLength;\n      default:\n        return currentScroll;\n    }\n  };\n\n  const scrollTop =\n    ancestor.scrollHeight > ancestor.clientHeight\n      ? calculateScrollOffset(\n          block,\n          ancestorRect.top,\n          ancestor.clientHeight,\n          elemRect.top,\n          elemRect.height,\n          ancestor.scrollTop\n        )\n      : ancestor.scrollTop;\n\n  const scrollLeft =\n    ancestor.scrollWidth > ancestor.clientWidth\n      ? calculateScrollOffset(\n          inline,\n          ancestorRect.left,\n          ancestor.clientWidth,\n          elemRect.left,\n          elemRect.width,\n          ancestor.scrollLeft\n        )\n      : ancestor.scrollLeft;\n\n  ancestor.scrollTo({ top: scrollTop, left: scrollLeft, behavior });\n}\n\n// Still extends HTMLElement over Component so that refs are still available to parent components (e.g. Slideshow)\nclass ScrollHint extends HTMLElement {\n  /** @type {number | null} */\n  #rafId = null;\n\n  connectedCallback() {\n    this.addEventListener('scroll', this.#handleScroll);\n    this.#resizeObserver.observe(this);\n  }\n\n  disconnectedCallback() {\n    this.removeEventListener('scroll', this.#handleScroll);\n    this.#resizeObserver.disconnect();\n    if (this.#rafId !== null) {\n      cancelAnimationFrame(this.#rafId);\n      this.#rafId = null;\n    }\n  }\n\n  #handleScroll = () => {\n    // Throttle scroll updates with requestAnimationFrame to avoid layout thrashing\n    if (this.#rafId !== null) return;\n\n    this.#rafId = requestAnimationFrame(() => {\n      this.#rafId = null;\n      this.#update();\n    });\n  };\n\n  #update = () => {\n    const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = this;\n    const scrollDirection = scrollWidth > clientWidth ? 'horizontal' : 'vertical';\n    const scrollPercentage =\n      scrollDirection === 'vertical'\n        ? scrollTop / (scrollHeight - clientHeight)\n        : scrollLeft / (scrollWidth - clientWidth);\n\n    this.style.maskImage = Number.isNaN(scrollPercentage)\n      ? ''\n      : `linear-gradient(\n        to ${scrollDirection === 'vertical' ? 'bottom' : 'right'},\n        transparent ${scrollPercentage > 0 ? 1 : 0}%,\n        black ${scrollPercentage < 0.1 ? scrollPercentage * 100 : 10}%,\n        black ${scrollPercentage > 0.9 ? scrollPercentage * 100 : 90}%,\n        transparent 100%\n      )`;\n  };\n\n  #resizeObserver = new ResizeObserver(this.#update);\n}\n\nif (!customElements.get('scroll-hint')) {\n  customElements.define('scroll-hint', ScrollHint);\n}\n"
  },
  {
    "path": "assets/search-page-input.js",
    "content": "import { Component } from '@theme/component';\nimport { debounce } from '@theme/utilities';\n\n/**\n * A custom element that allows the user to clean a search input.\n *\n * @typedef {object} Refs\n * @property {HTMLInputElement} searchPageInput - The search input element.\n * @extends {Component<Refs>}\n */\nclass SearchPageInputComponent extends Component {\n  requiredRefs = ['searchPageInput'];\n\n  /**\n   * Handles the keydown event on the search input and resets the search when\n   * empty and Escape is pressed.\n   *\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  handleKeyDown = debounce((event) => {\n    const value = this.refs.searchPageInput.value.trim();\n\n    if (event.key === 'Escape' && value === '') {\n      this.#submitEmptySearch();\n    }\n  }, 100);\n\n  #submitEmptySearch() {\n    const searchInput = this.refs.searchPageInput;\n\n    searchInput.focus();\n    searchInput.value = '';\n\n    if (this.#isEmptyState()) return;\n\n    searchInput.form?.submit();\n  }\n\n  #isEmptyState = () => {\n    const url = new URL(window.location.href);\n    const queryParam = url.searchParams.get('q') ?? '';\n\n    return queryParam.trim() === '';\n  };\n}\n\nif (!customElements.get('search-page-input-component')) {\n  customElements.define('search-page-input-component', SearchPageInputComponent);\n}\n"
  },
  {
    "path": "assets/section-hydration.js",
    "content": "import { buildSectionSelector, normalizeSectionId, sectionRenderer } from '@theme/section-renderer';\nimport { requestIdleCallback, onDocumentReady } from '@theme/utilities';\n\n/**\n * Hydrates a section using the Section Rendering API preserving states.\n * Only updates elements with data-hydration-key attribute. This ensures that non-targeted nodes do not have their markup/state updated unnecessarily.\n *\n * @param {string} sectionId - The section ID to hydrate\n * @param {URL} [url] - The URL to render the section from\n */\nasync function hydrateSection(sectionId, url) {\n  const normalizedId = normalizeSectionId(sectionId);\n  const section = document.getElementById(buildSectionSelector(normalizedId));\n\n  if (!section || section.dataset.hydrated === 'true') {\n    return;\n  }\n\n  await sectionRenderer.renderSection(normalizedId, { cache: false, url, mode: 'hydration' });\n\n  section.dataset.hydrated = 'true';\n}\n\n/**\n * Hydrates a section using the Section Rendering API preserving states, when\n * the DOM is ready.\n *\n * @param {string} sectionId - The section ID to hydrate\n * @param {URL} [url] - The URL to render the section from\n */\nexport async function hydrate(sectionId, url) {\n  onDocumentReady(() => {\n    requestIdleCallback(() => hydrateSection(sectionId, url));\n  });\n}\n"
  },
  {
    "path": "assets/section-renderer.js",
    "content": "import { morph, MORPH_OPTIONS } from '@theme/morph';\n\n/**\n * A class to re-render sections using the Section Rendering API\n */\nclass SectionRenderer {\n  /**\n   * The cache of section HTML\n   * @type {Map<string, string>}\n   */\n  #cache = new Map();\n\n  /**\n   * The abort controllers by section ID\n   * @type {Map<string, AbortController>}\n   */\n  #abortControllersBySectionId = new Map();\n\n  /**\n   * The pending promises\n   * @type {Map<string, Promise<string>>}\n   */\n  #pendingPromises = new Map();\n\n  constructor() {\n    window.addEventListener('load', this.#cachePageSections.bind(this));\n  }\n\n  /**\n   * Renders a section\n   * @param {string} sectionId - The section ID\n   * @param {Object} [options] - The options\n   * @param {boolean} [options.cache] - Whether to use the cache\n   * @param {'hydration'|'full'} [options.mode] - Which parts of the section to morph into the DOM\n   * @param {URL} [options.url] - The URL to render the section from\n   * @returns {Promise<string>} The rendered section HTML\n   */\n  async renderSection(sectionId, options) {\n    const { cache = !Shopify.designMode, mode = 'full' } = options ?? {};\n    const { url } = options ?? {};\n    this.#abortPendingMorph(sectionId);\n\n    const abortController = new AbortController();\n    this.#abortControllersBySectionId.set(sectionId, abortController);\n\n    const sectionHTML = await this.getSectionHTML(sectionId, cache, url);\n\n    if (!abortController.signal.aborted) {\n      this.#abortControllersBySectionId.delete(sectionId);\n\n      morphSection(sectionId, sectionHTML, mode);\n    }\n\n    return sectionHTML;\n  }\n\n  /**\n   * Aborts an existing morph for a section\n   * @param {string} sectionId - The section ID\n   */\n  #abortPendingMorph(sectionId) {\n    const existingAbortController = this.#abortControllersBySectionId.get(sectionId);\n    if (existingAbortController) {\n      existingAbortController.abort();\n    }\n  }\n\n  /**\n   * Gets the HTML for a section\n   * @param {string} sectionId - The section ID\n   * @param {boolean} useCache - Whether to use the cache\n   * @param {URL} url - The URL to render the section for\n   * @returns {Promise<string>} The rendered section HTML\n   */\n  async getSectionHTML(sectionId, useCache = true, url = new URL(window.location.href)) {\n    const sectionUrl = buildSectionRenderingURL(sectionId, url);\n\n    let pendingPromise = this.#pendingPromises.get(sectionUrl);\n    if (pendingPromise) return pendingPromise;\n\n    if (useCache) {\n      const cachedHTML = this.#cache.get(sectionUrl);\n\n      if (cachedHTML) return cachedHTML;\n    }\n\n    pendingPromise = fetch(sectionUrl).then((response) => {\n      return response.text();\n    });\n\n    this.#pendingPromises.set(sectionUrl, pendingPromise);\n\n    const sectionHTML = await pendingPromise;\n    this.#pendingPromises.delete(sectionUrl);\n\n    this.#cache.set(sectionUrl, sectionHTML);\n    return sectionHTML;\n  }\n\n  /**\n   * Caches the page sections\n   */\n  #cachePageSections() {\n    for (const section of document.querySelectorAll('.shopify-section')) {\n      const url = buildSectionRenderingURL(section.id);\n      if (this.#cache.get(url)) return;\n      if (containsShadowRoot(section)) return;\n\n      this.#cache.set(url, section.outerHTML);\n    }\n  }\n}\n\nconst SECTION_ID_PREFIX = 'shopify-section-';\n\n/**\n * Builds a section rendering URL\n * @param {string} sectionId - The section ID\n * @param {URL} url - The URL to render the section for\n * @returns {string} The section rendering URL\n */\nfunction buildSectionRenderingURL(sectionId, url = new URL(window.location.href)) {\n  url.searchParams.set('section_id', normalizeSectionId(sectionId));\n  url.searchParams.sort();\n\n  return url.toString();\n}\n\n/**\n * Builds a section selector\n * @param {string} sectionId - The section ID\n * @returns {string} The section selector\n */\nexport function buildSectionSelector(sectionId) {\n  return `${SECTION_ID_PREFIX}${sectionId}`;\n}\n\n/**\n * Normalizes a section ID\n * @param {string} sectionId - The section ID\n * @returns {string} The normalized section ID\n */\nexport function normalizeSectionId(sectionId) {\n  return sectionId.replace(new RegExp(`^${SECTION_ID_PREFIX}`), '');\n}\n\n/**\n * Checks if an element contains a shadow root\n * @param {Element} element - The element to check\n * @returns {boolean} Whether the element contains a shadow root\n */\nfunction containsShadowRoot(element) {\n  return !!element.shadowRoot || Array.from(element.children).some(containsShadowRoot);\n}\n\n/**\n * @typedef {(previousElement: HTMLElement, newElement: HTMLElement) => void} UpdateCallback\n */\n\n/**\n * Morphs the existing section element with the new section contents\n *\n * @param {string} sectionId - The section ID\n * @param {string} html - The new markup the section should morph into\n * @param {'hydration'|'full'} [mode] - Which parts of the section to morph into the DOM. 'hydration' will only morph nodes with `data-hydration-key` attributes.\n */\nexport async function morphSection(sectionId, html, mode = 'full') {\n  const fragment = new DOMParser().parseFromString(html, 'text/html');\n  const existingElement = document.getElementById(buildSectionSelector(sectionId));\n  const newElement = fragment.getElementById(buildSectionSelector(sectionId));\n\n  if (!existingElement) {\n    throw new Error(`Section ${sectionId} not found`);\n  }\n\n  if (!newElement) {\n    throw new Error(`Section ${sectionId} not found in the section rendering response`);\n  }\n\n  morph(existingElement, newElement, {\n    ...MORPH_OPTIONS,\n    hydrationMode: mode === 'hydration',\n  });\n}\n\nexport const sectionRenderer = new SectionRenderer();\n"
  },
  {
    "path": "assets/show-more.js",
    "content": "import { Component } from '@theme/component';\nimport { isMobileBreakpoint } from '@theme/utilities';\n\n/**\n * @typedef {Object} ShowMoreRefs\n * @property {HTMLElement} showMoreButton - The button to toggle visibility of the items\n * @property {HTMLElement[]} showMoreItems - The hidden items to show and hide\n * @property {HTMLElement} showMoreContent - The content container to measure and animate\n */\n\n/**\n * A custom element that manages the showing and hiding excess content items\n *\n * @extends {Component<ShowMoreRefs>}\n */\n\nclass ShowMoreComponent extends Component {\n  requiredRefs = ['showMoreButton', 'showMoreItems', 'showMoreContent'];\n\n  /**\n   * @type {boolean}\n   */\n  #expanded = false;\n\n  /**\n   * @type {boolean}\n   */\n  #disableOnDesktop = false;\n\n  /**\n   * @type {number}\n   */\n  #collapsedHeight = 0;\n\n  /**\n   * @type {'mobile:hidden' | 'hidden'}\n   */\n  #disabledClass = 'hidden';\n\n  /**\n   * @type {'MOBILE' | 'DESKTOP'}\n   */\n  get #currentBreakpoint() {\n    return isMobileBreakpoint() ? 'MOBILE' : 'DESKTOP';\n  }\n\n  /**\n   * @type {Animation | undefined}\n   */\n  #animation;\n\n  /**\n   * @constant {number}\n   */\n  #animationSpeed = 300;\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateBreakpointState();\n  }\n\n  /**\n   * Updates the current breakpoint and apprpropriate disabled class\n   */\n  #updateBreakpointState = () => {\n    this.#disableOnDesktop = this.dataset.disableOnDesktop === 'true';\n    this.#disabledClass = this.#disableOnDesktop ? 'mobile:hidden' : 'hidden';\n  };\n\n  /**\n   * Handles expanding the content\n   * @returns {{startHeight: number, endHeight: number}}\n   */\n  #expand = () => {\n    const { showMoreItems, showMoreContent } = this.refs;\n\n    this.#collapsedHeight = showMoreContent.offsetHeight;\n    const startHeight = this.#collapsedHeight;\n\n    showMoreItems?.forEach((item) => item.classList.remove(this.#disabledClass));\n\n    return {\n      startHeight,\n      endHeight: showMoreContent.scrollHeight,\n    };\n  };\n\n  /**\n   * Handles collapsing the content\n   * @returns {{startHeight: number, endHeight: number}}\n   */\n  #collapse = () => {\n    const { showMoreContent } = this.refs;\n    const startHeight = showMoreContent.offsetHeight;\n    const endHeight = this.#collapsedHeight;\n\n    return { startHeight, endHeight };\n  };\n\n  /**\n   * Initializes a height transition\n   * @param {number} startHeight\n   * @param {number} endHeight\n   */\n  #animateHeight = (startHeight, endHeight) => {\n    const { showMoreContent } = this.refs;\n\n    showMoreContent.style.overflow = 'hidden';\n    this.#animation?.cancel();\n\n    this.#animation = showMoreContent.animate(\n      {\n        height: [`${startHeight}px`, `${endHeight}px`],\n      },\n      {\n        duration: this.#animationSpeed,\n        easing: 'ease-in-out',\n      }\n    );\n\n    this.#animation.onfinish = () => this.#onAnimationFinish();\n  };\n\n  /**\n   * Handles the animation finish event.\n   */\n  #onAnimationFinish() {\n    const { showMoreContent, showMoreItems } = this.refs;\n\n    if (this.#expanded) {\n      showMoreItems.forEach((item) => item.classList.add(this.#disabledClass));\n    }\n\n    showMoreContent.style.removeProperty('height');\n    showMoreContent.style.overflow = '';\n    this.#expanded = !this.#expanded;\n  }\n\n  /**\n   * Toggles the expansion state of the content.\n   *\n   * @param {Event} event - The click event\n   */\n  toggle = (event) => {\n    event.preventDefault();\n\n    this.#updateBreakpointState();\n\n    if (this.#currentBreakpoint === 'DESKTOP' && this.#disableOnDesktop) return;\n\n    const { startHeight, endHeight } = !this.#expanded ? this.#expand() : this.#collapse();\n\n    this.dataset.expanded = this.#expanded ? 'false' : 'true';\n    this.refs.showMoreButton.setAttribute('aria-expanded', this.dataset.expanded);\n\n    this.#animateHeight(startHeight, endHeight);\n  };\n}\n\nif (!customElements.get('show-more-component')) {\n  customElements.define('show-more-component', ShowMoreComponent);\n}\n"
  },
  {
    "path": "assets/slideshow.js",
    "content": "import { Component } from '@theme/component';\nimport {\n  center,\n  closest,\n  clamp,\n  mediaQueryLarge,\n  prefersReducedMotion,\n  preventDefault,\n  viewTransition,\n  scheduler,\n} from '@theme/utilities';\nimport { Scroller, scrollIntoView } from '@theme/scrolling';\nimport { SlideshowSelectEvent } from '@theme/events';\n\n// The threshold for determining visibility of slides.\nconst SLIDE_VISIBLITY_THRESHOLD = 0.7;\n\n/**\n * Shared viewport observer manager for lazy scroll enablement.\n *\n * Limit the number of compositor layers created by slideshows by only enabling scrolling when the slideshow is in the viewport.\n * Resolves known issues with iOS Safari where too many composition layers will crash the page.\n * When a slideshow is NOT in the viewport, it has overflow: hidden (no compositor layer).\n * When a slideshow enters the viewport, the [in-viewport] attribute is added, enabling scrolling.\n */\nclass SlideshowViewportObserver {\n  /** @type {SlideshowViewportObserver | null} */\n  static #instance = null;\n\n  /** @type {IntersectionObserver | null} */\n  #observer = null;\n\n  /**\n   * Gets the singleton instance\n   * @returns {SlideshowViewportObserver}\n   */\n  static getInstance() {\n    if (!this.#instance) {\n      this.#instance = new SlideshowViewportObserver();\n    }\n    return this.#instance;\n  }\n\n  /**\n   * Registers a slideshow to be observed for viewport visibility\n   * @param {Slideshow} slideshow - The slideshow to observe\n   */\n  observe(slideshow) {\n    if (!this.#observer) {\n      this.#observer = new IntersectionObserver(\n        (entries) => {\n          for (const entry of entries) {\n            const slideshowElement = /** @type {Slideshow} */ (entry.target);\n            if (entry.isIntersecting) {\n              slideshowElement.setAttribute('in-viewport', '');\n            } else {\n              slideshowElement.removeAttribute('in-viewport');\n            }\n          }\n        },\n        {\n          rootMargin: '100px',\n        }\n      );\n    }\n\n    this.#observer.observe(slideshow);\n  }\n\n  /**\n   * Unregisters a slideshow from viewport observation\n   * @param {Slideshow} slideshow - The slideshow to unobserve\n   */\n  unobserve(slideshow) {\n    this.#observer?.unobserve(slideshow);\n    slideshow.removeAttribute('in-viewport');\n  }\n}\n\n/**\n * Slideshow custom element that allows sliding between content.\n *\n * @typedef {Object} Refs\n * @property {HTMLElement} scroller\n * @property {HTMLElement} slideshowContainer\n * @property {HTMLElement[]} [slides]\n * @property {HTMLElement} [current]\n * @property {HTMLElement[]} [thumbnails]\n * @property {HTMLElement[]} [dots]\n * @property {HTMLButtonElement} [previous]\n * @property {HTMLButtonElement} [next]\n *\n * @extends {Component<Refs>}\n */\nexport class Slideshow extends Component {\n  static get observedAttributes() {\n    return ['initial-slide'];\n  }\n\n  /**\n   * @param {string} name\n   * @param {string} oldValue\n   * @param {string} newValue\n   */\n  attributeChangedCallback(name, oldValue, newValue) {\n    // Collection page filtering will Morph slideshow galleries in place, updating\n    // the slideshow[initial-slide] and slideshow-slide[hidden] attributes.\n    // We need to re-select() the slide after the morph is complete, but not before\n    // slideshow-slide elements have their [hidden] attribute updated.\n    if (name === 'initial-slide' && oldValue !== newValue) {\n      queueMicrotask(() => {\n        // Only select if the component is connected and initialized\n        if (!this.isConnected || !this.#scroll || !this.refs.slides) return;\n        const index = parseInt(newValue, 10) || 0;\n        const slide_id = this.refs.slides[index]?.getAttribute('slide-id');\n        if (slide_id) {\n          this.select({ id: slide_id }, undefined, { animate: false });\n        }\n      });\n    }\n  }\n\n  requiredRefs = ['scroller'];\n\n  async connectedCallback() {\n    super.connectedCallback();\n\n    // Register with shared viewport observer for lazy scroll enablement.\n    // This prevents iOS Safari crashes caused by too many compositor layers.\n    SlideshowViewportObserver.getInstance().observe(this);\n\n    // Wait for any in-progress view transitions to finish\n    if (viewTransition.current) {\n      await viewTransition.current;\n      // It's possible that the slideshow was disconnected before the view transition finished\n      if (!this.isConnected) return;\n    }\n\n    const slideCount = this.slides?.length || 0;\n    slideCount <= 1 ? this.#setupSlideshowWithoutControls() : this.#setupSlideshow();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    // Unregister from shared viewport observer\n    SlideshowViewportObserver.getInstance().unobserve(this);\n\n    if (this.#scroll) {\n      const { scroller } = this.refs;\n      scroller.removeEventListener('mousedown', this.#handleMouseDown);\n      this.#scroll.destroy();\n    }\n\n    const slideCount = this.slides?.length || 0;\n    if (slideCount > 1) {\n      this.removeEventListener('mouseenter', this.suspend);\n      this.removeEventListener('mouseleave', this.resume);\n      this.removeEventListener('pointerenter', this.#handlePointerEnter);\n      document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n    }\n\n    if (this.#resizeObserver) {\n      this.#resizeObserver.disconnect();\n    }\n\n    if (this.#intersectionObserver) {\n      this.#intersectionObserver.disconnect();\n      this.#intersectionObserver = null;\n    }\n  }\n\n  /** Indicates whether the slideshow is nested inside another slideshow. */\n  get isNested() {\n    return this.parentElement?.closest('slideshow-component') !== null;\n  }\n\n  get initialSlide() {\n    return this.refs.slides?.[this.initialSlideIndex];\n  }\n\n  /**\n   * Selects a slide based on the input index.\n   * @param {number|string|{id: string}} input - The index or id of the slide to select.\n   * @param {Event} [event] - The event that triggered the selection.\n   * @param {Object} [options] - The options for the selection.\n   * @param {boolean} [options.animate=true] - Whether to animate the selection.\n   */\n  async select(input, event, options = {}) {\n    if (this.#disabled || !this.refs.slides?.length) return;\n    if (!this.#scroll) return;\n\n    // Store the actual current slide before any mutations\n    const currentSlide = this.slides?.[this.current];\n\n    for (const slide of this.refs.slides) {\n      if (slide.hasAttribute('reveal')) {\n        slide.removeAttribute('reveal');\n        slide.setAttribute('aria-hidden', 'true');\n      }\n    }\n\n    // Figure out the raw desired index (could be -1 if user is on first slide and clicks prev)\n    let requestedIndex = (() => {\n      if (typeof input === 'number') return input;\n      if (typeof input === 'string') return parseInt(input, 10);\n      if ('id' in input) {\n        const requestedSlide = this.refs.slides.find((slide) => slide.getAttribute('slide-id') == input.id);\n\n        if (!requestedSlide || !this.slides) return;\n\n        // Force the slide to be revealed if it is hidden\n        if (requestedSlide.hasAttribute('hidden')) {\n          requestedSlide.setAttribute('reveal', '');\n          requestedSlide.setAttribute('aria-hidden', 'false');\n        }\n\n        return this.slides.indexOf(requestedSlide);\n      }\n    })();\n\n    const { current } = this;\n    const { slides } = this;\n\n    // Guard checks: no slides, invalid index, or selecting the same slide\n    if (!slides?.length || requestedIndex === undefined || isNaN(requestedIndex)) return;\n\n    const requestedSlideElement = slides?.[requestedIndex];\n    if (currentSlide === requestedSlideElement) return;\n\n    if (!this.infinite) requestedIndex = clamp(requestedIndex, 0, slides.length - 1);\n\n    event?.preventDefault();\n\n    const { animate = true } = options;\n    const lastIndex = slides.length - 1;\n\n    // Decide the actual target index (clamp for infinite loop)\n    let index = requestedIndex;\n    if (requestedIndex < 0) index = lastIndex;\n    else if (requestedIndex > lastIndex) index = 0;\n\n    const isAdjacentSlide = Math.abs(index - current) <= 1 && requestedIndex >= 0 && requestedIndex <= lastIndex;\n    const { visibleSlides } = this;\n    const instant = prefersReducedMotion() || !animate;\n\n    // If jump is more than 1 or we looped, do the placeholder + reorder trick\n    if (!instant && !isAdjacentSlide && visibleSlides.length === 1) {\n      this.#disabled = true;\n      await this.#scroll.finished; // ensure we're not mid-scroll\n\n      const targetSlide = slides[index];\n      if (!targetSlide || !currentSlide) return;\n\n      // Create a placeholder in the original DOM position of targetSlide\n      const placeholder = document.createElement('slideshow-slide');\n      targetSlide.before(placeholder);\n\n      // Decide whether targetSlide goes before or after currentSlide\n      // so that we scroll a short distance in the correct direction\n      if (requestedIndex < current) {\n        currentSlide.before(targetSlide);\n      } else {\n        currentSlide.after(targetSlide);\n      }\n\n      if (current === 0) this.#scroll.to(currentSlide, { instant: true });\n\n      // Once that scroll finishes, restore the DOM\n      queueMicrotask(async () => {\n        await this.#scroll.finished;\n        this.#disabled = false;\n\n        // Restore the slide back to its original position. This triggers a scroll event.\n        placeholder.replaceWith(targetSlide);\n\n        // Instantly scroll to the target slide as its position will have changed\n        this.#scroll.to(targetSlide, { instant: true });\n\n        // Force Safari to recalculate the timeline state on timeline refresh (after loop)\n        requestAnimationFrame(() => {\n          this.setAttribute('refreshing-timeline', '');\n          requestAnimationFrame(() => {\n            this.removeAttribute('refreshing-timeline');\n          });\n        });\n      });\n    }\n\n    const slide = slides[index];\n    if (!slide) return;\n\n    const previousIndex = this.current;\n\n    slide.setAttribute('aria-hidden', 'false');\n\n    if (this.#scroll) {\n      this.#scroll.to(slide, { instant });\n    }\n\n    this.current = this.slides?.indexOf(slide) || 0;\n\n    this.#centerSelectedThumbnail(index, instant ? 'instant' : 'smooth');\n\n    this.dispatchEvent(\n      new SlideshowSelectEvent({\n        index,\n        previousIndex,\n        userInitiated: event != null,\n        trigger: 'select',\n        slide,\n        id: slide.getAttribute('slide-id'),\n      })\n    );\n  }\n\n  /**\n   * Advances to the next slide.\n   * @param {Event} [event] - The event that triggered the next slide.\n   * @param {Object} [options] - The options for the next slide.\n   * @param {boolean} [options.animate=true] - Whether to animate the next slide.\n   */\n  next(event, options) {\n    event?.preventDefault();\n    this.select(this.nextIndex, event, options);\n  }\n\n  /**\n   * Goes back to the previous slide.\n   * @param {Event} [event] - The event that triggered the previous slide.\n   * @param {Object} [options] - The options for the previous slide.\n   * @param {boolean} [options.animate=true] - Whether to animate the previous slide.\n   */\n  previous(event, options) {\n    event?.preventDefault();\n    this.select(this.previousIndex, event, options);\n  }\n\n  /**\n   * Starts automatic slide playback.\n   * @param {number} [interval] - The time interval in seconds between slides.\n   */\n  play(interval = this.autoplayInterval) {\n    if (this.#interval) return;\n\n    this.paused = false;\n\n    this.#interval = setInterval(() => {\n      if (this.matches(':hover') || document.hidden) return;\n\n      this.next();\n    }, interval);\n  }\n\n  /**\n   * Pauses automatic slide playback.\n   */\n  pause() {\n    this.paused = true;\n    this.suspend();\n  }\n\n  get paused() {\n    return this.hasAttribute('paused');\n  }\n\n  set paused(value) {\n    if (value) {\n      this.setAttribute('paused', '');\n    } else {\n      this.removeAttribute('paused');\n    }\n  }\n\n  /**\n   * Suspends automatic slide playback.\n   */\n  suspend() {\n    clearInterval(this.#interval);\n    this.#interval = undefined;\n  }\n\n  /**\n   * Resumes automatic slide playback if autoplay is enabled.\n   */\n  resume() {\n    if (!this.autoplay || this.paused) return;\n\n    this.pause();\n    this.play();\n  }\n\n  get autoplay() {\n    return Boolean(this.autoplayInterval);\n  }\n\n  get autoplayInterval() {\n    const interval = this.getAttribute('autoplay');\n    const value = parseInt(`${interval}`, 10);\n\n    if (Number.isNaN(value)) return undefined;\n\n    return value * 1000;\n  }\n\n  /**\n   * The current slide index.\n   * @type {number}\n   */\n  #current = 0;\n\n  get current() {\n    return this.#current;\n  }\n\n  /**\n   * Sets the current slide index and update the DOM\n   * @type {number}\n   */\n  set current(value) {\n    const { current, thumbnails, dots, slides, previous, next } = this.refs;\n\n    this.#current = value;\n\n    if (current) current.textContent = `${value + 1}`;\n\n    for (const controls of [thumbnails, dots]) {\n      controls?.forEach((el, i) => el.setAttribute('aria-selected', `${i === value}`));\n    }\n\n    if (previous) previous.disabled = Boolean(!this.infinite && value === 0);\n    if (next) next.disabled = Boolean(!this.infinite && slides && this.nextIndex >= slides.length);\n  }\n\n  get infinite() {\n    return this.getAttribute('infinite') != null;\n  }\n\n  get visibleSlides() {\n    return this.#visibleSlides;\n  }\n\n  get previousIndex() {\n    const { current, visibleSlides } = this;\n    const modifier = visibleSlides.length > 1 ? visibleSlides.length : 1;\n\n    return current - modifier;\n  }\n\n  get nextIndex() {\n    const { current, visibleSlides } = this;\n    const modifier = visibleSlides.length > 1 ? visibleSlides.length : 1;\n\n    return current + modifier;\n  }\n\n  get atStart() {\n    const { current, slides } = this;\n\n    return slides?.length ? current === 0 : false;\n  }\n\n  get atEnd() {\n    const { current, slides } = this;\n\n    return slides?.length ? current === slides.length - 1 : false;\n  }\n\n  /**\n   * Sets the disabled attribute.\n   * @param {boolean} value - The value to set the disabled attribute to.\n   */\n  set disabled(value) {\n    this.setAttribute('disabled', String(value));\n  }\n  /**\n   * Whether the slideshow is disabled.\n   * @type {boolean}\n   */\n  get disabled() {\n    return (\n      this.getAttribute('disabled') === 'true' || (this.hasAttribute('mobile-disabled') && !mediaQueryLarge.matches)\n    );\n  }\n\n  /**\n   * Indicates whether the slideshow is temporarily disabled (e.g., during infinite loop transition).\n   * @type {boolean}\n   */\n  #disabled = false;\n\n  /**\n   * The interval ID for automatic playback.\n   * @type {number|undefined}\n   */\n  #interval = undefined;\n\n  /**\n   * The Scroller instance that manages scrolling.\n   * @type {Scroller}\n   */\n  #scroll;\n\n  /**\n   * The ResizeObserver instance for monitoring scroller size changes\n   * @type {ResizeObserver}\n   */\n  #resizeObserver;\n\n  /**\n   * IntersectionObserver for efficient visibility tracking of slides\n   * @type {IntersectionObserver | null}\n   */\n  #intersectionObserver = null;\n\n  /**\n   * Cached visible slides result from IntersectionObserver\n   * @type {HTMLElement[]}\n   */\n  #visibleSlides = [];\n\n  /**\n   * Setup the slideshow without controls for zero or one slides\n   */\n  #setupSlideshowWithoutControls() {\n    this.current = 0;\n    if (this.hasAttribute('auto-hide-controls')) {\n      const { slideshowControls } = this.refs;\n      if (slideshowControls instanceof HTMLElement) {\n        slideshowControls.hidden = true;\n      }\n    }\n\n    if (this.refs.slides?.[0]) {\n      this.refs.slides[0].setAttribute('aria-hidden', 'false');\n    }\n  }\n\n  /**\n   * Setup the slideshow with controls for when there are multiple slides\n   */\n  #setupSlideshow() {\n    // Setup IntersectionObserver first for efficient visibility tracking\n    this.#setupIntersectionObserver();\n\n    // Setup the scroll instance\n    const { scroller } = this.refs;\n    this.#scroll = new Scroller(scroller, {\n      onScroll: this.#handleScroll,\n      onScrollStart: this.#onTransitionInit,\n      onScrollEnd: this.#onTransitionEnd,\n    });\n\n    scroller.addEventListener('mousedown', this.#handleMouseDown);\n\n    this.addEventListener('mouseenter', this.suspend);\n    this.addEventListener('mouseleave', this.resume);\n    this.addEventListener('pointerenter', this.#handlePointerEnter);\n    document.addEventListener('visibilitychange', this.#handleVisibilityChange);\n\n    this.#updateControlsVisibility();\n\n    this.disabled = this.isNested || this.disabled;\n\n    this.resume();\n\n    this.current = this.initialSlideIndex;\n\n    // Batch reads and writes to the DOM\n    scheduler.schedule(() => {\n      let visibleSlidesAmount = 0;\n      const initialSlideId = this.initialSlide?.getAttribute('slide-id');\n\n      // Wait for next frame to ensure layout is fully calculated before setting initial scroll position\n      // This prevents race conditions on Safari mobile when section_width is 'full-width'\n      requestAnimationFrame(() => {\n        if (this.initialSlideIndex !== 0 && initialSlideId) {\n          this.select({ id: initialSlideId }, undefined, { animate: false });\n          visibleSlidesAmount = 1;\n        } else {\n          visibleSlidesAmount = this.#updateVisibleSlides();\n          if (visibleSlidesAmount === 0) {\n            this.select(0, undefined, { animate: false });\n            visibleSlidesAmount = 1;\n          }\n        }\n      });\n\n      this.#resizeObserver = new ResizeObserver(async () => {\n        if (viewTransition.current) await viewTransition.current;\n\n        if (visibleSlidesAmount > 1) {\n          this.#updateVisibleSlides();\n        }\n\n        if (this.hasAttribute('auto-hide-controls')) {\n          this.#updateControlsVisibility();\n        }\n      });\n\n      this.#resizeObserver.observe(this.refs.slideshowContainer);\n    });\n  }\n\n  /**\n   * Callback invoked on user initiated scroll to sync the current slide index\n   * and emit a slide change event if the index has changed.\n   */\n  #handleScroll = () => {\n    const previousIndex = this.#current;\n    const index = this.#sync();\n\n    if (index === previousIndex) return;\n\n    const slide = this.slides?.[index];\n    if (!slide) return;\n\n    this.dispatchEvent(\n      new SlideshowSelectEvent({\n        index,\n        previousIndex,\n        userInitiated: true,\n        trigger: 'scroll',\n        slide,\n        id: slide.getAttribute('slide-id'),\n      })\n    );\n  };\n\n  #onTransitionInit = () => {\n    this.setAttribute('transitioning', '');\n  };\n\n  #onTransitionEnd = () => {\n    this.#updateVisibleSlides();\n    this.removeAttribute('transitioning');\n  };\n\n  /**\n   * Synchronizes the scroll position and updates the current slide index.\n   * @returns {number} The index of the current slide.\n   */\n  #sync = () => {\n    const { slides } = this;\n    if (!slides) return (this.current = 0);\n\n    if (!this.#scroll) return (this.current = 0);\n\n    const visibleSlides = this.visibleSlides;\n\n    if (!visibleSlides.length) return this.current;\n\n    const { axis } = this.#scroll;\n    const { scroller } = this.refs;\n    const centers = visibleSlides.map((slide) => center(slide, axis));\n    const referencePoint = visibleSlides.length > 1 ? scroller.getBoundingClientRect()[axis] : center(scroller, axis);\n    const closestCenter = closest(centers, referencePoint);\n    const closestVisibleSlide = visibleSlides[centers.indexOf(closestCenter)];\n\n    if (!closestVisibleSlide) return (this.current = 0);\n\n    const index = slides.indexOf(closestVisibleSlide);\n\n    return (this.current = index);\n  };\n\n  #dragging = false;\n\n  /**\n   * Handles the 'mousedown' event to start dragging slides.\n   * @param {MouseEvent} event - The mousedown event.\n   */\n  #handleMouseDown = (event) => {\n    const { slides } = this;\n\n    if (!slides || slides.length <= 1) return;\n    if (!(event.target instanceof Element)) return;\n    if (this.disabled || this.#dragging) return;\n\n    // Check if the event target is within a 3D model interactive element\n    // This prevents the slideshow from capturing drag events when interacting with 3D models\n    if (event.target.closest('model-viewer')) {\n      return;\n    }\n\n    event.preventDefault();\n    // Store initial position but don't start handling yet\n    const { axis } = this.#scroll;\n    const startPosition = event[axis];\n\n    const controller = new AbortController();\n    const { signal } = controller;\n    const startTime = performance.now();\n    let previous = startPosition;\n    let velocity = 0;\n    let moved = false;\n    let distanceTravelled = 0;\n\n    this.#dragging = true;\n\n    /**\n     * Handles the 'pointermove' event to update the scroll position.\n     * @param {PointerEvent} event - The pointermove event.\n     */\n    const onPointerMove = (event) => {\n      const current = event[axis];\n      const initialDelta = startPosition - current;\n\n      if (!initialDelta) return;\n\n      if (!moved) {\n        moved = true;\n        this.setPointerCapture(event.pointerId);\n\n        // Prevent clicks once the user starts dragging\n        document.addEventListener('click', preventDefault, { once: true, signal });\n\n        const movingRight = initialDelta < 0;\n        const movingLeft = initialDelta > 0;\n\n        // Check if the current slideshow should handle this drag\n        const closestSlideshow = this.parentElement?.closest('slideshow-component');\n        const isNested = closestSlideshow instanceof Slideshow && closestSlideshow !== this;\n        const cannotMoveInDirection = (movingRight && this.atStart) || (movingLeft && this.atEnd);\n\n        // Abort and let the parent slideshow handle the drag if we're moving in a direction where nested slideshow can't move\n        if (isNested && cannotMoveInDirection) {\n          controller.abort();\n          return;\n        }\n\n        this.pause();\n        this.setAttribute('dragging', '');\n      }\n\n      // Stop the event from bubbling up to parent slideshow components\n      event.stopImmediatePropagation();\n\n      const delta = previous - current;\n      const timeDelta = performance.now() - startTime;\n      velocity = Math.round((delta / timeDelta) * 1000);\n      previous = current;\n      distanceTravelled += Math.abs(delta);\n\n      this.#scroll.by(delta, { instant: true });\n    };\n\n    /**\n     * Handles the 'pointerup' event to stop dragging slides.\n     * @param {PointerEvent} event - The pointerup event.\n     */\n    const onPointerUp = async (event) => {\n      controller.abort();\n      const { current, slides } = this;\n      const { scroller } = this.refs;\n\n      this.#dragging = false;\n\n      if (!slides?.length || !scroller) return;\n\n      const direction = Math.sign(velocity);\n      const next = this.#sync();\n\n      const modifier = current !== next || Math.abs(velocity) < 10 || distanceTravelled < 10 ? 0 : direction;\n      const newIndex = clamp(next + modifier, 0, slides.length - 1);\n\n      const newSlide = slides[newIndex];\n      const currentIndex = this.current;\n\n      if (!newSlide) throw new Error(`Slide not found at index ${newIndex}`);\n\n      this.#scroll.to(newSlide);\n\n      this.removeAttribute('dragging');\n      this.releasePointerCapture(event.pointerId);\n\n      this.#centerSelectedThumbnail(newIndex);\n\n      this.dispatchEvent(\n        new SlideshowSelectEvent({\n          index: newIndex,\n          previousIndex: currentIndex,\n          userInitiated: true,\n          trigger: 'drag',\n          slide: newSlide,\n          id: newSlide.getAttribute('slide-id'),\n        })\n      );\n\n      this.current = newIndex;\n\n      await this.#scroll.finished;\n\n      // It's possible that the user started dragging again before the scroll finished\n      if (this.#dragging) return;\n\n      this.#scroll.snap = true;\n      this.resume();\n    };\n\n    this.#scroll.snap = false;\n\n    document.addEventListener('pointermove', onPointerMove, { signal });\n    document.addEventListener('pointerup', onPointerUp, { signal });\n    /**\n     * pointerDown calls onPointerUp to fix an issue where the first tap-and-drag\n     * on the zoom dialog is captured by the pointerMove/pointerUp listeners,\n     * sometimes causing the slideshow to change slides unexpectedly\n     */\n    document.addEventListener('pointerdown', onPointerUp, { signal });\n    document.addEventListener('pointercancel', onPointerUp, { signal });\n    document.addEventListener('pointercapturelost', onPointerUp, { signal });\n  };\n\n  #handlePointerEnter = () => {\n    this.setAttribute('actioned', '');\n  };\n\n  get slides() {\n    return this.refs.slides?.filter((slide) => !slide.hasAttribute('hidden') || slide.hasAttribute('reveal'));\n  }\n\n  /**\n   * The initial slide index.\n   * @type {number}\n   */\n  get initialSlideIndex() {\n    const initialSlide = this.getAttribute('initial-slide');\n    if (initialSlide == null) return 0;\n\n    return parseInt(initialSlide, 10);\n  }\n\n  /**\n   * Pause the slideshow when the page is hidden.\n   */\n  #handleVisibilityChange = () => (document.hidden ? this.pause() : this.resume());\n\n  #updateControlsVisibility() {\n    if (!this.hasAttribute('auto-hide-controls')) return;\n\n    const { scroller, slideshowControls } = this.refs;\n\n    if (!(slideshowControls instanceof HTMLElement)) return;\n\n    slideshowControls.hidden = scroller.scrollWidth <= scroller.offsetWidth;\n  }\n\n  /**\n   * Setup IntersectionObserver for efficient visibility tracking of slides\n   */\n  #setupIntersectionObserver() {\n    const { slides, scroller } = this.refs;\n    if (!slides?.length) return;\n\n    if (this.#intersectionObserver) {\n      this.#intersectionObserver.disconnect();\n    }\n\n    this.#intersectionObserver = new IntersectionObserver(\n      (entries) => {\n        const allEntries = [\n          ...entries,\n          ...(this.#intersectionObserver ? this.#intersectionObserver.takeRecords() : []),\n        ];\n\n        for (const entry of allEntries) {\n          const slide = /** @type {HTMLElement} */ (entry.target);\n          const isCurrentlyVisible = this.#visibleSlides.includes(slide);\n          const shouldBeVisible = entry.intersectionRatio >= SLIDE_VISIBLITY_THRESHOLD;\n\n          if (shouldBeVisible && !isCurrentlyVisible) {\n            this.#visibleSlides.push(slide);\n          } else if (!shouldBeVisible && isCurrentlyVisible) {\n            const index = this.#visibleSlides.indexOf(slide);\n            if (index > -1) {\n              this.#visibleSlides.splice(index, 1);\n            }\n          }\n        }\n\n        this.#visibleSlides.sort((a, b) => slides.indexOf(a) - slides.indexOf(b));\n        this.#updateVisibleSlides();\n      },\n      {\n        root: scroller,\n        threshold: SLIDE_VISIBLITY_THRESHOLD,\n        // Add small margin to account for sub-pixel rendering\n        rootMargin: '1px',\n      }\n    );\n\n    // Observe all slides - observer will fire initial callback asynchronously\n    slides.forEach((slide) => {\n      this.#intersectionObserver?.observe(slide);\n    });\n  }\n\n  /**\n   * Centers the selected thumbnail in the thumbnails container\n   * @param {number} index - The index of the selected thumbnail\n   * @param {ScrollBehavior} [behavior] - The scroll behavior.\n   */\n  #centerSelectedThumbnail(index, behavior = 'smooth') {\n    const selectedThumbnail = this.refs.thumbnails?.[index];\n    if (!selectedThumbnail) return;\n\n    const { thumbnailsContainer } = this.refs;\n    if (!thumbnailsContainer || !(thumbnailsContainer instanceof HTMLElement)) return;\n\n    const { slideshowControls } = this.refs;\n    if (!slideshowControls || !(slideshowControls instanceof HTMLElement)) return;\n\n    scrollIntoView(selectedThumbnail, {\n      ancestor: thumbnailsContainer,\n      behavior,\n      block: 'center',\n      inline: 'center',\n    });\n  }\n\n  #updateVisibleSlides() {\n    const { slides } = this;\n    if (!slides || !slides.length) return 0;\n\n    const visibleSlides = this.visibleSlides;\n\n    // Batch writes to the DOM\n    scheduler.schedule(() => {\n      // Update aria-hidden based on visibility\n      slides.forEach((slide) => {\n        const isVisible = visibleSlides.includes(slide);\n        slide.setAttribute('aria-hidden', `${!isVisible}`);\n      });\n    });\n\n    return visibleSlides.length;\n  }\n}\n\nif (!customElements.get('slideshow-component')) {\n  customElements.define('slideshow-component', Slideshow);\n}\n"
  },
  {
    "path": "assets/sticky-add-to-cart.js",
    "content": "import { Component } from '@theme/component';\nimport { ThemeEvents, QuantitySelectorUpdateEvent } from '@theme/events';\nimport { morph } from '@theme/morph';\nimport { onAnimationEnd } from '@theme/utilities';\n\n/**\n * @typedef {Object} ProductVariant\n * @property {string|number} [id] - Variant ID\n * @property {string} [title] - Variant title\n * @property {string} [name] - Variant name\n * @property {boolean} [available] - Whether variant is available\n * @property {Object} [featured_media] - Featured media object\n * @property {Object} [featured_media.preview_image] - Preview image data\n * @property {string} [featured_media.preview_image.src] - Image source URL\n * @property {string} [featured_media.alt] - Alt text for the image\n */\n\n/**\n * @typedef {HTMLElement & {\n *   source: Element,\n *   destination: Element,\n *   useSourceSize: string | boolean\n * }} FlyToCart\n */\n\n/**\n * @typedef {Object} StickyAddToCartRefs\n * @property {HTMLElement} stickyBar - The floating bar container\n * @property {HTMLButtonElement} addToCartButton - Sticky bar's button\n * @property {HTMLElement} quantityDisplay - Quantity display container\n * @property {HTMLElement} quantityNumber - Quantity number element\n * @property {HTMLImageElement} productImage - Product image element\n */\n\n/**\n * A custom element that manages a sticky add-to-cart bar.\n * Shows when the main buy buttons scroll out of view.\n *\n * @extends {Component<StickyAddToCartRefs>}\n */\nclass StickyAddToCartComponent extends Component {\n  requiredRefs = ['stickyBar', 'addToCartButton', 'quantityDisplay', 'quantityNumber'];\n\n  /** @type {IntersectionObserver | null} */\n  #buyButtonsIntersectionObserver = null;\n\n  /** @type {IntersectionObserver | null} */\n  #mainBottomObserver = null;\n\n  /** @type {number | undefined} */\n  #resetTimeout;\n\n  /** @type {boolean} */\n  #isStuck = false;\n\n  /** @type {number | null} */\n  #animationTimeout = null;\n\n  /** @type {AbortController} */\n  #abortController = new AbortController();\n\n  /** @type {HTMLButtonElement | null} */\n  #targetAddToCartButton = null;\n\n  /** @type {number} */\n  #currentQuantity = 1;\n\n  /** @type {boolean} */\n  #hiddenByBottom = false;\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.#setupIntersectionObserver();\n\n    const { signal } = this.#abortController;\n    const target = this.closest('.shopify-section');\n    target?.addEventListener(ThemeEvents.variantUpdate, this.#handleVariantUpdate, { signal });\n    target?.addEventListener(ThemeEvents.variantSelected, this.#handleVariantSelected, { signal });\n\n    document.addEventListener(ThemeEvents.cartUpdate, this.#handleCartAddComplete, { signal });\n    document.addEventListener(ThemeEvents.cartError, this.#handleCartAddComplete, { signal });\n    document.addEventListener(ThemeEvents.quantitySelectorUpdate, this.#handleQuantityUpdate, { signal });\n\n    this.#getInitialQuantity();\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#buyButtonsIntersectionObserver?.disconnect();\n    this.#mainBottomObserver?.disconnect();\n    this.#abortController.abort();\n    if (this.#animationTimeout) {\n      clearTimeout(this.#animationTimeout);\n    }\n  }\n\n  /**\n   * Sets up the IntersectionObserver to watch the buy buttons visibility\n   */\n  #setupIntersectionObserver() {\n    const productForm = this.#getProductForm();\n    if (!productForm) return;\n\n    const buyButtonsBlock = productForm.closest('.buy-buttons-block');\n    if (!buyButtonsBlock) return;\n\n    // In themes migrated from 2.0, the footer element doesn't exist\n    const footer = document.querySelector('footer') ?? document.querySelector('[class*=\"footer-group\"]');\n    if (!footer) return;\n\n    // Observer for buy buttons visibility\n    this.#buyButtonsIntersectionObserver = new IntersectionObserver((entries) => {\n      const [entry] = entries;\n      if (!entry) return;\n\n      // Only show sticky bar if buy buttons have been scrolled past (above viewport)\n      if (!entry.isIntersecting && !this.#isStuck) {\n        // Check if the element is above the viewport (scrolled past) or below (not yet reached)\n        const rect = entry.target.getBoundingClientRect();\n        if (rect.bottom < 0 || rect.top < 0) {\n          // Element is above viewport - show sticky bar\n          this.#showStickyBar();\n        }\n        // If rect.top >= 0, element is below viewport - don't show sticky bar yet\n      } else if (entry.isIntersecting && this.#isStuck) {\n        this.#hiddenByBottom = false;\n        this.#hideStickyBar();\n      }\n    });\n\n    // Observer for footer visibility - hides sticky bar at page bottom\n    this.#mainBottomObserver = new IntersectionObserver(\n      (entries) => {\n        const [entry] = entries;\n        if (!entry) return;\n\n        if (entry.isIntersecting && this.#isStuck) {\n          this.#hiddenByBottom = true;\n          this.#hideStickyBar();\n        } else if (!entry.isIntersecting && this.#hiddenByBottom) {\n          // Footer out of view - check if we should show sticky bar again\n          const rect = buyButtonsBlock.getBoundingClientRect();\n          // Only show if buy buttons are above the viewport (scrolled past)\n          if (rect.bottom < 0 || rect.top < 0) {\n            this.#hiddenByBottom = false;\n            this.#showStickyBar();\n          }\n        }\n      },\n      {\n        rootMargin: '200px 0px 0px 0px',\n      }\n    );\n\n    this.#buyButtonsIntersectionObserver.observe(buyButtonsBlock);\n    this.#mainBottomObserver.observe(footer);\n    this.#targetAddToCartButton = productForm.querySelector('[ref=\"addToCartButton\"]');\n  }\n\n  // Public action handlers\n  /**\n   * Handles the add to cart button click in the sticky bar\n   */\n  handleAddToCartClick = async () => {\n    if (!this.#targetAddToCartButton) return;\n    this.#targetAddToCartButton.dataset.puppet = 'true';\n    this.#targetAddToCartButton.click();\n    const cartIcon = document.querySelector('.header-actions__cart-icon');\n\n    if (this.refs.addToCartButton.dataset.added !== 'true') {\n      this.refs.addToCartButton.dataset.added = 'true';\n    }\n\n    if (!cartIcon || !this.refs.addToCartButton || !this.refs.productImage) return;\n    if (this.#resetTimeout) clearTimeout(this.#resetTimeout);\n\n    const flyToCartElement = /** @type {FlyToCart} */ (document.createElement('fly-to-cart'));\n    const sourceStyles = getComputedStyle(this.refs.productImage);\n\n    flyToCartElement.classList.add('fly-to-cart--sticky');\n    flyToCartElement.style.setProperty('background-image', `url(${this.refs.productImage.src})`);\n    flyToCartElement.useSourceSize = 'true';\n    flyToCartElement.source = this.refs.productImage;\n    flyToCartElement.destination = cartIcon;\n\n    document.body.appendChild(flyToCartElement);\n\n    await onAnimationEnd([this.refs.addToCartButton, flyToCartElement]);\n    this.#resetTimeout = setTimeout(() => {\n      this.refs.addToCartButton.removeAttribute('data-added');\n    }, 800);\n  };\n\n  /**\n   * Handles variant update events\n   * @param {CustomEvent} event - The variant update event\n   */\n  #handleVariantUpdate = (event) => {\n    if (event.detail.data.productId !== this.dataset.productId) return;\n\n    const variant = event.detail.resource;\n\n    // Get the new sticky add to cart HTML from the server response\n    const newStickyAddToCart = event.detail.data.html.querySelector('sticky-add-to-cart');\n    if (!newStickyAddToCart) return;\n\n    const newStickyBar = newStickyAddToCart.querySelector('[ref=\"stickyBar\"]');\n    if (!newStickyBar) return;\n\n    // Store current visibility state before morphing\n    const currentStuck = this.refs.stickyBar.getAttribute('data-stuck') || 'false';\n    const variantAvailable = newStickyAddToCart.dataset.variantAvailable;\n\n    // Morph the entire sticky bar content\n    morph(this.refs.stickyBar, newStickyBar, { childrenOnly: true });\n\n    // Restore visibility state after morphing\n    this.refs.stickyBar.setAttribute('data-stuck', currentStuck);\n    this.dataset.variantAvailable = variantAvailable;\n\n    // Update the dataset attributes with new variant info\n    if (variant && variant.id) {\n      this.dataset.currentVariantId = variant.id;\n    }\n\n    // Re-cache the target add to cart button after morphing\n    const productForm = this.#getProductForm();\n    if (productForm) {\n      this.#targetAddToCartButton = productForm.querySelector('[ref=\"addToCartButton\"]');\n    }\n\n    if (variant == null) {\n      this.#handleVariantUnavailable();\n    }\n    // Restore the current quantity display if needed\n    this.#updateButtonText();\n  };\n\n  /**\n   * Handles variant selected events\n   * @param {CustomEvent} event - The variant selected event\n   */\n  #handleVariantSelected = (event) => {\n    // The variant update event will follow and handle all updates via morph\n    // We just update the dataset here for tracking\n    const variantId = event.detail.resource?.id;\n    if (!variantId) return;\n    this.dataset.currentVariantId = variantId;\n  };\n\n  /**\n   * Updates the variant title based on selected options when the variant is unavailable\n   */\n  #handleVariantUnavailable = () => {\n    this.dataset.currentVariantId = '';\n    const variantTitleElement = this.querySelector('.sticky-add-to-cart__variant');\n    const productId = this.dataset.productId;\n    const variantPicker = document.querySelector(`variant-picker[data-product-id=\"${productId}\"]`);\n    if (!variantTitleElement || !variantPicker) return;\n\n    const selectedOptions = Array.from(variantPicker.querySelectorAll('input:checked'))\n      .map((option) => /** @type {HTMLInputElement} */ (option).value)\n      .filter((value) => value !== '')\n      .join(' / ');\n    if (!selectedOptions) return;\n    variantTitleElement.textContent = selectedOptions;\n  };\n\n  /**\n   * Handles cart add complete (success or error) - resets puppet flag\n   * @param {CustomEvent} _event - The cart event (unused)\n   */\n  #handleCartAddComplete = (_event) => {\n    // Reset the puppet flag after cart operation\n    if (this.#targetAddToCartButton) {\n      this.#targetAddToCartButton.dataset.puppet = 'false';\n    }\n  };\n\n  /**\n   * Handles quantity selector update events\n   * @param {QuantitySelectorUpdateEvent} event - The quantity update event\n   */\n  #handleQuantityUpdate = (event) => {\n    // Only respond to product page quantity selector updates, not cart drawer\n    if (event.detail.cartLine) return;\n\n    this.#currentQuantity = event.detail.quantity;\n    this.#updateButtonText();\n  };\n\n  /**\n   * Shows the sticky bar with animation\n   */\n  #showStickyBar() {\n    const { stickyBar } = this.refs;\n    this.#isStuck = true;\n    stickyBar.dataset.stuck = 'true';\n  }\n\n  /**\n   * Hides the sticky bar with animation\n   */\n  #hideStickyBar() {\n    const { stickyBar } = this.refs;\n    this.#isStuck = false;\n    stickyBar.dataset.stuck = 'false';\n  }\n\n  // Helper methods\n  /**\n   * Gets the product form element\n   * @returns {HTMLElement | null}\n   */\n  #getProductForm() {\n    const productId = this.dataset.productId;\n    if (!productId) return null;\n\n    const sectionElement = this.closest('.shopify-section');\n    if (!sectionElement) return null;\n\n    const sectionId = sectionElement.id.replace('shopify-section-', '');\n    return document.querySelector(\n      `#shopify-section-${sectionId} product-form-component[data-product-id=\"${productId}\"]`\n    );\n  }\n\n  /**\n   * Gets the initial quantity from the data attribute\n   */\n  #getInitialQuantity() {\n    this.#currentQuantity = parseInt(this.dataset.initialQuantity || '1') || 1;\n    this.#updateButtonText();\n  }\n\n  /**\n   * Updates the button text to include quantity\n   */\n  #updateButtonText() {\n    const { addToCartButton, quantityDisplay, quantityNumber } = this.refs;\n\n    const available = !addToCartButton.disabled;\n\n    // Update the quantity number\n    quantityNumber.textContent = this.#currentQuantity.toString();\n\n    // Show/hide the quantity display based on availability and quantity\n    if (available && this.#currentQuantity > 1) {\n      quantityDisplay.style.display = 'inline';\n    } else {\n      quantityDisplay.style.display = 'none';\n    }\n  }\n}\n\nif (!customElements.get('sticky-add-to-cart')) {\n  customElements.define('sticky-add-to-cart', StickyAddToCartComponent);\n}\n"
  },
  {
    "path": "assets/template-giftcard.css",
    "content": ".gift-card {\n  --buttons-max-width: min(16rem, 100%);\n  --gift-card-image-max-height: 35rem;\n  --gift-card-image-max-width: 21rem;\n\n  padding-block: var(--padding-4xl);\n  padding-inline: var(--padding-lg);\n\n  @media only screen and (min-width: 750px) {\n    padding-block: var(--padding-6xl) var(--padding-5xl);\n    padding-inline: var(--padding-6xl);\n  }\n}\n\n.gift-card__main {\n  display: flex;\n  flex-direction: column;\n}\n\n.gift-card__image-wrapper {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  aspect-ratio: 5 / 3;\n  padding: var(--padding-4xl);\n  margin-block: var(--padding-4xl);\n  margin-inline: auto;\n  max-width: var(--gift-card-image-max-width);\n  border: 1px solid var(--color-border);\n  border-radius: var(--style-border-radius-lg);\n  overflow: hidden;\n}\n\n.gift-card__image-wrapper:has(.gift-card__image-generic) {\n  padding: 0;\n  border: none;\n}\n\n.gift-card__image {\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n  object-position: center;\n  padding: 0.5rem;\n}\n\n.gift-card__price {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0 var(--gap-lg);\n  align-items: center;\n  justify-content: center;\n}\n\n.gift-card__code,\n.gift-card__text-wrapper h1,\n.gift-card__price h2 {\n  font-family: var(--font-paragraph--family);\n  font-style: var(--font-paragraph--style);\n  font-weight: var(--font-paragraph--weight);\n  text-align: center;\n  margin-block-end: var(--margin-xl);\n}\n\n.gift-card__code,\n.gift-card__text-wrapper h1 {\n  font-size: var(--font-size--2xl);\n  margin-block-end: 0;\n}\n\n.gift-card__price h2 {\n  font-size: var(--font-size--5xl);\n  margin-block-end: var(--padding-4xl);\n}\n\n.gift-card__text-wrapper {\n  text-align: center;\n  max-width: var(--max-width--body-normal);\n  margin: 0 auto;\n}\n\n.gift-card__badge {\n  border: 1px solid var(--color-border);\n  border-radius: var(--style-border-radius-buttons);\n  display: inline-block;\n  line-height: 0.25;\n  padding: var(--padding-md);\n  text-align: center;\n  background-color: rgb(var(--color-background));\n  border-color: rgb(var(--color-foreground), var(--opacity-5));\n  color: rgb(var(--color-foreground));\n  margin-block: 0;\n}\n\n.gift-card__badge--expired {\n  opacity: var(--disabled-opacity);\n}\n\n.gift-card__qr-code {\n  margin: var(--margin-4xl) 0;\n}\n\n.gift-card__qr-code img {\n  margin: 0 auto;\n  width: auto;\n}\n\n.gift-card__buttons {\n  display: flex;\n  flex-flow: column wrap;\n  width: var(--buttons-max-width);\n  margin: 0 auto;\n  align-items: center;\n  gap: var(--gap-sm);\n}\n\n.gift-card__buttons-full-width {\n  width: 100%;\n}\n\n.gift-card__buttons .button {\n  width: 100%;\n  justify-content: center;\n}\n\n.gift-card__copy-button {\n  position: relative;\n}\n\n.form__message {\n  display: flex;\n  justify-content: center;\n  position: absolute;\n  top: calc((var(--padding-lg) + var(--font-paragraph--size)) * -1);\n  left: 0;\n  right: 0;\n  transition: opacity var(--animation-speed) var(--animation-easing),\n    transform var(--animation-speed) var(--animation-easing);\n  opacity: 0;\n  transform: translateY(var(--padding-md));\n}\n\n.form__message:not(.visually-hidden) {\n  opacity: 1;\n  transform: translateY(0);\n}\n"
  },
  {
    "path": "assets/theme-editor.js",
    "content": "// Theme editor specific logic\nimport { updateAllHeaderCustomProperties } from '@theme/utilities';\n\n/** @type {{ activeSlideIndex: number | null }} */\nconst layeredSlideshowState = {\n  activeSlideIndex: null,\n};\n\n/** @type {{ activeSlideIndex: number | null }} */\nconst carouselState = {\n  activeSlideIndex: null,\n};\n\n/** @type {{ activeSlideIndex: number | null }} */\nconst slideshowState = {\n  activeSlideIndex: null,\n};\n\n/**\n * @param {Event} event\n */\ndocument.addEventListener('shopify:block:select', function (event) {\n  if (event.target instanceof HTMLElement) {\n    // Check if the selected element is specifically a product-card block itself\n    // Not a child block within the product card\n\n    // First, remove data-no-navigation from any previously selected product cards\n    document.querySelectorAll('product-card[data-no-navigation]').forEach((card) => {\n      if (card instanceof HTMLElement) {\n        card.removeAttribute('data-no-navigation');\n      }\n    });\n\n    if (event.target.tagName === 'PRODUCT-CARD') {\n      const section = event.target.closest('.shopify-section');\n\n      if (section) {\n        const productCardsInSection = section.querySelectorAll('product-card');\n\n        productCardsInSection.forEach((card) => {\n          if (card instanceof HTMLElement) {\n            card.setAttribute('data-no-navigation', 'true');\n          }\n        });\n      }\n    }\n\n    // Keep track of the selected slide for the slideshow\n    const slide = event.target.closest('slideshow-slide');\n\n    if (slide) {\n      /** @type {import('./slideshow').Slideshow | null} */\n      const slideshow = slide.closest('slideshow-component');\n\n      if (slideshow) {\n        const index = Array.from(slide.parentElement?.children ?? []).indexOf(slide);\n\n        if (index === -1) return;\n\n        // Compare before updating to detect if same slide is selected again\n        const isAlreadyActive = index === slideshowState.activeSlideIndex;\n        slideshowState.activeSlideIndex = index;\n        // Pause autoplay\n        slideshow.pause();\n        slideshow.select(index, undefined, { animate: isAlreadyActive ? false : true });\n      }\n    }\n\n    // Keep track of the selected slide for the carousel\n    const carouselCard = event.target.closest('[data-carousel-card]');\n\n    if (carouselCard) {\n      /** @type {import('./slideshow').Slideshow | null} */\n      const slideshow = carouselCard.closest('slideshow-component');\n\n      if (slideshow) {\n        const cards = Array.from(carouselCard.parentElement?.children ?? []);\n        if (!cards) return;\n\n        const index = cards.indexOf(carouselCard);\n\n        if (index === -1) return;\n\n        // Compare before updating to detect if same slide is selected again\n        const isAlreadyActive = index === carouselState.activeSlideIndex;\n        carouselState.activeSlideIndex = index;\n        const targetCard = cards[index];\n\n        if (targetCard instanceof HTMLElement) {\n          targetCard.scrollIntoView({ behavior: isAlreadyActive ? 'instant' : 'smooth', inline: 'center' });\n        }\n      }\n    }\n\n    // Keep track of the selected slide for the layered slideshow\n    const layeredSlideshowPanel = event.target.closest('layered-slideshow-component [role=\"tabpanel\"]');\n\n    if (layeredSlideshowPanel) {\n      /** @type {import('./layered-slideshow').LayeredSlideshowComponent | null} */\n      const layeredSlideshow = layeredSlideshowPanel.closest('layered-slideshow-component');\n      if (!layeredSlideshow) return;\n\n      const index = Array.from(layeredSlideshow.querySelectorAll('[role=\"tabpanel\"]')).indexOf(layeredSlideshowPanel);\n      if (index === -1) return;\n\n      // Compare before updating to detect if same slide is selected again\n      const isAlreadyActive = index === layeredSlideshowState.activeSlideIndex;\n      layeredSlideshowState.activeSlideIndex = index;\n\n      // Use instant transition if the same slide is selected again\n      layeredSlideshow.select(index, { instant: isAlreadyActive });\n    }\n  }\n});\n\ndocument.addEventListener('shopify:block:deselect', function (event) {\n  if (event.target instanceof HTMLElement) {\n    // Remove data-no-navigation when product card is deselected\n    if (event.target.tagName === 'PRODUCT-CARD') {\n      event.target.removeAttribute('data-no-navigation');\n    }\n\n    /** @type {import('./slideshow').Slideshow | null} */\n    const slideshow = event.target.closest('slideshow-component');\n\n    if (slideshow) {\n      // Resume playback\n      slideshow.resume();\n    }\n  }\n});\n\ndocument.addEventListener('shopify:section:load', function (event) {\n  if (event.target instanceof HTMLElement && event.target.classList.contains('shopify-section-group-header-group')) {\n    updateAllHeaderCustomProperties();\n  }\n});\n\ndocument.addEventListener('shopify:section:unload', function (event) {\n  if (event.target instanceof HTMLElement && event.target.classList.contains('shopify-section-group-header-group')) {\n    setTimeout(() => {\n      updateAllHeaderCustomProperties();\n    }, 500);\n  }\n});\n\n/**\n * When in the theme editor, it can be frustrating to be tweaking the design of features that are implemented as a dialog\n * or any sort of overlay, because the theme editor will refresh the page and close the dialog.\n *\n * This script is used to save the state of these features and restore it when the page is refreshed, to make things a little more seamless.\n */\n\n// Detect when page is about to unload\n// This helps distinguish between theme editor refreshes (which don't trigger beforeunload)\n// and actual navigation (which does trigger beforeunload)\nwindow.addEventListener('beforeunload', function (_event) {\n  // Set a flag to indicate that an actual unload is happening (not just a refresh)\n  sessionStorage.setItem('editor-page-unloading', 'true');\n});\n\n// Check if the device is iOS as Safari on iOS doesn't support the beforeunload event\nconst isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);\n\nif (window.Shopify?.designMode && !isIOS) {\n  // Skip editor state management on iOS devices\n  (function editorStateManager() {\n    const EDITOR_PREFIX = 'editor-save-state';\n\n    /**\n     * Check if the page just unloaded (actual navigation) vs a refresh\n     * @returns {boolean}\n     */\n    function wasPageUnloading() {\n      const unloading = sessionStorage.getItem('editor-page-unloading') === 'true';\n      // Clear the flag after checking\n      if (unloading) {\n        sessionStorage.removeItem('editor-page-unloading');\n      }\n      return unloading;\n    }\n\n    /**\n     * Clear all saved editor states\n     */\n    function clearAllEditorStates() {\n      const keys = Object.keys(sessionStorage);\n      keys.forEach((key) => {\n        if (key.startsWith(EDITOR_PREFIX)) {\n          sessionStorage.removeItem(key);\n        }\n      });\n    }\n\n    /**\n     * @param {string} name\n     */\n    function getEditorState(name) {\n      const state = sessionStorage.getItem(`${EDITOR_PREFIX}-${name}`);\n      return state ? JSON.parse(state) : null;\n    }\n\n    /**\n     * @param {string} name\n     * @param {boolean} isOpen\n     * @param {string | undefined} instanceId\n     */\n    function saveEditorState(name, isOpen, instanceId) {\n      sessionStorage.setItem(`${EDITOR_PREFIX}-${name}`, JSON.stringify({ isOpen, instanceId }));\n    }\n\n    /** @type {{name: string, selector: string, matches: (el: Element) => boolean, isOpen: (el: Element) => boolean, open: (el: Element, instanceId?: string) => void, getInstanceId?: (el: Element) => string | undefined}[]} */\n    const features = [\n      {\n        name: 'account-popover',\n        selector: '.account-popover',\n        matches(el) {\n          return el.matches(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el) => el.setAttribute('open', ''),\n      },\n      {\n        name: 'account-drawer',\n        selector: '.account-drawer',\n        matches(el) {\n          return !!el.closest(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        // @ts-ignore\n        open: (el) => el.showDialog(),\n      },\n      {\n        name: 'localization-dropdown',\n        selector: 'dropdown-localization-component',\n        matches(el) {\n          return !!el.closest(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('aria-expanded') === 'true',\n        // @ts-ignore\n        open: (el) => el.showPanel(),\n      },\n      {\n        name: 'search-modal',\n        selector: '.search-modal',\n        matches(el) {\n          return !!el.closest(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        // @ts-ignore\n        open: (el) => el.showDialog(),\n      },\n      {\n        name: 'cart-drawer',\n        selector: 'cart-drawer-component',\n        matches(el) {\n          return !!el.closest(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el) => {\n          // @ts-ignore\n          el.open();\n        },\n      },\n      {\n        name: 'header-drawer',\n        selector: 'header-drawer',\n        matches(el) {\n          return !!el.closest(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el) => {\n          // @ts-ignore\n          el.open();\n          // @ts-ignore\n          el.refs.details.setAttribute('open', '');\n        },\n      },\n      {\n        name: 'local-pickup-modal',\n        selector: '.pickup-location__dialog',\n        matches(el) {\n          return el.matches(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el) => {\n          // @ts-ignore\n          el.closest('dialog-component').toggleDialog();\n        },\n      },\n      {\n        name: 'quick-add-modal',\n        getInstanceId: (el) => {\n          // @ts-ignore\n          return el.querySelector('product-price')?.dataset?.productId;\n        },\n        selector: '.quick-add-modal',\n        matches(el) {\n          return el.matches(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el, instanceId) => {\n          const button = document.querySelector(\n            `product-form-component[data-product-id=\"${instanceId}\"] .quick-add__button--choose`\n          );\n\n          // @ts-ignore\n          button?.click();\n        },\n      },\n      {\n        name: 'floating-panel-component',\n        getInstanceId: (el) => {\n          return el.id;\n        },\n        selector: '.facets__panel',\n        matches(el) {\n          return el.matches(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el, instanceId) => document.querySelector(`#${instanceId}`)?.setAttribute('open', ''),\n      },\n      {\n        name: 'facets-panel',\n        selector: '.facets--drawer',\n        matches(el) {\n          return el.matches(this.selector);\n        },\n        isOpen: (el) => el.getAttribute('open') != null,\n        open: (el) => el?.setAttribute('open', ''),\n      },\n    ];\n\n    // On page load, restore the state of the features\n    // Skip restoration if the page just unloaded (actual navigation happened)\n    if (wasPageUnloading()) {\n      // Clear all saved states since we navigated away\n      clearAllEditorStates();\n    } else {\n      features.forEach((feature) => {\n        const el = document.querySelector(feature.selector);\n        if (!el) return;\n\n        const state = getEditorState(feature.name);\n        const shouldBeOpen = state?.isOpen;\n        const instanceId = state?.instanceId;\n\n        if (shouldBeOpen) {\n          // Prevents race condition with the open methods not always being available immediately\n          setTimeout(() => {\n            feature.open(el, instanceId);\n          });\n        }\n      });\n    }\n\n    /** @param {Element} el */\n    const update = (el) => {\n      const feature = features.find((f) => f.matches(el));\n      if (!feature) return;\n\n      const isOpen = feature.isOpen(el);\n      const instanceId = feature.getInstanceId?.(el);\n\n      saveEditorState(feature.name, isOpen, instanceId);\n    };\n\n    const trackedAttributes = ['open', 'aria-expanded'];\n\n    // Track state changes via attribute changes\n    const observer = new MutationObserver((list) => {\n      for (const mutation of list) {\n        if (\n          mutation.type === 'attributes' &&\n          mutation.attributeName &&\n          trackedAttributes.includes(mutation.attributeName)\n        ) {\n          const element = /** @type {Element} */ (mutation.target);\n          update(element);\n        }\n      }\n    });\n\n    observer.observe(document.body, {\n      childList: true,\n      attributes: true,\n      attributeFilter: trackedAttributes,\n      subtree: true,\n    });\n  })();\n}\n"
  },
  {
    "path": "assets/utilities.js",
    "content": "/**\n * Request an idle callback or fallback to setTimeout\n * @returns {function} The requestIdleCallback function\n */\nexport const requestIdleCallback =\n  typeof window.requestIdleCallback == 'function' ? window.requestIdleCallback : setTimeout;\n\n/**\n * Returns a promise that resolves after yielding to the main thread.\n * @see https://web.dev/articles/optimize-long-tasks#scheduler-yield\n */\nexport const yieldToMainThread = () => {\n  if ('yield' in scheduler) {\n    // @ts-ignore - TypeScript doesn't recognize the yield method yet.\n    return scheduler.yield();\n  }\n\n  return new Promise((resolve) => {\n    requestAnimationFrame(() => {\n      setTimeout(resolve, 0);\n    });\n  });\n};\n\n/**\n * Tells if we are on a low power device based on the number of CPU cores and RAM\n * @returns {boolean} True if the device is a low power device, false otherwise\n */\nexport function isLowPowerDevice() {\n  return Number(navigator.hardwareConcurrency) <= 2 || Number(navigator.deviceMemory) <= 2;\n}\n\n/**\n * Check if the browser supports View Transitions API\n * @returns {boolean} True if the browser supports View Transitions API, false otherwise\n */\nexport function supportsViewTransitions() {\n  return typeof document.startViewTransition === 'function';\n}\n\n/**\n * The current view transition\n * @type {{ current: Promise<void> | undefined }}\n */\nexport const viewTransition = {\n  current: undefined,\n};\n\n/**\n * Functions to run when a view transition of a given type is started\n * @type {{ [key: string]: () => Promise<(() => void) | undefined> }}\n */\nconst viewTransitionTypes = {\n  'product-grid': async () => {\n    const grid = document.querySelector('.product-grid');\n    const productCards = /** @type {HTMLElement[]} */ ([\n      ...document.querySelectorAll('.product-grid .product-grid__item'),\n    ]);\n\n    if (!grid || !productCards.length) return;\n\n    await new Promise((resolve) =>\n      requestIdleCallback(() => {\n        const cardsToAnimate = getCardsToAnimate(grid, productCards);\n\n        productCards.forEach((card, index) => {\n          if (index < cardsToAnimate) {\n            card.style.setProperty('view-transition-name', `product-card-${card.dataset.productId}`);\n          } else {\n            card.style.setProperty('content-visibility', 'hidden');\n          }\n        });\n\n        resolve(null);\n      })\n    );\n\n    return () =>\n      productCards.forEach((card) => {\n        card.style.removeProperty('view-transition-name');\n        card.style.removeProperty('content-visibility');\n      });\n  },\n};\n\n/**\n * Starts a view transition\n * @param {() => void} callback The callback to call when the view transition starts\n * @param {string[]} [types] The types of view transition to use\n * @returns {Promise<void>} A promise that resolves when the view transition finishes\n */\nexport function startViewTransition(callback, types) {\n  // Check if the API is supported and transitions are desired\n  if (!supportsViewTransitions() || isLowPowerDevice() || prefersReducedMotion()) {\n    callback();\n    return Promise.resolve();\n  }\n\n  // eslint-disable-next-line no-async-promise-executor\n  return new Promise(async (resolve) => {\n    let cleanupFunctions = [];\n\n    if (types) {\n      for (const type of types) {\n        if (viewTransitionTypes[type]) {\n          const cleanupFunction = await viewTransitionTypes[type]();\n          if (cleanupFunction) cleanupFunctions.push(cleanupFunction);\n        }\n      }\n    }\n\n    const transition = document.startViewTransition(callback);\n\n    if (!viewTransition.current) {\n      viewTransition.current = transition.finished;\n    }\n\n    if (types) types.forEach((type) => transition.types.add(type));\n\n    transition.finished.then(() => {\n      viewTransition.current = undefined;\n      cleanupFunctions.forEach((cleanupFunction) => cleanupFunction());\n      resolve();\n    });\n  });\n}\n\n/**\n * @typedef {{ [key: string]: string | undefined }} Headers\n */\n\n/**\n * @typedef {Object} FetchConfig\n * @property {string} method\n * @property {Headers} headers\n * @property {string | FormData | undefined} [body]\n */\n\n/**\n * Creates a fetch configuration object\n * @param {string} [type] The type of response to expect\n * @param {Object} [config] The config of the request\n * @param {FetchConfig['body']} [config.body] The body of the request\n * @param {FetchConfig['headers']} [config.headers] The headers of the request\n * @returns {RequestInit} The fetch configuration object\n */\nexport function fetchConfig(type = 'json', config = {}) {\n  /** @type {Headers} */\n  const headers = { 'Content-Type': 'application/json', Accept: `application/${type}`, ...config.headers };\n\n  if (type === 'javascript') {\n    headers['X-Requested-With'] = 'XMLHttpRequest';\n    delete headers['Content-Type'];\n  }\n\n  return {\n    method: 'POST',\n    headers: /** @type {HeadersInit} */ (headers),\n    body: config.body,\n  };\n}\n\n/**\n * Creates a debounced function that delays calling the provided function (fn)\n * until after wait milliseconds have elapsed since the last time\n * the debounced function was invoked. The returned function has a .cancel()\n * method to cancel any pending calls.\n *\n * @template {(...args: any[]) => any} T\n * @param {T} fn The function to debounce\n * @param {number} wait The time (in milliseconds) to wait before calling fn\n * @returns {T & { cancel(): void }} A debounced version of fn with a .cancel() method\n */\nexport function debounce(fn, wait) {\n  /** @type {number | undefined} */\n  let timeout;\n\n  /** @param {...any} args */\n  function debounced(...args) {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => fn.apply(this, args), wait);\n  }\n\n  // Add the .cancel method:\n  debounced.cancel = () => {\n    clearTimeout(timeout);\n  };\n\n  return /** @type {T & { cancel(): void }} */ (debounced);\n}\n\n/**\n * Creates a throttled function that calls the provided function (fn) at most once per every wait milliseconds\n *\n * @template {(...args: any[]) => any} T\n * @param {T} fn The function to throttle\n * @param {number} delay The time (in milliseconds) to wait before calling fn\n * @returns {T & { cancel(): void }} A throttled version of fn with a .cancel() method\n */\nexport function throttle(fn, delay) {\n  let lastCall = 0;\n\n  /** @param {...any} args */\n  function throttled(...args) {\n    const now = performance.now();\n    // If the time since the last call exceeds the delay, execute the callback\n    if (now - lastCall >= delay) {\n      lastCall = now;\n      fn.apply(this, args);\n    }\n  }\n\n  throttled.cancel = () => {\n    lastCall = performance.now();\n  };\n\n  return /** @type {T & { cancel(): void }} */ (throttled);\n}\n\n/**\n * A media query for reduced motion\n * @type {MediaQueryList}\n */\nconst reducedMotion = matchMedia('(prefers-reduced-motion: reduce)');\n\n/**\n * Check if the user prefers reduced motion\n * @returns {boolean} True if the user prefers reduced motion, false otherwise\n */\nexport function prefersReducedMotion() {\n  return reducedMotion.matches;\n}\n\n/**\n * Normalize a string\n * @param {string} str The string to normalize\n * @returns {string} The normalized string\n */\nexport function normalizeString(str) {\n  return str\n    .normalize('NFD')\n    .replace(/\\p{Diacritic}/gu, '')\n    .toLowerCase();\n}\n\n/**\n * Check if the document is ready/loaded and call the callback when it is.\n * @param {() => void} callback The function to call when the document is ready.\n */\nexport function onDocumentLoaded(callback) {\n  if (document.readyState === 'complete') {\n    callback();\n  } else {\n    window.addEventListener('load', callback);\n  }\n}\n\n/**\n * Check if the DOM is ready and call the callback when it is.\n * This fires when the DOM is fully parsed but before all resources are loaded.\n * @param {() => void} callback The function to call when the DOM is ready.\n */\nexport function onDocumentReady(callback) {\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', callback);\n  } else {\n    callback();\n  }\n}\n\n/**\n * Removes will-change from an element after an animation ends.\n * Intended to be used as an animationend event listener.\n * @param {AnimationEvent} event The animation event.\n */\nexport function removeWillChangeOnAnimationEnd(event) {\n  const target = event.target;\n  if (target && target instanceof HTMLElement) {\n    target.style.setProperty('will-change', 'unset');\n    target.removeEventListener('animationend', removeWillChangeOnAnimationEnd);\n  }\n}\n\n/**\n * Wait for all animations to finish before calling the callback.\n * @param {Element | Element[]} elements The element(s) whose animations to wait for.\n * @param {() => void} [callback] The function to call when all animations are finished.\n * @param {Object} [options] The options to pass to `Element.getAnimations`.\n * @returns {Promise<void>} A promise that resolves when all animations are finished.\n */\nexport function onAnimationEnd(elements, callback, options = { subtree: true }) {\n  const animations = Array.isArray(elements)\n    ? elements.flatMap((element) => element.getAnimations(options))\n    : elements.getAnimations(options);\n  const animationPromises = animations.reduce((acc, animation) => {\n    // Ignore ViewTimeline animations\n    if (animation.timeline instanceof DocumentTimeline) {\n      acc.push(animation.finished);\n    }\n\n    return acc;\n  }, /** @type {Promise<Animation>[]} */ ([]));\n\n  return Promise.allSettled(animationPromises).then(callback);\n}\n\n/**\n * Check if the click is outside the element.\n * @param {MouseEvent} event The mouse event.\n * @param {Element} element The element to check.\n * @returns {boolean} True if the click is outside the element, false otherwise.\n */\nexport function isClickedOutside(event, element) {\n  if (event.target instanceof HTMLDialogElement || !(event.target instanceof Element)) {\n    return !isPointWithinElement(event.clientX, event.clientY, element);\n  }\n\n  return !element.contains(event.target);\n}\n\n/**\n * Check if a point is within an element.\n * @param {number} x The x coordinate of the point.\n * @param {number} y The y coordinate of the point.\n * @param {Element} element The element to check.\n * @returns {boolean} True if the point is within the element, false otherwise.\n */\nexport function isPointWithinElement(x, y, element) {\n  const { left, right, top, bottom } = element.getBoundingClientRect();\n\n  return x >= left && x <= right && y >= top && y <= bottom;\n}\n\n/**\n * A media query for large screens\n * @type {MediaQueryList}\n */\nexport const mediaQueryLarge = matchMedia('(min-width: 750px)');\n\n/**\n * Check if the current breakpoint is mobile\n * @returns {boolean} True if the current breakpoint is mobile, false otherwise\n */\nexport function isMobileBreakpoint() {\n  return !mediaQueryLarge.matches;\n}\n\n/**\n * Check if the current breakpoint is desktop\n * @returns {boolean} True if the current breakpoint is desktop, false otherwise\n */\nexport function isDesktopBreakpoint() {\n  return mediaQueryLarge.matches;\n}\n\n/**\n * Check if the device is a touch device independently ot the screen size\n * @returns {boolean} True if the device is a touch device, false otherwise\n */\nexport function isTouchDevice() {\n  return 'ontouchstart' in window && navigator.maxTouchPoints > 0;\n}\n\n/**\n * Clamps a number between a minimum and maximum value.\n * @param {number} value - The input number to clamp.\n * @param {number} min - The minimum value.\n * @param {number} max - The maximum value.\n * @returns {number} The clamped value.\n */\nexport function clamp(value, min, max) {\n  return Math.max(min, Math.min(value, max));\n}\n\n/**\n * Calculates the center point of an element along the specified axis.\n * @param {Element} element - The DOM element to find the center of.\n * @param {'x' | 'y'} [axis] - The axis ('x' or 'y') to get the center for. If not provided, returns both axes.\n * @template {('x' | 'y')} T\n * @param {T} [axis]\n * @returns {T extends ('x' | 'y') ? number : {x: number, y: number}} The center point along the axis or an object with x and y coordinates.\n */\nexport function center(element, axis) {\n  const { left, width, top, height } = element.getBoundingClientRect();\n  const point = {\n    x: left + width / 2,\n    y: top + height / 2,\n  };\n\n  if (axis) return /**  @type {any} */ (point[axis]);\n\n  return /**  @type {any} */ (point);\n}\n\n/**\n * Calculates the start point of an element along the specified axis.\n * @param {Element} element - The DOM element to find the start of.\n * @param {'x' | 'y'} [axis] - The axis ('x' or 'y') to get the start for. If not provided, returns both axes.\n * @returns {number | {x: number, y: number}} The start point along the axis or an object with x and y coordinates.\n */\nexport function start(element, axis) {\n  const { left, top } = element.getBoundingClientRect();\n  const point = { x: left, y: top };\n\n  if (axis) return /**  @type {any} */ (point[axis]);\n\n  return /**  @type {any} */ (point);\n}\n\n/**\n * Finds the value in an array that is closest to a target value.\n * @param {number[]} values - An array of numbers.\n * @param {number} target - The target number to find the closest value to.\n * @returns {number} The value from the array closest to the target.\n */\nexport function closest(values, target) {\n  return values.reduce(function (prev, curr) {\n    return Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev;\n  });\n}\n\n/**\n * Prevents the default action of an event.\n * @param {Event} event - The event to prevent the default action of.\n */\nexport function preventDefault(event) {\n  event.preventDefault();\n}\n\n/**\n * Get the visible elements within a root element.\n * @template {Element} T\n * @param {Element} root - The element within which elements should be visible.\n * @param {T[] | undefined} elements - The elements to check for visibility.\n * @param {number} [ratio=1] - The minimum percentage of the element that must be visible.\n * @param {'x' | 'y'} [axis] - Whether to only check along 'x' axis, 'y' axis, or both if undefined.\n * @returns {T[]} An array containing the visible elements.\n */\nexport function getVisibleElements(root, elements, ratio = 1, axis) {\n  if (!elements?.length) return [];\n  const rootRect = root.getBoundingClientRect();\n\n  return elements.filter((element) => {\n    const { width, height, top, right, left, bottom } = element.getBoundingClientRect();\n\n    if (ratio < 1) {\n      const intersectionLeft = Math.max(rootRect.left, left);\n      const intersectionRight = Math.min(rootRect.right, right);\n      const intersectionWidth = Math.max(0, intersectionRight - intersectionLeft);\n\n      if (axis === 'x') {\n        return width > 0 && intersectionWidth / width >= ratio;\n      }\n\n      const intersectionTop = Math.max(rootRect.top, top);\n      const intersectionBottom = Math.min(rootRect.bottom, bottom);\n      const intersectionHeight = Math.max(0, intersectionBottom - intersectionTop);\n\n      if (axis === 'y') {\n        return height > 0 && intersectionHeight / height >= ratio;\n      }\n\n      const intersectionArea = intersectionWidth * intersectionHeight;\n      const elementArea = width * height;\n\n      // Check that at least the specified ratio of the element is visible\n      return elementArea > 0 && intersectionArea / elementArea >= ratio;\n    }\n\n    const isWithinX = left >= rootRect.left && right <= rootRect.right;\n    if (axis === 'x') {\n      return isWithinX;\n    }\n\n    const isWithinY = top >= rootRect.top && bottom <= rootRect.bottom;\n    if (axis === 'y') {\n      return isWithinY;\n    }\n\n    return isWithinX && isWithinY;\n  });\n}\n\nexport function getIOSVersion() {\n  const { userAgent } = navigator;\n  const isIOS = /(iPhone|iPad)/i.test(userAgent);\n\n  if (!isIOS) return null;\n\n  const version = userAgent.match(/OS ([\\d_]+)/)?.[1];\n  const [major, minor] = version?.split('_') || [];\n  if (!version || !major) return null;\n\n  return {\n    fullString: version.replace('_', '.'),\n    major: parseInt(major, 10),\n    minor: minor ? parseInt(minor, 10) : 0,\n  };\n}\n\n/**\n * Determines which grid items should be animated during a transition.\n * It makes an estimation based on the zoom-out card size because it's\n * the common denominator for both transition states. I.e. transitioning either\n * from 10 to 20 cards the other way around, both need 20 cards to be animated.\n * @param {Element} grid - The grid element\n * @param {Element[]} cards - The cards to animate\n * @returns {number} - Number of cards that should be animated\n */\nfunction getCardsToAnimate(grid, cards) {\n  if (!grid || !cards || cards.length === 0) return 0;\n\n  const itemSample = cards[0];\n  if (!itemSample) return 0;\n\n  // Calculate the visible area of the grid for the Y axis. Assume X is always fully visible:\n  const gridRect = grid.getBoundingClientRect();\n  const visibleArea = {\n    top: Math.max(0, gridRect.top),\n    bottom: Math.min(window.innerHeight, gridRect.bottom),\n  };\n\n  const visibleHeight = Math.round(visibleArea.bottom - visibleArea.top);\n  if (visibleHeight <= 0) return 0;\n\n  /** @type {import('product-card').ProductCard | null} */\n  const cardSample = itemSample.querySelector('product-card');\n  const gridStyle = getComputedStyle(grid);\n\n  const galleryAspectRatio = cardSample?.refs?.cardGallery?.style.getPropertyValue('--gallery-aspect-ratio') || '';\n  let aspectRatio = parseFloat(galleryAspectRatio) || 0.5;\n  if (galleryAspectRatio?.includes('/')) {\n    const [width = '1', height = '2'] = galleryAspectRatio.split('/');\n    aspectRatio = parseInt(width, 10) / parseInt(height, 10);\n  }\n\n  const cardGap = parseInt(cardSample?.refs?.productCardLink?.style.getPropertyValue('--product-card-gap') || '') || 12;\n  const gridGap = parseInt(gridStyle.getPropertyValue('--product-grid-gap')) || 12;\n\n  // Assume only a couple of lines of text in the card details (title and price).\n  // If the title wraps into more lines, we might just animate more cards, but that's fine.\n  const detailsSize = ((parseInt(gridStyle.fontSize) || 16) + 2) * 2;\n\n  const isMobile = window.innerWidth < 750;\n\n  // Always use the zoom-out state card width\n  const cardWidth = isMobile ? Math.round((gridRect.width - gridGap) / 2) : 100;\n  const cardHeight = Math.round(cardWidth / aspectRatio) + cardGap + detailsSize;\n\n  // Calculate the number of cards that fit in the visible area:\n  // - The width estimation is pretty accurate, we can ignore decimals.\n  // - The height estimation needs to account for peeking rows, so we round up.\n  const columnsInGrid = isMobile ? 2 : Math.floor((gridRect.width + gridGap) / (cardWidth + gridGap));\n  const rowsInGrid = Math.ceil((visibleHeight - gridGap) / (cardHeight + gridGap));\n\n  return columnsInGrid * rowsInGrid;\n}\n\n/**\n * Preloads an image\n * @param {string} src - The source of the image to preload\n */\nexport function preloadImage(src) {\n  const image = new Image();\n  image.src = src;\n}\n\nexport class TextComponent extends HTMLElement {\n  shimmer() {\n    this.setAttribute('shimmer', '');\n  }\n}\n\nif (!customElements.get('text-component')) {\n  customElements.define('text-component', TextComponent);\n}\n\n/**\n * Resets the shimmer attribute on all elements in the container.\n * @param {Element} [container] - The container to reset the shimmer attribute on.\n */\nexport function resetShimmer(container = document.body) {\n  const shimmer = container.querySelectorAll('[shimmer]');\n  shimmer.forEach((item) => item.removeAttribute('shimmer'));\n}\n\n/**\n * Change the meta theme color of the browser.\n * @param {string} color - The color value (e.g., 'rgb(255, 255, 255)')\n */\nexport function changeMetaThemeColor(color) {\n  const metaThemeColor = document.head.querySelector('meta[name=\"theme-color\"]');\n  if (metaThemeColor && color) {\n    metaThemeColor.setAttribute('content', color);\n  }\n}\n\n/**\n * Gets the `view` URL search parameter value, if it exists.\n * Useful for Section Rendering API calls to get HTML markup for the correct template view.\n * Primarily used in testing alternative template views.\n * @returns {string | null} The view parameter value, or null if it doesn't exist\n */\nexport function getViewParameterValue() {\n  return new URLSearchParams(window.location.search).get('view');\n}\n\n/**\n * Helper to parse integer with a default fallback\n * Handles the case where 0 is a valid value (not falsy)\n * @template {number|null} T\n * @param {string|number|null|undefined} value - The value to parse\n * @param {T} defaultValue - The default value (number or null)\n * @returns {number|T} The parsed integer or default value\n */\nexport function parseIntOrDefault(value, defaultValue) {\n  if (value === null || value === undefined || value === '') {\n    return defaultValue;\n  }\n  const parsed = parseInt(value.toString());\n  return isNaN(parsed) ? defaultValue : parsed;\n}\n\nclass Scheduler {\n  /** @type {Set<() => void>} */\n  #queue = new Set();\n  /** @type {boolean} */\n  #scheduled = false;\n\n  /** @param {() => void} task */\n  schedule = async (task) => {\n    this.#queue.add(task);\n\n    if (!this.#scheduled) {\n      this.#scheduled = true;\n\n      // Wait for any in-progress view transitions to finish\n      if (viewTransition.current) await viewTransition.current;\n\n      requestAnimationFrame(this.flush);\n    }\n  };\n\n  flush = () => {\n    for (const task of this.#queue) {\n      setTimeout(task, 0);\n    }\n\n    this.#queue.clear();\n    this.#scheduled = false;\n  };\n}\n\nexport const scheduler = new Scheduler();\n\n/**\n * Executes a callback once per session when in the Shopify theme editor\n * @param {HTMLElement} element - The element to check for the shopify editor block id\n * @param {string} sessionKeyName - Unique key for the session storage\n * @param {() => void} callback - Function to execute\n * @returns {void} - Void if the callback was executed, undefined if it wasn't\n */\nexport function oncePerEditorSession(element, sessionKeyName, callback) {\n  const isInThemeEditor = window.Shopify?.designMode;\n  const shopifyEditorSectionId = JSON.parse(element.dataset.shopifyEditorSection || '{}').id;\n  const shopifyEditorBlockId = JSON.parse(element.dataset.shopifyEditorBlock || '{}').id;\n  const editorId = shopifyEditorSectionId || shopifyEditorBlockId;\n  const uniqueSessionKey = `${sessionKeyName}-${editorId}`;\n\n  if (isInThemeEditor && sessionStorage.getItem(uniqueSessionKey)) return;\n\n  callback();\n\n  if (isInThemeEditor) sessionStorage.setItem(uniqueSessionKey, 'true');\n\n  return;\n}\n\n/**\n * A custom ResizeObserver that only calls the callback when the element is resized.\n * By default the ResizeObserver callback is called when the element is first observed.\n */\nexport class ResizeNotifier extends ResizeObserver {\n  #initialized = false;\n\n  /**\n   * @param {ResizeObserverCallback} callback\n   */\n  constructor(callback) {\n    super((entries) => {\n      if (this.#initialized) return callback(entries, this);\n      this.#initialized = true;\n    });\n  }\n\n  disconnect() {\n    this.#initialized = false;\n    super.disconnect();\n  }\n}\n\n/**\n * Sets the menuStyle dataset attribute on the header component element.\n */\nexport function setHeaderMenuStyle() {\n  const headerComponent = /** @type {HTMLElement} | null */ (document.querySelector('#header-component'));\n  if (headerComponent) {\n    window.requestAnimationFrame(() => {\n      const overflowList = headerComponent?.querySelector('overflow-list');\n      const hasReachedMinimum = overflowList && overflowList.hasAttribute('minimum-reached');\n      headerComponent.dataset.menuStyle = isTouchDevice() || hasReachedMinimum ? 'drawer' : 'menu';\n    });\n  }\n}\n\n/**\n * Header group includes the header (with the menu, etc) and other sections like announcements, dividers, etc.\n * @param {HTMLElement | null} header - The header element\n * @param {HTMLElement | null} headerGroup - The header group element, defaults to the #header-group element\n * @returns {number} The height of the header group\n */\nexport function calculateHeaderGroupHeight(\n  header = document.querySelector('#header-component'),\n  headerGroup = document.querySelector('#header-group')\n) {\n  if (!headerGroup) return 0;\n\n  let totalHeight = 0;\n  const children = headerGroup.children;\n  for (let i = 0; i < children.length; i++) {\n    const element = children[i];\n    if (element === header || !(element instanceof HTMLElement)) continue;\n    totalHeight += element.offsetHeight;\n  }\n\n  // If the header is transparent and has a sibling section, add the height of the header to the total height\n  if (header instanceof HTMLElement && header.hasAttribute('transparent') && header.parentElement?.nextElementSibling) {\n    return totalHeight + header.offsetHeight;\n  }\n\n  return totalHeight;\n}\n\n/**\n * Updates CSS custom properties for transparent header offset calculation\n * Avoids expensive :has() selectors\n */\nfunction updateTransparentHeaderOffset() {\n  const header = document.querySelector('#header-component');\n  const headerGroup = document.querySelector('#header-group');\n  const hasHeaderSection = headerGroup?.querySelector('.header-section');\n  if (!hasHeaderSection || !header?.hasAttribute('transparent')) {\n    document.body.style.setProperty('--transparent-header-offset-boolean', '0');\n    return;\n  }\n\n  const hasImmediateSection = hasHeaderSection.nextElementSibling?.classList.contains('shopify-section');\n\n  const shouldApplyOffset = !hasImmediateSection ? '1' : '0';\n  document.body.style.setProperty('--transparent-header-offset-boolean', shouldApplyOffset);\n}\n\n/**\n * Initialize and maintain header height CSS variables.\n */\nfunction updateHeaderHeights() {\n  const header = document.querySelector('header-component');\n\n  // Early exit if no header - nothing to do\n  if (!(header instanceof HTMLElement)) return;\n\n  // Calculate initial heights\n  const headerHeight = header.offsetHeight;\n  const headerGroupHeight = calculateHeaderGroupHeight(header);\n  const headerTopRow = /** @type {HTMLElement} | null */ (header.querySelector('.header__row--top'));\n\n  document.body.style.setProperty('--header-height', `${headerHeight}px`);\n  document.body.style.setProperty('--header-group-height', `${headerGroupHeight}px`);\n\n  if (headerTopRow) {\n    window.requestAnimationFrame(function () {\n      header.style.setProperty('--top-row-height', `${headerTopRow.offsetHeight}px`);\n    });\n  }\n}\n\nexport function updateAllHeaderCustomProperties() {\n  updateHeaderHeights();\n  updateTransparentHeaderOffset();\n  setHeaderMenuStyle();\n}\n\n// Theme is not defined in some layouts, like the gift card page\nif (typeof Theme !== 'undefined') {\n  Theme.utilities = {\n    ...Theme.utilities,\n    scheduler: scheduler,\n  };\n}\n"
  },
  {
    "path": "assets/variant-picker.js",
    "content": "import { Component } from '@theme/component';\nimport { VariantSelectedEvent, VariantUpdateEvent } from '@theme/events';\nimport { morph, MORPH_OPTIONS } from '@theme/morph';\nimport { yieldToMainThread, getViewParameterValue, ResizeNotifier } from '@theme/utilities';\n\n/**\n * @typedef {object} VariantPickerRefs\n * @property {HTMLFieldSetElement[]} fieldsets – The fieldset elements.\n */\n\n/**\n * A custom element that manages a variant picker.\n *\n * @template {import('@theme/component').Refs} [TRefs=VariantPickerRefs]\n * @extends Component<TRefs>\n */\nexport default class VariantPicker extends Component {\n  /** @type {string | undefined} */\n  #pendingRequestUrl;\n\n  /** @type {AbortController | undefined} */\n  #abortController;\n\n  /** @type {number[][]} */\n  #checkedIndices = [];\n\n  /** @type {HTMLInputElement[][]} */\n  #radios = [];\n\n  #resizeObserver = new ResizeNotifier(() => this.updateVariantPickerCss());\n\n  connectedCallback() {\n    super.connectedCallback();\n    const fieldsets = /** @type {HTMLFieldSetElement[]} */ (this.refs.fieldsets || []);\n\n    fieldsets.forEach((fieldset) => {\n      const radios = Array.from(fieldset?.querySelectorAll('input') ?? []);\n      this.#radios.push(radios);\n\n      const initialCheckedIndex = radios.findIndex((radio) => radio.dataset.currentChecked === 'true');\n      if (initialCheckedIndex !== -1) {\n        this.#checkedIndices.push([initialCheckedIndex]);\n      }\n    });\n\n    this.addEventListener('change', this.variantChanged.bind(this));\n    this.#resizeObserver.observe(this);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#resizeObserver.disconnect();\n  }\n\n  /**\n   * Handles the variant change event.\n   * @param {Event} event - The variant change event.\n   */\n  variantChanged(event) {\n    if (!(event.target instanceof HTMLElement)) return;\n\n    const selectedOption =\n      event.target instanceof HTMLSelectElement ? event.target.options[event.target.selectedIndex] : event.target;\n\n    if (!selectedOption) return;\n\n    this.updateSelectedOption(event.target);\n    this.dispatchEvent(new VariantSelectedEvent({\n      id: selectedOption.dataset.optionValueId ?? '',\n    }));\n\n    const isOnProductPage =\n      this.dataset.templateProductMatch === 'true' &&\n      !event.target.closest('product-card') &&\n      !event.target.closest('quick-add-dialog');\n\n    // Morph the entire main content for combined listings child products, because changing the product\n    // might also change other sections depending on recommendations, metafields, etc.\n    const currentUrl = this.dataset.productUrl?.split('?')[0];\n    const newUrl = selectedOption.dataset.connectedProductUrl;\n    const loadsNewProduct = isOnProductPage && !!newUrl && newUrl !== currentUrl;\n    const isOnFeaturedProductSection = Boolean(this.closest('featured-product-information'));\n\n    const morphElementSelector = loadsNewProduct\n      ? 'main'\n      : isOnFeaturedProductSection\n      ? 'featured-product-information'\n      : undefined;\n\n    this.fetchUpdatedSection(this.buildRequestUrl(selectedOption), morphElementSelector);\n\n    const url = new URL(window.location.href);\n\n    const variantId = selectedOption.dataset.variantId || null;\n\n    if (isOnProductPage) {\n      if (variantId) {\n        url.searchParams.set('variant', variantId);\n      } else {\n        url.searchParams.delete('variant');\n      }\n    }\n\n    // Change the path if the option is connected to another product via combined listing.\n    if (loadsNewProduct) {\n      url.pathname = newUrl;\n    }\n\n    if (url.href !== window.location.href) {\n      yieldToMainThread().then(() => {\n        history.replaceState({}, '', url.toString());\n      });\n    }\n  }\n\n  /**\n   * @typedef {object} FieldsetMeasurements\n   * @property {HTMLFieldSetElement} fieldset\n   * @property {number | undefined} currentIndex\n   * @property {number | undefined} previousIndex\n   * @property {number | undefined} currentWidth\n   * @property {number | undefined} previousWidth\n   */\n\n  /**\n   * Gets measurements for a single fieldset (read phase).\n   * @param {number} fieldsetIndex\n   * @returns {FieldsetMeasurements | null}\n   */\n  #getFieldsetMeasurements(fieldsetIndex) {\n    const fieldsets = /** @type {HTMLFieldSetElement[]} */ (this.refs.fieldsets || []);\n    const fieldset = fieldsets[fieldsetIndex];\n    const checkedIndices = this.#checkedIndices[fieldsetIndex];\n    const radios = this.#radios[fieldsetIndex];\n\n    if (!radios || !checkedIndices || !fieldset) return null;\n\n    const [currentIndex, previousIndex] = checkedIndices;\n\n    return {\n      fieldset,\n      currentIndex,\n      previousIndex,\n      currentWidth: currentIndex !== undefined ? radios[currentIndex]?.parentElement?.offsetWidth : undefined,\n      previousWidth: previousIndex !== undefined ? radios[previousIndex]?.parentElement?.offsetWidth : undefined,\n    };\n  }\n\n  /**\n   * Applies measurements to a fieldset (write phase).\n   * @param {FieldsetMeasurements} measurements\n   */\n  #applyFieldsetMeasurements({ fieldset, currentWidth, previousWidth, currentIndex, previousIndex }) {\n    if (currentWidth) {\n      fieldset.style.setProperty('--pill-width-current', `${currentWidth}px`);\n    } else if (currentIndex !== undefined) {\n      fieldset.style.removeProperty('--pill-width-current');\n    }\n\n    if (previousWidth) {\n      fieldset.style.setProperty('--pill-width-previous', `${previousWidth}px`);\n    } else if (previousIndex !== undefined) {\n      fieldset.style.removeProperty('--pill-width-previous');\n    }\n  }\n\n  /**\n   * Updates the fieldset CSS.\n   * @param {number} fieldsetIndex - The fieldset index.\n   */\n  updateFieldsetCss(fieldsetIndex) {\n    if (Number.isNaN(fieldsetIndex)) return;\n\n    const measurements = this.#getFieldsetMeasurements(fieldsetIndex);\n    if (measurements) {\n      this.#applyFieldsetMeasurements(measurements);\n    }\n  }\n\n  /**\n   * Updates the selected option.\n   * @param {string | Element} target - The target element.\n   */\n  updateSelectedOption(target) {\n    if (typeof target === 'string') {\n      const targetElement = this.querySelector(`[data-option-value-id=\"${target}\"]`);\n\n      if (!targetElement) throw new Error('Target element not found');\n\n      target = targetElement;\n    }\n\n    if (target instanceof HTMLInputElement) {\n      const fieldsetIndex = Number.parseInt(target.dataset.fieldsetIndex || '');\n      const inputIndex = Number.parseInt(target.dataset.inputIndex || '');\n\n      if (!Number.isNaN(fieldsetIndex) && !Number.isNaN(inputIndex)) {\n        const fieldsets = /** @type {HTMLFieldSetElement[]} */ (this.refs.fieldsets || []);\n        const fieldset = fieldsets[fieldsetIndex];\n        const checkedIndices = this.#checkedIndices[fieldsetIndex];\n        const radios = this.#radios[fieldsetIndex];\n\n        if (radios && checkedIndices && fieldset) {\n          // Clear previous checked states\n          const [currentIndex, previousIndex] = checkedIndices;\n\n          if (currentIndex !== undefined && radios[currentIndex]) {\n            radios[currentIndex].dataset.previousChecked = 'false';\n          }\n          if (previousIndex !== undefined && radios[previousIndex]) {\n            radios[previousIndex].dataset.previousChecked = 'false';\n          }\n\n          // Update checked indices array - keep only the last 2 selections\n          checkedIndices.unshift(inputIndex);\n          checkedIndices.length = Math.min(checkedIndices.length, 2);\n\n          // Update the new states\n          const newCurrentIndex = checkedIndices[0]; // This is always inputIndex\n          const newPreviousIndex = checkedIndices[1]; // This might be undefined\n\n          // newCurrentIndex is guaranteed to exist since we just added it\n          if (newCurrentIndex !== undefined && radios[newCurrentIndex]) {\n            radios[newCurrentIndex].dataset.currentChecked = 'true';\n          }\n\n          if (newPreviousIndex !== undefined && radios[newPreviousIndex]) {\n            radios[newPreviousIndex].dataset.previousChecked = 'true';\n            radios[newPreviousIndex].dataset.currentChecked = 'false';\n          }\n\n          this.updateFieldsetCss(fieldsetIndex);\n        }\n      }\n      target.checked = true;\n    }\n\n    if (target instanceof HTMLSelectElement) {\n      const newValue = target.value;\n      const newSelectedOption = Array.from(target.options).find((option) => option.value === newValue);\n\n      if (!newSelectedOption) throw new Error('Option not found');\n\n      for (const option of target.options) {\n        option.removeAttribute('selected');\n      }\n\n      newSelectedOption.setAttribute('selected', 'selected');\n    }\n  }\n\n  /**\n   * Builds the request URL.\n   * @param {HTMLElement} selectedOption - The selected option.\n   * @param {string | null} [source] - The source.\n   * @param {string[]} [sourceSelectedOptionsValues] - The source selected options values.\n   * @returns {string} The request URL.\n   */\n  buildRequestUrl(selectedOption, source = null, sourceSelectedOptionsValues = []) {\n    // this productUrl and pendingRequestUrl will be useful for the support of combined listing. It is used when a user changes variant quickly and those products are using separate URLs (combined listing).\n    // We create a new URL and abort the previous fetch request if it's still pending.\n    let productUrl = selectedOption.dataset.connectedProductUrl || this.#pendingRequestUrl || this.dataset.productUrl;\n    this.#pendingRequestUrl = productUrl;\n    const params = [];\n    const viewParamValue = getViewParameterValue();\n\n    // preserve view parameter, if it exists, for alternative product view testing\n    if (viewParamValue) params.push(`view=${viewParamValue}`);\n\n    if (this.selectedOptionsValues.length && !source) {\n      params.push(`option_values=${this.selectedOptionsValues.join(',')}`);\n    } else if (source === 'product-card') {\n      if (this.selectedOptionsValues.length) {\n        params.push(`option_values=${sourceSelectedOptionsValues.join(',')}`);\n      } else {\n        params.push(`option_values=${selectedOption.dataset.optionValueId}`);\n      }\n    }\n\n    // If variant-picker is a child of some specific sections, we need to append section_id=xxxx to the URL\n    const SECTION_ID_MAP = {\n      'quick-add-component': 'section-rendering-product-card',\n      'swatches-variant-picker-component': 'section-rendering-product-card',\n      'featured-product-information': this.closest('featured-product-information')?.id,\n    };\n\n    const closestSectionId = /** @type {keyof typeof SECTION_ID_MAP} | undefined */ (\n      Object.keys(SECTION_ID_MAP).find((sectionId) => this.closest(sectionId))\n    );\n\n    if (closestSectionId) {\n      if (productUrl?.includes('?')) {\n        productUrl = productUrl.split('?')[0];\n      }\n      return `${productUrl}?section_id=${SECTION_ID_MAP[closestSectionId]}&${params.join('&')}`;\n    }\n\n    return `${productUrl}?${params.join('&')}`;\n  }\n\n  /**\n   * Fetches the updated section.\n   * @param {string} requestUrl - The request URL.\n   * @param {string} [morphElementSelector] - The selector of the element to be morphed. By default, only the variant picker is morphed.\n   */\n  fetchUpdatedSection(requestUrl, morphElementSelector) {\n    // We use this to abort the previous fetch request if it's still pending.\n    this.#abortController?.abort();\n    this.#abortController = new AbortController();\n\n    fetch(requestUrl, { signal: this.#abortController.signal })\n      .then((response) => response.text())\n      .then((responseText) => {\n        this.#pendingRequestUrl = undefined;\n        const html = new DOMParser().parseFromString(responseText, 'text/html');\n        // Defer is only useful for the initial rendering of the page. Remove it here.\n        html.querySelector('overflow-list[defer]')?.removeAttribute('defer');\n\n        const textContent = html.querySelector(`variant-picker script[type=\"application/json\"]`)?.textContent;\n        if (!textContent) return;\n\n        let newProduct;\n\n        if (morphElementSelector === 'main') {\n          this.updateMain(html);\n        } else if (morphElementSelector) {\n          this.updateElement(html, morphElementSelector);\n        } else {\n          newProduct = this.updateVariantPicker(html);\n        }\n\n        // Dispatch for all paths so product-form-component can reset #variantChangeInProgress\n        if (this.selectedOptionId) {\n          this.dispatchEvent(\n            new VariantUpdateEvent(JSON.parse(textContent), this.selectedOptionId, {\n              html,\n              productId: this.dataset.productId ?? '',\n              newProduct,\n            })\n          );\n        }\n      })\n      .catch((error) => {\n        if (error.name === 'AbortError') {\n          console.warn('Fetch aborted by user');\n        } else {\n          console.error(error);\n        }\n      });\n  }\n\n  /**\n   * @typedef {Object} NewProduct\n   * @property {string} id\n   * @property {string} url\n   */\n\n  /**\n   * Re-renders the variant picker.\n   * @param {Document | Element} newHtml - The new HTML.\n   * @returns {NewProduct | undefined} Information about the new product if it has changed, otherwise undefined.\n   */\n  updateVariantPicker(newHtml) {\n    /** @type {NewProduct | undefined} */\n    let newProduct;\n\n    const newVariantPickerSource = newHtml.querySelector(this.tagName.toLowerCase());\n\n    if (!newVariantPickerSource) {\n      throw new Error('No new variant picker source found');\n    }\n\n    // For combined listings, the product might have changed, so update the related data attribute.\n    if (newVariantPickerSource instanceof HTMLElement) {\n      const newProductId = newVariantPickerSource.dataset.productId;\n      const newProductUrl = newVariantPickerSource.dataset.productUrl;\n\n      if (newProductId && newProductUrl && this.dataset.productId !== newProductId) {\n        newProduct = { id: newProductId, url: newProductUrl };\n      }\n\n      this.dataset.productId = newProductId;\n      this.dataset.productUrl = newProductUrl;\n    }\n\n    morph(this, newVariantPickerSource, {\n      ...MORPH_OPTIONS,\n      getNodeKey: (node) => {\n        if (!(node instanceof HTMLElement)) return undefined;\n        const key = node.dataset.key;\n        return key;\n      },\n    });\n    this.updateVariantPickerCss();\n\n    return newProduct;\n  }\n\n  updateVariantPickerCss() {\n    const fieldsets = /** @type {HTMLFieldSetElement[]} */ (this.refs.fieldsets || []);\n\n    // Batch all reads first across all fieldsets to avoid layout thrashing\n    const measurements = fieldsets.map((_, index) => this.#getFieldsetMeasurements(index)).filter((m) => m !== null);\n\n    // Batch all writes after all reads\n    for (const measurement of measurements) {\n      this.#applyFieldsetMeasurements(measurement);\n    }\n  }\n\n  /**\n   * Re-renders the desired element.\n   * @param {Document} newHtml - The new HTML.\n   * @param {string} elementSelector - The selector of the element to re-render.\n   */\n  updateElement(newHtml, elementSelector) {\n    const element = this.closest(elementSelector);\n    const newElement = newHtml.querySelector(elementSelector);\n\n    if (!element || !newElement) {\n      throw new Error(`No new element source found for ${elementSelector}`);\n    }\n\n    morph(element, newElement);\n  }\n\n  /**\n   * Re-renders the entire main content.\n   * @param {Document} newHtml - The new HTML.\n   */\n  updateMain(newHtml) {\n    const main = document.querySelector('main');\n    const newMain = newHtml.querySelector('main');\n\n    if (!main || !newMain) {\n      throw new Error('No new main source found');\n    }\n\n    morph(main, newMain);\n  }\n\n  /**\n   * Gets the selected option.\n   * @returns {HTMLInputElement | HTMLOptionElement | undefined} The selected option.\n   */\n  get selectedOption() {\n    const selectedOption = this.querySelector('select option[selected], fieldset input:checked');\n\n    if (!(selectedOption instanceof HTMLInputElement || selectedOption instanceof HTMLOptionElement)) {\n      return undefined;\n    }\n\n    return selectedOption;\n  }\n\n  /**\n   * Gets the selected option ID.\n   * @returns {string | undefined} The selected option ID.\n   */\n  get selectedOptionId() {\n    const { selectedOption } = this;\n    if (!selectedOption) return undefined;\n    const { optionValueId } = selectedOption.dataset;\n\n    if (!optionValueId) {\n      throw new Error('No option value ID found');\n    }\n\n    return optionValueId;\n  }\n\n  /**\n   * Gets the selected options values.\n   * @returns {string[]} The selected options values.\n   */\n  get selectedOptionsValues() {\n    /** @type HTMLElement[] */\n    const selectedOptions = Array.from(this.querySelectorAll('select option[selected], fieldset input:checked'));\n\n    return selectedOptions.map((option) => {\n      const { optionValueId } = option.dataset;\n\n      if (!optionValueId) throw new Error('No option value ID found');\n\n      return optionValueId;\n    });\n  }\n}\n\nif (!customElements.get('variant-picker')) {\n  customElements.define('variant-picker', VariantPicker);\n}\n"
  },
  {
    "path": "assets/video-background.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * A custom element that renders a video background.\n *\n * @typedef {object} Refs\n * @property {HTMLElement[]} videoSources - The video sources.\n * @property {HTMLVideoElement} videoElement - The video element.\n *\n * @extends Component<Refs>\n */\nexport class VideoBackgroundComponent extends Component {\n  requiredRefs = ['videoSources', 'videoElement'];\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    const { videoSources, videoElement } = this.refs;\n\n    for (const source of videoSources) {\n      const { videoSource } = source.dataset;\n\n      if (videoSource) source.setAttribute('src', videoSource);\n    }\n\n    videoElement.load();\n  }\n}\n\nif (!customElements.get('video-background-component')) {\n  customElements.define('video-background-component', VideoBackgroundComponent);\n}\n"
  },
  {
    "path": "assets/view-transitions.js",
    "content": "(function () {\n  const viewTransitionRenderBlocker = document.getElementById('view-transition-render-blocker');\n  // Remove the view transition render blocker if the user has reduced motion enabled or is on a low power device.\n  if (window.matchMedia('(prefers-reduced-motion: reduce)').matches || isLowPowerDevice()) {\n    viewTransitionRenderBlocker?.remove();\n  } else {\n    // If the browser didn't manage to parse the main content quickly, at least let the user see something.\n    // We're aiming for the FCP to be under 1.8 seconds since the navigation started.\n    const RENDER_BLOCKER_TIMEOUT_MS = Math.max(0, 1800 - performance.now());\n\n    setTimeout(() => {\n      viewTransitionRenderBlocker?.remove();\n    }, RENDER_BLOCKER_TIMEOUT_MS);\n  }\n\n  const idleCallback = typeof requestIdleCallback === 'function' ? requestIdleCallback : setTimeout;\n\n  window.addEventListener('pageswap', async (event) => {\n    const { viewTransition } = /** @type {PageSwapEvent} */ (event);\n\n    if (shouldSkipViewTransition(viewTransition)) {\n      /** @type {ViewTransition | null} */ (viewTransition)?.skipTransition();\n      return;\n    }\n\n    // Cancel view transition on user interaction to improve INP (Interaction to Next Paint)\n    ['pointerdown', 'keydown'].forEach((eventName) => {\n      document.addEventListener(\n        eventName,\n        () => {\n          viewTransition.skipTransition();\n        },\n        { once: true }\n      );\n    });\n\n    // Clean in case you landed on the pdp first. We want to remove the default transition type on the PDP media gallery so there is no duplicate transition name\n    document\n      .querySelectorAll('[data-view-transition-type]:not([data-view-transition-triggered])')\n      .forEach((element) => {\n        element.removeAttribute('data-view-transition-type');\n      });\n\n    const transitionTriggered = document.querySelector('[data-view-transition-triggered]');\n    const transitionType = transitionTriggered?.getAttribute('data-view-transition-type');\n\n    if (transitionType) {\n      viewTransition.types.clear();\n      viewTransition.types.add(transitionType);\n      sessionStorage.setItem('custom-transition-type', transitionType);\n    } else {\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n      sessionStorage.removeItem('custom-transition-type');\n    }\n  });\n\n  window.addEventListener('pagereveal', async (event) => {\n    const { viewTransition } = /** @type {PageRevealEvent} */ (event);\n\n    if (shouldSkipViewTransition(viewTransition)) {\n      /** @type {ViewTransition | null} */ (viewTransition)?.skipTransition();\n      return;\n    }\n\n    const customTransitionType = sessionStorage.getItem('custom-transition-type');\n\n    if (customTransitionType) {\n      viewTransition.types.clear();\n      viewTransition.types.add(customTransitionType);\n\n      await viewTransition.finished;\n\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n\n      idleCallback(() => {\n        sessionStorage.removeItem('custom-transition-type');\n        document.querySelectorAll('[data-view-transition-type]').forEach((element) => {\n          element.removeAttribute('data-view-transition-type');\n        });\n      });\n    } else {\n      viewTransition.types.clear();\n      viewTransition.types.add('page-navigation');\n    }\n  });\n\n  /**\n   * @param {ViewTransition | null} viewTransition\n   * @returns {viewTransition is null}\n   */\n  function shouldSkipViewTransition(viewTransition) {\n    return !(viewTransition instanceof ViewTransition) || isLowPowerDevice();\n  }\n\n  /*\n   * We can't import this logic from utilities.js here, but we should keep them in sync.\n   */\n  function isLowPowerDevice() {\n    /* Skip ESLint compatibility check. Number(undefined) <= 2 is always false anyway. */\n    /* eslint-disable-next-line compat/compat */\n    return Number(navigator.hardwareConcurrency) <= 2 || Number(navigator.deviceMemory) <= 2;\n  }\n})();\n"
  },
  {
    "path": "assets/volume-pricing-info.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * Displays volume pricing information in a popover.\n * Shows quantity rules and pricing tiers with the current tier highlighted.\n * Positioning and hover behavior is handled by the parent anchored-popover-component.\n *\n * @typedef {Object} VolumePricingInfoRefs\n * @property {HTMLElement} popover - The popover element\n *\n * @extends {Component<VolumePricingInfoRefs>}\n */\nclass VolumePricingInfoComponent extends Component {\n  /**\n   * Ensures the parent anchored-popover-component refs are refreshed after connection,\n   */\n  connectedCallback() {\n    super.connectedCallback();\n    const anchoredPopover = this.closest('anchored-popover-component');\n    if (anchoredPopover instanceof Component && anchoredPopover.isConnected) {\n      try {\n        anchoredPopover.updatedCallback();\n      } catch (error) {\n        Promise.resolve().then(() => {\n          if (anchoredPopover.isConnected) {\n            try {\n              anchoredPopover.updatedCallback();\n            } catch (e) {}\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * Ensures the parent anchored-popover-component refs are refreshed immediately,\n   */\n  updatedCallback() {\n    super.updatedCallback();\n    const anchoredPopover = this.closest('anchored-popover-component');\n    if (anchoredPopover instanceof Component) {\n      anchoredPopover.updatedCallback();\n    }\n  }\n\n  /**\n   * Updates the highlighted price tier based on current quantity\n   * @param {number} quantity - The current quantity\n   */\n  updateActiveTier(quantity) {\n    const anchoredPopover = this.closest('anchored-popover-component');\n    const popover = anchoredPopover instanceof Component ? anchoredPopover.refs?.popover : null;\n    const rows = popover?.querySelectorAll('.volume-pricing-info__row[data-quantity]');\n    if (!rows) return;\n\n    let activeTier = null;\n    for (const row of rows) {\n      row.classList.remove('volume-pricing-info__row--active');\n      if (row instanceof HTMLElement && quantity >= parseInt(row.dataset.quantity || '0')) {\n        activeTier = row;\n      }\n    }\n    activeTier?.classList.add('volume-pricing-info__row--active');\n  }\n}\n\nif (!customElements.get('volume-pricing-info')) {\n  customElements.define('volume-pricing-info', VolumePricingInfoComponent);\n}\n"
  },
  {
    "path": "assets/volume-pricing.js",
    "content": "import { Component } from '@theme/component';\n\n/**\n * Displays volume pricing table with expandable rows.\n * Shows pricing tiers based on quantity thresholds.\n *\n * @extends {Component}\n */\nclass VolumePricingComponent extends Component {\n  /**\n   * Toggles the expanded state of the volume pricing table\n   */\n  toggleExpanded() {\n    this.classList.toggle('volume-pricing--expanded');\n  }\n}\n\nif (!customElements.get('volume-pricing')) {\n  customElements.define('volume-pricing', VolumePricingComponent);\n}\n"
  },
  {
    "path": "assets/zoom-dialog.js",
    "content": "import { Component } from '@theme/component';\nimport {\n  supportsViewTransitions,\n  startViewTransition,\n  onAnimationEnd,\n  prefersReducedMotion,\n  debounce,\n  preloadImage,\n  isLowPowerDevice,\n} from '@theme/utilities';\nimport { scrollIntoView } from '@theme/scrolling';\nimport { ZoomMediaSelectedEvent } from '@theme/events';\nimport { DialogCloseEvent } from '@theme/dialog';\n/**\n * A custom element that renders a zoom dialog.\n *\n * @typedef {object} Refs\n * @property {HTMLDialogElement} dialog - The dialog element.\n * @property {HTMLElement[]} media - The media elements.\n * @property {HTMLElement} thumbnails - The thumbnails elements.\n *\n * @extends Component<Refs>\n */\nexport class ZoomDialog extends Component {\n  requiredRefs = ['dialog', 'media', 'thumbnails'];\n\n  #highResImagesLoaded = /** @type {Set<string>} */ (new Set());\n\n  connectedCallback() {\n    super.connectedCallback();\n    this.refs.dialog.addEventListener('scroll', this.handleScroll);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.refs.dialog.removeEventListener('scroll', this.handleScroll);\n  }\n\n  /**\n   * Opens the zoom dialog.\n   *\n   * @param {number} index - The index of the media to zoom.\n   * @param {PointerEvent} event - The pointer event.\n   */\n  async open(index, event) {\n    event.preventDefault();\n\n    const { dialog, media, thumbnails } = this.refs;\n    const targetImage = media[index];\n    const targetThumbnail = thumbnails.children[index];\n\n    const open = () => {\n      dialog.showModal();\n\n      for (const target of [targetThumbnail, targetImage]) {\n        target?.scrollIntoView({ behavior: 'instant' });\n      }\n    };\n\n    /** @type {HTMLElement | null} */\n    const sourceImage = event.target instanceof Element ? event.target.closest('li,slideshow-slide') : null;\n\n    if (!supportsViewTransitions() || isLowPowerDevice() || !sourceImage || !targetImage) return open();\n\n    const itemTransitionName = `gallery-item-open`;\n    sourceImage.style.setProperty('view-transition-name', itemTransitionName);\n\n    const focalPoint = sourceImage.dataset.focalPoint;\n    if (focalPoint) {\n      document.documentElement.style.setProperty('--gallery-media-focal-point', focalPoint);\n    }\n\n    await startViewTransition(() => {\n      open();\n      sourceImage.style.removeProperty('view-transition-name');\n      targetImage.style.setProperty('view-transition-name', itemTransitionName);\n    });\n\n    document.documentElement.style.removeProperty('--gallery-media-focal-point');\n    targetImage.style.removeProperty('view-transition-name');\n\n    this.selectThumbnail(index, { behavior: 'instant' });\n  }\n\n  /**\n   * Loads a high-resolution image for a specific media container\n   * @param {HTMLElement} mediaContainer - The media container element\n   */\n  loadHighResolutionImage(mediaContainer) {\n    if (!mediaContainer.classList.contains('product-media-container--image')) return false;\n\n    const image = mediaContainer.querySelector('img.product-media__image');\n    if (!image || !(image instanceof HTMLImageElement)) return false;\n\n    const highResolutionUrl = image.getAttribute('data_max_resolution');\n    if (!highResolutionUrl || this.#highResImagesLoaded.has(highResolutionUrl)) return false;\n\n    preloadImage(highResolutionUrl);\n\n    const newImage = new Image();\n    newImage.className = image.className;\n    newImage.alt = image.alt;\n    newImage.setAttribute('data_max_resolution', highResolutionUrl);\n    newImage.setAttribute('ref', 'image');\n\n    // When the high-resolution image loads, replace the existing image\n    newImage.onload = () => {\n      image.replaceWith(newImage);\n      this.#highResImagesLoaded.add(highResolutionUrl);\n    };\n\n    newImage.src = highResolutionUrl;\n  }\n\n  /**\n   * Handles the scroll event of the dialog, which is used to update the active thumbnail when the corresponding image is visible in the main view.\n   * @param {Event} event - The scroll event.\n   */\n  handleScroll = debounce(async () => {\n    const { media, thumbnails } = this.refs;\n\n    const mostVisibleElement = await getMostVisibleElement(media);\n    const activeIndex = media.indexOf(mostVisibleElement);\n    const targetThumbnail = thumbnails.children[activeIndex];\n\n    if (!targetThumbnail || !(targetThumbnail instanceof HTMLElement)) return;\n\n    Array.from(thumbnails.querySelectorAll('button')).forEach((button, i) => {\n      button.setAttribute('aria-selected', `${i === activeIndex}`);\n    });\n\n    this.loadHighResolutionImage(mostVisibleElement);\n    this.dispatchEvent(new ZoomMediaSelectedEvent(activeIndex));\n  }, 50);\n\n  /**\n   * Closes the zoom dialog.\n   */\n  async close() {\n    const { dialog, media } = this.refs;\n\n    if (!supportsViewTransitions() || isLowPowerDevice()) return this.closeDialog();\n\n    // Find the most visible image using IntersectionObserver\n    const mostVisibleElement = await getMostVisibleElement(media);\n\n    // Get the index and set up transition\n    const activeIndex = media.indexOf(mostVisibleElement);\n    const itemTransitionName = `gallery-item-close`;\n\n    const mediaGallery = /** @type {import('./media-gallery').MediaGallery | undefined} */ (\n      this.closest('media-gallery')\n    );\n\n    const slideshowActive = mediaGallery?.presentation === 'carousel';\n\n    const slide = slideshowActive ? mediaGallery.slideshow?.slides?.[activeIndex] : mediaGallery?.media?.[activeIndex];\n\n    if (!slide) return this.closeDialog();\n    const focalPoint = slide.dataset.focalPoint;\n    if (focalPoint) {\n      document.documentElement.style.setProperty('--gallery-media-focal-point', focalPoint);\n    }\n\n    dialog.classList.add('dialog--closed');\n\n    await onAnimationEnd(this.refs.thumbnails);\n\n    mostVisibleElement.style.setProperty('view-transition-name', itemTransitionName);\n\n    await startViewTransition(() => {\n      mostVisibleElement.style.removeProperty('view-transition-name');\n      slide.style.setProperty('view-transition-name', itemTransitionName);\n      this.closeDialog();\n    });\n\n    slide.style.removeProperty('view-transition-name');\n    dialog.classList.remove('dialog--closed');\n    document.documentElement.style.removeProperty('--gallery-media-focal-point');\n  }\n\n  closeDialog() {\n    const { dialog } = this.refs;\n    dialog.close();\n    window.dispatchEvent(new DialogCloseEvent());\n  }\n\n  /**\n   * Closes the dialog when the user presses the escape key.\n   *\n   * @param {KeyboardEvent} event - The keyboard event.\n   */\n  handleKeyDown(event) {\n    if (event.key !== 'Escape') return;\n\n    event.preventDefault();\n    this.close();\n  }\n\n  /**\n   * Handles the click event of a thumbnail.\n   * @param {number} index - The index of the thumbnail to select.\n   */\n  async handleThumbnailClick(index) {\n    const behavior = prefersReducedMotion() ? 'instant' : 'smooth';\n    this.selectThumbnail(index, { behavior });\n  }\n\n  /**\n   * Handles the pointer enter event of a thumbnail.\n   * @param {number} index - The index of the thumbnail to load the high-resolution image for.\n   */\n  async handleThumbnailPointerEnter(index) {\n    const { media } = this.refs;\n    if (!media[index]) return;\n\n    this.loadHighResolutionImage(media[index]);\n  }\n\n  /**\n   * Handles the selection of a thumbnail.\n   * @param {number} index - The index of the thumbnail to select.\n   * @param {Object} options - The options for the selection.\n   * @param {ScrollBehavior} options.behavior - The behavior of the scroll.\n   */\n  async selectThumbnail(index, options = { behavior: 'smooth' }) {\n    if (!this.refs.thumbnails || !this.refs.thumbnails.children.length) return;\n\n    // Guard if invalid\n    if (isNaN(index) || index < 0 || index >= this.refs.thumbnails.children.length) return;\n\n    const { media, thumbnails } = this.refs;\n    const targetThumbnail = thumbnails.children[index];\n\n    if (!targetThumbnail || !(targetThumbnail instanceof HTMLElement)) return;\n\n    Array.from(thumbnails.querySelectorAll('button')).forEach((button, i) => {\n      button.setAttribute('aria-selected', `${i === index}`);\n    });\n\n    scrollIntoView(targetThumbnail, {\n      ancestor: thumbnails,\n      behavior: options.behavior,\n      block: 'center',\n      inline: 'center',\n    });\n\n    const targetImage = media[index];\n\n    if (targetImage) {\n      targetImage.scrollIntoView({\n        behavior: options.behavior,\n      });\n\n      this.loadHighResolutionImage(targetImage);\n    }\n    this.dispatchEvent(new ZoomMediaSelectedEvent(index));\n  }\n}\n\nif (!customElements.get('zoom-dialog')) {\n  customElements.define('zoom-dialog', ZoomDialog);\n}\n\n/**\n * Get the most visible element from a list of elements.\n * @param {HTMLElement[]} elements - The elements to get the most visible element from.\n * @returns {Promise<HTMLElement>} A promise that resolves to the most visible element.\n */\nfunction getMostVisibleElement(elements) {\n  return new Promise((resolve) => {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const mostVisible = entries.reduce((prev, current) =>\n          current.intersectionRatio > prev.intersectionRatio ? current : prev\n        );\n        observer.disconnect();\n        resolve(/** @type {HTMLElement} */ (mostVisible.target));\n      },\n      {\n        threshold: Array.from({ length: 100 }, (_, i) => i / 100),\n      }\n    );\n\n    for (const element of elements) {\n      observer.observe(element);\n    }\n  });\n}\n"
  },
  {
    "path": "blocks/_accordion-row.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n<accordion-custom\n  {% if block_settings.open_by_default %}\n    open-by-default-on-desktop\n    open-by-default-on-mobile\n  {% endif %}\n>\n  <details\n    class=\"details\"\n    data-testid=\"accordion-details\"\n    {% if block_settings.open_by_default %}\n      open\n    {% endif %}\n    {{ block.shopify_attributes }}\n  >\n    <summary class=\"details__header\">\n      {% render 'icon-or-image',\n        icon: block_settings.icon,\n        image_upload: block_settings.image_upload,\n        width: block_settings.width,\n        class_name: 'details__icon'\n      %}\n      {{ block_settings.heading }}\n      <span class=\"svg-wrapper icon-caret icon-animated\">\n        {{- 'icon-caret.svg' | inline_asset_content -}}\n      </span>\n      <span class=\"svg-wrapper icon-plus\">\n        {{- 'icon-plus.svg' | inline_asset_content -}}\n      </span>\n    </summary>\n\n    <div class=\"details-content\">\n      {% content_for 'blocks' %}\n    </div>\n  </details>\n</accordion-custom>\n\n{% stylesheet %}\n  .details__icon {\n    height: auto;\n    margin-inline-end: var(--margin-xs);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.accordion_row\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"heading\",\n      \"label\": \"t:settings.heading\",\n      \"default\": \"t:text_defaults.accordion_heading\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_by_default\",\n      \"label\": \"t:settings.open_row_by_default\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.icon\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icon\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"apple\",\n          \"label\": \"t:options.apple\"\n        },\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrow\"\n        },\n        {\n          \"value\": \"banana\",\n          \"label\": \"t:options.banana\"\n        },\n        {\n          \"value\": \"bottle\",\n          \"label\": \"t:options.bottle\"\n        },\n        {\n          \"value\": \"box\",\n          \"label\": \"t:options.box\"\n        },\n        {\n          \"value\": \"carrot\",\n          \"label\": \"t:options.carrot\"\n        },\n        {\n          \"value\": \"chat_bubble\",\n          \"label\": \"t:options.chat_bubble\"\n        },\n        {\n          \"value\": \"check_box\",\n          \"label\": \"t:options.check_box\"\n        },\n        {\n          \"value\": \"clipboard\",\n          \"label\": \"t:options.clipboard\"\n        },\n        {\n          \"value\": \"dairy\",\n          \"label\": \"t:options.dairy\"\n        },\n        {\n          \"value\": \"dairy_free\",\n          \"label\": \"t:options.dairy_free\"\n        },\n        {\n          \"value\": \"dryer\",\n          \"label\": \"t:options.dryer\"\n        },\n        {\n          \"value\": \"eye\",\n          \"label\": \"t:options.eye\"\n        },\n        {\n          \"value\": \"fire\",\n          \"label\": \"t:options.fire\"\n        },\n        {\n          \"value\": \"gluten_free\",\n          \"label\": \"t:options.gluten_free\"\n        },\n        {\n          \"value\": \"heart\",\n          \"label\": \"t:options.heart\"\n        },\n        {\n          \"value\": \"iron\",\n          \"label\": \"t:options.iron\"\n        },\n        {\n          \"value\": \"leaf\",\n          \"label\": \"t:options.leaf\"\n        },\n        {\n          \"value\": \"leather\",\n          \"label\": \"t:options.leather\"\n        },\n        {\n          \"value\": \"lightning_bolt\",\n          \"label\": \"t:options.lightning_bolt\"\n        },\n        {\n          \"value\": \"lipstick\",\n          \"label\": \"t:options.lipstick\"\n        },\n        {\n          \"value\": \"lock\",\n          \"label\": \"t:options.lock\"\n        },\n        {\n          \"value\": \"map_pin\",\n          \"label\": \"t:options.map_pin\"\n        },\n        {\n          \"value\": \"nut_free\",\n          \"label\": \"t:options.nut_free\"\n        },\n        {\n          \"value\": \"pants\",\n          \"label\": \"t:options.pants\"\n        },\n        {\n          \"value\": \"paw_print\",\n          \"label\": \"t:options.paw_print\"\n        },\n        {\n          \"value\": \"pepper\",\n          \"label\": \"t:options.pepper\"\n        },\n        {\n          \"value\": \"perfume\",\n          \"label\": \"t:options.perfume\"\n        },\n        {\n          \"value\": \"plane\",\n          \"label\": \"t:options.plane\"\n        },\n        {\n          \"value\": \"plant\",\n          \"label\": \"t:options.plant\"\n        },\n        {\n          \"value\": \"price_tag\",\n          \"label\": \"t:options.price_tag\"\n        },\n        {\n          \"value\": \"question_mark\",\n          \"label\": \"t:options.question_mark\"\n        },\n        {\n          \"value\": \"recycle\",\n          \"label\": \"t:options.recycle\"\n        },\n        {\n          \"value\": \"return\",\n          \"label\": \"t:options.return\"\n        },\n        {\n          \"value\": \"ruler\",\n          \"label\": \"t:options.ruler\"\n        },\n        {\n          \"value\": \"serving_dish\",\n          \"label\": \"t:options.serving_dish\"\n        },\n        {\n          \"value\": \"shirt\",\n          \"label\": \"t:options.shirt\"\n        },\n        {\n          \"value\": \"shoe\",\n          \"label\": \"t:options.shoe\"\n        },\n        {\n          \"value\": \"silhouette\",\n          \"label\": \"t:options.silhouette\"\n        },\n        {\n          \"value\": \"bluesky\",\n          \"label\": \"t:options.social_bluesky\"\n        },\n        {\n          \"value\": \"facebook\",\n          \"label\": \"t:options.social_facebook\"\n        },\n        {\n          \"value\": \"instagram\",\n          \"label\": \"t:options.social_instagram\"\n        },\n        {\n          \"value\": \"linkedin\",\n          \"label\": \"t:options.social_linkedin\"\n        },\n        {\n          \"value\": \"pinterest\",\n          \"label\": \"t:options.social_pinterest\"\n        },\n        {\n          \"value\": \"snapchat\",\n          \"label\": \"t:options.social_snapchat\"\n        },\n        {\n          \"value\": \"spotify\",\n          \"label\": \"t:options.social_spotify\"\n        },\n        {\n          \"value\": \"threads\",\n          \"label\": \"t:options.social_threads\"\n        },\n        {\n          \"value\": \"tiktok\",\n          \"label\": \"t:options.social_tiktok\"\n        },\n        {\n          \"value\": \"tumblr\",\n          \"label\": \"t:options.social_tumblr\"\n        },\n        {\n          \"value\": \"twitter\",\n          \"label\": \"t:options.social_twitter\"\n        },\n        {\n          \"value\": \"vimeo\",\n          \"label\": \"t:options.social_vimeo\"\n        },\n        {\n          \"value\": \"youtube\",\n          \"label\": \"t:options.social_youtube\"\n        },\n        {\n          \"value\": \"whatsapp\",\n          \"label\": \"t:options.social_whatsapp\"\n        },\n        {\n          \"value\": \"snowflake\",\n          \"label\": \"t:options.snowflake\"\n        },\n        {\n          \"value\": \"star\",\n          \"label\": \"t:options.star\"\n        },\n        {\n          \"value\": \"stopwatch\",\n          \"label\": \"t:options.stopwatch\"\n        },\n        {\n          \"value\": \"truck\",\n          \"label\": \"t:options.truck\"\n        },\n        {\n          \"value\": \"washing\",\n          \"label\": \"t:options.washing\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_upload\",\n      \"label\": \"t:settings.image_icon\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 12,\n      \"max\": 200,\n      \"step\": 2,\n      \"unit\": \"px\",\n      \"default\": 20\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.accordion_row\",\n      \"blocks\": {\n        \"text-1\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.work_quickly_to_ship\",\n            \"width\": \"100%\"\n          }\n        }\n      },\n      \"block_order\": [\"text-1\"],\n      \"settings\": {\n        \"heading\": \"t:text_defaults.when_will_order_arrive\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_announcement.liquid",
    "content": "{%- assign block_settings = block.settings -%}\n{%- assign plain_text = block_settings.text | strip_newlines | strip_html | strip -%}\n{%- assign block_index = section.blocks | find_index: 'id', block.id -%}\n\n{%- unless plain_text == '' -%}\n  <slideshow-slide\n    ref=\"slides[]\"\n    class=\"\n      announcement-bar__slide\n      text-block\n      text-block--{{ block.id }}\n      text-block--align-center\n      text-block--full-width\n      custom-typography\n      {% if block_settings.font_size != \"\" %}custom-font-size{% endif %}\n      {% if block_settings.weight != \"\" %}custom-font-weight{% endif %}\n    \"\n    style=\"\n      {% render 'typography-style', settings: block_settings, preset: 'custom' %}\n      --width: 100%;\n      --text-align: center;\n      --line-height: 1;\n    \"\n    {{ block.shopify_attributes }}\n    aria-hidden=\"{% if block_index == 0 %}false{% else %}true{% endif %}\"\n  >\n    <p class=\"announcement-bar__text\">\n      {{ block.settings.text }}\n    </p>\n\n    {% if block_settings.link != blank %}\n      <a\n        class=\"announcement-bar__link\"\n        href=\"{{ block_settings.link }}\"\n      >\n        <span class=\"visually-hidden\">\n          {{ block_settings.text | strip_html }}\n        </span>\n      </a>\n    {% endif %}\n  </slideshow-slide>\n{%- endunless -%}\n\n{% stylesheet %}\n  .text-block:not(.text-block--full-width).rte,\n  .text-block:not(.text-block--full-width).paragraph {\n    /* Safari doesn't support pretty, so fallback to balance */\n    text-wrap: balance;\n    text-wrap: pretty;\n  }\n\n  .text-block:not(.text-block--full-width).h1,\n  .text-block:not(.text-block--full-width).h2,\n  .text-block:not(.text-block--full-width).h3,\n  .text-block:not(.text-block--full-width).h4,\n  .text-block:not(.text-block--full-width).h5,\n  .text-block:not(.text-block--full-width).h6 {\n    text-wrap: balance;\n  }\n\n  /* Hide underline unless text is using paragraph styles. */\n  .text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) a {\n    text-decoration-color: transparent;\n  }\n\n  .text-block h1,\n  .text-block.h1 > * {\n    margin-block: var(--font-h1--spacing);\n  }\n\n  .text-block h2,\n  .text-block.h2 > * {\n    margin-block: var(--font-h2--spacing);\n  }\n\n  .text-block h3,\n  .text-block.h3 > * {\n    margin-block: var(--font-h3--spacing);\n  }\n\n  .text-block h4,\n  .text-block.h4 > * {\n    margin-block: var(--font-h4--spacing);\n  }\n\n  .text-block h5,\n  .text-block.h5 > * {\n    margin-block: var(--font-h5--spacing);\n  }\n\n  .text-block h6,\n  .text-block.h6 > * {\n    margin-block: var(--font-h6--spacing);\n  }\n\n  .text-block > *:first-child {\n    margin-block-start: 0;\n  }\n\n  .text-block > *:last-child {\n    margin-block-end: 0;\n  }\n\n  .text-block--align-center,\n  .text-block--align-center > * {\n    margin-inline: auto;\n  }\n\n  .text-block--align-right,\n  .text-block--align-right > * {\n    margin-inline-start: auto;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.announcement\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"inline_richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\",\n      \"default\": \"t:text_defaults.shop_our_latest_arrivals\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"weight\",\n      \"label\": \"t:settings.weight\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"100\",\n          \"label\": \"t:options.thin\"\n        },\n        {\n          \"value\": \"300\",\n          \"label\": \"t:options.light\"\n        },\n        {\n          \"value\": \"400\",\n          \"label\": \"t:options.regular\"\n        },\n        {\n          \"value\": \"500\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"600\",\n          \"label\": \"t:options.semibold\"\n        },\n        {\n          \"value\": \"700\",\n          \"label\": \"t:options.bold\"\n        },\n        {\n          \"value\": \"900\",\n          \"label\": \"t:options.black\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.announcement\",\n      \"settings\": {\n        \"font\": \"var(--font-subheading--family)\",\n        \"font_size\": \"0.75rem\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-card.liquid",
    "content": "{%- assign block_settings = block.settings -%}\n\n<div\n  class=\"blog-post-card\"\n  style=\"--text-align: {{ block_settings.alignment }}\"\n>\n  {% if article.image %}\n    {% content_for 'block', id: 'image', type: '_blog-post-image', article: article %}\n  {% endif %}\n\n  <div class=\"blog-post-card__content\">\n    <a\n      href=\"{{ article.url }}\"\n      data-testid=\"blog-post-link\"\n    >\n      {%- content_for 'block', id: 'heading', type: '_heading', text: article.title -%}\n    </a>\n\n    {% content_for 'block',\n      id: 'blog-post-details',\n      type: '_blog-post-info-text',\n      alignment: block_settings.alignment,\n      article: article\n    %}\n\n    {% content_for 'block', id: 'content', type: '_blog-post-description', article: article, show_read_more: true %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .blog-post-card {\n    display: flex;\n    flex-direction: column;\n    text-align: var(--text-align);\n    column-gap: var(--columns-gap);\n  }\n\n  .blog-post-item--horizontal:has(.blog-post-card__image-container) .blog-post-card {\n    & > *:first-child {\n      flex-basis: 70%;\n    }\n\n    & > *:last-child {\n      flex-basis: 30%;\n    }\n  }\n\n  .blog-post-card__content {\n    padding-block-start: 0.4rem;\n    display: flex;\n    flex-direction: column;\n  }\n\n  .blog-post-item .blog-post-card__image-container,\n  .blog-post-item .blog-post-card__content {\n    width: 100%;\n  }\n\n  /**\n   * Horizontal layout (image left, content right)\n   * Applied to hero posts based on total article count\n   * Only applies the split layout when an image is actually present\n   */\n  .blog-post-item--horizontal .blog-post-card {\n    flex-direction: row;\n\n    @media screen and (max-width: 749px) {\n      flex-direction: column;\n    }\n  }\n\n  .blog-post-card__content a {\n    display: block;\n    text-wrap: pretty;\n    text-decoration: none;\n    padding-block-start: 0.75rem;\n  }\n\n  .blog-post-card__content a:hover,\n  .blog-post-card__content a:hover [style*='--color: var(--color-primary)'] {\n    color: var(--color-primary-hover);\n  }\n\n  .blog-post-card__content a:hover [style*='--color: var(--color-foreground-heading)'] {\n    color: rgb(var(--color-foreground-heading-rgb) / var(--opacity-subdued-text));\n  }\n\n  .blog-post-card__content a:hover [style*='--color: var(--color-foreground)'] {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.blog_post\",\n  \"settings\": [\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-content.liquid",
    "content": "<div class=\"blog-post-content rte\">\n  <rte-formatter>\n    {{ article.content }}\n  </rte-formatter>\n</div>\n\n{% stylesheet %}\n  .blog-post-content {\n    max-width: var(--normal-content-width);\n    margin: 0 auto;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.content\",\n  \"settings\": [],\n  \"presets\": [\n    {\n      \"name\": \"t:names.content\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-description.liquid",
    "content": "{%- doc -%}\n  Renders the blog post description block.\n\n  @param {object} article - The article object\n  @param {boolean} show_read_more - Whether to display the read more link\n  @param {boolean} [should_truncate] - Whether to truncate the content\n  @param {string} [onboarding_text] - Optional placeholder text for onboarding mode\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n\n  assign content = onboarding_text | default: article.excerpt | default: article.content\n\n  if block_settings.type_preset == 'rte' or block_settings.type_preset == 'paragraph'\n    assign is_rte = true\n  endif\n\n  capture text_block_classes\n    if block_settings.type_preset == 'custom'\n      echo ' custom-typography '\n      if block_settings.font_size != ''\n        echo ' custom-font-size '\n      endif\n      if block_settings.color != ''\n        echo ' custom-color '\n      endif\n    endif\n    if is_rte\n      echo ' rte '\n    endif\n  endcapture\n%}\n\n{% capture attributes %}\n  class=\"blog-post-card__content-text spacing-style text-block text-block--{{ block.id }} {{ block_settings.type_preset }}\n    {{ text_block_classes }}\n  \"\n\n  style=\"\n    {% render 'spacing-padding', settings: block_settings %}\n    {% render 'typography-style', settings: block_settings %}\n    {% if block_settings.color != '' %}\n      --color: {{ block_settings.color }};\n    {% endif %}\n  \"\n\n  {{ block.shopify_attributes }}\n{% endcapture %}\n\n{% if content %}\n  {% assign truncatewords = 30 %}\n  {% unless should_truncate or article.image %}\n    {% assign truncatewords = 90 %}\n  {% endunless %}\n\n  {% liquid\n    assign element = 'div'\n    if is_rte\n      assign element = 'rte-formatter'\n    endif\n  %}\n\n  <{{ element }} {{ attributes }}>\n    {{ content | strip_html | truncatewords: truncatewords }}\n    {% if show_read_more %}\n      <a href=\"{{ article.url }}\">{{- 'content.read_more' | t -}}</a>\n    {% endif %}\n  </{{ element }}>\n{% endif %}\n\n{% stylesheet %}\n  .blog-post-card__content-text a {\n    color: var(--color-primary);\n  }\n\n  .custom-color,\n  .custom-color > :is(h1, h2, h3, h4, h5, h6, p, *) {\n    color: var(--color);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.description\",\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.description\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-featured-image.liquid",
    "content": "{%- doc -%}\n  Renders the blog post featured image block.\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n  assign image = closest.article.image\n%}\n\n<div\n  class=\"blog-post-featured-image blog-post-featured-image--{{ block.id }} blog-post-featured-image--height-{{ block_settings.height }} spacing-style size-style\"\n  style=\"\n    --ratio: {% case block_settings.image_ratio %}\n      {% when 'landscape' %}16 / 9\n      {% when 'portrait' %}4 / 5\n      {% when 'adapt' %}{{ image.aspect_ratio | default: 1 }}\n      {% else %}1\n    {% endcase %};\n    {% render 'size-style', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n  \"\n  {{ block.shopify_attributes }}\n>\n  {%- capture image_border_style -%}\n    {% render 'border-override', settings: block_settings %}\n  {%- endcapture -%}\n\n  {{\n    image\n    | image_url: width: 3840\n    | image_tag:\n      width: image.width,\n      widths: '240, 352, 832, 1200, 1600, 1920, 2560, 3840',\n      height: image.height,\n      class: 'blog-post-featured-image__image border-style',\n      style: image_border_style,\n      sizes: 'auto, (min-width: 750px) 100vw, 100vw',\n      loading: 'eager',\n      fetchpriority: 'high',\n      alt: image.alt\n  }}\n</div>\n\n{% stylesheet %}\n  .blog-post-featured-image {\n    --width: 100%;\n    --custom-width: 100%;\n\n    display: block;\n    position: relative;\n    width: var(--width);\n  }\n\n  .blog-post-featured-image.size-style {\n    --width: var(--size-style-width, 100%);\n  }\n\n  .blog-post-featured-image--height-fit {\n    height: fit-content;\n  }\n\n  .blog-post-featured-image--height-fill {\n    height: 100%;\n  }\n\n  .blog-post-featured-image__image {\n    aspect-ratio: var(--ratio);\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center center;\n  }\n\n  @media screen and (max-width: 749px) {\n    .blog-post-featured-image {\n      --width: var(--width-mobile, var(--width));\n      --custom-width: var(--custom-width-mobile, var(--custom-width));\n    }\n\n    .blog-post-featured-image.size-style {\n      --width: var(--size-style-width-mobile, var(--size-style-width, 100%));\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.featured_image\",\n  \"blocks\": [],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit\",\n      \"visible_if\": \"{{ block.settings.image_ratio == 'adapt' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-image.liquid",
    "content": "{%- doc -%}\n  Renders the blog post image block.\n\n  @param {object} article - The article object\n{%- enddoc -%}\n\n{%- assign image = article.image -%}\n\n{%- assign block_settings = block.settings -%}\n<div class=\"blog-post-card__image-container\">\n  <a href=\"{{ article.url }}\">\n    <img\n      srcset=\"\n        {% if image.width >= 350 %}{{ image | image_url: width: 350 }} 350w,{% endif %}\n        {% if image.width >= 750 %}{{ image | image_url: width: 750 }} 750w,{% endif %}\n        {% if image.width >= 1100 %}{{ image | image_url: width: 1100 }} 1100w,{% endif %}\n        {% if image.width >= 1500 %}{{ image | image_url: width: 1500 }} 1500w,{% endif %}\n        {{ image | image_url }} {{ image.width }}w\n      \"\n      src=\"{{ image | image_url: width: 1100 }}\"\n      loading=\"eager\"\n      fetchpriority=\"high\"\n      width=\"{{ image.width }}\"\n      height=\"{{ image.height }}\"\n      alt=\"{{ image.alt | escape }}\"\n      class=\"\n        border-style\n        blog-post-card__image\n        blog-post-card__image--{{ block_settings.height }}\n      \"\n      style=\"{% render 'border-override', settings: block_settings %}\"\n    >\n  </a>\n</div>\n\n{% stylesheet %}\n  .blog-post-card__image {\n    width: 100%;\n    object-fit: cover;\n    object-position: center center;\n    height: calc(var(--blog-post-card-img-height) * var(--blog-post-card-scale));\n  }\n\n  .blog-post-card__image--small {\n    --blog-post-card-img-height: 280px;\n  }\n\n  .blog-post-card__image--medium {\n    --blog-post-card-img-height: 340px;\n  }\n\n  .blog-post-card__image--large {\n    --blog-post-card-img-height: 400px;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.image\",\n  \"blocks\": [],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"large\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.border\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_blog-post-info-text.liquid",
    "content": "{%- doc -%}\n  Renders the blog post info text block.\n\n  @param {object} [article] - The article object\n  @param {string} [alignment] - The alignment of the text. Defaults to the block's alignment setting.\n  @param {string} [author] - The author name. Defaults to article.author, placeholder text for onboarding\n  @param {string} [date] - The published date. Defaults to article.published_at, placeholder text for onboarding\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n{% assign alignment = alignment | default: block_settings.alignment %}\n{% assign display_author = author | default: article.author %}\n{% assign display_date = date | default: article.published_at %}\n\n{%- if block_settings.show_date or block_settings.show_author -%}\n  <div\n    class=\"\n      blog-post-details\n      spacing-style\n      justify-{{ alignment }}\n      {% if block_settings.type_preset != '' %}{{ block_settings.type_preset }}{% endif%}\n    \"\n    style=\"{% render 'spacing-style', settings: block_settings %}\"\n  >\n    {%- if block_settings.show_date -%}\n      <span>{{- display_date | time_tag: format: 'date' -}}</span>\n    {%- endif -%}\n\n    {%- if block_settings.show_date and block_settings.show_author -%}\n      <span>{{ 'content.blog_details_separator' | t }}</span>\n    {%- endif -%}\n\n    {%- if block_settings.show_author -%}\n      <span>{{ display_author }}</span>\n    {%- endif -%}\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .blog-post-details {\n    display: flex;\n    gap: var(--gap-sm);\n    font-size: var(--font-paragraph-size);\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    white-space: nowrap;\n    flex-wrap: wrap;\n  }\n\n  .blog-post-details > span {\n    text-overflow: clip;\n    overflow: hidden;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.details\",\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_date\",\n      \"label\": \"t:settings.show_date\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_author\",\n      \"label\": \"t:settings.show_author\",\n      \"default\": true\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"visible_if\": \"{{ block.settings.show_alignment != false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_alignment\",\n      \"label\": \"t:settings.show_alignment\",\n      \"default\": true,\n      \"visible_if\": \"{{ false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.details\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_card.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n<div\n  class=\"card{% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\"\n  ref=\"slides[]\"\n  data-carousel-card\n  {{ block.shopify_attributes }}\n>\n  {%- if block_settings.link != blank and block_settings.background_media != 'video' -%}\n    <a\n      href=\"{{ block_settings.link }}\"\n      class=\"card__link\"\n      {% if block_settings.open_in_new_tab %}\n        target=\"_blank\" rel=\"noopener\"\n      {% endif %}\n    ></a>\n  {%- endif -%}\n\n  {%- liquid\n    assign preview_image = block_settings.background_image\n    if block_settings.background_media == 'video'\n      assign preview_image = block_settings.video.preview_image\n    endif\n\n    assign show_placeholder = false\n    if preview_image == blank and children == blank\n      assign show_placeholder = true\n    endif\n\n    assign card_ratio = 1\n    assign card_ratio_numeric = null\n    assign has_min_height = false\n\n    case block_settings.aspect_ratio\n      when 'landscape'\n        assign card_ratio = '16 / 9'\n        assign card_ratio_numeric = 1.777778\n      when 'portrait'\n        assign card_ratio = '2 / 3'\n        assign card_ratio_numeric = 0.666667\n      when 'square'\n        assign card_ratio = '1 / 1'\n        assign card_ratio_numeric = 1\n      when 'adapt'\n        if preview_image\n          assign card_ratio = preview_image.aspect_ratio\n          assign card_ratio_numeric = preview_image.aspect_ratio\n        endif\n    endcase\n\n    if card_ratio == 0 or card_ratio == null\n      assign card_ratio = 1\n      assign card_ratio_numeric = 1\n    endif\n\n    # When card has content, use auto aspect-ratio with min-height from ratio if there is media\n    if children != blank\n      assign card_ratio = 'auto'\n      if block_settings.background_media != 'none'\n        assign has_min_height = true\n      endif\n    endif\n  -%}\n\n  {%- if preview_image or block_settings.toggle_overlay or show_placeholder -%}\n    <div class=\"card__media-wrapper\">\n      {% render 'background-media',\n        background_media: block_settings.background_media,\n        background_video: block_settings.video,\n        background_video_position: 'cover',\n        background_video_loop: true,\n        background_image: block_settings.background_image,\n        background_image_position: 'cover'\n      %}\n      {%- if block_settings.toggle_overlay -%}\n        {% render 'overlay', settings: block_settings %}\n      {%- endif -%}\n    </div>\n  {%- endif -%}\n\n  <div\n    class=\"spacing-style card__content{% if has_min_height %} card__content--has-min-height{% endif %}{% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}{% if preview_image or block_settings.toggle_overlay or show_placeholder %} background-transparent{% endif %}{% if request.design_mode %} card__content--design-mode{% endif %}\"\n    style=\"--card-ratio: {{ card_ratio }}; {% if has_min_height %}--card-ratio-numeric: {{ card_ratio_numeric }};{% endif %} {% render 'spacing-style', settings: block_settings %}\"\n  >\n    <div\n      class=\"\n        card__inner\n        layout-panel-flex\n        layout-panel-flex--{{ block_settings.content_direction }}\n        {% if block_settings.vertical_on_mobile %}mobile-column{% endif %}\n      \"\n      style=\"{% render 'layout-panel-style', settings: block_settings %}\"\n    >\n      {% if children != blank %}\n        {{ children }}\n      {% endif %}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .card {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    width: 100%;\n    height: 100%;\n    border-radius: var(--border-radius, 0);\n    border-width: var(--border-width, 0);\n    border-style: var(--border-style, none);\n    border-color: var(--border-color);\n    container-type: inline-size;\n  }\n\n  .card__content {\n    width: 100%;\n    height: 100%;\n    position: relative;\n    z-index: var(--layer-flat);\n    display: flex;\n    flex-direction: column;\n    aspect-ratio: var(--card-ratio, 1);\n  }\n\n  .card__content.background-transparent {\n    background-color: transparent;\n  }\n\n  /* When card has both image and content, use min-height from container query */\n  .card__content--has-min-height {\n    min-height: calc(100cqw / var(--card-ratio-numeric));\n  }\n\n  .card__inner {\n    flex: 1;\n  }\n\n  .card__media-wrapper {\n    display: flex;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n  }\n\n  .card__media-wrapper video {\n    z-index: var(--layer-raised);\n  }\n\n  .card__link {\n    position: absolute;\n    inset: 0;\n    z-index: var(--layer-raised);\n  }\n\n  .card__link ~ :is(.card__content, .card__media-wrapper) {\n    pointer-events: none;\n\n    :is(a, button, input, textarea, select) {\n      pointer-events: auto;\n    }\n  }\n\n  /* Needs the .card__link ~ to be specific enough to take effect. */\n  .card__link ~ .card__content--design-mode {\n    pointer-events: auto;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.card\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"_heading\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"product-card\"\n    },\n    {\n      \"type\": \"collection-card\"\n    },\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.background_media == \\\"image\\\" }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.background_media == \\\"video\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"visible_if\": \"{{ block.settings.background_media == \\\"image\\\" or block.settings.background_media == \\\"video\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.block_link\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.card\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_carousel-content.liquid",
    "content": "{% liquid\n  assign slide_count = block.blocks.size\n  assign icons_style = section.settings.icons_style\n\n  assign color_scheme_class = ''\n  if block.settings.inherit_color_scheme == false\n    assign color_scheme_class = 'color-' | append: block.settings.color_scheme\n  endif\n\n  if section.settings.section_width == 'page-width'\n    assign slideshow_gutters = 'start end'\n    assign gutter_style = '--gutter-slide-width: var(--util-page-margin-offset);'\n  else\n    assign slideshow_gutters = null\n    assign gutter_style = '--gutter-slide-width: 0px;'\n  endif\n\n  assign show_arrows = false\n  if icons_style != 'none'\n    assign show_arrows = true\n  endif\n\n  assign slide_position = block.settings.position\n  if block.settings.height == 'fill'\n    assign slide_position = 'stretch'\n  endif\n-%}\n\n{% capture blocks_content %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% capture slideshow_style %}\n  --carousel-columns: {{ section.settings.columns }};\n  --carousel-mobile-columns: {{ section.settings.mobile_columns }};\n  {% render 'gap-style', value: section.settings.columns_gap, name: 'carousel-gap' %}\n  {% render 'spacing-style', settings: block.settings %}\n  {% render 'border-override', settings: block.settings %}\n{% endcapture %}\n\n{% assign slideshow_class = 'carousel-content spacing-style ' | append: color_scheme_class %}\n<div\n  class=\"force-full-width\"\n  style=\"{{ gutter_style }}\"\n>\n  {% render 'slideshow',\n    class: slideshow_class,\n    style: slideshow_style,\n    slides: blocks_content,\n    show_arrows: show_arrows,\n    icon_style: icons_style,\n    icon_shape: section.settings.icons_shape,\n    auto_hide_controls: false,\n    infinite: false,\n    initial_slide: 0,\n    slide_count: slide_count,\n    slide_position: slide_position,\n    slideshow_gutters: slideshow_gutters,\n    attributes: block.shopify_attributes\n  %}\n</div>\n\n{% stylesheet %}\n  .carousel-content slideshow-slides {\n    --slideshow-gap: var(--carousel-gap);\n  }\n\n  .carousel-content slideshow-slides > .card {\n    flex: 0 0 auto;\n    width: calc(\n      (100% - (var(--carousel-gap, 8px) * (var(--carousel-mobile-columns, 2) - 1)) - var(--peek-next-slide-size, 0px)) /\n        var(--carousel-mobile-columns, 2)\n    );\n  }\n\n  @media screen and (min-width: 750px) {\n    .carousel-content slideshow-slides > .card {\n      width: calc(\n        (100% - (var(--carousel-gap, 8px) * (var(--carousel-columns, 4) - 1)) - var(--peek-next-slide-size, 0px)) /\n          var(--carousel-columns, 4)\n      );\n    }\n  }\n\n  .carousel-content .slideshow-control[disabled] {\n    display: none;\n  }\n\n  .carousel-content slideshow-arrows {\n    padding-inline: var(--util-page-margin-offset);\n  }\n\n  .carousel-content .slideshow-control--next {\n    margin-inline-start: auto;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.carousel_content\",\n  \"blocks\": [\n    {\n      \"type\": \"_card\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.card_height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"position\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"top\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.height == \\\"fit\\\" }}\",\n      \"default\": \"top\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 4,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.carousel_content\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_cart-products.liquid",
    "content": "{% render 'cart-products' %}\n\n{% stylesheet %}\n  .cart-page__title + .cart-page__items {\n    margin-block-start: var(--margin-lg);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.cart_products\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 8,\n      \"max\": 36,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"dividers\",\n      \"label\": \"t:settings.dividers\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vendor\",\n      \"label\": \"t:settings.vendor\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.cart_items\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_cart-summary.liquid",
    "content": "{% assign block_settings = block.settings %}\n{%- capture cart_summary_inner_class -%}\n  cart-summary__inner\n  {% if block_settings.extend_summary == false and block_settings.inherit_color_scheme == false -%}\n    color-{{ block_settings.color_scheme }} inherit-parent-scheme--mobile\n  {%- endif %}\n  {% if block_settings.extend_summary == false and block_settings.border_radius > 0 -%}\n    has-border-radius\n  {%- endif -%}\n{%- endcapture -%}\n\n{% if block_settings.extend_summary %}\n  <div\n    class=\"section-background {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }} inherit-parent-scheme--mobile{% endif %}\"\n  ></div>\n{% endif %}\n<div\n  class=\"\n    cart-summary border-style\n    {% if block_settings.extend_summary == true %}\n      cart-summary--extend\n      {% if block_settings.inherit_color_scheme == false %}\n        color-{{ block_settings.color_scheme }} inherit-parent-scheme--mobile\n      {% endif %}\n    {% endif %}\n    {% if block_settings.border_radius > 0 %} has-border-radius{% endif %}\n  \"\n  style=\"{% render 'border-override', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  <div class=\"{{ cart_summary_inner_class }}\">\n    {% render 'cart-summary', accelerated_checkout_buttons_layout: 'vertical', section_id: section.id %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .cart-summary__inner {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: var(--gap-2xl);\n    container-type: inline-size;\n    padding: 0;\n    position: sticky;\n    top: 0;\n    align-self: start;\n\n    @media screen and (min-width: 750px) {\n      padding: var(--padding-5xl);\n      grid-row: 1 / -1;\n    }\n  }\n\n  body:has(> #header-group header-component[sticky]) .cart-summary__inner {\n    top: var(--header-height, 0);\n  }\n\n  .cart-summary {\n    @media screen and (max-width: 749px) {\n      border: none;\n    }\n\n    @media screen and (min-width: 750px) {\n      display: grid;\n      grid-template-rows: subgrid;\n      grid-row: 1 / -1;\n    }\n  }\n\n  .cart-summary--extend {\n    height: 100%;\n\n    @media screen and (min-width: 750px) {\n      border-right: none;\n      border-top-right-radius: 0;\n      border-bottom-right-radius: 0;\n    }\n  }\n\n  /* If extend is on, only include top and bottom borders when the border radius is 0. */\n  .cart-summary--extend:not(.has-border-radius) {\n    @media screen and (min-width: 750px) {\n      border-top: none;\n      border-bottom: none;\n    }\n  }\n\n  .cart-summary--extend .cart-summary__inner {\n    height: 100%;\n    padding: var(--padding-md) 0 var(--padding-4xl);\n\n    @media screen and (min-width: 750px) {\n      grid-row: 2 / -1;\n      padding-inline: var(--page-margin);\n      width: var(--sidebar-width);\n    }\n  }\n\n  /* If extend is off, apply the border radius to the inner summary container */\n  .cart-summary__inner.has-border-radius {\n    border-radius: var(--border-radius);\n  }\n\n  @media screen and (max-width: 749px) {\n    .inherit-parent-scheme--mobile {\n      --color-background: inherit;\n      --color-background-rgb: inherit;\n      --color-foreground: inherit;\n      --color-foreground-rgb: inherit;\n      --color-primary: inherit;\n      --color-primary-rgb: inherit;\n      --color-primary-hover: inherit;\n      --color-primary-hover-rgb: inherit;\n      --color-border: inherit;\n      --color-border-rgb: inherit;\n      --color-shadow: inherit;\n      --color-shadow-rgb: inherit;\n      --color-foreground-heading: inherit;\n      --color-primary-button-text: inherit;\n      --color-primary-button-background: inherit;\n      --color-primary-button-border: inherit;\n      --color-primary-button-hover-text: inherit;\n      --color-primary-button-hover-background: inherit;\n      --color-primary-button-hover-border: inherit;\n      --color-secondary-button-text: inherit;\n      --color-secondary-button-background: inherit;\n      --color-secondary-button-border: inherit;\n      --color-secondary-button-hover-text: inherit;\n      --color-secondary-button-hover-background: inherit;\n      --color-secondary-button-hover-border: inherit;\n      --color-input-text: inherit;\n      --color-input-text-rgb: inherit;\n      --color-input-background: inherit;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.summary\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"extend_summary\",\n      \"label\": \"t:settings.extend_summary\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-3\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.summary\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_cart-title.liquid",
    "content": "{% doc %}\n  Cart Title\n\n  Renders the cart title or empty cart state.\n\n  @param {boolean} [force_empty] - Force render empty cart state\n\n  @example\n  {% render 'cart-title', force_empty: true %}\n{% enddoc %}\n\n{% liquid\n  assign block_settings = block.settings\n%}\n\n<div\n  class=\"cart-title spacing-style text-{{ block_settings.alignment }}\"\n  style=\"{% render 'spacing-style', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  <h1 class=\"{{ block_settings.type_preset | default: 'h2' }}\">\n    {%- if cart.empty? or force_empty -%}\n      {{ 'content.your_cart_is_empty' | t }}\n    {%- else -%}\n      {{ block_settings.title }}\n      {%- if block_settings.show_count -%}{% render 'cart-bubble' %}{%- endif -%}\n    {%- endif -%}\n  </h1>\n</div>\n\n{% stylesheet %}\n  .cart-title h1 {\n    margin-block-end: 0;\n    display: inline-flex;\n    align-items: center;\n    gap: var(--gap-sm);\n  }\n\n  .cart-title .cart-bubble {\n    width: fit-content;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: var(--style-border-radius-buttons-primary);\n    aspect-ratio: auto;\n    padding: var(--cart-padding);\n  }\n\n  .cart-title .cart-bubble[data-maintain-ratio] {\n    width: min(1lh, 26px);\n    height: min(1lh, 26px);\n  }\n\n  .cart-title .cart-bubble__background {\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\n  }\n\n  .cart-title .cart-bubble__text {\n    color: var(--color-foreground);\n    font-family: var(--font-paragraph--family);\n    font-weight: var(--font-paragraph--weight);\n    font-size: clamp(var(--font-size--3xs), 0.75em, var(--font-size--xs));\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.title\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"inline_richtext\",\n      \"id\": \"title\",\n      \"label\": \"t:settings.cart_title\",\n      \"default\": \"t:text_defaults.cart\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_count\",\n      \"label\": \"t:settings.cart_count\",\n      \"default\": true\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.title\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_collection-card-image.liquid",
    "content": "{%- doc -%}\n  Display an image of a collection inside a collection card.\n  Intended for collection-card.liquid block.\n\n  @param {string} parent_block_id - The block.id of the collection-card block\n\n  @example\n  {% content_for 'block', type: '_collection-card-image', id: 'collection-card-image', parent_block_id: block.id %}\n{%- enddoc -%}\n\n{% comment %} Render using unified resource image component {% endcomment %}\n{% comment %} Note: image_source auto-determined from closest.collection for collections {% endcomment %}\n{% render 'resource-image',\n  content_type: 'collections',\n  image_source: blank,\n  parent_block_id: parent_block_id,\n  block_settings: block.settings,\n  section_settings: section.settings,\n  block_attributes: block.shopify_attributes\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_card_image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_card_image\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"info\": \"t:info.aspect_ratio_adjusted\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"portrait\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_collection-card.liquid",
    "content": "{% assign collection = closest.collection %}\n\n{% capture card_image %}\n  {% content_for 'block',\n    type: '_collection-card-image',\n    id: 'collection-card-image',\n    closest.collection: collection,\n    parent_block_id: block.id %}\n{% endcapture %}\n\n{% capture children %}\n  {% content_for 'blocks', closest.collection: collection %}\n{% endcapture %}\n\n{% render 'collection-card',\n  card_image: card_image,\n  children: children,\n  block: block,\n  collection: collection,\n  section: section\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_card\",\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"collection-title\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_card\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.text\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"placement\",\n      \"label\": \"t:settings.placement\",\n      \"options\": [\n        {\n          \"value\": \"on_image\",\n          \"label\": \"t:options.on_image\"\n        },\n        {\n          \"value\": \"below_image\",\n          \"label\": \"t:options.below_image\"\n        }\n      ]\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.placement == \\\"on_image\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"collection_card_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_collection-image.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n{% if block_settings.image_ratio == 'custom' %}\n  {% assign image_width = block_settings.collection_image_width | at_most: 100 %}\n  {% assign image_height = block_settings.collection_image_height %}\n{% endif %}\n\n{% liquid\n  assign ratio = 1\n  assign block_ratio = block_settings.image_ratio\n\n  if block_settings.collection.image and block_ratio == 'portrait'\n    assign ratio = 0.8\n  elsif block_settings.collection.image and block_ratio == 'adapt'\n    assign ratio = block_settings.collection.image.aspect_ratio\n  endif\n\n  if ratio == 0 or ratio == null\n    assign ratio = 1\n  endif\n\n  if block_settings.image_ratio == 'custom'\n    assign ratio = image_width | append: ' / ' | append: image_height\n  endif\n%}\n\n{% if block_settings.collection.featured_image %}\n  <div\n    class=\"collection-image spacing-style collection-image-{{ block.id }}\"\n    style=\"--ratio: {{ ratio }}; --image-width: {{ image_width }}%; {% render 'spacing-style', settings: block_settings %}\"\n  >\n    {% liquid\n      assign media_width_desktop = 100 | divided_by: 2 | append: 'vw'\n      assign media_width_mobile = '100vw'\n      assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n      assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n    %}\n\n    {{\n      block_settings.collection.featured_image\n      | image_url: width: 3840\n      | image_tag: preload: true, class: 'collection-image__featured-image', widths: widths, sizes: sizes\n    }}\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .collection-image {\n    width: var(--image-width);\n  }\n\n  .collection-image .collection-image__featured-image {\n    aspect-ratio: var(--ratio);\n    object-fit: cover;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"collection\",\n      \"id\": \"collection\",\n      \"label\": \"t:settings.collection\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"square\",\n      \"label\": \"t:settings.aspect_ratio\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"collection_image_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.image_ratio == 'custom' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"collection_image_height\",\n      \"label\": \"t:settings.height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.image_ratio == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_image\",\n      \"settings\": {\n        \"collection\": \"{{ closest.collection }}\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_collection-info.liquid",
    "content": "{% assign block_settings = block.settings %}\n<div\n  class=\"collection-info collection-info--{{ block_settings.placement }} color-{{ block_settings.color_scheme }}\"\n  style=\"{% render 'spacing-style', settings: block_settings %} {% if block_settings.icons_style contains 'large' %} --slideshow-icon-padding: 0px{% endif %}\"\n  {{ block.shopify_attributes }}\n>\n  <div class=\"collection-info__content\">\n    {% content_for 'blocks' %}\n  </div>\n\n  <div class=\"collection-info__controls collection-info__controls--{{ block_settings.navigation }}\">\n    {%- render 'slideshow-controls', icon_style: block_settings.icons_style, shape: block_settings.background_style -%}\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_info\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"placement\",\n      \"label\": \"t:settings.placement\",\n      \"options\": [\n        {\n          \"label\": \"t:options.above_carousel\",\n          \"value\": \"above-carousel\"\n        },\n        {\n          \"label\": \"t:options.next_to_carousel\",\n          \"value\": \"next-to-carousel\"\n        }\n      ]\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.arrows\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"navigation\",\n      \"label\": \"t:settings.navigation\",\n      \"options\": [\n        {\n          \"label\": \"t:options.above_carousel\",\n          \"value\": \"above-carousel\"\n        },\n        {\n          \"label\": \"t:options.inside_carousel\",\n          \"value\": \"inside-carousel\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.placement == 'above-carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icons\",\n      \"options\": [\n        {\n          \"value\": \"arrows\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.large_arrows\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.large_chevrons\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ]\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_style\",\n      \"label\": \"t:settings.background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ]\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_info\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_collection-link.liquid",
    "content": "{%- doc -%}\n  Renders a collection link block.\n\n  @param {number} index\n  @param {boolean} [current]\n  @param {boolean} [image_only]\n{%- enddoc -%}\n\n{% unless current %}\n  {% assign loading = 'lazy' %}\n{% endunless %}\n\n{% liquid\n  assign onboarding = false\n  if closest.collection == empty\n    assign onboarding = true\n  endif\n%}\n\n{% if block.settings.show_count %}\n  {% assign count = closest.collection.all_products_count %}\n  {%- capture count -%}\n    &nbsp;<sup class=\"collection-links__count\">{{ count }}</sup>\n  {%- endcapture -%}\n\n  {% if onboarding %}\n    {%- capture count -%}\n      &nbsp;<sup class=\"collection-links__count\">5</sup>\n    {%- endcapture -%}\n  {% endif %}\n{% endif %}\n\n{% capture title_block %}\n  {% content_for 'block', type: '_inline-collection-title', id: 'title', suffix: count %}\n{% endcapture %}\n\n{% capture image_block %}\n  {%- liquid\n    assign placeholder_variant = index | modulo: 4 | plus: 1\n    assign placeholder_name = 'collection-apparel-' | append: placeholder_variant\n  -%}\n  {% content_for 'block', type: '_image', id: 'image', loading: loading, placeholder: placeholder_name %}\n{% endcapture %}\n\n{% if image_only %}\n  <a\n    href=\"{{ closest.collection.url }}\"\n    class=\"collection-links__image\"\n    size=\"{{ section.settings.image_height }}\"\n    {% if onboarding %}\n      data-placeholder=\"true\"\n    {% endif %}\n  >\n    {{ image_block }}\n  </a>\n{% else %}\n  <a\n    href=\"{{ closest.collection.url }}\"\n    class=\"collection-links__link\"\n    ref=\"links[]\"\n    on:pointerenter=\"/select/{{ index }}\"\n    on:focus=\"/select/{{ index }}\"\n    {% if section.settings.layout == 'text' %}\n      on:pointerleave=\"/clearSelections\"\n      on:blur=\"/clearSelections\"\n    {% endif %}\n    aria-current=\"{{ current }}\"\n    {% if onboarding %}\n      data-placeholder=\"true\"\n    {% endif %}\n    {{ block.shopify_attributes }}\n  >\n    {{ title_block }}\n\n    {% if section.settings.layout == 'text' %}\n      <div\n        class=\"collection-links__image\"\n        ref=\"images[]\"\n        hidden\n      >\n        {{ image_block }}\n      </div>\n    {% endif %}\n  </a>\n{% endif %}\n\n{% stylesheet %}\n  .collection-links__link {\n    --min-font-size: var(--font-size--4xl);\n    --max-font-size: var(--font-size--6xl);\n\n    display: flex;\n    color: inherit;\n    text-decoration: none;\n    text-wrap: pretty;\n    font-size: clamp(var(--min-font-size), 4.5vw, var(--max-font-size));\n\n    /* When hovering over container, dim non-current links (text layout only) */\n    @media (hover: hover) {\n      collection-links-component:not([layout='spotlight']) .collection-links__container:hover & {\n        opacity: var(--opacity-subdued-text);\n      }\n\n      collection-links-component:not([layout='spotlight']) .collection-links__container:hover &[aria-current='true'] {\n        opacity: 1;\n      }\n    }\n\n    [layout='spotlight'] & {\n      /* Spotlight layout: dimmed by default */\n      opacity: var(--disabled-opacity);\n\n      &[aria-current='true'] {\n        opacity: 1;\n      }\n    }\n\n    .text-block {\n      display: inline-block;\n    }\n\n    @media screen and (max-width: 749px) {\n      --min-font-size: var(--font-size--3xl);\n      --max-font-size: var(--font-size--5xl);\n\n      [layout='spotlight'] & {\n        white-space: normal;\n        scroll-snap-align: start;\n        text-wrap: pretty;\n\n        span {\n          text-wrap: pretty;\n        }\n      }\n    }\n  }\n\n  .collection-links__count {\n    font-size: 0.5em;\n    opacity: var(--disabled-opacity);\n    font-weight: var(--font-paragraph--weight);\n  }\n\n  .collection-links__image {\n    align-items: center;\n    justify-content: center;\n\n    &:not([hidden]) {\n      display: flex;\n    }\n\n    &[reveal] {\n      --offset: 15px;\n\n      position: fixed;\n      top: 0;\n      left: 0;\n      z-index: var(--layer-temporary);\n      display: block;\n      translate: calc(var(--x) + var(--offset)) calc(var(--y) + var(--offset));\n      pointer-events: none;\n      width: auto;\n\n      image-block {\n        --image-height-basis: 5rem;\n\n        height: var(--image-height);\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_card\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_count\",\n      \"label\": \"t:settings.show_count\",\n      \"default\": true\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_content-without-appearance.liquid",
    "content": "{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'group',\n  class: 'media-with-content__content',\n  children: children,\n  settings: block.settings,\n  shopify_attributes: block.shopify_attributes\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.content\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.group\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_content.liquid",
    "content": "{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}\n\n{% schema %}\n{\n  \"name\": \"t:names.content\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.group\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_divider.liquid",
    "content": "{% render 'divider', id: block.id, settings: block.settings, attributes: true %}\n\n{% schema %}\n{\n  \"name\": \"t:names.divider\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"thickness\",\n      \"label\": \"t:settings.thickness\",\n      \"min\": 0.5,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 1\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"options\": [\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"rounded\",\n          \"label\": \"t:options.rounded\"\n        }\n      ],\n      \"default\": \"square\",\n      \"visible_if\": \"{{ block.settings.thickness > 1 }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"width_percent\",\n      \"label\": \"t:settings.length\",\n      \"min\": 5,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.divider\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-blog-posts-card.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n{% liquid\n  assign onboarding = false\n\n  if article == blank\n    assign onboarding = true\n    # Assign placeholder variables\n    assign display_title = 'placeholders.blog_post_title' | t\n    assign display_author = 'placeholders.blog_post_author' | t\n    assign display_date = 'placeholders.blog_post_date' | t\n    assign display_description = 'placeholders.blog_post_description' | t\n  else\n    assign display_title = article.title\n    assign display_author = article.author\n    assign display_date = article.published_at\n    assign display_description = null\n  endif\n\n  assign truncate_description = true\n  if section.settings.layout_type == 'editorial'\n    assign truncate_description = false\n  endif\n%}\n\n{% capture image %}\n  {% content_for 'block',\n    id: 'image',\n    type: '_featured-blog-posts-image',\n    image: article.image,\n    parent_block_id: block.id\n  %}\n{% endcapture %}\n\n{% capture title %}\n  {% content_for 'block', id: 'title', type: '_heading', text: display_title %}\n{% endcapture %}\n\n{% capture details %}\n  {% content_for 'block',\n    id: 'blog-post-info-text',\n    type: '_blog-post-info-text',\n    alignment: block_settings.alignment,\n    author: display_author,\n    date: display_date\n  %}\n{% endcapture %}\n\n{% capture description %}\n  {% content_for 'block',\n    id: 'blog-post-description',\n    type: '_blog-post-description',\n    article: article,\n    show_read_more: false,\n    should_truncate: truncate_description,\n    onboarding_text: display_description\n  %}\n{% endcapture %}\n\n<div\n  class=\"\n    featured-blog-posts-card spacing-style border-style\n    {% if section.settings.layout_type == 'editorial' %}blog-post-card--flexible-aspect-ratio{% endif %}\n    {% if block_settings.inherit_color_scheme == false %}color-{{ block_settings.color_scheme }}{% endif %}\n  \"\n  data-block-id=\"{{ block.id }}\"\n  data-testid=\"featured-blog-posts-card\"\n  {% if onboarding %}\n    data-placeholder=\"true\"\n  {% endif %}\n  style=\"\n    {%- render 'spacing-style', settings: block_settings -%}\n    {%- render 'border-override', settings: block_settings -%}\n    --text-align: {{ block_settings.alignment }};\n    --horizontal-alignment: {{ block_settings.alignment }};\n    --gap: {{ block_settings.gap }}px;\n  \"\n  {{ block.shopify_attributes }}\n>\n  <a\n    class=\"featured-blog-posts-card__link\"\n    {% unless onboarding %}\n      href=\"{{ article.url }}\"\n    {% endunless %}\n  >\n    <span class=\"visually-hidden\">{{ display_title }}</span>\n  </a>\n\n  <div class=\"featured-blog-posts-card__inner\">\n    {% if onboarding or article.image %}\n      {{ image }}\n    {% endif %}\n\n    <div class=\"featured-blog-posts-card__content layout-panel-flex--column\">\n      <h4>{{ title }}</h4>\n      {{ details }}\n      {{ description }}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .featured-blog-posts-card {\n    text-align: var(--text-align);\n  }\n\n  .featured-blog-posts-card__inner {\n    gap: var(--gap);\n  }\n\n  .resource-list--grid .resource-list__item {\n    min-width: 0;\n  }\n\n  /* Editorial layout */\n  .resource-list:not(.hidden--desktop) .blog-post-card--flexible-aspect-ratio {\n    .featured-blog-posts-card__content {\n      --flex-wrap: nowrap;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .resource-list:not(.hidden--desktop) .blog-post-card--flexible-aspect-ratio {\n      .featured-blog-posts-card__image,\n      .blog-placeholder-svg {\n        aspect-ratio: unset;\n      }\n    }\n  }\n\n  .featured-blog-posts-card__inner a,\n  .featured-blog-posts-card__inner button {\n    pointer-events: auto;\n  }\n\n  /* allow all blocks to be selectable in editor preview */\n  .shopify-design-mode .featured-blog-posts-card__content * {\n    pointer-events: auto;\n  }\n\n  .featured-blog-posts-card__content {\n    --flex-wrap: wrap;\n  }\n\n  .featured-blog-posts-card__content h4 {\n    margin: 0;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.blog_card\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.text\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-blog-posts-image.liquid",
    "content": "{%- doc -%}\n  Renders the blog article image block for use within featured blog posts cards.\n\n  @param {object} image - The image object\n  @param {string} parent_block_id - The block.id of the parent blog post card\n{%- enddoc -%}\n\n{% comment %} Render using unified resource image component {% endcomment %}\n{% render 'resource-image',\n  content_type: 'articles',\n  image_source: image,\n  parent_block_id: parent_block_id,\n  block_settings: block.settings,\n  section_settings: section.settings,\n  block_attributes: block.shopify_attributes\n%}\n\n{% stylesheet %}\n  .featured-blog-posts-card__image {\n    width: 100%;\n  }\n\n  .featured-blog-posts-card__image .blog-placeholder-svg {\n    object-fit: cover;\n    width: 100%;\n    height: 100%;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"info\": \"t:info.aspect_ratio_adjusted\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"square\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-blog-posts-title.liquid",
    "content": "{%- doc -%}\n  Featured Blog Posts Title Block\n\n  Renders a blog title with text styling options.\n  Uses the blog title from section settings or placeholder text.\n\n  Block receives:\n  - block.settings: All configured settings from the schema\n  - section.settings.blog: The parent section's blog setting\n\n  @example\n  {% content_for 'block', type: '_featured-blog-posts-title', id: 'blog-title' %}\n{%- enddoc -%}\n\n\n{% liquid\n  if closest.blog != blank\n    assign blog_title = closest.blog.title\n  elsif section.settings.blog != blank\n    assign blog_title = section.settings.blog.title\n  else\n    assign blog_title = 'placeholders.blog_posts' | t\n  endif\n%}\n\n{% capture blog_title_text %}\n  <h3>{{ blog_title }}</h3>\n{% endcapture %}\n\n{% render 'text', fallback_text: blog_title_text, block: block %}\n\n{% schema %}\n{\n  \"name\": \"t:names.title\",\n  \"settings\": [\n    {\n      \"type\": \"richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-product-gallery.liquid",
    "content": "{% liquid\n  assign product = closest.product\n%}\n\n{% capture children %}\n  {% unless product == blank %}\n    {% if settings.quick_add or settings.mobile_quick_add %}\n      {% render 'quick-add', product: product, section_id: section.id %}\n    {% endif %}\n  {% endunless %}\n{% endcapture %}\n\n{% render 'card-gallery', children: children %}\n\n{% stylesheet %}\n  .featured-product-section .card-gallery .quick-add__button {\n    position: absolute;\n    right: var(--quick-add-offset, var(--padding-sm));\n    bottom: var(--quick-add-offset, var(--padding-sm));\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_media\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_media\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"constrain_to_viewport\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.off\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.maintain_aspect_ratio\"\n        },\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.crop_to_fit\"\n        }\n      ],\n      \"default\": \"contain\",\n      \"label\": \"t:settings.limit_media_to_screen_height\",\n      \"visible_if\": \"{{ block.settings.image_ratio == 'adapt' }}\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-product-information-carousel.liquid",
    "content": "{% render 'product-media-gallery-content',\n  media_presentation: 'carousel',\n  block_settings: block.settings,\n  block_id: block.id,\n  block_shopify_attributes: block.shopify_attributes\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_media\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"aspect_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"1/1.25\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"2/1\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"constrain_to_viewport\",\n      \"label\": \"t:settings.limit_media_to_screen_height\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_fit\",\n      \"label\": \"t:settings.media_fit\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.aspect_ratio == 'adapt' and block.settings.constrain_to_viewport == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"media_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 4\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"extend_media\",\n      \"label\": \"t:settings.extend_media_to_screen_edge\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_width == 'content-center-aligned' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"zoom\",\n      \"label\": \"t:settings.enable_zoom\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_loop\",\n      \"label\": \"t:settings.enable_video_looping\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"hide_variants\",\n      \"default\": false,\n      \"label\": \"t:settings.hide_unselected_variant_media\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icons\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.large_arrows\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.large_chevrons\"\n        }\n      ],\n      \"default\": \"arrow\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slideshow_controls_style\",\n      \"label\": \"t:settings.pagination\",\n      \"options\": [\n        {\n          \"value\": \"dots\",\n          \"label\": \"t:options.dots\"\n        },\n        {\n          \"value\": \"counter\",\n          \"label\": \"t:options.counter\"\n        },\n        {\n          \"value\": \"thumbnails\",\n          \"label\": \"t:options.thumbnails\"\n        }\n      ]\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slideshow_mobile_controls_style\",\n      \"label\": \"t:settings.mobile_pagination\",\n      \"options\": [\n        {\n          \"value\": \"dots\",\n          \"label\": \"t:options.dots\"\n        },\n        {\n          \"value\": \"counter\",\n          \"label\": \"t:options.counter\"\n        },\n        {\n          \"value\": \"hint\",\n          \"label\": \"t:options.hint\"\n        },\n        {\n          \"value\": \"thumbnails\",\n          \"label\": \"t:options.thumbnails\"\n        }\n      ]\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.thumbnails\",\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' or block.settings.slideshow_mobile_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"thumbnail_position\",\n      \"label\": \"t:settings.desktop_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"bottom\",\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"thumbnail_width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"min\": 44,\n      \"max\": 72,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 64,\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"thumbnail_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' or block.settings.slideshow_mobile_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_media\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-product-price.liquid",
    "content": "{% liquid\n  assign product = closest.product\n  assign block_settings = block.settings\n\n  if settings.currency_code_enabled_product_cards\n    assign price_min = product.price_min | money_with_currency\n  else\n    assign price_min = product.price_min | money\n  endif\n\n  if product.price_varies\n    assign price_from_text = 'content.price_from' | t: price: '__PRICE__'\n    assign display_price = price_from_text | replace: '__PRICE__', price_min\n  endif\n\n  assign has_swatches_only = false\n\n  if product.options.size == 1\n    assign first_product_option_value = product.options_with_values.first.values.first\n\n    if first_product_option_value.swatch != blank\n      assign has_swatches_only = true\n    endif\n  endif\n%}\n\n<product-price\n  class=\"text-right {{ block_settings.type_preset | default: 'h6' }} spacing-style\"\n  data-block-id=\"{{ block.id }}\"\n  data-product-id=\"{{ product.id }}\"\n  style=\"\n    {% render 'spacing-style', settings: block_settings %}\n    --product-price-width: 100%;\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% if product.price_varies and has_swatches_only == false and price_min != blank %}\n    <span class=\"price\">{{ display_price }}</span>\n  {% else %}\n    {% render 'price',\n      show_unit_price: true,\n      show_sale_price_first: block_settings.show_sale_price_first,\n      product_resource: product\n    %}\n  {% endif %}\n</product-price>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_price\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_price\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_price_in_theme_settings\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_sale_price_first\",\n      \"label\": \"t:settings.show_sale_price_first\",\n      \"default\": true\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.type_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_featured-product.liquid",
    "content": "{%- liquid\n  assign product_has_swatches = false\n  for product_option in closest.product.options_with_values\n    assign swatch_count = product_option.values | map: 'swatch' | compact | size\n    if swatch_count > 0\n      assign product_has_swatches = true\n      break\n    endif\n  endfor\n-%}\n\n{% capture product_card_children %}\n  <div class=\"featured-product-content-top\">\n    {% content_for 'block', type: 'product-title', id: 'featured-product-title' %}\n\n    {% content_for 'block', type: '_featured-product-price', id: 'featured-product-price' %}\n  </div>\n  {% content_for 'block', type: '_featured-product-gallery', id: 'featured-product-gallery' %}\n  {% if product_has_swatches %}\n    <div class=\"featured-product-content-bottom\">\n      {%- content_for 'block', type: 'swatches', id: 'featured-product-swatches' -%}\n    </div>\n  {% endif %}\n{% endcapture %}\n\n{% render 'product-card', children: product_card_children, product: closest.product, product_card_gap: 8 %}\n\n{% stylesheet %}\n  .featured-product-content-top {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    gap: var(--gap-sm);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_card\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_footer-social-icons.liquid",
    "content": "<div\n  class=\"social-icons__wrapper\"\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n\n{% stylesheet %}\n  .social-icons__wrapper {\n    display: flex;\n    gap: var(--gap-sm);\n    flex-wrap: wrap;\n    justify-content: center;\n\n    @media screen and (min-width: 750px) {\n      flex-wrap: nowrap;\n      justify-content: flex-start;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.social_media_links\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"_social-link\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_header-logo.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign use_inverse_logo = false\n\n  if section.settings.enable_transparent_header_home and template.name == 'index' and section.settings.home_color_scheme == 'inverse'\n    assign use_inverse_logo = true\n  elsif section.settings.enable_transparent_header_product and template.name == 'product' and section.settings.product_color_scheme == 'inverse'\n    assign use_inverse_logo = true\n  elsif section.settings.enable_transparent_header_collection and template.name == 'collection' and section.settings.collection_color_scheme == 'inverse'\n    assign use_inverse_logo = true\n  endif\n\n  if use_inverse_logo\n    if settings.logo_inverse != blank\n      assign inverse_logo = settings.logo_inverse\n    else\n      assign inverse_logo = settings.logo\n    endif\n  endif\n%}\n\n{% comment %}\n  Output all logo variants, use CSS to hide/show the appropriate one\n  based on the .header[transparent] selector\n{% endcomment %}\n<a\n  {% if template.name == 'index' and block_settings.hide_logo_on_home_page %}\n    data-hidden-on-home-page\n  {% endif %}\n  href=\"{{ routes.root_url }}\"\n  class=\"size-style spacing-style header-logo\"\n  style=\"\n    {% render 'size-style', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n    --font-family: var(--font-body--family);\n    --font-style: var(--font-body--style);\n    --font-weight: 600;\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% liquid\n    assign logo_width = settings.logo_height | times: settings.logo.aspect_ratio | ceil\n    assign logo_width_mobile = settings.logo_height_mobile | times: settings.logo.aspect_ratio | ceil\n    assign inverse_logo_width = settings.logo_height | times: inverse_logo.aspect_ratio | ceil\n    assign inverse_logo_width_mobile = settings.logo_height_mobile | times: inverse_logo.aspect_ratio | ceil\n    assign logo_style = '--header-logo-image-width: ' | append: logo_width | append: 'px;' | append: '--header-logo-image-width-mobile: ' | append: logo_width_mobile | append: 'px; --header-logo-image-height: ' | append: settings.logo_height | append: 'px; --header-logo-image-height-mobile: ' | append: settings.logo_height_mobile | append: 'px;'\n    assign inverse_logo_style = '--header-logo-image-width: ' | append: inverse_logo_width | append: 'px;' | append: '--header-logo-image-width-mobile: ' | append: inverse_logo_width_mobile | append: 'px; --header-logo-image-height: ' | append: settings.logo_height | append: 'px; --header-logo-image-height-mobile: ' | append: settings.logo_height_mobile | append: 'px;'\n  %}\n\n  <span\n    class=\"header-logo__image-container header-logo__image-container--original\"\n    data-testid=\"header-logo\"\n  >\n    {% render 'image',\n      image: settings.logo,\n      class: 'header-logo__image',\n      height: settings.logo_height,\n      text_fallback: shop.name,\n      style: logo_style\n    %}\n  </span>\n\n  {% if use_inverse_logo %}\n    <span\n      class=\"header-logo__image-container header-logo__image-container--inverse\"\n      data-testid=\"header-logo-inverse\"\n    >\n      {% render 'image',\n        image: inverse_logo,\n        class: 'header-logo__image',\n        height: settings.logo_height,\n        text_fallback: shop.name,\n        style: inverse_logo_style\n      %}\n    </span>\n  {% endif %}\n</a>\n\n{% stylesheet %}\n  .header-logo {\n    display: flex;\n    height: 100%;\n    font-size: var(--font-size--md);\n    font-family: var(--font-family);\n    font-weight: var(--font-weight);\n    font-style: var(--font-style);\n    color: var(--color-foreground);\n    justify-content: center;\n    align-items: center;\n    text-decoration: none;\n\n    /* Make sure the logo visually hugs the left edge of the column when it is the first item in the left column */\n    margin-inline: calc(-1 * var(--padding-inline-start));\n\n    &[data-hidden-on-home-page] {\n      display: none;\n\n      #header-component:is(\n          [sticky='always']:not([data-scroll-direction='none']),\n          [sticky='scroll-up'][data-scroll-direction='up']\n        )\n        & {\n        display: flex;\n      }\n    }\n\n    @media screen and (max-width: 749px) {\n      padding: 0;\n    }\n\n    @media screen and (min-width: 750px) {\n      flex-shrink: 0;\n    }\n\n    &:hover {\n      text-decoration: none;\n    }\n  }\n\n  .header-logo__image {\n    object-fit: contain;\n    height: var(--header-logo-image-height-mobile);\n    width: var(--header-logo-image-width-mobile);\n\n    @media screen and (min-width: 750px) {\n      height: var(--header-logo-image-height);\n      width: var(--header-logo-image-width);\n    }\n  }\n\n  .header-logo:has(.header-logo__image-container--inverse) .header-logo__image-container--original {\n    display: var(--header-logo-display, block);\n  }\n\n  .header-logo__image-container--inverse {\n    display: var(--header-logo-inverse-display, none);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.logo\",\n  \"tag\": null,\n  \"class\": \"header-logo\",\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_logo_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.visibility\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"hide_logo_on_home_page\",\n      \"label\": \"t:settings.hide_logo_on_home_page\",\n      \"info\": \"t:info.hide_logo_on_home_page_help\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding_desktop\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_header-menu.liquid",
    "content": "{%- doc -%}\n  Renders a header menu block.\n\n  @param {string} [variant] - What version of the menu to render. Defaults to header menu.\n  @param {string} [transparent] - Show a transparent menu\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n%}\n\n{% case variant %}\n  {% when 'mobile' %}\n    <div\n      class=\"header__drawer\"\n      ref=\"headerDrawerContainer\"\n      data-hydration-key=\"header-drawer-mobile\"\n      {{ block.shopify_attributes }}\n    >\n      {% render 'header-drawer', linklist: block_settings.menu, data_header_drawer_type: 'mobile-drawer' %}\n    </div>\n\n  {% when 'navigation_bar' %}\n    {% if block_settings.navigation_bar == true %}\n      <div\n        class=\"menu-list menu-list--mobile{% if transparent == blank %} color-{{ block_settings.color_scheme_navigation_bar }}{% endif %}\"\n        style=\"--menu-horizontal-gap: 15px; --mobile-nav-margin: auto;\"\n        data-hydration-key=\"header-menu-mobile-navigation-bar\"\n      >\n        <div class=\"menu-list__scroll-container\">\n          <ul\n            class=\"menu-list__list list-unstyled\"\n            role=\"list\"\n          >\n            {% for link in block_settings.menu.links %}\n              <li>\n                <a\n                  href=\"{{ link.url }}\"\n                  id=\"MenuItem-{{ link.handle }}\"\n                  class=\"menu-list__item\"\n                  {% if link.current %}\n                    aria-current=\"page\"\n                  {% endif %}\n                >\n                  {{- link.title -}}\n                </a>\n              </li>\n            {% endfor %}\n          </ul>\n        </div>\n      </div>\n    {% endif %}\n  {% else %}\n    {% liquid\n      assign block_settings = block.settings\n      assign menu_content_type = block_settings.menu_style | default: 'text'\n      assign image_border_radius = block_settings.image_border_radius\n      assign color_scheme_classes = ''\n      assign color_scheme_setting_id = 'color_scheme_' | append: section.settings.menu_row\n      assign current_color_scheme = block_settings.color_scheme\n      assign parent_color_scheme = section.settings[color_scheme_setting_id]\n\n      if parent_color_scheme.id != current_color_scheme.id\n        assign color_scheme_classes = ' color-' | append: current_color_scheme\n      endif\n\n      # Check if header and menu colors match. This is used to apply different padding styles in css\n      if parent_color_scheme.settings.background.rgb == current_color_scheme.settings.background.rgb\n        assign color_scheme_classes = color_scheme_classes | append: ' color-scheme-matches-parent'\n      endif\n\n      if block_settings.menu_style == 'featured_collections'\n        assign ratio = block_settings.featured_collections_aspect_ratio\n      elsif block_settings.menu_style == 'featured_products'\n        assign ratio = block_settings.featured_products_aspect_ratio\n      endif\n    %}\n\n    {% capture children %}\n      {% for link in block_settings.menu.links %}\n        <li\n          role=\"presentation\"\n          class=\"menu-list__list-item\"\n          on:focus=\"/activate\"\n          on:blur=\"/deactivate\"\n          on:pointerenter=\"/activate\"\n          on:pointerleave=\"/deactivate\"\n        >\n          <a\n            href=\"{{ link.url }}\"\n            data-skip-node-update=\"true\"\n            class=\"menu-list__link{% if link.active %} menu-list__link--active{% endif %}\"\n            {%- if link.links != blank -%}\n              aria-controls=\"submenu-{{ forloop.index }}\"\n              aria-haspopup=\"true\"\n              aria-expanded=\"false\"\n            {%- endif -%}\n            {% if link.current %}\n              aria-current=\"page\"\n            {% endif %}\n            ref=\"menuitem\"\n          >\n            <span class=\"menu-list__link-title\">{{- link.title -}}</span>\n          </a>\n          {%- if link.links != blank -%}\n            <div class=\"menu-list__submenu{{ color_scheme_classes }}\" ref=\"submenu[]\">\n              <div\n                id=\"submenu-{{ forloop.index }}\"\n                class=\"menu-list__submenu-inner\"\n                style=\"{% render 'submenu-font-styles', settings: block_settings %}\"\n              >\n                {% assign list_id = 'MegaMenuList-' | append: forloop.index %}\n                <div class=\"mega-menu section section--full-width-margin section--{{ section.settings.section_width }}\">\n                  <div\n                    class=\"mega-menu__grid\"\n                    data-menu-grid-id=\"{{ list_id }}\"\n                  >\n                    {% render 'mega-menu-list',\n                      parent_link: link,\n                      id: list_id,\n                      section: section,\n                      grid_columns_count: 6,\n                      grid_columns_count_tablet: 4,\n                      grid_columns_count_collection_images: 8,\n                      menu_content_type: menu_content_type,\n                      content_aspect_ratio: ratio,\n                      image_border_radius: image_border_radius\n                    %}\n                  </div>\n                </div>\n              </div>\n            </div>\n          {%- endif -%}\n        </li>\n      {% endfor %}\n      <li\n        class=\"menu-list__list-item\"\n        role=\"presentation\"\n        slot=\"more\"\n        on:focus=\"/activate\"\n        on:blur=\"/deactivate\"\n        on:pointerenter=\"/activate\"\n        on:pointerleave=\"/deactivate\"\n      >\n        <button role=\"listitem\" class=\"menu-list__link button-unstyled\">\n          <span class=\"menu-list__link-title\">{{ 'actions.more' | t }}</span>\n        </button>\n      </li>\n    {% endcapture %}\n\n    <header-menu\n      ref=\"headerMenu\"\n      class=\"header-menu\"\n      {{ block.shopify_attributes }}\n      data-hydration-key=\"header-menu\"\n    >\n      <div class=\"header-menu__inner\">\n        <nav\n          class=\"menu-list\"\n          aria-label=\"{{ 'accessibility.header_navigation_label' | t }}\"\n          style=\"{% render 'menu-font-styles', settings: block_settings %}\"\n        >\n          {% assign class = 'overflow-menu' | append: color_scheme_classes %}\n          {% render 'overflow-list',\n            class: class,\n            ref: 'overflowMenu',\n            children: children,\n            minimum-items: 2,\n            data-testid: 'header-menu-overflow-list',\n            attributes: 'data-skip-node-update'\n          %}\n        </nav>\n      </div>\n\n      <script\n        src=\"{{ 'header-menu.js' | asset_url }}\"\n        type=\"module\"\n        fetchpriority=\"low\"\n      ></script>\n    </header-menu>\n{% endcase %}\n\n{% style %}\n  .header__underlay {\n    --color-submenu: rgb({{ block_settings.color_scheme.settings.background.rgba }});\n  }\n{% endstyle %}\n{% stylesheet %}\n  .header__drawer {\n    --header-drawer-min-height: 60px;\n    display: flex;\n    min-height: var(--header-drawer-min-height);\n    align-items: center;\n  }\n\n  #header-component[data-menu-style='drawer'] .header__drawer {\n    display: flex;\n    min-height: var(--header-drawer-min-height);\n  }\n\n  @media screen and (min-width: 750px) {\n    #header-component[data-menu-style='menu'] .header__drawer {\n      display: none;\n      min-height: 0;\n    }\n  }\n\n  .header--compact .header__drawer {\n    min-height: var(--minimum-touch-target);\n  }\n\n  .menu-list--mobile {\n    &.menu-list {\n      display: grid;\n    }\n\n    & .menu-list__list {\n      width: max-content;\n      margin-inline: auto;\n      gap: var(--menu-horizontal-gap);\n    }\n\n    & li {\n      width: max-content;\n      padding-block: var(--padding-sm);\n    }\n\n    & li:first-of-type {\n      padding-inline-start: var(--menu-horizontal-gap);\n    }\n\n    & li:last-of-type {\n      padding-inline-end: var(--menu-horizontal-gap);\n    }\n\n    & a {\n      color: var(--color-foreground);\n    }\n  }\n\n  .menu-list__scroll-container {\n    position: relative;\n    overflow-x: auto;\n    mask-image: linear-gradient(to right, transparent, #000 20px, #000 calc(100% - 20px), transparent);\n    padding-block: var(--padding-2xs);\n  }\n\n  .menu-list {\n    --menu-horizontal-gap: var(--gap-xl);\n    --menu-vertical-gap: var(--gap-xl);\n\n    display: flex;\n    height: 100%;\n  }\n\n  .menu-list__list {\n    display: flex;\n    justify-content: var(--grid-area-alignment);\n  }\n\n  .menu-list__list-item {\n    flex-shrink: 0;\n    white-space: nowrap;\n    display: flex;\n    align-items: center;\n    height: 100%;\n  }\n\n  .menu-list__list-item[aria-hidden='true'] {\n    visibility: hidden;\n  }\n\n  .menu-list__link {\n    font-family: var(--menu-top-level-font-family);\n    font-style: var(--menu-top-level-font-style);\n    font-weight: var(--menu-top-level-font-weight);\n    font-size: var(--menu-top-level-font-size);\n    line-height: var(--menu-top-level-font-line-height);\n    text-transform: var(--menu-top-level-font-case);\n    color: var(--menu-top-level-font-color);\n    text-decoration: none;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    cursor: pointer;\n    height: 100%;\n    margin-block: 0;\n\n    &:hover,\n    &:focus {\n      color: var(--menu-top-level-font-color);\n    }\n\n    @media screen and (min-width: 750px) {\n      font-size: var(--menu-top-level-font-size-desktop);\n    }\n  }\n\n  .menu-list__link-title {\n    padding-inline: calc(var(--gap-xl) / 2);\n  }\n  [slot='overflow'] .menu-list__link-title {\n    padding-inline: 0;\n  }\n\n  .menu-list__list-item:not([slot='overflow']) {\n    flex-direction: column;\n  }\n  .menu-list__list-item:not([slot='overflow'])::after {\n    content: '';\n    width: 100%;\n    height: var(--header-padding);\n    margin-bottom: calc(-1 * var(--header-padding));\n  }\n\n  [slot='overflow'] > .menu-list__link::after {\n    content: none;\n  }\n\n  /*\n    High specificity selectors to subdue non-hovered links without javascript.\n    If the need for js-generated `hovered` and `focused` classes arises for another reason we can simplify these.\n  */\n  .menu-list:where(:has(.menu-list__list-item:hover)),\n  .menu-list:where(:has(.menu-list__list-item:focus-within)),\n  .menu-list:where(:has(.menu-list__list-item:not([aria-hidden='true']) .menu-list__link--active)) {\n    .menu-list__link {\n      color: rgb(var(--menu-top-level-font-color-rgb) / var(--opacity-subdued-text));\n    }\n  }\n\n  /* stylelint-disable-next-line selector-max-specificity */\n  .menu-list:not(:has(.menu-list__list-item:hover)) .menu-list__link--active,\n  .menu-list .menu-list__list-item:where(:hover, :focus-within) .menu-list__link,\n  .menu-list .menu-list__list-item[slot='overflow'] .menu-list__link[aria-expanded='true'] {\n    color: var(--menu-top-level-font-color);\n  }\n\n  .overflow-menu::part(list) {\n    /* Make sure focus outline is not cut off by overflow hidden */\n    --focus-outline-size: calc(var(--focus-outline-offset) + var(--focus-outline-width));\n\n    gap: 0;\n    margin-inline: calc(-1 * var(--menu-horizontal-gap) / 2);\n  }\n\n  .overflow-menu {\n    background-color: transparent;\n    padding: var(--focus-outline-size);\n    margin: calc(-1 * var(--focus-outline-size));\n  }\n\n  /** mega menu **/\n  .menu-list__submenu,\n  .overflow-menu::part(overflow) {\n    --submenu-padding-block-start: var(--padding-3xl);\n    --submenu-padding-block-end: var(--padding-3xl);\n\n    background-color: transparent;\n  }\n\n  .header__row[style*='--border-bottom-width: 0px'] {\n    .menu-list__submenu.color-scheme-matches-parent,\n    .overflow-menu.color-scheme-matches-parent::part(overflow) {\n      --submenu-padding-block-start: 0px;\n    }\n  }\n\n  .menu-list__list-item:where(:not([slot='overflow'])) > .menu-list__submenu,\n  .overflow-menu::part(overflow) {\n    --submenu-content-opacity: 0;\n    --submenu-content-animation: opacity calc(var(--submenu-animation-speed) * 0.75) var(--animation-easing);\n\n    visibility: hidden;\n    position: absolute;\n    width: 100%;\n    left: 0;\n    top: calc(100% - 1px + var(--border-bottom-width) - (var(--full-open-header-height) - var(--submenu-height)));\n    z-index: var(--layer-header-menu);\n    padding-inline: var(--padding-inline);\n    /* Clip path starts at header height so it doesn't mess with the pointer events in the header */\n    clip-path: rect(var(--header-height) 100% var(--full-open-header-height) 0); /* stylelint-disable-line */\n    transition: clip-path var(--submenu-animation-speed) var(--ease-out-cubic); /* stylelint-disable-line */\n  }\n\n  [data-submenu-overlap-bottom-row] {\n    .menu-list__list-item:where(:not([slot='overflow'])) > .menu-list__submenu,\n    .overflow-menu::part(overflow) {\n      clip-path: rect(var(--top-row-height) 100% var(--full-open-header-height) 0); /* stylelint-disable-line */\n    }\n  }\n\n  /* Show the submenus on hover */\n  .menu-list__list-item:has([aria-expanded='true']) > .menu-list__submenu,\n  /* Show the overflow menu when a menu item is hovered */\n  .overflow-menu:has([slot=\"overflow\"] [aria-expanded='true'])::part(overflow-list),\n  /* Keep the submenus open when they are hovered */\n  .menu-list__submenu:is(:hover),\n  .overflow-menu::part(overflow):hover {\n    --submenu-content-opacity: 1;\n\n    visibility: visible;\n  }\n\n  .overflow-menu::part(overflow) {\n    --menu-top-level-font-size: var(--font-size--xlarge);\n\n    display: grid;\n    grid-template-columns: var(--full-page-grid-with-margins);\n  }\n\n  .overflow-menu::part(overflow-list) {\n    position: relative;\n    display: grid;\n    grid-template-columns: minmax(auto, 200px) 1fr;\n    grid-template-areas: 'left right';\n    grid-template-rows: max-content;\n    grid-gap: 0;\n    grid-column: 2;\n  }\n\n  .menu-list__list-item:is([slot='overflow']) {\n    --menu-top-level-font-color: var(--color-foreground);\n    --menu-top-level-font-color-rgb: var(--color-foreground-rgb);\n\n    display: contents;\n    white-space: normal;\n\n    .menu-list__link {\n      grid-area: left;\n      grid-row: auto;\n      height: min-content;\n      font-size: var(--font-size--xl);\n      transition: var(--submenu-content-animation);\n    }\n\n    .menu-list__submenu {\n      visibility: hidden;\n      grid-row: 1;\n      grid-area: right;\n      grid-row-end: span calc(var(--overflow-count) + 1);\n      padding-inline-start: var(--menu-horizontal-gap);\n    }\n\n    .menu-list__submenu-inner {\n      transform: none;\n      grid-column: unset;\n      padding-block: 0;\n    }\n\n    .menu-list__link[aria-expanded='true'] + .menu-list__submenu {\n      visibility: visible;\n    }\n  }\n\n  .header-menu {\n    height: 100%;\n  }\n\n  .menu-list__submenu-inner {\n    position: relative;\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n  }\n\n  .menu-list__submenu-inner,\n  .overflow-menu::part(overflow-list) {\n    padding-block-start: var(--submenu-padding-block-start);\n    padding-block-end: var(--submenu-padding-block-end);\n    padding-inline: var(--section-padding-inline);\n    opacity: var(--submenu-content-opacity);\n    transition: var(--submenu-content-animation);\n    transform: translateY(calc(var(--full-open-header-height) - var(--submenu-height)));\n\n    /* Make overflow menu scrollable when content exceeds viewport */\n    max-height: calc(80vh - var(--header-height));\n    overflow-y: auto;\n    overflow-x: hidden;\n    scrollbar-width: thin;\n    scrollbar-color: rgb(var(--color-foreground-rgb) / var(--opacity-40)) transparent;\n  }\n\n  .mega-menu__link {\n    font-family: var(--menu-child-font-family);\n    font-style: var(--menu-child-font-style);\n    font-weight: var(--menu-child-font-weight);\n    font-size: var(--menu-child-font-size);\n    line-height: var(--menu-child-font-line-height);\n    text-transform: var(--menu-child-font-case);\n    color: var(--menu-child-font-color);\n    white-space: normal;\n    text-decoration: none;\n    display: inline-flex;\n    padding: var(--padding-2xs) 0;\n\n    &:hover {\n      color: var(--menu-child-active-font-color);\n    }\n  }\n\n  .mega-menu__link--parent {\n    font-family: var(--menu-parent-font-family);\n    font-style: var(--menu-parent-font-style);\n    font-weight: var(--menu-parent-font-weight);\n    font-size: var(--menu-parent-font-size);\n    line-height: var(--menu-parent-font-line-height);\n    text-transform: var(--menu-parent-font-case);\n    color: var(--menu-parent-font-color);\n\n    &:hover {\n      color: var(--menu-parent-active-font-color);\n    }\n  }\n\n  @media screen and (max-width: 989px) {\n    .mega-menu__content-list-item--hidden-tablet {\n      display: none;\n    }\n  }\n\n  .mega-menu__link:has(.mega-menu__link-image) {\n    display: flex;\n    flex-direction: column;\n    padding-inline: 0;\n    padding-block: var(--padding-sm) 0;\n  }\n\n  .mega-menu__link-image {\n    width: 100%;\n    position: relative;\n    aspect-ratio: 16 / 9;\n    margin-bottom: var(--padding-sm);\n    object-fit: cover;\n    border-radius: var(--menu-image-border-radius);\n  }\n\n  /* Fix alignment for collection image mode links without images */\n\n  /* Target only top-level links (direct children of column > div) in collection image mode */\n  .mega-menu__grid:has(.mega-menu__link-image)\n    .mega-menu__column\n    > div\n    > .mega-menu__link:not(:has(.mega-menu__link-image)) {\n    display: flex;\n    flex-direction: column;\n    padding-inline: 0;\n    padding-block: var(--padding-sm) 0;\n  }\n\n  .mega-menu__grid:has(.mega-menu__link-image)\n    .mega-menu__column\n    > div\n    > .mega-menu__link:not(:has(.mega-menu__link-image))::before {\n    content: '';\n    display: block;\n    width: 100%;\n    aspect-ratio: 16 / 9;\n    margin-bottom: var(--padding-sm);\n    background-color: var(--color-foreground-muted);\n    opacity: 0.1;\n    border-radius: var(--menu-image-border-radius);\n  }\n\n  .mega-menu__grid {\n    display: grid;\n    grid-template-columns: repeat(var(--menu-columns-tablet), minmax(0, 1fr));\n    gap: var(--menu-vertical-gap) var(--menu-horizontal-gap);\n    width: 100%;\n\n    @media screen and (min-width: 990px) {\n      grid-template-columns: repeat(var(--menu-columns-desktop), minmax(0, 1fr));\n    }\n  }\n\n  .mega-menu__column {\n    grid-column: span 1;\n  }\n\n  .mega-menu__column--span-2 {\n    grid-column: span 2;\n  }\n\n  .mega-menu__column--span-3 {\n    grid-column: span 3;\n  }\n\n  .mega-menu__column--span-4 {\n    grid-column: span 4;\n  }\n\n  .mega-menu__column--wide-collection-image {\n    grid-column: span 1;\n\n    @media screen and (min-width: 990px) {\n      grid-column: span 2;\n    }\n  }\n\n  .mega-menu__submenu .mega-menu__column--wide-collection-image {\n    grid-column: span 1;\n  }\n\n  .mega-menu__content-list {\n    display: grid;\n    justify-content: end;\n    gap: var(--menu-vertical-gap) var(--menu-horizontal-gap);\n  }\n\n  .mega-menu__content-list--products {\n    grid-template-columns: repeat(var(--menu-content-columns-tablet), minmax(0, 1fr));\n\n    @media screen and (min-width: 990px) {\n      grid-template-columns: repeat(var(--menu-content-columns-desktop), minmax(0, 1fr));\n    }\n  }\n\n  .mega-menu__content-list--collections {\n    grid-template-columns: repeat(var(--menu-content-columns-tablet), minmax(0, 300px));\n\n    @media screen and (min-width: 990px) {\n      grid-template-columns: repeat(var(--menu-content-columns-desktop), minmax(0, 300px));\n    }\n  }\n\n  .mega-menu__list {\n    display: grid;\n    grid-template-columns: subgrid;\n    grid-column: span var(--menu-columns-tablet);\n    gap: var(--menu-vertical-gap) var(--menu-horizontal-gap);\n\n    @media screen and (min-width: 990px) {\n      grid-column: span var(--menu-columns-desktop);\n    }\n  }\n\n  .mega-menu__content {\n    grid-column: span var(--menu-content-columns-tablet) / -1;\n\n    @media screen and (min-width: 990px) {\n      grid-column: span var(--menu-content-columns-desktop) / -1;\n    }\n  }\n\n  .menu-list__list-item[slot='overflow'] .section {\n    grid-template-columns: 1fr;\n  }\n\n  .menu-list__list-item[slot='overflow'] .section .mega-menu__grid {\n    grid-column: 1;\n  }\n\n  .mega-menu__content-list li {\n    white-space: normal;\n  }\n\n  /* mega more menu */\n  .mega-menu__more-list {\n    --menu-child-font-size: var(--font-size--xl);\n\n    width: 200px;\n  }\n\n  .mega-menu__submenu {\n    /* preserves the inherited grid layout when this submenu wrapper is used */\n    display: contents;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.menu\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"link_list\",\n      \"id\": \"menu\",\n      \"label\": \"t:settings.menu\",\n      \"default\": \"main-menu\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"primary\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_font_primary_size\",\n      \"label\": \"t:settings.top_level_size\",\n      \"options\": [\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        }\n      ],\n      \"default\": \"1rem\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"menu_font_style\",\n      \"label\": \"t:settings.submenu_size\",\n      \"options\": [\n        {\n          \"value\": \"regular\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"inverse\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"inverse_large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"inverse\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_font_primary_link\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"heading\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_case_primary_link\",\n      \"label\": \"t:settings.text_case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.submenu_feature\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"menu_style\",\n      \"label\": \"t:settings.media_type\",\n      \"info\": \"t:info.media_type_info\",\n      \"options\": [\n        {\n          \"value\": \"text\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"collection_images\",\n          \"label\": \"t:options.collection_images\"\n        },\n        {\n          \"value\": \"featured_products\",\n          \"label\": \"t:options.featured_products\"\n        },\n        {\n          \"value\": \"featured_collections\",\n          \"label\": \"t:options.featured_collections\"\n        }\n      ],\n      \"default\": \"collection_images\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"featured_products_aspect_ratio\",\n      \"label\": \"t:settings.image_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"4 / 5\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"1 / 1\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"4 / 5\",\n      \"visible_if\": \"{{ block.settings.menu_style == 'featured_products' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"featured_collections_aspect_ratio\",\n      \"label\": \"t:settings.image_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"16 / 9\",\n          \"label\": \"t:options.landscape\"\n        },\n        {\n          \"value\": \"1 / 1\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"16 / 9\",\n      \"visible_if\": \"{{ block.settings.menu_style == 'featured_collections' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"image_border_radius\",\n      \"label\": \"t:settings.image_border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.menu_style != 'text' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_layout\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"navigation_bar\",\n      \"label\": \"t:settings.navigation_bar\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme_navigation_bar\",\n      \"label\": \"t:settings.navigation_bar_color_scheme\",\n      \"default\": \"primary\",\n      \"visible_if\": \"{{ block.settings.navigation_bar }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"drawer_accordion\",\n      \"label\": \"t:settings.accordion\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"drawer_accordion_expand_first\",\n      \"label\": \"t:settings.expand_first_group\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.drawer_accordion == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"drawer_dividers\",\n      \"label\": \"t:settings.dividers\",\n      \"default\": false\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_heading.liquid",
    "content": "{%- doc -%}\n  Renders a heading block.\n\n  @param {string} text\n{%- enddoc -%}\n\n{% render 'text', width: '100%', block: block, fallback_text: text %}\n\n{% # theme-check-disable %}\n{% schema %}\n{\n  \"name\": \"t:names.heading\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\",\n      \"visible_if\": \"{{ block.settings.read_only != true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"read_only\",\n      \"label\": \"t:settings.read_only\",\n      \"visible_if\": \"{{ false }}\",\n      \"default\": false\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.show_alignment != false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_alignment\",\n      \"label\": \"t:settings.show_alignment\",\n      \"default\": true,\n      \"visible_if\": \"{{ false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n{% # theme-check-enable %}\n"
  },
  {
    "path": "blocks/_hotspot-product.liquid",
    "content": "{% liquid\n  assign hotspot_product = closest.product\n\n  assign placeholder_product_title = 'placeholders.product_title' | t\n  assign hotspot_product_title = hotspot_product.title | default: placeholder_product_title\n%}\n\n<product-hotspot-component\n  class=\"hotspot{% if hotspot_product == blank and request.design_mode == false %} hotspot--hidden-touch hidden--mobile{% endif %}\"\n  style=\"\n    left: calc({{ block.settings.x-position }}% - var(--button-size) / 2);\n    top: calc({{ block.settings.y-position }}% - var(--button-size) / 2);\n    --hotspot-bg: {{ section.settings.hotspot_color }};\n    --hotspot-bullseye: {{ section.settings.bullseye_color }};\n  \"\n  data-product-url=\"{{ block.settings.product.url }}\"\n  data-product-title=\"{{ block.settings.product.title | escape }}\"\n  data-id=\"{{ block.id }}\"\n  {{ block.shopify_attributes }}\n>\n  <button\n    class=\"hotspot-trigger\"\n    aria-label=\"{{ 'accessibility.open_hotspot' | t }}\"\n    ref=\"trigger\"\n    on:click=\"/handleHotspotClick\"\n    style=\"anchor-name: --hotspot-trigger-{{ block.id }};\"\n  ></button>\n  <dialog\n    class=\"hotspot-dialog\"\n    ref=\"dialog\"\n  >\n    {% if hotspot_product != blank %}\n      <a\n        href=\"{{ hotspot_product.url }}\"\n        class=\"hotspot-dialog__link\"\n        aria-label=\"{{ hotspot_product.title | escape }}\"\n        ref=\"productLink\"\n      >\n      </a>\n    {% endif %}\n    <div class=\"hotspot-dialog__product\">\n      {% if hotspot_product.featured_image != blank %}\n        {% render 'image', image: hotspot_product.featured_image, class: 'hotspot-dialog__product-image' %}\n      {% else %}\n        {{ 'product-apparel-1' | placeholder_svg_tag: 'hotspot-dialog__placeholder-product-image' }}\n      {% endif %}\n      <div class=\"hotspot-dialog__product-content\">\n        <div class=\"hotspot-dialog__product-info\">\n          <h2\n            class=\"hotspot-dialog__product-title {{ section.settings.product_title_preset | default: 'h5' }}\"\n          >\n            {{ hotspot_product_title }}\n          </h2>\n          <div\n            class=\"hotspot-dialog__product-price {{ section.settings.product_price_preset | default: 'h6' }}\"\n          >\n            {% render 'price', product_resource: hotspot_product, block: block %}\n          </div>\n        </div>\n        {% if hotspot_product != blank %}\n          {% if hotspot_product.available %}\n            {% render 'quick-add',\n              product: hotspot_product,\n              section_id: section.id,\n              block: block,\n              color_scheme: section.settings.color_scheme\n            %}\n          {% else %}\n            <div class=\"hotspot-dialog__sold-out-badge\">\n              {{ 'content.product_badge_sold_out' | t }}\n            </div>\n          {% endif %}\n        {% endif %}\n      </div>\n    </div>\n  </dialog>\n</product-hotspot-component>\n\n{% schema %}\n{\n  \"name\": \"t:names.hotspot_product\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"x-position\",\n      \"label\": \"t:settings.x_position\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 50\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"y-position\",\n      \"label\": \"t:settings.y_position\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 50\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.hotspot_product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_image.liquid",
    "content": "{%- doc -%}\n  Renders an image block.\n\n  @param {string} [loading] - The html loading attribute\n  @param {string} [placeholder] - The placeholder image name to use when no image is provided, defaults to 'hero-apparel-2'\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n{% assign image = closest.collection.featured_image | default: closest.product.featured_image %}\n{% assign alt = closest.collection.title | default: closest.product.title %}\n\n{% liquid\n  assign width = '100%'\n  assign media_width_desktop = '100vw'\n  assign media_width_mobile = '100vw'\n  assign sizes = 'auto, (min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n  assign widths = '240, 352, 832, 1200, 1600, 1920, 2560'\n%}\n\n{% if image %}\n  <image-block\n    ratio=\"{{ block_settings.ratio }}\"\n    height=\"{{ block_settings.height }}\"\n    style=\"--border-radius: {{ block_settings.border_radius }}px;\"\n    {{ block.shopify_attributes }}\n  >\n    {{\n      image\n      | image_url: width: 2560\n      | image_tag: width: width, widths: widths, sizes: sizes, loading: loading, alt: alt\n    }}\n  </image-block>\n{% else %}\n  <image-block\n    ratio=\"{{ block_settings.ratio }}\"\n    height=\"{{ block_settings.height }}\"\n    style=\"--border-radius: {{ block_settings.border_radius }}px;\"\n    {{ block.shopify_attributes }}\n  >\n    {{ placeholder | default: 'hero-apparel-2' | placeholder_svg_tag: 'hero__media' }}\n  </image-block>\n{% endif %}\n\n{% stylesheet %}\n  image-block {\n    --image-height-basis: 10rem;\n    --image-height-small: calc(var(--image-height-basis) * 2);\n    --image-height-medium: calc(var(--image-height-basis) * 3);\n    --image-height-large: calc(var(--image-height-basis) * 4);\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    aspect-ratio: var(--ratio);\n    width: 100%;\n    max-width: calc(var(--image-height) * var(--ratio));\n    height: var(--image-height);\n    overflow: hidden;\n\n    @media screen and (min-width: 750px) {\n      --image-height-small: calc(var(--image-height-basis) * 2.5);\n      --image-height-medium: calc(var(--image-height-basis) * 3.5);\n      --image-height-large: calc(var(--image-height-basis) * 4.5);\n    }\n\n    @media screen and (max-width: 749px) {\n      height: auto;\n    }\n\n    &[height='small'] {\n      --image-height: var(--image-height-small);\n    }\n\n    &[height='medium'] {\n      --image-height: var(--image-height-medium);\n    }\n\n    &[height='large'] {\n      --image-height: var(--image-height-large);\n    }\n\n    &[ratio='portrait'] {\n      --ratio: 4 / 5;\n    }\n\n    &[ratio='square'] {\n      --ratio: 1 / 1;\n\n      @media screen and (min-width: 750px) {\n        max-width: var(--image-height);\n      }\n    }\n\n    &[ratio='landscape'] {\n      --ratio: 16 / 9;\n    }\n\n    img {\n      object-fit: cover;\n      width: 100%;\n      height: auto;\n      aspect-ratio: var(--ratio);\n      border-radius: var(--border-radius);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_card_image\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"large\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"ratio\",\n      \"label\": \"t:settings.ratio\",\n      \"options\": [\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"portrait\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_inline-collection-title.liquid",
    "content": "{%- doc -%}\n  @param {string} [suffix] - The suffix to add to the collection title\n{%- enddoc -%}\n\n{%- assign block_settings = block.settings -%}\n{% if closest.collection == blank %}\n  {% assign collection_title = 'placeholders.collection_title' | t %}\n{% elsif closest.collection != blank %}\n  {% assign collection_title = closest.collection.title %}\n{% endif %}\n\n{% assign plain_text = collection_title | strip_newlines | strip_html | strip %}\n\n{% # We need to make sure the wrapper is rendered even if the text element is empty in the theme editor to allow live text editing %}\n{%- if plain_text != '' or request.design_mode -%}\n  <span\n    class=\"\n      text-block\n      custom-typography\n      {% if block_settings.weight != blank %}custom-font-weight{% endif %}\n      {% if block_settings.font_size != blank %}custom-font-size{% endif %}\n    \"\n    style=\"{% render 'typography-style', preset: 'custom', settings: block_settings, type: 'heading' %}\"\n    {{ block.shopify_attributes }}\n  >\n    <span>{{ collection_title }}</span>{{ suffix }}\n  </span>\n{%- endif -%}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_title\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_title\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"weight\",\n      \"label\": \"t:settings.weight\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"100\",\n          \"label\": \"t:options.thin\"\n        },\n        {\n          \"value\": \"300\",\n          \"label\": \"t:options.light\"\n        },\n        {\n          \"value\": \"400\",\n          \"label\": \"t:options.regular\"\n        },\n        {\n          \"value\": \"500\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"600\",\n          \"label\": \"t:options.semibold\"\n        },\n        {\n          \"value\": \"700\",\n          \"label\": \"t:options.bold\"\n        },\n        {\n          \"value\": \"900\",\n          \"label\": \"t:options.black\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_inline-text.liquid",
    "content": "{%- doc -%}\n  Renders an inline text block.\n\n  @param {string} suffix\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n{% assign plain_text = block_settings.text | strip_newlines | strip_html | strip %}\n\n{% # We need to make sure the wrapper is rendered even if the text element is empty in the theme editor to allow live text editing %}\n{%- if plain_text != '' or request.design_mode -%}\n  <span\n    class=\"\n      text-block\n      custom-typography\n      {% if block_settings.weight != blank %}custom-font-weight{% endif %}\n      {% if block_settings.font_size != blank %}custom-font-size{% endif %}\n    \"\n    style=\"{% render 'typography-style', preset: 'custom', settings: block_settings, type: 'heading' %}\"\n    {{ block.shopify_attributes }}\n  >\n    <span>{{ block.settings.text }}</span>{{ suffix }}\n  </span>\n{%- endif -%}\n\n{% schema %}\n{\n  \"name\": \"t:names.text\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"weight\",\n      \"label\": \"t:settings.weight\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"100\",\n          \"label\": \"t:options.thin\"\n        },\n        {\n          \"value\": \"300\",\n          \"label\": \"t:options.light\"\n        },\n        {\n          \"value\": \"400\",\n          \"label\": \"t:options.regular\"\n        },\n        {\n          \"value\": \"500\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"600\",\n          \"label\": \"t:options.semibold\"\n        },\n        {\n          \"value\": \"700\",\n          \"label\": \"t:options.bold\"\n        },\n        {\n          \"value\": \"900\",\n          \"label\": \"t:options.black\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_layered-slide.liquid",
    "content": "{%- assign block_index = section.blocks | find_index: 'id', block.id -%}\n\n{%- liquid\n  assign preview_image = block.settings.image_1\n  if block.settings.media_type_1 == 'video'\n    assign preview_image = block.settings.video_1.preview_image\n  endif\n-%}\n\n<div\n  role=\"tabpanel\"\n  ref=\"panels[]\"\n  id=\"Panel-{{ block.id }}-{{ section.id }}\"\n  aria-labelledby=\"Tab-{{ block.id }}-{{ section.id }}\"\n  tabindex=\"0\"\n  class=\"layered-slideshow__panel {% if section.settings.drop_shadow %}layered-slideshow__panel--drop-shadow{% endif %}\"\n  style=\"--index: {{ block_index }}\"\n  {% if block_index > 0 %}\n    inert\n  {% endif %}\n  {{ block.shopify_attributes }}\n>\n  <div class=\"layered-slideshow__panel-content\">\n    {%- if block.settings.toggle_overlay -%}\n      {% render 'overlay', settings: block.settings %}\n    {%- endif -%}\n    {%- if preview_image -%}\n      {%- liquid\n        assign height = preview_image.width | divided_by: preview_image.aspect_ratio | round\n        assign sizes = '100vw'\n        assign widths = '832, 1200, 1600, 1920, 2560, 3840'\n        assign loading = 'lazy'\n      -%}\n\n      {%- if block.settings.media_type_1 == 'image' -%}\n        {{\n          block.settings.image_1\n          | image_url: width: 3840\n          | image_tag: height: height, sizes: sizes, widths: widths, class: 'layered-slideshow__image', loading: loading\n        }}\n      {%- else -%}\n        {%- if block.settings.video_1.preview_image -%}\n          {{\n            block.settings.video_1.preview_image\n            | image_url: width: 3840\n            | image_tag:\n              height: height,\n              sizes: sizes,\n              widths: widths,\n              loading: loading,\n              class: 'layered-slideshow__video-poster'\n          }}\n        {%- endif -%}\n        {{\n          block.settings.video_1\n          | video_tag:\n            poster: null,\n            autoplay: false,\n            loop: true,\n            controls: false,\n            muted: true,\n            class: 'layered-slideshow__video'\n        }}\n      {%- endif -%}\n    {%- else -%}\n      {%- liquid\n        assign modulo_result = block_index | modulo: 2\n        assign placeholder_variant = 2 | minus: modulo_result\n        assign placeholder_name = 'hero-apparel-' | append: placeholder_variant\n      -%}\n      {{ placeholder_name | placeholder_svg_tag: 'layered-slideshow__image' }}\n    {%- endif -%}\n    <div\n      class=\"layered-slideshow__content spacing-style{% unless block.settings.inherit_color_scheme %} color-{{ block.settings.color_scheme }}{% endunless %} background-transparent\"\n      style=\"{% render 'spacing-style', settings: block.settings %}\"\n    >\n      <div\n        class=\"group-block-content layout-panel-flex layout-panel-flex--{{ block.settings.content_direction }}{% if block.settings.vertical_on_mobile %} mobile-column{% endif %}\"\n        style=\"{% render 'layout-panel-style', settings: block.settings %}\"\n      >\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.slide\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"_heading\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"jumbo-text\"\n    },\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_1\",\n      \"label\": \"t:settings.media_type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_1\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.media_type_1 == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_1\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.media_type_1 == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.content_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-6\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.slide\",\n      \"category\": \"t:categories.layout\",\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.new_arrivals_h2\",\n            \"type_preset\": \"h2\"\n          }\n        },\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.latest_products\"\n          }\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.shop_now_button_label\",\n            \"link\": \"shopify://collections/all\"\n          }\n        }\n      },\n      \"block_order\": [\"heading\", \"text\", \"button\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_marquee.liquid",
    "content": "<script\n  src=\"{{ 'marquee.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% assign block_settings = block.settings %}\n{% assign gap_between_elements = block_settings.gap_between_elements %}\n\n<marquee-component\n  class=\"\n    spacing-style\n    gap-style\n    {% if block_settings.inherit_color_scheme == false %}color-{{ block_settings.color_scheme }}{% endif %}\n  \"\n  style=\"\n    {%- render 'spacing-style', settings: block_settings %};\n    {% render 'gap-style', value: gap_between_elements, name: 'marquee-gap' %}\n    --marquee-direction: {{ block_settings.movement_direction }};\n    {%- if block_settings.transparent_background == true -%}background-color: transparent;{%- endif -%}\n  \"\n  data-speed-factor=\"25\"\n  data-movement-direction=\"{{ block_settings.movement_direction }}\"\n>\n  <div\n    class=\"marquee__wrapper\"\n    ref=\"wrapper\"\n  >\n    <div\n      class=\"marquee__content\"\n      ref=\"content\"\n    >\n      <div\n        class=\"marquee__repeated-items\"\n        ref=\"marqueeItems[]\"\n      >\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </div>\n</marquee-component>\n\n{% stylesheet %}\n  marquee-component {\n    display: block;\n    width: 100%;\n    overflow: hidden;\n    background-color: var(--color-background);\n  }\n\n  .marquee__wrapper {\n    display: flex;\n    gap: var(--marquee-gap);\n    width: fit-content;\n    white-space: nowrap;\n  }\n\n  .marquee__content {\n    min-width: max-content;\n    display: flex;\n    gap: var(--marquee-gap);\n  }\n\n  .marquee__content :is(p, h1, h2, h3, h4, h5, h6) {\n    white-space: nowrap;\n  }\n\n  .marquee__content .marquee__repeated-items * {\n    max-width: none;\n  }\n\n  .marquee__repeated-items {\n    min-width: max-content;\n    display: flex;\n    gap: var(--marquee-gap);\n    align-items: center;\n    justify-content: center;\n  }\n\n  .marquee__repeated-items > * {\n    align-content: center;\n  }\n\n  .hero__content-wrapper.layout-panel-flex--column marquee-component {\n    --margin-inline: var(--full-page-margin-inline-offset);\n\n    width: -webkit-fill-available;\n    min-height: max-content;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    marquee-component:not([data-disabled]) .marquee__wrapper {\n      animation: marquee-motion var(--marquee-speed) linear infinite var(--marquee-direction);\n    }\n  }\n\n  @keyframes marquee-motion {\n    to {\n      transform: translate3d(calc(-50% - (var(--marquee-gap) / 2)), 0, 0);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.marquee\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"movement_direction\",\n      \"label\": \"t:settings.motion_direction\",\n      \"options\": [\n        {\n          \"value\": \"reverse\",\n          \"label\": \"t:options.forward\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.reverse\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"transparent_background\",\n      \"label\": \"t:settings.transparent_background\",\n      \"default\": true\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap_between_elements\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.marquee\",\n      \"category\": \"t:categories.decorative\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.make_things_better\",\n            \"type_preset\": \"custom\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"var(--font-size--h2)\",\n            \"line_height\": \"tight\",\n            \"letter_spacing\": \"tight\",\n            \"case\": \"none\",\n            \"wrap\": \"nowrap\",\n            \"width\": \"fit-content\"\n          }\n        }\n      },\n      \"block_order\": [\"text\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_media-without-appearance.liquid",
    "content": "{% liquid\n  assign unset_image_tag = false\n  if block.settings.image_position == 'contain'\n    assign unset_image_tag = true\n  endif\n%}\n\n{% render 'media', unset_image_tag: unset_image_tag, section_id: section.id %}\n\n{% schema %}\n{\n  \"name\": \"t:names.media\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.media_type == 'image' }}\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\",\n      \"visible_if\": \"{{ block.settings.media_type == 'image'  }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_loop\",\n      \"label\": \"t:settings.loop\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_autoplay\",\n      \"label\": \"t:settings.autoplay\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain \",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.media_type == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.media\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_media.liquid",
    "content": "{% render 'media', section_id: section.id %}\n\n{% schema %}\n{\n  \"name\": \"t:names.media\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.media_type == 'image' }}\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\",\n      \"visible_if\": \"{{ block.settings.media_type == 'image'  }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_loop\",\n      \"label\": \"t:settings.loop\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_autoplay\",\n      \"label\": \"t:settings.autoplay\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.media_type == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.media\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-card-gallery.liquid",
    "content": "{% assign product = closest.product %}\n\n{% capture children %}\n  {% unless product == blank %}\n    <div\n      class=\"product-badges product-badges--{{ settings.badge_position }}\"\n      style=\"\n        --badge-border-radius: {{ settings.badge_corner_radius }}px;\n        --badge-font-family: var(--font-{{ settings.badge_font_family }}--family); --badge-font-weight: var(--font-{{ settings.badge_font_family }}--weight); --badge-text-transform: {{ settings.badge_text_transform }};\n      \"\n    >\n      {%- if product.available == false or product.compare_at_price > product.price -%}\n        <div\n          class=\"\n            product-badges__badge product-badges__badge--rectangle\n            {% if product.available == false %} color-{{ settings.badge_sold_out_color_scheme }}{% elsif product.compare_at_price > product.price %} color-{{ settings.badge_sale_color_scheme }}{% endif %}\n          \"\n        >\n          {%- if product.available == false -%}\n            {{ 'content.product_badge_sold_out' | t }}\n          {%- elsif product.compare_at_price > product.price -%}\n            {{ 'content.product_badge_sale' | t }}\n          {%- endif -%}\n        </div>\n      {%- endif -%}\n    </div>\n    {%  if settings.quick_add or settings.mobile_quick_add %}\n      {% render 'quick-add', product: product, section_id: section.id %}\n    {% endif %}\n  {% endunless %}\n{% endcapture %}\n\n{% render 'card-gallery', children: children %}\n\n{% # Title and price for the zoomed out grid view %}\n<div class=\"product-grid-view-zoom-out--details\">\n  {% if product == blank %}\n    <h3 class=\"h4\">{{ 'content.product_card_placeholder' | t }}</h3>\n  {% else %}\n    <h3 class=\"h4\">{{ product.title }}</h3>\n  {% endif %}\n</div>\n\n{% stylesheet %}\n  .product-badges {\n    --badge-inset: max(var(--padding-xs), calc((var(--border-radius) + var(--padding-xs)) * (1 - cos(45deg))));\n\n    position: absolute;\n    z-index: var(--layer-flat);\n  }\n\n  .product-badges--bottom-left {\n    bottom: calc(var(--badge-inset) + var(--padding-block-start));\n    left: calc(var(--badge-inset) + var(--padding-inline-start));\n  }\n\n  .product-badges--top-left {\n    top: calc(var(--badge-inset) + var(--padding-block-start));\n    left: calc(var(--badge-inset) + var(--padding-inline-start));\n  }\n\n  .product-badges--top-right {\n    top: calc(var(--badge-inset) + var(--padding-block-start));\n    right: calc(var(--badge-inset) + var(--padding-inline-start));\n  }\n\n  .product-badges__badge {\n    --badge-font-size: var(--font-size--xs);\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    color: var(--color-foreground);\n    background: var(--color-background);\n    font-size: var(--badge-font-size);\n    font-family: var(--badge-font-family);\n    font-weight: var(--badge-font-weight);\n    text-transform: var(--badge-text-transform);\n    border-radius: var(--badge-border-radius);\n  }\n\n  .product-badges__badge--rectangle {\n    padding-block: var(--badge-rectangle-padding-block);\n    padding-inline: var(--badge-rectangle-padding-inline);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_media\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"portrait\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"info\": \"t:info.aspect_ratio_adjusted\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_card_media\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-card-group.liquid",
    "content": "{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}\n\n{% schema %}\n{\n  \"name\": \"t:names.group\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"price\"\n    },\n    {\n      \"type\": \"review\"\n    },\n    {\n      \"type\": \"sku\"\n    },\n    {\n      \"type\": \"swatches\"\n    },\n    {\n      \"type\": \"_product-card-group\"\n    },\n    {\n      \"type\": \"product-title\"\n    },\n    {\n      \"type\": \"custom-liquid\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_height\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.background_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.block_link\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.group\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-card.liquid",
    "content": "{% liquid\n  assign product = closest.product\n-%}\n\n{% capture children %}\n  {% content_for 'blocks', closest.product: product %}\n{% endcapture %}\n\n{% render 'product-card', children: children, product: product %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_card\",\n  \"blocks\": [\n    {\n      \"type\": \"_product-card-group\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"buy-buttons\"\n    },\n    {\n      \"type\": \"price\"\n    },\n    {\n      \"type\": \"review\"\n    },\n    {\n      \"type\": \"sku\"\n    },\n    {\n      \"type\": \"swatches\"\n    },\n    {\n      \"type\": \"_product-card-gallery\"\n    },\n    {\n      \"type\": \"product-title\"\n    },\n    {\n      \"type\": \"custom-liquid\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_card\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_card_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-details.liquid",
    "content": "{%- assign block_settings = block.settings -%}\n<div\n  id=\"ProductInformation-{{ section.id }}\"\n  class=\"\n    product-details\n    {% if block_settings.sticky_details_desktop %} sticky-content--desktop{% endif %}\n    {% if block_settings.height == 'fill' -%} full-height--desktop{% endif -%}\n  \"\n  style=\"--details-position: {{ block_settings.details_position }};\"\n  data-testid=\"product-information-details\"\n  {% if settings.transition_to_main_product %}\n    data-view-transition-type=\"product-details\"\n  {% endif %}\n>\n  {% capture children %}\n    <div class=\"view-product-title\">\n      <a\n        href=\"{{ closest.product.selected_or_first_available_variant.url }}\"\n        class=\"link\"\n      >\n        {{- closest.product.title }}\n      </a>\n    </div>\n    {% content_for 'blocks' %}\n  {% endcapture %}\n\n  {% render 'group', children: children, settings: block_settings, shopify_attributes: block.shopify_attributes %}\n</div>\n\n{% stylesheet %}\n  /* Clear padding on mobile, if not full-width */\n  @media screen and (max-width: 749px) {\n    .product-information.section--page-width .product-details > .group-block {\n      padding-inline: 0;\n    }\n  }\n\n  .view-product-title {\n    display: none;\n  }\n\n  /* Container styles */\n  .product-details {\n    display: flex;\n    align-self: start;\n    justify-content: center;\n  }\n\n  @media screen and (min-width: 750px) {\n    .product-details > .group-block {\n      height: min-content;\n    }\n\n    .full-height--desktop {\n      height: 100%;\n      max-height: calc(100vh - var(--header-group-height, 0));\n      min-height: fit-content;\n    }\n\n    .full-height--desktop .group-block {\n      align-self: var(--details-position, 'flex-start');\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.details\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"accordion\"\n    },\n    {\n      \"type\": \"product-recommendations\"\n    },\n    {\n      \"type\": \"price\"\n    },\n    {\n      \"type\": \"variant-picker\"\n    },\n    {\n      \"type\": \"buy-buttons\"\n    },\n    {\n      \"type\": \"product-description\"\n    },\n    {\n      \"type\": \"review\"\n    },\n    {\n      \"type\": \"accelerated-checkout\"\n    },\n    {\n      \"type\": \"_divider\"\n    },\n    {\n      \"type\": \"product-inventory\"\n    },\n    {\n      \"type\": \"product-custom-property\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"details_position\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.height == \\\"fill\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"sticky_details_desktop\",\n      \"label\": \"t:settings.make_details_sticky_desktop\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.details\",\n      \"settings\": {\n        \"width\": \"custom\",\n        \"custom_width\": 100,\n        \"padding-block-start\": 0,\n        \"padding-block-end\": 0,\n        \"padding-inline-start\": 0,\n        \"padding-inline-end\": 0,\n        \"gap\": 12,\n        \"inherit_color_scheme\": true,\n        \"color_scheme\": \"\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100\n      },\n      \"blocks\": {\n        \"text_TMtYp8\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.home_to_shirts\",\n            \"alignment\": \"left\",\n            \"padding-block-start\": 16,\n            \"padding-inline-end\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0\n          }\n        },\n        \"heading_m7KmQQ\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"<h1>{{ closest.product.title }}</h1>\",\n            \"type_preset\": \"h2\",\n            \"alignment\": \"left\"\n          }\n        },\n        \"text_GMQR8L\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.reviews\",\n            \"alignment\": \"left\"\n          }\n        },\n        \"price_a7krng\": {\n          \"type\": \"price\",\n          \"settings\": {\n            \"show_tax_info\": true,\n            \"type_preset\": \"h4\",\n            \"alignment\": \"left\"\n          }\n        },\n        \"variant_picker_R3rGDr\": {\n          \"type\": \"variant-picker\",\n          \"settings\": {\n            \"variant_style\": \"pills\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 8,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"buy_buttons_eYQEYi\": {\n          \"type\": \"buy-buttons\",\n          \"settings\": {\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"add-to-cart\": {\n              \"type\": \"add-to-cart\",\n              \"static\": true,\n              \"settings\": {\n                \"style_class\": \"button-secondary\"\n              }\n            },\n            \"accelerated-checkout\": {\n              \"type\": \"accelerated-checkout\",\n              \"static\": true\n            }\n          },\n          \"block_order\": []\n        },\n        \"group_Q4eVWb\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 100,\n            \"padding-block-start\": 8,\n            \"padding-block-end\": 4,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0,\n            \"content_direction\": \"column\",\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 8,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100\n          },\n          \"blocks\": {\n            \"group_Hrq6NU\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"width\": \"custom\",\n                \"custom_width\": 100,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0,\n                \"content_direction\": \"row\",\n                \"horizontal_alignment\": \"flex-start\",\n                \"vertical_alignment\": \"center\",\n                \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n                \"vertical_alignment_flex_direction_column\": \"center\",\n                \"gap\": 12,\n                \"inherit_color_scheme\": true,\n                \"color_scheme\": \"\",\n                \"video_position\": \"cover\",\n                \"background_image_position\": \"cover\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100\n              },\n              \"blocks\": {\n                \"icon_bBpnME\": {\n                  \"type\": \"icon\",\n                  \"settings\": {\n                    \"icon\": \"truck\",\n                    \"width\": 16\n                  }\n                },\n                \"text_83R7CQ\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.free_shipping_over\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"icon_bBpnME\", \"text_83R7CQ\"]\n            },\n            \"group_WbpVdV\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"width\": \"custom\",\n                \"custom_width\": 100,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0,\n                \"content_direction\": \"row\",\n                \"horizontal_alignment\": \"flex-start\",\n                \"vertical_alignment\": \"center\",\n                \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n                \"vertical_alignment_flex_direction_column\": \"center\",\n                \"gap\": 12,\n                \"inherit_color_scheme\": true,\n                \"color_scheme\": \"\",\n                \"video_position\": \"cover\",\n                \"background_image_position\": \"cover\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100\n              },\n              \"blocks\": {\n                \"icon_FVd3C4\": {\n                  \"type\": \"icon\",\n                  \"settings\": {\n                    \"icon\": \"return\",\n                    \"width\": 16\n                  }\n                },\n                \"text_EmGGUV\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.free_returns\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"icon_FVd3C4\", \"text_EmGGUV\"]\n            }\n          },\n          \"block_order\": [\"group_Hrq6NU\", \"group_WbpVdV\"]\n        },\n        \"accordion\": {\n          \"type\": \"accordion\",\n          \"settings\": {},\n          \"blocks\": {\n            \"accordion-row-1\": {\n              \"type\": \"_accordion-row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.materials\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\"\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion-row-2\": {\n              \"type\": \"_accordion-row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.care_instructions\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\"\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion-row-3\": {\n              \"type\": \"_accordion-row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.fit\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\"\n                }\n              },\n              \"block_order\": [\"text\"]\n            }\n          },\n          \"block_order\": [\"accordion-row-1\", \"accordion-row-2\", \"accordion-row-3\"]\n        },\n        \"complementary_products\": {\n          \"type\": \"product-recommendations\",\n          \"settings\": {\n            \"recommendation_type\": \"complementary\"\n          },\n          \"blocks\": {\n            \"recommendations-header\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.styled_with\",\n                \"type_preset\": \"h5\"\n              }\n            }\n          },\n          \"block_order\": [\"recommendations-header\"]\n        }\n      },\n      \"block_order\": [\n        \"text_TMtYp8\",\n        \"heading_m7KmQQ\",\n        \"text_GMQR8L\",\n        \"price_a7krng\",\n        \"variant_picker_R3rGDr\",\n        \"buy_buttons_eYQEYi\",\n        \"group_Q4eVWb\",\n        \"accordion\",\n        \"complementary_products\"\n      ]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-list-button.liquid",
    "content": "{% assign button_collection = closest.collection %}\n{% assign button_url = button_collection.url %}\n\n{% if button_collection.products_count > section.settings.max_products %}\n  {% render 'button', link: button_url %}\n{% endif %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_list_button\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.visible_if_collection_has_more_products\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"label\",\n      \"label\": \"t:settings.label\",\n      \"default\": \"t:text_defaults.button_label\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"style_class\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"button\",\n          \"label\": \"t:options.primary\"\n        },\n        {\n          \"value\": \"button-secondary\",\n          \"label\": \"t:options.secondary\"\n        },\n        {\n          \"value\": \"link\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"button\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == \\\"custom\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == \\\"custom\\\" }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_list_button\",\n      \"category\": \"t:categories.collection\",\n      \"settings\": {\n        \"label\": \"t:text_defaults.view_all_button_label\",\n        \"style_class\": \"button-secondary\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-list-content.liquid",
    "content": "{%- capture children -%}\n  {%- content_for 'blocks' -%}\n{%- endcapture -%}\n\n{%- render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes -%}\n\n{% schema %}\n{\n  \"name\": \"t:names.header\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    },\n    {\n      \"type\": \"_product-list-text\"\n    },\n    {\n      \"type\": \"_product-list-button\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_height\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.group\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-list-text.liquid",
    "content": "{% assign placeholder = 'content.featured_products' | t %}\n{% assign placeholder = '<h3>' | append: placeholder | append: '</h3>' %}\n\n{% render 'text', fallback_text: placeholder, block: block %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_title\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_title\",\n      \"category\": \"t:categories.collection\",\n      \"settings\": {\n        \"text\": \"<h3>{{ closest.collection.title }}</h3>\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_product-media-gallery.liquid",
    "content": "{% render 'product-media-gallery-content',\n  media_presentation: block.settings.media_presentation,\n  block_settings: block.settings,\n  block_id: block.id,\n  block_shopify_attributes: block.shopify_attributes\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_media\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_presentation\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        }\n      ],\n      \"default\": \"grid\",\n      \"info\": \"t:info.carousel_layout_on_mobile\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.grid\",\n      \"visible_if\": \"{{ block.settings.media_presentation == 'grid' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_columns\",\n      \"label\": \"t:settings.columns\",\n      \"options\": [\n        {\n          \"value\": \"one\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"two\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"one\",\n      \"visible_if\": \"{{ block.settings.media_presentation == 'grid' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"image_gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"unit\": \"px\",\n      \"step\": 1,\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.media_presentation == 'grid' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"large_first_image\",\n      \"label\": \"t:settings.full_width_first_image\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.media_presentation == 'grid' and block.settings.media_columns == 'two' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icons\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.large_arrows\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.large_chevrons\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ block.settings.media_presentation == 'carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slideshow_controls_style\",\n      \"label\": \"t:settings.desktop_pagination\",\n      \"options\": [\n        {\n          \"value\": \"dots\",\n          \"label\": \"t:options.dots\"\n        },\n        {\n          \"value\": \"counter\",\n          \"label\": \"t:options.counter\"\n        },\n        {\n          \"value\": \"thumbnails\",\n          \"label\": \"t:options.thumbnails\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.media_presentation == 'carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slideshow_mobile_controls_style\",\n      \"label\": \"t:settings.mobile_pagination\",\n      \"options\": [\n        {\n          \"value\": \"dots\",\n          \"label\": \"t:options.dots\"\n        },\n        {\n          \"value\": \"counter\",\n          \"label\": \"t:options.counter\"\n        },\n        {\n          \"value\": \"hint\",\n          \"label\": \"t:options.hint\"\n        },\n        {\n          \"value\": \"thumbnails\",\n          \"label\": \"t:options.thumbnails\"\n        }\n      ]\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.thumbnails\",\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' or block.settings.slideshow_mobile_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"thumbnail_position\",\n      \"label\": \"t:settings.desktop_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"bottom\",\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"thumbnail_width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"min\": 44,\n      \"max\": 72,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 64,\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"thumbnail_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.slideshow_controls_style == 'thumbnails' or block.settings.slideshow_mobile_controls_style == 'thumbnails' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.media\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"aspect_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"1/1.25\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"2/1\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"constrain_to_viewport\",\n      \"label\": \"t:settings.limit_media_to_screen_height\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_fit\",\n      \"label\": \"t:settings.media_fit\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.aspect_ratio == 'adapt' and block.settings.constrain_to_viewport == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"media_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 4\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"extend_media\",\n      \"label\": \"t:settings.extend_media_to_screen_edge\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_width == 'content-center-aligned' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"zoom\",\n      \"label\": \"t:settings.enable_zoom\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_loop\",\n      \"label\": \"t:settings.enable_video_looping\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"hide_variants\",\n      \"default\": false,\n      \"label\": \"t:settings.hide_unselected_variant_media\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_media\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_search-input.liquid",
    "content": "{%- assign block_settings = block.settings -%}\n\n<script\n  src=\"{{ 'search-page-input.js' | asset_url }}\"\n  defer\n  type=\"module\"\n></script>\n\n{% if block_settings.inherit_color_scheme == false %}\n  {% assign color_scheme = block_settings.color_scheme | prepend: ' color-' %}\n{% endif %}\n\n<form\n  action=\"{{ routes.search_url }}\"\n  method=\"get\"\n  role=\"search\"\n  class=\"search-page-input__parent\"\n>\n  <search-page-input-component\n    style=\"{% render 'size-style', settings: block_settings %}{% render 'spacing-style', settings: block_settings %}\"\n    {{ block.shopify_attributes }}\n  >\n    <label\n      for=\"SearchPageInput--{{ block.id }}\"\n      class=\"visually-hidden\"\n    >\n      {{ 'content.search_input_label' | t }}\n    </label>\n    <span class=\"svg-wrapper search__icon{{ color_scheme }}\">\n      {{ 'icon-search.svg' | inline_asset_content }}\n    </span>\n    <input\n      name=\"type\"\n      value=\"product\"\n      type=\"hidden\"\n    >\n    <input\n      class=\"search-page-input{{ color_scheme }}\"\n      id=\"SearchPageInput--{{ block.id }}\"\n      type=\"search\"\n      name=\"q\"\n      ref=\"searchPageInput\"\n      on:keydown=\"/handleKeyDown\"\n      value=\"{{ search.terms | escape }}\"\n      placeholder=\"{{ 'content.search_input_placeholder' | t }}\"\n    >\n    <a\n      href=\"{{ routes.search_url }}?type=product&q=\"\n      class=\"search__reset-button{{ color_scheme }}\"\n      aria-label=\"{{ 'accessibility.reset_search' | t }}\"\n    >\n      <span class=\"svg-wrapper search__reset-button-icon\">\n        {{ 'icon-reset.svg' | inline_asset_content }}\n      </span>\n      <span class=\"search__reset-button-text\">\n        {{ 'actions.clear' | t }}\n      </span>\n    </a>\n  </search-page-input-component>\n\n  {% if search.results.size == 0 and search.terms != blank %}\n    <div class=\"search-results__no-results\">\n      <p>\n        {{ 'content.search_results_no_results_check_spelling' | t: terms: search.terms }}\n      </p>\n    </div>\n  {% endif %}\n</form>\n\n{% stylesheet %}\n  .search-page-input {\n    width: 100%;\n    color: var(--color-input-text);\n    background-color: var(--color-input-background);\n    padding-block: var(--padding-lg);\n    padding-inline: calc(var(--icon-size-lg) + var(--margin-xl) * 1.5);\n    text-overflow: ellipsis;\n    overflow: hidden;\n    border-radius: var(--style-border-radius-inputs);\n    border: var(--style-border-width-inputs) solid var(--color-input-border);\n\n    @media screen and (max-width: 749px) {\n      padding-inline: calc(var(--margin-xs) + var(--icon-size-lg) + var(--padding-md));\n    }\n  }\n\n  .search-page-input::placeholder {\n    color: rgb(var(--color-input-text-rgb) / var(--opacity-subdued-text));\n  }\n\n  .search-page-input__parent {\n    display: flex;\n    flex-direction: column;\n    align-items: var(--horizontal-alignment);\n  }\n\n  .search-results__no-results {\n    opacity: var(--opacity-subdued-text);\n  }\n\n  search-page-input-component {\n    position: relative;\n    width: 100%;\n    display: flex;\n    top: 0;\n    max-width: var(--size-style-width);\n    align-items: center;\n    background-color: var(--color-background);\n    margin: var(--margin-2xl) 0 var(--margin-md);\n\n    @media screen and (max-width: 749px) {\n      max-width: 100%;\n    }\n  }\n\n  search-page-input-component .search__icon,\n  search-page-input-component .search__icon:hover,\n  search-page-input-component .search__reset-button,\n  search-page-input-component .search__reset-button:hover {\n    background: transparent;\n    position: absolute;\n    top: auto;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n  }\n\n  search-page-input-component .search__icon svg,\n  search-page-input-component .search__reset-button svg {\n    width: var(--icon-size-md);\n    height: var(--icon-size-md);\n  }\n\n  search-page-input-component .search__icon svg {\n    color: var(--color-input-text);\n  }\n\n  search-page-input-component .search__icon {\n    left: var(--margin-lg);\n\n    @media screen and (max-width: 749px) {\n      left: var(--margin-md);\n    }\n  }\n\n  search-page-input-component .search__reset-button {\n    border-radius: 100%;\n    color: var(--color-input-text);\n    right: var(--margin-lg);\n    cursor: pointer;\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    transition: opacity var(--animation-speed) var(--animation-easing),\n      visibility var(--animation-speed) var(--animation-easing);\n\n    @media screen and (max-width: 749px) {\n      right: var(--margin-md);\n    }\n  }\n\n  search-page-input-component:has(.search-page-input:not(:placeholder-shown)) .search__reset-button {\n    opacity: 1;\n    visibility: visible;\n    pointer-events: auto;\n  }\n\n  search-page-input-component .search__reset-button-icon {\n    vertical-align: middle;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n    transition: transform var(--animation-speed) var(--animation-easing);\n  }\n\n  search-page-input-component .search__reset-button:active .search__reset-button-icon {\n    transform: scale(0.9);\n  }\n\n  search-page-input-component .search__reset-button-icon svg {\n    width: var(--icon-size-md);\n    height: var(--icon-size-md);\n  }\n\n  search-page-input-component .search__reset-button--hidden {\n    cursor: default;\n    opacity: 0;\n    transition: opacity var(--animation-speed) var(--animation-easing);\n    pointer-events: none;\n    visibility: hidden;\n  }\n\n  search-page-input-component .search__reset-button-text {\n    display: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.search_input\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"custom\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 50,\n      \"visible_if\": \"{{ block.settings.width == \\\"custom\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_slide.liquid",
    "content": "{% assign block_settings = block.settings %}\n{%- assign block_index = section.blocks | find_index: 'id', block.id -%}\n{%- assign section_index = section.index -%}\n\n{% capture children %}\n  {% liquid\n    assign preview_image = block_settings.image_1\n    if block_settings.media_type_1 == 'video'\n      assign preview_image = block_settings.video_1.preview_image\n    endif\n\n    assign rounded_image_corners = false\n    if block_settings.inherit_color_scheme == true or block_settings.inherit_color_scheme == false and section.settings.color_scheme.settings.background.rgb == block_settings.color_scheme.settings.background.rgb\n      assign rounded_image_corners = true\n    endif\n  %}\n  {% if section.settings.slide_height == 'adapt_image' and block_index == 0 and preview_image != blank %}\n    {%\n      # Great example of why it can be helpful for a section to be able to read the settings of its direct child blocks.\n      # In this case, we want the section to be able to read the image aspect ratio of the first slide and apply it to the slideshow slides and slides.\n    %}\n    {% style %}\n      .shopify-section-{{ section.id }} slideshow-slides,\n      .shopify-section-{{ section.id }} slideshow-slide {\n        min-height: {{ 1 | divided_by: preview_image.aspect_ratio | times: 100 }}vw;\n      }\n    {% endstyle %}\n  {% endif %}\n\n  <div class=\"slide__image-container{% if rounded_image_corners %} slide__image-container--rounded{% endif %}\">\n    {%- if block_settings.toggle_overlay -%}\n      {% render 'overlay', settings: block_settings %}\n    {%- endif -%}\n    {%- if preview_image -%}\n      {%- liquid\n        assign height = preview_image.width | divided_by: preview_image.aspect_ratio | round\n        assign media_width_desktop = '100vw'\n        assign media_width_mobile = '100vw'\n        assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n        assign lazy_sizes = 'auto, ' | append: sizes\n        assign widths = '832, 1200, 1600, 1920, 2560, 3840'\n      %}\n\n      {%- liquid\n        assign loading = 'lazy'\n\n        if block_index == 0 and section_index <= 3\n          assign loading = 'eager'\n          assign sizes = lazy_sizes\n        endif\n\n        assign fetchpriority = 'low'\n        if block_index == 0 and section_index == 1\n          assign fetchpriority = 'high'\n        endif\n      -%}\n\n      {%- if block_settings.media_type_1 == 'image' -%}\n        {{\n          block_settings.image_1\n          | image_url: width: 3840\n          | image_tag: height: height, sizes: sizes, widths: widths, class: 'slide__image', loading: loading, fetchpriority: fetchpriority\n        }}\n      {%- else -%}\n        {%- if block_settings.video_1.preview_image -%}\n\n          {{\n            block_settings.video_1.preview_image\n            | image_url: width: 3840\n            | image_tag:\n              height: height,\n              sizes: sizes,\n              widths: widths,\n              loading: loading,\n              class: 'slide__video-poster',\n              fetchpriority: fetchpriority\n          }}\n        {%- endif -%}\n        {{\n          block_settings.video_1\n          | video_tag: poster: nil, autoplay: true, loop: true, controls: false, muted: true, class: 'slide__video'\n        }}\n      {%- endif -%}\n    {%- else -%}\n      {%- liquid\n        assign modulo_result = block_index | modulo: 2\n        assign placeholder_variant = 2 | minus: modulo_result\n        assign placeholder_name = 'hero-apparel-' | append: placeholder_variant\n      -%}\n      {{ placeholder_name | placeholder_svg_tag: 'slide__image' }}\n    {%- endif -%}\n  </div>\n  <div\n    class=\"spacing-style slide__content{% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}{% if preview_image or block_settings.toggle_overlay %} background-transparent{% endif %}\"\n    style=\"{% render 'spacing-style', settings: block_settings %}\"\n    {{ block.shopify_attributes }}\n  >\n    <div\n      class=\"group-block-content\n      layout-panel-flex\n      layout-panel-flex--{{ block_settings.content_direction }}\n      {% if block_settings.vertical_on_mobile %}mobile-column{% endif %}\"\n      style=\"{% render 'layout-panel-style', settings: block_settings %}\"\n    >\n      {% content_for 'blocks' %}\n    </div>\n  </div>\n{% endcapture %}\n\n{%- capture class -%}\n  {%- if block_settings.inherit_color_scheme == false -%}\n    color-{{ block_settings.color_scheme }}\n  {%- endif -%}\n{%- endcapture -%}\n\n{% render 'slideshow-slide',\n  index: block_index,\n  class: class,\n  children: children,\n  attributes: block.shopify_attributes,\n  slide_size: section.settings.slide_height,\n  navigate_to_slide: true\n%}\n\n{% stylesheet %}\n  .slide__content {\n    height: 100%;\n    position: relative;\n    z-index: var(--layer-flat);\n  }\n\n  .slide__content > * {\n    margin: auto;\n  }\n\n  .slide__content.background-transparent {\n    background-color: transparent;\n  }\n\n  slideshow-slide > .slide__image-container {\n    display: flex;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    position: absolute;\n  }\n\n  .slide__image-container > .slide__image,\n  .slide__image-container > .slide__video,\n  .slide__image-container > .slide__video-poster {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center center;\n  }\n\n  .slide__image-container > .slide__video-poster {\n    position: absolute;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.slide\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"_heading\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"jumbo-text\"\n    },\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_1\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_1\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.media_type_1 == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_1\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.media_type_1 == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.slide\",\n      \"settings\": {\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"inherit_color_scheme\": false,\n        \"color_scheme\": \"scheme-6\",\n        \"padding-inline-start\": 48,\n        \"padding-inline-end\": 48,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.new_arrivals_h2\"\n          }\n        },\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.latest_products\",\n            \"padding-block-end\": 20\n          }\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.shop_now_button_label\",\n            \"link\": \"shopify://collections/all\"\n          }\n        }\n      },\n      \"block_order\": [\"heading\", \"text\", \"button\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/_social-link.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n\n  if block_settings.link != blank\n    # Extract domain from URL\n    assign platform = block_settings.link | split: '//' | last | remove: 'www.' | split: '.' | first\n\n    # Check if URL has a profile path (more than just the domain)\n    assign url_parts = block_settings.link | split: '//' | last | split: '/'\n    assign has_profile = false\n\n    if url_parts.size > 1 and url_parts[1] != ''\n      assign has_profile = true\n    endif\n  endif\n%}\n\n{% comment %}\n  Only render the social icon if:\n  1. In editor mode (always show, but may be disabled)\n  2. On storefront AND has a valid profile link\n{% endcomment %}\n{% if request.design_mode or has_profile %}\n  <div\n    class=\"social-icons__icon-wrapper{% unless has_profile %} social-icons__icon-wrapper--disabled{% endunless %}\"\n    {{ block.shopify_attributes }}\n  >\n    <a\n      href=\"{{ block_settings.link }}\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      aria-label=\"{{ platform | capitalize }}\"\n      {% unless has_profile %}\n        {% if request.design_mode %}\n          onclick=\"return false;\"\n          aria-disabled=\"true\"\n        {% endif %}\n      {% endunless %}\n    >\n      <span class=\"social-icons__icon-label\">{{ platform | capitalize }}</span>\n      <svg\n        class=\"social-icons__icon icon-default\"\n        aria-hidden=\"true\"\n        focusable=\"false\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 20 20\"\n      >\n        {%- render 'icon', icon: platform -%}\n      </svg>\n    </a>\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .social-icons__icon-wrapper {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: var(--icon-size-lg);\n  }\n\n  .social-icons__icon {\n    display: flex;\n    flex-shrink: 0;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n  }\n\n  .social-icons__icon {\n    display: none;\n  }\n\n  .social-icons__icon-wrapper:has(.social-icons__icon path) {\n    width: var(--icon-size-lg);\n\n    .social-icons__icon {\n      display: block;\n    }\n\n    .social-icons__icon-label {\n      display: none;\n    }\n  }\n\n  /* Disabled state for editor */\n  .shopify-design-mode .social-icons__icon-wrapper--disabled {\n    opacity: var(--disabled-opacity, 0.5);\n    cursor: not-allowed;\n  }\n\n  .shopify-design-mode .social-icons__icon-wrapper--disabled a {\n    pointer-events: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.social_link\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.social_link\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/accelerated-checkout.liquid",
    "content": "{%- doc -%}\n  This block is used to display the accelerated checkout button.\n  Intended for product-form.liquid block.\n\n  @param {string} can_add_to_cart - Whether the product can be added to the cart\n  @param form_obj - The form object\n\n  @example\n  {% content_for 'block', type: 'accelerated-checkout', id: 'accelerated-checkout', can_add_to_cart: can_add_to_cart, form_obj: form %}\n{%- enddoc -%}\n\n{% liquid\n  assign product = closest.product\n  if request.visual_preview_mode and product == blank\n    assign product = collections.all.products.first\n  endif\n%}\n\n{% capture accelerated_checkout_button %}\n  {% if product != blank and form_obj != blank %}\n    {{ form_obj | payment_button }}\n  {% endif %}\n{% endcapture %}\n\n{% if accelerated_checkout_button != blank %}\n  <div\n    class=\"accelerated-checkout-block\"\n    ref=\"acceleratedCheckoutButtonContainer\"\n    {{ block.shopify_attributes }}\n    {% if request.visual_preview_mode %}\n      data-shopify-visual-preview\n    {% endif %}\n    {% unless can_add_to_cart %}\n      hidden\n    {% endunless %}\n  >\n    {{ accelerated_checkout_button }}\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .accelerated-checkout-block[data-shopify-visual-preview] {\n    width: 300px;\n  }\n\n  more-payment-options-link {\n    font-size: smaller;\n  }\n\n  more-payment-options-link a {\n    --button-color: var(--color-primary);\n  }\n\n  more-payment-options-link a:hover {\n    --button-color: var(--color-primary-hover);\n  }\n\n  .shopify-payment-button__more-options[aria-hidden='true'] {\n    display: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.accelerated_checkout\",\n  \"tag\": null\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/accordion.liquid",
    "content": "{% assign block_settings = block.settings %}\n<div\n  class=\"accordion accordion--{{ block.id }} accordion--{{ block_settings.icon }} border-style spacing-style{% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}{% if block_settings.dividers %} accordion--dividers{% endif %}\"\n  style=\"\n    --summary-font-family: var(--font-{{ block_settings.type_preset }}--family);\n     --summary-font-style: var(--font-{{ block_settings.type_preset }}--style);\n     --summary-font-weight: var(--font-{{ block_settings.type_preset }}--weight);\n     --summary-font-size: var(--font-{{ block_settings.type_preset }}--size);\n     --summary-font-line-height: var(--font-{{ block_settings.type_preset }}--line-height);\n     --summary-font-case: var(--font-{{ block_settings.type_preset }}--case);\n    {% render 'spacing-style', settings: block_settings %}\n    {% render 'border-override', settings: block_settings %}\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n\n{% stylesheet %}\n  .accordion {\n    flex: 1;\n    width: 100%;\n  }\n\n  .accordion--dividers accordion-custom:not(:first-child) .details {\n    border-block-start: var(--style-border-width) solid var(--color-border);\n  }\n\n  /* When accordion borders are not set, show fallback borders */\n  .accordion--dividers {\n    /* stylelint-disable-next-line declaration-property-value-disallowed-list */\n    --show-fallback-borders: 0;\n  }\n\n  .accordion--dividers:not([class*='color-'])[style*='--border-width: 0'],\n  .accordion--dividers:not([class*='color-'])[style*='--border-style: none'] {\n    --show-fallback-borders: 1;\n  }\n\n  .accordion--dividers accordion-custom:first-child .details {\n    border-block-start: calc(var(--style-border-width) * var(--show-fallback-borders)) solid var(--color-border);\n  }\n\n  .accordion--dividers accordion-custom:last-child .details {\n    border-block-end: calc(var(--style-border-width) * var(--show-fallback-borders)) solid var(--color-border);\n  }\n\n  .accordion--dividers .details-content {\n    padding-block-end: var(--padding-sm);\n  }\n\n  .accordion--caret .icon-plus,\n  .accordion--plus .icon-caret {\n    display: none;\n  }\n\n  /* because we can't pass apply a specific class on a block based on its parent block setting */\n  .accordion .details__header {\n    font-family: var(--summary-font-family);\n    font-style: var(--summary-font-style);\n    font-weight: var(--summary-font-weight);\n    font-size: var(--summary-font-size);\n    line-height: var(--summary-font-line-height);\n    text-transform: var(--summary-font-case);\n    min-height: var(--minimum-touch-target);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.accordion\",\n  \"tag\": null,\n  \"class\": \"accordion\",\n  \"blocks\": [\n    {\n      \"type\": \"_accordion-row\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"icon\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"caret\",\n          \"label\": \"t:options.caret\"\n        },\n        {\n          \"value\": \"plus\",\n          \"label\": \"t:options.plus\"\n        }\n      ],\n      \"default\": \"caret\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"dividers\",\n      \"label\": \"t:settings.dividers\",\n      \"default\": true\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.heading_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"h6\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != \\\"none\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != \\\"none\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.accordion\",\n      \"category\": \"t:categories.layout\",\n      \"blocks\": {\n        \"row-1\": {\n          \"type\": \"_accordion-row\",\n          \"settings\": {\n            \"open_by_default\": true,\n            \"heading\": \"t:text_defaults.return_policy\"\n          },\n          \"blocks\": {\n            \"text-1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.goal_for_every_customer\",\n                \"width\": \"100%\"\n              }\n            }\n          },\n          \"block_order\": [\"text-1\"]\n        },\n        \"row-2\": {\n          \"type\": \"_accordion-row\",\n          \"settings\": {\n            \"heading\": \"t:text_defaults.shipping\"\n          },\n          \"blocks\": {\n            \"text-1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.work_quickly_to_ship\",\n                \"width\": \"100%\"\n              }\n            }\n          },\n          \"block_order\": [\"text-1\"]\n        },\n        \"row-3\": {\n          \"type\": \"_accordion-row\",\n          \"settings\": {\n            \"heading\": \"t:text_defaults.manufacturing\"\n          },\n          \"blocks\": {\n            \"text-1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.made_local_and_global\",\n                \"width\": \"100%\"\n              }\n            }\n          },\n          \"block_order\": [\"text-1\"]\n        }\n      },\n      \"block_order\": [\"row-1\", \"row-2\", \"row-3\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/add-to-cart.liquid",
    "content": "{%- doc -%}\n  This block is used to display the add to cart button.\n  Intended for product-form.liquid block.\n\n  @param {string} can_add_to_cart - Whether the product can be added to the cart\n  @param {string} add_to_cart_text - The text of the add to cart button\n{%- enddoc -%}\n\n{% liquid\n  assign class = 'add-to-cart-button ' | append: block.settings.style_class\n  assign id = 'BuyButtons-ProductSubmitButton-' | append: block.id\n%}\n\n<span\n  {{ block.shopify_attributes }}\n  style=\"--add-to-cart-font-case: {{ settings.button_text_case }};\"\n>\n  {% render 'add-to-cart-button',\n    id: id,\n    class: class,\n    can_add_to_cart: can_add_to_cart,\n    product: closest.product,\n    add_to_cart_text: add_to_cart_text,\n    data_testid: 'standalone-add-to-cart'\n  %}\n</span>\n\n{% schema %}\n{\n  \"name\": \"t:names.add_to_cart\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"style_class\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"button\",\n          \"label\": \"t:options.primary\"\n        },\n        {\n          \"value\": \"button-secondary\",\n          \"label\": \"t:options.secondary\"\n        }\n      ],\n      \"default\": \"button-secondary\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/button.liquid",
    "content": "{% render 'button', link: block.settings.link %}\n\n{% schema %}\n{\n  \"name\": \"t:names.button\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"label\",\n      \"label\": \"t:settings.label\",\n      \"default\": \"t:text_defaults.button_label\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"style_class\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"button\",\n          \"label\": \"t:options.primary\"\n        },\n        {\n          \"value\": \"button-secondary\",\n          \"label\": \"t:options.secondary\"\n        },\n        {\n          \"value\": \"link\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"button\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == \\\"custom\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == \\\"custom\\\" }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.button\",\n      \"category\": \"t:categories.basic\",\n      \"settings\": {\n        \"link\": \"shopify://collections/all\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/buy-buttons.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign product = closest.product\n  if request.visual_preview_mode and product == blank\n    assign product = collections.all.products.first\n  endif\n\n  assign variant = closest.product.selected_or_first_available_variant\n  assign inventory_quantity = variant.inventory_quantity\n  assign inventory_policy = variant.inventory_policy\n\n  if variant.inventory_management == 'shopify'\n    assign inventory_managed = true\n  endif\n\n  assign can_add_to_cart = false\n  assign add_to_cart_text = 'products.product.unavailable' | t\n\n  if variant\n    if variant.quantity_rule.min > variant.inventory_quantity and inventory_managed and inventory_policy == 'deny'\n      assign quantity_rule_soldout = true\n    endif\n\n    if variant.available\n      assign can_add_to_cart = true\n      assign add_to_cart_text = 'products.product.add_to_cart' | t\n    elsif inventory_managed and inventory_quantity <= 0 and inventory_policy == 'deny' or quantity_rule_soldout\n      assign can_add_to_cart = false\n      assign add_to_cart_text = 'products.product.sold_out' | t\n    else\n      assign can_add_to_cart = false\n      assign add_to_cart_text = 'products.product.unavailable' | t\n    endif\n  endif\n%}\n\n<span\n  class=\"buy-buttons-block buy-buttons-block--{{ block.id }}\"\n  {{ block.shopify_attributes }}\n>\n  {%- if product != blank -%}\n    {%- assign product_form_id = 'BuyButtons-ProductForm-' | append: section.id -%}\n    <product-form-component\n      data-section-id=\"{{ section.id }}\"\n      data-product-id=\"{{ product.id }}\"\n      data-product-url=\"{{ product.url }}\"\n      on:submit=\"/handleSubmit\"\n      data-quantity-default=\"{% if product.selected_or_first_available_variant.quantity_rule.min %}{{ product.selected_or_first_available_variant.quantity_rule.min }}{% else %}1{% endif %}\"\n      data-quantity-error-max=\"{{ 'products.product.quantity_error_max' | t }}\"\n    >\n      <div\n        class=\"visually-hidden\"\n        aria-live=\"assertive\"\n        role=\"status\"\n        aria-atomic=\"true\"\n        ref=\"liveRegion\"\n      ></div>\n      {%- form 'product', product, id: product_form_id, data-type: 'add-to-cart-form' -%}\n        <input\n          type=\"hidden\"\n          name=\"id\"\n          ref=\"variantId\"\n          value=\"{{ product.selected_or_first_available_variant.id }}\"\n        >\n        {%- if block_settings.gift_card_form and product.gift_card? -%}\n          {%- render 'gift-card-recipient-form', product: product, form: form, section: section, block: block -%}\n        {%- endif -%}\n        <div\n          class=\"product-form-buttons spacing-style{% if block_settings.stacking %} product-form-buttons--stacked{% endif %}\"\n          style=\"{% render 'spacing-style', settings: block_settings %}\"\n          ref=\"productFormButtons\"\n        >\n          {%- liquid\n            assign has_quantity_rules = false\n            if variant.quantity_rule.min > 1 or variant.quantity_rule.increment > 1 or variant.quantity_rule.max != null\n              assign has_quantity_rules = true\n            endif\n          -%}\n\n          {%- if has_quantity_rules -%}\n            {%- assign cart_quantity = cart | item_count_for_variant: variant.id -%}\n            <div\n              class=\"quantity-label\"\n              ref=\"quantityLabel\"\n            >\n              {{ 'products.product.quantity' | t }}\n              <span\n                class=\"quantity-label__cart-count{% if cart_quantity == 0 %} hidden{% endif %}\"\n                ref=\"quantityLabelCartCount\"\n                >({{ cart_quantity }}\n                {{ 'products.product.in_cart' | t }})</span\n              >\n            </div>\n          {%- endif -%}\n\n          {% content_for 'block', type: 'quantity', id: 'quantity' %}\n\n          {%- if has_quantity_rules -%}\n            <div\n              class=\"quantity-rules\"\n              ref=\"quantityRules\"\n            >\n              {%- if variant.quantity_rule.increment > 1 -%}\n                <span class=\"quantity-rules__item\">\n                  {{ 'products.product.quantity_increments' | t: increment: variant.quantity_rule.increment }}\n                </span>\n              {%- endif -%}\n              {%- if variant.quantity_rule.min > 1 -%}\n                <span class=\"quantity-rules__item\">\n                  {{ 'products.product.quantity_minimum' | t: minimum: variant.quantity_rule.min }}\n                </span>\n              {%- endif -%}\n              {%- if variant.quantity_rule.max != null -%}\n                <span class=\"quantity-rules__item\">\n                  {{ 'products.product.quantity_maximum' | t: maximum: variant.quantity_rule.max }}\n                </span>\n              {%- endif -%}\n            </div>\n          {%- endif -%}\n\n          {%- if product.quantity_price_breaks_configured? and variant.quantity_price_breaks.size > 0 -%}\n            {%- liquid\n              assign use_currency = settings.currency_code_enabled_product_pages\n            -%}\n            <volume-pricing\n              class=\"volume-pricing\"\n              data-section-id=\"{{ section.id }}\"\n              ref=\"volumePricing\"\n            >\n              <span class=\"volume-pricing__title\">{{ 'content.volume_pricing' | t }}</span>\n              <div class=\"volume-pricing__table\">\n                <div class=\"volume-pricing__row volume-pricing__row--even\">\n                  <span>{{ variant.quantity_rule.min }}+</span>\n                  <span>\n                    {%- if use_currency -%}\n                      {{- variant.price | money_with_currency | strip -}}\n                    {%- else -%}\n                      {{- variant.price | money | strip -}}\n                    {%- endif -%}\n                    /{{ 'content.each_abbreviation' | t -}}\n                  </span>\n                </div>\n                {%- for price_break in variant.quantity_price_breaks limit: 2 -%}\n                  {%- liquid\n                    assign row_index = forloop.index\n                    if row_index == 1\n                      assign row_class = 'volume-pricing__row volume-pricing__row--odd'\n                    else\n                      assign row_class = 'volume-pricing__row volume-pricing__row--even'\n                    endif\n                  -%}\n                  <div class=\"{{ row_class }}\">\n                    <span>{{ price_break.minimum_quantity }}+</span>\n                    <span>\n                      {%- if use_currency -%}\n                        {{- price_break.price | money_with_currency | strip -}}\n                      {%- else -%}\n                        {{- price_break.price | money | strip -}}\n                      {%- endif -%}\n                      /{{ 'content.each_abbreviation' | t -}}\n                    </span>\n                  </div>\n                {%- endfor -%}\n\n                {%- if variant.quantity_price_breaks.size > 2 -%}\n                  <div class=\"volume-pricing__collapsible-wrapper\">\n                    {%- for price_break in variant.quantity_price_breaks offset: 2 -%}\n                      {%- liquid\n                        assign collapsed_index = forloop.index\n                        assign total_index = collapsed_index | plus: 2\n                        assign modulo_result = total_index | modulo: 2\n                        if modulo_result == 1\n                          assign row_class = 'volume-pricing__row volume-pricing__row--odd'\n                        else\n                          assign row_class = 'volume-pricing__row volume-pricing__row--even'\n                        endif\n                      -%}\n                      <div class=\"{{ row_class }}\">\n                        <span>{{ price_break.minimum_quantity }}+</span>\n                        <span>\n                          {%- if use_currency -%}\n                            {{- price_break.price | money_with_currency | strip -}}\n                          {%- else -%}\n                            {{- price_break.price | money | strip -}}\n                          {%- endif -%}\n                          /{{ 'content.each_abbreviation' | t -}}\n                        </span>\n                      </div>\n                    {%- endfor -%}\n                  </div>\n\n                  <button\n                    type=\"button\"\n                    class=\"volume-pricing__toggle button-unstyled\"\n                    ref=\"volumePricingToggle\"\n                    on:click=\"/toggleExpanded\"\n                  >\n                    <span class=\"volume-pricing__toggle-text\">\n                      <span class=\"volume-pricing__show-more\">+ {{ 'actions.show_more' | t }}</span>\n                      <span class=\"volume-pricing__show-less\">- {{ 'actions.show_less' | t }}</span>\n                    </span>\n                  </button>\n                {%- endif -%}\n              </div>\n            </volume-pricing>\n          {%- endif -%}\n          {%- unless block_settings.gift_card_form and product.gift_card? -%}\n            <span\n              class=\"product-form-text__error hidden\"\n              ref=\"addToCartTextError\"\n            >\n              <span class=\"svg-wrapper\">\n                {{- 'icon-error.svg' | inline_asset_content -}}\n              </span>\n            </span>\n          {%- endunless -%}\n\n          {% content_for 'block',\n            type: 'add-to-cart',\n            id: 'add-to-cart',\n            can_add_to_cart: can_add_to_cart,\n            add_to_cart_text: add_to_cart_text\n          %}\n\n          {% content_for 'block',\n            type: 'accelerated-checkout',\n            id: 'accelerated-checkout',\n            can_add_to_cart: can_add_to_cart,\n            form_obj: form\n          %}\n        </div>\n      {%- endform -%}\n    </product-form-component>\n  {%- else -%}\n    <div class=\"product-form-buttons\">\n      <button\n        type=\"submit\"\n        name=\"add\"\n        class=\"button\"\n        disabled\n      >\n        {{ 'blocks.sold_out' | t }}\n      </button>\n    </div>\n  {%- endif -%}\n</span>\n\n{% if block_settings.show_pickup_availability %}\n  <script\n    src=\"{{ 'local-pickup.js' | asset_url }}\"\n    type=\"module\"\n  ></script>\n\n  {%- assign pick_up_availabilities = closest.product.selected_or_first_available_variant.store_availabilities\n    | where: 'pick_up_enabled', true\n  -%}\n\n  <local-pickup\n    class=\"spacing-style product__pickup-availabilities\"\n    {% if pick_up_availabilities.size == 0 %}\n      hidden\n    {% endif %}\n    data-section-id=\"{{ section.id }}\"\n    data-product-url=\"{{ closest.product.url }}\"\n    data-variant-id=\"{{ closest.product.selected_or_first_available_variant.id }}\"\n    style=\"{% render 'spacing-style', settings: block_settings %}\"\n    ref=\"localPickupButton\"\n  >\n    {% if can_add_to_cart %}\n      <dialog-component>\n        <div class=\"pickup-availability__row\">\n          <div class=\"pickup-availability__column\">\n            <span class=\"svg-wrapper\">\n              {% if pick_up_availabilities.first.available %}\n                {{- 'icon-available.svg' | inline_asset_content -}}\n              {% else %}\n                {{- 'icon-unavailable.svg' | inline_asset_content -}}\n              {% endif %}\n            </span>\n          </div>\n          <div class=\"pickup-availability__column\">\n            {% if pick_up_availabilities.first.available %}\n              <p class=\"pickup-location__text-sm\">\n                {{ 'content.pickup_available_at_html' | t: location: pick_up_availabilities.first.location.name }}\n              </p>\n              <p class=\"pickup-location__text-xs\">\n                {{ 'content.pickup_ready_in' | t: pickup_time: pick_up_availabilities.first.pick_up_time }}\n              </p>\n            {% else %}\n              <p class=\"pickup-location__text-sm\">\n                {{ 'content.pickup_not_available' | t }}\n              </p>\n            {% endif %}\n            <button\n              on:click=\"/showDialog\"\n              class=\"button-unstyled pickup-location__button\"\n            >\n              {{ 'actions.view_store_information' | t }}\n            </button>\n          </div>\n        </div>\n        <dialog\n          ref=\"dialog\"\n          class=\"dialog-modal dialog-drawer pickup-location__dialog color-{{ settings.drawer_color_scheme }}\"\n          scroll-lock\n          aria-labelledby=\"pickup-dialog-heading\"\n          data-testid=\"pickup-location-dialog\"\n        >\n          <h2\n            id=\"pickup-dialog-heading\"\n            class=\"visually-hidden\"\n          >\n            {{ 'actions.view_store_information' | t }}\n          </h2>\n          <div class=\"pickup-availability__dialog-row pickup-availability__header-container\">\n            <div class=\"pickup-availability__column\">\n              <h4 class=\"pickup-location__h4\">{{ closest.product.title }}</h4>\n              {% unless closest.product.has_only_default_variant %}\n                <p class=\"pickup-location__text-sm\">\n                  {{ closest.product.selected_or_first_available_variant.title }}\n                </p>\n              {% endunless %}\n            </div>\n            <button\n              ref=\"closeButton\"\n              on:click=\"/closeDialog\"\n              class=\"button button-unstyled close-button pickup-location__close-button\"\n              aria-label=\"{{ 'actions.close_dialog' | t }}\"\n            >\n              <span class=\"svg-wrapper\">\n                {{- 'icon-close.svg' | inline_asset_content -}}\n              </span>\n            </button>\n          </div>\n          {% for pick_up_availability in pick_up_availabilities %}\n            <div class=\"pickup-location__wrapper\">\n              <p class=\"pickup-location__text-bold\">{{ pick_up_availability.location.name }}</p>\n              <div class=\"pickup-location__address-wrapper\">\n                <span class=\"pickup-location__availability-wrapper\">\n                  {% if pick_up_availability.available %}\n                    {{- 'icon-available.svg' | inline_asset_content -}}\n                    {% assign pickup_time = pick_up_availability.pick_up_time | downcase %}\n                    {{ 'content.pickup_available_in' | t: pickup_time: pickup_time }}\n                  {% else %}\n                    {{- 'icon-unavailable.svg' | inline_asset_content -}}\n                    {{ 'content.pickup_not_available' | t }}\n                  {% endif %}\n                </span>\n                <address class=\"pickup-location__address\">\n                  {{ pick_up_availability.location.address | format_address }}\n                  {{ pick_up_availability.location.address.phone }}\n                </address>\n              </div>\n            </div>\n          {% endfor %}\n        </dialog>\n      </dialog-component>\n    {% endif %}\n  </local-pickup>\n{% endif %}\n\n{% stylesheet %}\n  .buy-buttons-block {\n    --buy-button-preferred-width: 185px;\n\n    width: 100%;\n  }\n\n  .product-form-buttons {\n    display: flex;\n    flex-wrap: wrap;\n  }\n\n  .product-form-buttons:not(:has(.quantity-rules)) {\n    gap: calc(var(--gap-sm) / 2);\n\n    @media screen and (min-width: 750px) {\n      gap: var(--gap-sm);\n    }\n  }\n\n  .product-form-buttons > *:not(.quantity-selector-wrapper, .quantity-rules, .quantity-label, .volume-pricing) {\n    flex: 1 1 var(--buy-button-preferred-width, 0);\n    min-width: fit-content;\n  }\n\n  .product-form-buttons--stacked\n    > *:not(.quantity-selector-wrapper, .quantity-rules, .quantity-label, .volume-pricing) {\n    flex-basis: 51%;\n  }\n\n  .product-form-buttons button {\n    width: 100%;\n    padding-block: var(--padding-lg);\n  }\n\n  .quantity-selector {\n    flex-grow: 0;\n    flex-shrink: 0;\n    height: var(--height-buy-buttons);\n  }\n\n  .quantity-label {\n    flex: 1 0 100%;\n    width: 100%;\n    font-size: var(--font-size--sm);\n    margin-block-end: var(--gap-xs);\n  }\n\n  .quantity-label__cart-count {\n    color: var(--color-foreground-secondary);\n  }\n\n  .quantity-rules {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0;\n    row-gap: calc(var(--gap-xs) / 2);\n    flex: 1 0 100%;\n    width: 100%;\n    font-size: var(--font-size--xs);\n    color: var(--color-foreground-secondary);\n    margin-block-start: var(--gap-xs);\n    margin-block-end: var(--gap);\n  }\n\n  .product-form-buttons:has(~ .volume-pricing .volume-pricing__title) .quantity-rules {\n    margin-block-end: var(--gap-md);\n  }\n\n  .quantity-rules__item {\n    position: relative;\n    display: inline-block;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .quantity-rules__item:not(:last-child) {\n    padding-right: var(--padding-xl);\n    margin-right: var(--margin-2xs);\n  }\n\n  .quantity-rules__item:not(:last-child)::after {\n    content: '•';\n    position: absolute;\n    inset-inline-end: 0.5rem;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 0.5em;\n    line-height: 0;\n  }\n\n  .add-to-cart-button {\n    height: var(--height-buy-buttons);\n    text-transform: var(--button-text-case-primary);\n  }\n\n  .add-to-cart-button.button-secondary {\n    text-transform: var(--button-text-case-secondary);\n  }\n\n  .product-form-text__error {\n    display: flex;\n    align-items: flex-start;\n    gap: var(--gap-xs);\n    margin-block-end: var(--gap-xs);\n  }\n\n  .product__pickup-availabilities {\n    width: 100%;\n  }\n\n  .pickup-availability__column {\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-start;\n  }\n\n  .pickup-availability__row {\n    display: flex;\n    gap: var(--padding-xs);\n  }\n\n  .pickup-availability__dialog-row {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n  }\n\n  .pickup-availability__header-container {\n    padding-block-end: var(--padding-2xl);\n  }\n\n  .pickup-location__wrapper {\n    display: flex;\n    flex-direction: column;\n    padding-block: var(--padding-2xl);\n    border-top: 1px solid var(--color-border);\n    gap: var(--padding-xs);\n  }\n\n  .pickup-location__address-wrapper {\n    display: flex;\n    flex-direction: column;\n    gap: var(--padding-md);\n  }\n\n  .pickup-location__dialog {\n    padding: var(--padding-2xl);\n    position: fixed;\n    border-radius: 0;\n    width: var(--sidebar-width);\n    max-width: 95vw;\n    height: 100%;\n    margin: 0 0 0 auto;\n    border: var(--style-border-drawer);\n    box-shadow: var(--shadow-drawer);\n    background-color: var(--color-background);\n  }\n\n  .pickup-location__dialog:modal {\n    max-height: 100dvh;\n  }\n\n  .pickup-location__text-sm {\n    font-size: var(--font-size--sm);\n    margin: 0;\n  }\n\n  .pickup-location__text-xs {\n    font-size: var(--font-size--xs);\n    margin: 0;\n  }\n\n  .pickup-location__button {\n    width: fit-content;\n    color: var(--color-primary);\n    font-size: var(--font-size--xs);\n    font-family: var(--font-body--family);\n    padding: 0;\n    cursor: pointer;\n    margin-block: var(--margin-xs);\n  }\n\n  .pickup-location__button:hover {\n    color: var(--color-primary-hover);\n  }\n\n  .pickup-location__h4 {\n    margin: 0;\n  }\n\n  .pickup-location__text-bold {\n    font-size: var(--font-size--md);\n    font-weight: 600;\n    margin: 0;\n  }\n\n  .pickup-location__availability-wrapper {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n    font-family: var(--font-paragraph--family);\n  }\n\n  .pickup-location__address {\n    font-style: normal;\n  }\n\n  .pickup-location__close-button {\n    top: calc(var(--padding-2xl) - (var(--icon-size-xs) / 2));\n    right: calc(var(--padding-2xl) - var(--icon-size-xs));\n  }\n\n  .volume-pricing {\n    display: block;\n    width: 100%;\n    margin-bottom: var(--gap);\n  }\n\n  .volume-pricing:not(:has(.volume-pricing__title)) {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  .volume-pricing__title {\n    display: block;\n    margin-block-end: var(--gap-sm);\n    font-size: var(--font-size--sm);\n    font-weight: var(--font-body--weight);\n    color: var(--color-foreground);\n  }\n\n  .volume-pricing__table {\n    width: 100%;\n  }\n\n  .volume-pricing__row {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding-block: var(--padding-sm);\n    padding-inline: var(--padding-md);\n    font-size: var(--font-size--sm);\n  }\n\n  .volume-pricing__row--even {\n    background: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  .volume-pricing__row--odd {\n    background: var(--color-background);\n  }\n\n  .volume-pricing__collapsible-wrapper {\n    block-size: 0;\n    overflow-y: clip;\n    opacity: 0;\n    interpolate-size: allow-keywords;\n    transition: opacity var(--animation-speed-slow) var(--animation-easing),\n      block-size var(--animation-speed-slow) var(--animation-easing);\n  }\n\n  .volume-pricing__toggle {\n    width: 100%;\n    padding-bottom: 0;\n    padding-inline: 0;\n    text-align: left;\n    color: var(--color-foreground-secondary);\n    font-size: var(--font-size--xs);\n    cursor: default;\n    margin-block-start: 0;\n    pointer-events: none;\n  }\n\n  button.volume-pricing__toggle {\n    /* Need the extra specificity to override .product-form-buttons button */\n    padding-block: var(--padding-sm);\n  }\n\n  .volume-pricing__toggle-text {\n    cursor: pointer;\n    display: inline-block;\n    pointer-events: auto;\n  }\n\n  .volume-pricing__show-less {\n    display: none;\n  }\n\n  .volume-pricing--expanded .volume-pricing__collapsible-wrapper {\n    opacity: 1;\n    block-size: auto;\n\n    @starting-style {\n      block-size: 0;\n      opacity: 0;\n      overflow-y: clip;\n    }\n  }\n\n  .volume-pricing--expanded .volume-pricing__show-more {\n    display: none;\n  }\n\n  .volume-pricing--expanded .volume-pricing__show-less {\n    display: inline;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_buy_buttons\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"stacking\",\n      \"label\": \"t:settings.always_stack_buttons\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_pickup_availability\",\n      \"label\": \"t:settings.show_pickup_availability\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"gift_card_form\",\n      \"label\": \"t:settings.gift_card_form\",\n      \"default\": true\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.gift_card_form_description\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_buy_buttons\",\n      \"category\": \"t:categories.product\",\n      \"blocks\": {\n        \"quantity\": {\n          \"type\": \"quantity\",\n          \"static\": true\n        },\n        \"add-to-cart\": {\n          \"type\": \"add-to-cart\",\n          \"static\": true,\n          \"settings\": {\n            \"style_class\": \"button-secondary\"\n          }\n        },\n        \"accelerated-checkout\": {\n          \"type\": \"accelerated-checkout\",\n          \"static\": true\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/collection-card.liquid",
    "content": "{% assign collection = block.settings.collection %}\n\n{% capture card_image %}\n  {% content_for 'block',\n    type: '_collection-card-image',\n    id: 'collection-card-image',\n    closest.collection: collection,\n    parent_block_id: block.id %}\n{% endcapture %}\n\n{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'collection-card',\n  card_image: card_image,\n  children: children,\n  block: block,\n  collection: collection,\n  section: section\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_card\",\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"collection-title\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"collection\",\n      \"id\": \"collection\",\n      \"label\": \"t:settings.collection\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.text\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"placement\",\n      \"label\": \"t:settings.placement\",\n      \"options\": [\n        {\n          \"value\": \"on_image\",\n          \"label\": \"t:options.on_image\"\n        },\n        {\n          \"value\": \"below_image\",\n          \"label\": \"t:options.below_image\"\n        }\n      ]\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.placement == \\\"on_image\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"collection_card_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_card\",\n      \"category\": \"t:categories.collection\",\n      \"settings\": {\n        \"collection\": \"\",\n        \"placement\": \"below_image\"\n      },\n      \"blocks\": {\n        \"collection-card-image\": {\n          \"type\": \"_collection-card-image\",\n          \"static\": true\n        },\n        \"collection-title\": {\n          \"type\": \"collection-title\",\n          \"settings\": {\n            \"type_preset\": \"h4\"\n          }\n        }\n      },\n      \"block_order\": [\"collection-title\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/collection-title.liquid",
    "content": "{% if closest.collection == blank %}\n  {% assign text = 'placeholders.collection_title' | t %}\n  {% assign collection_title = '<p>' | append: text | append: '</p>' %}\n  {% render 'text', fallback_text: collection_title, block: block %}\n{% elsif closest.collection != blank %}\n  {% assign collection_title = '<p>' | append: closest.collection.title | append: '</p>' %}\n  {% render 'text', fallback_text: collection_title, block: block %}\n{% endif %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_title\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_collection_title\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_title\",\n      \"category\": \"t:categories.collection\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/comparison-slider.liquid",
    "content": "<script\n  src=\"{{ 'comparison-slider.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% liquid\n  assign ratio = 1\n\n  case block.settings.image_ratio\n    when 'landscape'\n      assign ratio = '16 / 9'\n    when 'portrait'\n      assign ratio = '4 / 5'\n    when 'adapt'\n      if block.settings.before_image\n        assign ratio = block.settings.before_image.aspect_ratio\n      elsif block.settings.after_image\n        assign ratio = block.settings.after_image.aspect_ratio\n      endif\n  endcase\n\n  if ratio == 0 or ratio == null\n    assign ratio = 1\n  endif\n%}\n\n<comparison-slider-component\n  class=\"comparison-slider comparison-slider--{{ block.settings.slider_style }} spacing-style size-style border-style{% if block.settings.inherit_color_scheme == false %} color-{{ block.settings.color_scheme }}{% endif %}\"\n  style=\"--ratio: {{ ratio }}; --text-background-color: {{ block.settings.text_background_color }}; --text-corner-radius: {{ block.settings.text_corner_radius }}px; {% render 'spacing-style', settings: block.settings %} {% render 'size-style', settings: block.settings %} {% render 'border-override', settings: block.settings %}\"\n  {{ block.shopify_attributes }}\n>\n  <div class=\"comparison-slider__container\">\n    <div\n      class=\"comparison-slider__media-wrapper\"\n      ref=\"mediaWrapper\"\n      data-comparison-slider\n      data-orientation=\"{{ block.settings.slider_style }}\"\n      {% if block.settings.show_text %}\n        {% if block.settings.slider_style == 'horizontal' %}\n          data-text-position=\"{{ block.settings.text_position_horizontal }}\"\n        {% else %}\n          data-text-position=\"{{ block.settings.text_position_vertical }}\"\n        {% endif %}\n      {% endif %}\n    >\n      <div class=\"comparison-slider__layer comparison-slider__layer--before\">\n        {%- if block.settings.before_image != blank -%}\n          {{\n            block.settings.before_image\n            | image_url: width: 3840\n            | image_tag:\n              loading: 'lazy',\n              class: 'before-image',\n              alt: block.settings.before_image.alt,\n              sizes: 'auto, 100vw',\n              width: block.settings.before_image.width,\n              height: block.settings.before_image.height,\n              ref: 'beforeImage'\n          }}\n        {%- else -%}\n          <div\n            class=\"comparison-slider__placeholder before-image\"\n            ref=\"beforeImage\"\n          >\n            {{ 'product-apparel-1' | placeholder_svg_tag }}\n          </div>\n        {%- endif -%}\n\n        {% if block.settings.show_text and block.settings.before_text != blank %}\n          <div class=\"comparison-slider__text comparison-slider__text--before{% if block.settings.text_background %} comparison-slider__text--with-bg{% endif %}\">\n            <div class=\"{{ block.settings.text_preset | default: 'h6' }}\">{{ block.settings.before_text }}</div>\n          </div>\n        {% endif %}\n      </div>\n\n      <div class=\"comparison-slider__layer comparison-slider__layer--after\">\n        {%- if block.settings.after_image != blank -%}\n          {{\n            block.settings.after_image\n            | image_url: width: 3840\n            | image_tag:\n              loading: 'lazy',\n              class: 'after-image',\n              alt: block.settings.after_image.alt,\n              sizes: 'auto, 100vw',\n              width: block.settings.after_image.width,\n              height: block.settings.after_image.height,\n              ref: 'afterImage'\n          }}\n        {%- else -%}\n          <div\n            class=\"comparison-slider__placeholder after-image\"\n            ref=\"afterImage\"\n          >\n            {{ 'product-apparel-2' | placeholder_svg_tag }}\n          </div>\n        {%- endif -%}\n\n        {% if block.settings.show_text and block.settings.after_text != blank %}\n          <div class=\"comparison-slider__text comparison-slider__text--after{% if block.settings.text_background %} comparison-slider__text--with-bg{% endif %}\">\n            <div class=\"{{ block.settings.text_preset | default: 'h6' }}\">{{ block.settings.after_text }}</div>\n          </div>\n        {% endif %}\n      </div>\n\n      <div class=\"cs-slider__handle\">\n        <span class=\"cs-slider__chevron\">\n          {{- 'icon-chevron-left.svg' | inline_asset_content -}}\n        </span>\n        <span class=\"cs-slider__chevron\">\n          {{- 'icon-chevron-right.svg' | inline_asset_content -}}\n        </span>\n      </div>\n\n      <input\n        type=\"range\"\n        class=\"cs-slider\"\n        ref=\"slider\"\n        min=\"0\"\n        max=\"100\"\n        value=\"50\"\n        aria-label=\"{{ 'blocks.slider_label' | t }}\"\n        {% if block.settings.slider_style == 'vertical' %}\n          aria-orientation=\"vertical\"\n        {% endif %}\n        on:input=\"/sync\"\n        on:pointerdown=\"/sync\"\n      >\n    </div>\n  </div>\n</comparison-slider-component>\n\n{% stylesheet %}\n  comparison-slider-component {\n    display: block;\n  }\n\n  .comparison-slider {\n    position: relative;\n    overflow: hidden;\n    aspect-ratio: var(--ratio);\n  }\n\n  .comparison-slider:not(:has(img)) {\n    min-width: 25dvh;\n  }\n\n  .comparison-slider__container {\n    position: relative;\n    width: 100%;\n    height: 100%;\n  }\n\n  /* Container and Layout */\n  .comparison-slider__media-wrapper {\n    --compare: 50;\n\n    position: relative;\n    width: 100%;\n    height: 100%;\n    display: grid;\n    grid-template: 1fr / 1fr;\n    overflow: hidden;\n  }\n\n  /* Layer Containers */\n  .comparison-slider__layer {\n    grid-area: 1 / 1;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    transition: clip-path var(--transition-duration, 0s) ease-in-out;\n  }\n\n  .comparison-slider__layer--after {\n    z-index: var(--layer-base);\n  }\n\n  /* Before Layer Clipping (inverse of after layer) */\n  [data-orientation='horizontal'] .comparison-slider__layer--before {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(0 calc((100 - var(--compare)) * 1%) 0 0);\n  }\n\n  [data-orientation='vertical'] .comparison-slider__layer--before {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(0 0 calc(var(--compare) * 1%) 0);\n  }\n\n  /* After Layer Clipping */\n  [data-orientation='horizontal'] .comparison-slider__layer--after {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(0 0 0 calc(var(--compare) * 1%));\n  }\n\n  [data-orientation='vertical'] .comparison-slider__layer--after {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: inset(calc((100 - var(--compare)) * 1%) 0 0 0);\n  }\n\n  /* Images and Placeholders */\n  .before-image,\n  .after-image,\n  .comparison-slider__placeholder {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    aspect-ratio: var(--ratio);\n  }\n\n  .comparison-slider__placeholder {\n    position: absolute;\n    inset: 0;\n  }\n\n  .comparison-slider__placeholder svg {\n    width: 100%;\n    height: 100%;\n    background-color: var(--color-background);\n    fill: var(--color-foreground);\n  }\n\n  /* Range Input (Hidden but Functional) */\n  .cs-slider {\n    position: absolute;\n    inset: 0;\n    z-index: var(--layer-heightened);\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    cursor: inherit;\n    appearance: none;\n  }\n\n  [data-orientation='horizontal'] .cs-slider {\n    cursor: ew-resize;\n  }\n\n  [data-orientation='vertical'] .cs-slider {\n    cursor: ns-resize;\n    writing-mode: vertical-lr;\n    direction: rtl;\n  }\n\n  /* Range Input Thumb */\n  .cs-slider::-webkit-slider-thumb,\n  .cs-slider::-moz-range-thumb {\n    width: var(--button-size);\n    height: var(--button-size);\n    border: 0;\n    background: transparent;\n    cursor: inherit;\n    appearance: none;\n  }\n\n  /* Range Input Track */\n  .cs-slider::-webkit-slider-track,\n  .cs-slider::-moz-range-track {\n    background: transparent;\n    border: 0;\n    appearance: none;\n  }\n\n  /* Visual Slider Elements */\n  .comparison-slider__media-wrapper::before,\n  .comparison-slider__media-wrapper::after {\n    content: '';\n    position: absolute;\n    pointer-events: none;\n    transition: left var(--transition-duration, 0s) ease-in-out, top var(--transition-duration, 0s) ease-in-out;\n    z-index: var(--layer-raised);\n  }\n\n  /* Slider Track Line */\n  .comparison-slider__media-wrapper::after {\n    background: var(--color-background);\n    box-shadow: 0 0 12px 0 rgb(0 0 0 / 0.1);\n  }\n\n  .comparison-slider__media-wrapper::before {\n    background: var(--color-background);\n  }\n\n  .comparison-slider__media-wrapper[data-orientation='horizontal']::after {\n    inset: 0 auto;\n    left: calc(var(--compare) * 1%);\n    width: 4px;\n    transform: translateX(-50%);\n  }\n\n  .comparison-slider__media-wrapper[data-orientation='vertical']::after {\n    inset: auto 0;\n    top: calc((100 - var(--compare)) * 1%);\n    height: 4px;\n    transform: translateY(-50%);\n  }\n\n  /* Slider Handle */\n  .cs-slider__handle {\n    position: absolute;\n    z-index: var(--layer-heightened);\n    pointer-events: none;\n    width: var(--button-size);\n    height: var(--button-size);\n    background: var(--color-background);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    box-shadow: 0 0 12px 0 rgb(0 0 0 / 0.1);\n    transition: left var(--transition-duration, 0s) ease-in-out, top var(--transition-duration, 0s) ease-in-out,\n      gap 0.2s ease-in-out;\n    gap: var(--gap-sm);\n    padding: var(--padding-xs);\n  }\n\n  .comparison-slider__media-wrapper:hover .cs-slider__handle {\n    gap: var(--gap-2xs);\n  }\n\n  .cs-slider__chevron {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  [data-orientation='horizontal'] .cs-slider__handle {\n    top: 50%;\n    left: calc(var(--compare) * 1%);\n    transform: translate(-50%, -50%);\n    flex-direction: row;\n  }\n\n  [data-orientation='vertical'] .cs-slider__handle {\n    left: 50%;\n    top: calc((100 - var(--compare)) * 1%);\n    transform: translate(-50%, -50%) rotate(90deg);\n  }\n\n  /* Text Labels */\n  .comparison-slider__text {\n    position: absolute;\n    padding: var(--padding-xs);\n    pointer-events: none;\n  }\n\n  .comparison-slider__text--with-bg {\n    background: var(--text-background-color);\n    border-radius: var(--text-corner-radius);\n  }\n\n  /* Horizontal: before/after control inline (left/right), position controls block (top/bottom) */\n  [data-orientation='horizontal'] .comparison-slider__text--before {\n    inset-inline-start: var(--padding-sm);\n  }\n\n  [data-orientation='horizontal'] .comparison-slider__text--after {\n    inset-inline-end: var(--padding-sm);\n  }\n\n  [data-orientation='horizontal'][data-text-position='start'] .comparison-slider__text {\n    inset-block-start: var(--padding-sm);\n  }\n\n  [data-orientation='horizontal'][data-text-position='end'] .comparison-slider__text {\n    inset-block-end: var(--padding-sm);\n  }\n\n  /* Vertical: before/after control block (top/bottom), position controls inline (left/right) */\n  [data-orientation='vertical'] .comparison-slider__text--before {\n    inset-block-start: var(--padding-sm);\n  }\n\n  [data-orientation='vertical'] .comparison-slider__text--after {\n    inset-block-end: var(--padding-sm);\n  }\n\n  [data-orientation='vertical'][data-text-position='start'] .comparison-slider__text {\n    inset-inline-start: var(--padding-sm);\n  }\n\n  [data-orientation='vertical'][data-text-position='end'] .comparison-slider__text {\n    inset-inline-end: var(--padding-sm);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.comparison_slider\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"before_image\",\n      \"label\": \"t:settings.image_1\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"after_image\",\n      \"label\": \"t:settings.image_2\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slider_style\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"horizontal\",\n          \"label\": \"t:options.horizontal\"\n        },\n        {\n          \"value\": \"vertical\",\n          \"label\": \"t:options.vertical\"\n        }\n      ],\n      \"default\": \"horizontal\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_text\",\n      \"label\": \"t:settings.text_on_images\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.text\",\n      \"visible_if\": \"{{ block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"before_text\",\n      \"label\": \"t:settings.image_1\",\n      \"visible_if\": \"{{ block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"after_text\",\n      \"label\": \"t:settings.image_2\",\n      \"visible_if\": \"{{ block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_position_horizontal\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"start\",\n      \"visible_if\": \"{{ block.settings.show_text and block.settings.slider_style == \\\"horizontal\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_position_vertical\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"start\",\n      \"visible_if\": \"{{ block.settings.show_text and block.settings.slider_style == \\\"vertical\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"text_background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"text_background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"default\": \"#FFFFFF\",\n      \"visible_if\": \"{{ block.settings.text_background and block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"text_corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.text_background and block.settings.show_text }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit\",\n      \"visible_if\": \"{{ block.settings.image_ratio == 'adapt' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.border\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.comparison_slider\",\n      \"category\": \"t:categories.decorative\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/contact-form-submit-button.liquid",
    "content": "{%- assign block_settings = block.settings -%}\n<button\n  type=\"submit\"\n  class=\"button submit-button size-style {{ block_settings.style_class }}\"\n  style=\"{% render 'size-style', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  {{ block_settings.label }}\n</button>\n\n{% stylesheet %}\n  .submit-button {\n    min-width: max-content;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.submit_button\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"label\",\n      \"label\": \"t:settings.label\",\n      \"default\": \"t:text_defaults.contact_form_button_label\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"style_class\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"button\",\n          \"label\": \"t:options.primary\"\n        },\n        {\n          \"value\": \"button-secondary\",\n          \"label\": \"t:options.secondary\"\n        }\n      ],\n      \"default\": \"button\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/contact-form.liquid",
    "content": "{% capture submit_button %}\n  {% content_for 'block', type: 'contact-form-submit-button', id: 'submit-button' %}\n{% endcapture %}\n\n<div\n  class=\"\n    contact-form\n    spacing-style size-style\n    {% if block.settings.inherit_color_scheme == false %}color-{{ block.settings.color_scheme }}{% endif %}\n  \"\n  style=\"\n    {% render 'spacing-style', settings: block.settings %}\n    {% render 'size-style', settings: block.settings %}\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% assign form_id = block.id | default: section.id | prepend: 'ContactForm-' %}\n  {%- form 'contact', id: form_id, class: 'contact-form__form' -%}\n    <input\n      name=\"contact[id]\"\n      type=\"hidden\"\n      value=\"{{ form_id }}\"\n    >\n\n    {%- if form.errors and form.id == form_id -%}\n      <div\n        class=\"contact-form__error\"\n        tabindex=\"-1\"\n        autofocus\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n\n        {{- form.errors.translated_fields.email | capitalize }}\n        {{ form.errors.messages.email -}}\n      </div>\n    {%- endif -%}\n\n    {%- if form.posted_successfully? and form.id == form_id -%}\n      <div\n        class=\"contact-form__success\"\n        tabindex=\"-1\"\n        autofocus\n      >\n        {{- 'icon-checkmark.svg' | inline_asset_content -}}\n        {{- 'blocks.contact_form.post_success' | t -}}\n      </div>\n    {%- endif -%}\n\n    <div class=\"contact-form__form-row\">\n      <label\n        class=\"visually-hidden\"\n        for=\"ContactForm-name\"\n      >\n        {{- 'blocks.contact_form.name' | t -}}\n      </label>\n      <input\n        type=\"text\"\n        id=\"ContactForm-name\"\n        class=\"contact-form__input\"\n        autocomplete=\"name\"\n        name=\"contact[name]\"\n        value=\"{% if form.name %}{{ form.name }}{% elsif customer %}{{ customer.name }}{% endif %}\"\n        placeholder=\"{{ 'blocks.contact_form.name' | t }}\"\n      >\n\n      <label\n        class=\"visually-hidden\"\n        for=\"ContactForm-email\"\n      >\n        {{- 'blocks.contact_form.email' | t -}}\n        <span aria-hidden=\"true\">*</span></label\n      >\n      <input\n        type=\"email\"\n        id=\"ContactForm-email\"\n        class=\"contact-form__input\"\n        autocomplete=\"email\"\n        name=\"contact[email]\"\n        spellcheck=\"false\"\n        autocapitalize=\"off\"\n        value=\"{% if form.email %}{{ form.email }}{% elsif customer %}{{ customer.email }}{% endif %}\"\n        aria-required=\"true\"\n        {% if form.errors contains 'email' and form.id == form_id %}\n          aria-invalid=\"true\"\n          aria-describedby=\"ContactForm-email-error\"\n        {% endif %}\n        placeholder=\"{{ 'blocks.contact_form.email' | t }}\"\n      >\n    </div>\n\n    <label\n      class=\"visually-hidden\"\n      for=\"ContactForm-phone\"\n    >\n      {{- 'blocks.contact_form.phone' | t -}}\n    </label>\n    <input\n      type=\"tel\"\n      id=\"ContactForm-phone\"\n      class=\"contact-form__input\"\n      autocomplete=\"tel\"\n      name=\"contact[phone]\"\n      pattern=\"[0-9\\-]*\"\n      value=\"{% if form.phone %}{{ form.phone }}{% elsif customer %}{{ customer.phone }}{% endif %}\"\n      placeholder=\"{{ 'blocks.contact_form.phone' | t }}\"\n    >\n\n    <label\n      class=\"visually-hidden\"\n      for=\"ContactForm-body\"\n    >\n      {{- 'blocks.contact_form.comment' | t -}}\n    </label>\n    <textarea\n      rows=\"10\"\n      id=\"ContactForm-body\"\n      class=\"contact-form__input contact-form__input--textarea\"\n      name=\"contact[body]\"\n      placeholder=\"{{ 'blocks.contact_form.comment' | t }}\"\n    >\n      {{- form.body -}}\n    </textarea>\n\n    {{ submit_button }}\n  {%- endform -%}\n</div>\n\n{% stylesheet %}\n  .contact-form__form {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-md);\n  }\n\n  .contact-form__form-row {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-md);\n\n    @media screen and (min-width: 750px) {\n      flex-direction: row;\n      align-items: center;\n    }\n  }\n\n  .contact-form__input {\n    width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    color: var(--color-input-text);\n    background-color: var(--color-input-background);\n    padding: var(--padding-lg) var(--padding-xl);\n    border-radius: var(--style-border-radius-inputs);\n    border: var(--style-border-width-inputs) solid var(--color-input-border);\n    -webkit-font-smoothing: antialiased;\n  }\n\n  .contact-form__input--textarea {\n    resize: vertical;\n    min-height: var(--input-textarea-min-height);\n  }\n\n  .contact-form__error,\n  .contact-form__success {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.contact_form\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.contact_form\",\n      \"category\": \"t:categories.forms\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/custom-liquid.liquid",
    "content": "<div>\n  {{ block.settings.custom_liquid }}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.custom_liquid\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"liquid\",\n      \"id\": \"custom_liquid\",\n      \"label\": \"t:settings.custom_liquid\",\n      \"info\": \"t:info.custom_liquid\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.custom_liquid\",\n      \"category\": \"t:categories.custom\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/email-signup.liquid",
    "content": "{% assign block_settings = block.settings %}\n<div\n  class=\"email-signup-block size-style spacing-style\"\n  style=\"{% render 'size-style', settings: block_settings %}{% render 'spacing-style', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  {% if block_settings.heading != blank %}\n    <div class=\"email-signup__heading {{ block_settings.heading_preset }}\">\n      {{ block_settings.heading | escape }}\n    </div>\n  {% endif %}\n  {% assign form_id = block.id | prepend: 'EmailSignup-' %}\n  {%- form 'customer', class: 'email-signup__form spacing-style' %}\n    <input\n      name=\"contact[id]\"\n      type=\"hidden\"\n      value=\"{{ form_id }}\"\n    >\n\n    <div\n      class=\"email-signup__input-group {% if block_settings.integrated_button and block_settings.border_style != 'underline' %}email-signup__input-group--integrated{% endif %} {% if block_settings.border_style == 'underline' %}email-signup__input-group--underline{% endif %} {% if block_settings.border_style == 'none' %}email-signup__input-group--no-border{% endif %} {% if block_settings.display_type == 'arrow' %}email-signup__input-group--arrow{% endif %} {% if block_settings.inherit_color_scheme == false %}color-{{ block_settings.color_scheme }}{% endif %}\"\n      style=\"--border-width: {{ block_settings.border_width }}px; --border-radius: {{ block_settings.border_radius }}px;\"\n    >\n      <label\n        for=\"EmailInput-{{ block.id }}\"\n        class=\"visually-hidden\"\n      >\n        {{ 'blocks.email_signup.label' | t }}\n      </label>\n      <input\n        id=\"EmailInput-{{ block.id }}\"\n        class=\"email-signup__input email-signup__input--{{ block_settings.border_style }} {{ block_settings.input_type_preset }} {{ block_settings.border_variation }}\"\n        type=\"email\"\n        name=\"contact[email]\"\n        autocorrect=\"off\"\n        autocapitalize=\"off\"\n        autocomplete=\"email\"\n        placeholder=\"{{ 'blocks.email_signup.placeholder' | t }}\"\n        required\n        {% if form.errors and form.id == form_id %}\n          autofocus\n          aria-invalid=\"true\"\n          aria-describedby=\"Email-signup__message-error-{{ block.id }}\"\n        {% elsif form.posted_successfully? and form.id == form_id %}\n          aria-describedby=\"Email-signup__message-success-{{ block.id }}\"\n        {% endif %}\n      >\n      <button\n        class=\"email-signup__button {% if block_settings.integrated_button or block_settings.border_style == 'underline' %}email-signup__button--integrated{% endif %} email-signup__button--{{ block_settings.display_type }} {{ block_settings.button_type_preset }} {{ block_settings.style_class }} {{ block_settings.style_class }}--{{ block.id }} {% if block_settings.inherit_color_scheme == false %}color-{{ block_settings.color_scheme }}{% endif %}\"\n        {% if block_settings.display_type != 'text' %}\n          aria-label=\"{{ 'actions.sign_up' | t }}\"\n        {% endif %}\n      >\n        {% if block_settings.display_type == 'text' %}\n          {{ block_settings.label }}\n        {% else %}\n          <svg\n            viewBox=\"0 0 20 20\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            focusable=\"false\"\n            aria-hidden=\"true\"\n            class=\"email-signup__button-icon\"\n          >\n            {% render 'icon', icon: 'arrow' %}\n          </svg>\n        {% endif %}\n      </button>\n    </div>\n\n    {%- if form.errors and form.id == form_id -%}\n      <div\n        id=\"Email-signup__message-error-{{ block.id }}\"\n        class=\"email-signup__message\"\n        tabindex=\"-1\"\n      >\n        <svg\n          viewBox=\"0 0 20 20\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          focusable=\"false\"\n          aria-hidden=\"true\"\n          class=\"icon-error\"\n        >\n          {%- render 'icon', icon: 'error'  -%}\n        </svg>\n        {{- form.errors.translated_fields.email | capitalize }}\n        {{ form.errors.messages.email -}}\n      </div>\n    {%- endif -%}\n\n    {%- if form.posted_successfully? and form.id == form_id -%}\n      <div\n        id=\"Email-signup__message-success-{{ block.id }}\"\n        class=\"email-signup__message\"\n        tabindex=\"-1\"\n      >\n        <span class=\"svg-wrapper icon-success\">\n          {{ 'icon-checkmark.svg' | inline_asset_content }}\n        </span>\n        <p class=\"email-signup__message-text\">{{ 'blocks.email_signup.success' | t }}</p>\n      </div>\n    {%- endif -%}\n  {% endform %}\n</div>\n\n{% stylesheet %}\n  .email-signup-block {\n    --arrow-button-size: 58px;\n    --arrow-button-size-integrated: 42px;\n    --arrow-button-size-small: 20px;\n    --arrow-icon-size: 32px;\n    --arrow-icon-size-small: 24px;\n\n    min-width: fit-content;\n\n    @media screen and (max-width: 749px) {\n      width: 100%;\n      min-width: unset;\n    }\n  }\n\n  .email-signup__heading {\n    padding-block: var(--padding-sm);\n  }\n\n  .email-signup__form {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .email-signup__input-group {\n    display: flex;\n    align-items: stretch;\n    background-color: transparent;\n  }\n\n  .email-signup__input-group:not(.email-signup__input-group--integrated):not(.email-signup__input-group--underline) {\n    gap: var(--gap-xs);\n    align-items: center;\n  }\n\n  .email-signup__input-group:not(.email-signup__input-group--arrow):not(.email-signup__input-group--underline):not(\n      .email-signup__input-group--integrated\n    ) {\n    @media screen and (max-width: 749px) {\n      flex-direction: column;\n    }\n  }\n\n  .email-signup__input-group--integrated {\n    border-width: var(--border-width);\n    border-radius: var(--border-radius);\n    border-style: solid;\n    border-color: var(--color-input-border);\n    background-color: var(--color-input-background);\n  }\n\n  .email-signup__input-group--integrated.email-signup__input-group--no-border {\n    border: none;\n  }\n\n  .email-signup__input {\n    flex: 1;\n    min-width: 0;\n    border-width: var(--border-width);\n    border-radius: var(--border-radius);\n    border-style: solid;\n    border-color: var(--color-input-border);\n\n    @media screen and (max-width: 749px) {\n      width: 100%;\n    }\n  }\n\n  .email-signup__input-group--integrated .email-signup__input {\n    background-color: transparent;\n    border: none;\n    border-radius: 0;\n  }\n\n  .email-signup__input.paragraph {\n    color: var(--color-input-text);\n    outline-color: var(--color-input-background);\n  }\n\n  .email-signup__button {\n    white-space: nowrap;\n    padding: 0;\n\n    @media screen and (max-width: 749px) {\n      width: 100%;\n    }\n  }\n\n  .email-signup__input,\n  .email-signup__button--text {\n    padding: var(--padding-lg) var(--padding-3xl);\n  }\n\n  .email-signup__input-group--underline {\n    --box-shadow-color: var(--color-input-border);\n    --box-shadow-multiplier: 1;\n    --box-shadow-focused-multiplier: 1.75;\n\n    box-shadow: 0 calc(var(--border-width) * var(--box-shadow-multiplier)) 0 var(--box-shadow-color);\n    transition: box-shadow var(--animation-values);\n    margin-block-end: calc(var(--border-width) * var(--box-shadow-focused-multiplier));\n\n    &:focus-within {\n      --box-shadow-multiplier: var(--box-shadow-focused-multiplier);\n      --box-shadow-color: var(--color-input-text);\n    }\n  }\n\n  .email-signup__input-group .email-signup__input--underline {\n    color: var(--color-input-text);\n    background-color: transparent;\n    padding: 12px 0;\n    border: none;\n    border-radius: 0;\n\n    &:focus-visible {\n      outline: none;\n    }\n  }\n\n  .email-signup__input::placeholder {\n    color: rgb(var(--color-input-text-rgb) / var(--opacity-70));\n  }\n\n  .email-signup__input-group .email-signup__input--none {\n    color: var(--color-input-text);\n    background-color: var(--color-input-background);\n    border: none;\n  }\n\n  .email-signup__button-icon {\n    color: currentcolor;\n    padding: 5px;\n\n    @media screen and (max-width: 749px) {\n      padding: 0;\n      align-self: center;\n      justify-self: center;\n      width: var(--icon-size-lg);\n      height: var(--icon-size-lg);\n    }\n  }\n\n  .email-signup__button--arrow {\n    width: var(--arrow-button-size-small);\n    height: var(--arrow-button-size-small);\n    padding: 0;\n\n    &:not(.email-signup__button--integrated) {\n      width: var(--arrow-button-size);\n      height: var(--arrow-button-size);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      > .email-signup__button-icon {\n        width: var(--arrow-icon-size);\n        height: var(--arrow-icon-size);\n        padding: 0;\n      }\n    }\n  }\n\n  .email-signup__button--integrated {\n    --button-offset: var(--margin-xs);\n    align-self: stretch;\n    margin: var(--button-offset);\n    flex-shrink: 0;\n\n    @media screen and (max-width: 749px) {\n      width: fit-content;\n    }\n\n    &.email-signup__button--text {\n      padding: 0 var(--padding-3xl);\n    }\n\n    &.email-signup__button--text.button-unstyled {\n      padding: 0 var(--padding-xl);\n    }\n\n    &.button-unstyled {\n      border-radius: var(--border-radius);\n    }\n\n    > .email-signup__button-icon {\n      padding: 0;\n    }\n\n    &.email-signup__button--arrow {\n      width: var(--arrow-button-size-integrated);\n      height: var(--arrow-button-size-integrated);\n      align-self: center;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      > .email-signup__button-icon {\n        width: var(--arrow-icon-size-small);\n        height: var(--arrow-icon-size-small);\n      }\n    }\n  }\n\n  .email-signup__input--underline + .email-signup__button--integrated {\n    margin: 0;\n    align-self: center;\n\n    &.email-signup__button--text {\n      padding-block: 9px;\n    }\n\n    &.email-signup__button--text.button-unstyled {\n      padding-inline: 0;\n    }\n\n    &.button-unstyled {\n      border-radius: 0;\n    }\n\n    &.email-signup__button--arrow {\n      width: var(--arrow-button-size-integrated);\n      height: var(--arrow-button-size-integrated);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      > .email-signup__button-icon {\n        width: var(--arrow-icon-size-small);\n        height: var(--arrow-icon-size-small);\n      }\n    }\n  }\n\n  .email-signup__button:not(.button-unstyled) {\n    background-color: var(--button-background-color);\n    color: var(--button-color);\n    text-transform: var(--button-text-case-primary);\n  }\n\n  .email-signup__button.button-secondary {\n    text-transform: var(--button-text-case-secondary);\n  }\n\n  .email-signup__button.button-unstyled {\n    background-color: transparent;\n    color: var(--color-input-text);\n  }\n\n  .email-signup__button.button-unstyled:hover {\n    color: rgb(var(--color-input-text-rgb) / var(--opacity-70));\n    cursor: pointer;\n  }\n\n  .email-signup__message {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n  }\n\n  .email-signup__message-text {\n    margin: 0;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.email_signup\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.email_signups_create_customer_profiles\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 20,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == \\\"custom\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"primary\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.heading\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"heading\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"heading_preset\",\n      \"label\": \"t:settings.type_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"h3\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.input\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border_style\",\n      \"label\": \"t:settings.border\",\n      \"options\": [\n        {\n          \"value\": \"all\",\n          \"label\": \"t:options.all\"\n        },\n        {\n          \"value\": \"underline\",\n          \"label\": \"t:options.underline\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"all\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"label\": \"t:settings.border_width\",\n      \"min\": 0,\n      \"max\": 4,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border_style != \\\"none\\\" }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border_style != \\\"underline\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"input_type_preset\",\n      \"label\": \"t:settings.type_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"paragraph\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.submit_button\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"style_class\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"button\",\n          \"label\": \"t:options.primary\"\n        },\n        {\n          \"value\": \"button-secondary\",\n          \"label\": \"t:options.secondary\"\n        },\n        {\n          \"value\": \"button-unstyled\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"button\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"display_type\",\n      \"label\": \"t:settings.display\",\n      \"options\": [\n        {\n          \"value\": \"text\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrow\"\n        }\n      ],\n      \"default\": \"text\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"label\",\n      \"label\": \"t:settings.label\",\n      \"default\": \"t:text_defaults.sign_up\",\n      \"visible_if\": \"{{ block.settings.display_type == \\\"text\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"integrated_button\",\n      \"label\": \"t:settings.integrated_button\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.border_style != \\\"underline\\\" }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"button_type_preset\",\n      \"label\": \"t:settings.type_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"paragraph\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\",\n      \"visible_if\": \"{{ block.settings.display_type == \\\"text\\\" }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.email_signup\",\n      \"category\": \"t:categories.forms\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/featured-collection.liquid",
    "content": "<div\n  class=\"featured-collection-block\"\n  {{ block.shopify_attributes }}\n>\n  {% content_for 'blocks' %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.featured_collection\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"collection\",\n      \"id\": \"collection\",\n      \"label\": \"t:settings.collection\"\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/filters.liquid",
    "content": "{%- doc -%}\n  Renders the facet filtering component\n\n  @param {object} results - The search results object\n  @param {number} results_size - The number of products in the search results\n  @param {object} [filters] - The filters object\n{%- enddoc -%}\n\n<script\n  src=\"{{ 'facets.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<script\n  src=\"{{ 'scrolling.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{%- liquid\n  assign block_settings = block.settings\n  assign products_count = results_size\n  assign sort_by = results.sort_by | default: results.default_sort_by\n  assign filters = filters | default: results.filters\n  assign total_active_values = 0\n\n  # Calculate facets margin style\n  capture facets_margin_style\n    echo '--facets-margin: 0px '\n    if block_settings.filter_style == 'vertical'\n      echo block_settings.facets_margin_right | append: 'px' | append: ' 0px'\n    else\n      echo ' 0px ' | append: block_settings.facets_margin_bottom | append: 'px'\n    endif\n    echo ' 0px;'\n  endcapture\n\n  for filter in filters\n    case filter.type\n      when 'price_range'\n        if filter.min_value.value != null or filter.max_value.value != null\n          assign total_active_values = total_active_values | plus: 1\n        endif\n      when 'boolean'\n        if filter.active_values[0].value\n          assign total_active_values = total_active_values | plus: 1\n        endif\n      else\n        assign active_value_count = filter.active_values | size\n        assign total_active_values = total_active_values | plus: active_value_count\n    endcase\n  endfor\n\n  if results.url\n    assign results_url = results.url\n  else\n    assign terms = results.terms | escape\n    assign results_url = '?q=' | append: terms | append: '&options%5Bprefix%5D=last&sort_by=' | append: sort_by\n  endif\n\n  assign is_active = false\n  assign should_show_pane = true\n  if block_settings.filter_style == 'vertical'\n    assign should_show_pane = block_settings.enable_filtering\n  endif\n\n  assign should_use_select_on_mobile = true\n  if block_settings.enable_filtering == false and block_settings.enable_sorting\n    assign should_use_select_on_mobile = false\n  endif\n-%}\n\n{% if block_settings.enable_filtering or block_settings.enable_sorting or block_settings.enable_grid_density %}\n  {% if block_settings.filter_style == 'vertical' %}\n    {% # These elements are always rendered in the horizontal bar that's why we apply the .facets--horizontal class %}\n    <div\n      class=\"facets facets--horizontal facets-controls-wrapper spacing-style\"\n      style=\"{% render 'spacing-style', settings: block_settings %}{% if block_settings.text_label_case == 'uppercase' %} --facet-label-transform: uppercase;{% endif %}\"\n    >\n      {% if block_settings.enable_filtering %}\n        <h4 class=\"facets--filters-title\">{{ 'content.filters' | t }}</h4>\n      {% endif %}\n\n      <div\n        class=\"products-count-wrapper\"\n        data-testid=\"products-count\"\n      >\n        <span title=\"{{ 'content.product_count' | t }}\">\n          {% if products_count > 25000 %}\n            {{- 'content.item_count_cutoff' | t: count: 25000 -}}\n          {% else %}\n            {{- 'content.item_count' | t: count: products_count -}}\n          {% endif %}\n        </span>\n      </div>\n\n      {% if block_settings.enable_sorting %}\n        {% render 'sorting',\n          results: results,\n          sort_by: sort_by,\n          filter_style: block_settings.filter_style,\n          suffix: 'desktop',\n          sort_position: 'desktop',\n          should_use_select_on_mobile: false,\n          section_id: section.id\n        %}\n      {% endif %}\n\n      {% if block_settings.enable_grid_density %}\n        {% render 'grid-density-controls', viewport: 'desktop' %}\n      {% endif %}\n    </div>\n  {% endif %}\n\n  <div\n    class=\"\n      {% if should_show_pane == false %}\n        hidden\n      {% endif %}\n      facets-block-wrapper\n      facets-block-wrapper--{{ block_settings.filter_style }}\n      {%- if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n      {%- if block_settings.filter_width == 'full-width' %} facets-block-wrapper--full-width{% endif %}\n    \"\n    style=\"\n      --grid-column--desktop:\n        {%- if block_settings.filter_style == 'horizontal' -%}\n          var(--{{ block_settings.filter_width }})\n        {%- else -%}\n          2 / var(--facets-vertical-col-width)\n        {%- endif -%};\n      {{ facets_margin_style }}\n      --facets-inner-padding-block: {{ block_settings.padding-block-start }}px {{ block_settings.padding-block-end }}px;\n      --facets-inner-padding-inline: var(--padding-lg);\n    \"\n    {{ block.shopify_attributes }}\n  >\n    <div\n      class=\"facets facets--{{ block_settings.filter_style }} spacing-style\"\n      style=\"{% render 'spacing-style', settings: block_settings %}{% if block_settings.text_label_case == 'uppercase' %} --facet-label-transform: uppercase;{% endif %}\"\n      aria-label=\"{{ 'accessibility.filters' | t }}\"\n    >\n      <facets-form-component\n        class=\"facets__form-wrapper\"\n        section-id=\"{{ section.id }}\"\n        form-style=\"{{ block_settings.filter_style }}\"\n      >\n        <form\n          action=\"{{ results_url }}\"\n          id=\"FacetFiltersForm--{{ section.id }}-desktop\"\n          class=\"facets__form\"\n          ref=\"facetsForm\"\n        >\n          {% if should_show_pane %}\n            {% render 'filter-remove-buttons',\n              filters: filters,\n              results_url: results_url,\n              show_filter_label: block_settings.show_filter_label,\n              should_show_clear_all: true\n            %}\n\n            {% if block_settings.enable_filtering %}\n              {% assign total_active_values = 0 %}\n\n              {% capture rendered_filters %}\n                {%- for filter in filters -%}\n                  {% case filter.type %}\n                    {% when 'price_range' %}\n                      {%- liquid\n                        if filter.min_value.value != null or filter.max_value.value != null\n                          assign total_active_values = total_active_values | plus: 1\n                          assign is_active = true\n                        endif\n\n                        if block_settings.filter_style != 'vertical'\n                          assign should_render_clear = true\n                        else\n                          assign should_render_clear = false\n                        endif\n\n                        render 'price-filter', filter: filter, filter_style: block_settings.filter_style, should_render_clear: should_render_clear\n                      -%}\n                    {% else %}\n                      {% liquid\n                        if filter.active_values.size > 0\n                          assign is_active = true\n                        endif\n\n                        assign active_value_count = filter.active_values | size\n                        assign total_active_values = total_active_values | plus: active_value_count\n                        if block_settings.filter_style != 'vertical'\n                          assign should_render_clear = true\n                        else\n                          assign should_render_clear = false\n                        endif\n                        render 'list-filter', filter: filter, filter_style: block_settings.filter_style, active_value_count: active_value_count, should_render_clear: should_render_clear, show_swatch_label: block_settings.show_swatch_label, sectionId: section.id\n                      %}\n                  {% endcase %}\n                {%- endfor -%}\n              {% endcapture %}\n\n              <div class=\"facets__filters-wrapper\">\n                {% if block_settings.filter_style == 'horizontal' %}\n                  {% liquid\n                    assign more_attributes = 'on:click=\"#filters-drawer/showDialog\"'\n                    if block_settings.text_label_case == 'uppercase'\n                      assign more_attributes = more_attributes | append: ' style=\"--text-transform: uppercase;\"'\n                    endif\n                  %}\n                  {% render 'overflow-list',\n                    class: 'facets__overflow-list',\n                    children: rendered_filters,\n                    more-attributes: more_attributes,\n                    minimum-items: 2,\n                    data-testid: 'horizontal-filters-overflow-list'\n                  %}\n                {% else %}\n                  {{ rendered_filters }}\n                {% endif %}\n              </div>\n\n              {% if block_settings.filter_style == 'horizontal' %}\n                <facet-remove-component\n                  class=\"facets-horizontal-remove {% if is_active %}facets-horizontal-remove--active{% endif %}\"\n                  active-class=\"facets__clear-all-link--active\"\n                  data-url=\"{{ results_url }}\"\n                >\n                  <button\n                    type=\"button\"\n                    class=\"button-unstyled facets__clear-all-link facets__clear-all-link--horizontal {% if is_active %}facets__clear-all-link--active{% endif %}\"\n                    ref=\"clearButton\"\n                    on:click=\"/removeFilter?form=\"\n                    on:keydown=\"/removeFilter?form=\"\n                  >\n                    {{- 'actions.clear_all' | t -}}\n                  </button>\n                </facet-remove-component>\n              {% endif %}\n            {% endif %}\n            {% if block_settings.filter_style == 'horizontal' %}\n              <div\n                class=\"products-count-wrapper\"\n                data-testid=\"products-count\"\n              >\n                <span title=\"{{ 'content.product_count' | t }}\">\n                  {% if products_count > 25000 %}\n                    {{- 'content.item_count_cutoff' | t: count: 25000 -}}\n                  {% else %}\n                    {{- 'content.item_count' | t: count: products_count -}}\n                  {% endif %}\n                </span>\n              </div>\n\n              {% if block_settings.enable_sorting %}\n                {% render 'sorting',\n                  results: results,\n                  sort_by: sort_by,\n                  filter_style: block_settings.filter_style,\n                  suffix: 'desktop',\n                  sort_position: 'desktop',\n                  should_use_select_on_mobile: false,\n                  section_id: section.id\n                %}\n              {% endif %}\n\n              {% if block_settings.enable_grid_density %}\n                {% render 'grid-density-controls', viewport: 'desktop' %}\n              {% endif %}\n            {% endif %}\n          {% endif %}\n        </form>\n      </facets-form-component>\n    </div>\n  </div>\n\n  <div\n    class=\"facets-toggle{% if block_settings.enable_filtering == false %} facets-toggle--no-filters{% endif %}{% if block_settings.filter_style == 'horizontal' and block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\"\n    style=\"\n      --facets-inner-padding-block: {{ block_settings.padding-block-start }}px {{ block_settings.padding-block-end }}px; --facets-inner-padding-inline: var(--padding-lg);\n      {{ facets_margin_style }}\n    \"\n  >\n    {% if block_settings.enable_filtering %}\n      <div class=\"facets-toggle__wrapper\">\n        <button\n          class=\"button facets-toggle__button button-unstyled button-unstyled--with-icon\"\n          on:click=\"#filters-drawer/showDialog\"\n          type=\"button\"\n        >\n          <span class=\"svg-wrapper\">\n            {{ 'icon-filter.svg' | inline_asset_content }}\n          </span>\n\n          {{ 'actions.show_filters' | t }}\n\n          {% if total_active_values > 0 %}\n            <div\n              id=\"filter-count-bubble-toggle\"\n              class=\"filter-count-bubble\"\n              aria-label=\"{{ 'accessibility.filter_count' | t: count: total_active_values }}\"\n            >\n              <span class=\"filter-count-bubble__background\"></span>\n\n              <span\n                ref=\"cartBubbleText\"\n                class=\"filter-count-bubble__text\"\n                aria-hidden=\"true\"\n              >\n                {{ total_active_values }}\n              </span>\n            </div>\n          {% endif %}\n        </button>\n      </div>\n    {% endif %}\n\n    {% liquid\n      assign child_count = 0\n      if block_settings.enable_filtering == false and block_settings.enable_sorting\n        assign child_count = child_count | plus: 1\n      endif\n      if block_settings.enable_grid_density\n        assign child_count = child_count | plus: 1\n      endif\n    %}\n\n    <div class=\"facets-mobile-wrapper facets-controls-wrapper{% if child_count > 1 %} facets-mobile-wrapper--multiple-controls{% endif %}\">\n      {% if block_settings.enable_filtering == false and block_settings.enable_sorting %}\n        <facets-form-component\n          section-id=\"{{ section.id }}\"\n          id=\"FacetFiltersForm--{{ section.id }}-mobile-sorting-only\"\n        >\n          <form\n            action=\"{{ results_url }}\"\n            id=\"FacetFiltersForm--{{ section.id }}-mobile-sorting-only\"\n            ref=\"facetsForm\"\n          >\n            {% render 'sorting',\n              results: results,\n              sort_by: sort_by,\n              filter_style: block_settings.filter_style,\n              sort_position: 'mobile',\n              should_use_select_on_mobile: should_use_select_on_mobile,\n              section_id: section.id\n            %}\n          </form>\n        </facets-form-component>\n      {% endif %}\n      {% if block_settings.enable_grid_density %}\n        {% render 'grid-density-controls', viewport: 'mobile' %}\n      {% endif %}\n    </div>\n  </div>\n{% else %}\n  <div></div>\n{% endif %}\n\n{% if block_settings.enable_filtering %}\n  <dialog-component\n    id=\"filters-drawer\"\n    class=\"facets-block-wrapper facets-block-wrapper--vertical color-{{ settings.drawer_color_scheme }}\"\n  >\n    <dialog\n      ref=\"dialog\"\n      class=\"facets facets--drawer dialog-modal drawer dialog-drawer dialog-drawer--right spacing-style\"\n      style=\"{% render 'spacing-style', settings: block_settings %}\"\n      scroll-lock\n      aria-labelledby=\"filters-drawer-heading\"\n    >\n      {% assign form_component = 'FacetFiltersFormComponent--' | append: section.id | append: '-overflow' %}\n      <facets-form-component\n        class=\"facets__form-wrapper facets-drawer__form-wrapper\"\n        section-id=\"{{ section.id }}\"\n        id=\"{{ form_component }}\"\n      >\n        <form\n          action=\"{{ results_url }}\"\n          id=\"FacetFiltersForm--{{ section.id }}-overflow\"\n          class=\"facets__form\"\n          ref=\"facetsForm\"\n        >\n          <div\n            class=\"facets__title-wrapper\"\n            style=\"--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\"\n          >\n            <h2\n              id=\"filters-drawer-heading\"\n              class=\"facets-drawer__title h3\"\n            >\n              {{ 'blocks.filter' | t }}\n\n              {% if total_active_values > 0 %}\n                <span\n                  class=\"bubble facets__bubble\"\n                  aria-hidden=\"true\"\n                >\n                  {{ total_active_values }}\n                </span>\n                <span class=\"visually-hidden\">\n                  {{ 'accessibility.filter_count' | t: count: total_active_values }}\n                </span>\n              {% endif %}\n            </h2>\n            <button\n              class=\"button facets-drawer__close button-unstyled close-button\"\n              on:click=\"dialog-component/closeDialog\"\n              type=\"button\"\n            >\n              <span\n                class=\"svg-wrapper svg-wrapper--small\"\n                title=\"{{ 'actions.close' | t }}\"\n              >\n                {{ 'icon-close.svg' | inline_asset_content }}\n              </span>\n            </button>\n          </div>\n\n          <scroll-hint\n            class=\"facets-drawer__filters\"\n          >\n            {% if block_settings.enable_filtering %}\n              {% render 'filter-remove-buttons',\n                filters: filters,\n                results_url: results_url,\n                show_filter_label: block_settings.show_filter_label,\n                should_show_clear_all: false\n              %}\n\n              <div class=\"facets__filters-wrapper\">\n                {% assign total_active_values = 0 %}\n                {% assign is_active = false %}\n\n                {%- for filter in filters -%}\n                  {% case filter.type %}\n                    {% when 'price_range' %}\n                      {%- liquid\n                        if filter.min_value.value != null or filter.max_value.value != null\n                          assign total_active_values = total_active_values | plus: 1\n                          assign is_active = true\n                        endif\n\n                        render 'price-filter', filter: filter, filter_style: 'vertical', should_render_clear: false\n                      -%}\n                    {% else %}\n                      {% liquid\n                        if filter.active_values.size > 0\n                          assign is_active = true\n                        endif\n\n                        assign active_value_count = filter.active_values | size\n                        assign total_active_values = total_active_values | plus: active_value_count\n                        render 'list-filter', filter: filter, filter_style: 'vertical', active_value_count: active_value_count, should_render_clear: false, in_drawer: true, sectionId: section.id\n                      %}\n                  {% endcase %}\n                {%- endfor -%}\n              </div>\n            {% endif %}\n\n            {% if block_settings.enable_sorting %}\n              {% render 'sorting',\n                results: results,\n                sort_by: sort_by,\n                filter_style: block_settings.filter_style,\n                suffix: 'overflow',\n                should_use_select_on_mobile: should_use_select_on_mobile,\n                section_id: section.id\n              %}\n            {% endif %}\n          </scroll-hint>\n        </form>\n      </facets-form-component>\n\n      <div\n        class=\"facets__drawer-actions\"\n      >\n        <facet-remove-component\n          data-url=\"{{ results_url }}\"\n          active-class=\"facets__clear-all--active\"\n        >\n          <button\n            type=\"button\"\n            class=\"button-secondary facets__clear-all{% if is_active %} facets__clear-all--active{% endif %}\"\n            ref=\"clearButton\"\n            on:click=\"/removeFilter?form={{ form_component }}\"\n            on:keydown=\"/removeFilter?form={{ form_component }}\"\n          >\n            {{- 'actions.clear_all' | t -}}\n          </button>\n        </facet-remove-component>\n\n        {% if products_count > 0 %}\n          <button\n            class=\"button facets__see-results\"\n            type=\"button\"\n            on:click=\"dialog-component/closeDialog\"\n          >\n            {{- 'actions.see_items' | t: count: products_count -}}\n          </button>\n        {% endif %}\n      </div>\n    </dialog>\n  </dialog-component>\n{% endif %}\n\n{% stylesheet %}\n  .facets-block-wrapper {\n    @media screen and (min-width: 750px) {\n      margin: var(--facets-margin);\n      grid-column: var(--grid-column--desktop);\n    }\n  }\n\n  .facets-block-wrapper--vertical {\n    @media screen and (min-width: 750px) {\n      grid-column: var(--grid-column--desktop);\n    }\n  }\n\n  .facets-toggle {\n    --icon-offset: -3px;\n\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    height: var(--minimum-touch-target);\n    margin: var(--facets-margin);\n    padding-block: var(--facets-inner-padding-block);\n    padding-inline: var(--facets-inner-padding-inline);\n\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .facets-toggle__wrapper {\n    margin-left: var(--icon-offset);\n  }\n\n  .facets-toggle__button {\n    box-shadow: none;\n\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .filter-count-bubble {\n    position: relative;\n    width: 20px;\n    aspect-ratio: 1;\n    border-radius: 50%;\n    display: grid;\n    line-height: normal;\n    place-content: center;\n    color: var(--color-foreground);\n    border: var(--icon-stroke-width) solid var(--color-background);\n  }\n\n  .facets-mobile__title-wrapper .h3 {\n    margin-block-end: 0;\n    display: inline-flex;\n    align-items: center;\n    gap: var(--gap-xs);\n  }\n\n  .facets-mobile__title-wrapper .filter-count-bubble {\n    width: 22px;\n    height: 22px;\n  }\n\n  .facets-mobile__title-wrapper .filter-count-bubble__text {\n    font-size: var(--font-size--xs);\n  }\n\n  .filter-count-bubble__background {\n    position: absolute;\n    inset: 0;\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\n    border-radius: var(--style-border-radius-50);\n  }\n\n  .filter-count-bubble__text {\n    font-size: 11px;\n    font-weight: var(--font-paragraph--weight);\n    aspect-ratio: 1 / 1;\n  }\n\n  .facets-toggle--no-filters {\n    @media screen and (max-width: 749px) {\n      /* stylelint-disable-next-line declaration-no-important */\n      justify-content: unset !important;\n\n      & > .facets-mobile-wrapper {\n        width: 100%;\n      }\n    }\n  }\n\n  .facets-block-wrapper--vertical + .facets-toggle {\n    @media screen and (max-width: 749px) {\n      margin: 0;\n    }\n  }\n\n  .facets-mobile-wrapper {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-sm);\n    justify-content: flex-end;\n  }\n\n  .facets-mobile-wrapper--multiple-controls {\n    justify-content: space-between;\n  }\n\n  @media screen and (min-width: 750px) {\n    dialog-component.facets-block-wrapper {\n      position: absolute;\n      width: 0;\n      height: 0;\n    }\n  }\n\n  .facets {\n    --facets-form-horizontal-gap: 20px;\n    --facets-horizontal-max-input-wrapper-height: 230px;\n    --facets-upper-z-index: var(--layer-raised);\n    --facets-open-z-index: var(--layer-heightened);\n    --facets-sticky-z-index: var(--layer-sticky);\n    --facets-panel-min-width: 120px;\n    --facets-panel-height: 300px;\n    --facets-grid-panel-width: 300px;\n    --facets-clear-padding: var(--padding-md);\n    --facets-clear-shadow: 0 -4px 14px 0 rgb(var(--color-foreground-rgb) / var(--facets-low-opacity));\n    --facets-input-label-color: rgb(var(--color-input-text-rgb) / var(--opacity-60));\n    --facets-clear-all-min-width: 120px;\n    --facets-see-results-min-width: 55%;\n    --facets-mobile-gap: 22px;\n    --facets-low-opacity: 10%;\n    --facets-hover-opacity: 75%;\n\n    top: auto;\n    bottom: 0;\n    height: var(--drawer-height);\n    max-height: var(--drawer-height);\n    width: var(--drawer-width);\n    max-width: var(--drawer-max-width);\n    box-shadow: none;\n    padding-block: 0;\n\n    &:not(.facets--drawer) {\n      @media screen and (min-width: 750px) {\n        padding-inline: var(--padding-inline-start) var(--padding-inline-end);\n        width: 100%;\n        max-width: 100%;\n      }\n    }\n  }\n\n  .facets--horizontal {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      padding-block: var(--padding-block-start) var(--padding-block-end);\n      display: flex;\n      align-items: center;\n      position: relative;\n      z-index: var(--facets-upper-z-index);\n      border: none;\n      height: auto;\n      top: initial;\n      bottom: initial;\n      max-height: none;\n      width: auto;\n      overflow: visible;\n    }\n  }\n\n  .facets--vertical {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      padding-block: 0 var(--padding-block-end);\n      display: block;\n      position: static;\n      top: auto;\n      bottom: auto;\n      height: auto;\n      max-height: none;\n      width: auto;\n      overflow: visible;\n    }\n  }\n\n  .facets--drawer {\n    border-radius: 0;\n    border-right: var(--style-border-drawer);\n    box-shadow: var(--shadow-drawer);\n    padding-inline: 0;\n  }\n\n  .facets--drawer[open] {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    overflow: hidden;\n  }\n\n  .facets-drawer__form-wrapper {\n    flex: 1 1 auto;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n  }\n\n  .facets-drawer__form-wrapper .facets__form {\n    flex: 1 1 auto;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n  }\n\n  .facets-drawer__filters {\n    flex: 1 1 auto;\n    min-height: 0;\n    overflow-y: auto;\n    overflow-x: hidden;\n    position: relative;\n  }\n\n  .facets-drawer__filters .facets__filters-wrapper,\n  .facets-drawer__filters .filter-remove-buttons,\n  .facets-drawer__filters .sorting-filter-component {\n    overflow: visible;\n  }\n\n  .facets.facets-controls-wrapper {\n    @media screen and (min-width: 750px) {\n      grid-column: column-1 / column-12;\n      color: rgb(var(--color-foreground-rgb) / var(--opacity-70));\n      gap: 0 var(--facets-form-horizontal-gap);\n      padding-bottom: var(--padding-xs);\n    }\n  }\n\n  .facets__inputs {\n    display: flex;\n    flex-direction: column;\n    gap: var(--padding-lg);\n    width: 100%;\n  }\n\n  :is(.facets--drawer, .facets--vertical) .facets__inputs:not(:has(.show-more)) {\n    padding-block-end: var(--padding-sm);\n  }\n\n  /* Facets - Form */\n  .facets__form-wrapper {\n    display: flex;\n    flex-direction: column;\n    color: var(--color-foreground-muted);\n    width: 100%;\n  }\n\n  .facets--horizontal .facets__form-wrapper {\n    @media screen and (min-width: 750px) {\n      flex-direction: row;\n      height: auto;\n    }\n  }\n\n  .facets__form {\n    display: flex;\n    flex-flow: column;\n    width: 100%;\n    height: 100%;\n  }\n\n  .facets--horizontal .facets__form {\n    @media screen and (min-width: 750px) {\n      flex-flow: row nowrap;\n      height: auto;\n    }\n  }\n\n  .facets:not(.facets--drawer) .facets__filters-wrapper {\n    @media screen and (min-width: 750px) {\n      margin-inline-end: var(--margin-md);\n    }\n  }\n\n  .facets--horizontal .facets__filters-wrapper {\n    @media screen and (min-width: 750px) {\n      max-width: 60%;\n      display: flex;\n      flex-wrap: wrap;\n      column-gap: var(--gap-xl);\n      margin-inline-end: 0;\n    }\n  }\n\n  /* Facets - Summary */\n  .facets__summary {\n    --variant-picker-swatch-width: 32px;\n    --variant-picker-swatch-height: 32px;\n    --icon-opacity: 0.5;\n\n    @media screen and (min-width: 750px) {\n      --variant-picker-swatch-width: 26px;\n      --variant-picker-swatch-height: 26px;\n    }\n\n    font-size: var(--font-h5--size);\n    display: flex;\n    justify-content: space-between;\n\n    &:hover {\n      --icon-opacity: 1;\n    }\n  }\n\n  .facets__filters-wrapper:hover .facets__summary,\n  .facets__filters-wrapper:has(.facets__panel[open]) .facets__summary {\n    opacity: var(--facets-hover-opacity);\n  }\n\n  .facets__filters-wrapper .facets__summary:hover,\n  .facets__filters-wrapper .facets__panel[open] .facets__summary {\n    opacity: 1;\n  }\n\n  .facets--horizontal .facets__summary {\n    @media screen and (min-width: 750px) {\n      font-size: var(--font-paragraph--size);\n      justify-content: flex-start;\n      height: var(--minimum-touch-target);\n    }\n  }\n\n  .facets__summary .icon-caret {\n    height: var(--icon-size-xs);\n    width: var(--icon-size-xs);\n    color: rgb(var(--color-foreground-rgb) / var(--icon-opacity));\n    margin-block: var(--margin-2xs);\n    transition: color var(--animation-speed) var(--animation-easing);\n  }\n\n  .facets--drawer .facets__summary .icon-caret {\n    margin-inline-start: var(--margin-2xs);\n  }\n\n  /* Facets - Bubble */\n  .facets__bubble {\n    display: inline-flex;\n    font-family: var(--font-paragraph--family);\n    font-weight: var(--font-paragraph--weight);\n    aspect-ratio: 1 / 1;\n  }\n\n  /* Facets - Inputs */\n  .facets__inputs-wrapper {\n    margin-block: var(--padding-xs) var(--padding-xs);\n  }\n\n  .facets__inputs .show-more {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-xl);\n    margin-block-end: var(--padding-xl);\n  }\n\n  .facets:not(.facets--drawer) .facets__inputs-wrapper {\n    @media screen and (min-width: 750px) {\n      gap: var(--gap-sm);\n    }\n  }\n\n  .facets--horizontal .facets__inputs .show-more {\n    @media screen and (min-width: 750px) {\n      display: contents;\n    }\n  }\n\n  .facets--horizontal .facets__inputs-wrapper {\n    @media screen and (min-width: 750px) {\n      max-height: var(--facets-horizontal-max-input-wrapper-height);\n      scrollbar-width: none;\n      -ms-overflow-style: none;\n      overflow-x: auto;\n      padding: var(--padding-md);\n      margin-block: 0;\n    }\n  }\n\n  .facets--vertical .facets__inputs:has(.show-more) .facets__inputs-wrapper {\n    padding-block: var(--padding-sm);\n    padding-inline: var(--padding-sm);\n    margin-block: calc(var(--padding-sm) * -1);\n    margin-inline: calc(var(--padding-sm) * -1);\n  }\n\n  @media screen and (max-width: 749px) {\n    .facets__inputs:has(.show-more) .facets__inputs-wrapper {\n      padding-block: var(--padding-sm);\n      padding-inline: var(--padding-sm);\n      margin-block: calc(var(--padding-sm) * -1);\n      margin-inline: calc(var(--padding-sm) * -1);\n    }\n  }\n\n  .facets__inputs-wrapper:not(:has(.facets__inputs-list)),\n  .facets__inputs-wrapper .facets__inputs-list {\n    display: flex;\n    gap: var(--facets-mobile-gap);\n    flex-direction: column;\n\n    @media screen and (min-width: 750px) {\n      gap: var(--gap-sm);\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .facets--vertical .facets__inputs-wrapper .facets__inputs-list--swatches {\n      gap: var(--gap-sm);\n    }\n\n    .facets--horizontal\n      .facets__inputs-wrapper\n      .facets__inputs-list--swatches:not(.facets__inputs-list--swatches-grid) {\n      display: grid;\n      grid-template-columns: repeat(var(--swatch-columns, 4), 1fr);\n    }\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--swatches {\n    --facets-mobile-gap: var(--gap-sm);\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--grid {\n    --min-column-width: 20%;\n\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(var(--min-column-width), 1fr));\n    gap: var(--gap-sm);\n\n    @media screen and (min-width: 750px) {\n      --min-column-width: 50px;\n    }\n  }\n\n  .facets-block-wrapper:not(.facets-block-wrapper--vertical) .facets__inputs-list--grid {\n    @media screen and (min-width: 750px) {\n      width: var(--facets-grid-panel-width);\n    }\n  }\n\n  .facets__inputs-wrapper--row:not(:has(.facets__inputs-list)),\n  .facets__inputs-wrapper--row .facets__inputs-list {\n    flex-wrap: wrap;\n    flex-direction: row;\n  }\n\n  .facets__inputs .show-more__button {\n    --show-more-icon-size: 22px;\n    --show-more-gap: 8px;\n\n    gap: var(--show-more-gap);\n\n    @media screen and (min-width: 750px) {\n      --show-more-icon-size: 16px;\n      --show-more-gap: 6px;\n    }\n  }\n\n  .facets__inputs .show-more__button .icon-plus {\n    width: var(--show-more-icon-size);\n    height: var(--show-more-icon-size);\n\n    svg {\n      width: var(--icon-size-xs);\n      height: var(--icon-size-xs);\n    }\n  }\n\n  /* Facets - Panel */\n  .facets__panel {\n    padding: 0 var(--drawer-padding);\n  }\n\n  .facets:not(.facets--drawer) .facets__panel,\n  .facets-controls-wrapper .facets__panel {\n    @media screen and (min-width: 750px) {\n      padding: 0;\n    }\n  }\n\n  .facets--horizontal .facets__panel {\n    @media screen and (min-width: 750px) {\n      position: relative;\n    }\n  }\n\n  .facets-mobile-wrapper .facets__panel-content {\n    border-radius: var(--style-border-radius-popover);\n  }\n\n  .facets-mobile-wrapper {\n    --facets-upper-z-index: var(--layer-raised);\n    --facets-panel-min-width: 120px;\n    --facets-panel-height: 300px;\n  }\n\n  .facets--horizontal .facets__panel-content {\n    @media screen and (min-width: 750px) {\n      border-radius: var(--style-border-radius-popover);\n      position: absolute;\n      top: 100%;\n      width: max-content;\n      min-width: var(--facets-panel-min-width);\n      max-width: var(--facets-panel-width);\n      max-height: var(--facets-panel-height);\n      z-index: var(--facets-upper-z-index);\n      box-shadow: var(--shadow-popover);\n      border: var(--style-border-popover);\n      background-color: var(--color-background);\n      overflow-y: hidden;\n      gap: 0;\n    }\n  }\n\n  :is(.facets--drawer, .facets--vertical) :is(.facets__item, .sorting-filter)::before {\n    content: '';\n    display: block;\n    height: 0;\n    width: calc(100% - var(--drawer-padding) * 2);\n    border-top: var(--style-border-width) solid var(--color-border);\n    margin: 0 auto;\n  }\n\n  @media screen and (min-width: 750px) {\n    .facets:not(.facets--drawer) :is(.facets__item, .sorting-filter)::before {\n      width: 100%;\n    }\n\n    .facets--horizontal .facets__item:not(:first-of-type)::before,\n    .facets--horizontal .sorting-filter::before {\n      content: none;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .facets--vertical .facets__item:not(:first-of-type)::before,\n    .facets--vertical .sorting-filter::before {\n      content: '';\n    }\n  }\n\n  /* Facets - Text */\n  .facets__label,\n  .facets__clear-all-link,\n  .clear-filter {\n    text-decoration-color: transparent;\n    text-decoration-thickness: 0.075em;\n    text-underline-offset: 0.125em;\n    transition: text-decoration-color var(--animation-speed) var(--animation-easing);\n  }\n\n  .facets__clear-all-link {\n    display: none;\n    cursor: pointer;\n    padding: var(--padding-xs);\n    color: var(--button-color);\n    transition: text-decoration-color var(--animation-speed) var(--animation-easing),\n      color var(--animation-speed) var(--animation-easing);\n  }\n\n  .facets__clear-all-link:hover {\n    --button-color: var(--color-primary-hover);\n\n    text-decoration: underline;\n    text-decoration-color: var(--button-color);\n  }\n\n  .facets__clear-all-link--horizontal {\n    height: var(--minimum-touch-target);\n    padding-inline: var(--facets-form-horizontal-gap);\n    min-width: var(--facets-clear-all-min-width);\n  }\n\n  .facets__clear-all-link--active {\n    display: block;\n  }\n\n  .facets__label,\n  .products-count-wrapper {\n    text-transform: var(--facet-label-transform);\n  }\n\n  .clear-filter {\n    background-color: transparent;\n    box-shadow: none;\n    padding: 0;\n  }\n\n  .clear-filter:hover {\n    text-decoration: underline;\n  }\n\n  /* Clear button */\n  .facets__clear {\n    display: none;\n  }\n\n  .facets--horizontal .facets__clear {\n    @media screen and (min-width: 750px) {\n      width: 100%;\n      justify-content: flex-end;\n      padding: 0 var(--facets-clear-padding) var(--facets-clear-padding) 0;\n      cursor: pointer;\n    }\n  }\n\n  .facets__clear--active {\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  /* Facets - Label */\n  .facets__label {\n    color: var(--color-foreground);\n    cursor: pointer;\n    white-space: nowrap;\n\n    @media screen and (min-width: 750px) {\n      margin-inline-end: var(--margin-2xs);\n    }\n  }\n\n  /* Products count */\n  .products-count-wrapper {\n    display: none;\n  }\n\n  .facets--horizontal .products-count-wrapper {\n    @media screen and (min-width: 750px) {\n      display: flex;\n      margin-left: auto;\n      flex-shrink: 0;\n      align-items: center;\n      height: var(--minimum-touch-target);\n    }\n  }\n\n  /* Mobile specific components */\n  .facets__title-wrapper {\n    background-color: var(--color-background);\n    color: var(--color-foreground);\n    position: sticky;\n    top: 0;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding-block: var(--padding-xs);\n    padding-inline-start: var(--drawer-padding);\n    padding-inline-end: var(--padding-2xs);\n    z-index: var(--facets-sticky-z-index);\n  }\n\n  :is(.facets--horizontal, .facets--vertical) .facets__title-wrapper {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .facets-drawer__title {\n    --variant-picker-swatch-width: 32px;\n    --variant-picker-swatch-height: 32px;\n\n    margin: 0;\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n\n    @media screen and (min-width: 750px) {\n      --variant-picker-swatch-width: 26px;\n      --variant-picker-swatch-height: 26px;\n    }\n  }\n\n  .facets-drawer__close {\n    position: relative;\n    top: 0;\n    right: 0;\n    padding: 0;\n    cursor: pointer;\n  }\n\n  /* Status */\n  .facets__status:not(:empty) {\n    width: max-content;\n    display: flex;\n    margin-inline-start: auto;\n    font-weight: 500;\n    color: var(--color-foreground);\n  }\n\n  .facets__panel[open] .facets__status {\n    display: none;\n  }\n\n  .facets--filters-title {\n    margin-block-end: 0;\n    color: var(--color-foreground);\n    height: fit-content;\n\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .facets--horizontal .facets__panel .facets__status:has(:not(:empty)) {\n    @media screen and (min-width: 750px) {\n      display: flex;\n      margin-inline-start: var(--margin-xs);\n      margin-inline-end: var(--margin-xs);\n    }\n  }\n\n  /* Horizontal filter style */\n  .facets--horizontal .facets__form {\n    @media screen and (min-width: 750px) {\n      gap: 0 var(--facets-form-horizontal-gap);\n    }\n  }\n\n  /* Facets - Actions */\n  .facets__drawer-actions {\n    --to-top-gradient-background: linear-gradient(\n      to top,\n      rgb(var(--color-background-rgb) / var(--opacity-90)),\n      rgb(var(--color-background-rgb) / var(--opacity-80)),\n      rgb(var(--color-background-rgb) / var(--opacity-40)),\n      transparent\n    );\n\n    position: sticky;\n    bottom: 0;\n    z-index: var(--facets-sticky-z-index);\n    order: 1;\n    display: flex;\n    flex-shrink: 0;\n    justify-content: space-between;\n    align-items: stretch;\n    gap: var(--gap-sm);\n    padding-block-start: var(--padding-xs);\n    padding-block-end: var(--padding-md);\n    padding-inline: var(--padding-lg);\n    margin-top: auto;\n    background-image: var(--to-top-gradient-background);\n    background-color: var(--color-background);\n  }\n\n  /* Clear all button */\n  .facets__clear-all {\n    display: none;\n    cursor: pointer;\n    min-width: var(--facets-clear-all-min-width);\n    flex-grow: 1;\n    padding-block: var(--padding-lg);\n    color: var(--button-color, inherit);\n  }\n\n  .facets__clear-all--active {\n    display: block;\n    opacity: 1;\n    transform: translateY(0);\n    transition: transform var(--animation-values), opacity var(--animation-values);\n  }\n\n  @starting-style {\n    .facets__clear-all--active {\n      opacity: 0;\n      transform: translateY(100%);\n    }\n  }\n\n  .facets__see-results {\n    min-width: var(--facets-see-results-min-width);\n    flex-grow: 1;\n    padding-block: var(--padding-lg);\n  }\n\n  .facets-horizontal-remove {\n    display: flex;\n    align-items: center;\n  }\n\n  .facets-horizontal-remove--active::before {\n    content: '';\n    border-inline-start: var(--style-border-width) solid var(--color-border);\n    height: var(--font-paragraph--size);\n    position: absolute;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.filters\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_filtering\",\n      \"label\": \"t:settings.enable_filtering\",\n      \"info\": \"t:info.enable_filtering_info\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"filter_style\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"horizontal\",\n          \"label\": \"t:options.horizontal\"\n        },\n        {\n          \"value\": \"vertical\",\n          \"label\": \"t:options.vertical\"\n        }\n      ],\n      \"default\": \"horizontal\",\n      \"visible_if\": \"{{ block.settings.enable_filtering == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"filter_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"centered\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"centered\",\n      \"visible_if\": \"{{ block.settings.enable_filtering == true and block.settings.filter_style == 'horizontal' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_label_case\",\n      \"label\": \"t:settings.text_label_case\",\n      \"options\": [\n        {\n          \"value\": \"default\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"default\",\n      \"visible_if\": \"{{ block.settings.enable_filtering == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_swatch_label\",\n      \"label\": \"t:settings.show_swatch_label\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.enable_filtering == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_filter_label\",\n      \"label\": \"t:settings.show_filter_label\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.enable_filtering == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_sorting\",\n      \"label\": \"t:settings.enable_sorting\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_grid_density\",\n      \"label\": \"t:settings.enable_grid_density\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.margin\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"facets_margin_bottom\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ block.settings.filter_style == 'horizontal' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"facets_margin_right\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 20,\n      \"visible_if\": \"{{ block.settings.filter_style == 'vertical' }}\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/follow-on-shop.liquid",
    "content": "{%- if shop.features.follow_on_shop? -%}\n  <div\n    class=\"spacing-style\"\n    style=\"{% render 'spacing-padding', settings: block.settings %}\"\n    {{ block.shopify_attributes }}\n  >\n    {{ shop | login_button: action: 'follow' }}\n  </div>\n{%- endif -%}\n\n{% schema %}\n{\n  \"name\": \"t:names.follow_on_shop\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.follow_on_shop_eligiblity\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.follow_on_shop\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/footer-copyright.liquid",
    "content": "{% assign block_settings = block.settings %}\n<div\n  class=\"\n    footer-utilities__group-copyright\n    custom-typography\n    {% if block_settings.font_size != \"\" %}custom-font-size{% endif %}\n  \"\n  style=\"{% render 'typography-style', preset: 'custom', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  <span class=\"footer-utilities__text\">\n    &copy; {{ 'now' | date: '%Y' }}\n    {{ shop.name | link_to: routes.root_url -}}\n    {%- if block_settings.show_powered_by -%}\n      , {{ powered_by_link }}\n    {%- endif -%}\n  </span>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.copyright\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_powered_by\",\n      \"label\": \"t:settings.show_powered_by_shopify\",\n      \"default\": true\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.manage_store_name\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        }\n      ],\n      \"default\": \"0.75rem\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.copyright\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/footer-policy-list.liquid",
    "content": "{% if shop.policies.size > 0 %}\n  <anchored-popover-component\n    data-hover-triggered=\"true\"\n  >\n    <button\n      class=\"policy-list-trigger button-unstyled\"\n      popovertarget=\"terms-policies-popover\"\n      popovertargetaction=\"toggle\"\n      ref=\"trigger\"\n      style=\"{% render 'typography-style', preset: 'custom', settings: block.settings %}\"\n      {{ block.shopify_attributes }}\n    >\n      {{ 'content.terms_and_policies' | t }}\n    </button>\n    <div\n      class=\"terms-policies-popover color-{{ settings.popover_color_scheme }}\"\n      id=\"terms-policies-popover\"\n      popover=\"auto\"\n      ref=\"popover\"\n    >\n      <ul\n        class=\"\n          policy_list list-unstyled\n          custom-typography\n          {% if block.settings.font_size != \"\" %}custom-font-size{% endif %}\n        \"\n      >\n        {%- for policy in shop.policies -%}\n          {%- if policy != blank -%}\n            <li>\n              <a\n                href=\"{{ policy.url }}\"\n                class=\"footer-utilities__text\"\n              >\n                {{- policy.title | escape -}}\n              </a>\n            </li>\n          {%- endif -%}\n        {%- endfor -%}\n      </ul>\n    </div>\n  </anchored-popover-component>\n{% endif %}\n\n{% stylesheet %}\n  .policy-list-trigger {\n    anchor-name: --terms-policies-trigger;\n    cursor: pointer;\n    font-size: var(--font-size, 0.75rem);\n    text-transform: var(--text-transform, none);\n  }\n\n  .policy_list {\n    li {\n      border-radius: calc(var(--style-border-radius-popover) - 8px);\n\n      a {\n        color: var(--color-foreground);\n        display: inline-block;\n        padding: 8px;\n        text-align: start;\n        width: 100%;\n        outline-color: #0000;\n        font-size: var(--font-size, 0.75rem);\n        text-transform: var(--text-transform, none);\n      }\n\n      &:is(:hover, :focus-within) {\n        background: rgb(var(--color-foreground-rgb) / 0.15);\n      }\n    }\n  }\n\n  .terms-policies-popover {\n    position-anchor: --terms-policies-trigger;\n    inset: unset;\n    bottom: calc(anchor(top) + 1rem);\n    left: anchor(left);\n    border-radius: var(--style-border-radius-popover);\n    background: linear-gradient(var(--color-background) 0 100%),\n      linear-gradient(rgb(var(--color-background-rgb) / 0.15) 0 100%);\n    background-clip: padding-box, border-box;\n    border: 1px solid #0000;\n    box-shadow: var(--shadow-popover);\n    padding: 8px;\n    margin: 0;\n    opacity: 0;\n    scale: 0.94;\n    translate: 0 6px;\n    transform-origin: 3.9em 100%;\n  }\n\n  .terms-policies-popover.\\:popover-open,\n  .terms-policies-popover:popover-open {\n    opacity: 1;\n    translate: 0 0;\n    scale: 1;\n  }\n\n  @media screen and (max-width: 749px) {\n    .terms-policies-popover {\n      left: anchor(center);\n      transform: translate(-50%, 0);\n      transform-origin: 0% 100%;\n    }\n  }\n\n  @supports not (position-anchor: --account-button-trigger) {\n    .terms-policies-popover {\n      bottom: unset;\n      top: calc(var(--anchor-top) * 1px);\n      left: calc(var(--anchor-left) * 1px);\n      transform: translate(0, calc(-100% - 1.25rem));\n    }\n\n    @media screen and (max-width: 749px) {\n      .terms-policies-popover {\n        left: calc((var(--anchor-left) + (var(--anchor-width) / 2)) * 1px);\n        transform: translate(-50%, calc(-100% - 1.25rem));\n      }\n    }\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .terms-policies-popover {\n      transition-property: display, overlay, opacity, scale, translate;\n      transition-behavior: allow-discrete;\n      transition-duration: 0.3s;\n      transition-timing-function: var(--ease-out-quad);\n    }\n\n    @starting-style {\n      .terms-policies-popover.\\:popover-open,\n      .terms-policies-popover:popover-open {\n        opacity: 0.7;\n        translate: 0 6px;\n        scale: 0.94;\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.policy_list\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.manage_policies\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        }\n      ],\n      \"default\": \"0.75rem\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.policy_list\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/group.liquid",
    "content": "{%- capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}\n\n{% schema %}\n{\n  \"name\": \"t:names.group\",\n  \"tag\": null,\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ block.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ block.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fit\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_height\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ block.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.background_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.block_link\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"placeholder\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.group\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/icon.liquid",
    "content": "{% assign block_settings = block.settings %}\n{% assign icon_block_class = 'icon-block__media icon-block-' | append: block.id %}\n\n{% capture icon %}\n  {% render 'icon-or-image',\n    icon: block_settings.icon,\n    image_upload: block_settings.image_upload,\n    width: block_settings.width,\n    class_name: icon_block_class,\n    attributes: block.shopify_attributes\n  %}\n{% endcapture %}\n\n{%- if block_settings.link != blank -%}\n  <a\n    href=\"{{ block_settings.link }}\"\n    class=\"text-inherit\"\n    {% if block_settings.open_in_new_tab %}\n      target=\"_blank\" rel=\"noopener\"\n    {% endif %}\n  >\n    {{ icon }}\n  </a>\n{%- else -%}\n  {{ icon }}\n{%- endif -%}\n\n{% stylesheet %}\n  .icon-block {\n    display: flex;\n    flex-shrink: 0;\n  }\n\n  .icon-block__media {\n    height: auto;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.icon\",\n  \"class\": \"icon-block\",\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"icon\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"apple\",\n          \"label\": \"t:options.apple\"\n        },\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrow\"\n        },\n        {\n          \"value\": \"banana\",\n          \"label\": \"t:options.banana\"\n        },\n        {\n          \"value\": \"bottle\",\n          \"label\": \"t:options.bottle\"\n        },\n        {\n          \"value\": \"box\",\n          \"label\": \"t:options.box\"\n        },\n        {\n          \"value\": \"carrot\",\n          \"label\": \"t:options.carrot\"\n        },\n        {\n          \"value\": \"chat_bubble\",\n          \"label\": \"t:options.chat_bubble\"\n        },\n        {\n          \"value\": \"check_box\",\n          \"label\": \"t:options.check_box\"\n        },\n        {\n          \"value\": \"clipboard\",\n          \"label\": \"t:options.clipboard\"\n        },\n        {\n          \"value\": \"dairy\",\n          \"label\": \"t:options.dairy\"\n        },\n        {\n          \"value\": \"dairy_free\",\n          \"label\": \"t:options.dairy_free\"\n        },\n        {\n          \"value\": \"dryer\",\n          \"label\": \"t:options.dryer\"\n        },\n        {\n          \"value\": \"eye\",\n          \"label\": \"t:options.eye\"\n        },\n        {\n          \"value\": \"fire\",\n          \"label\": \"t:options.fire\"\n        },\n        {\n          \"value\": \"gluten_free\",\n          \"label\": \"t:options.gluten_free\"\n        },\n        {\n          \"value\": \"heart\",\n          \"label\": \"t:options.heart\"\n        },\n        {\n          \"value\": \"iron\",\n          \"label\": \"t:options.iron\"\n        },\n        {\n          \"value\": \"leaf\",\n          \"label\": \"t:options.leaf\"\n        },\n        {\n          \"value\": \"leather\",\n          \"label\": \"t:options.leather\"\n        },\n        {\n          \"value\": \"lightning_bolt\",\n          \"label\": \"t:options.lightning_bolt\"\n        },\n        {\n          \"value\": \"lipstick\",\n          \"label\": \"t:options.lipstick\"\n        },\n        {\n          \"value\": \"lock\",\n          \"label\": \"t:options.lock\"\n        },\n        {\n          \"value\": \"map_pin\",\n          \"label\": \"t:options.map_pin\"\n        },\n        {\n          \"value\": \"nut_free\",\n          \"label\": \"t:options.nut_free\"\n        },\n        {\n          \"value\": \"pants\",\n          \"label\": \"t:options.pants\"\n        },\n        {\n          \"value\": \"paw_print\",\n          \"label\": \"t:options.paw_print\"\n        },\n        {\n          \"value\": \"pepper\",\n          \"label\": \"t:options.pepper\"\n        },\n        {\n          \"value\": \"perfume\",\n          \"label\": \"t:options.perfume\"\n        },\n        {\n          \"value\": \"plane\",\n          \"label\": \"t:options.plane\"\n        },\n        {\n          \"value\": \"plant\",\n          \"label\": \"t:options.plant\"\n        },\n        {\n          \"value\": \"price_tag\",\n          \"label\": \"t:options.price_tag\"\n        },\n        {\n          \"value\": \"question_mark\",\n          \"label\": \"t:options.question_mark\"\n        },\n        {\n          \"value\": \"recycle\",\n          \"label\": \"t:options.recycle\"\n        },\n        {\n          \"value\": \"return\",\n          \"label\": \"t:options.return\"\n        },\n        {\n          \"value\": \"ruler\",\n          \"label\": \"t:options.ruler\"\n        },\n        {\n          \"value\": \"serving_dish\",\n          \"label\": \"t:options.serving_dish\"\n        },\n        {\n          \"value\": \"shirt\",\n          \"label\": \"t:options.shirt\"\n        },\n        {\n          \"value\": \"shoe\",\n          \"label\": \"t:options.shoe\"\n        },\n        {\n          \"value\": \"silhouette\",\n          \"label\": \"t:options.silhouette\"\n        },\n        {\n          \"value\": \"bluesky\",\n          \"label\": \"t:options.social_bluesky\"\n        },\n        {\n          \"value\": \"facebook\",\n          \"label\": \"t:options.social_facebook\"\n        },\n        {\n          \"value\": \"instagram\",\n          \"label\": \"t:options.social_instagram\"\n        },\n        {\n          \"value\": \"linkedin\",\n          \"label\": \"t:options.social_linkedin\"\n        },\n        {\n          \"value\": \"pinterest\",\n          \"label\": \"t:options.social_pinterest\"\n        },\n        {\n          \"value\": \"snapchat\",\n          \"label\": \"t:options.social_snapchat\"\n        },\n        {\n          \"value\": \"spotify\",\n          \"label\": \"t:options.social_spotify\"\n        },\n        {\n          \"value\": \"threads\",\n          \"label\": \"t:options.social_threads\"\n        },\n        {\n          \"value\": \"tiktok\",\n          \"label\": \"t:options.social_tiktok\"\n        },\n        {\n          \"value\": \"tumblr\",\n          \"label\": \"t:options.social_tumblr\"\n        },\n        {\n          \"value\": \"twitter\",\n          \"label\": \"t:options.social_twitter\"\n        },\n        {\n          \"value\": \"vimeo\",\n          \"label\": \"t:options.social_vimeo\"\n        },\n        {\n          \"value\": \"youtube\",\n          \"label\": \"t:options.social_youtube\"\n        },\n        {\n          \"value\": \"whatsapp\",\n          \"label\": \"t:options.social_whatsapp\"\n        },\n        {\n          \"value\": \"snowflake\",\n          \"label\": \"t:options.snowflake\"\n        },\n        {\n          \"value\": \"star\",\n          \"label\": \"t:options.star\"\n        },\n        {\n          \"value\": \"stopwatch\",\n          \"label\": \"t:options.stopwatch\"\n        },\n        {\n          \"value\": \"truck\",\n          \"label\": \"t:options.truck\"\n        },\n        {\n          \"value\": \"washing\",\n          \"label\": \"t:options.washing\"\n        }\n      ],\n      \"default\": \"apple\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_upload\",\n      \"label\": \"t:settings.image_icon\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 12,\n      \"max\": 200,\n      \"step\": 2,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.icon\",\n      \"category\": \"t:categories.basic\",\n      \"settings\": {\n        \"icon\": \"price_tag\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/image.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign ratio = 1\n\n  case block_settings.image_ratio\n    when 'landscape'\n      assign ratio = '16 / 9'\n    when 'portrait'\n      assign ratio = '4 / 5'\n    when 'adapt'\n      assign ratio = block_settings.image.aspect_ratio\n  endcase\n\n  if ratio == 0 or ratio == null\n    assign ratio = 1\n  endif\n%}\n\n{% capture class %}\n  image-block image-block--{{ block.id }} image-block--height-{{ block_settings.height }} spacing-style size-style\n{% endcapture %}\n\n{% capture style %}\n  --ratio: {{ ratio }};\n  {% render 'size-style', settings: block_settings %}\n  {% render 'spacing-style', settings: block_settings %}\n{% endcapture %}\n\n{% capture image_border_style %}\n  --ratio: {{ ratio }};\n  {% render 'border-override', settings: block_settings %}\n{% endcapture %}\n\n{% liquid\n  assign media_width_desktop = '100vw'\n  assign media_width_mobile = '100vw'\n  assign sizes = 'auto, (min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n  assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n%}\n\n{% capture image %}\n  {%- if block_settings.image -%}\n    {{\n      block_settings.image\n      | image_url: width: 3840\n      | image_tag:\n        width: block_settings.image.width,\n        widths: widths,\n        height: block_settings.image.height,\n        class: 'image-block__image border-style',\n        style: image_border_style,\n        sizes: sizes\n    }}\n  {%- else -%}\n    <div class=\"placeholder-image border-style size-style\" style=\"{{ image_border_style }}\">\n      {{ 'detailed-apparel-1' | placeholder_svg_tag: 'hero__media' }}\n    </div>\n  {%- endif -%}\n{% endcapture %}\n\n{% if block_settings.link == blank %}\n  <div\n    class=\"{{ class }}\"\n    style=\"{{ style }}\"\n    {{ block.shopify_attributes }}\n  >\n    {{ image }}\n  </div>\n{% else %}\n  <a\n    href=\"{{ block_settings.link }}\"\n    class=\"{{ class }}\"\n    style=\"{{ style }}\"\n    {{ block.shopify_attributes }}\n  >\n    {{ image }}\n  </a>\n{% endif %}\n\n{% stylesheet %}\n  .placeholder-image {\n    position: relative;\n    aspect-ratio: var(--ratio);\n    overflow: hidden;\n  }\n\n  .image-block {\n    display: flex;\n\n    /* When the image is nested in a group, section, etc, respect the parent's horizontal alignment */\n    justify-content: var(--horizontal-alignment, 'inline-start');\n  }\n\n  .image-block--height-fill .image-block__image {\n    height: 100%;\n  }\n\n  .image-block__image {\n    object-fit: cover;\n    aspect-ratio: var(--ratio);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.image\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image\",\n      \"label\": \"t:settings.image\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"options\": [\n        {\n          \"value\": \"adapt\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"portrait\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"landscape\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"adapt\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit\",\n      \"visible_if\": \"{{ block.settings.image_ratio == 'adapt' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.image\",\n      \"category\": \"t:categories.basic\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/jumbo-text.liquid",
    "content": "{% render 'jumbo-text' %}\n\n{% schema %}\n{\n  \"name\": \"t:names.jumbo_text\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"id\": \"text\",\n      \"type\": \"textarea\",\n      \"label\": \"t:settings.text\",\n      \"default\": \"t:text_defaults.be_bold\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"heading\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"0.8\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"1.2\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"0.8\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"-0.03em\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"0.03em\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"-0.03em\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"text_effect\",\n      \"label\": \"t:settings.animation\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"blur\",\n          \"label\": \"t:options.blur\"\n        },\n        {\n          \"value\": \"reveal\",\n          \"label\": \"t:options.reveal\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"animation_repeat\",\n      \"label\": \"t:settings.animation_repeat\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.text_effect == \\\"blur\\\" or block.settings.text_effect == \\\"reveal\\\" }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.jumbo_text\",\n      \"category\": \"t:categories.decorative\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/logo.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign image = settings.logo\n\n  if block_settings.inverse and settings.logo_inverse\n    assign image = settings.logo_inverse\n  endif\n%}\n\n{%- if image -%}\n  {% capture logo_image %}\n    {{-\n      image\n      | image_url: width: 3840\n      | image_tag:\n        width: image.width,\n        widths: '240, 352, 832, 1200, 1600, 1920, 2560, 3840',\n        height: image.height,\n        class: 'logo-block__image',\n        alt: shop.name,\n        sizes: '(min-width: 750px) calc(var(--logo-width)), 100vw'\n    -}}\n  {% endcapture %}\n{%- endif -%}\n\n<div\n  class=\"\n    logo-block\n    spacing-style\n  \"\n  style=\"\n    {% if block_settings.unit == 'percent' %}\n      --logo-width: {{ block_settings.percent_width }}%;\n    {% else %}\n      {% if image %}\n        --logo-width: {{ image.width | times: 1.00 | divided_by: image.height | times: block_settings.pixel_height }}px;\n      {% else %}\n        --logo-width: {{ shop.name.size | times: 0.65 }}em;\n        --logo-height: {{ block_settings.pixel_height }}px;\n      {% endif %}\n    {% endif %}\n\n    {% if block_settings.custom_mobile_size %}\n      {% if block_settings.unit_mobile == 'percent' %}\n        --logo-width-mobile: {{ block_settings.percent_width_mobile }}%;\n        --logo-height-mobile: auto;\n      {% else %}\n        {% if image %}\n          --logo-width-mobile: {{ image.width | times: 1.00 | divided_by: image.height | times: block_settings.pixel_height_mobile }}px;\n          {% else %}\n            --logo-width-mobile: {{ shop.name.size | times: 0.65 }}em;\n            --logo-height-mobile: {{ block_settings.pixel_height_mobile }}px;\n        {% endif %}\n      {% endif %}\n    {% endif %}\n    {% render 'spacing-style', settings: block_settings %}\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% if logo_image %}\n    <div class=\"logo-block__image-wrapper\">\n      {{ logo_image }}\n    </div>\n  {% else %}\n    {% render 'jumbo-text', text: shop.name %}\n  {% endif %}\n</div>\n\n{% stylesheet %}\n  .logo-block {\n    width: calc(var(--logo-width) + var(--padding-inline-start) + var(--padding-inline-end));\n    max-width: 100%;\n    max-height: calc(var(--logo-height, 100%) + var(--padding-block-start) + var(--padding-block-end));\n    font-size: var(--logo-height);\n    display: flex;\n\n    @media screen and (max-width: 749px) {\n      max-height: calc(\n        var(--logo-height-mobile, var(--logo-height, 100%)) + var(--padding-block-start) + var(--padding-block-end)\n      );\n      font-size: var(--logo-height-mobile, var(--logo-height));\n      width: calc(\n        var(--logo-width-mobile, var(--logo-width)) + var(--padding-inline-start) + var(--padding-inline-end)\n      );\n    }\n  }\n\n  .logo-block__image-wrapper {\n    display: flex;\n    width: 100%;\n    max-width: 100%;\n    max-height: 100%;\n  }\n\n  .logo-block__image {\n    object-fit: contain;\n    width: 100%;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.logo\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"label\": \"t:settings.use_inverse_logo\",\n      \"id\": \"inverse\",\n      \"default\": false,\n      \"visible_if\": \"{{ settings.logo_inverse }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"heading\",\n      \"visible_if\": \"{{ settings.logo == blank and settings.logo_inverse == blank or block.settings.inverse == false }}\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_logo_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"unit\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 10,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.unit == 'percent' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_height\",\n      \"label\": \"t:settings.height\",\n      \"min\": 16,\n      \"max\": 320,\n      \"step\": 8,\n      \"unit\": \"px\",\n      \"default\": 48,\n      \"visible_if\": \"{{ block.settings.unit == 'pixel' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"custom_mobile_size\",\n      \"label\": \"t:settings.custom_mobile_size\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_size\",\n      \"visible_if\": \"{{ block.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"unit_mobile\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\",\n      \"visible_if\": \"{{ block.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_width_mobile\",\n      \"label\": \"t:settings.width\",\n      \"min\": 10,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.unit_mobile == 'percent' and block.settings.custom_mobile_size == true}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_height_mobile\",\n      \"label\": \"t:settings.height\",\n      \"min\": 16,\n      \"max\": 160,\n      \"step\": 8,\n      \"unit\": \"px\",\n      \"default\": 120,\n      \"visible_if\": \"{{ block.settings.unit_mobile == 'pixel' and block.settings.custom_mobile_size == true}}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.logo\",\n      \"category\": \"t:categories.basic\",\n      \"settings\": {\n        \"unit\": \"pixel\",\n        \"pixel_height\": 48\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/menu.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign menu = block_settings.menu\n  assign heading = block_settings.heading\n  assign color_scheme = block_settings.color_scheme\n  assign show_as_accordion = block_settings.show_as_accordion\n  if show_as_accordion == true and block_settings.accordion_dividers == true\n    assign dividers_enabled = true\n  endif\n%}\n\n{% if menu != blank or heading != blank %}\n  <accordion-custom\n    class=\"\n      menu\n      {% if show_as_accordion == true %} menu--accordion menu--{{ block_settings.accordion_icon }}{% endif %}\n      {% if dividers_enabled == true %} menu--dividers{% endif %}\n    \"\n    data-disable-on-desktop=\"true\"\n    open-by-default-on-desktop\n    {% if show_as_accordion == false %}\n      data-disable-on-mobile=\"true\"\n      open-by-default-on-mobile\n    {% endif %}\n  >\n    <details\n      class=\"\n        menu__details\n        spacing-style\n        {% if block_settings.inherit_color_scheme == false %} color-{{ color_scheme }}{% endif %}\n      \"\n      data-testid=\"menu-details\"\n      style=\"\n        --spacing--size: {{ block_settings.menu_spacing }}px;\n        {% render 'spacing-style', settings: block_settings %}\n      \"\n      {% if show_as_accordion == false %}\n        open\n      {% endif %}\n      {{ block.shopify_attributes }}\n    >\n      <summary class=\"menu__heading{% if heading == blank %} menu__heading--empty{% endif %} {{ block_settings.heading_preset }}\">\n        <span class=\"menu__heading__default\">{{ heading }}</span>\n        <span class=\"menu__heading__accordion\">\n          {{ heading | default: menu.title }}\n          <span class=\"menu__heading__toggle svg-wrapper icon-caret icon-animated\">\n            {{- 'icon-caret.svg' | inline_asset_content -}}\n          </span>\n          <span class=\"menu__heading__toggle svg-wrapper icon-plus\">\n            {{- 'icon-plus.svg' | inline_asset_content -}}\n          </span>\n        </span>\n      </summary>\n\n      <nav\n        class=\"details-content\"\n        {% if heading == blank %}\n          aria-label=\"{{ menu.title | escape }}\"\n        {% endif %}\n      >\n        {% if menu %}\n          <ul class=\"list-unstyled\">\n            {% for link in menu.links %}\n              <li class=\"menu__item {{ block_settings.link_preset }}\">\n                <a href=\"{{ link.url }}\">\n                  {{ link.title }}\n                </a>\n              </li>\n            {% endfor %}\n          </ul>\n        {% endif %}\n      </nav>\n    </details>\n  </accordion-custom>\n{% endif %}\n\n{% stylesheet %}\n  .menu {\n    width: 100%;\n  }\n\n  .menu:not(:has(.menu__heading--empty)) .details-content {\n    margin-block-start: var(--spacing--size);\n  }\n\n  .menu__item + .menu__item {\n    margin-block-start: var(--spacing--size);\n  }\n\n  .menu .menu__heading--empty {\n    display: none;\n  }\n\n  .menu__heading__default {\n    display: contents;\n  }\n\n  .menu__heading__accordion {\n    display: none;\n  }\n\n  @media screen and (max-width: 749px) {\n    /* Always show the fallback heading on mobile when accordion is enabled */\n    .menu--accordion .menu__heading--empty {\n      display: flex;\n    }\n\n    .menu--accordion .menu__heading__accordion {\n      display: contents;\n    }\n\n    .menu--accordion .menu__heading__default {\n      display: none;\n    }\n\n    .menu--accordion .details-content {\n      margin-block-start: var(--spacing--size);\n    }\n\n    .menu--accordion .menu__details {\n      padding-inline: 0;\n    }\n\n    .menu--dividers .menu__details {\n      border-block-end: var(--style-border-width) solid var(--color-border);\n    }\n\n    .menu--dividers .details-content {\n      padding-block-end: var(--padding-sm);\n    }\n  }\n\n  .menu--caret .icon-plus,\n  .menu--plus .icon-caret {\n    display: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.menu\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"link_list\",\n      \"id\": \"menu\",\n      \"label\": \"t:settings.menu\",\n      \"default\": \"main-menu\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"heading\",\n      \"label\": \"t:settings.heading\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"menu_spacing\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_as_accordion\",\n      \"label\": \"t:settings.show_as_accordion\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"accordion_icon\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"caret\",\n          \"label\": \"t:options.caret\"\n        },\n        {\n          \"value\": \"plus\",\n          \"label\": \"t:options.plus\"\n        }\n      ],\n      \"default\": \"caret\",\n      \"visible_if\": \"{{ block.settings.show_as_accordion == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"accordion_dividers\",\n      \"label\": \"t:settings.dividers\",\n      \"default\": false,\n      \"visible_if\": \"{{ block.settings.show_as_accordion == true }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"heading_preset\",\n      \"label\": \"t:settings.heading_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"h3\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"link_preset\",\n      \"label\": \"t:settings.link_preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"paragraph\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.menu\",\n      \"category\": \"t:categories.links\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/page-content.liquid",
    "content": "<rte-formatter>\n  {{ page.content }}\n</rte-formatter>\n\n{% schema %}\n{\n  \"name\": \"t:names.page_content\",\n  \"class\": \"rte\"\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/page.liquid",
    "content": "{% assign block_settings = block.settings %}\n<div\n  class=\"page-block spacing-style{% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\"\n  style=\"{% render 'spacing-padding', settings: block_settings %}{% if block_settings.background %} background-color: {{ block_settings.background_color }};{% endif %}\"\n>\n  {%- if block_settings.page != blank -%}\n    {%- if block_settings.page.title != blank -%}\n      <h2 class=\"page-title\">{{ block_settings.page.title }}</h2>\n    {%- endif -%}\n    {%- if block_settings.page.content != blank -%}\n      <div class=\"rte\">\n        {{ block_settings.page.content }}\n      </div>\n    {%- endif -%}\n  {%- else -%}\n    <h2 class=\"page-title\">{{ 'content.page_placeholder_title' | t }}</h2>\n    <div class=\"rte\">\n      {{ 'content.page_placeholder_content' | t }}\n    </div>\n  {%- endif -%}\n</div>\n\n{% stylesheet %}\n  .page-block {\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    max-height: 100%;\n    width: 100%;\n    height: auto;\n    align-items: flex-start;\n  }\n\n  .page-title {\n    margin-bottom: var(--margin-xl);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.page\",\n  \"settings\": [\n    {\n      \"type\": \"page\",\n      \"id\": \"page\",\n      \"label\": \"t:settings.page\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.page\",\n      \"category\": \"t:categories.basic\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/payment-icons.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n{%- assign block_settings = block.settings -%}\n\n<div\n  class=\"\n    payment-icons\n    spacing-style\n  \"\n  style=\"\n    {% render 'spacing-padding', settings: block_settings %}\n    --icon-gap: {{ block_settings.gap }}px;\n    --alignment: {{ block_settings.horizontal_alignment }};\n  \"\n  {{ block.shopify_attributes }}\n>\n  <span class=\"visually-hidden\">{{ 'blocks.payment_methods' | t }}</span>\n  <ul\n    class=\"payment-icons__list\"\n    role=\"list\"\n  >\n    {%- for type in shop.enabled_payment_types -%}\n      <li class=\"payment-icons__item\">\n        {{ type | payment_type_svg_tag: class: 'icon icon--full-color' }}\n      </li>\n    {%- endfor -%}\n  </ul>\n</div>\n\n{% stylesheet %}\n  .payment-icons {\n    width: 100%;\n  }\n\n  .payment-icons__list {\n    display: flex;\n    align-items: center;\n    justify-content: var(--alignment);\n    flex-wrap: wrap;\n    gap: var(--icon-gap);\n    margin: 0;\n    padding: 0;\n  }\n\n  .payment-icons__item {\n    display: flex;\n    align-items: center;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.payment_icons\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 10\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.payment_icons\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/popup-link.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n<script\n  src=\"{{ 'dialog.js' | asset_url }}\"\n  type=\"module\"\n></script>\n\n<dialog-component\n  class=\"popup-link\"\n  {{ block.shopify_attributes }}\n>\n  <button\n    on:click=\"/showDialog\"\n    class=\"button button-unstyled popup-link__button text-left spacing-style {{ block_settings.type_preset }}\"\n    style=\"{% render 'spacing-style', settings: block_settings %}\"\n  >\n    {{- block_settings.heading }}\n    {{- 'icon-external.svg' | inline_asset_content -}}\n  </button>\n\n  <dialog\n    ref=\"dialog\"\n    class=\"popup-link__content dialog-modal color-{{ settings.popover_color_scheme }}{% if block_settings.behavior == 'drawer' %} popup-link__content--drawer dialog-drawer{% endif %}\"\n    scroll-lock\n    aria-labelledby=\"popup-dialog-heading\"\n  >\n    <h2\n      id=\"popup-dialog-heading\"\n      class=\"visually-hidden\"\n    >\n      {{ block_settings.heading }}\n    </h2>\n    <div class=\"popup-link__inner\">\n      {% content_for 'blocks' %}\n    </div>\n    <button\n      ref=\"closeButton\"\n      on:click=\"/closeDialog\"\n      class=\"button button-unstyled close-button popup-link__close\"\n      aria-label=\"{{ 'accessibility.close_dialog' | t }}\"\n    >\n      {{- 'icon-close.svg' | inline_asset_content -}}\n    </button>\n  </dialog>\n</dialog-component>\n\n{% stylesheet %}\n  .popup-link__button svg {\n    display: inline-block;\n    position: relative;\n    top: var(--margin-2xs);\n  }\n\n  .popup-link__content {\n    box-shadow: var(--shadow-popover);\n    border: var(--style-border-popover);\n    border-radius: var(--style-border-radius-popover);\n    background-color: var(--color-background);\n    padding: var(--padding-4xl) var(--padding-xl) var(--padding-xl);\n    max-width: var(--normal-content-width);\n    max-height: var(--modal-max-height);\n\n    @media screen and (min-width: 750px) {\n      padding: var(--padding-5xl);\n    }\n  }\n\n  .popup-link__content[open] {\n    animation: modalSlideInTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  .popup-link__content.dialog-closing {\n    animation: modalSlideOutTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  .popup-link__content--drawer {\n    position: fixed;\n    border-radius: 0;\n    width: var(--sidebar-width);\n    max-width: 95vw;\n    height: 100%;\n    margin: 0 0 0 auto;\n  }\n\n  /* Needed to ensure the drawer is full height */\n  .popup-link__content--drawer:modal {\n    max-height: 100dvh;\n  }\n\n  .popup-link__close {\n    top: var(--margin-2xs);\n    right: var(--margin-2xs);\n    opacity: 0.8;\n    animation: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.popup_link\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.popup\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"behavior\",\n      \"label\": \"t:settings.behavior\",\n      \"options\": [\n        {\n          \"value\": \"default\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"drawer\",\n          \"label\": \"t:options.drawer\"\n        }\n      ],\n      \"default\": \"default\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.link\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"heading\",\n      \"label\": \"t:settings.text\",\n      \"default\": \"t:text_defaults.popup_link\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.link_padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.popup_link\",\n      \"category\": \"t:categories.links\",\n      \"settings\": {\n        \"heading\": \"t:text_defaults.learn_more\"\n      },\n      \"blocks\": {\n        \"text_pexwUk\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.return_policy\",\n            \"alignment\": \"left\",\n            \"padding-block-end\": 16\n          }\n        },\n        \"text_g7mEh7\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.goal_for_every_customer\",\n            \"alignment\": \"left\"\n          }\n        }\n      },\n      \"block_order\": [\"text_pexwUk\", \"text_g7mEh7\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/price.liquid",
    "content": "{%- liquid\n  assign block_settings = block.settings\n  assign product_resource = closest.product\n  assign selected_variant = product_resource.selected_or_first_available_variant\n-%}\n\n{% liquid\n  if block_settings.type_preset == 'rte' or block_settings.type_preset == 'paragraph'\n    assign is_rte = true\n  endif\n\n  capture text_block_classes\n    if block_settings.width == '100%'\n      echo 'text-block--align-' | append: block_settings.alignment\n      if block_settings.max_width == 'none'\n        echo ' text-block--full-width'\n      endif\n    endif\n    if block_settings.type_preset == 'custom'\n      echo ' custom-typography'\n      if block_settings.font_size != ''\n        echo ' custom-font-size'\n      endif\n      if block_settings.color != ''\n        echo ' custom-color'\n      endif\n    endif\n    if block_settings.background\n      echo ' text-block--background'\n    endif\n    if is_rte\n      echo ' rte'\n    endif\n  endcapture\n%}\n\n<product-price\n  class=\"text-block {{ text_block_classes }} text-{{ block_settings.alignment }} {{ block_settings.type_preset | default: 'paragraph' }} spacing-style\"\n  data-block-id=\"{{ block.id }}\"\n  data-product-id=\"{{ product_resource.id }}\"\n  style=\"\n    {% render 'typography-style', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n    --width: {{ block_settings.width }};\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% render 'price',\n    show_unit_price: true,\n    product_resource: product_resource,\n    show_sale_price_first: block_settings.show_sale_price_first\n  %}\n\n  {% if block_settings.show_tax_info %}\n    <div class=\"tax-note\">\n      {%- if cart.duties_included and cart.taxes_included -%}\n        {{ 'content.duties_and_taxes_included' | t }}\n      {%- elsif cart.taxes_included -%}\n        {{ 'content.taxes_included' | t }}\n      {%- elsif cart.duties_included -%}\n        {{ 'content.duties_included' | t }}\n      {%- endif -%}\n\n      {%- if shop.shipping_policy.body != blank -%}\n        {{ 'content.shipping_policy' | t }}\n      {%- endif -%}\n    </div>\n  {% endif %}\n\n  {%- if selected_variant != blank and block_settings.show_installments -%}\n    <div class=\"installments\">\n      {%- assign product_form_installment_id = 'product-form-installment-' | append: block.id -%}\n      {%- form 'product', product_resource, id: product_form_installment_id, class: 'payment-terms' -%}\n        <input\n          type=\"hidden\"\n          name=\"id\"\n          value=\"{{ selected_variant.id }}\"\n        >\n        {{ form | payment_terms }}\n      {%- endform -%}\n    </div>\n  {%- endif -%}\n</product-price>\n\n{% # theme-check-disable %}\n{% stylesheet %}\n  .tax-note:empty {\n    display: none;\n  }\n\n  form.payment-terms {\n    padding-top: 0.5em;\n    font-size: min(0.85em, var(--font-paragraph--size));\n    font-weight: var(--font-paragraph--weight);\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .installments:not(:has(shopify-payment-terms)) {\n    display: none;\n  }\n\n  /* Volume pricing note should match unit-price styling (small, grey text) */\n  product-price .volume-pricing-note,\n  product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) .volume-pricing-note {\n    display: block;\n    font-family: var(--font-body--family);\n    font-weight: normal;\n    font-size: var(--font-size--xs);\n    line-height: normal;\n    letter-spacing: normal;\n    text-transform: none;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_price\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_price\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_price_in_theme_settings\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_sale_price_first\",\n      \"label\": \"t:settings.show_sale_price_first\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_installments\",\n      \"label\": \"t:settings.installments\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_tax_info\",\n      \"label\": \"t:settings.show_tax_info\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"100%\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width != 'fit-content' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_price\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n{% # theme-check-enable %}\n"
  },
  {
    "path": "blocks/product-card.liquid",
    "content": "{% liquid\n  assign product = block.settings.product\n-%}\n\n{% capture children %}\n  {% content_for 'blocks', closest.product: product %}\n{% endcapture %}\n\n{% render 'product-card', children: children, product: product, block: block %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_card\",\n  \"blocks\": [\n    {\n      \"type\": \"_product-card-group\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"price\"\n    },\n    {\n      \"type\": \"review\"\n    },\n    {\n      \"type\": \"sku\"\n    },\n    {\n      \"type\": \"swatches\"\n    },\n    {\n      \"type\": \"_product-card-gallery\"\n    },\n    {\n      \"type\": \"product-title\"\n    },\n    {\n      \"type\": \"custom-liquid\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_card_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width_desktop\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"fill\",\n          \"label\": \"t:options.fill\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"fill\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.custom_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.width_mobile == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_card\",\n      \"category\": \"t:categories.product\",\n      \"settings\": {\n        \"product_card_gap\": 4\n      },\n      \"blocks\": {\n        \"product-card-gallery\": {\n          \"type\": \"_product-card-gallery\",\n          \"settings\": {\n            \"image_ratio\": \"adapt\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"product_title\": {\n          \"type\": \"product-title\",\n          \"name\": \"t:names.product_title\",\n          \"settings\": {\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"1rem\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"var(--color-foreground)\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 4,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"price\": {\n          \"type\": \"price\",\n          \"name\": \"t:names.product_price\",\n          \"settings\": {\n            \"show_sale_price_first\": true,\n            \"show_installments\": false,\n            \"show_tax_info\": false,\n            \"type_preset\": \"h6\",\n            \"width\": \"100%\",\n            \"alignment\": \"left\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"1rem\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"color\": \"var(--color-foreground)\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        }\n      },\n      \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/product-custom-property.liquid",
    "content": "{%- liquid\n  assign block_settings = block.settings\n  assign property_key = block_settings.property_key | default: block_settings.property_heading | default: block.id\n  assign property_name = 'properties[custom-property]' | replace: 'custom-property', property_key\n\n  assign product_id = closest.product.id\n  assign element_id = 'CustomProperty-product_id-block_id' | replace: 'product_id', product_id | replace: 'block_id', block.id\n  assign product_form_id = 'BuyButtons-ProductForm-section.id' | replace: 'section.id', section.id\n\n  # Determine input type based on max_length for text inputs\n  if block_settings.input_type == 'text'\n    if block_settings.max_length > 45\n      assign actual_input_type = 'textarea'\n    else\n      assign actual_input_type = 'text'\n    endif\n  else\n    assign actual_input_type = block_settings.input_type\n  endif\n-%}\n\n{% capture character_count_label %}\n  <label\n    for=\"{{ element_id }}\"\n    class=\"__character-label\"\n  >\n    <span\n      ref=\"characterCount\"\n      class=\"__character-count\"\n      data-template=\"{{ 'content.product_custom_property_character_count' | t: used_chars: '[current]', max_chars: '[max]' }}\"\n      data-max=\"{{ block_settings.max_length }}\"\n    >\n      {{\n        'content.product_custom_property_character_count'\n        | t: used_chars: 0, max_chars: block_settings.max_length\n      }}\n    </span>\n  </label>\n{% endcapture %}\n\n<div\n  class=\"spacing-style\"\n  style=\"{% render 'spacing-style', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n>\n  {% if block_settings.property_heading != blank %}\n    <p\n      class=\"__heading\"\n    >\n      {{ block_settings.property_heading | escape }}\n    </p>\n  {% endif %}\n\n  {% if block_settings.property_description != blank %}\n    <p\n      class=\"__description\"\n    >\n      {{ block_settings.property_description | escape }}\n    </p>\n  {% endif %}\n\n  <div class=\"__field\">\n    {% if actual_input_type == 'textarea' %}\n      <div class=\"__input-wrapper\">\n        <textarea\n          ref=\"textInput\"\n          on:input=\"/handleInput\"\n          id=\"{{ element_id }}\"\n          name=\"{{ property_name }}\"\n          class=\"field__input custom-property__input\"\n          placeholder=\"{{ block_settings.placeholder_textarea | escape }}\"\n          form=\"{{ product_form_id }}\"\n          maxlength=\"{{ block_settings.max_length }}\"\n          {% if block_settings.required %}\n            required aria-required=\"true\"\n          {% endif %}\n          rows=\"3\"\n        ></textarea>\n        {{ character_count_label }}\n      </div>\n    {% elsif actual_input_type == 'checkbox' %}\n      {% render 'checkbox',\n        name: property_name,\n        value: block_settings.checkbox_label,\n        label: block_settings.checkbox_label,\n        id: element_id,\n        checked: false,\n        events: '',\n        disabled: false,\n        required: block_settings.required,\n        formId: product_form_id\n      %}\n    {% else %}\n      <div class=\"__input-wrapper\">\n        <input\n          ref=\"textInput\"\n          on:input=\"/handleInput\"\n          type=\"text\"\n          id=\"{{ element_id }}\"\n          name=\"{{ property_name }}\"\n          class=\"field__input\"\n          placeholder=\"{{ block_settings.placeholder | escape }}\"\n          form=\"{{ product_form_id }}\"\n          maxlength=\"{{ block_settings.max_length }}\"\n          {% if block_settings.required %}\n            required aria-required=\"true\"\n          {% endif %}\n        >\n        {{ character_count_label }}\n      </div>\n    {% endif %}\n  </div>\n</div>\n\n{% stylesheet %}\n  product-custom-property-component {\n    display: block;\n    width: 100%;\n  }\n\n  product-custom-property-component .__heading {\n    margin-inline: 0;\n    margin-block: 0 var(--padding-sm);\n  }\n\n  product-custom-property-component .__heading:has(+ .__description) {\n    margin-block-end: var(--padding-2xs);\n  }\n\n  product-custom-property-component .__description {\n    font-size: min(0.85em, var(--font-paragraph--size));\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    margin-inline: 0;\n    margin-block: 0 var(--padding-md);\n  }\n\n  product-custom-property-component .__field {\n    position: relative;\n  }\n\n  product-custom-property-component .__input-wrapper {\n    position: relative;\n  }\n\n  product-custom-property-component input,\n  product-custom-property-component textarea {\n    width: 100%;\n    /* stylelint-disable-next-line declaration-no-important */\n    color: var(--color-input-text) !important;\n  }\n\n  /* Add padding for inputs with counter inside */\n  product-custom-property-component .__input-wrapper input {\n    padding-bottom: calc(var(--padding-sm) * 3);\n  }\n\n  product-custom-property-component .__input-wrapper textarea {\n    padding-bottom: calc(var(--padding-sm) * 3);\n    scroll-padding-bottom: calc(var(--padding-sm) * 3);\n  }\n\n  product-custom-property-component textarea {\n    min-height: 80px;\n  }\n\n  @supports (resize: vertical) {\n    @media (hover: hover) and (pointer: fine) {\n      product-custom-property-component textarea {\n        resize: vertical; /* stylelint-disable-line */\n      }\n    }\n  }\n\n  product-custom-property-component .__character-label {\n    position: absolute;\n    left: var(--input-padding-x);\n    bottom: var(--padding-sm);\n    pointer-events: none;\n  }\n\n  product-custom-property-component .__character-count {\n    font-style: italic;\n    /* stylelint-disable-next-line declaration-no-important */\n    color: var(--color-input-text) !important;\n  }\n\n  /* We should consolidate input styles that share the same behavior */\n  .custom-property__input {\n    border: var(--style-border-width-inputs) solid var(--color-input-border);\n    border-radius: var(--style-border-radius-inputs);\n\n    /* this is needed to override the styles from field__input */\n    box-shadow: none;\n\n    &:is(:hover, :focus) {\n      /* this is needed to override the styles from field__input */\n      box-shadow: none;\n    }\n\n    &:focus {\n      /* this is needed to override the styles from field__input */\n      outline: var(--focus-outline-width) solid var(--color-input-background);\n    }\n  }\n{% endstylesheet %}\n\n<script\n  src=\"{{ 'product-custom-property.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_custom_property\",\n  \"tag\": \"product-custom-property-component\",\n  \"settings\": [\n    {\n      \"type\": \"text\",\n      \"id\": \"property_heading\",\n      \"label\": \"t:settings.product_custom_property.heading\",\n      \"default\": \"t:settings.product_custom_property.default_heading\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"property_description\",\n      \"label\": \"t:settings.product_custom_property.description\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"property_key\",\n      \"label\": \"t:settings.product_custom_property.key\",\n      \"default\": \"t:settings.product_custom_property.default_property_key\",\n      \"info\": \"t:settings.product_custom_property.key_info\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:settings.product_custom_property.buyers_input\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"input_type\",\n      \"label\": \"t:settings.product_custom_property.input_type\",\n      \"options\": [\n        {\n          \"value\": \"text\",\n          \"label\": \"t:settings.product_custom_property.input_type_text\"\n        },\n        {\n          \"value\": \"checkbox\",\n          \"label\": \"t:settings.product_custom_property.input_type_checkbox\"\n        }\n      ],\n      \"default\": \"text\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_length\",\n      \"label\": \"t:settings.product_custom_property.max_length\",\n      \"min\": 25,\n      \"max\": 250,\n      \"step\": 5,\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.input_type == \\\"text\\\" }}\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"checkbox_label\",\n      \"label\": \"t:settings.product_custom_property.checkbox_label\",\n      \"default\": \"t:settings.product_custom_property.default_checkbox_label\",\n      \"visible_if\": \"{{ block.settings.input_type == \\\"checkbox\\\" }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"required\",\n      \"label\": \"t:settings.product_custom_property.required\",\n      \"default\": false\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"placeholder\",\n      \"label\": \"t:settings.product_custom_property.placeholder_text\",\n      \"default\": \"t:settings.product_custom_property.default_placeholder\",\n      \"visible_if\": \"{{ block.settings.input_type == \\\"text\\\" and block.settings.max_length <= 45 }}\"\n    },\n    {\n      \"type\": \"textarea\",\n      \"id\": \"placeholder_textarea\",\n      \"label\": \"t:settings.product_custom_property.placeholder_text\",\n      \"default\": \"t:settings.product_custom_property.default_placeholder\",\n      \"visible_if\": \"{{ block.settings.input_type == \\\"text\\\" and block.settings.max_length > 45 }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_custom_property\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/product-description.liquid",
    "content": "{% liquid\n  assign product = block.settings.product\n  if request.visual_preview_mode and product == blank\n    assign product = collections.all.products.first\n    assign text = product.description\n  endif\n%}\n\n{% render 'text', fallback_text: text, block: block %}\n\n{% schema %}\n{\n  \"name\": \"t:names.text\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_description\",\n      \"category\": \"t:categories.product\",\n      \"settings\": {\n        \"text\": \"{{ closest.product.description }}\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/product-inventory.liquid",
    "content": "{%- liquid\n  assign block_settings = block.settings\n  assign variant = closest.product.selected_or_first_available_variant\n  if variant.inventory_management == 'shopify'\n    assign inventory_managed = true\n  endif\n  assign inventory_quantity = variant.inventory_quantity\n  assign inventory_policy = variant.inventory_policy\n  assign threshold = block_settings.inventory_threshold\n\n  if inventory_managed\n    if inventory_quantity > 0\n      if inventory_quantity <= threshold\n        assign status = 'low'\n        assign show_quantity = block_settings.show_inventory_quantity\n        if show_quantity == false\n          assign translation_key = 'content.inventory_low_stock'\n        endif\n      else\n        assign status = 'in_stock'\n        assign translation_key = 'content.inventory_in_stock'\n      endif\n    else\n      if inventory_policy == 'continue'\n        assign status = 'in_stock'\n        assign translation_key = 'content.inventory_in_stock'\n      else\n        assign status = 'out_of_stock'\n        assign translation_key = 'content.inventory_out_of_stock'\n      endif\n    endif\n  else\n    if closest.product.selected_or_first_available_variant != null\n      assign status = 'in_stock'\n      assign translation_key = 'content.inventory_in_stock'\n    else\n      assign status = 'out_of_stock'\n      assign translation_key = 'content.inventory_out_of_stock'\n    endif\n  endif\n-%}\n\n<product-inventory\n  class=\"\n    product-inventory spacing-style\n    {% if block_settings.type_preset != '' %}{{ block_settings.type_preset }}{% endif%}\n  \"\n  style=\"{% render 'spacing-style', settings: block_settings %}\"\n  {{ block.shopify_attributes }}\n  data-product-id=\"{{ product.id }}\"\n>\n  <span\n    class=\"product-inventory__status\"\n  >\n    <span\n      class=\"svg-wrapper product-inventory__icon product-inventory__icon-{{ status }}\"\n    >\n      {{ 'icon-inventory.svg' | inline_asset_content }}\n    </span>\n    <span\n      class=\"product-inventory__text\"\n      id=\"Inventory-{{ section.id }}\"\n      role=\"status\"\n      aria-label=\"{{ 'accessibility.inventory_status' | t }}\"\n    >\n      {%- if show_quantity -%}\n        {{ 'content.inventory_low_stock_show_count' | t: count: inventory_quantity }}\n      {%- else -%}\n        {{- translation_key | t -}}\n      {%- endif -%}\n    </span>\n  </span>\n</product-inventory>\n\n{% stylesheet %}\n  .product-inventory__status {\n    display: flex;\n    align-items: center;\n    font-size: var(--font-paragraph--size);\n    line-height: var(--font-paragraph--line-height);\n    gap: var(--padding-xs);\n  }\n\n  .product-inventory__icon,\n  .product-inventory__icon svg {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n  }\n\n  .product-inventory__icon-low {\n    color: var(--color-lowstock);\n  }\n\n  .product-inventory__icon-in_stock {\n    color: var(--color-instock);\n  }\n\n  .product-inventory__icon-out_of_stock {\n    color: var(--color-outofstock);\n  }\n\n  .product-inventory__icon circle:first-of-type {\n    opacity: 0.3;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_inventory\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_inventory\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"inventory_threshold\",\n      \"label\": \"t:settings.inventory_threshold\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 10\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_inventory_quantity\",\n      \"label\": \"t:settings.show_inventory_quantity\",\n      \"default\": true\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_inventory\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/product-recommendations.liquid",
    "content": "{%- doc -%}\n  Renders product recommendations.\n  {section.id} - identifies the parent section for the Section Rendering API\n\n  https://shopify.dev/docs/api/section-rendering-api\n{%- enddoc -%}\n\n<script\n  src=\"{{ 'product-recommendations.js' | asset_url }}\"\n  type=\"module\"\n></script>\n\n{% liquid\n  assign block_settings = block.settings\n  case block_settings.layout_type\n    when 'grid'\n      assign classes = 'resource-list--grid'\n    when 'carousel'\n      assign classes = 'resource-list--carousel'\n  endcase\n%}\n\n{% comment %}\n  [data-section-id] {section.id} - used to fetch the product recommendations from the Section Rendering API\n{% endcomment %}\n\n<product-recommendations\n  id=\"product-recommendations-{{ block.id }}\"\n  class=\"product-recommendations\"\n  data-url=\"{{ routes.product_recommendations_url }}?limit={{ block_settings.max_products }}\"\n  data-section-id=\"{{ section.id }}\"\n  data-product-id=\"{{ closest.product.id }}\"\n  data-intent=\"{{ block_settings.recommendation_type }}\"\n  data-recommendations-performed=\"{{ recommendations.performed }}\"\n  {% if request.visual_preview_mode %}\n    data-shopify-editor-preview\n  {% endif %}\n  data-testid=\"product-recommendations-block\"\n  {{ block.shopify_attributes }}\n>\n  <div\n    class=\"\n      {% if block_settings.inherit_color_scheme == false %}color-{{ block_settings.color_scheme }}{% endif %}\n      block-resource-list\n      spacing-style\n      gap-style\n    \"\n    style=\"\n      {%  render 'spacing-style', settings: block_settings %}\n      {%  render 'gap-style', value: block_settings.gap %}\n      --resource-list-column-gap-desktop: {{ block_settings.columns_gap }}px;\n      --resource-list-row-gap-desktop: {{ block_settings.rows_gap }}px;\n      --resource-list-columns-mobile: repeat(auto-fill, minmax(9.25rem, 1fr));\n      --border-radius: {{ block_settings.border_radius }}px;\n    \"\n  >\n    <div class=\"section-resource-list__content\">\n      {% content_for 'blocks' %}\n    </div>\n\n    {%- if recommendations.performed or closest.product == blank -%}\n      {% liquid\n        assign products = recommendations.products\n\n        if closest.product == blank\n          # Onboarding mode: Show placeholder products\n          for i in (1..block_settings.max_products)\n            assign products = products | append: ', '\n            assign products = products | split: ','\n          endfor\n        elsif recommendations.performed and recommendations.products_count == 0\n          # No recommendations found, pull from catalog\n          if block_settings.recommendation_type == 'related'\n            assign products = collections.all.products | reject: 'id', closest.product.id\n          elsif block_settings.recommendation_type == 'complementary'\n            # Do not recommend the All collection as complementary products\n            assign products = null\n          endif\n        else\n          assign products = recommendations.products\n        endif\n      %}\n      {% capture list_items %}\n        {% for product in products limit: block_settings.max_products %}\n          <div class=\"resource-list__item\">\n            {% content_for 'block',\n              type: '_product-card',\n              id: 'static-product-card',\n              closest.product: product\n            %}\n          </div>\n          {% if block_settings.layout_type == 'carousel' or block_settings.carousel_on_mobile %}\n            {% unless forloop.last %}\n              <!--@list/split-->\n            {% endunless %}\n          {% endif %}\n        {% endfor %}\n      {% endcapture %}\n\n      {% liquid\n        # Create an array from the list items to be used in the carousel\n        assign slide_content = list_items | strip\n        assign slides = slide_content | split: '<!--@list/split-->'\n\n        if products != blank and products.size > 0\n          assign has_recommendations = 'true'\n        else\n          assign has_recommendations = 'false'\n        endif\n      %}\n\n      <div\n        class=\"\n          resource-list\n          {% if block_settings.carousel_on_mobile and block_settings.layout_type != 'carousel' %}\n            hidden--mobile\n          {% endif %}\n          {{ classes }}\n        \"\n        {% if block_settings.layout_type == 'grid' %}\n          data-testid=\"resource-list-grid\"\n        {% endif %}\n        data-has-recommendations=\"{{ has_recommendations }}\"\n      >\n        {% case block_settings.layout_type %}\n          {% when 'grid' %}\n            {{ list_items }}\n          {% when 'carousel' %}\n            {% render 'resource-list-carousel',\n              ref: 'resourceListCarousel',\n              slides: slides,\n              slide_count: recommendations.products.size,\n              settings: block_settings\n            %}\n        {% endcase %}\n      </div>\n\n      {% if block_settings.carousel_on_mobile and block_settings.layout_type != 'carousel' %}\n        {% liquid\n          assign mobile_carousel_gap = block_settings.columns_gap\n        %}\n        <div\n          class=\"\n            resource-list\n            hidden--desktop\n            force-full-width\n          \"\n          style=\"--resource-list-gap: {{ mobile_carousel_gap }}px;\"\n        >\n          {% render 'resource-list-carousel',\n            ref: 'resourceListCarouselMobile',\n            slides: slides,\n            slide_count: recommendations.products.size,\n            settings: block_settings\n          %}\n        </div>\n      {% endif %}\n    {%- else -%}\n      <div class=\"resource-list resource-list--grid\">\n        {% for i in (1..block_settings.max_products) %}\n          <div\n            class=\"resource-list__item product-recommendations__skeleton-item\"\n            aria-label=\"{{ 'accessibility.loading_product_recommendations' | t }}\"\n          ></div>\n        {% endfor %}\n      </div>\n    {%- endif -%}\n  </div>\n</product-recommendations>\n\n{% stylesheet %}\n  .block-resource-list {\n    display: flex;\n    flex-direction: column;\n    row-gap: var(--gap);\n    min-width: 0;\n    min-height: 0;\n    container-type: inline-size;\n    container-name: resource-list;\n    border-radius: var(--border-radius, 0);\n  }\n\n  .product-recommendations-wrapper {\n    width: 100%;\n  }\n\n  .product-recommendations-wrapper:has(product-recommendations[data-shopify-editor-preview]) {\n    width: 100vw;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_recommendations\",\n  \"class\": \"product-recommendations-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_recommendations\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"recommendation_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"related\",\n          \"label\": \"t:options.related\"\n        },\n        {\n          \"value\": \"complementary\",\n          \"label\": \"t:options.complementary\"\n        }\n      ],\n      \"default\": \"related\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.complementary_products\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.cards_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_style\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ block.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_products\",\n      \"label\": \"t:settings.product_count\",\n      \"min\": 2,\n      \"max\": 10,\n      \"step\": 1,\n      \"default\": 4\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ block.settings.layout_type == 'grid' or block.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ block.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ block.settings.layout_type == 'carousel' or block.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ block.settings.layout_type == 'carousel' or block.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.icons_style != 'none' and block.settings.layout_type == 'carousel' or block.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"inherit_color_scheme\",\n      \"label\": \"t:settings.inherit_color_scheme\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\",\n      \"visible_if\": \"{{ block.settings.inherit_color_scheme == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_recommendations\",\n      \"category\": \"t:categories.product\",\n      \"settings\": {\n        \"recommendation_type\": \"related\",\n        \"border_radius\": 0,\n        \"padding-inline-start\": 0,\n        \"padding-inline-end\": 0\n      },\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.may_also_like\"\n          }\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4\n          },\n          \"blocks\": {\n            \"product-card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"price\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n        }\n      },\n      \"block_order\": [\"heading\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/product-title.liquid",
    "content": "{% if closest.product == blank %}\n  {% assign text = 'placeholders.product_title' | t %}\n  {% assign product_title = '<p>' | append: text | append: '</p>' %}\n  {% render 'text', fallback_text: product_title, block: block %}\n{% else %}\n  {% assign product_title = '<p>' | append: closest.product.title | append: '</p>' %}\n  <a\n    class=\"contents user-select-text\"\n    ref=\"productTitleLink\"\n    href=\"{{ closest.product.selected_or_first_available_variant.url }}\"\n  >\n    {% render 'text', fallback_text: product_title, block: block %}\n  </a>\n{% endif %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_title\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_title\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.title\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/quantity.liquid",
    "content": "{% render 'quantity-selector', product: closest.product %}\n\n{% schema %}\n{\n  \"name\": \"t:names.quantity\",\n  \"tag\": null\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/review.liquid",
    "content": "{% liquid\n  assign block_settings = block.settings\n  assign product = closest.product\n  assign rating = product.metafields.reviews.rating.value.rating\n  assign scale_max = product.metafields.reviews.rating.value.scale_max\n  assign rating_count = product.metafields.reviews.rating_count\n\n  if request.visual_preview_mode and product == blank\n    assign product = collections.all.products.first\n    assign rating = product.metafields.reviews.rating.value | default: 4\n    assign scale_max = product.metafields.reviews.rating.value.scale_max | default: 5\n    assign rating_count = product.metafields.reviews.rating_count | default: 3\n  endif\n-%}\n\n{%- if rating != blank -%}\n  {% liquid\n    assign star_count_rating = scale_max\n    assign decimal_rating = 0\n    assign decimal = rating | modulo: 1\n\n    if decimal >= 0.3 and decimal <= 0.7\n      assign decimal_rating = 0.5\n    elsif decimal > 0.7\n      assign decimal_rating = 1\n    endif\n\n    # this is used so I can tell how many stars I need to fill. When the decimal rating above is 0.5 or 1 I count it as one as the half star is dealt with with a SVG linear gradient.\n    assign decimal_rounded = decimal_rating | ceil\n\n    assign svg_filled_stars = rating | floor | plus: decimal_rounded\n  %}\n\n  <div\n    class=\"rating-wrapper rating-color--{{ block_settings.rating_color }} justify-{{ block_settings.alignment }} size-style\"\n    style=\"{% render 'size-style', settings: block_settings %}\"\n    {{ block.shopify_attributes }}\n  >\n    <svg\n      class=\"visually-hidden\"\n      style=\"width: 0; height: 0;\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 32 32\"\n      role=\"presentation\"\n    >\n      <defs>\n        <linearGradient id=\"half\" x1=\"0\" x2=\"100%\" y1=\"0\" y2=\"0\">\n          <stop offset=\"50%\" stop-color=\"var(--star-fill-color)\"></stop>\n          <stop offset=\"50%\" stop-color=\"{% if block_settings.stars_style == \"outline\" %}transparent{% else %}rgb(var(--star-fill-color-rgb) / var(--opacity-20){% endif %}\"></stop>\n        </linearGradient>\n\n        <symbol xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" id=\"star\">\n          <path d=\"M31.547 12a.848.848 0 00-.677-.577l-9.427-1.376-4.224-8.532a.847.847 0 00-1.516 0l-4.218 8.534-9.427 1.355a.847.847 0 00-.467 1.467l6.823 6.664-1.612 9.375a.847.847 0 001.23.893l8.428-4.434 8.432 4.432a.847.847 0 001.229-.894l-1.615-9.373 6.822-6.665a.845.845 0 00.214-.869z\" />\n        </symbol>\n      </defs>\n    </svg>\n    <div\n      class=\"rating\"\n      style=\"--star-size: calc(var(--font-{{ block_settings.type_preset }}--size) * 1.1);\"\n      aria-label=\"{{ 'accessibility.rating' | t: rating: rating }}\"\n    >\n      {% if block_settings.stars_style == 'single' %}\n        <svg\n          class=\"stars {% if svg_filled_stars > 0 %}filled-star{% endif %}\"\n          viewBox=\"0 0 32 32\"\n          style=\"--empty-star-fill-color: rgb(var(--star-fill-color-rgb) / var(--opacity-20))\"\n          role=\"presentation\"\n        >\n          <use xlink:href=\"#star\"></use>\n        </svg>\n      {% else %}\n        {%- for star in (1..star_count_rating) -%}\n          <svg\n            class=\"stars {% if star <= svg_filled_stars %}filled-star{% endif %}\"\n            viewBox=\"0 0 32 32\"\n            style=\"--empty-star-fill-color:{% if block_settings.stars_style == 'outline' %}transparent{% else %}rgb(var(--star-fill-color-rgb) / var(--opacity-20)){% endif %}\"\n            role=\"presentation\"\n          >\n            <use xlink:href=\"#star\"{% if decimal_rating == 0.5 and star == svg_filled_stars %} fill=\"url(#half)\"{% endif %}></use>\n            {% if block_settings.stars_style == \"outline\" %}\n              <use xlink:href=\"#star\" fill=\"none\" stroke=\"var(--star-fill-color)\" stroke-width=\"var(--icon-stroke-width)\"></use>\n            {% endif %}\n          </svg>\n        {%- endfor -%}\n      {% endif %}\n    </div>\n\n    {%- if block_settings.show_number or block_settings.stars_style == 'single' -%}\n      <p class=\"rating-count {{ block_settings.type_preset }}\">\n        {%- if block_settings.stars_style == 'single' -%}\n          <span aria-hidden=\"true\">{{- rating | round: 1 }}</span>\n        {%- endif -%}\n        {%- if block_settings.stars_style == 'single' and block_settings.show_number -%}\n          <span class=\"rating-count-separator\">|</span>\n        {%- endif -%}\n        {%- if block_settings.show_number -%}\n          {{- rating_count }}\n          {{ 'content.reviews' | t }}\n        {%- endif -%}\n      </p>\n    {%- endif -%}\n  </div>\n{%- endif -%}\n\n{% stylesheet %}\n  .rating-wrapper {\n    gap: var(--gap-xs);\n    min-width: fit-content;\n  }\n\n  .rating-color--primary {\n    --star-fill-color: var(--color-primary);\n    --star-fill-color-rgb: var(--color-primary-rgb);\n    --color: var(--color-primary);\n  }\n\n  .rating-color--foreground {\n    --star-fill-color: var(--color-foreground);\n    --star-fill-color-rgb: var(--color-foreground-rgb);\n    --color: var(--color-foreground);\n  }\n\n  .rating-wrapper,\n  .rating {\n    display: flex;\n    align-items: center;\n  }\n\n  .rating-wrapper.justify-right {\n    flex-direction: row-reverse;\n  }\n\n  .rating {\n    gap: var(--gap-3xs);\n  }\n\n  .rating-wrapper .rating-count,\n  .rating-wrapper .rating-count-separator {\n    color: var(--star-fill-color);\n    margin: 0;\n    white-space: nowrap;\n  }\n\n  .rating-count-separator {\n    opacity: var(--opacity-20);\n    padding-left: calc(var(--padding-xs) / 2);\n    padding-right: var(--padding-xs);\n  }\n\n  .stars {\n    height: var(--star-size);\n    fill: var(--empty-star-fill-color);\n  }\n\n  .filled-star {\n    fill: var(--star-fill-color);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_review_stars\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_review\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.app_required_for_ratings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"stars_style\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"outline\",\n          \"label\": \"t:options.outline\"\n        },\n        {\n          \"value\": \"shaded\",\n          \"label\": \"t:options.shaded\"\n        },\n        {\n          \"value\": \"single\",\n          \"label\": \"t:options.single\"\n        }\n      ],\n      \"default\": \"shaded\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_number\",\n      \"label\": \"t:settings.review_count\",\n      \"default\": true\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"rating_color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"foreground\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"primary\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"primary\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"paragraph\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"100%\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width != 'fit-content' }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_review_stars\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/sku.liquid",
    "content": "{%- liquid\n  assign block_settings = block.settings\n  assign product_resource = closest.product\n  assign selected_variant = product_resource.selected_or_first_available_variant\n  assign sku = selected_variant.sku\n-%}\n\n{% liquid\n  if block_settings.type_preset == 'rte' or block_settings.type_preset == 'paragraph'\n    assign is_rte = true\n  endif\n\n  capture text_block_classes\n    if block_settings.width == '100%'\n      echo 'text-block--align-' | append: block_settings.alignment\n      if block_settings.max_width == 'none'\n        echo ' text-block--full-width'\n      endif\n    endif\n    if block_settings.type_preset == 'custom'\n      echo ' custom-typography'\n      if block_settings.font_size != ''\n        echo ' custom-font-size'\n      endif\n      if block_settings.color != ''\n        echo ' custom-color'\n      endif\n    endif\n    if block_settings.background\n      echo ' text-block--background'\n    endif\n    if is_rte\n      echo ' rte'\n    endif\n  endcapture\n%}\n\n<product-sku-component\n  class=\"text-block {{ text_block_classes }} text-{{ block_settings.alignment }} {{ block_settings.type_preset | default: 'paragraph' }} spacing-style\"\n  data-product-id=\"{{ product_resource.id }}\"\n  style=\"\n    {% if sku == blank %}\n      display: none;\n    {% else %}\n      display: block;\n    {% endif %}\n    {% render 'typography-style', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n    --width: {{ block_settings.width }};\n  \"\n  {{ block.shopify_attributes }}\n>\n  {% render 'sku', product_resource: product_resource %}\n</product-sku-component>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_sku\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_sku\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit_content\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"100%\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width != 'fit-content' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_sku\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/social-links.liquid",
    "content": "<div\n  class=\"social-icons__wrapper\"\n  {{ block.shopify_attributes }}\n>\n  {% liquid\n    assign social_links = 'facebook_url,instagram_url,youtube_url,tiktok_url,twitter_url,threads_url,linkedin_url,bluesky_url,snapchat_url,pinterest_url,tumblr_url,vimeo_url,custom_url' | split: ','\n  %}\n\n  {% for link_key in social_links %}\n    {% liquid\n      assign link_url = block.settings[link_key]\n      assign render_icon = true\n\n      if link_url != blank\n        # Map setting names to platform names for display and icon purposes\n        case link_key\n          when 'facebook_url'\n            assign platform = 'facebook'\n          when 'instagram_url'\n            assign platform = 'instagram'\n          when 'youtube_url'\n            assign platform = 'youtube'\n          when 'tiktok_url'\n            assign platform = 'tiktok'\n          when 'twitter_url'\n            assign platform = 'twitter'\n          when 'threads_url'\n            assign platform = 'threads'\n          when 'linkedin_url'\n            assign platform = 'linkedin'\n          when 'bluesky_url'\n            assign platform = 'bluesky'\n          when 'snapchat_url'\n            assign platform = 'snapchat'\n          when 'pinterest_url'\n            assign platform = 'pinterest'\n          when 'tumblr_url'\n            assign platform = 'tumblr'\n          when 'vimeo_url'\n            assign platform = 'vimeo'\n          when 'custom_url'\n            # For custom URLs, extract domain from URL for platform identification\n            assign platform = link_url | split: '//' | last | remove: 'www.' | split: '.' | first\n            # Special handling for specific platforms\n            case platform\n              when 'x'\n                assign platform = 'twitter'\n              else\n                assign render_icon = false\n            endcase\n        endcase\n\n        # Check if URL has a profile path (more than just the domain)\n        assign url_parts = link_url | split: '//' | last | split: '/'\n        assign has_profile = false\n\n        if url_parts.size > 1 and url_parts[1] != ''\n          assign has_profile = true\n        endif\n\n        unless render_icon\n          assign has_profile = true\n        endunless\n      endif\n    %}\n\n    {% comment %}\n      Only render the social icon if:\n      1. In editor mode (always show, but may be disabled)\n      2. On storefront AND has a valid profile link\n    {% endcomment %}\n    {% if link_url != blank %}\n      {% if request.design_mode or has_profile %}\n        <div\n          class=\"social-icons__icon-wrapper{% unless has_profile %} social-icons__icon-wrapper--disabled{% endunless %}\"\n        >\n          <a\n            href=\"{{ link_url }}\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            aria-label=\"{{ platform | capitalize }}\"\n            {% unless has_profile %}\n              {% if request.design_mode %}\n                onclick=\"return false;\"\n                aria-disabled=\"true\"\n              {% endif %}\n            {% endunless %}\n          >\n            <span class=\"social-icons__icon-label\">{{ platform | capitalize }}</span>\n            {% if render_icon %}\n              <svg\n                class=\"social-icons__icon icon-default\"\n                aria-hidden=\"true\"\n                focusable=\"false\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n                viewBox=\"0 0 20 20\"\n              >\n                {%- render 'icon', icon: platform -%}\n              </svg>\n            {% endif %}\n          </a>\n        </div>\n      {% endif %}\n    {% endif %}\n  {% endfor %}\n</div>\n\n{% stylesheet %}\n  .social-icons__wrapper {\n    display: flex;\n    gap: var(--gap-sm);\n    flex-wrap: wrap;\n    justify-content: center;\n\n    @media screen and (min-width: 750px) {\n      flex-wrap: nowrap;\n      justify-content: flex-start;\n    }\n  }\n\n  .social-icons__icon-wrapper {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: var(--icon-size-lg);\n  }\n\n  .social-icons__icon {\n    display: flex;\n    flex-shrink: 0;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n  }\n\n  .social-icons__icon {\n    display: none;\n  }\n\n  .social-icons__icon-wrapper:has(.social-icons__icon path) {\n    width: var(--icon-size-lg);\n\n    .social-icons__icon {\n      display: block;\n    }\n\n    .social-icons__icon-label {\n      display: none;\n    }\n  }\n\n  /* Disabled state for editor */\n  .shopify-design-mode .social-icons__icon-wrapper--disabled {\n    opacity: var(--disabled-opacity, 0.5);\n    cursor: not-allowed;\n  }\n\n  .shopify-design-mode .social-icons__icon-wrapper--disabled a {\n    pointer-events: none;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.social_media_links\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"url\",\n      \"id\": \"facebook_url\",\n      \"label\": \"t:options.facebook\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"instagram_url\",\n      \"label\": \"t:options.instagram\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"youtube_url\",\n      \"label\": \"t:options.youtube\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"tiktok_url\",\n      \"label\": \"t:options.tiktok\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"twitter_url\",\n      \"label\": \"t:options.twitter\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"threads_url\",\n      \"label\": \"t:options.threads\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"linkedin_url\",\n      \"label\": \"t:options.linkedin\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"bluesky_url\",\n      \"label\": \"t:options.bluesky\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"snapchat_url\",\n      \"label\": \"t:options.snapchat\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"pinterest_url\",\n      \"label\": \"t:options.pinterest\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"tumblr_url\",\n      \"label\": \"t:options.tumblr\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"vimeo_url\",\n      \"label\": \"t:options.vimeo\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"custom_url\",\n      \"label\": \"t:settings.custom_link\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.social_media_links\",\n      \"category\": \"t:categories.footer\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/spacer.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n<div\n  class=\"\n    spacer-block\n    spacer-block--size-{{ block_settings.size }}\n    {% if block_settings.custom_mobile_size %}\n      spacer-block--size-mobile-{{ block_settings.size_mobile }}\n    {% endif %}\n  \"\n  style=\"\n    {% if block_settings.size == 'percent' %}\n      --spacer-size: {{ block_settings.percent_size | divided_by: 100.00 }};\n    {% else %}\n      --spacer-size: {{ block_settings.pixel_size }}px;\n    {% endif %}\n\n    {% if block_settings.custom_mobile_size %}\n      {% if block_settings.size_mobile == 'percent' %}\n        --spacer-size-mobile: {{ block_settings.percent_size_mobile }}%;\n      {% else %}\n        --spacer-size-mobile: {{ block_settings.pixel_size_mobile }}px;\n      {% endif %}\n    {% endif %}\n  \"\n  {{ block.shopify_attributes }}\n  data-testid=\"spacer-block\"\n></div>\n\n{% stylesheet %}\n  /* Fill opposite direction */\n  .layout-panel-flex--column > .spacer-block {\n    width: 100%;\n  }\n\n  .layout-panel-flex--row > .spacer-block {\n    height: 100%;\n  }\n\n  /* Flex - Percent */\n  :is(.layout-panel-flex--row, .layout-panel-flex--column) > .spacer-block--size-percent {\n    flex: var(--spacer-size);\n  }\n\n  /* Flex - Pixel */\n  .layout-panel-flex--row > .spacer-block--size-pixel {\n    width: var(--spacer-size);\n  }\n\n  .layout-panel-flex--column > .spacer-block--size-pixel {\n    height: var(--spacer-size);\n  }\n\n  /* Mobile */\n  @media screen and (max-width: 749px) {\n    /* Percent */\n    .layout-panel-flex--row:not(.mobile-column) > .spacer-block--size-mobile-percent {\n      flex: var(--spacer-size-mobile);\n      height: 100%;\n    }\n\n    .layout-panel-flex--column > .spacer-block--size-mobile-percent,\n    .mobile-column > .spacer-block--size-percent:not(.spacer-block--size-mobile-pixel) {\n      width: 100%;\n      flex: var(--spacer-size-mobile);\n    }\n\n    /* Pixel */\n    .layout-panel-flex--row:not(.mobile-column) > .spacer-block--size-mobile-pixel {\n      width: var(--spacer-size-mobile);\n      height: 100%;\n    }\n\n    .layout-panel-flex--column > .spacer-block--size-mobile-pixel,\n    .mobile-column > .spacer-block--size-mobile-pixel {\n      width: 100%;\n      flex: 0;\n      height: var(--spacer-size-mobile);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.spacer\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"size\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_size\",\n      \"label\": \"t:settings.size\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.size == 'percent' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_size\",\n      \"label\": \"t:settings.size\",\n      \"min\": 0,\n      \"max\": 400,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 120,\n      \"visible_if\": \"{{ block.settings.size == 'pixel' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"custom_mobile_size\",\n      \"label\": \"t:settings.custom_mobile_size\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_size\",\n      \"visible_if\": \"{{ block.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"size_mobile\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\",\n      \"visible_if\": \"{{ block.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_size_mobile\",\n      \"label\": \"t:settings.size\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.size_mobile == 'percent' and block.settings.custom_mobile_size == true}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_size_mobile\",\n      \"label\": \"t:settings.size\",\n      \"min\": 0,\n      \"max\": 400,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 120,\n      \"visible_if\": \"{{ block.settings.size_mobile == 'pixel' and block.settings.custom_mobile_size == true}}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.spacer\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/swatches.liquid",
    "content": "{%- liquid\n  assign block_settings = block.settings\n  for product_option in closest.product.options_with_values\n    assign swatch_count = product_option.values | map: 'swatch' | compact | size\n\n    if swatch_count > 0\n      assign product_has_swatches = true\n    endif\n  endfor\n-%}\n\n{% stylesheet %}\n  product-swatches {\n    width: 100%;\n    display: flex;\n    position: relative;\n    overflow: hidden;\n    gap: 0;\n    flex-shrink: 0;\n  }\n{% endstylesheet %}\n\n{% if product_has_swatches %}\n  <product-swatches\n    data-product-id=\"{{ closest.product.id }}\"\n    data-product-url=\"{{ closest.product.url }}\"\n    style=\"\n      --overflow-list-alignment: {{ block_settings.product_swatches_alignment }};\n      --overflow-list-alignment-mobile: {{ block_settings.product_swatches_alignment_mobile }};\n      --product-swatches-alignment: {% if block_settings.product_swatches_alignment == 'flex-start' %}start{% elsif block_settings.product_swatches_alignment == 'flex-end' %}end{% else %}center{% endif %};\n      --product-swatches-alignment-mobile: {% if block_settings.product_swatches_alignment_mobile == 'flex-start' %}start{% elsif block_settings.product_swatches_alignment_mobile == 'flex-end' %}end{% else %}center{% endif %};\n      --product-swatches-padding-block-start: {{ block_settings.product_swatches_padding_top }}px;\n      --product-swatches-padding-block-end: {{ block_settings.product_swatches_padding_bottom }}px;\n      --product-swatches-padding-inline-start: {{ block_settings.product_swatches_padding_left }}px;\n      --product-swatches-padding-inline-end: {{ block_settings.product_swatches_padding_right }}px;\n    \"\n    {{ block.shopify_attributes }}\n  >\n    {% render 'variant-swatches', product_resource: closest.product %}\n  </product-swatches>\n{% endif %}\n\n{% schema %}\n{\n  \"name\": \"t:names.swatches\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_swatches\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_swatches_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_swatches_alignment_mobile\",\n      \"label\": \"t:settings.alignment_mobile\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\",\n      \"visible_if\": \"{{ block.settings.hide_padding == false }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"hide_padding\",\n      \"label\": \"t:settings.hide_padding\",\n      \"default\": false,\n      \"visible_if\": \"{{ false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_swatches_padding_top\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 4,\n      \"visible_if\": \"{{ block.settings.hide_padding == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_swatches_padding_bottom\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.hide_padding == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_swatches_padding_left\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.hide_padding == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_swatches_padding_right\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ block.settings.hide_padding == false }}\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.swatches\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n{% # theme-check-enable %}\n"
  },
  {
    "path": "blocks/text.liquid",
    "content": "{% render 'text', block: block %}\n\n{% schema %}\n{\n  \"name\": \"t:names.text\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"richtext\",\n      \"id\": \"text\",\n      \"label\": \"t:settings.text\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"fit-content\",\n          \"label\": \"t:options.fit\"\n        },\n        {\n          \"value\": \"100%\",\n          \"label\": \"t:options.fill\"\n        }\n      ],\n      \"default\": \"fit-content\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"max_width\",\n      \"label\": \"t:settings.max_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\",\n      \"visible_if\": \"{{ block.settings.width == '100%' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.typography\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"type_preset\",\n      \"label\": \"t:settings.preset\",\n      \"options\": [\n        {\n          \"value\": \"rte\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h1\",\n          \"label\": \"t:options.h1\"\n        },\n        {\n          \"value\": \"h2\",\n          \"label\": \"t:options.h2\"\n        },\n        {\n          \"value\": \"h3\",\n          \"label\": \"t:options.h3\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"rte\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"var(--font-body--family)\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"var(--font-subheading--family)\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"var(--font-heading--family)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--font-accent--family)\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"var(--font-body--family)\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        },\n        {\n          \"value\": \"1.25rem\",\n          \"label\": \"20px\"\n        },\n        {\n          \"value\": \"1.5rem\",\n          \"label\": \"24px\"\n        },\n        {\n          \"value\": \"2rem\",\n          \"label\": \"32px\"\n        },\n        {\n          \"value\": \"2.5rem\",\n          \"label\": \"40px\"\n        },\n        {\n          \"value\": \"3rem\",\n          \"label\": \"48px\"\n        },\n        {\n          \"value\": \"3.5rem\",\n          \"label\": \"56px\"\n        },\n        {\n          \"value\": \"4.5rem\",\n          \"label\": \"72px\"\n        },\n        {\n          \"value\": \"5.5rem\",\n          \"label\": \"88px\"\n        },\n        {\n          \"value\": \"7.5rem\",\n          \"label\": \"120px\"\n        },\n        {\n          \"value\": \"9.5rem\",\n          \"label\": \"152px\"\n        },\n        {\n          \"value\": \"11.5rem\",\n          \"label\": \"184px\"\n        }\n      ],\n      \"default\": \"1rem\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"line_height\",\n      \"label\": \"t:settings.line_height\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"letter_spacing\",\n      \"label\": \"t:settings.letter_spacing\",\n      \"options\": [\n        {\n          \"value\": \"tight\",\n          \"label\": \"t:options.tight\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.normal\"\n        },\n        {\n          \"value\": \"loose\",\n          \"label\": \"t:options.loose\"\n        }\n      ],\n      \"default\": \"normal\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"wrap\",\n      \"label\": \"t:settings.wrap\",\n      \"options\": [\n        {\n          \"value\": \"pretty\",\n          \"label\": \"t:options.pretty\"\n        },\n        {\n          \"value\": \"balance\",\n          \"label\": \"t:options.balance\"\n        },\n        {\n          \"value\": \"nowrap\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"visible_if\": \"{{ block.settings.type_preset == 'custom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"color\",\n      \"label\": \"t:settings.color\",\n      \"options\": [\n        {\n          \"value\": \"var(--color-foreground)\",\n          \"label\": \"t:options.text\"\n        },\n        {\n          \"value\": \"var(--color-foreground-heading)\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"var(--color-primary)\",\n          \"label\": \"t:options.link\"\n        }\n      ],\n      \"default\": \"var(--color-foreground)\",\n      \"visible_if\": \"{{ block.settings.type_preset != 'rte' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"background\",\n      \"label\": \"t:settings.background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"background_color\",\n      \"label\": \"t:settings.background_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"default\": 0,\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"visible_if\": \"{{ block.settings.background }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.text\",\n      \"category\": \"t:categories.basic\",\n      \"settings\": {\n        \"text\": \"t:html_defaults.make_things_better_extended\"\n      }\n    },\n    {\n      \"name\": \"t:names.heading\",\n      \"category\": \"t:categories.basic\",\n      \"settings\": {\n        \"text\": \"t:html_defaults.new_arrivals_h2\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/variant-picker.liquid",
    "content": "{% liquid\n  assign product_resource = closest.product\n  if request.visual_preview_mode and product_resource == blank\n    assign product_resource = collections.all.products.first\n  endif\n-%}\n\n{% unless product_resource == blank %}\n  {% render 'variant-main-picker', product_resource: product_resource %}\n{% endunless %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_variant_picker\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.resource_reference_product_variant_picker\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_variants_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"variant_style\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"dropdowns\",\n          \"label\": \"t:options.dropdowns\"\n        },\n        {\n          \"value\": \"buttons\",\n          \"label\": \"t:options.buttons\"\n        }\n      ],\n      \"default\": \"buttons\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_swatches\",\n      \"label\": \"t:settings.swatches\",\n      \"default\": true\n    },\n    {\n      \"type\": \"text_alignment\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_variant_picker\",\n      \"category\": \"t:categories.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "blocks/video.liquid",
    "content": "{% assign block_settings = block.settings %}\n\n{% capture video_style %}\n  {%  render 'spacing-style', settings: block_settings %}\n  {% render 'border-override', settings: block_settings %}\n   --size-style-width: {{ block_settings.custom_width }}%; --size-style-width-mobile: {{ block_settings.custom_width_mobile }}%;\n   --size-style-aspect-ratio: {% if block_settings.source == 'uploaded' %}{{ block_settings.video.aspect_ratio | default: 'auto' }}{% elsif block_settings.cover_image == blank %}{{ block_settings.aspect_ratio }}{% else %}auto{% endif %};\n{% endcapture %}\n\n{% if block_settings.source == 'uploaded' %}\n  {% render 'video',\n    video: block_settings.video,\n    video_class: 'spacing-style size-style border-style',\n    video_loop: block_settings.video_loop,\n    video_style: video_style,\n    video_preview_image: block_settings.video.preview_image,\n    additional_attributes: block.shopify_attributes,\n    section_id: section.id\n  %}\n{% else %}\n  {% render 'video',\n    video_from_url: true,\n    video: block_settings.video_url.id,\n    video_class: 'spacing-style size-style border-style',\n    video_type: block_settings.video_url.type,\n    video_style: video_style,\n    video_alt: block_settings.alt,\n    video_preview_image: block_settings.cover_image,\n    additional_attributes: block.shopify_attributes,\n    section_id: section.id\n  %}\n{% endif %}\n\n{% stylesheet %}\n  .placeholder-video {\n    aspect-ratio: 5 / 3;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.video\",\n  \"tag\": null,\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"source\",\n      \"label\": \"t:settings.video_source\",\n      \"options\": [\n        {\n          \"value\": \"uploaded\",\n          \"label\": \"t:options.video_uploaded\"\n        },\n        {\n          \"value\": \"url\",\n          \"label\": \"t:options.video_external_url\"\n        }\n      ],\n      \"default\": \"uploaded\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ block.settings.source == 'uploaded' }}\"\n    },\n    {\n      \"type\": \"video_url\",\n      \"id\": \"video_url\",\n      \"label\": \"t:settings.video_external_url\",\n      \"info\": \"t:info.video_external\",\n      \"accept\": [\"youtube\", \"vimeo\"],\n      \"visible_if\": \"{{ block.settings.source == 'url' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_autoplay\",\n      \"label\": \"t:settings.video_autoplay\",\n      \"info\": \"t:info.video_autoplay\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"video_loop\",\n      \"label\": \"t:settings.video_loop\",\n      \"default\": true\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"cover_image\",\n      \"label\": \"t:settings.cover_image\",\n      \"visible_if\": \"{{ block.settings.source == 'url' and block.settings.video_autoplay == false }}\"\n    },\n    {\n      \"type\": \"text\",\n      \"id\": \"alt\",\n      \"label\": \"t:settings.video_alt_text\",\n      \"info\": \"t:info.video_alt_text\",\n      \"visible_if\": \"{{ block.settings.source == 'url' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"custom_width_mobile\",\n      \"label\": \"t:settings.width_mobile\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"aspect_ratio\",\n      \"label\": \"t:settings.aspect_ratio\",\n      \"visible_if\": \"{{ block.settings.source == 'url' and block.settings.cover_image == blank }}\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"9/16\",\n          \"label\": \"t:options.portrait\"\n        },\n        {\n          \"value\": \"1/1\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"16/9\",\n          \"label\": \"t:options.landscape\"\n        }\n      ],\n      \"default\": \"auto\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.borders\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.style\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.thickness\",\n      \"default\": 1,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ block.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.video\",\n      \"category\": \"t:categories.basic\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "config/settings_data.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"current\": {\n    \"logo_height\": 36,\n    \"logo_height_mobile\": 28,\n    \"type_body_font\": \"inter_n4\",\n    \"type_subheading_font\": \"inter_n5\",\n    \"type_heading_font\": \"inter_n7\",\n    \"type_accent_font\": \"inter_n7\",\n    \"type_size_paragraph\": \"14\",\n    \"type_line_height_paragraph\": \"body-loose\",\n    \"type_font_h1\": \"heading\",\n    \"type_size_h1\": \"56\",\n    \"type_line_height_h1\": \"display-tight\",\n    \"type_letter_spacing_h1\": \"heading-normal\",\n    \"type_case_h1\": \"none\",\n    \"type_font_h2\": \"heading\",\n    \"type_size_h2\": \"48\",\n    \"type_line_height_h2\": \"display-tight\",\n    \"type_letter_spacing_h2\": \"heading-normal\",\n    \"type_case_h2\": \"none\",\n    \"type_font_h3\": \"heading\",\n    \"type_size_h3\": \"32\",\n    \"type_line_height_h3\": \"display-normal\",\n    \"type_letter_spacing_h3\": \"heading-normal\",\n    \"type_case_h3\": \"none\",\n    \"type_font_h4\": \"heading\",\n    \"type_size_h4\": \"24\",\n    \"type_line_height_h4\": \"display-tight\",\n    \"type_font_h5\": \"subheading\",\n    \"type_size_h5\": \"14\",\n    \"type_line_height_h5\": \"display-loose\",\n    \"type_font_h6\": \"subheading\",\n    \"type_size_h6\": \"12\",\n    \"type_line_height_h6\": \"display-loose\",\n    \"page_width\": \"narrow\",\n    \"page_transition_enabled\": false,\n    \"transition_to_main_product\": false,\n    \"card_hover_effect\": \"none\",\n    \"badge_position\": \"top-right\",\n    \"badge_corner_radius\": 100,\n    \"badge_sale_color_scheme\": \"scheme-1\",\n    \"badge_sold_out_color_scheme\": \"scheme-3\",\n    \"badge_text_transform\": \"none\",\n    \"primary_button_border_width\": 0,\n    \"button_border_radius_primary\": 14,\n    \"secondary_button_border_width\": 1,\n    \"button_border_radius_secondary\": 14,\n    \"button_font_weight_secondary\": \"default\",\n    \"cart_type\": \"drawer\",\n    \"cart_price_font\": \"subheading\",\n    \"show_cart_note\": false,\n    \"show_add_discount_code\": true,\n    \"drawer_drop_shadow\": true,\n    \"icon_stroke\": \"default\",\n    \"input_border_width\": 1,\n    \"inputs_border_radius\": 4,\n    \"popover_border_radius\": 14,\n    \"popover_border\": \"none\",\n    \"currency_code_enabled_product_pages\": false,\n    \"currency_code_enabled_product_cards\": false,\n    \"currency_code_enabled_cart_items\": false,\n    \"product_corner_radius\": 0,\n    \"card_corner_radius\": 4,\n    \"show_variant_image\": false,\n    \"variant_swatch_width\": 34,\n    \"variant_swatch_height\": 34,\n    \"variant_swatch_radius\": 32,\n    \"variant_button_border_width\": 1,\n    \"variant_button_radius\": 14,\n    \"variant_button_width\": \"equal-width-buttons\",\n    \"content_for_index\": [],\n    \"color_schemes\": {\n      \"scheme-1\": {\n        \"settings\": {\n          \"background\": \"#ffffff\",\n          \"foreground_heading\": \"#000000\",\n          \"foreground\": \"#000000cf\",\n          \"primary\": \"#000000cf\",\n          \"primary_hover\": \"#000000\",\n          \"border\": \"#0000000f\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#000000\",\n          \"primary_button_text\": \"#ffffff\",\n          \"primary_button_border\": \"#000000\",\n          \"primary_button_hover_background\": \"#333333\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#000000\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#000000\",\n          \"secondary_button_border\": \"#000000\",\n          \"secondary_button_hover_background\": \"#fafafa\",\n          \"secondary_button_hover_text\": \"#333333\",\n          \"secondary_button_hover_border\": \"#333333\",\n          \"input_background\": \"#ffffffc7\",\n          \"input_text_color\": \"#333333\",\n          \"input_border_color\": \"#dfdfdf\",\n          \"input_hover_background\": \"#00000003\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#00000021\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-2\": {\n        \"settings\": {\n          \"background\": \"#f5f5f5\",\n          \"foreground_heading\": \"#000000\",\n          \"foreground\": \"#000000cf\",\n          \"primary\": \"#000000cf\",\n          \"primary_hover\": \"#ffffff\",\n          \"border\": \"#dfdfdf\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#000000\",\n          \"primary_button_text\": \"#ffffff\",\n          \"primary_button_border\": \"#000000\",\n          \"primary_button_hover_background\": \"#333333\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#333333\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#000000\",\n          \"secondary_button_border\": \"#000000\",\n          \"secondary_button_hover_background\": \"#ffffff5c\",\n          \"secondary_button_hover_text\": \"#000000\",\n          \"secondary_button_hover_border\": \"#333333ba\",\n          \"input_background\": \"rgba(0,0,0,0)\",\n          \"input_text_color\": \"#00000087\",\n          \"input_border_color\": \"#00000021\",\n          \"input_hover_background\": \"#ffffff5c\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-3\": {\n        \"settings\": {\n          \"background\": \"#eef1ea\",\n          \"foreground_heading\": \"#000000\",\n          \"foreground\": \"#000000cf\",\n          \"primary\": \"#000000cf\",\n          \"primary_hover\": \"#000000\",\n          \"border\": \"#000000cf\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#000000\",\n          \"primary_button_text\": \"#ffffff\",\n          \"primary_button_border\": \"#000000\",\n          \"primary_button_hover_background\": \"#333333\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#333333\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#000000\",\n          \"secondary_button_border\": \"#000000\",\n          \"secondary_button_hover_background\": \"#ffffff5c\",\n          \"secondary_button_hover_text\": \"#000000cf\",\n          \"secondary_button_hover_border\": \"#000000cf\",\n          \"input_background\": \"rgba(0,0,0,0)\",\n          \"input_text_color\": \"#000000cf\",\n          \"input_border_color\": \"#000000cf\",\n          \"input_hover_background\": \"#ffffff5c\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-4\": {\n        \"settings\": {\n          \"background\": \"#e1edf5\",\n          \"foreground_heading\": \"#000000\",\n          \"foreground\": \"#000000cf\",\n          \"primary\": \"#000000cf\",\n          \"primary_hover\": \"#000000\",\n          \"border\": \"#1d368680\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#000000\",\n          \"primary_button_text\": \"#ffffff\",\n          \"primary_button_border\": \"#1d3686\",\n          \"primary_button_hover_background\": \"#333333\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#000000\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#000000\",\n          \"secondary_button_border\": \"#000000\",\n          \"secondary_button_hover_background\": \"#ffffff5c\",\n          \"secondary_button_hover_text\": \"#000000cf\",\n          \"secondary_button_hover_border\": \"#000000cf\",\n          \"input_background\": \"rgba(0,0,0,0)\",\n          \"input_text_color\": \"#000000cf\",\n          \"input_border_color\": \"#000000cf\",\n          \"input_hover_background\": \"#ffffff5c\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-5\": {\n        \"settings\": {\n          \"background\": \"#333333\",\n          \"foreground_heading\": \"#ffffff\",\n          \"foreground\": \"#ffffff\",\n          \"primary\": \"#ffffff\",\n          \"primary_hover\": \"#ffffffb0\",\n          \"border\": \"#ffffffb0\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#ffffff\",\n          \"primary_button_text\": \"#000000\",\n          \"primary_button_border\": \"#ffffff\",\n          \"primary_button_hover_background\": \"#000000\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#000000\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#ffffff\",\n          \"secondary_button_border\": \"#ffffffb0\",\n          \"secondary_button_hover_background\": \"#ffffff0a\",\n          \"secondary_button_hover_text\": \"#ffffffed\",\n          \"secondary_button_hover_border\": \"#ffffffb0\",\n          \"input_background\": \"#333333\",\n          \"input_text_color\": \"#ffffffed\",\n          \"input_border_color\": \"#ffffffb0\",\n          \"input_hover_background\": \"#ffffff0a\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-6\": {\n        \"settings\": {\n          \"background\": \"rgba(0,0,0,0)\",\n          \"foreground_heading\": \"#ffffff\",\n          \"foreground\": \"#f2f2f2\",\n          \"primary\": \"#eaeaea\",\n          \"primary_hover\": \"#ffffffb0\",\n          \"border\": \"#e6e6e6\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#ffffff\",\n          \"primary_button_text\": \"#000000\",\n          \"primary_button_border\": \"#ffffff\",\n          \"primary_button_hover_background\": \"#000000\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#000000\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#ffffff\",\n          \"secondary_button_border\": \"#ffffff\",\n          \"secondary_button_hover_background\": \"#ffffff14\",\n          \"secondary_button_hover_text\": \"#ffffff\",\n          \"secondary_button_hover_border\": \"#ffffff\",\n          \"input_background\": \"#ffffff\",\n          \"input_text_color\": \"#00000087\",\n          \"input_border_color\": \"#00000021\",\n          \"input_hover_background\": \"#fafafa\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      },\n      \"scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7\": {\n        \"settings\": {\n          \"background\": \"rgba(0,0,0,0)\",\n          \"foreground_heading\": \"#000000\",\n          \"foreground\": \"#000000\",\n          \"primary\": \"#000000\",\n          \"primary_hover\": \"#00000087\",\n          \"border\": \"#e6e6e6\",\n          \"shadow\": \"#000000\",\n          \"primary_button_background\": \"#000000\",\n          \"primary_button_text\": \"#ffffff\",\n          \"primary_button_border\": \"#000000\",\n          \"primary_button_hover_background\": \"#333333\",\n          \"primary_button_hover_text\": \"#ffffff\",\n          \"primary_button_hover_border\": \"#333333\",\n          \"secondary_button_background\": \"rgba(0,0,0,0)\",\n          \"secondary_button_text\": \"#000000\",\n          \"secondary_button_border\": \"#000000\",\n          \"secondary_button_hover_background\": \"#fafafa\",\n          \"secondary_button_hover_text\": \"#333333\",\n          \"secondary_button_hover_border\": \"#333333\",\n          \"input_background\": \"#ffffff\",\n          \"input_text_color\": \"#00000087\",\n          \"input_border_color\": \"#00000021\",\n          \"input_hover_background\": \"#fafafa\",\n          \"variant_background_color\": \"#ffffff\",\n          \"variant_text_color\": \"#000000\",\n          \"variant_border_color\": \"#e6e6e6\",\n          \"variant_hover_background_color\": \"#f5f5f5\",\n          \"variant_hover_text_color\": \"#000000\",\n          \"variant_hover_border_color\": \"#e6e6e6\",\n          \"selected_variant_background_color\": \"#000000\",\n          \"selected_variant_text_color\": \"#ffffff\",\n          \"selected_variant_border_color\": \"#000000\",\n          \"selected_variant_hover_background_color\": \"#1a1a1a\",\n          \"selected_variant_hover_text_color\": \"#ffffff\",\n          \"selected_variant_hover_border_color\": \"#1a1a1a\"\n        }\n      }\n    }\n  },\n  \"presets\": {\n    \"Default\": {\n      \"color_schemes\": {\n        \"scheme-1\": {\n          \"settings\": {\n            \"background\": \"#ffffff\",\n            \"foreground_heading\": \"#000000\",\n            \"foreground\": \"#000000cf\",\n            \"primary\": \"#000000cf\",\n            \"primary_hover\": \"#000000\",\n            \"border\": \"#0000000f\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#000000\",\n            \"primary_button_text\": \"#ffffff\",\n            \"primary_button_border\": \"#000000\",\n            \"primary_button_hover_background\": \"#333333\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#000000\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#000000\",\n            \"secondary_button_border\": \"#000000\",\n            \"secondary_button_hover_background\": \"#fafafa\",\n            \"secondary_button_hover_text\": \"#333333\",\n            \"secondary_button_hover_border\": \"#333333\",\n            \"input_background\": \"#ffffffc7\",\n            \"input_text_color\": \"#333333\",\n            \"input_border_color\": \"#dfdfdf\",\n            \"input_hover_background\": \"#00000003\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#00000021\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-2\": {\n          \"settings\": {\n            \"background\": \"#f5f5f5\",\n            \"foreground_heading\": \"#000000\",\n            \"foreground\": \"#000000cf\",\n            \"primary\": \"#000000cf\",\n            \"primary_hover\": \"#ffffff\",\n            \"border\": \"#DFDFDF\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#000000\",\n            \"primary_button_text\": \"#ffffff\",\n            \"primary_button_border\": \"#000000\",\n            \"primary_button_hover_background\": \"#333333\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#333333\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#000000\",\n            \"secondary_button_border\": \"#000000\",\n            \"secondary_button_hover_background\": \"#ffffff5c\",\n            \"secondary_button_hover_text\": \"#000000\",\n            \"secondary_button_hover_border\": \"#333333ba\",\n            \"input_background\": \"rgba(0,0,0,0)\",\n            \"input_text_color\": \"#00000087\",\n            \"input_border_color\": \"#00000021\",\n            \"input_hover_background\": \"#ffffff5c\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-3\": {\n          \"settings\": {\n            \"background\": \"#eef1ea\",\n            \"foreground_heading\": \"#000000\",\n            \"foreground\": \"#000000cf\",\n            \"primary\": \"#000000cf\",\n            \"primary_hover\": \"#000000\",\n            \"border\": \"#000000cf\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#000000\",\n            \"primary_button_text\": \"#ffffff\",\n            \"primary_button_border\": \"#000000\",\n            \"primary_button_hover_background\": \"#333333\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#333333\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#000000\",\n            \"secondary_button_border\": \"#000000\",\n            \"secondary_button_hover_background\": \"#ffffff5c\",\n            \"secondary_button_hover_text\": \"#000000cf\",\n            \"secondary_button_hover_border\": \"#000000cf\",\n            \"input_background\": \"rgba(0,0,0,0)\",\n            \"input_text_color\": \"#000000cf\",\n            \"input_border_color\": \"#000000cf\",\n            \"input_hover_background\": \"#ffffff5c\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-4\": {\n          \"settings\": {\n            \"background\": \"#e1edf5\",\n            \"foreground_heading\": \"#000000\",\n            \"foreground\": \"#000000cf\",\n            \"primary\": \"#000000cf\",\n            \"primary_hover\": \"#000000\",\n            \"border\": \"#1d368680\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#000000\",\n            \"primary_button_text\": \"#ffffff\",\n            \"primary_button_border\": \"#1d3686\",\n            \"primary_button_hover_background\": \"#333333\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#000000\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#000000\",\n            \"secondary_button_border\": \"#000000\",\n            \"secondary_button_hover_background\": \"#ffffff5c\",\n            \"secondary_button_hover_text\": \"#000000cf\",\n            \"secondary_button_hover_border\": \"#000000cf\",\n            \"input_background\": \"rgba(0,0,0,0)\",\n            \"input_text_color\": \"#000000cf\",\n            \"input_border_color\": \"#000000cf\",\n            \"input_hover_background\": \"#ffffff5c\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-5\": {\n          \"settings\": {\n            \"background\": \"#333333\",\n            \"foreground_heading\": \"#ffffff\",\n            \"foreground\": \"#ffffff\",\n            \"primary\": \"#ffffff\",\n            \"primary_hover\": \"#ffffffb0\",\n            \"border\": \"#ffffffb0\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#ffffff\",\n            \"primary_button_text\": \"#000000\",\n            \"primary_button_border\": \"#ffffff\",\n            \"primary_button_hover_background\": \"#000000\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#000000\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#ffffff\",\n            \"secondary_button_border\": \"#ffffffb0\",\n            \"secondary_button_hover_background\": \"#ffffff0a\",\n            \"secondary_button_hover_text\": \"#ffffffed\",\n            \"secondary_button_hover_border\": \"#ffffffb0\",\n            \"input_background\": \"#333333\",\n            \"input_text_color\": \"#ffffffed\",\n            \"input_border_color\": \"#ffffffb0\",\n            \"input_hover_background\": \"#ffffff0a\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-6\": {\n          \"settings\": {\n            \"background\": \"rgba(0,0,0,0)\",\n            \"foreground_heading\": \"#ffffff\",\n            \"foreground\": \"#ffffff\",\n            \"primary\": \"#ffffff\",\n            \"primary_hover\": \"#ffffffb0\",\n            \"border\": \"#e6e6e6\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#ffffff\",\n            \"primary_button_text\": \"#000000\",\n            \"primary_button_border\": \"#ffffff\",\n            \"primary_button_hover_background\": \"#000000\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#000000\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#ffffff\",\n            \"secondary_button_border\": \"#ffffff\",\n            \"secondary_button_hover_background\": \"#ffffff14\",\n            \"secondary_button_hover_text\": \"#ffffff\",\n            \"secondary_button_hover_border\": \"#ffffff\",\n            \"input_background\": \"#ffffff\",\n            \"input_text_color\": \"#00000087\",\n            \"input_border_color\": \"#00000021\",\n            \"input_hover_background\": \"#fafafa\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        },\n        \"scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7\": {\n          \"settings\": {\n            \"background\": \"rgba(0,0,0,0)\",\n            \"foreground_heading\": \"#000000\",\n            \"foreground\": \"#000000\",\n            \"primary\": \"#000000\",\n            \"primary_hover\": \"#00000087\",\n            \"border\": \"#e6e6e6\",\n            \"shadow\": \"#000000\",\n            \"primary_button_background\": \"#000000\",\n            \"primary_button_text\": \"#ffffff\",\n            \"primary_button_border\": \"#000000\",\n            \"primary_button_hover_background\": \"#333333\",\n            \"primary_button_hover_text\": \"#ffffff\",\n            \"primary_button_hover_border\": \"#333333\",\n            \"secondary_button_background\": \"rgba(0,0,0,0)\",\n            \"secondary_button_text\": \"#000000\",\n            \"secondary_button_border\": \"#000000\",\n            \"secondary_button_hover_background\": \"#fafafa\",\n            \"secondary_button_hover_text\": \"#333333\",\n            \"secondary_button_hover_border\": \"#333333\",\n            \"input_background\": \"#ffffff\",\n            \"input_text_color\": \"#00000087\",\n            \"input_border_color\": \"#00000021\",\n            \"input_hover_background\": \"#fafafa\",\n            \"variant_background_color\": \"#ffffff\",\n            \"variant_text_color\": \"#000000\",\n            \"variant_border_color\": \"#e6e6e6\",\n            \"variant_hover_background_color\": \"#f5f5f5\",\n            \"variant_hover_text_color\": \"#000000\",\n            \"variant_hover_border_color\": \"#e6e6e6\",\n            \"selected_variant_background_color\": \"#000000\",\n            \"selected_variant_text_color\": \"#ffffff\",\n            \"selected_variant_border_color\": \"#000000\",\n            \"selected_variant_hover_background_color\": \"#1a1a1a\",\n            \"selected_variant_hover_text_color\": \"#ffffff\",\n            \"selected_variant_hover_border_color\": \"#1a1a1a\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "config/settings_schema.json",
    "content": "[\n  {\n    \"name\": \"theme_info\",\n    \"theme_name\": \"Horizon\",\n    \"theme_version\": \"3.4.0\",\n    \"theme_author\": \"Shopify\",\n    \"theme_documentation_url\": \"https://help.shopify.com/manual/online-store/themes\",\n    \"theme_support_url\": \"https://support.shopify.com/\"\n  },\n  {\n    \"name\": \"t:names.logo_and_favicon\",\n    \"settings\": [\n      {\n        \"type\": \"paragraph\",\n        \"content\": \"t:content.manage_store_name\"\n      },\n      {\n        \"type\": \"image_picker\",\n        \"id\": \"logo\",\n        \"label\": \"t:settings.default_logo\"\n      },\n      {\n        \"type\": \"image_picker\",\n        \"id\": \"logo_inverse\",\n        \"label\": \"t:settings.inverse_logo\",\n        \"info\": \"t:content.inverse_logo_info\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"logo_height\",\n        \"label\": \"t:settings.desktop_height\",\n        \"min\": 12,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"default\": 36,\n        \"visible_if\": \"{{ settings.logo != blank or settings.logo_inverse != blank }}\",\n        \"info\": \"t:info.logo_height\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"logo_height_mobile\",\n        \"label\": \"t:settings.mobile_height\",\n        \"min\": 12,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"default\": 28,\n        \"visible_if\": \"{{ settings.logo != blank or settings.logo_inverse != blank }}\",\n        \"info\": \"t:info.logo_height\"\n      },\n      {\n        \"type\": \"image_picker\",\n        \"id\": \"favicon\",\n        \"label\": \"t:settings.favicon\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.colors\",\n    \"settings\": [\n      {\n        \"type\": \"color_scheme_group\",\n        \"id\": \"color_schemes\",\n        \"definition\": [\n          {\n            \"type\": \"color\",\n            \"id\": \"background\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"foreground_heading\",\n            \"label\": \"t:settings.headings\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"foreground\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary\",\n            \"label\": \"t:settings.primary_color\",\n            \"default\": \"#000F9F\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_hover\",\n            \"label\": \"t:settings.primary_hover_color\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"border\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#E6E6E6\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"shadow\",\n            \"label\": \"t:settings.shadow_color\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"header\",\n            \"content\": \"t:names.primary_button\"\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_background\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#000F9F\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_text\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_border\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#000F9F\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_hover_background\",\n            \"label\": \"t:settings.hover_background\",\n            \"default\": \"#000F9F\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_hover_text\",\n            \"label\": \"t:settings.hover_text\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"primary_button_hover_border\",\n            \"label\": \"t:settings.hover_borders\",\n            \"default\": \"#000F9F\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"header\",\n            \"content\": \"t:names.secondary_button\"\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_background\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_text\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_border\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_hover_background\",\n            \"label\": \"t:settings.hover_background\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_hover_text\",\n            \"label\": \"t:settings.hover_text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"secondary_button_hover_border\",\n            \"label\": \"t:settings.hover_borders\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"header\",\n            \"content\": \"t:names.inputs\"\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"input_background\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"input_text_color\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"input_border_color\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"input_hover_background\",\n            \"label\": \"t:settings.hover_background\",\n            \"default\": \"#F5F5F5\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"header\",\n            \"content\": \"t:names.variants\"\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_background_color\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_text_color\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_border_color\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#E6E6E6\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_hover_background_color\",\n            \"label\": \"t:settings.hover_background\",\n            \"default\": \"#F5F5F5\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_hover_text_color\",\n            \"label\": \"t:settings.hover_text\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"variant_hover_border_color\",\n            \"label\": \"t:settings.hover_borders\",\n            \"default\": \"#E6E6E6\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"header\",\n            \"content\": \"t:names.selected_variants\"\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_background_color\",\n            \"label\": \"t:settings.background\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_text_color\",\n            \"label\": \"t:settings.text\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_border_color\",\n            \"label\": \"t:settings.borders\",\n            \"default\": \"#000000\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_hover_background_color\",\n            \"label\": \"t:settings.hover_background\",\n            \"default\": \"#1A1A1A\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_hover_text_color\",\n            \"label\": \"t:settings.hover_text\",\n            \"default\": \"#FFFFFF\",\n            \"alpha\": true\n          },\n          {\n            \"type\": \"color\",\n            \"id\": \"selected_variant_hover_border_color\",\n            \"label\": \"t:settings.hover_borders\",\n            \"default\": \"#1A1A1A\",\n            \"alpha\": true\n          }\n        ],\n        \"role\": {\n          \"text\": \"foreground\",\n          \"background\": \"background\",\n          \"links\": \"primary\",\n          \"icons\": \"foreground\",\n          \"primary_button\": \"primary_button_background\",\n          \"on_primary_button\": \"primary_button_text\",\n          \"primary_button_border\": \"primary_button_border\",\n          \"secondary_button\": \"secondary_button_background\",\n          \"on_secondary_button\": \"secondary_button_text\",\n          \"secondary_button_border\": \"secondary_button_border\"\n        }\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.typography\",\n    \"settings\": [\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.fonts\"\n      },\n      {\n        \"type\": \"font_picker\",\n        \"id\": \"type_body_font\",\n        \"default\": \"work_sans_n4\",\n        \"label\": \"t:options.body\"\n      },\n      {\n        \"type\": \"font_picker\",\n        \"id\": \"type_subheading_font\",\n        \"default\": \"work_sans_n5\",\n        \"label\": \"t:options.subheading\"\n      },\n      {\n        \"type\": \"font_picker\",\n        \"id\": \"type_heading_font\",\n        \"default\": \"anonymous_pro_n4\",\n        \"label\": \"t:options.heading\"\n      },\n      {\n        \"type\": \"font_picker\",\n        \"id\": \"type_accent_font\",\n        \"default\": \"anonymous_pro_n4\",\n        \"label\": \"t:options.accent\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.text_presets\"\n      },\n      {\n        \"type\": \"paragraph\",\n        \"content\": \"t:content.responsive_font_sizes\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.paragraph\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_paragraph\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          }\n        ],\n        \"default\": \"14\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_paragraph\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"body-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"body-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"body-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"body-normal\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h1\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h1\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"heading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h1\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"72\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h1\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h1\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h1\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h2\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h2\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"heading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h2\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"48\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h2\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h2\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h2\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h3\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h3\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          }\n        ],\n        \"default\": \"heading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h3\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"32\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h3\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h3\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h3\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h4\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h4\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          }\n        ],\n        \"default\": \"subheading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h4\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"24\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h4\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h4\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h4\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h5\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h5\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          }\n        ],\n        \"default\": \"subheading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h5\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"18\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h5\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h5\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h5\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.h6\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_h6\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          }\n        ],\n        \"default\": \"subheading\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_size_h6\",\n        \"label\": \"t:settings.size\",\n        \"options\": [\n          {\n            \"value\": \"10\",\n            \"label\": \"10px\"\n          },\n          {\n            \"value\": \"12\",\n            \"label\": \"12px\"\n          },\n          {\n            \"value\": \"14\",\n            \"label\": \"14px\"\n          },\n          {\n            \"value\": \"16\",\n            \"label\": \"16px\"\n          },\n          {\n            \"value\": \"18\",\n            \"label\": \"18px\"\n          },\n          {\n            \"value\": \"20\",\n            \"label\": \"20px\"\n          },\n          {\n            \"value\": \"24\",\n            \"label\": \"24px\"\n          },\n          {\n            \"value\": \"32\",\n            \"label\": \"32px\"\n          },\n          {\n            \"value\": \"40\",\n            \"label\": \"40px\"\n          },\n          {\n            \"value\": \"48\",\n            \"label\": \"48px\"\n          },\n          {\n            \"value\": \"56\",\n            \"label\": \"56px\"\n          },\n          {\n            \"value\": \"72\",\n            \"label\": \"72px\"\n          },\n          {\n            \"value\": \"88\",\n            \"label\": \"88px\"\n          },\n          {\n            \"value\": \"120\",\n            \"label\": \"120px\"\n          },\n          {\n            \"value\": \"152\",\n            \"label\": \"152px\"\n          },\n          {\n            \"value\": \"184\",\n            \"label\": \"184px\"\n          }\n        ],\n        \"default\": \"16\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_line_height_h6\",\n        \"label\": \"t:settings.line_height\",\n        \"options\": [\n          {\n            \"value\": \"display-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"display-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"display-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"display-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_letter_spacing_h6\",\n        \"label\": \"t:settings.letter_spacing\",\n        \"options\": [\n          {\n            \"value\": \"heading-tight\",\n            \"label\": \"t:options.tight\"\n          },\n          {\n            \"value\": \"heading-normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"heading-loose\",\n            \"label\": \"t:options.loose\"\n          }\n        ],\n        \"default\": \"heading-normal\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_case_h6\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.page_layout\",\n    \"settings\": [\n      {\n        \"type\": \"select\",\n        \"id\": \"page_width\",\n        \"label\": \"t:settings.page_width\",\n        \"options\": [\n          {\n            \"value\": \"narrow\",\n            \"label\": \"t:options.narrow\"\n          },\n          {\n            \"value\": \"normal\",\n            \"label\": \"t:options.normal\"\n          },\n          {\n            \"value\": \"wide\",\n            \"label\": \"t:options.wide\"\n          }\n        ],\n        \"default\": \"narrow\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.animations\",\n    \"settings\": [\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"page_transition_enabled\",\n        \"label\": \"t:settings.page_transition_enabled\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"transition_to_main_product\",\n        \"label\": \"t:settings.transition_to_main_product\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"add_to_cart_animation\",\n        \"label\": \"t:settings.add_to_cart_animation\",\n        \"default\": true\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"card_hover_effect\",\n        \"label\": \"t:settings.card_hover_effect\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.none\"\n          },\n          {\n            \"value\": \"lift\",\n            \"label\": \"t:options.lift\"\n          },\n          {\n            \"value\": \"scale\",\n            \"label\": \"t:options.scale\"\n          },\n          {\n            \"value\": \"subtle-zoom\",\n            \"label\": \"t:options.subtle_zoom\"\n          }\n        ],\n        \"default\": \"lift\",\n        \"info\": \"t:info.hover_effects\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.badges\",\n    \"settings\": [\n      {\n        \"type\": \"select\",\n        \"id\": \"badge_position\",\n        \"options\": [\n          {\n            \"value\": \"bottom-left\",\n            \"label\": \"t:options.bottom_left\"\n          },\n          {\n            \"value\": \"top-left\",\n            \"label\": \"t:options.top_left\"\n          },\n          {\n            \"value\": \"top-right\",\n            \"label\": \"t:options.top_right\"\n          }\n        ],\n        \"default\": \"top-left\",\n        \"label\": \"t:settings.badge_position\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"badge_corner_radius\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 2,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.badge_corner_radius\",\n        \"default\": 40\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:settings.colors\"\n      },\n      {\n        \"type\": \"color_scheme\",\n        \"id\": \"badge_sale_color_scheme\",\n        \"label\": \"t:settings.badge_sale_color_scheme\",\n        \"default\": \"scheme-4\"\n      },\n      {\n        \"type\": \"color_scheme\",\n        \"id\": \"badge_sold_out_color_scheme\",\n        \"label\": \"t:settings.badge_sold_out_color_scheme\",\n        \"default\": \"scheme-5\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:names.typography\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"badge_font_family\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"body\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"badge_text_transform\",\n        \"label\": \"t:settings.text_case\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"none\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.buttons\",\n    \"settings\": [\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.button_primary\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"primary_button_border_width\",\n        \"min\": 0,\n        \"max\": 4,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 0\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"button_border_radius_primary\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_radius\",\n        \"default\": 100\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_button_primary\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"body\"\n      },\n\n      {\n        \"type\": \"select\",\n        \"id\": \"button_text_case_primary\",\n        \"label\": \"t:settings.button_text_case\",\n        \"options\": [\n          {\n            \"value\": \"default\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"default\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:options.button_secondary\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"secondary_button_border_width\",\n        \"min\": 0,\n        \"max\": 4,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"button_border_radius_secondary\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_radius\",\n        \"default\": 100\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_font_button_secondary\",\n        \"label\": \"t:settings.font\",\n        \"options\": [\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"body\"\n      },\n\n      {\n        \"type\": \"select\",\n        \"id\": \"button_text_case_secondary\",\n        \"label\": \"t:settings.button_text_case\",\n        \"options\": [\n          {\n            \"value\": \"default\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"default\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:names.pills\"\n      },\n      {\n        \"type\": \"paragraph\",\n        \"content\": \"t:info.pills_usage\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"pills_border_radius\",\n        \"label\": \"t:settings.border_radius\",\n        \"min\": 0,\n        \"max\": 40,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"default\": 40\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.cart\",\n    \"settings\": [\n      {\n        \"type\": \"select\",\n        \"id\": \"cart_type\",\n        \"label\": \"t:settings.cart_type\",\n        \"options\": [\n          {\n            \"value\": \"page\",\n            \"label\": \"t:options.page\"\n          },\n          {\n            \"value\": \"drawer\",\n            \"label\": \"t:options.drawer\"\n          }\n        ],\n        \"default\": \"page\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"product_title_case\",\n        \"label\": \"t:settings.product_title_case\",\n        \"options\": [\n          {\n            \"value\": \"default\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"default\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"cart_price_font\",\n        \"label\": \"t:settings.font_price\",\n        \"options\": [\n          {\n            \"value\": \"body\",\n            \"label\": \"t:options.body\"\n          },\n          {\n            \"value\": \"subheading\",\n            \"label\": \"t:options.subheading\"\n          },\n          {\n            \"value\": \"heading\",\n            \"label\": \"t:options.heading\"\n          },\n          {\n            \"value\": \"accent\",\n            \"label\": \"t:options.accent\"\n          }\n        ],\n        \"default\": \"subheading\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"auto_open_cart_drawer\",\n        \"label\": \"t:settings.auto_open_cart_drawer\",\n        \"default\": false,\n        \"visible_if\": \"{{ settings.cart_type == 'drawer' }}\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.cart_features\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_cart_note\",\n        \"label\": \"t:settings.seller_note\",\n        \"default\": false\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"cart_note_open_by_default\",\n        \"label\": \"t:settings.seller_note_open_by_default\",\n        \"default\": false,\n        \"visible_if\": \"{{ settings.show_cart_note == true }}\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_add_discount_code\",\n        \"label\": \"t:settings.add_discount_code\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_installments\",\n        \"label\": \"t:settings.installments\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_accelerated_checkout_buttons\",\n        \"label\": \"t:settings.checkout_buttons\",\n        \"info\": \"t:info.checkout_buttons\",\n        \"default\": true\n      },\n\n      {\n        \"type\": \"url\",\n        \"id\": \"empty_cart_button_link\",\n        \"label\": \"t:settings.empty_cart_button_link\",\n        \"default\": \"/collections/all\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.product_media\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"cart_thumbnail_border\",\n        \"label\": \"t:settings.border_style\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.none\"\n          },\n          {\n            \"value\": \"solid\",\n            \"label\": \"t:options.solid\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"cart_thumbnail_border_width\",\n        \"min\": 0,\n        \"max\": 10,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1,\n        \"visible_if\": \"{{ settings.cart_thumbnail_border != 'none' }}\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"cart_thumbnail_border_opacity\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"%\",\n        \"label\": \"t:settings.border_opacity\",\n        \"default\": 50,\n        \"visible_if\": \"{{ settings.cart_thumbnail_border != 'none' }}\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"cart_thumbnail_border_radius\",\n        \"label\": \"t:settings.border_radius\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"default\": 0\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.drawers\",\n    \"settings\": [\n      {\n        \"type\": \"color_scheme\",\n        \"id\": \"drawer_color_scheme\",\n        \"label\": \"t:settings.color_scheme\",\n        \"default\": \"scheme-1\"\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"drawer_border\",\n        \"label\": \"t:settings.borders\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.none\"\n          },\n          {\n            \"value\": \"solid\",\n            \"label\": \"t:options.solid\"\n          }\n        ],\n        \"default\": \"none\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"drawer_border_width\",\n        \"min\": 0,\n        \"max\": 10,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1,\n        \"visible_if\": \"{{ settings.drawer_border != 'none' }}\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"drawer_border_opacity\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"%\",\n        \"label\": \"t:settings.border_opacity\",\n        \"default\": 50,\n        \"visible_if\": \"{{ settings.drawer_border != 'none' }}\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"drawer_drop_shadow\",\n        \"label\": \"t:settings.drop_shadow\",\n        \"default\": false\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.icons\",\n    \"settings\": [\n      {\n        \"type\": \"select\",\n        \"id\": \"icon_stroke\",\n        \"label\": \"t:settings.stroke\",\n        \"options\": [\n          {\n            \"value\": \"thin\",\n            \"label\": \"t:options.thin\"\n          },\n          {\n            \"value\": \"default\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"heavy\",\n            \"label\": \"t:options.heavy\"\n          }\n        ],\n        \"default\": \"default\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.input_fields\",\n    \"settings\": [\n      {\n        \"type\": \"range\",\n        \"id\": \"input_border_width\",\n        \"min\": 0,\n        \"max\": 4,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"inputs_border_radius\",\n        \"min\": 0,\n        \"max\": 32,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_radius\",\n        \"default\": 8\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"type_preset\",\n        \"label\": \"t:settings.type_preset\",\n        \"options\": [\n          {\n            \"value\": \"\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"paragraph\",\n            \"label\": \"t:options.paragraph\"\n          },\n          {\n            \"value\": \"h1\",\n            \"label\": \"t:options.h1\"\n          },\n          {\n            \"value\": \"h2\",\n            \"label\": \"t:options.h2\"\n          },\n          {\n            \"value\": \"h3\",\n            \"label\": \"t:options.h3\"\n          },\n          {\n            \"value\": \"h4\",\n            \"label\": \"t:options.h4\"\n          },\n          {\n            \"value\": \"h5\",\n            \"label\": \"t:options.h5\"\n          },\n          {\n            \"value\": \"h6\",\n            \"label\": \"t:options.h6\"\n          }\n        ],\n        \"default\": \"paragraph\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.popovers_and_modals\",\n    \"settings\": [\n      {\n        \"type\": \"color_scheme\",\n        \"id\": \"popover_color_scheme\",\n        \"label\": \"t:settings.color_scheme\",\n        \"default\": \"scheme-1\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"popover_border_radius\",\n        \"label\": \"t:settings.border_radius\",\n        \"min\": 0,\n        \"max\": 16,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"default\": 8\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"popover_border\",\n        \"label\": \"t:settings.borders\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.none\"\n          },\n          {\n            \"value\": \"solid\",\n            \"label\": \"t:options.solid\"\n          }\n        ],\n        \"default\": \"solid\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"popover_border_width\",\n        \"min\": 0,\n        \"max\": 10,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1,\n        \"visible_if\": \"{{ settings.popover_border != 'none' }}\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"popover_border_opacity\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"%\",\n        \"label\": \"t:settings.border_opacity\",\n        \"default\": 50,\n        \"visible_if\": \"{{ settings.popover_border != 'none' }}\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"popover_drop_shadow\",\n        \"label\": \"t:settings.drop_shadow\",\n        \"default\": true\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.prices\",\n    \"settings\": [\n      {\n        \"type\": \"header\",\n        \"content\": \"t:settings.currency_code\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"currency_code_enabled_product_pages\",\n        \"label\": \"t:settings.product_pages\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"currency_code_enabled_product_cards\",\n        \"label\": \"t:settings.product_cards\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"currency_code_enabled_cart_items\",\n        \"label\": \"t:settings.cart_items\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"currency_code_enabled_cart_total\",\n        \"label\": \"t:settings.cart_total\",\n        \"default\": true\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.product_cards\",\n    \"settings\": [\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"quick_add\",\n        \"label\": \"t:settings.quick_add\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"mobile_quick_add\",\n        \"label\": \"t:settings.mobile_quick_add\",\n        \"default\": false,\n        \"visible_if\": \"{{ settings.quick_add == true }}\"\n      },\n      {\n        \"type\": \"color_scheme\",\n        \"id\": \"quick_add_color_scheme\",\n        \"label\": \"t:settings.quick_add_colors\",\n        \"default\": \"scheme-1\",\n        \"visible_if\": \"{{ settings.quick_add == true }}\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:settings.media\"\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_second_image_on_hover\",\n        \"label\": \"t:settings.show_second_image_on_hover\",\n        \"default\": true\n      },\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"product_card_carousel\",\n        \"label\": \"t:settings.product_card_carousel\",\n        \"default\": true\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.search\",\n    \"settings\": [\n      {\n        \"type\": \"collection\",\n        \"id\": \"empty_state_collection\",\n        \"label\": \"t:settings.empty_state_collection\",\n        \"info\": \"t:settings.empty_state_collection_info\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:names.predictive_search\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"product_corner_radius\",\n        \"min\": 0,\n        \"max\": 32,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.product_corner_radius\",\n        \"default\": 0\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"card_corner_radius\",\n        \"min\": 0,\n        \"max\": 16,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.card_corner_radius\",\n        \"default\": 0\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"card_title_case\",\n        \"label\": \"t:settings.product_and_card_title_case\",\n        \"options\": [\n          {\n            \"value\": \"default\",\n            \"label\": \"t:options.default\"\n          },\n          {\n            \"value\": \"uppercase\",\n            \"label\": \"t:options.uppercase\"\n          }\n        ],\n        \"default\": \"default\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.swatches\",\n    \"settings\": [\n      {\n        \"type\": \"checkbox\",\n        \"id\": \"show_variant_image\",\n        \"label\": \"t:settings.variant_images\",\n        \"default\": false\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_swatch_width\",\n        \"min\": 16,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.width\",\n        \"default\": 30\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_swatch_height\",\n        \"min\": 16,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.height\",\n        \"default\": 30\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_swatch_radius\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_radius\",\n        \"default\": 100\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"variant_swatch_border_style\",\n        \"label\": \"t:settings.borders\",\n        \"options\": [\n          {\n            \"value\": \"none\",\n            \"label\": \"t:options.none\"\n          },\n          {\n            \"value\": \"solid\",\n            \"label\": \"t:options.solid\"\n          }\n        ],\n        \"default\": \"solid\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_swatch_border_width\",\n        \"min\": 0,\n        \"max\": 10,\n        \"step\": 0.5,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1,\n        \"visible_if\": \"{{ settings.variant_swatch_border_style != 'none' }}\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_swatch_border_opacity\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"%\",\n        \"label\": \"t:settings.border_opacity\",\n        \"default\": 10,\n        \"visible_if\": \"{{ settings.variant_swatch_border_style != 'none' }}\"\n      }\n    ]\n  },\n  {\n    \"name\": \"t:names.variant_pickers\",\n    \"settings\": [\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.variant_settings\"\n      },\n      {\n        \"type\": \"header\",\n        \"content\": \"t:content.buttons\"\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_button_border_width\",\n        \"min\": 0,\n        \"max\": 4,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_width\",\n        \"default\": 1\n      },\n      {\n        \"type\": \"range\",\n        \"id\": \"variant_button_radius\",\n        \"min\": 0,\n        \"max\": 100,\n        \"step\": 1,\n        \"unit\": \"px\",\n        \"label\": \"t:settings.border_radius\",\n        \"default\": 8\n      },\n      {\n        \"type\": \"select\",\n        \"id\": \"variant_button_width\",\n        \"label\": \"t:settings.width\",\n        \"options\": [\n          {\n            \"value\": \"default-width-buttons\",\n            \"label\": \"t:options.fit\"\n          },\n          {\n            \"value\": \"equal-width-buttons\",\n            \"label\": \"t:options.fill\"\n          }\n        ],\n        \"default\": \"equal-width-buttons\"\n      }\n    ]\n  }\n]\n"
  },
  {
    "path": "layout/password.liquid",
    "content": "<!doctype html>\n<html\n  class=\"no-js{% if request.design_mode %} shopify-design-mode{% endif %}\"\n  lang=\"{{ request.locale.iso_code }}\"\n>\n  <head>\n    {%- render 'stylesheets' -%}\n\n    {%- if settings.favicon != blank -%}\n      <link\n        rel=\"icon\"\n        type=\"image/png\"\n        href=\"{{ settings.favicon | image_url: width: 32, height: 32 }}\"\n      >\n    {%- endif -%}\n\n    {% comment %} This a way to wait for main content to load when navigating to a new page so that the view transitions can work consistently {% endcomment %}\n    {% if settings.transition_to_main_product or settings.page_transition_enabled %}\n      <link\n        rel=\"expect\"\n        href=\"#MainContent\"\n        blocking=\"render\"\n        id=\"view-transition-render-blocker\"\n      >\n    {% endif %}\n\n    {%- render 'meta-tags' -%}\n    {%- render 'fonts' -%}\n    {%- render 'scripts' -%}\n    {%- render 'theme-styles-variables' -%}\n    {%- render 'color-schemes' -%}\n\n    {% if request.design_mode %}\n      {%- render 'theme-editor' -%}\n    {% endif %}\n\n    {{ content_for_header }}\n  </head>\n\n  <body class=\"page-width-{{ settings.page_width }}\">\n    <main\n      id=\"MainContent\"\n      class=\"content-for-layout password-main-content\"\n      role=\"main\"\n    >\n      {{ content_for_layout }}\n    </main>\n\n    <footer>\n      {% section 'password-footer' %}\n    </footer>\n\n    {%- form 'storefront_password' -%}\n      <dialog-component id=\"password-form\">\n        <dialog\n          ref=\"dialog\"\n          class=\"password-dialog\"\n          {% if form.errors %}\n            open\n          {% endif %}\n          aria-labelledby=\"password-dialog-heading\"\n        >\n          <div class=\"password-dialog__header\">\n            <button\n              class=\"button-unstyled close-button password-dialog__close-button\"\n              on:click=\"dialog-component/closeDialog\"\n              type=\"button\"\n            >\n              <span\n                class=\"svg-wrapper svg-wrapper--small\"\n                title=\"{{ 'actions.close' | t }}\"\n              >\n                {{ 'icon-close.svg' | inline_asset_content }}\n              </span>\n            </button>\n          </div>\n          <div class=\"password-dialog__content\">\n            <h2\n              id=\"password-dialog-heading\"\n              class=\"password-dialog__title h3\"\n            >\n              {{ 'actions.enter_password' | t }}\n            </h2>\n\n            <div class=\"email-signup__input-group\">\n              <label\n                for=\"Password\"\n                class=\"visually-hidden\"\n              >\n                {{ 'placeholders.password' | t }}\n              </label>\n\n              <input\n                type=\"password\"\n                name=\"password\"\n                id=\"Password\"\n                class=\"field__input field__input--button-radius field__input--button-padding\"\n                autocomplete=\"current-password\"\n                {% if form.errors %}\n                  aria-invalid=\"true\"\n                  aria-describedby=\"PasswordLoginForm-password-error\"\n                {%- endif -%}\n                placeholder=\"{{ 'placeholders.password' | t }}\"\n                autofocus\n              >\n\n              <button\n                class=\"button password-dialog__submit-button\"\n                type=\"submit\"\n              >\n                {{ 'actions.submit' | t }}\n              </button>\n            </div>\n\n            {%- if form.errors -%}\n              <div\n                id=\"PasswordLoginForm-password-error\"\n                class=\"email-signup__message\"\n                tabindex=\"-1\"\n              >\n                <svg\n                  viewBox=\"0 0 20 20\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  focusable=\"false\"\n                  aria-hidden=\"true\"\n                  class=\"icon-error\"\n                >\n                  {%- render 'icon', icon: 'error'  -%}\n                </svg>\n                {{ 'content.wrong_password' | t }}\n              </div>\n            {%- endif -%}\n          </div>\n        </dialog>\n      </dialog-component>\n    {%- endform -%}\n\n    {%- render 'password-layout-styles' -%}\n  </body>\n</html>\n"
  },
  {
    "path": "layout/theme.liquid",
    "content": "<!doctype html>\n<html\n  {% if request.design_mode %}\n    class=\"shopify-design-mode\"\n  {% endif %}\n  lang=\"{{ request.locale.iso_code }}\"\n>\n  <head>\n    {%- if settings.favicon != blank -%}\n      <link\n        rel=\"icon\"\n        type=\"image/png\"\n        href=\"{{ settings.favicon | image_url: width: 32, height: 32 }}\"\n      >\n    {%- endif -%}\n\n    {% comment %} This a way to wait for main content to load when navigating to a new page so that the view transitions can work consistently {% endcomment %}\n    {% if settings.transition_to_main_product or settings.page_transition_enabled %}\n      <link\n        rel=\"expect\"\n        href=\"#MainContent\"\n        blocking=\"render\"\n        id=\"view-transition-render-blocker\"\n      >\n    {% endif %}\n\n    {%- render 'meta-tags' -%}\n    {%- render 'stylesheets' -%}\n    {%- render 'fonts' -%}\n    {%- render 'scripts' -%}\n    {%- render 'theme-styles-variables' -%}\n    {%- render 'color-schemes' -%}\n\n    {% if request.design_mode %}\n      {%- render 'theme-editor' -%}\n    {% endif %}\n\n    {{ content_for_header }}\n  </head>\n\n  <body class=\"page-width-{{ settings.page_width }} card-hover-effect-{{ settings.card_hover_effect }}\">\n    {% render 'skip-to-content-link', href: '#MainContent', text: 'accessibility.skip_to_text' %}\n    <div id=\"header-group\">\n      {% sections 'header-group' %}\n    </div>\n\n    <script>\n      // Inline header height and menu style calculations to prevent layout shift\n      // Note: Updates in calculateHeaderGroupHeight(), updateTransparentHeaderOffset() and setHeaderMenuStyle() utilities.js should be kept in sync with this function\n      (function setHeaderHeighCustomProperties() {\n        /*\n         * Header calculation functions for maintaining CSS variables\n         * Mimic calculateHeaderGroupHeight() in utilities.js\n         */\n        const header = document.querySelector('header-component');\n        const headerGroup = document.querySelector('#header-group');\n        const hasHeaderSection = headerGroup?.querySelector('.header-section');\n\n        if (!header || !headerGroup) return;\n\n        const headerTopRow = header.querySelector('.header__row--top');\n        const headerHeight = header.offsetHeight;\n\n        // Calculate the total height of the header group\n        let headerGroupHeight = 0;\n        const children = headerGroup.children;\n        for (let i = 0; i < children.length; i++) {\n          const element = children[i];\n          if (element === header || !(element instanceof HTMLElement)) continue;\n          headerGroupHeight += element.offsetHeight;\n        }\n\n        // Check for transparent header special case\n        if (header.hasAttribute('transparent') && header.parentElement?.nextElementSibling) {\n          headerGroupHeight += headerHeight;\n        }\n\n        // Set CSS variables\n        document.body.style.setProperty('--header-height', `${headerHeight}px`);\n        document.body.style.setProperty('--header-group-height', `${headerGroupHeight}px`);\n\n        if (headerTopRow) {\n          window.requestAnimationFrame(function () {\n            document.body.style.setProperty('--top-row-height', `${headerTopRow.offsetHeight}px`);\n          });\n        }\n\n        /**\n         * Updates CSS custom properties for transparent header offset calculation\n         * Mimic updateTransparentHeaderOffset() in utilities.js\n         */\n\n        if (!hasHeaderSection || !header?.hasAttribute('transparent')) {\n          document.body.style.setProperty('--transparent-header-offset-boolean', '0');\n          return;\n        }\n\n        const hasImmediateSection = hasHeaderSection.nextElementSibling?.classList.contains('shopify-section');\n\n        const shouldApplyOffset = !hasImmediateSection ? '1' : '0';\n        document.body.style.setProperty('--transparent-header-offset-boolean', shouldApplyOffset);\n      })();\n\n      (function setHeaderMenuStyle() {\n        const headerComponent = document.querySelector('#header-component');\n        if (headerComponent) {\n          const isTouchDevice = 'ontouchstart' in window && navigator.maxTouchPoints > 0;\n          const overflowList = headerComponent?.querySelector('overflow-list');\n          const hasReachedMinimum = overflowList && overflowList.hasAttribute('minimum-reached');\n          headerComponent.dataset.menuStyle = isTouchDevice || hasReachedMinimum ? 'drawer' : 'menu';\n        }\n      })();\n    </script>\n\n    <main\n      id=\"MainContent\"\n      class=\"content-for-layout\"\n      role=\"main\"\n      data-page-transition-enabled=\"{{ settings.page_transition_enabled }}\"\n      data-product-transition=\"{{ settings.transition_to_main_product }}\"\n      data-template=\"{{ template }}\"\n    >\n      {{ content_for_layout }}\n    </main>\n\n    <footer>\n      {% sections 'footer-group' %}\n    </footer>\n\n    {% render 'search-modal' %}\n\n    {% if settings.quick_add or settings.mobile_quick_add %}\n      {% render 'quick-add-modal' %}\n    {% endif %}\n  </body>\n</html>\n"
  },
  {
    "path": "locales/bg.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Зареждане на видео: {{ description }}\",\n    \"sold_out\": \"Изчерпано\",\n    \"email_signup\": {\n      \"label\": \"Имейл\",\n      \"placeholder\": \"Имейл адрес\",\n      \"success\": \"Благодарим, че се абонирахте.\"\n    },\n    \"filter\": \"Филтър\",\n    \"payment_methods\": \"Начини на плащане\",\n    \"contact_form\": {\n      \"name\": \"Име\",\n      \"email\": \"Имейл адрес\",\n      \"phone\": \"Телефон\",\n      \"comment\": \"Коментар\",\n      \"post_success\": \"Благодарим, че се свързахте с нас. Ще се свържем с вас възможно най-скоро.\",\n      \"error_heading\": \"Коригирайте следното:\"\n    },\n    \"slider_label\": \"Плъзгач\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Възпроизвеждане на 3D модел\",\n    \"play_video\": \"Възпроизвеждане на видеоклип\",\n    \"unit_price\": \"Единична цена\",\n    \"country_results_count\": \"{{ count }} резултата\",\n    \"slideshow_pause\": \"Пауза на слайдшоуто\",\n    \"slideshow_play\": \"Възпроизвеждане на слайдшоу\",\n    \"remove_item\": \"Премахване на {{ title}}\",\n    \"skip_to_text\": \"Преминаване към съдържанието\",\n    \"skip_to_product_info\": \"Прескочи към информацията за продукта\",\n    \"skip_to_results_list\": \"Преминаване към списъка с резултати\",\n    \"new_window\": \"Отваря се в нов прозорец.\",\n    \"slideshow_next\": \"Следващ слайд\",\n    \"slideshow_previous\": \"Предишен слайд\",\n    \"close_dialog\": \"Затваряне на диалоговия прозорец\",\n    \"reset_search\": \"Подновяване на търсенето\",\n    \"search_results_count\": \"Открити са {{ count }} резултата от търсенето за „{{ query }}“\",\n    \"search_results_no_results\": \"Няма резултати за „{{ query }}“\",\n    \"filters\": \"Филтри\",\n    \"filter_count\": {\n      \"one\": \"Приложен е {{ count }} филтър\",\n      \"other\": \"Приложени са {{ count }} филтъра\"\n    },\n    \"account\": \"Профил\",\n    \"cart\": \"Количка\",\n    \"cart_count\": \"Общо артикули в количката\",\n    \"menu\": \"Меню\",\n    \"country_region\": \"Държава/регион\",\n    \"slide_status\": \"Слайд {{ index }} от {{ length }}\",\n    \"scroll_to\": \"Превъртете до {{ title }}\",\n    \"loading_product_recommendations\": \"Зареждане на препоръчани продукти.\",\n    \"discount\": \"Прилагане на код за отстъпка\",\n    \"discount_applied\": \"Приложен код за отстъпка: {{ code }}\",\n    \"inventory_status\": \"Статус на стоковите запаси\",\n    \"pause_video\": \"Пауза на видеоклипа\",\n    \"find_country\": \"Търсене на държава\",\n    \"localization_region_and_language\": \"Инструмент за избор на регион и език\",\n    \"decrease_quantity\": \"Намаляване на количеството\",\n    \"increase_quantity\": \"Увеличаване на количеството\",\n    \"quantity\": \"Количество\",\n    \"rating\": \"Оценката за този продукт е {{ rating }} от 5\",\n    \"nested_product\": \"{{ product_title }} за {{ parent_title }}\",\n    \"discount_menu\": \"Кодове за отстъпка\",\n    \"remove\": \"Премахване\",\n    \"view_pricing_info\": \"Преглед на информация за ценообразуването\",\n    \"open_hotspot\": \"Отваряне на гореща точка\",\n    \"slideshow\": \"Слайдшоу\",\n    \"header_navigation_label\": \"Основна\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Добавяне към количката\",\n    \"clear_all\": \"Изчистване на всички\",\n    \"remove\": \"Премахване\",\n    \"view_in_your_space\": \"Преглед във вашето пространство\",\n    \"show_filters\": \"Филтър\",\n    \"clear\": \"Изчисти\",\n    \"continue_shopping\": \"Продължете да пазарувате\",\n    \"log_in_html\": \"Имате профил? <a href=\\\"{{ link }}\\\">Влезте</a> за по-бързо преминаване към плащане.\",\n    \"see_items\": {\n      \"one\": \"Вижте {{ count }} артикул\",\n      \"other\": \"Вижте {{ count }} артикула\"\n    },\n    \"view_all\": \"Покажи всички\",\n    \"add\": \"Добавяне\",\n    \"choose\": \"Избор\",\n    \"added\": \"Добавено\",\n    \"show_less\": \"Покажи по-малко\",\n    \"show_more\": \"Покажи повече\",\n    \"close\": \"Затваряне\",\n    \"more\": \"Още\",\n    \"zoom\": \"Увеличаване\",\n    \"close_dialog\": \"Затваряне на диалоговия прозорец\",\n    \"reset\": \"Нулиране\",\n    \"enter_using_password\": \"Влизане с парола\",\n    \"submit\": \"Изпрати\",\n    \"enter_password\": \"Въведете парола\",\n    \"remove_discount\": \"Премахване на отстъпка {{ code }}\",\n    \"view_store_information\": \"Вижте информация за магазина\",\n    \"back\": \"Назад\",\n    \"log_in\": \"Влизане\",\n    \"log_out\": \"Излизане\",\n    \"apply\": \"Приложи\",\n    \"sign_up\": \"Регистриране\",\n    \"sign_in_options\": \"Други опции за влизане\",\n    \"open_image_in_full_screen\": \"Отваряне на изображението на цял екран\",\n    \"sort\": \"Сортиране\",\n    \"show_all_options\": \"Показване на всички опции\",\n    \"open\": \"Отваряне\"\n  },\n  \"content\": {\n    \"reviews\": \"мнения\",\n    \"language\": \"Език\",\n    \"localization_region_and_language\": \"Регион и език\",\n    \"no_results_found\": \"Не са открити резултати\",\n    \"cart_total\": \"Обща сума в количката\",\n    \"your_cart_is_empty\": \"Количката ви е празна\",\n    \"product_image\": \"Изображение на продукта\",\n    \"product_information\": \"Информация за продукта\",\n    \"quantity\": \"Количество\",\n    \"product_total\": \"Обща стойност на продукта\",\n    \"cart_estimated_total\": \"Очаквана обща сума\",\n    \"seller_note\": \"Специални инструкции\",\n    \"cart_subtotal\": \"Междинна сума\",\n    \"discounts\": \"Отстъпки\",\n    \"discount\": \"Отстъпка\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"С включено мито и данъци. Отстъпките и <a href=\\\"{{ link }}\\\">доставката</a> се изчисляват при плащане.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"С включено мито и данъци. Отстъпките и доставката се изчисляват при плащане.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"С включени данъци. Отстъпките и <a href=\\\"{{ link }}\\\">доставката</a> се изчисляват при плащане.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"С включени данъци. Отстъпките и доставката се изчисляват при плащане.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"С включено мито. Данъците, отстъпките и <a href=\\\"{{ link }}\\\">доставката</a> се изчисляват при плащане.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"С включено мито. Данъците, отстъпките и доставката се изчисляват при плащане.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Данъците, отстъпките и <a href=\\\"{{ link }}\\\">доставката</a> се изчисляват при плащане.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Данъците, отстъпките и доставката се изчисляват при плащане.\",\n    \"checkout\": \"Преминаване към плащане\",\n    \"cart_title\": \"Количка\",\n    \"price\": \"Цена\",\n    \"price_regular\": \"Обичайна цена\",\n    \"price_compare_at\": \"Сравнение на цени\",\n    \"price_sale\": \"Цена при разпродажба\",\n    \"duties_and_taxes_included\": \"С включено мито и данъци.\",\n    \"duties_included\": \"С включено мито.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Доставката</a> се изчислява при плащане.\",\n    \"taxes_included\": \"С включени данъци.\",\n    \"product_badge_sold_out\": \"Изчерпано\",\n    \"product_badge_sale\": \"Разпродажба\",\n    \"grid_view\": {\n      \"default_view\": \"По подразбиране\",\n      \"grid_fieldset\": \"Grid изглед\",\n      \"single_item\": \"Единична\",\n      \"zoom_out\": \"Намаляване\"\n    },\n    \"search_input_label\": \"Търсене\",\n    \"search_input_placeholder\": \"Търсене\",\n    \"search_results\": \"Резултати от търсенето\",\n    \"search_results_label\": \"Резултати от търсенето\",\n    \"search_results_no_results\": \"Няма резултати за „{{ terms }}“. Опитайте друго търсене.\",\n    \"search_results_resource_articles\": \"Публикации в блог\",\n    \"search_results_resource_collections\": \"Колекции\",\n    \"search_results_resource_pages\": \"Страници\",\n    \"search_results_resource_products\": \"Продукти\",\n    \"search_results_resource_queries\": \"Търсене в предложенията\",\n    \"search_results_view_all\": \"Покажи всички\",\n    \"search_results_view_all_button\": \"Покажи всички\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} продукт\",\n      \"other\": \"{{ count }} продукта\"\n    },\n    \"recently_viewed_products\": \"Наскоро разгледани\",\n    \"unavailable\": \"Неналично\",\n    \"collection_placeholder\": \"Название на колекцията\",\n    \"product_card_placeholder\": \"Название на продукта\",\n    \"product_count\": \"Брой продукти\",\n    \"item_count\": {\n      \"one\": \"{{ count }} артикул\",\n      \"other\": \"{{ count }} артикула\"\n    },\n    \"errors\": \"Грешки\",\n    \"search\": \"Търсене\",\n    \"search_results_no_results_check_spelling\": \"Няма резултати за „{{ terms }}“. Проверете начина на изписване или използвайте различна дума или фраза.\",\n    \"featured_products\": \"Препоръчани продукти\",\n    \"filters\": \"Филтри\",\n    \"no_products_found\": \"Не са открити продукти.\",\n    \"price_from\": \"От {{ price }}\",\n    \"price_filter_html\": \"Най-високата цена е {{ price }}\",\n    \"use_fewer_filters_html\": \"Опитайте да използвате по-малко филтри или <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">изчистете всички филтри</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Прочетете повече...\",\n    \"wrong_password\": \"Неправилна парола\",\n    \"discount_code\": \"Код за отстъпка\",\n    \"pickup_available_at_html\": \"Възможност за вземане от <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Възможност за вземане от {{ pickup_time }}\",\n    \"pickup_not_available\": \"В момента няма възможност за вземане\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"account_title\": \"Профил\",\n    \"account_title_personalized\": \"Здравейте, {{ first_name }}\",\n    \"account_orders\": \"Поръчки\",\n    \"account_profile\": \"Профил\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"С включено мито и данъци. Доставката се изчислява при плащане.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"С включено мито и данъци. Доставката се изчислява при плащане.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"С включено мито. Доставката се изчислява при плащане.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"С включено мито. Доставката се изчислява при плащане.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Данъците и <a href=\\\"{{ link }}\\\">доставката</a> се изчисляват при плащане.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Данъците и доставката се изчисляват при плащане.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"С включени данъци. Доставката се изчислява при плащане.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"С включени данъци. Доставката се изчислява при плащане.\",\n    \"view_more_details\": \"Покажи повече подробности\",\n    \"page_placeholder_title\": \"Заглавие на страница\",\n    \"page_placeholder_content\": \"Изберере страница, за да видите съдържанието ú\",\n    \"placeholder_image\": \"Временно изображение\",\n    \"inventory_low_stock\": \"Ниски наличности\",\n    \"inventory_in_stock\": \"В наличност\",\n    \"inventory_out_of_stock\": \"Изчерпано количество\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Оставаща стойност: {{ count }}\",\n      \"other\": \"Оставаща стойност: {{ count }}\"\n    },\n    \"shipping_policy\": \"Доставката се изчислява при плащане.\",\n    \"discount_code_error\": \"Кодът за отстъпка не може да бъде приложен към вашата количка\",\n    \"shipping_discount_error\": \"Отстъпките от доставката се показват при преминаването към плащане след добавяне на адрес\",\n    \"powered_by\": \"Този магазин ще се поддържа от\",\n    \"store_owner_link_html\": \"Вие ли сте собственикът на магазина? <a href=\\\"{{ link }}\\\">Влезте тук</a>\",\n    \"recipient_form_send_to\": \"Изпращане до\",\n    \"recipient_form_email_label\": \"Имейл на получателя\",\n    \"recipient_form_email_label_my_email\": \"Моят имейл\",\n    \"recipient_form_email_address\": \"Имейл адрес на получателя\",\n    \"recipient_form_name_label\": \"Име на получателя (незадължително)\",\n    \"recipient_form_message\": \"Съобщение (незадължително)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} използвани знака\",\n    \"recipient_form_send_on\": \"ГГГГ-ММ-ДД\",\n    \"recipient_form_send_on_label\": \"Дата на изпращане (незадължително)\",\n    \"recipient_form_fields_visible\": \"Полетата във формуляра за получателя вече са видими\",\n    \"recipient_form_fields_hidden\": \"Полетата във формуляра за получателя вече са скрити\",\n    \"recipient_form_error\": \"Възникна грешка при подаването на формуляра\",\n    \"product_custom_property_character_count\": \"Използвани знаци: {{ used_chars }}/{{ max_chars }}\",\n    \"terms_and_policies\": \"Правила и условия\",\n    \"pagination\": {\n      \"nav_label\": \"Навигиране в странирането\",\n      \"previous\": \"Предишна\",\n      \"next\": \"Следваща\",\n      \"page\": \"Страница {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Налице е опция за ценообразуване според обем\",\n    \"volume_pricing\": \"Ценообразуване според обем\",\n    \"at_price_each\": \"при {{ price }}/бр.\",\n    \"each\": \"{{ price }}/бр.\",\n    \"each_abbreviation\": \"бр.\",\n    \"price_at\": \"при\",\n    \"price_range\": \"Ценови диапазон\",\n    \"item_count_cutoff\": \"Повече от {{ count }} артикула\",\n    \"cancel\": \"Анулиране\",\n    \"product_subtotal\": \"Междинна сума за продуктите\",\n    \"quantity_per_item\": \"/бр.\",\n    \"remove_all\": \"Премахване на всички\",\n    \"remove_all_items_confirmation\": \"Премахване на всички {{ count }} артикула от количката?\",\n    \"remove_one_item_confirmation\": \"Премахване на 1 артикул от количката?\",\n    \"total_items\": \"Общо артикули\",\n    \"variant\": \"Вариант\",\n    \"variant_total\": \"Обща сума за варианта\",\n    \"view_cart\": \"Преглед на количката\",\n    \"your_cart\": \"Вашата количка\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 артикул е добавен в количката\",\n      \"other\": \"{{ count }} артикула са добавени в количката\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Използвайте ваучера за подарък онлайн или QR код в магазина\",\n      \"title\": \"Това е остатъкът от вашия ваучер за подарък на стойност {{ value }} за {{ shop }}!\",\n      \"subtext\": \"Вашият ваучер за подарък\",\n      \"shop_link\": \"Посетете магазина онлайн\",\n      \"add_to_apple_wallet\": \"Добавяне към Apple Wallet\",\n      \"qr_image_alt\": \"QR код – сканирайте го, за да използвате ваучера за подарък\",\n      \"copy_code\": \"Копиране на кода на ваучер за подарък\",\n      \"expiration_date\": \"Изтича на {{ expires_on }}\",\n      \"copy_code_success\": \"Кодът е копиран успешно\",\n      \"expired\": \"Изтекъл\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Парола\",\n    \"search\": \"Търсене\",\n    \"product_title\": \"Название на продукта\",\n    \"collection_title\": \"Название на колекцията\",\n    \"blog_posts\": \"Публикации в блогове\",\n    \"blog_post_title\": \"Заглавие\",\n    \"blog_post_author\": \"Автор\",\n    \"blog_post_date\": \"Дата\",\n    \"blog_post_description\": \"Откъс от съдържанието на Вашата публикация в блога\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Добавяне към количката\",\n      \"adding_to_cart\": \"Добавяне...\",\n      \"added_to_cart\": \"Добавено в количката\",\n      \"add_to_cart_error\": \"Грешка при добавянето в количката\",\n      \"sold_out\": \"Изчерпано\",\n      \"unavailable\": \"Неналично\",\n      \"quantity_error_max\": \"За този артикул има максимум от {{ maximum }}\",\n      \"quantity\": \"Количество\",\n      \"quantity_increments\": \"Стъпки от {{ increment }}\",\n      \"quantity_minimum\": \"Минимум: {{ minimum }}\",\n      \"quantity_maximum\": \"Максимум: {{ maximum }}\",\n      \"in_cart\": \"в количката\",\n      \"default_title\": \"Заглавие по подразбиране\",\n      \"sticky_add_to_cart\": \"Лента за бързо добавяне в количката\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"до\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} коментар\",\n        \"other\": \"{{ count }} коментара\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Имейл адрес\",\n      \"error\": \"Коментарът не е публикуван, обърнете внимание на следното:\",\n      \"heading\": \"Оставяне на коментар\",\n      \"message\": \"Съобщение\",\n      \"moderated\": \"Имайте предвид, че коментарите трябва да бъдат одобрени, преди да се публикуват.\",\n      \"name\": \"Име\",\n      \"post\": \"Публикуване на коментар\",\n      \"success_moderated\": \"Коментарът е публикуван, в очакване на модериране\",\n      \"success\": \"Коментарът е публикуван\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/cs.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Načíst video: {{ description }}\",\n    \"sold_out\": \"Vyprodáno\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"E-mailová adresa\",\n      \"success\": \"Díky za odběr!\"\n    },\n    \"filter\": \"Filtr\",\n    \"payment_methods\": \"Platební metody\",\n    \"contact_form\": {\n      \"name\": \"Název\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Komentář\",\n      \"post_success\": \"Děkujeme, že jste nás kontaktovali. Ozveme se vám co možná nejdříve.\",\n      \"error_heading\": \"Upravte prosím následující informace:\"\n    },\n    \"slider_label\": \"Posuvník\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Přehrát 3D model\",\n    \"play_video\": \"Přehrát video\",\n    \"unit_price\": \"Jednotková cena\",\n    \"country_results_count\": \"Počet výsledků: {{ count }}\",\n    \"slideshow_pause\": \"Pozastavit prezentaci\",\n    \"slideshow_play\": \"Přehrát prezentaci\",\n    \"remove_item\": \"Odstranit {{ title}}\",\n    \"skip_to_text\": \"Přeskočit na obsah\",\n    \"skip_to_product_info\": \"Přejít na informace o produktu\",\n    \"skip_to_results_list\": \"Přejít na seznam výsledků\",\n    \"new_window\": \"Otevře se v novém okně.\",\n    \"slideshow_next\": \"Další snímek\",\n    \"slideshow_previous\": \"Předchozí snímek\",\n    \"close_dialog\": \"Zavřít dialog\",\n    \"reset_search\": \"Resetovat hledání\",\n    \"search_results_count\": \"Pro dotaz „{{ query }}“ byl nalezen tento počet výsledků: {{ count }}\",\n    \"search_results_no_results\": \"Pro dotaz „{{ query }}“ nebyly nalezeny žádné výsledky\",\n    \"filters\": \"Filtry\",\n    \"filter_count\": {\n      \"one\": \"Je použit {{ count }} filtr\",\n      \"other\": \"Je použito více filtrů ({{ count }})\",\n      \"few\": \"Je použito více filtrů ({{ count }})\",\n      \"many\": \"Je použito více filtrů ({{ count }})\"\n    },\n    \"account\": \"Účet\",\n    \"cart\": \"Košík\",\n    \"cart_count\": \"Celkem položek v košíku\",\n    \"menu\": \"Nabídka\",\n    \"country_region\": \"Země/region\",\n    \"slide_status\": \"Snímek {{ index }} z {{ length }}\",\n    \"scroll_to\": \"Přejděte na {{ title }}\",\n    \"loading_product_recommendations\": \"Načítají se doporučené produkty\",\n    \"discount\": \"Použít slevový kód\",\n    \"discount_menu\": \"Slevové kódy\",\n    \"discount_applied\": \"Uplatněný slevový kód: {{ code }}\",\n    \"inventory_status\": \"Stav skladových zásob\",\n    \"pause_video\": \"Pozastavit video\",\n    \"find_country\": \"Najít zemi\",\n    \"localization_region_and_language\": \"Výběr regionu a jazyka\",\n    \"decrease_quantity\": \"Snížit množství\",\n    \"increase_quantity\": \"Zvýšit množství\",\n    \"rating\": \"Hodnocení tohoto produktu je {{ rating }} z 5\",\n    \"quantity\": \"Množství\",\n    \"nested_product\": \"{{ product_title }} pro {{ parent_title }}\",\n    \"remove\": \"Odebrat\",\n    \"view_pricing_info\": \"Zobrazit informace o cenách\",\n    \"open_hotspot\": \"Otevřený hotspot\",\n    \"slideshow\": \"Prezentace\",\n    \"header_navigation_label\": \"Hlavní\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Přidat do košíku\",\n    \"clear_all\": \"Vymazat vše\",\n    \"remove\": \"Odebrat\",\n    \"view_in_your_space\": \"Zobrazit ve vašem prostoru\",\n    \"show_filters\": \"Filtr\",\n    \"clear\": \"Vymazat\",\n    \"continue_shopping\": \"Pokračovat v nákupu\",\n    \"log_in_html\": \"Máte účet? <a href=\\\"{{ link }}\\\">Přihlaste se</a>, abyste urychlili zaplacení.\",\n    \"see_items\": {\n      \"one\": \"Viz {{ count }} položka\",\n      \"other\": \"Viz {{ count }} položek\",\n      \"few\": \"Viz {{ count }} položek\",\n      \"many\": \"Viz {{ count }} položek\"\n    },\n    \"view_all\": \"Zobrazit vše\",\n    \"add\": \"Přidat\",\n    \"choose\": \"Vybrat\",\n    \"added\": \"Přidáni\",\n    \"show_less\": \"Zobrazit méně\",\n    \"show_more\": \"Zobrazit více\",\n    \"close\": \"Zavřít\",\n    \"more\": \"Více\",\n    \"reset\": \"Resetovat\",\n    \"zoom\": \"Lupa\",\n    \"close_dialog\": \"Zavřít dialog\",\n    \"back\": \"Zpět\",\n    \"log_in\": \"Přihlásit se\",\n    \"log_out\": \"Odhlásit se\",\n    \"remove_discount\": \"Odebrat slevu {{ code }}\",\n    \"enter_using_password\": \"Vstoupit pomocí hesla\",\n    \"submit\": \"Odeslat\",\n    \"enter_password\": \"Zadat heslo\",\n    \"view_store_information\": \"Zobrazit informace obchodu\",\n    \"apply\": \"Použít\",\n    \"sign_in_options\": \"Další možnosti přihlášení\",\n    \"sign_up\": \"Zaregistrovat se\",\n    \"open_image_in_full_screen\": \"Otevřít obrázek na celou obrazovku\",\n    \"sort\": \"Třídit\",\n    \"show_all_options\": \"Zobrazit všechny možnosti\",\n    \"open\": \"Otevřít\"\n  },\n  \"content\": {\n    \"reviews\": \"recen.\",\n    \"language\": \"Jazyk\",\n    \"localization_region_and_language\": \"Oblast a jazyk\",\n    \"no_results_found\": \"Nebyly nalezeny žádné výsledky\",\n    \"cart_total\": \"Součet košíku\",\n    \"your_cart_is_empty\": \"Košík je prázdný\",\n    \"product_image\": \"Obrázek produktu\",\n    \"product_information\": \"Informace o produktu\",\n    \"quantity\": \"Množství\",\n    \"product_total\": \"Celkem kusů produktu\",\n    \"cart_estimated_total\": \"Odhadovaný součet\",\n    \"seller_note\": \"Zvláštní pokyny\",\n    \"cart_subtotal\": \"Mezisoučet\",\n    \"discounts\": \"Slevy\",\n    \"discount\": \"Sleva\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Včetně cla a daní. Slevy a <a href=\\\"{{ link }}\\\">cena dopravy</a> se vypočítají na pokladně.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Včetně cla a daní. Slevy a cena dopravy se vypočítají na pokladně.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Včetně daní. Slevy a <a href=\\\"{{ link }}\\\">cena dopravy</a> se vypočítají na pokladně.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Včetně daní. Slevy a cena dopravy se vypočítají na pokladně.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Včetně cla. Daně, slevy a <a href=\\\"{{ link }}\\\">cena dopravy</a> se vypočítají na pokladně.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Včetně cla. Daně, slevy a cena dopravy se vypočítají na pokladně.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Daně, slevy a <a href=\\\"{{ link }}\\\">cena dopravy</a> se vypočítají na pokladně.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Daně, slevy a cena dopravy se vypočítají na pokladně.\",\n    \"checkout\": \"Zaplatit\",\n    \"cart_title\": \"Košík\",\n    \"price\": \"Cena\",\n    \"price_regular\": \"Běžná cena\",\n    \"price_compare_at\": \"Původní cena\",\n    \"price_sale\": \"Výprodejová cena\",\n    \"duties_and_taxes_included\": \"Včetně cla a daní.\",\n    \"duties_included\": \"Včetně cla.\",\n    \"shipping_policy_html\": \"Cena <a href=\\\"{{ link }}\\\">dopravy</a> se vypočítá v pokladně.\",\n    \"taxes_included\": \"Včetně daní.\",\n    \"product_badge_sold_out\": \"Vyprodáno\",\n    \"product_badge_sale\": \"Výprodej\",\n    \"search_input_label\": \"Začněte hledat\",\n    \"search_input_placeholder\": \"Vyhledat\",\n    \"search_results\": \"Výsledky hledání\",\n    \"search_results_label\": \"Výsledky hledání\",\n    \"search_results_no_results\": \"Pro dotaz „{{ terms }}“ nebyly nalezeny žádné výsledky. Zkuste vyhledat jiný dotaz.\",\n    \"search_results_resource_articles\": \"Příspěvky na blogu\",\n    \"search_results_resource_collections\": \"Kolekce\",\n    \"search_results_resource_pages\": \"Stránky\",\n    \"search_results_resource_products\": \"Produkty\",\n    \"search_results_resource_queries\": \"Návrhy hledaných výrazů\",\n    \"search_results_view_all\": \"Zobrazit vše\",\n    \"search_results_view_all_button\": \"Zobrazit vše\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} prod.\",\n      \"few\": \"{{ count }} prod.\",\n      \"many\": \"{{ count }} prod.\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Výchozí\",\n      \"grid_fieldset\": \"Sloupcová mřížka\",\n      \"single_item\": \"Jedna volba\",\n      \"zoom_out\": \"Oddálit\"\n    },\n    \"unavailable\": \"Není k dispozici\",\n    \"collection_placeholder\": \"Název kolekce\",\n    \"product_card_placeholder\": \"Název produktu\",\n    \"recently_viewed_products\": \"Nedávno zobrazené\",\n    \"product_count\": \"Počet produktů\",\n    \"item_count\": {\n      \"one\": \"{{ count }} položka\",\n      \"other\": \"{{ count }} polož.\",\n      \"few\": \"{{ count }} polož.\",\n      \"many\": \"{{ count }} polož.\"\n    },\n    \"errors\": \"Chyby\",\n    \"search\": \"Hledání\",\n    \"search_results_no_results_check_spelling\": \"Pro dotaz „{{ terms }}\\\" nebyly nalezeny žádné výsledky. Zkontrolujte pravopis nebo zadejte jiné slovo či slovní spojení.\",\n    \"featured_products\": \"Propagované produkty\",\n    \"no_products_found\": \"Nebyly nalezeny žádné produkty.\",\n    \"price_from\": \"Od {{ price }}\",\n    \"use_fewer_filters_html\": \"Zkuste použít méně filtrů, nebo <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">vymazat všechny filtry</a>.\",\n    \"filters\": \"Filtry\",\n    \"price_filter_html\": \"Nejvyšší cena je {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Účet\",\n    \"account_title_personalized\": \"Přihlášený uživatel: {{ first_name }}\",\n    \"account_orders\": \"Objednávky\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Slevový kód\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Včetně cla a daní. Cena dopravy se vypočítá na pokladně.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Včetně cla a daní. Cena dopravy se vypočítá na pokladně.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Včetně cla. Cena dopravy se vypočítá na pokladně.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Včetně cla. Cena dopravy se vypočítá na pokladně.\",\n    \"pickup_available_at_html\": \"Vyzvednutí je k dispozici v lokalitě {{ location }}\",\n    \"pickup_available_in\": \"Vyzvednutí je k dispozici v {{ pickup_time }}\",\n    \"pickup_not_available\": \"Vyzvednutí není momentálně k dispozici\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Přečíst si více...\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Daně a <a href=\\\"{{ link }}\\\">doprava</a> se vypočítají na pokladně\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Daně a doprava se vypočítají na pokladně\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Včetně daní. Cena dopravy se vypočítá na pokladně.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Včetně daní. Cena dopravy se vypočítá na pokladně.\",\n    \"wrong_password\": \"Heslo není správné\",\n    \"view_more_details\": \"Zobrazit další podrobnosti\",\n    \"inventory_low_stock\": \"Skladové zásoby docházejí\",\n    \"inventory_in_stock\": \"Skladem\",\n    \"inventory_out_of_stock\": \"Není skladem\",\n    \"page_placeholder_title\": \"Titulek stránky\",\n    \"page_placeholder_content\": \"Vyberte stránku, abyste zobrazili její obsah.\",\n    \"placeholder_image\": \"Zástupný znak obrázku\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Zbývá: {{ count }}\",\n      \"other\": \"Zbývá: {{ count }}\",\n      \"few\": \"Zbývá: {{ count }}\",\n      \"many\": \"Zbývá: {{ count }}\"\n    },\n    \"powered_by\": \"Obchod bude využívat platformu\",\n    \"store_owner_link_html\": \"Jste majitelem obchodu? <a href=\\\"{{ link }}\\\">Přihlaste se zde</a>\",\n    \"shipping_discount_error\": \"Slevy na dopravu se zobrazí při placení po přidání adresy.\",\n    \"discount_code_error\": \"Slevový kód nelze na váš košík uplatnit\",\n    \"shipping_policy\": \"Cena za dopravu se vypočítá u pokladny.\",\n    \"recipient_form_send_to\": \"Odeslat na\",\n    \"recipient_form_email_label\": \"E-mail příjemce\",\n    \"recipient_form_email_label_my_email\": \"Můj e-mail\",\n    \"recipient_form_email_address\": \"E-mailová adresa příjemce\",\n    \"recipient_form_name_label\": \"Jméno příjemce (volitelné)\",\n    \"recipient_form_message\": \"Zpráva (volitelné)\",\n    \"recipient_form_characters_used\": \"Použito {{ used_chars }}/{{ max_chars }} znaků\",\n    \"recipient_form_send_on\": \"RRRR-MM-DD\",\n    \"recipient_form_send_on_label\": \"Datum odeslání (volitelné)\",\n    \"recipient_form_fields_visible\": \"Pole formuláře příjemce jsou nyní viditelná\",\n    \"recipient_form_fields_hidden\": \"Pole formuláře příjemce jsou nyní skrytá\",\n    \"recipient_form_error\": \"Vyskytla se chyba při odesílání formuláře\",\n    \"product_custom_property_character_count\": \"Použito {{ used_chars }}/{{ max_chars }} znaků\",\n    \"terms_and_policies\": \"Podmínky a zásady\",\n    \"pagination\": {\n      \"nav_label\": \"Navigace stránkováním\",\n      \"previous\": \"Předchozí\",\n      \"next\": \"Další\",\n      \"page\": \"Strana {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Jsou dostupné objemové slevy\",\n    \"volume_pricing\": \"Objemové slevy\",\n    \"at_price_each\": \"za {{ price }}/ks\",\n    \"each\": \"{{ price }}/ks\",\n    \"each_abbreviation\": \"ks\",\n    \"price_at\": \"za\",\n    \"price_range\": \"Cenové rozmezí\",\n    \"cancel\": \"Zrušit\",\n    \"product_subtotal\": \"Mezisoučet produktu\",\n    \"quantity_per_item\": \"/ks\",\n    \"remove_all\": \"Odebrat vše\",\n    \"remove_all_items_confirmation\": \"Chcete odebrat všechny položky ({{ count }}) z košíku?\",\n    \"remove_one_item_confirmation\": \"Chcete odebrat 1 položku z košíku?\",\n    \"total_items\": \"Celkový počet položek\",\n    \"variant\": \"Varianta\",\n    \"variant_total\": \"Varianta celkem\",\n    \"view_cart\": \"Zobrazit košík\",\n    \"your_cart\": \"Váš košík\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 položka byla přidána do košíku\",\n      \"other\": \"Počet položek přidaných do košíku: {{ count }}\",\n      \"few\": \"Počet položek přidaných do košíku: {{ count }}\",\n      \"many\": \"Počet položek přidaných do košíku: {{ count }}\"\n    },\n    \"item_count_cutoff\": \"Počet položek: více než {{ count }}\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Použijte kód dárkové karty online nebo QR kód na prodejně\",\n      \"title\": \"Zůstatek vaší dárkové karty pro obchod {{ shop }} je: {{ value }}!\",\n      \"subtext\": \"Vaše dárková karta\",\n      \"shop_link\": \"Navštívit online obchod\",\n      \"add_to_apple_wallet\": \"Přidat do Apple Peněženky\",\n      \"qr_image_alt\": \"QR kód: po naskenování můžete uplatnit svou dárkovou kartu\",\n      \"copy_code\": \"Zkopírovat kód dárkové karty\",\n      \"expiration_date\": \"Platnost skončí {{ expires_on }}\",\n      \"copy_code_success\": \"Kód byl úspěšně zkopírován\",\n      \"expired\": \"Po konci platnosti\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Heslo\",\n    \"search\": \"Vyhledat\",\n    \"product_title\": \"Název produktu\",\n    \"collection_title\": \"Název kolekce\",\n    \"blog_posts\": \"Blogové příspěvky\",\n    \"blog_post_title\": \"Název\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Úryvek z obsahu vašeho blogového příspěvku\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Přidat do košíku\",\n      \"adding_to_cart\": \"Přidávání do košíku...\",\n      \"added_to_cart\": \"Přidáno do košíku\",\n      \"add_to_cart_error\": \"Chyba při přidávání do košíku\",\n      \"sold_out\": \"Vyprodáno\",\n      \"unavailable\": \"Není k dispozici\",\n      \"quantity_error_max\": \"Maximum této položky je: {{ maximum }}\",\n      \"quantity\": \"Množství\",\n      \"quantity_increments\": \"Přírůstky: {{ increment }}\",\n      \"quantity_minimum\": \"Minimum: {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum: {{ maximum }}\",\n      \"in_cart\": \"v košíku\",\n      \"default_title\": \"Výchozí název\",\n      \"sticky_add_to_cart\": \"Panel Rychle přidat do košíku\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"až\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentář\",\n        \"other\": \"počet komentářů: {{ count }}\",\n        \"few\": \"počet komentářů: {{ count }}\",\n        \"many\": \"počet komentářů: {{ count }}\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"Komentář se nepodařilo odeslat, prosím vyřešte následující:\",\n      \"heading\": \"Zanechat komentář\",\n      \"message\": \"Zpráva\",\n      \"moderated\": \"Upozorňujeme, že komentáře musí být před zveřejněním schváleny.\",\n      \"name\": \"Jméno\",\n      \"post\": \"Publikovat komentář\",\n      \"success_moderated\": \"Komentář odeslán, čeká na schválení\",\n      \"success\": \"Komentář zveřejněn\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/cs.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Ohraničení\",\n    \"collapsible_row\": \"Sbalitelný řádek\",\n    \"colors\": \"Barvy\",\n    \"custom_section\": \"Vlastní sekce\",\n    \"icon\": \"Ikona\",\n    \"logo_and_favicon\": \"Logo a favikona\",\n    \"overlapping_blocks\": \"Překrývající se bloky\",\n    \"product_buy_buttons\": \"Nákupní tlačítka\",\n    \"product_description\": \"Popis\",\n    \"product_price\": \"Cena\",\n    \"product_variant_picker\": \"Selektor variant\",\n    \"slideshow\": \"Prezentace\",\n    \"typography\": \"Typografie\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Ovládací prvky prezentace\",\n    \"size\": \"Velikost\",\n    \"spacing\": \"Rozestupy\",\n    \"product_recommendations\": \"Doporučené produkty\",\n    \"product_media\": \"Média produktu\",\n    \"featured_collection\": \"Propagovaná kolekce\",\n    \"add_to_cart\": \"Přidat do košíku\",\n    \"email_signup\": \"Odběr e‑mailů\",\n    \"submit_button\": \"Tlačítko Odeslat\",\n    \"grid_layout_selector\": \"Selektor rozvržení mřížky\",\n    \"image\": \"Obrázek\",\n    \"list_items\": \"Položky seznamu\",\n    \"facets\": \"Filtry\",\n    \"variants\": \"Varianty\",\n    \"product_cards\": \"Karty produktů\",\n    \"styles\": \"Styly\",\n    \"buttons\": \"Tlačítka\",\n    \"inputs\": \"Vstupy\",\n    \"primary_button\": \"Primární tlačítko\",\n    \"secondary_button\": \"Sekundární tlačítko\",\n    \"popovers_and_modals\": \"Vyskakovací panely a modální okna\",\n    \"products_carousel\": \"Propagovaná kolekce: Karusel\",\n    \"products_grid\": \"Propagovaná kolekce: Mřížka\",\n    \"marquee\": \"Běžící text\",\n    \"alternating_content_rows\": \"Střídající se řádky\",\n    \"pull_quote\": \"Citace\",\n    \"contact_form\": \"Kontaktní formulář\",\n    \"featured_product\": \"Zvýrazněný produkt\",\n    \"icons_with_text\": \"Ikony s textem\",\n    \"accelerated_checkout\": \"Zrychlená pokladna\",\n    \"accordion\": \"Rozbalovací panel\",\n    \"accordion_row\": \"Řádek rozbalovacího panelu\",\n    \"animations\": \"Animace\",\n    \"announcement\": \"Oznámení\",\n    \"announcement_bar\": \"Oznamovací lišta\",\n    \"badges\": \"Odznaky\",\n    \"button\": \"Tlačítko\",\n    \"cart\": \"Košík\",\n    \"cart_items\": \"Položky v košíku\",\n    \"cart_products\": \"Produkty v košíku\",\n    \"cart_title\": \"Košík\",\n    \"collection\": \"Kolekce\",\n    \"collection_card\": \"Karta kolekce\",\n    \"collection_columns\": \"Sloupce kolekce\",\n    \"collection_container\": \"Kolekce\",\n    \"collection_description\": \"Popis kolekce\",\n    \"collection_image\": \"Obrázek kolekce\",\n    \"collection_info\": \"Informace o kolekci\",\n    \"collection_list\": \"Seznam kolekcí\",\n    \"collections\": \"Kolekce\",\n    \"content\": \"Obsah\",\n    \"content_grid\": \"Mřížka obsahu\",\n    \"details\": \"Podrobnosti\",\n    \"divider\": \"Oddělovač\",\n    \"filters\": \"Filtrování a řazení\",\n    \"follow_on_shop\": \"Sledovat v aplikaci Shop\",\n    \"footer\": \"Zápatí\",\n    \"footer_utilities\": \"Nástroje zápatí\",\n    \"group\": \"Skupina\",\n    \"header\": \"Záhlaví\",\n    \"heading\": \"Nadpis\",\n    \"icons\": \"Ikony\",\n    \"image_with_text\": \"Obrázek s textem\",\n    \"input\": \"Vstup\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Magazínová mřížka\",\n    \"media\": \"Média\",\n    \"menu\": \"Nabídka\",\n    \"mobile_layout\": \"Rozvržení pro mobil\",\n    \"payment_icons\": \"Ikony plateb\",\n    \"popup_link\": \"Odkaz na vyskakovací okno\",\n    \"predictive_search\": \"Vyskakovací panel vyhledávání\",\n    \"predictive_search_empty\": \"Prediktivní vyhledávání: Prázdný stav\",\n    \"price\": \"Cena\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Karta produktu\",\n    \"product_card_media\": \"Média\",\n    \"product_card_rendering\": \"Vykreslování karty produktu\",\n    \"product_grid\": \"Mřížka\",\n    \"product_grid_main\": \"Mřížka produktů\",\n    \"product_image\": \"Obrázek produktu\",\n    \"product_information\": \"Informace o produktu\",\n    \"product_review_stars\": \"Hvězdičky hodnocení\",\n    \"quantity\": \"Množství\",\n    \"row\": \"Řádek\",\n    \"search\": \"Vyhledávání\",\n    \"section\": \"Sekce\",\n    \"selected_variants\": \"Vybrané varianty\",\n    \"slide\": \"Snímek\",\n    \"social_media_links\": \"Odkazy na sociální sítě\",\n    \"steps\": \"Kroky\",\n    \"summary\": \"Shrnutí\",\n    \"swatches\": \"Vzorníky\",\n    \"testimonials\": \"Reference\",\n    \"text\": \"Text\",\n    \"title\": \"Název\",\n    \"utilities\": \"Pomocné prvky\",\n    \"search_input\": \"Vyhledávací pole\",\n    \"search_results\": \"Výsledky vyhledávání\",\n    \"read_only\": \"Jen pro čtení\",\n    \"collection_title\": \"Název kolekce\",\n    \"collections_bento\": \"Seznam kolekcí: Bento\",\n    \"faq_section\": \"Nejčastější dotazy\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Velký text\",\n    \"product_list\": \"Propagovaná kolekce\",\n    \"spacer\": \"Mezera\",\n    \"view_all_button\": \"Zobrazit vše\",\n    \"video_section\": \"Video\",\n    \"custom_liquid\": \"Vlastní Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Blogový příspěvek\",\n    \"blog_posts\": \"Blogové příspěvky\",\n    \"caption\": \"Titulek\",\n    \"collection_card_image\": \"Obrázek\",\n    \"collection_links\": \"Odkazy na kolekce\",\n    \"collection_links_spotlight\": \"Odkazy na kolekce: Spotlight\",\n    \"collection_links_text\": \"Odkazy na kolekce: Text\",\n    \"collections_carousel\": \"Seznam kolekcí: Karusel\",\n    \"collections_editorial\": \"Seznam kolekcí: Redakční\",\n    \"collections_grid\": \"Seznam kolekcí: Mřížka\",\n    \"copyright\": \"Copyright\",\n    \"count\": \"Počet\",\n    \"divider_section\": \"Oddělovač\",\n    \"drawers\": \"Výsuvné panely\",\n    \"editorial\": \"Redakční\",\n    \"editorial_jumbo_text\": \"Redakční: Velký text\",\n    \"hero_marquee\": \"Hero: Běžící text\",\n    \"input_fields\": \"Vstupní pole\",\n    \"local_pickup\": \"Vyzvednutí v prodejně\",\n    \"marquee_section\": \"Běžící text\",\n    \"media_with_text\": \"Média s textem\",\n    \"page\": \"Stránka\",\n    \"page_content\": \"Obsah\",\n    \"page_layout\": \"Rozvržení stránky\",\n    \"policy_list\": \"Odkazy na zásady\",\n    \"prices\": \"Ceny\",\n    \"products_editorial\": \"Propagovaná kolekce: Redakční\",\n    \"social_link\": \"Odkaz na sociální síť\",\n    \"split_showcase\": \"Rozdělená prezentace\",\n    \"variant_pickers\": \"Selektory variant\",\n    \"product_title\": \"Název produktu\",\n    \"large_logo\": \"Velké logo\",\n    \"product_list_button\": \"Tlačítko Zobrazit vše\",\n    \"product_inventory\": \"Skladové zásoby produktu\",\n    \"pills\": \"Štítky\",\n    \"description\": \"Popis\",\n    \"featured_image\": \"Propagovaný obrázek\",\n    \"multicolumn\": \"Vícesloupcové\",\n    \"rich_text_section\": \"Formátovaný text\",\n    \"product_custom_property\": \"Zvláštní pokyny\",\n    \"hero_bottom_aligned\": \"Hero: Zarovnáno dolů\",\n    \"blog_card\": \"Karta blogu\",\n    \"blog_posts_grid\": \"Blogové příspěvky: Mřížka\",\n    \"blog_posts_carousel\": \"Blogové příspěvky: Karusel\",\n    \"blog_posts_editorial\": \"Blogové příspěvky: Redakční\",\n    \"excerpt\": \"Úryvek\",\n    \"footer_password\": \"Zápatí stránky s heslem\",\n    \"policies_and_links\": \"Zásady a odkazy\",\n    \"card\": \"Karta\",\n    \"carousel\": \"Karusel\",\n    \"carousel_content\": \"Obsah karuselu\",\n    \"quick_order_list\": \"Seznam pro rychlou objednávku\",\n    \"column\": \"Sloupec\",\n    \"comparison_slider\": \"Porovnávací posuvník\",\n    \"slideshow_full_frame\": \"Prezentace: přes celou plochu\",\n    \"slideshow_inset\": \"Prezentace: s okraji\",\n    \"image_compare\": \"Porovnání obrázků\",\n    \"subheading\": \"Podnadpis\",\n    \"featured_product_information\": \"Zvýrazněný produkt\",\n    \"product_hotspots\": \"Hotspoty produktu\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Vrstvená prezentace\"\n  },\n  \"settings\": {\n    \"alignment\": \"Zarovnání\",\n    \"autoplay\": \"Automatické přehrávání\",\n    \"background\": \"Pozadí\",\n    \"border_radius\": \"Poloměr rohů\",\n    \"border_width\": \"Tloušťka ohraničení\",\n    \"borders\": \"Ohraničení\",\n    \"bottom_padding\": \"Spodní vnitřní okraj\",\n    \"button\": \"Tlačítko\",\n    \"color\": \"Barva\",\n    \"colors\": \"Barvy\",\n    \"content_alignment\": \"Zarovnání obsahu\",\n    \"content_direction\": \"Směr obsahu\",\n    \"content_position\": \"Pozice obsahu\",\n    \"cover_image_size\": \"Velikost úvodního obrázku\",\n    \"cover_image\": \"Úvodní obrázek\",\n    \"custom_minimum_height\": \"Vlastní minimální výška\",\n    \"custom_width\": \"Vlastní šířka\",\n    \"enable_video_looping\": \"Opakování videa\",\n    \"favicon\": \"Favikona\",\n    \"font_family\": \"Rodina písma\",\n    \"gap\": \"Mezera\",\n    \"geometric_translate_y\": \"Geometrický posun na ose Y\",\n    \"heading\": \"Nadpis\",\n    \"icon\": \"Ikona\",\n    \"image\": \"Obrázek\",\n    \"image_icon\": \"Obrázková ikona\",\n    \"image_opacity\": \"Neprůhlednost obrázku\",\n    \"image_position\": \"Pozice obrázku\",\n    \"image_ratio\": \"Poměr stran obrázku\",\n    \"label\": \"Štítek\",\n    \"line_height\": \"Řádkování\",\n    \"link\": \"Odkaz\",\n    \"layout_gap\": \"Mezera v rozvržení\",\n    \"make_section_full_width\": \"Sekce přes celou šířku\",\n    \"minimum_height\": \"Minimální výška\",\n    \"opacity\": \"Neprůhlednost\",\n    \"overlay_opacity\": \"Neprůhlednost překryvu\",\n    \"padding\": \"Vnitřní okraj\",\n    \"primary_color\": \"Odkazy\",\n    \"product\": \"Produkt\",\n    \"section_width\": \"Šířka sekce\",\n    \"size\": \"Velikost\",\n    \"slide_spacing\": \"Mezera mezi snímky\",\n    \"slide_width\": \"Šířka snímku\",\n    \"slideshow_fullwidth\": \"Snímky přes celou šířku\",\n    \"style\": \"Styl\",\n    \"text\": \"Text\",\n    \"text_case\": \"Velká/malá písmena\",\n    \"top_padding\": \"Horní vnitřní okraj\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alternativní text\",\n    \"video_loop\": \"Opakovat video\",\n    \"video_position\": \"Pozice videa\",\n    \"width\": \"Šířka\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Omezit šířku obsahu\",\n    \"color_scheme\": \"Barevné schéma\",\n    \"inherit_color_scheme\": \"Převzít barevné schéma\",\n    \"product_count\": \"Počet produktů\",\n    \"product_type\": \"Typ produktu\",\n    \"content_width\": \"Šířka obsahu\",\n    \"collection\": \"Kolekce\",\n    \"enable_sticky_content\": \"Přilepený obsah na počítači\",\n    \"error_color\": \"Chyba\",\n    \"success_color\": \"Úspěch\",\n    \"primary_font\": \"Primární písmo\",\n    \"secondary_font\": \"Sekundární písmo\",\n    \"tertiary_font\": \"Terciární písmo\",\n    \"columns\": \"Sloupce\",\n    \"items_to_show\": \"Počet položek k zobrazení\",\n    \"layout\": \"Rozvržení\",\n    \"layout_type\": \"Typ\",\n    \"show_grid_layout_selector\": \"Zobrazit výběr rozvržení mřížky\",\n    \"view_more_show\": \"Zobrazit tlačítko „Zobrazit více“\",\n    \"image_gap\": \"Mezera obrázku\",\n    \"width_desktop\": \"Šířka na počítači\",\n    \"width_mobile\": \"Šířka na mobilu\",\n    \"border_style\": \"Styl ohraničení\",\n    \"height\": \"Výška\",\n    \"thickness\": \"Tloušťka\",\n    \"stroke\": \"Tloušťka čáry\",\n    \"filter_style\": \"Styl filtru\",\n    \"swatches\": \"Vzorníky\",\n    \"quick_add_colors\": \"Barvy pro rychlé přidání\",\n    \"divider_color\": \"Oddělovač\",\n    \"border_opacity\": \"Neprůhlednost ohraničení\",\n    \"hover_background\": \"Pozadí při najetí\",\n    \"hover_borders\": \"Ohraničení při najetí\",\n    \"hover_text\": \"Text při najetí\",\n    \"primary_hover_color\": \"Odkazy při najetí\",\n    \"primary_button_text\": \"Text primárního tlačítka\",\n    \"primary_button_background\": \"Pozadí primárního tlačítka\",\n    \"primary_button_border\": \"Ohraničení primárního tlačítka\",\n    \"secondary_button_text\": \"Text sekundárního tlačítka\",\n    \"secondary_button_background\": \"Pozadí sekundárního tlačítka\",\n    \"secondary_button_border\": \"Ohraničení sekundárního tlačítka\",\n    \"shadow_color\": \"Stín\",\n    \"video_autoplay\": \"Automatické přehrávání\",\n    \"video_cover_image\": \"Úvodní obrázek\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Zdroj\",\n    \"card_image_height\": \"Výška obrázku produktu\",\n    \"first_row_media_position\": \"Pozice média v první řadě\",\n    \"accordion\": \"Rozbalovací panel\",\n    \"aspect_ratio\": \"Poměr stran\",\n    \"auto_rotate_announcements\": \"Automatické střídání oznámení\",\n    \"auto_rotate_slides\": \"Automatické střídání snímků\",\n    \"badge_corner_radius\": \"Poloměr rohů\",\n    \"badge_position\": \"Pozice na kartách\",\n    \"badge_sale_color_scheme\": \"Sleva\",\n    \"badge_sold_out_color_scheme\": \"Vyprodáno\",\n    \"behavior\": \"Chování\",\n    \"blur\": \"Rozmazání stínu\",\n    \"border\": \"Ohraničení\",\n    \"bottom\": \"Dole\",\n    \"carousel_on_mobile\": \"Karusel na mobilu\",\n    \"cart_count\": \"Počet položek v košíku\",\n    \"cart_items\": \"Položky v košíku\",\n    \"cart_related_products\": \"Související produkty\",\n    \"cart_title\": \"Košík\",\n    \"cart_total\": \"Celkem v košíku\",\n    \"cart_type\": \"Typ\",\n    \"case\": \"Velká/malá písmena\",\n    \"checkout_buttons\": \"Tlačítka zrychlené pokladny\",\n    \"collection_list\": \"Kolekce\",\n    \"collection_templates\": \"Šablony kolekcí\",\n    \"content\": \"Obsah\",\n    \"corner_radius\": \"Poloměr rohů\",\n    \"country_region\": \"Země/region\",\n    \"currency_code\": \"Kód měny\",\n    \"custom_height\": \"Vlastní výška\",\n    \"desktop_height\": \"Výška na počítači\",\n    \"direction\": \"Směr\",\n    \"display\": \"Zobrazení\",\n    \"divider_thickness\": \"Tloušťka oddělovače\",\n    \"divider\": \"Oddělovač\",\n    \"dividers\": \"Oddělovače\",\n    \"drop_shadow\": \"Vržený stín\",\n    \"empty_state_collection_info\": \"Zobrazí se před zadáním hledání\",\n    \"empty_state_collection\": \"Kolekce v prázdném stavu\",\n    \"enable_filtering\": \"Filtry\",\n    \"enable_grid_density\": \"Ovládání rozvržení mřížky\",\n    \"enable_sorting\": \"Řazení\",\n    \"enable_zoom\": \"Povolit přiblížení\",\n    \"equal_columns\": \"Stejně široké sloupce\",\n    \"expand_first_group\": \"Rozbalit první skupinu\",\n    \"extend_media_to_screen_edge\": \"Rozšířit média ke kraji obrazovky\",\n    \"extend_summary\": \"Rozšířit ke kraji obrazovky\",\n    \"extra_large\": \"Extra velké\",\n    \"extra_small\": \"Extra malé\",\n    \"flag\": \"Vlajka\",\n    \"font_price\": \"Písmo ceny\",\n    \"font_weight\": \"Tloušťka písma\",\n    \"font\": \"Písmo\",\n    \"full_width_first_image\": \"První obrázek přes celou šířku\",\n    \"full_width_on_mobile\": \"Celá šířka na mobilu\",\n    \"heading_preset\": \"Předvolba nadpisu\",\n    \"hide_unselected_variant_media\": \"Skrýt média nevybrané varianty\",\n    \"horizontal_gap\": \"Vodorovná mezera\",\n    \"horizontal_offset\": \"Vodorovný posun stínu\",\n    \"hover_behavior\": \"Chování při najetí\",\n    \"icon_background\": \"Pozadí ikony\",\n    \"icons\": \"Ikony\",\n    \"image_border_radius\": \"Poloměr rohů obrázku\",\n    \"installments\": \"Splátky\",\n    \"integrated_button\": \"Integrované tlačítko\",\n    \"language_selector\": \"Výběr jazyka\",\n    \"large\": \"Velké\",\n    \"left_padding\": \"Levý vnitřní okraj\",\n    \"left\": \"Vlevo\",\n    \"letter_spacing\": \"Proklad znaků\",\n    \"limit_media_to_screen_height\": \"Omezit na výšku obrazovky\",\n    \"limit_product_details_width\": \"Omezit šířku podrobností o produktu\",\n    \"link_preset\": \"Předvolba odkazu\",\n    \"links\": \"Odkazy\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Opakovat\",\n    \"make_details_sticky_desktop\": \"Přilepit na počítači\",\n    \"max_width\": \"Maximální šířka\",\n    \"media_height\": \"Výška médií\",\n    \"media_overlay\": \"Překryv médií\",\n    \"media_position\": \"Pozice médií\",\n    \"media_type\": \"Typ médií\",\n    \"media_width\": \"Šířka médií\",\n    \"menu\": \"Nabídka\",\n    \"mobile_columns\": \"Sloupce na mobilu\",\n    \"mobile_height\": \"Výška na mobilu\",\n    \"mobile_logo_image\": \"Logo na mobilu\",\n    \"mobile_quick_add\": \"Rychlé přidání na mobilu\",\n    \"motion_direction\": \"Směr pohybu\",\n    \"motion\": \"Pohyb\",\n    \"movement_direction\": \"Směr pohybu\",\n    \"navigation_bar_color_scheme\": \"Barevné schéma navigační lišty\",\n    \"navigation_bar\": \"Navigační lišta\",\n    \"navigation\": \"Navigace\",\n    \"open_new_tab\": \"Otevřít odkaz v nové kartě\",\n    \"overlay_color\": \"Barva překryvu\",\n    \"overlay\": \"Překryv\",\n    \"padding_bottom\": \"Spodní vnitřní okraj\",\n    \"padding_horizontal\": \"Vodorovný vnitřní okraj\",\n    \"padding_top\": \"Horní vnitřní okraj\",\n    \"page_width\": \"Šířka stránky\",\n    \"pagination\": \"Stránkování\",\n    \"placement\": \"Umístění\",\n    \"position\": \"Pozice\",\n    \"preset\": \"Předvolba\",\n    \"product_cards\": \"Produktové karty\",\n    \"product_pages\": \"Stránky produktu\",\n    \"product_templates\": \"Šablony produktu\",\n    \"products\": \"Produkty\",\n    \"quick_add\": \"Rychlé přidání\",\n    \"ratio\": \"Poměr\",\n    \"regular\": \"Normální\",\n    \"review_count\": \"Počet recenzí\",\n    \"right\": \"Vpravo\",\n    \"row_height\": \"Výška řádku\",\n    \"row\": \"Řádek\",\n    \"seller_note\": \"Povolit poznámku pro prodejce\",\n    \"shape\": \"Tvar\",\n    \"show_as_accordion\": \"Na mobilu zobrazit jako rozbalovací panel\",\n    \"show_sale_price_first\": \"Nejprve zobrazit výprodejovou cenu\",\n    \"show_tax_info\": \"Daňové informace\",\n    \"show\": \"Zobrazit\",\n    \"small\": \"Malé\",\n    \"speed\": \"Rychlost\",\n    \"statement\": \"Výpis\",\n    \"sticky_header\": \"Přilepené záhlaví\",\n    \"text_hierarchy\": \"Hierarchie textu\",\n    \"text_presets\": \"Předvolby textu\",\n    \"title\": \"Titulek\",\n    \"top\": \"Nahoře\",\n    \"type\": \"Typ\",\n    \"type_preset\": \"Předvolba textu\",\n    \"underline_thickness\": \"Tloušťka podtržení\",\n    \"variant_images\": \"Obrázky variant\",\n    \"vendor\": \"Dodavatel\",\n    \"vertical_gap\": \"Svislá mezera\",\n    \"vertical_offset\": \"Svislý posun stínu\",\n    \"vertical_on_mobile\": \"Svisle na mobilu\",\n    \"view_all_as_last_card\": \"„Zobrazit vše“ jako poslední kartu\",\n    \"weight\": \"Tloušťka písma\",\n    \"wrap\": \"Zalamovat\",\n    \"read_only\": \"Jen pro čtení\",\n    \"always_stack_buttons\": \"Vždy řadit tlačítka pod sebe\",\n    \"background_color\": \"Barva pozadí\",\n    \"custom_mobile_size\": \"Vlastní velikost na mobilu\",\n    \"custom_mobile_width\": \"Vlastní šířka na mobilu\",\n    \"fixed_height\": \"Výška v pixelech\",\n    \"fixed_width\": \"Šířka v pixelech\",\n    \"gradient_direction\": \"Směr přechodu\",\n    \"hide_padding\": \"Skrýt vnitřní okraj\",\n    \"logo_font\": \"Písmo loga\",\n    \"overlay_style\": \"Styl překryvu\",\n    \"percent_height\": \"Výška v procentech\",\n    \"percent_size_mobile\": \"Velikost v procentech\",\n    \"percent_size\": \"Velikost v procentech\",\n    \"percent_width\": \"Šířka v procentech\",\n    \"pixel_size_mobile\": \"Velikost v pixelech\",\n    \"pixel_size\": \"Velikost v pixelech\",\n    \"shadow_opacity\": \"Neprůhlednost stínu\",\n    \"show_filter_label\": \"Textové štítky u použitých filtrů\",\n    \"show_swatch_label\": \"Textové štítky u vzorníků\",\n    \"size_mobile\": \"Velikost na mobilu\",\n    \"transparent_background\": \"Průhledné pozadí\",\n    \"unit\": \"Jednotka\",\n    \"account\": \"Účet\",\n    \"align_baseline\": \"Zarovnat text na základní linii\",\n    \"add_discount_code\": \"Povolit slevy v košíku\",\n    \"background_overlay\": \"Překryv pozadí\",\n    \"background_media\": \"Média na pozadí\",\n    \"border_thickness\": \"Tloušťka ohraničení\",\n    \"bottom_row\": \"Spodní řada\",\n    \"button_text_case\": \"Velká/malá písmena v textu\",\n    \"auto_open_cart_drawer\": \"„Přidat do košíku“ automaticky otevře panel\",\n    \"collection_count\": \"Počet kolekcí\",\n    \"custom_liquid\": \"Kód Liquid\",\n    \"default\": \"Výchozí\",\n    \"default_logo\": \"Výchozí logo\",\n    \"divider_width\": \"Šířka oddělovače\",\n    \"headings\": \"Nadpisy\",\n    \"hide_logo_on_home_page\": \"Skrýt logo na domovské stránce\",\n    \"horizontal_padding\": \"Vodorovný vnitřní okraj\",\n    \"inverse\": \"Invertované\",\n    \"inverse_logo\": \"Invertované logo\",\n    \"layout_style\": \"Styl\",\n    \"length\": \"Délka\",\n    \"mobile_pagination\": \"Stránkování na mobilu\",\n    \"open_row_by_default\": \"Otevřít řádek ve výchozím nastavení\",\n    \"page_transition_enabled\": \"Přechod stránky\",\n    \"search\": \"Hledání\",\n    \"search_icon\": \"Ikona hledání\",\n    \"search_position\": \"Pozice\",\n    \"search_row\": \"Řádek\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Zobrazit zarovnání\",\n    \"show_count\": \"Zobrazit počet\",\n    \"show_date\": \"Datum\",\n    \"show_pickup_availability\": \"Zobrazit dostupnost vyzvednutí\",\n    \"show_search\": \"Zobrazit hledání\",\n    \"use_inverse_logo\": \"Použít invertované logo\",\n    \"vertical_padding\": \"Svislý vnitřní okraj\",\n    \"visibility\": \"Viditelnost\",\n    \"product_corner_radius\": \"Poloměr rohů produktu\",\n    \"card_corner_radius\": \"Poloměr rohů karty\",\n    \"alignment_mobile\": \"Zarovnání na mobilu\",\n    \"animation_repeat\": \"Opakovat animaci\",\n    \"blurred_reflection\": \"Rozmazaný odraz\",\n    \"card_hover_effect\": \"Efekt při najetí na kartu\",\n    \"card_size\": \"Velikost karty\",\n    \"collection_title_case\": \"Velká/malá písmena v názvu kolekce\",\n    \"inventory_threshold\": \"Prahová hodnota pro nízké zásoby\",\n    \"mobile_card_size\": \"Velikost karty na mobilu\",\n    \"page\": \"Stránka\",\n    \"product_and_card_title_case\": \"Velká/malá písmena v názvech produktů a karet\",\n    \"product_title_case\": \"Velká/malá písmena v názvu produktu\",\n    \"reflection_opacity\": \"Neprůhlednost odrazu\",\n    \"right_padding\": \"Pravý vnitřní okraj\",\n    \"show_inventory_quantity\": \"Zobrazit množství při nízkých zásobách\",\n    \"text_label_case\": \"Velká/malá písmena u textových štítků\",\n    \"transition_to_main_product\": \"Přechod z karty produktu na stránku produktu\",\n    \"show_second_image_on_hover\": \"Při najetí zobrazit druhý obrázek\",\n    \"media\": \"Média\",\n    \"product_card_carousel\": \"Zobrazit karusel\",\n    \"media_fit\": \"Přizpůsobení médií\",\n    \"scroll_speed\": \"Čas do dalšího oznámení\",\n    \"show_powered_by_shopify\": \"Zobrazit „Powered by Shopify“\",\n    \"gift_card_form\": \"Formulář dárkové karty\",\n    \"seller_note_open_by_default\": \"Ve výchozím nastavení otevřít poznámku pro prodejce\",\n    \"add_to_cart_animation\": \"Přidat do košíku\",\n    \"custom_link\": \"Vlastní odkaz\",\n    \"product_custom_property\": {\n      \"heading\": \"Nadpis\",\n      \"description\": \"Popis\",\n      \"key\": \"Název vlastnosti\",\n      \"key_info\": \"Nesmí být prázdné a musí být jedinečné pro každý blok. Zobrazuje se v košíku, na pokladně a v údajích o objednávce.\",\n      \"placeholder_text\": \"Zástupný text\",\n      \"default_heading\": \"Upravte si produkt\",\n      \"default_placeholder\": \"Zadejte speciální pokyny\",\n      \"default_property_key\": \"Speciální pokyny\",\n      \"max_length\": \"Max. počet znaků\",\n      \"required\": \"Pro přidání položky do košíku vyžadovat vyplnění\",\n      \"input_type\": \"Typ vstupu\",\n      \"input_type_text\": \"Text\",\n      \"input_type_checkbox\": \"Zaškrtávací pole\",\n      \"content_settings\": \"Nastavení obsahu\",\n      \"buyers_input\": \"Vstup kupujícího\",\n      \"checkbox_label\": \"Popisek zaškrtávacího pole\",\n      \"default_checkbox_label\": \"Zahrnout dárkové balení\",\n      \"heading_preset\": \"Nadpis\",\n      \"description_preset\": \"Popis\",\n      \"input_preset\": \"Vstup\",\n      \"checkbox_preset\": \"Popisek zaškrtávacího pole\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Počet příspěvků\",\n    \"animation\": \"Animace\",\n    \"top_level_size\": \"Velikost na nejvyšší úrovni\",\n    \"empty_cart_button_link\": \"Tlačítkový odkaz prázdného košíku\",\n    \"auto_load_products\": \"Automaticky načítat produkty při rolování\",\n    \"products_per_page\": \"Produktů na stránku\",\n    \"custom_mobile_media\": \"Na mobilu zobrazit jiná média\",\n    \"stack_media_on_mobile\": \"Média pod sebou\",\n    \"full_frame_on_mobile\": \"Přes celou šířku v mobilu\",\n    \"skus\": \"Kódy SKU\",\n    \"variant_per_page\": \"Počet variant na stránku\",\n    \"image_1\": \"Obrázek 1\",\n    \"image_2\": \"Obrázek 2\",\n    \"media_type_1\": \"Typ médií\",\n    \"media_type_2\": \"Typ média 2\",\n    \"after_image\": \"Obrázek „po“\",\n    \"before_image\": \"Obrázek „před“\",\n    \"cs_slider_style\": \"Styl posuvníku\",\n    \"cs_slider_color\": \"Barva posuvníku\",\n    \"cs_slider_inner_color\": \"Vnitřní barva posuvníku\",\n    \"text_on_images\": \"Text na obrázcích\",\n    \"card_height\": \"Výška karty\",\n    \"submenu_size\": \"Velikost podnabídky\",\n    \"desktop_position\": \"Umístění na počítači\",\n    \"desktop_pagination\": \"Stránkování na počítači\",\n    \"bullseye_color\": \"Vnitřní barva\",\n    \"hotspot_color\": \"Barva hotspotu\",\n    \"product_price_typography\": \"Typografie ceny produktu\",\n    \"product_title_typography\": \"Typografie názvu produktu\",\n    \"x_position\": \"Horizontální umístění\",\n    \"y_position\": \"Vertikální umístění\",\n    \"enable_sticky_add_to_cart\": \"Přilepený panel Přidat do košíku\",\n    \"sticky_add_to_cart\": \"Přilepené tlačítko Přidat do košíku\",\n    \"actions_display_style\": \"Styl nabídky\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Šipka\",\n    \"auto\": \"Automaticky\",\n    \"banana\": \"Banán\",\n    \"bottle\": \"Láhev\",\n    \"box\": \"Rámeček\",\n    \"buttons\": \"Tlačítka\",\n    \"carrot\": \"Mrkev\",\n    \"center\": \"Uprostřed\",\n    \"chat_bubble\": \"Bublina chatu\",\n    \"clipboard\": \"Schránka\",\n    \"contain\": \"Přizpůsobit\",\n    \"counter\": \"Počítadlo\",\n    \"cover\": \"Vyplnit\",\n    \"custom\": \"Vlastní\",\n    \"dairy_free\": \"Bez mléka\",\n    \"dairy\": \"Mléčné\",\n    \"default\": \"Výchozí\",\n    \"dropdowns\": \"Rozbalovací nabídky\",\n    \"dots\": \"Tečky\",\n    \"dryer\": \"Sušička\",\n    \"end\": \"Na konci\",\n    \"eye\": \"Oko\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Vyplnit\",\n    \"fire\": \"Oheň\",\n    \"fit\": \"Přizpůsobit\",\n    \"full\": \"Na celou šířku\",\n    \"full_and_page\": \"Pozadí na celou šířku, obsah v šířce stránky\",\n    \"gluten_free\": \"Bez lepku\",\n    \"heading\": \"Nadpis\",\n    \"heart\": \"Srdce\",\n    \"horizontal\": \"Vodorovně\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Žehlička\",\n    \"landscape\": \"Na šířku\",\n    \"large\": \"Velké\",\n    \"leaf\": \"List\",\n    \"leather\": \"Kůže\",\n    \"lg\": \"L\",\n    \"lightning_bolt\": \"Blesk\",\n    \"link\": \"Odkaz\",\n    \"lipstick\": \"Rtěnka\",\n    \"lock\": \"Zámek\",\n    \"lowercase\": \"malá písmena\",\n    \"m\": \"M\",\n    \"map_pin\": \"Značka na mapě\",\n    \"medium\": \"Střední\",\n    \"none\": \"Žádné\",\n    \"numbers\": \"Čísla\",\n    \"nut_free\": \"Bez ořechů\",\n    \"outline\": \"Obrys\",\n    \"page\": \"Stránka\",\n    \"pants\": \"Kalhoty\",\n    \"paw_print\": \"Otisk tlapy\",\n    \"pepper\": \"Pepř\",\n    \"perfume\": \"Parfém\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Letadlo\",\n    \"plant\": \"Rostlina\",\n    \"portrait\": \"Na výšku\",\n    \"price_tag\": \"Cenovka\",\n    \"question_mark\": \"Otazník\",\n    \"recycle\": \"Recyklace\",\n    \"return\": \"Vrácení\",\n    \"ruler\": \"Pravítko\",\n    \"s\": \"S\",\n    \"sentence\": \"Větné\",\n    \"serving_dish\": \"Servírovací mísa\",\n    \"shirt\": \"Košile\",\n    \"shoe\": \"Bota\",\n    \"silhouette\": \"Silueta\",\n    \"small\": \"Malé\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Sněhová vločka\",\n    \"solid\": \"Plné\",\n    \"space_between\": \"Rozestupy mezi\",\n    \"square\": \"Čtverec\",\n    \"star\": \"Hvězda\",\n    \"start\": \"Začátek\",\n    \"stopwatch\": \"Stopky\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Nákladní auto\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Velká písmena\",\n    \"vertical\": \"Svislé\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Praní\",\n    \"circle\": \"Kruh\",\n    \"swatches\": \"Vzorníky\",\n    \"full_and_page_offset_left\": \"Pozadí na celou šířku, obsah v šířce stránky, posun vlevo\",\n    \"full_and_page_offset_right\": \"Pozadí na celou šířku, obsah v šířce stránky, posun vpravo\",\n    \"offset_left\": \"Posun vlevo\",\n    \"offset_right\": \"Posun vpravo\",\n    \"page_center_aligned\": \"Stránka, zarovnáno na střed\",\n    \"page_left_aligned\": \"Stránka, zarovnáno vlevo\",\n    \"page_right_aligned\": \"Stránka, zarovnáno vpravo\",\n    \"button\": \"Tlačítko\",\n    \"caption\": \"Titulek\",\n    \"h1\": \"Nadpis 1\",\n    \"h2\": \"Nadpis 2\",\n    \"h3\": \"Nadpis 3\",\n    \"h4\": \"Nadpis 4\",\n    \"h5\": \"Nadpis 5\",\n    \"h6\": \"Nadpis 6\",\n    \"paragraph\": \"Odstavec\",\n    \"primary\": \"Primární\",\n    \"secondary\": \"Sekundární\",\n    \"tertiary\": \"Terciární\",\n    \"chevron_left\": \"Chevron vlevo\",\n    \"chevron_right\": \"Chevron vpravo\",\n    \"diamond\": \"Diamant\",\n    \"grid\": \"Mřížka\",\n    \"parallelogram\": \"Rovnoběžník\",\n    \"rounded\": \"Zaoblené\",\n    \"fit_content\": \"Přizpůsobit\",\n    \"pills\": \"Štítky\",\n    \"heavy\": \"Silné\",\n    \"thin\": \"Tenké\",\n    \"drawer\": \"Výsuvný panel\",\n    \"preview\": \"Náhled\",\n    \"text\": \"Text\",\n    \"video_uploaded\": \"Nahrané\",\n    \"video_external_url\": \"Externí URL\",\n    \"aspect_ratio\": \"Poměr stran\",\n    \"above_carousel\": \"Nad karuselem\",\n    \"all\": \"Vše\",\n    \"always\": \"Vždy\",\n    \"arrows_large\": \"Velké šipky\",\n    \"arrows\": \"Šipky\",\n    \"balance\": \"Vyvážení\",\n    \"bento\": \"Bento\",\n    \"black\": \"Černá\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Text (velký)\",\n    \"body_regular\": \"Text (běžný)\",\n    \"body_small\": \"Text (malý)\",\n    \"bold\": \"Tučné\",\n    \"bottom_left\": \"Dole vlevo\",\n    \"bottom_right\": \"Dole vpravo\",\n    \"bottom\": \"Dole\",\n    \"capitalize\": \"Velká počáteční písmena\",\n    \"caret\": \"Stříška\",\n    \"carousel\": \"Karusel\",\n    \"check_box\": \"Zaškrtávací políčko\",\n    \"chevron_large\": \"Velké chevrony\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrony\",\n    \"classic\": \"Klasické\",\n    \"collection_images\": \"Obrázky kolekcí\",\n    \"color\": \"Barva\",\n    \"complementary\": \"Doplňkové\",\n    \"dissolve\": \"Rozplynutí\",\n    \"dotted\": \"Tečkované\",\n    \"editorial\": \"Redakční\",\n    \"extra_large\": \"Velmi velké\",\n    \"extra_small\": \"Velmi malé\",\n    \"featured_collections\": \"Propagované kolekce\",\n    \"featured_products\": \"Propagované produkty\",\n    \"font_primary\": \"Primární\",\n    \"font_secondary\": \"Sekundární\",\n    \"font_tertiary\": \"Terciární\",\n    \"forward\": \"Vpřed\",\n    \"full_screen\": \"Na celou obrazovku\",\n    \"heading_extra_large\": \"Nadpis (velmi velký)\",\n    \"heading_extra_small\": \"Nadpis (velmi malý)\",\n    \"heading_large\": \"Nadpis (velký)\",\n    \"heading_regular\": \"Nadpis (běžný)\",\n    \"heading_small\": \"Nadpis (malý)\",\n    \"icon\": \"Ikona\",\n    \"image\": \"Obrázek\",\n    \"input\": \"Vstup\",\n    \"inside_carousel\": \"Uvnitř karuselu\",\n    \"inverse_large\": \"Invertované – velké\",\n    \"inverse\": \"Invertované\",\n    \"large_arrows\": \"Velké šipky\",\n    \"large_chevrons\": \"Velké chevrony\",\n    \"left\": \"Vlevo\",\n    \"light\": \"Tenké\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Volné\",\n    \"media_first\": \"Nejprve média\",\n    \"media_second\": \"Média na druhém místě\",\n    \"modal\": \"Modální\",\n    \"narrow\": \"Úzké\",\n    \"never\": \"Nikdy\",\n    \"next_to_carousel\": \"Vedle karuselu\",\n    \"normal\": \"Normální\",\n    \"nowrap\": \"Bez zalomení\",\n    \"off_media\": \"Mimo média\",\n    \"on_media\": \"Na médiu\",\n    \"on_scroll_up\": \"Při posunu nahoru\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Štítek\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Hezké\",\n    \"price\": \"Cena\",\n    \"primary_style\": \"Primární styl\",\n    \"rectangle\": \"Obdélník\",\n    \"regular\": \"Normální\",\n    \"related\": \"Související\",\n    \"reverse\": \"Obráceně\",\n    \"rich_text\": \"Formátovaný text\",\n    \"right\": \"Vpravo\",\n    \"secondary_style\": \"Sekundární styl\",\n    \"semibold\": \"Středně tučné\",\n    \"shaded\": \"Stínované\",\n    \"show_second_image\": \"Zobrazit druhý obrázek\",\n    \"single\": \"Samostatné\",\n    \"slide_left\": \"Posun doleva\",\n    \"slide_up\": \"Posun nahoru\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Seřadit pod sebe\",\n    \"text_only\": \"Pouze text\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Náhledy\",\n    \"tight\": \"Těsné\",\n    \"top_left\": \"Nahoře vlevo\",\n    \"top_right\": \"Vpravo nahoře\",\n    \"top\": \"Nahoře\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Podtržení\",\n    \"video\": \"Video\",\n    \"wide\": \"Široké\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"Pod obrázkem\",\n    \"down\": \"Dolů\",\n    \"fixed\": \"Pevné\",\n    \"gradient\": \"Přechod\",\n    \"on_image\": \"Na obrázku\",\n    \"percent\": \"Procenta\",\n    \"pixel\": \"Pixel\",\n    \"up\": \"Nahoru\",\n    \"accent\": \"Akcent\",\n    \"body\": \"Text\",\n    \"button_primary\": \"Primární tlačítko\",\n    \"button_secondary\": \"Sekundární tlačítko\",\n    \"compact\": \"Kompaktní\",\n    \"crop_to_fit\": \"Oříznout na velikost\",\n    \"hidden\": \"Skryté\",\n    \"hint\": \"Nápověda\",\n    \"maintain_aspect_ratio\": \"Zachovat poměr stran\",\n    \"off\": \"Vypnuto\",\n    \"social_bluesky\": \"Sociální: Bluesky\",\n    \"social_facebook\": \"Sociální: Facebook\",\n    \"social_instagram\": \"Sociální: Instagram\",\n    \"social_linkedin\": \"Sociální: LinkedIn\",\n    \"social_pinterest\": \"Sociální: Pinterest\",\n    \"social_snapchat\": \"Sociální: Snapchat\",\n    \"social_spotify\": \"Sociální: Spotify\",\n    \"social_threads\": \"Sociální: Threads\",\n    \"social_tiktok\": \"Sociální: TikTok\",\n    \"social_tumblr\": \"Sociální: Tumblr\",\n    \"social_twitter\": \"Sociální: X (Twitter)\",\n    \"social_whatsapp\": \"Sociální: WhatsApp\",\n    \"social_vimeo\": \"Sociální: Vimeo\",\n    \"social_youtube\": \"Sociální: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Standardní\",\n    \"subheading\": \"Podnadpis\",\n    \"blur\": \"Rozostření\",\n    \"lift\": \"Zvednutí\",\n    \"reveal\": \"Odhalení\",\n    \"scale\": \"Škálování\",\n    \"subtle_zoom\": \"Přiblížení\",\n    \"with_hints\": \"S nápovědou\",\n    \"below_media\": \"Pod médii\",\n    \"full_frame\": \"Přes celou plochu\",\n    \"icons\": \"Ikony\"\n  },\n  \"content\": {\n    \"advanced\": \"Pokročilé\",\n    \"background_image\": \"Obrázek na pozadí\",\n    \"background_video\": \"Video na pozadí\",\n    \"block_size\": \"Velikost bloku\",\n    \"borders\": \"Ohraničení\",\n    \"describe_the_video_for\": \"Popište video pro zákazníky používající čtečky obrazovky. [Více informací](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Velikost sekce\",\n    \"slideshow_width\": \"Šířka snímku\",\n    \"typography\": \"Typografie\",\n    \"width_is_automatically_optimized\": \"Šířka se na mobilu automaticky optimalizuje.\",\n    \"complementary_products\": \"Doplňkové produkty je nutné nastavit pomocí aplikace Search & Discovery. [Více informací](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Sloupce se na mobilu automaticky optimalizují\",\n    \"content_width\": \"Šířka obsahu se použije pouze, když je šířka sekce nastavená na plnou šířku.\",\n    \"responsive_font_sizes\": \"Velikosti se automaticky přizpůsobí všem velikostem obrazovky\",\n    \"buttons\": \"Tlačítka\",\n    \"swatches\": \"Vzorníky\",\n    \"variant_settings\": \"Nastavení variant\",\n    \"background\": \"Pozadí\",\n    \"appearance\": \"Vzhled\",\n    \"arrows\": \"Šipky\",\n    \"body_size\": \"Velikost běžného textu\",\n    \"bottom_row_appearance\": \"Vzhled spodního řádku\",\n    \"carousel_navigation\": \"Navigace karuselu\",\n    \"carousel_pagination\": \"Stránkování karuselu\",\n    \"copyright\": \"Copyright\",\n    \"edit_logo_in_theme_settings\": \"Upravte logo v [nastavení motivu](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Upravte formát ceny v [nastavení motivu](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Upravte vzhled variant v [nastavení motivu](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Registrace přidávají [profily zákazníků](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Aby se tlačítko zobrazovalo, musí být nainstalovaný kanál Shop a aktivovaný Shop Pay. [Více informací](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Písma\",\n    \"grid\": \"Mřížka\",\n    \"heading_size\": \"Velikost nadpisu\",\n    \"image\": \"Obrázek\",\n    \"input\": \"Vstup\",\n    \"layout\": \"Rozvržení\",\n    \"link\": \"Odkaz\",\n    \"link_padding\": \"Vnitřní okraj odkazu\",\n    \"localization\": \"Lokalizace\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Vnější okraj\",\n    \"media\": \"Média\",\n    \"media_1\": \"Média 1\",\n    \"media_2\": \"Média 2\",\n    \"menu\": \"Nabídka\",\n    \"mobile_layout\": \"Rozvržení pro mobil\",\n    \"padding\": \"Vnitřní okraj\",\n    \"padding_desktop\": \"Vnitřní okraj na počítači\",\n    \"paragraph\": \"Odstavec\",\n    \"policies\": \"Zásady\",\n    \"popup\": \"Vyskakovací okno\",\n    \"search\": \"Vyhledávání\",\n    \"size\": \"Velikost\",\n    \"social_media\": \"Sociální sítě\",\n    \"submit_button\": \"Tlačítko Odeslat\",\n    \"text_presets\": \"Předvolby textu\",\n    \"transparent_background\": \"Průhledné pozadí\",\n    \"typography_primary\": \"Primární typografie\",\n    \"typography_secondary\": \"Sekundární typografie\",\n    \"typography_tertiary\": \"Terciární typografie\",\n    \"mobile_size\": \"Velikost pro mobil\",\n    \"cards_layout\": \"Rozvržení karet\",\n    \"mobile_width\": \"Šířka pro mobil\",\n    \"section_layout\": \"Rozvržení sekce\",\n    \"width\": \"Šířka\",\n    \"carousel\": \"Karusel\",\n    \"colors\": \"Barvy\",\n    \"collection_page\": \"Stránka s kolekcemi\",\n    \"customer_account\": \"Zákaznický účet\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Upravte kolekci pro prázdný stav v [nastavení motivu](/editor?context=theme&category=search)\",\n    \"home_page\": \"Domovská stránka\",\n    \"images\": \"Obrázky\",\n    \"inverse_logo_info\": \"Používá se, když je průhledné pozadí záhlaví nastaveno na „Inverse“\",\n    \"manage_customer_accounts\": \"[Spravovat viditelnost](/admin/settings/customer_accounts) v nastavení zákaznických účtů. Starší účty nejsou podporovány.\",\n    \"manage_policies\": \"[Spravovat zásady](/admin/settings/legal)\",\n    \"product_page\": \"Stránka produktu\",\n    \"text\": \"Text\",\n    \"thumbnails\": \"Miniatury\",\n    \"visibility\": \"Viditelnost\",\n    \"visible_if_collection_has_more_products\": \"Viditelné, pokud má kolekce více produktů, než je zobrazeno\",\n    \"grid_layout\": \"Rozvržení mřížky\",\n    \"app_required_for_ratings\": \"Pro hodnocení produktu je vyžadována aplikace. [Více informací](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ikona\",\n    \"resource_reference_collection_card\": \"Zobrazuje kolekci z nadřazené sekce\",\n    \"resource_reference_collection_card_image\": \"Zobrazuje obrázek z nadřazené kolekce\",\n    \"resource_reference_collection_title\": \"Zobrazuje název z nadřazené kolekce\",\n    \"resource_reference_product\": \"Automaticky se propojí s nadřazeným produktem\",\n    \"resource_reference_product_card\": \"Zobrazuje produkt z nadřazené sekce\",\n    \"resource_reference_product_inventory\": \"Zobrazuje skladové zásoby z nadřazeného produktu\",\n    \"resource_reference_product_price\": \"Zobrazuje cenu z nadřazeného produktu\",\n    \"resource_reference_product_recommendations\": \"Zobrazuje doporučení podle nadřazeného produktu\",\n    \"resource_reference_product_review\": \"Zobrazuje recenze z nadřazeného produktu\",\n    \"resource_reference_product_swatches\": \"Zobrazuje vzorníky z nadřazeného produktu\",\n    \"resource_reference_product_title\": \"Zobrazuje název z nadřazeného produktu\",\n    \"resource_reference_product_variant_picker\": \"Zobrazuje varianty z nadřazeného produktu\",\n    \"resource_reference_product_media\": \"Zobrazuje média z nadřazeného produktu\",\n    \"product_media\": \"Média produktu\",\n    \"manage_store_name\": \"[Spravovat název obchodu](/admin/settings/general?edit=storeName)\",\n    \"section_link\": \"Odkaz sekce\",\n    \"gift_card_form_description\": \"Zákazníci mohou posílat dárkové karty na e‑mail příjemce s osobní zprávou. [Více informací](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Nadpis\",\n    \"resource_reference_product_custom_property\": \"Přidejte přizpůsobitelná vstupní pole k sběru vlastních informací, které se přidají k této samostatné položce objednávky a později budou viditelné v detailu objednávky.\",\n    \"block_link\": \"Odkaz bloku\",\n    \"submenu_feature\": \"Funkce podnabídky\",\n    \"cart_features\": \"Funkce košíku\",\n    \"email_signup\": \"Přihlášení k odběru e-mailů\",\n    \"mobile_media\": \"Média pro mobil\",\n    \"mobile_media_2\": \"Média pro mobil 2\",\n    \"navigation\": \"Navigace\",\n    \"popover\": \"Vyskakovací bublina\",\n    \"popover_position\": \"Pozice vyskakovací bubliny\",\n    \"resource_reference_product_sku\": \"Zobrazuje SKU nadřazeného produktu\",\n    \"content_layout\": \"Rozvržení obsahu\",\n    \"mobile_media_1\": \"Mobilní média 1\",\n    \"utilities\": \"Nástroje\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Sdílejte informace o značce se zákazníky. Popište produkt, oznamte novinky nebo přivítejte zákazníky v obchodě.</p>\",\n    \"bestseller_h2\": \"<h2>Nejprodávanější</h2>\",\n    \"bestseller_h3\": \"<h3>Nejprodávanější</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Věříme, že věci lze dělat lépe</p>\",\n    \"contact_us\": \"<h2>Kontaktujte nás</h2>\",\n    \"discover_bestsellers\": \"<p>Objevte nejprodávanější produkty, které si získaly srdce zákazníků dokonalým spojením funkčnosti a stylu.</p>\",\n    \"everythings_starts_with_why\": \"<p>Vše, co děláme, začíná otázkou „proč“</p>\",\n    \"explore_latest_products\": \"<p>Prozkoumejte naše nejnovější produkty.</p>\",\n    \"faq\": \"<h3>Nejčastější dotazy</h3>\",\n    \"first_to_know\": \"<p>Buďte první, kdo se dozví o nových kolekcích a speciálních nabídkách.</p>\",\n    \"free_returns\": \"<p>30denní vrácení zdarma</p>\",\n    \"free_shipping_over\": \"<p>Doprava zdarma při nákupu nad 50 $</p>\",\n    \"goal_for_every_customer\": \"<p>Naším cílem je, aby byl každý zákazník se svým nákupem zcela spokojen. Pokud tomu tak není, dejte nám vědět a uděláme maximum, abychom vše napravili.</p>\",\n    \"home_to_shirts\": \"<p>Domů → Košile</p>\",\n    \"intentional_design\": \"<h2>Promyšlený design</h2>\",\n    \"introducing_h2\": \"<h2><em>Představujeme</em></h2>\",\n    \"latest_products\": \"<p>Představujeme naše nejnovější produkty připravené na sezónu. Nakupte své oblíbené dřív, než zmizí!</p>\",\n    \"made_local_and_global\": \"<p>Naše produkty vyrábíme lokálně i globálně. Výrobní partnery pečlivě vybíráme, aby naše výrobky byly kvalitní a za férovou cenu.</p>\",\n    \"made_with_care_h2\": \"<h2>Vyrobeno s péčí</h2>\",\n    \"made_with_care_extended\": \"<p>Vyrobeno s péčí a bezpodmínečně milované zákazníky – tento ikonický bestseller předčí všechna očekávání.</p>\",\n    \"made_with_care\": \"<p>Vyrobeno s péčí a bezpodmínečně milované našimi zákazníky.</p>\",\n    \"make_things_better_extended\": \"<p>Vyrábíme věci, které fungují lépe a vydrží déle. Naše produkty řeší skutečné problémy, mají čistý design a poctivé materiály.</p>\",\n    \"make_things_better\": \"<p>Vyrábíme věci, které fungují lépe a vydrží déle.</p>\",\n    \"may_also_like\": \"<h4>Mohlo by se vám líbit</h4>\",\n    \"new_arrivals_h1\": \"<h1>Novinky</h1>\",\n    \"new_arrivals_h2\": \"<h2>Novinky</h2>\",\n    \"new_arrivals_h3\": \"<h3>Novinky</h3>\",\n    \"product_launch\": \"<p>Nahlédněte do zákulisí našeho posledního uvedení nového produktu.</p>\",\n    \"product_story\": \"<p>V srdci každého produktu je jedinečný příběh, poháněný vášní pro kvalitu a inovace. Každá položka zlepšuje každodenní život a přináší radost.</p>\",\n    \"real_people\": \"<p>Skuteční lidé tvoří skvělé produkty</p>\",\n    \"related_product\": \"<h3>Související produkty</h3>\",\n    \"return_policy\": \"<h2>Jaké jsou podmínky vrácení?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 recenzí</p>\",\n    \"shipping_based_on_location\": \"<p>Doprava se vypočítá podle lokality a položek v objednávce. Cena dopravy bude vždy známá před nákupem.</p>\",\n    \"shop_by_collection\": \"<h3>Nakupujte podle kolekcí</h3>\",\n    \"signature_products\": \"<h2>Náš ikonický produkt</h2>\",\n    \"styled_with\": \"<h3>Sladěno s</h3>\",\n    \"subscribe\": \"<h2>Odebírejte e‑maily</h2>\",\n    \"team_with_goal\": \"<h2>Tým s cílem</h2>\",\n    \"unable_to_accept_returns\": \"<p>U některých položek nemůžeme vrácení přijmout. Před nákupem budou jasně označeny.</p>\",\n    \"work_quickly_to_ship\": \"<p>Objednávku expedujeme co nejrychleji. Jakmile bude odeslána, obdržíte e‑mail s dalšími informacemi. Doba doručení se liší podle lokality.</p>\",\n    \"join_our_email_list\": \"<h2>Přihlaste se k odběru e‑mailů</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Získejte exkluzivní nabídky a přednostní přístup k novým produktům.</p>\",\n    \"artistry_in_action\": \"<p>Mistrovství v akci </p>\",\n    \"authentic_materials\": \"<p>Poctivé materiály, bez kompromisů </p>\",\n    \"bold_style_recognizable\": \"<p>Výrazný styl, který poznáte kdekoli</p>\",\n    \"discover_elevated_design\": \"<p>Objevte vytříbený design </p>\",\n    \"expert_construction_finish\": \"<p>Precizní zpracování a bezchybná povrchová úprava</p>\",\n    \"made_to_last\": \"<p>Vyrobeno, aby vydrželo </p>\",\n    \"pieces_better_with_time\": \"<p>Kousky, které jsou s časem a nošením jen lepší </p>\",\n    \"quality_you_can_feel\": \"<h2>Kvalita, kterou poznáte</h2>\",\n    \"uncompromising_standards\": \"<p>Bezkompromisní standardy </p>\",\n    \"featured_collection_h2\": \"<h2>Propagovaná kolekce</h2>\",\n    \"shop_collection\": \"<p>Objevte naši pečlivě sestavenou kolekci s vybranými oblíbenými kousky, které spojují styl a kvalitu.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Nakupujte nyní\",\n    \"collapsible_row\": \"Rozbalovací řádek\",\n    \"heading\": \"Nadpis\",\n    \"email_signup_button_label\": \"Přihlásit se k odběru\",\n    \"accordion_heading\": \"Nadpis rozbalovacího panelu\",\n    \"contact_form_button_label\": \"Odeslat\",\n    \"popup_link\": \"Odkaz ve vyskakovacím okně\",\n    \"sign_up\": \"Zaregistrovat se\",\n    \"welcome_to_our_store\": \"Vítejte v našem obchodě\",\n    \"be_bold\": \"Buďte odvážní.\",\n    \"shop_our_latest_arrivals\": \"Podívejte se na naše nejnovější novinky!\",\n    \"are_purchases_final_sale\": \"Jsou některé nákupy konečné (nelze je vrátit)?\",\n    \"care_instructions\": \"Pokyny pro péči\",\n    \"cart\": \"Košík\",\n    \"discover_collection\": \"Objevte kolekci\",\n    \"fit\": \"střih\",\n    \"how_much_for_shipping\": \"Kolik stojí doprava?\",\n    \"learn_more\": \"Zjistit více\",\n    \"manufacturing\": \"Výroba\",\n    \"materials\": \"Materiály\",\n    \"return_policy\": \"Zásady vrácení\",\n    \"shipping\": \"Doprava\",\n    \"shop_now_button_label\": \"Nakupujte nyní\",\n    \"sign_up_button_label\": \"Zaregistrovat se\",\n    \"submit_button_label\": \"Odeslat\",\n    \"up_the_ante\": \"Zvyšte\\nsázky\",\n    \"view_all_button_label\": \"Zobrazit vše\",\n    \"what_is_return_policy\": \"Jaké jsou zásady vrácení?\",\n    \"when_will_order_arrive\": \"Kdy mi dorazí objednávka?\",\n    \"where_are_products_made\": \"Kde se vaše produkty vyrábějí?\",\n    \"trending_now\": \"Aktuální trendy\",\n    \"shop_the_look\": \"Nakupujte vzhled\",\n    \"bestsellers\": \"Nejprodávanější\",\n    \"featured_collection\": \"Propagovaná kolekce\",\n    \"new_arrivals\": \"Novinky\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Popište video pro uživatele asistivních technologií\",\n    \"video_autoplay\": \"Videa budou ve výchozím nastavení ztlumená\",\n    \"video_external\": \"Použijte URL z YouTube nebo Vimeo\",\n    \"carousel_layout_on_mobile\": \"Na mobilu se vždy použije karusel\",\n    \"carousel_hover_behavior_not_supported\": \"Efekt při najetí myší u „Karuselu“ není podporován, pokud je na úrovni sekce zvolen typ „Karusel“\",\n    \"checkout_buttons\": \"Umožňuje kupujícím zaplatit rychleji a může zlepšit konverzi. [Více informací](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Vlastní nadpis\",\n    \"edit_presets_in_theme_settings\": \"Upravte předvolby v [nastavení motivu](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Přizpůsobte filtry pomocí [aplikace Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"manage_countries_regions\": \"[Spravovat země/regiony](/admin/settings/markets)\",\n    \"manage_languages\": \"[Spravovat jazyky](/admin/settings/languages)\",\n    \"transparent_background\": \"Kvůli čitelnosti zkontrolujte každou šablonu, kde je použito průhledné pozadí\",\n    \"grid_layout_on_mobile\": \"Na mobilu se používá rozvržení mřížky\",\n    \"logo_font\": \"Platí pouze tehdy, když není vybráno logo\",\n    \"aspect_ratio_adjusted\": \"V některých rozvrženích upraveno\",\n    \"custom_liquid\": \"Přidejte fragmenty aplikací nebo jiný kód pro pokročilá přizpůsobení. [Více informací](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"Platí pouze pro obrázky\",\n    \"hover_effects\": \"Platí pro produktové a kolekční karty\",\n    \"pills_usage\": \"Používá se pro aktivní filtry, slevové kódy a návrhy vyhledávání\",\n    \"hide_logo_on_home_page_help\": \"Logo zůstane viditelné, když je aktivní přilepené záhlaví\",\n    \"media_type_info\": \"Funkce se načítají z odkazů v nabídce\",\n    \"logo_height\": \"Týká se pouze loga v záhlaví\",\n    \"actions_display_style\": \"Na mobilních zařízeních se vždy používají ikony\"\n  },\n  \"categories\": {\n    \"product_list\": \"Propagovaná kolekce\",\n    \"basic\": \"Základní\",\n    \"collection\": \"Kolekce\",\n    \"collection_list\": \"Seznam kolekcí\",\n    \"footer\": \"Zápatí\",\n    \"forms\": \"Formuláře\",\n    \"header\": \"Záhlaví\",\n    \"layout\": \"Rozvržení\",\n    \"links\": \"Odkazy\",\n    \"product\": \"Produkt\",\n    \"banners\": \"Banery\",\n    \"collections\": \"Kolekce\",\n    \"custom\": \"Vlastní\",\n    \"decorative\": \"Dekorativní\",\n    \"products\": \"Produkty\",\n    \"other_sections\": \"Ostatní\",\n    \"storytelling\": \"Vyprávění\",\n    \"text\": \"Text\"\n  }\n}\n"
  },
  {
    "path": "locales/da.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Indlæs video: {{ description }}\",\n    \"sold_out\": \"Udsolgt\",\n    \"email_signup\": {\n      \"label\": \"Mail\",\n      \"placeholder\": \"Mailadresse\",\n      \"success\": \"Tak for din tilmelding\"\n    },\n    \"filter\": \"Filtrer\",\n    \"payment_methods\": \"Betalingsmetoder\",\n    \"contact_form\": {\n      \"name\": \"Navn\",\n      \"email\": \"Mailadresse\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Kommentar\",\n      \"post_success\": \"Tak for din henvendelse. Vi kontakter dig hurtigst muligt.\",\n      \"error_heading\": \"Juster følgende:\"\n    },\n    \"slider_label\": \"Billedkarrusel\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Afspil 3D-model\",\n    \"play_video\": \"Afspil video\",\n    \"unit_price\": \"Stykpris\",\n    \"country_results_count\": \"{{ count }} resultater\",\n    \"slideshow_pause\": \"Sæt diasshow på pause\",\n    \"slideshow_play\": \"Afspil diasshow\",\n    \"skip_to_text\": \"Gå til indhold\",\n    \"skip_to_product_info\": \"Gå til produktoplysninger\",\n    \"skip_to_results_list\": \"Gå direkte til resultatlisten\",\n    \"remove_item\": \"Fjern {{ title}}\",\n    \"new_window\": \"Åbnes i et nyt vindue.\",\n    \"close_dialog\": \"Luk dialogboks\",\n    \"reset_search\": \"Nulstil søgning\",\n    \"search_results_count\": \"{{ count }} søgeresultater fundet for “{{ query }}”\",\n    \"search_results_no_results\": \"Ingen resultater fundet for “{{ query }}”\",\n    \"slideshow_next\": \"Næste dias\",\n    \"slideshow_previous\": \"Forrige dias\",\n    \"filters\": \"Filtre\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter anvendt\",\n      \"other\": \"{{ count }} filtre anvendt\"\n    },\n    \"account\": \"Konto\",\n    \"cart\": \"Indkøbskurv\",\n    \"cart_count\": \"Varer i alt i indkøbskurven\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"Land/område\",\n    \"slide_status\": \"Dias {{ index }} af {{ length }}\",\n    \"scroll_to\": \"Scroll til {{ title }}\",\n    \"loading_product_recommendations\": \"Indlæser produktanbefalinger\",\n    \"discount\": \"Anvend en rabatkode\",\n    \"discount_menu\": \"Rabatkoder\",\n    \"discount_applied\": \"Anvendt rabatkode: {{ code }}\",\n    \"pause_video\": \"Sæt video på pause\",\n    \"inventory_status\": \"Lagerstatus\",\n    \"find_country\": \"Find land\",\n    \"localization_region_and_language\": \"Vælger til område og sprog\",\n    \"decrease_quantity\": \"Reducer antal\",\n    \"increase_quantity\": \"Øg antal\",\n    \"quantity\": \"Antal\",\n    \"rating\": \"Bedømmelsen af dette produkt er {{ rating }} ud af 5\",\n    \"nested_product\": \"{{ product_title }} for {{ parent_title }}\",\n    \"remove\": \"Fjern\",\n    \"view_pricing_info\": \"Vis prisoplysninger\",\n    \"open_hotspot\": \"Åbn hotspot\",\n    \"slideshow\": \"Diasshow\",\n    \"header_navigation_label\": \"Primær\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Læg i indkøbskurven\",\n    \"clear_all\": \"Ryd alt\",\n    \"remove\": \"Fjern\",\n    \"view_in_your_space\": \"Se den i dit område\",\n    \"show_filters\": \"Filtrer\",\n    \"clear\": \"Ryd\",\n    \"continue_shopping\": \"Tilbage til butikken\",\n    \"log_in_html\": \"Har du en konto? <a href=\\\"{{ link }}\\\">Log ind</a> for at betale hurtigere.\",\n    \"see_items\": {\n      \"one\": \"Se {{ count }} vare\",\n      \"other\": \"Se {{ count }} varer\"\n    },\n    \"view_all\": \"Se alle\",\n    \"add\": \"Tilføj\",\n    \"choose\": \"Vælg\",\n    \"added\": \"Tilføjet\",\n    \"show_less\": \"Vis mindre\",\n    \"show_more\": \"Vis mere\",\n    \"close\": \"Luk\",\n    \"more\": \"Mere\",\n    \"reset\": \"Nulstil\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Luk dialogboks\",\n    \"back\": \"Tilbage\",\n    \"log_in\": \"Log ind\",\n    \"log_out\": \"Log af\",\n    \"remove_discount\": \"Fjern rabatten {{ code }}\",\n    \"enter_using_password\": \"Brug adgangskode for at få adgang\",\n    \"submit\": \"Send\",\n    \"enter_password\": \"Angiv adgangskode\",\n    \"view_store_information\": \"Se butiksoplysninger\",\n    \"apply\": \"Anvend\",\n    \"sign_up\": \"Tilmeld dig\",\n    \"open_image_in_full_screen\": \"Åbn billede i fuld skærm\",\n    \"sign_in_options\": \"Andre muligheder for at logge ind\",\n    \"sort\": \"Sortér\",\n    \"show_all_options\": \"Vis alle muligheder\",\n    \"open\": \"Åbn\"\n  },\n  \"content\": {\n    \"reviews\": \"anmeldelser\",\n    \"language\": \"Sprog\",\n    \"localization_region_and_language\": \"Område og sprog\",\n    \"no_results_found\": \"Der blev ikke fundet nogen resultater\",\n    \"cart_total\": \"Indkøbskurv i alt\",\n    \"your_cart_is_empty\": \"Din indkøbskurv er tom\",\n    \"cart_estimated_total\": \"Forventet totalbeløb\",\n    \"seller_note\": \"Særlige instruktioner\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Rabatter\",\n    \"discount\": \"Rabat\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Inklusive told og skatter. Rabatter og <a href=\\\"{{ link }}\\\">levering</a> beregnes ved betaling.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Inklusive told og skatter. Rabatter og levering beregnes ved betaling.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Inklusive skatter. Rabatter og <a href=\\\"{{ link }}\\\">levering</a> beregnes ved betaling.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Inklusive skatter. Rabatter og levering beregnes ved betaling.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Inklusive told. Skatter, rabatter og <a href=\\\"{{ link }}\\\">levering</a> beregnes ved betaling.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Inklusive told. Skatter, rabatter og levering beregnes ved betaling.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Skatter, rabatter og <a href=\\\"{{ link }}\\\">levering</a> beregnes ved betaling.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Skatter, rabatter og levering beregnes ved betaling.\",\n    \"checkout\": \"Gå til betaling\",\n    \"cart_title\": \"Indkøbskurv\",\n    \"product_image\": \"Produktbillede\",\n    \"product_information\": \"Produktoplysninger\",\n    \"product_total\": \"Produkt i alt\",\n    \"quantity\": \"Antal\",\n    \"price\": \"Pris\",\n    \"price_regular\": \"Normalpris\",\n    \"price_compare_at\": \"Sammenligningspris\",\n    \"price_sale\": \"Udsalgspris\",\n    \"duties_and_taxes_included\": \"Inkl. told og skatter.\",\n    \"duties_included\": \"Inkl. told.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Fragt</a> beregnes ved betaling.\",\n    \"taxes_included\": \"Inkl. skatter.\",\n    \"product_badge_sold_out\": \"Udsolgt\",\n    \"product_badge_sale\": \"Udsalg\",\n    \"search_input_label\": \"Søg\",\n    \"search_input_placeholder\": \"Søg\",\n    \"search_results\": \"Søgeresultater\",\n    \"search_results_label\": \"Søgeresultater\",\n    \"search_results_no_results\": \"Der blev ikke fundet nogen resultater for “{{ terms }}”. Prøv at ændre søgeord.\",\n    \"search_results_resource_articles\": \"Blogopslag\",\n    \"search_results_resource_collections\": \"Kollektioner\",\n    \"search_results_resource_pages\": \"Sider\",\n    \"search_results_resource_products\": \"Produkter\",\n    \"search_results_resource_queries\": \"Søgeforslag\",\n    \"search_results_view_all\": \"Se alle\",\n    \"search_results_view_all_button\": \"Se alle\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} produkter\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Standard\",\n      \"grid_fieldset\": \"Kolonnegitter\",\n      \"single_item\": \"Enkelt\",\n      \"zoom_out\": \"Zoom ud\"\n    },\n    \"unavailable\": \"Ikke tilgængelig\",\n    \"collection_placeholder\": \"Kollektionstitel\",\n    \"product_card_placeholder\": \"Produkttitel\",\n    \"recently_viewed_products\": \"Vist for nylig\",\n    \"product_count\": \"Produktantal\",\n    \"item_count\": {\n      \"one\": \"{{ count }} vare\",\n      \"other\": \"{{ count }} varer\"\n    },\n    \"errors\": \"Fejl\",\n    \"search\": \"Søg\",\n    \"search_results_no_results_check_spelling\": \"Der blev ikke fundet nogen resultater for “{{ terms }}”. Kontrollér stavemåden, eller brug et andet ord eller udtryk.\",\n    \"filters\": \"Filtre\",\n    \"price_from\": \"Fra {{ price }}\",\n    \"price_filter_html\": \"Den højeste pris er {{ price }}\",\n    \"featured_products\": \"Udvalgte produkter\",\n    \"no_products_found\": \"Der blev ikke fundet nogen produkter.\",\n    \"use_fewer_filters_html\": \"Prøv at bruge færre filtre, eller <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">ryd alle filtre</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Hej {{ first_name }}\",\n    \"account_orders\": \"Ordrer\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Rabatkode\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Inklusive told og skatter. Levering beregnes ved betaling.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Inklusive told og skatter. Levering beregnes ved betaling.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Inklusive told. Levering beregnes ved betaling.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Inklusive told. Levering beregnes ved betaling.\",\n    \"pickup_available_at_html\": \"Afhentning er tilgængelig her: <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Afhentning er tilgængelig {{ pickup_time }}\",\n    \"pickup_not_available\": \"Afhentning er ikke tilgængelig lige nu\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Læs mere ...\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Skatter og <a href=\\\"{{ link }}\\\">levering</a> beregnes ved betaling.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Skatter og levering beregnes ved betaling.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Inklusive skatter. Levering beregnes ved betaling.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Inklusive skatter. Levering beregnes ved betaling.\",\n    \"wrong_password\": \"Forkert adgangskode\",\n    \"view_more_details\": \"Se flere oplysninger\",\n    \"page_placeholder_title\": \"Sidetitel\",\n    \"page_placeholder_content\": \"Vælg en side for at vise dens indhold.\",\n    \"placeholder_image\": \"Pladsholderbillede\",\n    \"powered_by\": \"Denne butik vil blive drevet af\",\n    \"store_owner_link_html\": \"Er du butiksejeren? <a href=\\\"{{ link }}\\\">Log ind her</a>\",\n    \"shipping_discount_error\": \"Forsendelsesrabatter vises ved betaling efter tilføjelse af en adresse\",\n    \"discount_code_error\": \"Rabatkoden kan ikke anvendes i din indkøbskurv\",\n    \"inventory_low_stock\": \"Lav lagerbeholdning\",\n    \"inventory_in_stock\": \"På lager\",\n    \"inventory_out_of_stock\": \"Ikke på lager\",\n    \"shipping_policy\": \"Levering beregnes ved betaling.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} tilbage\",\n      \"other\": \"{{ count }} tilbage\"\n    },\n    \"recipient_form_send_to\": \"Send til\",\n    \"recipient_form_email_label\": \"Modtagerens mail\",\n    \"recipient_form_email_label_my_email\": \"Min mail\",\n    \"recipient_form_email_address\": \"Modtagers mailadresse\",\n    \"recipient_form_name_label\": \"Modtagerens navn (valgfrit)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} tegn brugt\",\n    \"recipient_form_send_on\": \"ÅÅÅÅ-MM-DD\",\n    \"recipient_form_send_on_label\": \"Send (valgfrit)\",\n    \"recipient_form_message\": \"Besked (valgfrit)\",\n    \"recipient_form_fields_visible\": \"Modtagerformularfelterne er nu synlige\",\n    \"recipient_form_fields_hidden\": \"Modtagerformularfelterne er nu skjulte\",\n    \"recipient_form_error\": \"Der opstod en fejl ved indsendelsen af formularen\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} tegn brugt\",\n    \"terms_and_policies\": \"Vilkår og politikker\",\n    \"pagination\": {\n      \"nav_label\": \"Navigation med sideinddeling\",\n      \"previous\": \"Forrige\",\n      \"next\": \"Næste\",\n      \"page\": \"Side {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Mængdebaseret pris er tilgængelig\",\n    \"volume_pricing\": \"Mængdebaseret pris\",\n    \"at_price_each\": \"til {{ price }} pr. stk.\",\n    \"each\": \"{{ price }}/stk.\",\n    \"each_abbreviation\": \"stk.\",\n    \"price_at\": \"til\",\n    \"price_range\": \"Prisinterval\",\n    \"cancel\": \"Annuller\",\n    \"product_subtotal\": \"Subtotal for produkt\",\n    \"quantity_per_item\": \" pr. stk.\",\n    \"remove_all\": \"Fjern alle\",\n    \"remove_all_items_confirmation\": \"Vil du fjerne alle {{ count }} varer fra din indkøbskurv?\",\n    \"remove_one_item_confirmation\": \"Vil du fjerne 1 vare fra din indkøbskurv?\",\n    \"total_items\": \"Varer i alt\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Variant i alt\",\n    \"view_cart\": \"Se indkøbskurv\",\n    \"your_cart\": \"Din indkøbskurv\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 vare er lagt i indkøbskurven\",\n      \"other\": \"{{ count }} varer lagt i indkøbskurven\"\n    },\n    \"item_count_cutoff\": \"Mere end {{ count }} varer\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Brug gavekortkoden online eller som QR-kode i butikken\",\n      \"title\": \"Her er din gavekortsaldo ({{ value }}) for {{ shop }}!\",\n      \"subtext\": \"Dit gavekort\",\n      \"shop_link\": \"Besøg webshop\",\n      \"add_to_apple_wallet\": \"Føj til Apple Wallet\",\n      \"qr_image_alt\": \"QR-kode – scan for at indløse gavekort\",\n      \"copy_code\": \"Kopiér gavekortskode\",\n      \"expiration_date\": \"Udløber {{ expires_on }}\",\n      \"copy_code_success\": \"Koden er blevet kopieret\",\n      \"expired\": \"Udløbet\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Adgangskode\",\n    \"search\": \"Søg\",\n    \"product_title\": \"Produkttitel\",\n    \"collection_title\": \"Kollektionstitel\",\n    \"blog_posts\": \"Blogopslag\",\n    \"blog_post_title\": \"Titel\",\n    \"blog_post_author\": \"Forfatter\",\n    \"blog_post_date\": \"Dato\",\n    \"blog_post_description\": \"Et uddrag fra dit blogopslag\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Læg i indkøbskurven\",\n      \"added_to_cart\": \"Lagt i indkøbskurv\",\n      \"adding_to_cart\": \"Tilføjer...\",\n      \"add_to_cart_error\": \"Der opstod en fejl, da du lagde varen i indkøbskurven\",\n      \"sold_out\": \"Udsolgt\",\n      \"unavailable\": \"Ikke tilgængelig\",\n      \"quantity_error_max\": \"Denne vare har en maksimumgrænse på {{ maximum }}\",\n      \"quantity\": \"Antal\",\n      \"quantity_increments\": \"Intervaller på {{ increment }}\",\n      \"quantity_minimum\": \"Minimum på {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimum på {{ maximum }}\",\n      \"in_cart\": \"i indkøbskurv\",\n      \"default_title\": \"Standardtitel\",\n      \"sticky_add_to_cart\": \"Bjælken “Læg hurtigt i indkøbskurv”\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"til\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} kommentar\",\n        \"other\": \"{{ count }} kommentarer\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Mail\",\n      \"error\": \"Kommentaren blev ikke offentliggjort. Ret følgende:\",\n      \"heading\": \"Skriv en kommentar\",\n      \"message\": \"Besked\",\n      \"moderated\": \"Bemærk, at kommentarer skal godkendes, før de bliver offentliggjort.\",\n      \"name\": \"Navn\",\n      \"post\": \"Send kommentar\",\n      \"success_moderated\": \"Kommentaren blev indsendt og afventer moderering\",\n      \"success\": \"Kommentaren blev indsendt\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/da.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Kanter\",\n    \"collapsible_row\": \"Række, der kan skjules\",\n    \"colors\": \"Farver\",\n    \"custom_section\": \"Brugerdefineret sektion\",\n    \"icon\": \"Ikon\",\n    \"logo_and_favicon\": \"Logo og favoritikon\",\n    \"overlapping_blocks\": \"Overlappende blokke\",\n    \"product_buy_buttons\": \"Købsknapper\",\n    \"product_description\": \"Beskrivelse\",\n    \"product_price\": \"Pris\",\n    \"product_variant_picker\": \"Variantvælger\",\n    \"slideshow\": \"Diasshow\",\n    \"typography\": \"Typografi\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Kontrolelementer til diasshow\",\n    \"size\": \"Størrelse\",\n    \"spacing\": \"Afstand\",\n    \"product_recommendations\": \"Anbefalede produkter\",\n    \"product_media\": \"Produktmedie\",\n    \"featured_collection\": \"Udvalgt kollektion\",\n    \"add_to_cart\": \"Læg i kurv\",\n    \"email_signup\": \"Tilmelding med mail\",\n    \"submit_button\": \"Send-knap\",\n    \"grid_layout_selector\": \"Vælger til gitterlayout\",\n    \"image\": \"Billede\",\n    \"list_items\": \"Listeelementer\",\n    \"facets\": \"Facetter\",\n    \"variants\": \"Varianter\",\n    \"styles\": \"Styles\",\n    \"product_cards\": \"Produktkort\",\n    \"buttons\": \"Knapper\",\n    \"inputs\": \"Input\",\n    \"primary_button\": \"Primær knap\",\n    \"secondary_button\": \"Sekundær knap\",\n    \"popovers_and_modals\": \"Popovers og modusvinduer\",\n    \"marquee\": \"Lysavis\",\n    \"pull_quote\": \"Fremhævet citat\",\n    \"contact_form\": \"Kontaktformular\",\n    \"featured_product\": \"Fremhævet produkt\",\n    \"icons_with_text\": \"Ikoner med tekst\",\n    \"alternating_content_rows\": \"Skiftende rækker\",\n    \"accelerated_checkout\": \"Hurtigere betaling\",\n    \"accordion\": \"Harmonika\",\n    \"accordion_row\": \"Harmonikarække\",\n    \"animations\": \"Animationer\",\n    \"announcement\": \"Meddelelse\",\n    \"announcement_bar\": \"Meddelelseslinje\",\n    \"badges\": \"Badges\",\n    \"button\": \"Knap\",\n    \"cart\": \"Indkøbskurv\",\n    \"cart_items\": \"Varer i indkøbskurv\",\n    \"cart_products\": \"Produkter i indkøbskurv\",\n    \"cart_title\": \"Indkøbskurv\",\n    \"collection\": \"Kollektion\",\n    \"collection_card\": \"Kollektionskort\",\n    \"collection_columns\": \"Kollektionskolonner\",\n    \"collection_container\": \"Kollektion\",\n    \"collection_description\": \"Kollektionsbeskrivelse\",\n    \"collection_image\": \"Kollektionsbillede\",\n    \"collection_info\": \"Kollektionsoplysninger\",\n    \"collection_list\": \"Kollektionsliste\",\n    \"collections\": \"Kollektioner\",\n    \"content\": \"Indhold\",\n    \"content_grid\": \"Indholdsgitter\",\n    \"details\": \"Detaljer\",\n    \"divider\": \"Skillelinje\",\n    \"filters\": \"Filtrering og sortering\",\n    \"follow_on_shop\": \"Følg på Shop\",\n    \"footer\": \"Sidefod\",\n    \"footer_utilities\": \"Hjælpefunktioner i sidefod\",\n    \"group\": \"Gruppe\",\n    \"header\": \"Sidehoved\",\n    \"heading\": \"Overskrift\",\n    \"icons\": \"Ikoner\",\n    \"image_with_text\": \"Billede med tekst\",\n    \"input\": \"Input\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Magsingitter\",\n    \"media\": \"Medie\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout til mobil\",\n    \"payment_icons\": \"Betalingsikoner\",\n    \"popup_link\": \"Pop op-link\",\n    \"predictive_search\": \"Søge-popover\",\n    \"predictive_search_empty\": \"Tom forudsigende søgning\",\n    \"price\": \"Pris\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Produktkort\",\n    \"product_card_media\": \"Medie\",\n    \"product_card_rendering\": \"Gengivelse af produktkort\",\n    \"product_grid\": \"Gitter\",\n    \"product_grid_main\": \"Produktgitter\",\n    \"product_image\": \"Produktbillede\",\n    \"product_information\": \"Produktoplysninger\",\n    \"product_review_stars\": \"Bedømmelsesstjerner\",\n    \"quantity\": \"Antal\",\n    \"row\": \"Række\",\n    \"search\": \"Søg\",\n    \"section\": \"Sektion\",\n    \"selected_variants\": \"Valgte varianter\",\n    \"slide\": \"Dias\",\n    \"social_media_links\": \"Links til sociale medier\",\n    \"steps\": \"Trin\",\n    \"summary\": \"Resume\",\n    \"swatches\": \"Prøver\",\n    \"testimonials\": \"Kundeudtalelser\",\n    \"text\": \"Tekst\",\n    \"title\": \"Titel\",\n    \"utilities\": \"Hjælpefunktioner\",\n    \"search_input\": \"Søgeinput\",\n    \"search_results\": \"Søgeresultater\",\n    \"read_only\": \"Skrivebeskyttet\",\n    \"collections_bento\": \"Kollektionsliste: Bento-layout\",\n    \"faq_section\": \"Ofte stillede spørgsmål\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Meget stor tekst\",\n    \"product_list\": \"Udvalgt kollektion\",\n    \"spacer\": \"Afstandsstykke\",\n    \"video_section\": \"Video\",\n    \"product_title\": \"Produkttitel\",\n    \"custom_liquid\": \"Brugerdefineret Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Blogopslag\",\n    \"blog_posts\": \"Blogopslag\",\n    \"caption\": \"Billedtekst\",\n    \"collection_card_image\": \"Billede\",\n    \"collection_title\": \"Kollektionstitel\",\n    \"collection_links\": \"Kollektionslinks\",\n    \"collection_links_spotlight\": \"Kollektionslinks: Spotlight\",\n    \"collection_links_text\": \"Kollektionslinks: Tekst\",\n    \"collections_carousel\": \"Kollektionsliste: Karrusel\",\n    \"collections_editorial\": \"Kollektionsliste: Redaktionel\",\n    \"collections_grid\": \"Kollektionsliste: Gitter\",\n    \"copyright\": \"Ophavsret\",\n    \"count\": \"Antal\",\n    \"divider_section\": \"Skillelinje\",\n    \"drawers\": \"Skuffer\",\n    \"editorial\": \"Redaktionel\",\n    \"editorial_jumbo_text\": \"Redaktionel: Meget stor tekst\",\n    \"hero_marquee\": \"Hero: Lysavis\",\n    \"input_fields\": \"Inputfelter\",\n    \"local_pickup\": \"Lokal afhentning\",\n    \"marquee_section\": \"Lysavis\",\n    \"media_with_text\": \"Medie med tekst\",\n    \"page\": \"Side\",\n    \"page_content\": \"Indhold\",\n    \"page_layout\": \"Sidelayout\",\n    \"policy_list\": \"Politiklinks\",\n    \"prices\": \"Priser\",\n    \"product_list_button\": \"Knappen Se alle\",\n    \"products_carousel\": \"Udvalgt kollektion: Karrusel\",\n    \"products_editorial\": \"Udvalgt kollektion: Redaktionel\",\n    \"products_grid\": \"Udvalgt kollektion: Gitter\",\n    \"social_link\": \"Link til sociale medier\",\n    \"split_showcase\": \"Opdelt fremvisning\",\n    \"variant_pickers\": \"Variantvælgere\",\n    \"view_all_button\": \"Se alle\",\n    \"pills\": \"Piller\",\n    \"large_logo\": \"Stort logo\",\n    \"product_inventory\": \"Produktlager\",\n    \"description\": \"Beskrivelse\",\n    \"featured_image\": \"Udvalgt billede\",\n    \"multicolumn\": \"Flere kolonner\",\n    \"rich_text_section\": \"Formateret tekst\",\n    \"product_custom_property\": \"Særlige instruktioner\",\n    \"hero_bottom_aligned\": \"Hero: Justeret i bunden\",\n    \"blog_card\": \"Blogkort\",\n    \"blog_posts_grid\": \"Blogopslag: Gitter\",\n    \"blog_posts_carousel\": \"Blogopslag: Karrusel\",\n    \"blog_posts_editorial\": \"Blogopslag: Redaktionel\",\n    \"excerpt\": \"Uddrag\",\n    \"footer_password\": \"Sidefod til adgangskode\",\n    \"policies_and_links\": \"Politikker og links\",\n    \"card\": \"Kort\",\n    \"carousel\": \"Karrusel\",\n    \"carousel_content\": \"Karruselindhold\",\n    \"quick_order_list\": \"Liste til hurtig bestilling\",\n    \"column\": \"Kolonne\",\n    \"comparison_slider\": \"Sammenligningsslider\",\n    \"slideshow_full_frame\": \"Diasshow: Fuld ramme\",\n    \"slideshow_inset\": \"Diasshow: Indsat\",\n    \"image_compare\": \"Billedsammenligning\",\n    \"subheading\": \"Underoverskrift\",\n    \"featured_product_information\": \"Udvalgt produkt\",\n    \"product_hotspots\": \"Produkthotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Diasshow i lag\"\n  },\n  \"settings\": {\n    \"alignment\": \"Justering\",\n    \"autoplay\": \"Automatisk afspilning\",\n    \"background\": \"Baggrund\",\n    \"border_radius\": \"Hjørneradius\",\n    \"border_width\": \"Kanttykkelse\",\n    \"borders\": \"Kanter\",\n    \"bottom_padding\": \"Udfyldning i bunden\",\n    \"button\": \"Knap\",\n    \"color\": \"Farve\",\n    \"colors\": \"Farver\",\n    \"content_alignment\": \"Justering af indhold\",\n    \"content_direction\": \"Retning for indhold\",\n    \"content_position\": \"Position for indhold\",\n    \"cover_image_size\": \"Størrelse på forsidebillede\",\n    \"cover_image\": \"Forsidebillede\",\n    \"custom_minimum_height\": \"Tilpasset minimumshøjde\",\n    \"custom_width\": \"Tilpasset bredde\",\n    \"enable_video_looping\": \"Videoafspilning i løkke\",\n    \"favicon\": \"Favoritikon\",\n    \"font_family\": \"Skrifttypefamilie\",\n    \"gap\": \"Afstand\",\n    \"geometric_translate_y\": \"Geometrisk Y-forskydning\",\n    \"heading\": \"Overskrift\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Billede\",\n    \"image_icon\": \"Billedikon\",\n    \"image_opacity\": \"Billedets opacitet\",\n    \"image_position\": \"Billedposition\",\n    \"image_ratio\": \"Billedformat\",\n    \"label\": \"Label\",\n    \"line_height\": \"Linjehøjde\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Afstand i layout\",\n    \"make_section_full_width\": \"Gør sektion i fuld bredde\",\n    \"minimum_height\": \"Minimumshøjde\",\n    \"opacity\": \"Opacitet\",\n    \"overlay_opacity\": \"Overlejringens opacitet\",\n    \"padding\": \"Udfyldning\",\n    \"primary_color\": \"Links\",\n    \"product\": \"Produkt\",\n    \"section_width\": \"Sektionsbredde\",\n    \"size\": \"Størrelse\",\n    \"slide_spacing\": \"Afstand mellem slides\",\n    \"slide_width\": \"Slidebredde\",\n    \"slideshow_fullwidth\": \"Slides i fuld bredde\",\n    \"style\": \"Format\",\n    \"text\": \"Tekst\",\n    \"text_case\": \"Bogstavstørrelse\",\n    \"top_padding\": \"Udfyldning i toppen\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alternativ tekst\",\n    \"video_loop\": \"Afspil video i løkke\",\n    \"video_position\": \"Videoposition\",\n    \"width\": \"Bredde\",\n    \"z_index\": \"Z-indeks\",\n    \"limit_content_width\": \"Begræns bredde på indhold\",\n    \"color_scheme\": \"Farveskema\",\n    \"inherit_color_scheme\": \"Nedarv farveskema\",\n    \"product_count\": \"Antal produkter\",\n    \"product_type\": \"Produkttype\",\n    \"content_width\": \"Bredde på indhold\",\n    \"collection\": \"Kollektion\",\n    \"enable_sticky_content\": \"Fastklæbet indhold på computer\",\n    \"error_color\": \"Fejl\",\n    \"success_color\": \"Succes\",\n    \"primary_font\": \"Primær skrifttype\",\n    \"secondary_font\": \"Sekundær skrifttype\",\n    \"tertiary_font\": \"Tertiær skrifttype\",\n    \"columns\": \"Kolonner\",\n    \"items_to_show\": \"Varer, der skal vises\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Type\",\n    \"show_grid_layout_selector\": \"Vis vælger til gitterlayout\",\n    \"view_more_show\": \"Vis knappen \\\"Se mere\\\"\",\n    \"image_gap\": \"Afstand mellem billeder\",\n    \"width_desktop\": \"Bredde på computer\",\n    \"width_mobile\": \"Bredde på mobil\",\n    \"border_style\": \"Kantformat\",\n    \"height\": \"Højde\",\n    \"thickness\": \"Tykkelse\",\n    \"stroke\": \"Stregtykkelse\",\n    \"filter_style\": \"Filterformat\",\n    \"swatches\": \"Prøver\",\n    \"quick_add_colors\": \"Farver for hurtigt køb\",\n    \"divider_color\": \"Skillelinje\",\n    \"border_opacity\": \"Kantens opacitet\",\n    \"hover_background\": \"Hover-baggrund\",\n    \"hover_borders\": \"Hover-kanter\",\n    \"hover_text\": \"Hover-tekst\",\n    \"primary_hover_color\": \"Hover-links\",\n    \"primary_button_text\": \"Tekst på primær knap\",\n    \"primary_button_background\": \"Baggrund for primær knap\",\n    \"primary_button_border\": \"Kant på primær knap\",\n    \"secondary_button_text\": \"Tekst på sekundær knap\",\n    \"secondary_button_background\": \"Baggrund for sekundær knap\",\n    \"secondary_button_border\": \"Kant på sekundær knap\",\n    \"shadow_color\": \"Skygge\",\n    \"video_autoplay\": \"Automatisk afspilning\",\n    \"video_cover_image\": \"Forsidebillede\",\n    \"video_external_url\": \"Webadresse\",\n    \"video_source\": \"Kilde\",\n    \"first_row_media_position\": \"Medieposition i første række\",\n    \"accordion\": \"Harmonika\",\n    \"aspect_ratio\": \"Højde-bredde-forhold\",\n    \"auto_rotate_announcements\": \"Roter meddelelser automatisk\",\n    \"auto_rotate_slides\": \"Roter slides automatisk\",\n    \"badge_corner_radius\": \"Hjørneradius\",\n    \"badge_position\": \"Position på kort\",\n    \"badge_sale_color_scheme\": \"Udsalg\",\n    \"badge_sold_out_color_scheme\": \"Udsolgt\",\n    \"behavior\": \"Adfærd\",\n    \"blur\": \"Sløring af skygge\",\n    \"border\": \"Kant\",\n    \"bottom\": \"Bund\",\n    \"card_image_height\": \"Højde på produktbillede\",\n    \"carousel_on_mobile\": \"Karrusel på mobil\",\n    \"cart_count\": \"Antal i kurv\",\n    \"cart_items\": \"Varer i indkøbskurv\",\n    \"cart_related_products\": \"Relaterede produkter\",\n    \"cart_title\": \"Indkøbskurv\",\n    \"cart_total\": \"Total for indkøbskurv\",\n    \"cart_type\": \"Type\",\n    \"case\": \"Bogstavstørrelse\",\n    \"checkout_buttons\": \"Knapper til hurtigere betaling\",\n    \"collection_list\": \"Kollektioner\",\n    \"collection_templates\": \"Skabeloner til kollektion\",\n    \"content\": \"Indhold\",\n    \"corner_radius\": \"Hjørneradius\",\n    \"country_region\": \"Land/område\",\n    \"currency_code\": \"Valutakode\",\n    \"custom_height\": \"Tilpasset højde\",\n    \"desktop_height\": \"Højde på computer\",\n    \"direction\": \"Retning\",\n    \"display\": \"Visning\",\n    \"divider_thickness\": \"Tykkelse på skillelinje\",\n    \"divider\": \"Skillelinje\",\n    \"dividers\": \"Skillelinjer\",\n    \"drop_shadow\": \"Skygge\",\n    \"empty_state_collection_info\": \"Vises, før der indtastes en søgning\",\n    \"empty_state_collection\": \"Kollektion for tom tilstand\",\n    \"enable_filtering\": \"Filtre\",\n    \"enable_grid_density\": \"Styring af gitterlayout\",\n    \"enable_sorting\": \"Sortering\",\n    \"enable_zoom\": \"Aktiver zoom\",\n    \"equal_columns\": \"Lige store kolonner\",\n    \"expand_first_group\": \"Udvid første gruppe\",\n    \"extend_media_to_screen_edge\": \"Udvid medie til skærmkant\",\n    \"extend_summary\": \"Udvid til skærmkant\",\n    \"extra_large\": \"Ekstra stor\",\n    \"extra_small\": \"Ekstra lille\",\n    \"flag\": \"Flag\",\n    \"font_price\": \"Skrifttype for pris\",\n    \"font_weight\": \"Skriftvægt\",\n    \"font\": \"Skrifttype\",\n    \"full_width_first_image\": \"Første billede i fuld bredde\",\n    \"full_width_on_mobile\": \"Fuld bredde på mobil\",\n    \"heading_preset\": \"Forudindstilling for overskrift\",\n    \"hide_unselected_variant_media\": \"Skjul medier for ikke-valgte varianter\",\n    \"horizontal_gap\": \"Vandret afstand\",\n    \"horizontal_offset\": \"Vandret forskydning af skygge\",\n    \"hover_behavior\": \"Hover-opførsel\",\n    \"icon_background\": \"Ikonbaggrund\",\n    \"icons\": \"Ikoner\",\n    \"image_border_radius\": \"Hjørneradius for billede\",\n    \"installments\": \"Rater\",\n    \"integrated_button\": \"Integreret knap\",\n    \"language_selector\": \"Sprogvælger\",\n    \"large\": \"Stor\",\n    \"left_padding\": \"Udfyldning til venstre\",\n    \"left\": \"Venstre\",\n    \"letter_spacing\": \"Afstand mellem bogstaver\",\n    \"limit_media_to_screen_height\": \"Begræns til skærmhøjde\",\n    \"limit_product_details_width\": \"Begræns bredde på produktoplysninger\",\n    \"link_preset\": \"Forudindstilling for link\",\n    \"links\": \"Links\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Løkke\",\n    \"make_details_sticky_desktop\": \"Fastklæbet på computer\",\n    \"max_width\": \"Maks. bredde\",\n    \"media_height\": \"Mediehøjde\",\n    \"media_overlay\": \"Medieoverlejring\",\n    \"media_position\": \"Medieposition\",\n    \"media_type\": \"Medietype\",\n    \"media_width\": \"Mediebredde\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Kolonner på mobil\",\n    \"mobile_height\": \"Højde på mobil\",\n    \"mobile_logo_image\": \"Logo til mobil\",\n    \"mobile_quick_add\": \"Hurtigt køb på mobil\",\n    \"motion_direction\": \"Bevægelsesretning\",\n    \"motion\": \"Bevægelse\",\n    \"movement_direction\": \"Bevægelsesretning\",\n    \"navigation_bar_color_scheme\": \"Farveskema for navigationslinje\",\n    \"navigation_bar\": \"Navigationslinje\",\n    \"navigation\": \"Navigation\",\n    \"open_new_tab\": \"Åbn link i ny fane\",\n    \"overlay_color\": \"Farve på overlejring\",\n    \"overlay\": \"Overlejring\",\n    \"padding_bottom\": \"Udfyldning i bunden\",\n    \"padding_horizontal\": \"Vandret udfyldning\",\n    \"padding_top\": \"Udfyldning i toppen\",\n    \"page_width\": \"Sidebredde\",\n    \"pagination\": \"Sideinddeling\",\n    \"placement\": \"Placering\",\n    \"position\": \"Position\",\n    \"preset\": \"Forudindstilling\",\n    \"product_cards\": \"Produktkort\",\n    \"product_pages\": \"Produktsider\",\n    \"product_templates\": \"Produktskabeloner\",\n    \"products\": \"Produkter\",\n    \"quick_add\": \"Hurtigt køb\",\n    \"ratio\": \"Forhold\",\n    \"regular\": \"Almindelig\",\n    \"review_count\": \"Antal anmeldelser\",\n    \"right\": \"Højre\",\n    \"row_height\": \"Rækkehøjde\",\n    \"row\": \"Række\",\n    \"seller_note\": \"Tillad note til sælger\",\n    \"shape\": \"Form\",\n    \"show_as_accordion\": \"Vis som harmonika på mobil\",\n    \"show_sale_price_first\": \"Vis udsalgspris først\",\n    \"show_tax_info\": \"Skatteoplysninger\",\n    \"show\": \"Vis\",\n    \"small\": \"Lille\",\n    \"speed\": \"Hastighed\",\n    \"statement\": \"Opgørelse\",\n    \"sticky_header\": \"Fastklæbet sidehoved\",\n    \"text_hierarchy\": \"Teksthierarki\",\n    \"text_presets\": \"Forudindstillinger for tekst\",\n    \"title\": \"Titel\",\n    \"top\": \"Top\",\n    \"type\": \"Type\",\n    \"type_preset\": \"Forudindstilling for tekst\",\n    \"underline_thickness\": \"Tykkelse på understregning\",\n    \"variant_images\": \"Variantbilleder\",\n    \"vendor\": \"Forhandler\",\n    \"vertical_gap\": \"Lodret afstand\",\n    \"vertical_offset\": \"Lodret forskydning af skygge\",\n    \"vertical_on_mobile\": \"Lodret på mobil\",\n    \"view_all_as_last_card\": \"\\\"Se alle\\\" som sidste kort\",\n    \"weight\": \"Vægt\",\n    \"wrap\": \"Ombryd\",\n    \"read_only\": \"Skrivebeskyttet\",\n    \"always_stack_buttons\": \"Stabl altid knapper\",\n    \"background_color\": \"Baggrundsfarve\",\n    \"custom_mobile_size\": \"Tilpasset størrelse på mobil\",\n    \"custom_mobile_width\": \"Tilpasset bredde på mobil\",\n    \"fixed_height\": \"Højde i pixel\",\n    \"fixed_width\": \"Bredde i pixel\",\n    \"gradient_direction\": \"Retning for toning\",\n    \"hide_padding\": \"Skjul udfyldning\",\n    \"logo_font\": \"Skrifttype for logo\",\n    \"overlay_style\": \"Format for overlejring\",\n    \"percent_height\": \"Højde i procent\",\n    \"percent_size_mobile\": \"Størrelse i procent\",\n    \"percent_size\": \"Størrelse i procent\",\n    \"percent_width\": \"Bredde i procent\",\n    \"pixel_size_mobile\": \"Størrelse i pixel\",\n    \"pixel_size\": \"Størrelse i pixel\",\n    \"shadow_opacity\": \"Skyggens opacitet\",\n    \"show_filter_label\": \"Tekstlabels for anvendte filtre\",\n    \"show_swatch_label\": \"Tekstlabels for prøver\",\n    \"size_mobile\": \"Størrelse på mobil\",\n    \"transparent_background\": \"Gennemsigtig baggrund\",\n    \"unit\": \"Enhed\",\n    \"hide_logo_on_home_page\": \"Skjul logo på startsiden\",\n    \"account\": \"Konto\",\n    \"align_baseline\": \"Juster tekstens grundlinje\",\n    \"add_discount_code\": \"Tillad rabatter i indkøbskurv\",\n    \"background_overlay\": \"Baggrundsoverlejring\",\n    \"background_media\": \"Baggrundsmedie\",\n    \"border_thickness\": \"Kanttykkelse\",\n    \"bottom_row\": \"Nederste række\",\n    \"button_text_case\": \"Bogstavstørrelse\",\n    \"card_size\": \"Kortstørrelse\",\n    \"auto_open_cart_drawer\": \"\\\"Læg i kurv\\\" åbner skuffe automatisk\",\n    \"collection_count\": \"Antal kollektioner\",\n    \"collection_title_case\": \"Bogstavstørrelse for kollektionstitel\",\n    \"custom_liquid\": \"Liquid-kode\",\n    \"default\": \"Standard\",\n    \"default_logo\": \"Standardlogo\",\n    \"divider_width\": \"Bredde på skillelinje\",\n    \"headings\": \"Overskrifter\",\n    \"horizontal_padding\": \"Vandret udfyldning\",\n    \"inverse\": \"Inverteret\",\n    \"inverse_logo\": \"Inverteret logo\",\n    \"layout_style\": \"Format\",\n    \"length\": \"Længde\",\n    \"mobile_card_size\": \"Kortstørrelse på mobil\",\n    \"mobile_pagination\": \"Sideinddeling på mobil\",\n    \"open_row_by_default\": \"Åbn række som standard\",\n    \"page\": \"Side\",\n    \"page_transition_enabled\": \"Sideovergang\",\n    \"product_and_card_title_case\": \"Bogstavstørrelse for produkt- og korttitel\",\n    \"product_title_case\": \"Bogstavstørrelse for produkttitel\",\n    \"right_padding\": \"Udfyldning til højre\",\n    \"search\": \"Søg\",\n    \"search_icon\": \"Søgeikon\",\n    \"search_position\": \"Position\",\n    \"search_row\": \"Række\",\n    \"show_author\": \"Forfatter\",\n    \"show_alignment\": \"Vis justering\",\n    \"show_count\": \"Vis antal\",\n    \"show_date\": \"Dato\",\n    \"show_pickup_availability\": \"Vis tilgængelighed for afhentning\",\n    \"show_search\": \"Vis søgning\",\n    \"text_label_case\": \"Bogstavstørrelse for tekstlabel\",\n    \"use_inverse_logo\": \"Brug inverteret logo\",\n    \"vertical_padding\": \"Lodret udfyldning\",\n    \"visibility\": \"Synlighed\",\n    \"product_corner_radius\": \"Hjørneradius for produkt\",\n    \"card_corner_radius\": \"Hjørneradius for kort\",\n    \"alignment_mobile\": \"Justering på mobil\",\n    \"animation_repeat\": \"Gentag animation\",\n    \"blurred_reflection\": \"Sløret refleksion\",\n    \"card_hover_effect\": \"Hover-effekt for kort\",\n    \"inventory_threshold\": \"Tærskel for lav lagerbeholdning\",\n    \"reflection_opacity\": \"Refleksionens opacitet\",\n    \"show_inventory_quantity\": \"Vis antal ved lav lagerbeholdning\",\n    \"transition_to_main_product\": \"Overgang fra produktkort til produktside\",\n    \"show_second_image_on_hover\": \"Vis andet billede ved hover\",\n    \"media\": \"Medier\",\n    \"product_card_carousel\": \"Vis karrusel\",\n    \"media_fit\": \"Medietilpasning\",\n    \"scroll_speed\": \"Tid til næste meddelelse\",\n    \"show_powered_by_shopify\": \"Vis \\\"Drevet af Shopify\\\"\",\n    \"gift_card_form\": \"Formular til gavekort\",\n    \"seller_note_open_by_default\": \"Åbn note til sælger som standard\",\n    \"add_to_cart_animation\": \"Læg i kurv\",\n    \"custom_link\": \"Brugerdefineret link\",\n    \"product_custom_property\": {\n      \"heading\": \"Overskrift\",\n      \"description\": \"Beskrivelse\",\n      \"key\": \"Egenskabsnavn\",\n      \"key_info\": \"Må ikke være tomt og skal være unikt for hver blok. Vises i indkøbskurven, på betalingssiden og i ordreoplysningerne.\",\n      \"placeholder_text\": \"Pladsholdertekst\",\n      \"default_heading\": \"Tilpas dit produkt\",\n      \"default_placeholder\": \"Angiv dine særlige instruktioner\",\n      \"default_property_key\": \"Særlige instruktioner\",\n      \"max_length\": \"Maks. antal tegn\",\n      \"required\": \"Input er påkrævet for at lægge varen i kurven\",\n      \"input_type\": \"Inputtype\",\n      \"input_type_text\": \"Tekst\",\n      \"input_type_checkbox\": \"Afkrydsningsfelt\",\n      \"content_settings\": \"Indstillinger for indhold\",\n      \"buyers_input\": \"Købers input\",\n      \"checkbox_label\": \"Label til afkrydsningsfelt\",\n      \"default_checkbox_label\": \"Inkluder gaveindpakning\",\n      \"heading_preset\": \"Overskrift\",\n      \"description_preset\": \"Beskrivelse\",\n      \"input_preset\": \"Input\",\n      \"checkbox_preset\": \"Label til afkrydsningsfelt\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Antal opslag\",\n    \"animation\": \"Animation\",\n    \"top_level_size\": \"Størrelse på øverste niveau\",\n    \"empty_cart_button_link\": \"Knaplink til tom indkøbskurv\",\n    \"auto_load_products\": \"Indlæs produkter automatisk ved scrolling\",\n    \"products_per_page\": \"Produkter pr. side\",\n    \"custom_mobile_media\": \"Vis andre medier på mobil\",\n    \"stack_media_on_mobile\": \"Stabl medier\",\n    \"full_frame_on_mobile\": \"Fuld bredde på mobil\",\n    \"skus\": \"SKU'er\",\n    \"variant_per_page\": \"Varianter pr. side\",\n    \"image_1\": \"Billede 1\",\n    \"image_2\": \"Billede 2\",\n    \"media_type_1\": \"Medietype\",\n    \"media_type_2\": \"Medie 2-type\",\n    \"after_image\": \"Efterbillede\",\n    \"before_image\": \"Førbillede\",\n    \"cs_slider_style\": \"Sliderstil\",\n    \"cs_slider_color\": \"Sliderfarve\",\n    \"cs_slider_inner_color\": \"Indre farve på slider\",\n    \"text_on_images\": \"Tekst på billeder\",\n    \"card_height\": \"Korthøjde\",\n    \"submenu_size\": \"Størrelse på undermenu\",\n    \"desktop_position\": \"Position på computer\",\n    \"desktop_pagination\": \"Sideinddeling på computer\",\n    \"bullseye_color\": \"Indre farve\",\n    \"hotspot_color\": \"Hotspotfarve\",\n    \"product_price_typography\": \"Typografi for produktpris\",\n    \"product_title_typography\": \"Typografi for produkttitel\",\n    \"x_position\": \"Vandret position\",\n    \"y_position\": \"Lodret position\",\n    \"enable_sticky_add_to_cart\": \"Fastgjort bjælke med 'Læg i kurv'\",\n    \"sticky_add_to_cart\": \"Fastgjort 'Læg i kurv'\",\n    \"actions_display_style\": \"Menustil\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Pil\",\n    \"auto\": \"Auto\",\n    \"banana\": \"Banan\",\n    \"bottle\": \"Flaske\",\n    \"box\": \"Boks\",\n    \"buttons\": \"Knapper\",\n    \"carrot\": \"Gulerod\",\n    \"center\": \"Centreret\",\n    \"chat_bubble\": \"Chatboble\",\n    \"clipboard\": \"Udklipsholder\",\n    \"contain\": \"Tilpas\",\n    \"counter\": \"Tæller\",\n    \"cover\": \"Dæk\",\n    \"custom\": \"Brugerdefineret\",\n    \"dairy_free\": \"Mælkefri\",\n    \"dairy\": \"Mejeri\",\n    \"default\": \"Standard\",\n    \"dropdowns\": \"Rullemenuer\",\n    \"dots\": \"Prikker\",\n    \"dryer\": \"Tørretumbler\",\n    \"end\": \"Slut\",\n    \"eye\": \"Øje\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Udfyld\",\n    \"fire\": \"Ild\",\n    \"fit\": \"Tilpas\",\n    \"full\": \"Fuld\",\n    \"full_and_page\": \"Fuld baggrund, indhold i sidebredde\",\n    \"gluten_free\": \"Glutenfri\",\n    \"heading\": \"Overskrift\",\n    \"heart\": \"Hjerte\",\n    \"horizontal\": \"Vandret\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Strygejern\",\n    \"landscape\": \"Liggende\",\n    \"large\": \"Stor\",\n    \"leaf\": \"Blad\",\n    \"leather\": \"Læder\",\n    \"lg\": \"L\",\n    \"lightning_bolt\": \"Lyn\",\n    \"link\": \"Link\",\n    \"lipstick\": \"Læbestift\",\n    \"lock\": \"Lås\",\n    \"lowercase\": \"små bogstaver\",\n    \"m\": \"M\",\n    \"map_pin\": \"Kortnål\",\n    \"medium\": \"Mellem\",\n    \"none\": \"Ingen\",\n    \"numbers\": \"Tal\",\n    \"nut_free\": \"Nøddefri\",\n    \"outline\": \"Kontur\",\n    \"page\": \"Side\",\n    \"pants\": \"Bukser\",\n    \"paw_print\": \"Poteaftryk\",\n    \"pepper\": \"Peber\",\n    \"perfume\": \"Parfume\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Fly\",\n    \"plant\": \"Plante\",\n    \"portrait\": \"Højkant\",\n    \"price_tag\": \"Prismærke\",\n    \"question_mark\": \"Spørgsmålstegn\",\n    \"recycle\": \"Genbrug\",\n    \"return\": \"Returnering\",\n    \"ruler\": \"Lineal\",\n    \"s\": \"S\",\n    \"sentence\": \"Sætning\",\n    \"serving_dish\": \"Serveringsfad\",\n    \"shirt\": \"Skjorte\",\n    \"shoe\": \"Sko\",\n    \"silhouette\": \"Silhuet\",\n    \"small\": \"Lille\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Snefnug\",\n    \"solid\": \"Massiv\",\n    \"space_between\": \"Mellemrum\",\n    \"square\": \"Firkant\",\n    \"star\": \"Stjerne\",\n    \"start\": \"Start\",\n    \"stopwatch\": \"Stopur\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Lastbil\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Store bogstaver\",\n    \"vertical\": \"Lodret\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Vask\",\n    \"circle\": \"Cirkel\",\n    \"swatches\": \"Prøver\",\n    \"full_and_page_offset_left\": \"Fuld baggrund, indhold i sidebredde, forskudt til venstre\",\n    \"full_and_page_offset_right\": \"Fuld baggrund, indhold i sidebredde, forskudt til højre\",\n    \"offset_left\": \"Forskudt til venstre\",\n    \"offset_right\": \"Forskudt til højre\",\n    \"page_center_aligned\": \"Side, centreret\",\n    \"page_left_aligned\": \"Side, venstrejusteret\",\n    \"page_right_aligned\": \"Side, højrejusteret\",\n    \"button\": \"Knap\",\n    \"caption\": \"Billedtekst\",\n    \"h1\": \"Overskrift 1\",\n    \"h2\": \"Overskrift 2\",\n    \"h3\": \"Overskrift 3\",\n    \"h4\": \"Overskrift 4\",\n    \"h5\": \"Overskrift 5\",\n    \"h6\": \"Overskrift 6\",\n    \"paragraph\": \"Afsnit\",\n    \"primary\": \"Primær\",\n    \"secondary\": \"Sekundær\",\n    \"tertiary\": \"Tertiær\",\n    \"chevron_left\": \"Chevron venstre\",\n    \"chevron_right\": \"Chevron højre\",\n    \"diamond\": \"Diamant\",\n    \"grid\": \"Gitter\",\n    \"parallelogram\": \"Parallelogram\",\n    \"rounded\": \"Afrundet\",\n    \"fit_content\": \"Tilpas\",\n    \"pills\": \"Piller\",\n    \"heavy\": \"Tyk\",\n    \"thin\": \"Tynd\",\n    \"drawer\": \"Skuffe\",\n    \"preview\": \"Forhåndsvisning\",\n    \"text\": \"Tekst\",\n    \"video_uploaded\": \"Uploadet\",\n    \"video_external_url\": \"Ekstern webadresse\",\n    \"aspect_ratio\": \"Højde-bredde-forhold\",\n    \"above_carousel\": \"Over karrusel\",\n    \"all\": \"Alle\",\n    \"always\": \"Altid\",\n    \"arrows_large\": \"Store pile\",\n    \"arrows\": \"Pile\",\n    \"balance\": \"Balance\",\n    \"bento\": \"Bento-layout\",\n    \"black\": \"Sort\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Brødtekst (stor)\",\n    \"body_regular\": \"Brødtekst (almindelig)\",\n    \"body_small\": \"Brødtekst (lille)\",\n    \"bold\": \"Fed\",\n    \"bottom_left\": \"Nederst til venstre\",\n    \"bottom_right\": \"Nederst til højre\",\n    \"bottom\": \"Bund\",\n    \"capitalize\": \"Store forbogstaver\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Karrusel\",\n    \"check_box\": \"Afkrydsningsfelt\",\n    \"chevron_large\": \"Store chevrons\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrons\",\n    \"classic\": \"Klassisk\",\n    \"collection_images\": \"Kollektionsbilleder\",\n    \"color\": \"Farve\",\n    \"complementary\": \"Supplerende\",\n    \"dissolve\": \"Opløs\",\n    \"dotted\": \"Prikket\",\n    \"editorial\": \"Redaktionel\",\n    \"extra_large\": \"Ekstra stor\",\n    \"extra_small\": \"Ekstra lille\",\n    \"featured_collections\": \"Udvalgte kollektioner\",\n    \"featured_products\": \"Udvalgte produkter\",\n    \"font_primary\": \"Primær\",\n    \"font_secondary\": \"Sekundær\",\n    \"font_tertiary\": \"Tertiær\",\n    \"forward\": \"Fremad\",\n    \"full_screen\": \"Fuld skærm\",\n    \"heading_extra_large\": \"Overskrift (ekstra stor)\",\n    \"heading_extra_small\": \"Overskrift (ekstra lille)\",\n    \"heading_large\": \"Overskrift (stor)\",\n    \"heading_regular\": \"Overskrift (almindelig)\",\n    \"heading_small\": \"Overskrift (lille)\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Billede\",\n    \"input\": \"Input\",\n    \"inside_carousel\": \"Inden i karrusel\",\n    \"inverse_large\": \"Invers stor\",\n    \"inverse\": \"Invers\",\n    \"large_arrows\": \"Store pile\",\n    \"large_chevrons\": \"Store chevrons\",\n    \"left\": \"Venstre\",\n    \"light\": \"Let\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Løs\",\n    \"media_first\": \"Medie først\",\n    \"media_second\": \"Medie som nummer to\",\n    \"modal\": \"Modus\",\n    \"narrow\": \"Smal\",\n    \"never\": \"Aldrig\",\n    \"next_to_carousel\": \"Ved siden af karrusel\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Ingen ombrydning\",\n    \"off_media\": \"Uden for medie\",\n    \"on_media\": \"På medie\",\n    \"on_scroll_up\": \"Ved scroll op\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pille\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Pæn\",\n    \"price\": \"Pris\",\n    \"primary_style\": \"Primær typografi\",\n    \"rectangle\": \"Rektangel\",\n    \"regular\": \"Almindelig\",\n    \"related\": \"Relateret\",\n    \"reverse\": \"Omvendt\",\n    \"rich_text\": \"Formateret tekst\",\n    \"right\": \"Højre\",\n    \"secondary_style\": \"Sekundær typografi\",\n    \"semibold\": \"Halvfed\",\n    \"shaded\": \"Skygge\",\n    \"show_second_image\": \"Vis andet billede\",\n    \"single\": \"Enkelt\",\n    \"slide_left\": \"Skub til venstre\",\n    \"slide_up\": \"Skub op\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stak\",\n    \"text_only\": \"Kun tekst\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturebilleder\",\n    \"tight\": \"Tæt\",\n    \"top_left\": \"Øverst til venstre\",\n    \"top_right\": \"Øverst til højre\",\n    \"top\": \"Top\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Understregning\",\n    \"video\": \"Video\",\n    \"wide\": \"Bred\",\n    \"youtube\": \"YouTube\",\n    \"down\": \"Ned\",\n    \"fixed\": \"Fast\",\n    \"gradient\": \"Gradient\",\n    \"percent\": \"Procent\",\n    \"pixel\": \"Pixel\",\n    \"up\": \"Op\",\n    \"accent\": \"Accent\",\n    \"below_image\": \"Under billede\",\n    \"body\": \"Brødtekst\",\n    \"button_primary\": \"Primær knap\",\n    \"button_secondary\": \"Sekundær knap\",\n    \"compact\": \"Kompakt\",\n    \"crop_to_fit\": \"Beskær for at tilpasse\",\n    \"hidden\": \"Skjult\",\n    \"hint\": \"Tip\",\n    \"maintain_aspect_ratio\": \"Bevar højde-bredde-forhold\",\n    \"off\": \"Fra\",\n    \"on_image\": \"På billede\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Standard\",\n    \"subheading\": \"Underoverskrift\",\n    \"blur\": \"Sløring\",\n    \"lift\": \"Løft\",\n    \"reveal\": \"Afslør\",\n    \"scale\": \"Skala\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Med hints\",\n    \"below_media\": \"Under mediet\",\n    \"full_frame\": \"Fuld ramme\",\n    \"icons\": \"Ikoner\"\n  },\n  \"content\": {\n    \"advanced\": \"Avanceret\",\n    \"background_image\": \"Baggrundsbillede\",\n    \"background_video\": \"Baggrundsvideo\",\n    \"block_size\": \"Blokstørrelse\",\n    \"borders\": \"Kanter\",\n    \"describe_the_video_for\": \"Beskriv videoen for kunder, der bruger skærmlæsere. [Få mere at vide](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Sektionsstørrelse\",\n    \"slideshow_width\": \"Bredde på dias\",\n    \"typography\": \"Typografi\",\n    \"width_is_automatically_optimized\": \"Bredden optimeres automatisk til mobil.\",\n    \"complementary_products\": \"Supplerende produkter skal opsættes ved hjælp af appen Search & Discovery. [Få mere at vide](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Kolonner optimeres automatisk til mobil\",\n    \"content_width\": \"Indholdsbredde gælder kun, når sektionsbredden er angivet til fuld bredde.\",\n    \"responsive_font_sizes\": \"Størrelser skaleres automatisk til alle skærmstørrelser\",\n    \"buttons\": \"Knapper\",\n    \"swatches\": \"Prøver\",\n    \"variant_settings\": \"Indstillinger for varianter\",\n    \"background\": \"Baggrund\",\n    \"appearance\": \"Udseende\",\n    \"arrows\": \"Pile\",\n    \"body_size\": \"Brødtekststørrelse\",\n    \"bottom_row_appearance\": \"Udseende for nederste række\",\n    \"carousel_navigation\": \"Navigation i karrusel\",\n    \"carousel_pagination\": \"Sideinddeling for karrusel\",\n    \"copyright\": \"Ophavsret\",\n    \"edit_logo_in_theme_settings\": \"Rediger logo i [temaindstillinger](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Rediger prisformatering i [temaindstillinger](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Rediger styling for varianter i [temaindstillinger](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Tilmeldinger opretter [kundeprofiler](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"For at knappen kan vises, skal Shop-kanalen være installeret og Shop Pay aktiveret. [Få mere at vide](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Skrifttyper\",\n    \"grid\": \"Gitter\",\n    \"heading_size\": \"Overskriftsstørrelse\",\n    \"image\": \"Billede\",\n    \"input\": \"Input\",\n    \"layout\": \"Layout\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Udfyldning for link\",\n    \"localization\": \"Lokalisering\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margen\",\n    \"media\": \"Medie\",\n    \"media_1\": \"Medie 1\",\n    \"media_2\": \"Medie 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout til mobil\",\n    \"padding\": \"Udfyldning\",\n    \"padding_desktop\": \"Udfyldning på computer\",\n    \"paragraph\": \"Afsnit\",\n    \"policies\": \"Politikker\",\n    \"popup\": \"Pop op-vindue\",\n    \"search\": \"Søg\",\n    \"size\": \"Størrelse\",\n    \"social_media\": \"Sociale medier\",\n    \"submit_button\": \"Send-knap\",\n    \"text_presets\": \"Forudindstillinger for tekst\",\n    \"transparent_background\": \"Gennemsigtig baggrund\",\n    \"typography_primary\": \"Primær typografi\",\n    \"typography_secondary\": \"Sekundær typografi\",\n    \"typography_tertiary\": \"Tertiær typografi\",\n    \"mobile_size\": \"Størrelse på mobil\",\n    \"cards_layout\": \"Layout for kort\",\n    \"mobile_width\": \"Bredde på mobil\",\n    \"section_layout\": \"Layout for sektion\",\n    \"width\": \"Bredde\",\n    \"visibility\": \"Synlighed\",\n    \"visible_if_collection_has_more_products\": \"Synlig, hvis kollektionen har flere produkter end vist\",\n    \"carousel\": \"Karrusel\",\n    \"colors\": \"Farver\",\n    \"collection_page\": \"Kollektionsside\",\n    \"customer_account\": \"Kundekonto\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Rediger kollektion for tom tilstand i [temaindstillinger](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Gitterlayout\",\n    \"home_page\": \"Startside\",\n    \"images\": \"Billeder\",\n    \"inverse_logo_info\": \"Bruges, når gennemsigtig baggrund for sidehoved er angivet til Invers\",\n    \"manage_customer_accounts\": \"[Administrer synlighed](/admin/settings/customer_accounts) i indstillinger for kundekonto. Ældre konti understøttes ikke.\",\n    \"manage_policies\": \"[Administrer politikker](/admin/settings/legal)\",\n    \"product_page\": \"Produktside\",\n    \"text\": \"Tekst\",\n    \"thumbnails\": \"Miniaturebilleder\",\n    \"app_required_for_ratings\": \"Der kræves en app til produktbedømmelser. [Få mere at vide](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ikon\",\n    \"manage_store_name\": \"[Administrer butiksnavn](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Viser kollektion fra overordnet sektion\",\n    \"resource_reference_collection_card_image\": \"Viser billede fra overordnet kollektion\",\n    \"resource_reference_collection_title\": \"Viser titel fra overordnet kollektion\",\n    \"resource_reference_product\": \"Opretter automatisk forbindelse til overordnet produkt\",\n    \"resource_reference_product_card\": \"Viser produkt fra overordnet sektion\",\n    \"resource_reference_product_inventory\": \"Viser lagerbeholdning fra overordnet produkt\",\n    \"resource_reference_product_price\": \"Viser pris fra overordnet produkt\",\n    \"resource_reference_product_recommendations\": \"Viser anbefalinger baseret på overordnet produkt\",\n    \"resource_reference_product_review\": \"Viser anmeldelser fra overordnet produkt\",\n    \"resource_reference_product_swatches\": \"Viser prøver fra overordnet produkt\",\n    \"resource_reference_product_title\": \"Viser titel fra overordnet produkt\",\n    \"resource_reference_product_variant_picker\": \"Viser varianter fra overordnet produkt\",\n    \"resource_reference_product_media\": \"Viser medie fra overordnet produkt\",\n    \"product_media\": \"Produktmedie\",\n    \"section_link\": \"Sektionslink\",\n    \"gift_card_form_description\": \"Kunder kan sende gavekort til en modtagers mail med en personlig besked. [Få mere at vide](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Overskrift\",\n    \"resource_reference_product_custom_property\": \"Tilføj inputfelter, der kan tilpasses, for at indsamle brugerdefinerede oplysninger, der føjes til denne ordrelinje og senere kan ses i ordreoplysningerne.\",\n    \"block_link\": \"Bloklink\",\n    \"submenu_feature\": \"Funktion for undermenu\",\n    \"cart_features\": \"Funktioner for indkøbskurv\",\n    \"email_signup\": \"Tilmelding med mail\",\n    \"mobile_media\": \"Medie til mobil\",\n    \"mobile_media_2\": \"Medie til mobil 2\",\n    \"navigation\": \"Navigation\",\n    \"popover\": \"Pop op\",\n    \"popover_position\": \"Pop op-placering\",\n    \"resource_reference_product_sku\": \"Viser SKU fra det overordnede produkt\",\n    \"content_layout\": \"Indholdslayout\",\n    \"mobile_media_1\": \"Medie til mobil 1\",\n    \"utilities\": \"Hjælpefunktioner\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Del oplysninger om dit brand med dine kunder. Beskriv et produkt, kom med meddelelser, eller byd kunder velkommen i din butik.</p>\",\n    \"bestseller_h2\": \"<h2>Bestsellere</h2>\",\n    \"bestseller_h3\": \"<h3>Bestsellere</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Vi tror på at bygge bedre</p>\",\n    \"contact_us\": \"<h2>Kontakt os</h2>\",\n    \"discover_bestsellers\": \"<p>Gå på opdagelse i de bestsellere, der har vundet vores kunders hjerter med deres perfekte blanding af funktionalitet og stil.</p>\",\n    \"everythings_starts_with_why\": \"<p>Alt, hvad vi gør, starter med hvorfor</p>\",\n    \"explore_latest_products\": \"<p>Gå på opdagelse i vores nyeste produkter.</p>\",\n    \"faq\": \"<h3>Ofte stillede spørgsmål</h3>\",\n    \"first_to_know\": \"<p>Vær den første til at få besked om nye kollektioner og særlige tilbud. </p>\",\n    \"free_returns\": \"<p>Gratis 30-dages returnering</p>\",\n    \"free_shipping_over\": \"<p>Gratis forsendelse ved køb over 50 USD</p>\",\n    \"goal_for_every_customer\": \"<p>Vores mål er, at alle kunder er fuldt ud tilfredse med deres køb. Hvis det ikke er tilfældet, så giv os besked, så gør vi vores bedste for at finde en løsning sammen med dig.</p>\",\n    \"home_to_shirts\": \"<p>Start → Skjorter</p>\",\n    \"intentional_design\": \"<h2>Gennemtænkt design</h2>\",\n    \"introducing_h2\": \"<h2><em>Vi præsenterer</em></h2>\",\n    \"latest_products\": \"<p>Vi præsenterer vores nyeste produkter, der er skabt specielt til sæsonen. Shop dine favoritter, før de er væk!</p>\",\n    \"made_local_and_global\": \"<p>Vores produkter fremstilles både lokalt og globalt. Vi udvælger omhyggeligt vores produktionspartnere for at sikre, at vores produkter er af høj kvalitet og til en fair pris.</p>\",\n    \"made_with_care_h2\": \"<h2>Fremstillet med omhu</h2>\",\n    \"made_with_care_extended\": \"<p>Denne signatur-bestseller er fremstillet med omhu og elsket af vores kunder, og den overgår alle forventninger.</p>\",\n    \"made_with_care\": \"<p>Fremstillet med omhu og elsket af vores kunder.</p>\",\n    \"make_things_better_extended\": \"<p>Vi laver ting, der fungerer bedre og holder længere. Vores produkter løser reelle problemer med et rent design og ærlige materialer.</p>\",\n    \"make_things_better\": \"<p>Vi laver ting, der fungerer bedre og holder længere.</p>\",\n    \"may_also_like\": \"<h4>Du vil måske også synes om</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nyheder</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nyheder</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nyheder</h3>\",\n    \"product_launch\": \"<p>Tag et kig bag kulisserne på vores seneste produktlancering.</p>\",\n    \"product_story\": \"<p>Kernen i ethvert produkt er en unik historie, drevet af vores passion for kvalitet og innovation. Hver vare forbedrer din hverdag og skaber glæde.</p>\",\n    \"real_people\": \"<p>Rigtige mennesker, der laver fantastiske produkter</p>\",\n    \"related_product\": \"<h3>Relaterede produkter</h3>\",\n    \"return_policy\": \"<h2>Hvad er jeres returneringspolitik?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 anmeldelser</p>\",\n    \"shipping_based_on_location\": \"<p>Forsendelse beregnes ud fra din lokation og varerne i din ordre. Du vil altid kende forsendelsesprisen, før du køber.</p>\",\n    \"shop_by_collection\": \"<h3>Shop efter kollektion</h3>\",\n    \"signature_products\": \"<h2>Vores signaturprodukt</h2>\",\n    \"styled_with\": \"<h3>Stylet med</h3>\",\n    \"subscribe\": \"<h2>Tilmeld dig vores mails</h2>\",\n    \"team_with_goal\": \"<h2>Et team med et mål</h2>\",\n    \"unable_to_accept_returns\": \"<p>Vi kan ikke tage imod returneringer på visse varer. Disse vil være tydeligt markeret før køb.</p>\",\n    \"work_quickly_to_ship\": \"<p>Vi arbejder hurtigt på at afsende din ordre så hurtigt som muligt. Når din ordre er afsendt, modtager du en mail med yderligere oplysninger. Leveringstider varierer afhængigt af din lokation.</p>\",\n    \"join_our_email_list\": \"<h2>Tilmeld dig vores mailliste</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Få eksklusive tilbud og tidlig adgang til nye produkter.</p>\",\n    \"artistry_in_action\": \"<p>Kunstnerisk udfoldelse</p>\",\n    \"authentic_materials\": \"<p>Autentiske materialer, uden kompromiser</p>\",\n    \"bold_style_recognizable\": \"<p>En markant stil, der er genkendelig overalt</p>\",\n    \"discover_elevated_design\": \"<p>Opdag raffineret design</p>\",\n    \"expert_construction_finish\": \"<p>Mesterlig konstruktion og en fejlfri finish</p>\",\n    \"made_to_last\": \"<p>Skabt til at holde</p>\",\n    \"pieces_better_with_time\": \"<p>Produkter, der kun bliver bedre med tiden</p>\",\n    \"quality_you_can_feel\": \"<h2>Kvalitet, du kan mærke</h2>\",\n    \"uncompromising_standards\": \"<p>Kompromisløse standarder</p>\",\n    \"featured_collection_h2\": \"<h2>Udvalgt kollektion</h2>\",\n    \"shop_collection\": \"<p>Opdag vores nøje udvalgte kollektion med håndplukkede favoritter, der forener stil og kvalitet.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Køb nu\",\n    \"collapsible_row\": \"Række, der kan skjules\",\n    \"heading\": \"Overskrift\",\n    \"email_signup_button_label\": \"Abonner\",\n    \"accordion_heading\": \"Overskrift til harmonika\",\n    \"contact_form_button_label\": \"Send\",\n    \"popup_link\": \"Link til pop op-vindue\",\n    \"sign_up\": \"Tilmeld dig\",\n    \"welcome_to_our_store\": \"Velkommen til vores butik\",\n    \"be_bold\": \"Vær modig.\",\n    \"shop_our_latest_arrivals\": \"Køb vores seneste nyheder!\",\n    \"are_purchases_final_sale\": \"Er nogle køb endelige?\",\n    \"care_instructions\": \"Vaskeanvisning\",\n    \"cart\": \"Indkøbskurv\",\n    \"discover_collection\": \"Udforsk kollektionen\",\n    \"fit\": \"pasform\",\n    \"how_much_for_shipping\": \"Hvad koster levering?\",\n    \"learn_more\": \"Få mere at vide\",\n    \"manufacturing\": \"Fremstilling\",\n    \"materials\": \"Materialer\",\n    \"return_policy\": \"Returneringspolitik\",\n    \"shipping\": \"Levering\",\n    \"shop_now_button_label\": \"Køb nu\",\n    \"sign_up_button_label\": \"Tilmeld\",\n    \"submit_button_label\": \"Send\",\n    \"up_the_ante\": \"Sæt\\nIndsatsen\\nOp\",\n    \"view_all_button_label\": \"Se alle\",\n    \"what_is_return_policy\": \"Hvad er jeres returneringspolitik?\",\n    \"when_will_order_arrive\": \"Hvornår modtager jeg min ordre?\",\n    \"where_are_products_made\": \"Hvor bliver jeres produkter fremstillet?\",\n    \"trending_now\": \"Populært lige nu\",\n    \"shop_the_look\": \"Shop looket\",\n    \"bestsellers\": \"Bestsellere\",\n    \"featured_collection\": \"Udvalgt kollektion\",\n    \"new_arrivals\": \"Nye varer\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Karrusellen bruges altid på mobil\",\n    \"video_alt_text\": \"Beskriv videoen for brugere af hjælpeteknologi\",\n    \"video_autoplay\": \"Videoer vil som standard være uden lyd\",\n    \"video_external\": \"Brug en webadresse fra YouTube eller Vimeo\",\n    \"carousel_hover_behavior_not_supported\": \"\\\"Karrusel\\\"-hover understøttes ikke, når typen \\\"Karrusel\\\" er valgt på sektionsniveau\",\n    \"checkout_buttons\": \"Giver købere mulighed for at betale hurtigere og kan forbedre konverteringen. [Få mere at vide](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Brugerdefineret overskrift\",\n    \"edit_presets_in_theme_settings\": \"Rediger forudindstillinger i [temaindstillinger](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Tilpas filtre med [appen Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Gitterlayout bruges til mobil\",\n    \"manage_countries_regions\": \"[Administrer lande/regioner](/admin/settings/markets)\",\n    \"manage_languages\": \"[Administrer sprog](/admin/settings/languages)\",\n    \"transparent_background\": \"Gennemgå hver skabelon, hvor gennemsigtig baggrund anvendes, for at sikre læsbarhed\",\n    \"logo_font\": \"Gælder kun, når der ikke er valgt et logo\",\n    \"aspect_ratio_adjusted\": \"Justeres i nogle layouts\",\n    \"custom_liquid\": \"Tilføj appkodestykker eller anden kode for at oprette avancerede tilpasninger. [Få mere at vide](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Bruges til anvendte filtre, rabatkoder og søgeforslag\",\n    \"applies_on_image_only\": \"Gælder kun for billeder\",\n    \"hover_effects\": \"Gælder for produkt- og kollektionskort\",\n    \"hide_logo_on_home_page_help\": \"Logoet vil forblive synligt, når fastgjort sidehoved er aktivt\",\n    \"media_type_info\": \"Funktioner hentes fra linksene i menuen\",\n    \"logo_height\": \"Påvirker kun logoet i sidehovedet\",\n    \"actions_display_style\": \"Ikoner bruges altid på mobil\"\n  },\n  \"categories\": {\n    \"basic\": \"Grundlæggende\",\n    \"collection\": \"Kollektion\",\n    \"collection_list\": \"Kollektionsliste\",\n    \"footer\": \"Sidefod\",\n    \"forms\": \"Formularer\",\n    \"header\": \"Sidehoved\",\n    \"layout\": \"Layout\",\n    \"links\": \"Links\",\n    \"product\": \"Produkt\",\n    \"product_list\": \"Udvalgt kollektion\",\n    \"banners\": \"Bannere\",\n    \"collections\": \"Kollektioner\",\n    \"custom\": \"Brugerdefineret\",\n    \"decorative\": \"Dekorativ\",\n    \"products\": \"Produkter\",\n    \"other_sections\": \"Andre\",\n    \"storytelling\": \"Storytelling\",\n    \"text\": \"Tekst\"\n  }\n}\n"
  },
  {
    "path": "locales/de.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Video laden: {{ description }}\",\n    \"sold_out\": \"Ausverkauft\",\n    \"email_signup\": {\n      \"label\": \"E-Mail\",\n      \"placeholder\": \"E-Mail-Adresse\",\n      \"success\": \"Danke für deine Anmeldung!\"\n    },\n    \"filter\": \"Filtern\",\n    \"payment_methods\": \"Zahlungsmethoden\",\n    \"contact_form\": {\n      \"name\": \"Name\",\n      \"email\": \"E-Mail-Adresse\",\n      \"phone\": \"Telefonnummer\",\n      \"comment\": \"Kommentar\",\n      \"post_success\": \"Danke, dass du uns kontaktiert hast. Wir werden uns so schnell wie möglich bei dir melden.\",\n      \"error_heading\": \"Bitte passe Folgendes an:\"\n    },\n    \"slider_label\": \"Slider\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3D-Modell abspielen\",\n    \"play_video\": \"Video abspielen\",\n    \"unit_price\": \"Grundpreis\",\n    \"country_results_count\": \"{{ count }} Ergebnisse\",\n    \"slideshow_pause\": \"Slideshow pausieren\",\n    \"slideshow_play\": \"Slideshow abspielen\",\n    \"remove_item\": \"Entferne {{ title}}\",\n    \"skip_to_text\": \"Direkt zum Inhalt\",\n    \"skip_to_product_info\": \"Zu Produktinformationen springen\",\n    \"skip_to_results_list\": \"Zur Ergebnisliste springen\",\n    \"new_window\": \"Wird in einem neuen Fenster geöffnet.\",\n    \"slideshow_next\": \"Nächste Folie\",\n    \"slideshow_previous\": \"Vorherige Folie\",\n    \"close_dialog\": \"Dialogfeld schließen\",\n    \"reset_search\": \"Suche zurücksetzen\",\n    \"search_results_count\": \"{{ count }} Suchergebnisse für „{{ query }}“ gefunden\",\n    \"search_results_no_results\": \"Keine Ergebnisse für „{{ query }}“ gefunden\",\n    \"filters\": \"Filter\",\n    \"account\": \"Konto\",\n    \"cart\": \"Warenkorb\",\n    \"cart_count\": \"Artikel im Warenkorb insgesamt\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} Filter angewandt\",\n      \"other\": \"{{ count }} Filter angewandt\"\n    },\n    \"menu\": \"Menü\",\n    \"country_region\": \"Land/Region\",\n    \"slide_status\": \"Folie {{ index }} von {{ length }}\",\n    \"scroll_to\": \"Zu {{ title }} scrollen\",\n    \"discount\": \"Rabattcode anwenden\",\n    \"discount_menu\": \"Rabattcodes\",\n    \"loading_product_recommendations\": \"Produktempfehlungen werden geladen\",\n    \"discount_applied\": \"Angewendeter Rabattcode: {{ code }}\",\n    \"inventory_status\": \"Inventarstatus\",\n    \"pause_video\": \"Video pausieren\",\n    \"find_country\": \"Land finden\",\n    \"localization_region_and_language\": \"Region- und Sprachwahl\",\n    \"decrease_quantity\": \"Menge verringern\",\n    \"increase_quantity\": \"Menge erhöhen\",\n    \"quantity\": \"Anzahl\",\n    \"rating\": \"Die Bewertung für dieses Produkts lautet {{ rating }} von 5 Sternen\",\n    \"nested_product\": \"{{ product_title }} für {{ parent_title }}\",\n    \"remove\": \"Entfernen\",\n    \"view_pricing_info\": \"Preisinformationen anzeigen\",\n    \"open_hotspot\": \"Hotspot öffnen\",\n    \"slideshow\": \"Slideshow\",\n    \"header_navigation_label\": \"Haupt-\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"In den Warenkorb legen\",\n    \"clear_all\": \"Alles löschen\",\n    \"remove\": \"Entfernen\",\n    \"view_in_your_space\": \"In deinem Bereich anzeigen\",\n    \"show_filters\": \"Filtern\",\n    \"clear\": \"Löschen\",\n    \"continue_shopping\": \"Weiter einkaufen\",\n    \"log_in_html\": \"Hast du ein Konto? <a href=\\\"{{ link }}\\\">Logge dich ein</a>, damit es beim Checkout schneller geht.\",\n    \"see_items\": {\n      \"one\": \"{{ count }} Artikel anzeigen\",\n      \"other\": \"{{ count }} Artikel anzeigen\"\n    },\n    \"view_all\": \"Alle anzeigen\",\n    \"add\": \"Hinzufügen\",\n    \"choose\": \"Auswählen\",\n    \"added\": \"Hinzugefügt\",\n    \"show_less\": \"Weniger anzeigen\",\n    \"show_more\": \"Mehr anzeigen\",\n    \"close\": \"Schließen\",\n    \"more\": \"Mehr\",\n    \"reset\": \"Zurücksetzen\",\n    \"zoom\": \"Zoomen\",\n    \"close_dialog\": \"Dialogfeld schließen\",\n    \"back\": \"Zurück\",\n    \"log_in\": \"Anmelden\",\n    \"log_out\": \"Abmelden\",\n    \"remove_discount\": \"Rabatt {{ code }} entfernen\",\n    \"enter_using_password\": \"Mit Passwort anmelden\",\n    \"submit\": \"Senden\",\n    \"enter_password\": \"Passwort eingeben\",\n    \"view_store_information\": \"Shop-Informationen anzeigen\",\n    \"apply\": \"Anwenden\",\n    \"sign_in_options\": \"Andere Anmeldeoptionen\",\n    \"sign_up\": \"Registrieren\",\n    \"open_image_in_full_screen\": \"Bild im Vollbildmodus öffnen\",\n    \"sort\": \"Sortieren\",\n    \"show_all_options\": \"Alle Optionen anzeigen\",\n    \"open\": \"Öffnen\"\n  },\n  \"content\": {\n    \"reviews\": \"Reviews\",\n    \"language\": \"Sprache\",\n    \"localization_region_and_language\": \"Region und Sprache\",\n    \"no_results_found\": \"Keine Ergebnisse gefunden\",\n    \"cart_total\": \"Gesamtbetrag im Warenkorb\",\n    \"your_cart_is_empty\": \"Dein Warenkorb ist leer\",\n    \"product_image\": \"Produktbild\",\n    \"product_information\": \"Produktinformationen\",\n    \"quantity\": \"Anzahl\",\n    \"product_total\": \"Produkt insgesamt\",\n    \"cart_estimated_total\": \"Geschätzter Gesamtbetrag\",\n    \"seller_note\": \"Besondere Anweisungen\",\n    \"cart_subtotal\": \"Zwischensumme\",\n    \"discounts\": \"Rabatte\",\n    \"discount\": \"Rabatt\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Inkl. Zollgebühren und Steuern. Rabatte und <a href=\\\"{{ link }}\\\">Versand</a> werden beim Checkout berechnet.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Inkl. Zollgebühren und Steuern. Rabatte und Versand werden beim Checkout berechnet.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Inkl. Steuern. Rabatte und <a href=\\\"{{ link }}\\\">Versand</a> werden beim Checkout berechnet.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Inkl. Steuern. Rabatte und Versand werden beim Checkout berechnet.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Inkl. Zollgebühren. Steuern, Rabatte und <a href=\\\"{{ link }}\\\">Versand</a> werden beim Checkout berechnet.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Inkl. Zollgebühren. Steuern, Rabatte und Versand werden beim Checkout berechnet.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Steuern, Rabatte und <a href=\\\"{{ link }}\\\">Versand</a> werden beim Checkout berechnet.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Steuern, Rabatte und Versand werden beim Checkout berechnet.\",\n    \"checkout\": \"Auschecken\",\n    \"cart_title\": \"Warenkorb\",\n    \"price\": \"Preis\",\n    \"price_regular\": \"Normaler Preis\",\n    \"price_compare_at\": \"Vergleichspreis\",\n    \"price_sale\": \"Angebotspreis\",\n    \"duties_and_taxes_included\": \"Inkl. Zollgebühren und Steuern.\",\n    \"duties_included\": \"Inkl. Zollgebühren.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Versand</a> wird beim Checkout berechnet.\",\n    \"taxes_included\": \"Inkl. Steuern.\",\n    \"product_badge_sold_out\": \"Ausverkauft\",\n    \"product_badge_sale\": \"Sale\",\n    \"search_input_label\": \"Suchen\",\n    \"search_input_placeholder\": \"Suchen\",\n    \"search_results\": \"Suchergebnisse\",\n    \"search_results_label\": \"Suchergebnisse\",\n    \"search_results_no_results\": \"Keine Ergebnisse für „{{ terms }}“ gefunden. Versuche es mit einem anderen Suchbegriff.\",\n    \"search_results_resource_articles\": \"Blog-Beiträge\",\n    \"search_results_resource_collections\": \"Kollektionen\",\n    \"search_results_resource_pages\": \"Seiten\",\n    \"search_results_resource_products\": \"Produkte\",\n    \"search_results_resource_queries\": \"Suchvorschläge\",\n    \"search_results_view_all\": \"Alle anzeigen\",\n    \"search_results_view_all_button\": \"Alle anzeigen\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} Produkt\",\n      \"other\": \"{{ count }} Produkte\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Standard\",\n      \"grid_fieldset\": \"Spaltenraster\",\n      \"single_item\": \"Einzeln\",\n      \"zoom_out\": \"Herauszoomen\"\n    },\n    \"recently_viewed_products\": \"Zuletzt angesehen\",\n    \"unavailable\": \"Nicht verfügbar\",\n    \"collection_placeholder\": \"Kollektionstitel\",\n    \"product_card_placeholder\": \"Produkttitel\",\n    \"product_count\": \"Produktanzahl\",\n    \"item_count\": {\n      \"one\": \"{{ count }} Artikel\",\n      \"other\": \"{{ count }} Artikel\"\n    },\n    \"errors\": \"Fehler\",\n    \"price_from\": \"Ab {{ price }}\",\n    \"search\": \"Suche\",\n    \"search_results_no_results_check_spelling\": \"Keine Ergebnisse für „{{ terms }}“ gefunden. Überprüfe die Schreibweise oder versuche es mit einer anderen Suchanfrage.\",\n    \"featured_products\": \"Vorgestellte Produkte\",\n    \"filters\": \"Filter\",\n    \"no_products_found\": \"Keine Produkte gefunden.\",\n    \"price_filter_html\": \"Der höchste Preis ist {{ price }}\",\n    \"use_fewer_filters_html\": \"Versuche, weniger Filter zu verwenden oder <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">alle Filter zu löschen</a>.\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Hallo {{ first_name }}\",\n    \"account_orders\": \"Bestellungen\",\n    \"account_profile\": \"Profil\",\n    \"blog_details_separator\": \"|\",\n    \"discount_code\": \"Rabattcode\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Inkl. Zollgebühren und Steuern. Versand wird beim Checkout berechnet.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Inkl. Zollgebühren und Steuern. Versand wird beim Checkout berechnet.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Inkl. Zollgebühren. Versand wird beim Checkout berechnet.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Inkl. Zollgebühren. Versand wird beim Checkout berechnet.\",\n    \"pickup_available_at_html\": \"Abholung bei <b>{{ location }}</b> verfügbar\",\n    \"pickup_available_in\": \"Abholung verfügbar, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Abholung derzeit nicht verfügbar\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Mehr lesen …\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Steuern und <a href=\\\"{{ link }}\\\">Versand</a> werden beim Checkout berechnet.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Steuern und Versand werden beim Checkout berechnet.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Inkl. Steuern. Versand wird beim Checkout berechnet.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Inkl. Steuern. Versand wird beim Checkout berechnet.\",\n    \"wrong_password\": \"Falsches Passwort\",\n    \"view_more_details\": \"Weitere Details anzeigen\",\n    \"inventory_low_stock\": \"Niedriger Lagerbestand\",\n    \"inventory_in_stock\": \"Auf Lager\",\n    \"inventory_out_of_stock\": \"Nicht vorrätig\",\n    \"page_placeholder_title\": \"Seitentitel\",\n    \"page_placeholder_content\": \"Wähle eine Seite aus, die angezeigt werden soll.\",\n    \"placeholder_image\": \"Platzhalterbild\",\n    \"shipping_policy\": \"Versandkosten werden beim Checkout berechnet.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} übrig\",\n      \"other\": \"{{ count }} übrig\"\n    },\n    \"powered_by\": \"Dieser Shop wird unterstützt werden von\",\n    \"store_owner_link_html\": \"Bist du der Shop-Inhaber? <a href=\\\"{{ link }}\\\">Hier einloggen</a>\",\n    \"shipping_discount_error\": \"Versandrabatte werden beim Checkout angezeigt, nachdem die Adresse hinzugefügt wurde\",\n    \"discount_code_error\": \"Rabattcode kann nicht auf den Warenkorb angewendet werden\",\n    \"recipient_form_send_to\": \"Senden an\",\n    \"recipient_form_email_label\": \"E-Mail-Adresse des Empfängers\",\n    \"recipient_form_email_label_my_email\": \"Meine E-Mail-Adresse\",\n    \"recipient_form_email_address\": \"Empfänger-E-Mail-Adresse\",\n    \"recipient_form_name_label\": \"Name des Empfängers (optional)\",\n    \"recipient_form_message\": \"Nachricht (optional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} Zeichen verwendet\",\n    \"recipient_form_send_on\": \"JJJJ-MM-TT\",\n    \"recipient_form_send_on_label\": \"Senden am (optional)\",\n    \"recipient_form_fields_visible\": \"Empfängerformularfelder sind jetzt sichtbar.\",\n    \"recipient_form_fields_hidden\": \"Empfängerformularfelder sind jetzt ausgeblendet.\",\n    \"recipient_form_error\": \"Beim Absenden des Formulars ist ein Fehler aufgetreten.\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} Zeichen verwendet\",\n    \"terms_and_policies\": \"Geschäftsbedingungen und Richtlinien\",\n    \"pagination\": {\n      \"nav_label\": \"Seitennavigation\",\n      \"previous\": \"Zurück\",\n      \"next\": \"Weiter\",\n      \"page\": \"Seite {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Volumenabhängige Preisgestaltung verfügbar\",\n    \"volume_pricing\": \"Mengenrabatte\",\n    \"at_price_each\": \"bei {{ price }}/Stück\",\n    \"each\": \"({{ price }}/Stück)\",\n    \"each_abbreviation\": \"Stück\",\n    \"price_at\": \"bei\",\n    \"price_range\": \"Preisspanne\",\n    \"item_count_cutoff\": \"Mehr als {{ count }} Artikel\",\n    \"cancel\": \"Abbrechen\",\n    \"product_subtotal\": \"Produktzwischensumme\",\n    \"quantity_per_item\": \"/Stk.\",\n    \"remove_all\": \"Alle entfernen\",\n    \"remove_all_items_confirmation\": \"Alle {{ count }} Artikel aus deinem Warenkorb entfernen?\",\n    \"remove_one_item_confirmation\": \"1 Artikel aus dem Warenkorb entfernen?\",\n    \"total_items\": \"Artikel gesamt\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Varianten insgesamt\",\n    \"view_cart\": \"Warenkorb ansehen\",\n    \"your_cart\": \"Dein Warenkorb\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 Artikel zum Warenkorb hinzugefügt\",\n      \"other\": \"{{ count }} Artikel zum Warenkorb hinzugefügt\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Verwende diesen Geschenkgutscheincode online oder verwende den QR-Code im Shop\",\n      \"title\": \"Hier ist dein {{ value }}-Gutschein für {{ shop }}!\",\n      \"subtext\": \"Dein Gutschein\",\n      \"shop_link\": \"Onlineshop besuchen\",\n      \"add_to_apple_wallet\": \"Zu Apple Wallet hinzufügen\",\n      \"qr_image_alt\": \"QR-Code – Scannen, um Gutschein einzulösen\",\n      \"copy_code\": \"Geschenkgutscheincode kopieren\",\n      \"expiration_date\": \"Gültig bis {{ expires_on }}\",\n      \"copy_code_success\": \"Code erfolgreich kopiert\",\n      \"expired\": \"Abgelaufen\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Passwort\",\n    \"search\": \"Suchen\",\n    \"product_title\": \"Produkttitel\",\n    \"collection_title\": \"Kollektionstitel\",\n    \"blog_posts\": \"Blog-Beiträge\",\n    \"blog_post_title\": \"Titel\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Ein Auszug aus dem Inhalt deines Blog-Beitrags\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"In den Warenkorb legen\",\n      \"added_to_cart\": \"Zum Warenkorb hinzugefügt\",\n      \"adding_to_cart\": \"Wird hinzugefügt...\",\n      \"add_to_cart_error\": \"Fehler beim Hinzufügen zum Warenkorb\",\n      \"sold_out\": \"Ausverkauft\",\n      \"unavailable\": \"Nicht verfügbar\",\n      \"quantity_error_max\": \"Dieser Artikel hat ein Maximum von {{ maximum }}\",\n      \"quantity\": \"Menge\",\n      \"quantity_increments\": \"In {{ increment }}er Schritten\",\n      \"quantity_minimum\": \"Mindestens {{ minimum }}\",\n      \"quantity_maximum\": \"Maximal {{ maximum }}\",\n      \"in_cart\": \"im Warenkorb\",\n      \"default_title\": \"Standardtitel\",\n      \"sticky_add_to_cart\": \"Leiste „Schnell in den Warenkorb“\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"bis\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} Kommentar\",\n        \"other\": \"{{ count }} Kommentare\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-Mail\",\n      \"error\": \"Kommentar konnte nicht gepostet werden. Bitte beachte Folgendes:\",\n      \"heading\": \"Hinterlasse einen Kommentar\",\n      \"message\": \"Nachricht\",\n      \"moderated\": \"Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.\",\n      \"name\": \"Name\",\n      \"post\": \"Kommentar posten\",\n      \"success_moderated\": \"Kommentar gepostet, Moderation ausstehend\",\n      \"success\": \"Kommentar gepostet\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/de.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Ränder\",\n    \"collapsible_row\": \"Einklappbare Zeile\",\n    \"custom_section\": \"Benutzerdefinierter Abschnitt\",\n    \"icon\": \"Symbol\",\n    \"logo_and_favicon\": \"Logo und Favicon\",\n    \"product_buy_buttons\": \"Kaufen-Schaltflächen\",\n    \"product_description\": \"Beschreibung\",\n    \"product_price\": \"Preis\",\n    \"slideshow\": \"Slideshow\",\n    \"typography\": \"Typografie\",\n    \"video\": \"Video\",\n    \"colors\": \"Farben\",\n    \"overlapping_blocks\": \"Überlappende Blöcke\",\n    \"product_variant_picker\": \"Variantenauswahl\",\n    \"slideshow_controls\": \"Slideshow-Steuerelemente\",\n    \"size\": \"Größe\",\n    \"spacing\": \"Abstand\",\n    \"product_recommendations\": \"Empfohlene Produkte\",\n    \"product_media\": \"Produktmedien\",\n    \"featured_collection\": \"Vorgestellte Kollektion\",\n    \"add_to_cart\": \"Zum Warenkorb hinzufügen\",\n    \"email_signup\": \"E-Mail-Anmeldung\",\n    \"submit_button\": \"Senden-Schaltfläche\",\n    \"grid_layout_selector\": \"Raster-Layout-Auswahl\",\n    \"image\": \"Bild\",\n    \"list_items\": \"Listenelemente\",\n    \"facets\": \"Filteroptionen\",\n    \"variants\": \"Varianten\",\n    \"styles\": \"Stile\",\n    \"product_cards\": \"Produktkarten\",\n    \"buttons\": \"Schaltflächen\",\n    \"inputs\": \"Eingaben\",\n    \"primary_button\": \"Primäre Schaltfläche\",\n    \"secondary_button\": \"Sekundäre Schaltfläche\",\n    \"popovers_and_modals\": \"Popovers und modale Fenster\",\n    \"marquee\": \"Laufschrift\",\n    \"products_carousel\": \"Vorgestellte Kollektion: Karussell\",\n    \"products_grid\": \"Vorgestellte Kollektion: Raster\",\n    \"pull_quote\": \"Hervorgehobenes Zitat\",\n    \"contact_form\": \"Kontaktformular\",\n    \"featured_product\": \"Produkt-Highlight\",\n    \"icons_with_text\": \"Symbole mit Text\",\n    \"alternating_content_rows\": \"Abwechselnde Zeilen\",\n    \"accelerated_checkout\": \"Beschleunigter Checkout\",\n    \"accordion\": \"Akkordeon-Effekt\",\n    \"accordion_row\": \"Akkordeon-Zeile\",\n    \"animations\": \"Animationen\",\n    \"announcement\": \"Ankündigung\",\n    \"announcement_bar\": \"Ankündigungsleiste\",\n    \"badges\": \"Badges\",\n    \"button\": \"Schaltfläche\",\n    \"cart\": \"Warenkorb\",\n    \"cart_items\": \"Warenkorbartikel\",\n    \"cart_products\": \"Warenkorb-Produkte\",\n    \"cart_title\": \"Warenkorb\",\n    \"collection\": \"Kollektion\",\n    \"collection_card\": \"Kollektionskarte\",\n    \"collection_columns\": \"Kollektionsspalten\",\n    \"collection_container\": \"Kollektion\",\n    \"collection_description\": \"Kollektionsbeschreibung\",\n    \"collection_image\": \"Kollektionsbild\",\n    \"collection_info\": \"Kollektionsinfos\",\n    \"collection_list\": \"Kollektionsliste\",\n    \"collections\": \"Kollektionen\",\n    \"collections_bento\": \"Kollektionsliste: Bento\",\n    \"collections_carousel\": \"Kollektionsliste: Karussell\",\n    \"collections_grid\": \"Kollektionsliste: Raster\",\n    \"content\": \"Inhalt\",\n    \"content_grid\": \"Inhaltsraster\",\n    \"details\": \"Details\",\n    \"divider\": \"Trennlinie\",\n    \"divider_section\": \"Trennlinie\",\n    \"faq_section\": \"FAQ\",\n    \"filters\": \"Filterung und Sortierung\",\n    \"follow_on_shop\": \"In Shop folgen\",\n    \"footer\": \"Fußzeile\",\n    \"footer_utilities\": \"Fußzeilen-Dienstprogramme\",\n    \"group\": \"Gruppe\",\n    \"header\": \"Header\",\n    \"heading\": \"Überschrift\",\n    \"hero\": \"Hero\",\n    \"hero_bottom_aligned\": \"Hero: Unten ausgerichtet\",\n    \"icons\": \"Symbole\",\n    \"image_with_text\": \"Bild mit Text\",\n    \"input\": \"Eingabe\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Magazin-Raster\",\n    \"media\": \"Medien\",\n    \"menu\": \"Menü\",\n    \"mobile_layout\": \"Mobiles Layout\",\n    \"payment_icons\": \"Zahlungssymbole\",\n    \"popup_link\": \"Pop-up-Link\",\n    \"predictive_search\": \"Such-Popover\",\n    \"predictive_search_empty\": \"Leere vorausschauende Suche\",\n    \"price\": \"Preis\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Produktkarte\",\n    \"product_card_media\": \"Medien\",\n    \"product_card_rendering\": \"Produktkarten-Rendering\",\n    \"product_grid\": \"Raster\",\n    \"product_grid_main\": \"Produktraster\",\n    \"product_image\": \"Produktbild\",\n    \"product_information\": \"Produktinformationen\",\n    \"product_review_stars\": \"Bewertungssterne\",\n    \"quantity\": \"Menge\",\n    \"row\": \"Zeile\",\n    \"search\": \"Suche\",\n    \"section\": \"Abschnitt\",\n    \"selected_variants\": \"Ausgewählte Varianten\",\n    \"slide\": \"Folie\",\n    \"social_media_links\": \"Social-Media-Links\",\n    \"steps\": \"Schritte\",\n    \"summary\": \"Übersicht\",\n    \"swatches\": \"Farbfelder\",\n    \"testimonials\": \"Kundenmeinungen\",\n    \"text\": \"Text\",\n    \"title\": \"Titel\",\n    \"utilities\": \"Dienstprogramme\",\n    \"video_section\": \"Video\",\n    \"spacer\": \"Abstandshalter\",\n    \"product_list\": \"Vorgestellte Kollektion\",\n    \"jumbo_text\": \"Jumbo-Text\",\n    \"search_input\": \"Sucheingabe\",\n    \"search_results\": \"Suchergebnisse\",\n    \"read_only\": \"Schreibgeschützt\",\n    \"collection_title\": \"Kollektionstitel\",\n    \"view_all_button\": \"Alle ansehen\",\n    \"custom_liquid\": \"Custom Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Blog-Beitrag\",\n    \"blog_posts\": \"Blog-Beiträge\",\n    \"caption\": \"Bildunterschrift\",\n    \"collection_card_image\": \"Bild\",\n    \"collection_links\": \"Links zu Kollektionen\",\n    \"collection_links_spotlight\": \"Links zu Kollektionen: Spotlight\",\n    \"collection_links_text\": \"Links zu Kollektionen: Text\",\n    \"collections_editorial\": \"Kollektionsliste: Editorial\",\n    \"copyright\": \"Urheberrecht\",\n    \"count\": \"Anzahl\",\n    \"drawers\": \"Drawers\",\n    \"editorial\": \"Editorial\",\n    \"editorial_jumbo_text\": \"Editorial: Jumbo-Text\",\n    \"hero_marquee\": \"Hero: Laufschrift\",\n    \"input_fields\": \"Eingabefelder\",\n    \"local_pickup\": \"Lokale Abholung\",\n    \"marquee_section\": \"Laufschrift\",\n    \"media_with_text\": \"Medien mit Text\",\n    \"page\": \"Seite\",\n    \"page_content\": \"Inhalt\",\n    \"page_layout\": \"Seitenlayout\",\n    \"policy_list\": \"Richtlinien-Links\",\n    \"prices\": \"Preise\",\n    \"products_editorial\": \"Vorgestellte Kollektion: Editorial\",\n    \"social_link\": \"Social-Media-Link\",\n    \"split_showcase\": \"Geteilte Präsentation\",\n    \"variant_pickers\": \"Variantenauswahlen\",\n    \"product_title\": \"Produkttitel\",\n    \"large_logo\": \"Großes Logo\",\n    \"product_list_button\": \"„Alle ansehen“-Schaltfläche\",\n    \"product_inventory\": \"Produktinventar\",\n    \"pills\": \"Pills\",\n    \"description\": \"Beschreibung\",\n    \"featured_image\": \"Feature-Bild\",\n    \"multicolumn\": \"Mehrspaltig\",\n    \"rich_text_section\": \"Rich Text\",\n    \"product_custom_property\": \"Besondere Anweisungen\",\n    \"blog_card\": \"Blog-Beitragskarte\",\n    \"blog_posts_grid\": \"Blog-Beiträge: Raster\",\n    \"blog_posts_carousel\": \"Blog-Beiträge: Karussell\",\n    \"blog_posts_editorial\": \"Blog-Beiträge: Editorial\",\n    \"excerpt\": \"Auszug\",\n    \"footer_password\": \"Passwort-Fußzeile\",\n    \"policies_and_links\": \"Richtlinien und Links\",\n    \"card\": \"Karte\",\n    \"carousel\": \"Karussell\",\n    \"carousel_content\": \"Karussell-Inhalt\",\n    \"quick_order_list\": \"Schnellbestellliste\",\n    \"column\": \"Spalte\",\n    \"comparison_slider\": \"Vergleichs-Slider\",\n    \"slideshow_full_frame\": \"Slideshow: Vollbild\",\n    \"slideshow_inset\": \"Slideshow: Eingerückt\",\n    \"image_compare\": \"Bildvergleich\",\n    \"subheading\": \"Unterüberschrift\",\n    \"featured_product_information\": \"Vorgestelltes Produkt\",\n    \"product_hotspots\": \"Produkt-Hotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Überlagerte Slideshow\"\n  },\n  \"settings\": {\n    \"autoplay\": \"Autoplay\",\n    \"background\": \"Hintergrund\",\n    \"border_radius\": \"Eckenradius\",\n    \"border_width\": \"Randstärke\",\n    \"borders\": \"Ränder\",\n    \"bottom_padding\": \"Padding unten\",\n    \"color\": \"Farbe\",\n    \"content_direction\": \"Inhaltsrichtung\",\n    \"content_position\": \"Inhaltsposition\",\n    \"cover_image_size\": \"Titelbildgröße\",\n    \"cover_image\": \"Titelbild\",\n    \"custom_width\": \"Benutzerdefinierte Breite\",\n    \"enable_video_looping\": \"Video-Wiederholung\",\n    \"favicon\": \"Favicon\",\n    \"heading\": \"Überschrift\",\n    \"icon\": \"Symbol\",\n    \"image_icon\": \"Bildsymbol\",\n    \"make_section_full_width\": \"Abschnitt auf volle Breite einstellen\",\n    \"overlay_opacity\": \"Deckkraft der Überlagerung\",\n    \"padding\": \"Padding\",\n    \"product\": \"Produkt\",\n    \"text\": \"Text\",\n    \"top_padding\": \"Padding oben\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alt-Text\",\n    \"video_loop\": \"Video wiederholen\",\n    \"video_position\": \"Videoposition\",\n    \"width\": \"Breite\",\n    \"alignment\": \"Ausrichtung\",\n    \"button\": \"Schaltfläche\",\n    \"colors\": \"Farben\",\n    \"content_alignment\": \"Inhaltsausrichtung\",\n    \"custom_minimum_height\": \"Benutzerdefinierte Mindesthöhe\",\n    \"font_family\": \"Schriftfamilie\",\n    \"gap\": \"Abstand\",\n    \"geometric_translate_y\": \"Geometrische Y-Verschiebung\",\n    \"image\": \"Bild\",\n    \"image_opacity\": \"Bilddeckkraft\",\n    \"image_position\": \"Bildposition\",\n    \"image_ratio\": \"Bildseitenverhältnis\",\n    \"label\": \"Etikett\",\n    \"line_height\": \"Zeilenhöhe\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Layout-Abstand\",\n    \"minimum_height\": \"Mindesthöhe\",\n    \"opacity\": \"Deckkraft\",\n    \"primary_color\": \"Links\",\n    \"section_width\": \"Abschnittsbreite\",\n    \"size\": \"Größe\",\n    \"slide_spacing\": \"Folienabstand\",\n    \"slide_width\": \"Folienbreite\",\n    \"slideshow_fullwidth\": \"Folien in voller Breite\",\n    \"style\": \"Stil\",\n    \"text_case\": \"Schreibweise\",\n    \"z_index\": \"Z-Index\",\n    \"limit_content_width\": \"Inhaltsbreite begrenzen\",\n    \"color_scheme\": \"Farbschema\",\n    \"inherit_color_scheme\": \"Farbschema übernehmen\",\n    \"product_count\": \"Produktanzahl\",\n    \"product_type\": \"Produkttyp\",\n    \"content_width\": \"Inhaltsbreite\",\n    \"collection\": \"Kollektion\",\n    \"enable_sticky_content\": \"Fixierter Inhalt auf dem Desktop\",\n    \"error_color\": \"Fehler\",\n    \"success_color\": \"Erfolg\",\n    \"primary_font\": \"Primäre Schriftart\",\n    \"secondary_font\": \"Sekundäre Schriftart\",\n    \"tertiary_font\": \"Tertiäre Schriftart\",\n    \"columns\": \"Spalten\",\n    \"items_to_show\": \"Anzuzeigende Artikel\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Typ\",\n    \"show_grid_layout_selector\": \"Rasterlayout-Auswahl anzeigen\",\n    \"view_more_show\": \"Schaltfläche „Mehr anzeigen“ anzeigen\",\n    \"image_gap\": \"Bildabstand\",\n    \"width_desktop\": \"Desktop-Breite\",\n    \"width_mobile\": \"Mobile Breite\",\n    \"border_style\": \"Randstil\",\n    \"height\": \"Höhe\",\n    \"thickness\": \"Stärke\",\n    \"stroke\": \"Strichstärke\",\n    \"filter_style\": \"Filterstil\",\n    \"swatches\": \"Farbfelder\",\n    \"quick_add_colors\": \"Quick Add-Farben\",\n    \"divider_color\": \"Trennlinie\",\n    \"border_opacity\": \"Randdeckkraft\",\n    \"hover_background\": \"Hover-Hintergrund\",\n    \"hover_borders\": \"Hover-Ränder\",\n    \"hover_text\": \"Hover-Text\",\n    \"primary_hover_color\": \"Hover-Links\",\n    \"primary_button_text\": \"Text der primären Schaltfläche\",\n    \"primary_button_background\": \"Hintergrund der primären Schaltfläche\",\n    \"primary_button_border\": \"Rand der primären Schaltfläche\",\n    \"secondary_button_text\": \"Text der sekundären Schaltfläche\",\n    \"secondary_button_background\": \"Hintergrund der sekundären Schaltfläche\",\n    \"secondary_button_border\": \"Rand der sekundären Schaltfläche\",\n    \"shadow_color\": \"Schatten\",\n    \"mobile_logo_image\": \"Mobiles Logo\",\n    \"video_autoplay\": \"Autoplay\",\n    \"video_cover_image\": \"Titelbild\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Quelle\",\n    \"card_image_height\": \"Produktbildhöhe\",\n    \"first_row_media_position\": \"Medienposition der ersten Zeile\",\n    \"accordion\": \"Akkordeon-Effekt\",\n    \"aspect_ratio\": \"Seitenverhältnis\",\n    \"auto_rotate_announcements\": \"Ankündigungen automatisch drehen\",\n    \"auto_rotate_slides\": \"Folien automatisch drehen\",\n    \"badge_corner_radius\": \"Eckenradius\",\n    \"badge_position\": \"Position auf Karten\",\n    \"badge_sale_color_scheme\": \"Sale\",\n    \"badge_sold_out_color_scheme\": \"Ausverkauft\",\n    \"behavior\": \"Verhalten\",\n    \"blur\": \"Schattenunschärfe\",\n    \"border\": \"Rand\",\n    \"bottom\": \"Unten\",\n    \"carousel_on_mobile\": \"Karussell auf Mobilgeräten\",\n    \"cart_count\": \"Warenkorbanzahl\",\n    \"cart_items\": \"Artikel im Warenkorb\",\n    \"cart_related_products\": \"Ähnliche Produkte\",\n    \"cart_title\": \"Warenkorb\",\n    \"cart_total\": \"Warenkorb-Gesamtsumme\",\n    \"cart_type\": \"Typ\",\n    \"case\": \"Schreibweise\",\n    \"checkout_buttons\": \"Schaltflächen für beschleunigten Checkout\",\n    \"collection_list\": \"Kollektionen\",\n    \"collection_templates\": \"Kollektionsvorlagen\",\n    \"content\": \"Inhalt\",\n    \"corner_radius\": \"Eckenradius\",\n    \"country_region\": \"Land/Region\",\n    \"currency_code\": \"Währungscode\",\n    \"custom_height\": \"Benutzerdefinierte Höhe\",\n    \"desktop_height\": \"Desktop-Höhe\",\n    \"direction\": \"Richtung\",\n    \"display\": \"Anzeige\",\n    \"divider_thickness\": \"Stärke der Trennlinie\",\n    \"divider\": \"Trennlinie\",\n    \"dividers\": \"Trennlinien\",\n    \"drop_shadow\": \"Schlagschatten\",\n    \"empty_state_collection_info\": \"Wird angezeigt, bevor eine Suche eingegeben wird\",\n    \"empty_state_collection\": \"Kollektion für leeren Zustand\",\n    \"enable_filtering\": \"Filter\",\n    \"enable_grid_density\": \"Rasterlayout-Steuerung\",\n    \"enable_sorting\": \"Sortierung\",\n    \"enable_zoom\": \"Zoom aktivieren\",\n    \"equal_columns\": \"Gleichmäßige Spalten\",\n    \"expand_first_group\": \"Erste Gruppe erweitern\",\n    \"extend_media_to_screen_edge\": \"Medien bis zum Bildschirmrand erweitern\",\n    \"extend_summary\": \"Bis zum Bildschirmrand erweitern\",\n    \"extra_large\": \"Extra groß\",\n    \"extra_small\": \"Extra klein\",\n    \"flag\": \"Flagge\",\n    \"font_price\": \"Schriftart für Preise\",\n    \"font_weight\": \"Schriftstärke\",\n    \"font\": \"Schriftart\",\n    \"full_width_first_image\": \"Erstes Bild in voller Breite\",\n    \"full_width_on_mobile\": \"Volle Breite auf Mobilgeräten\",\n    \"heading_preset\": \"Überschriften-Voreinstellung\",\n    \"hide_unselected_variant_media\": \"Medien für nicht ausgewählte Varianten ausblenden\",\n    \"horizontal_gap\": \"Horizontaler Abstand\",\n    \"horizontal_offset\": \"Horizontaler Schattenversatz\",\n    \"hover_behavior\": \"Hover-Verhalten\",\n    \"icon_background\": \"Symbolhintergrund\",\n    \"icons\": \"Symbole\",\n    \"image_border_radius\": \"Bildeckenradius\",\n    \"installments\": \"Raten\",\n    \"integrated_button\": \"Integrierte Schaltfläche\",\n    \"language_selector\": \"Sprachauswahl\",\n    \"large\": \"Groß\",\n    \"left_padding\": \"Padding links\",\n    \"left\": \"Links\",\n    \"letter_spacing\": \"Zeichenabstand\",\n    \"limit_media_to_screen_height\": \"Auf Bildschirmhöhe beschränken\",\n    \"limit_product_details_width\": \"Breite der Produktdetails begrenzen\",\n    \"link_preset\": \"Link-Voreinstellung\",\n    \"links\": \"Links\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Schleife\",\n    \"make_details_sticky_desktop\": \"Auf dem Desktop fixieren\",\n    \"max_width\": \"Max. Breite\",\n    \"media_height\": \"Medienhöhe\",\n    \"media_overlay\": \"Medienüberlagerung\",\n    \"media_position\": \"Medienposition\",\n    \"media_type\": \"Medientyp\",\n    \"media_width\": \"Medienbreite\",\n    \"menu\": \"Menü\",\n    \"mobile_columns\": \"Mobile Spalten\",\n    \"mobile_height\": \"Mobile Höhe\",\n    \"mobile_quick_add\": \"Quick Add für Mobilgeräte\",\n    \"motion_direction\": \"Bewegungsrichtung\",\n    \"motion\": \"Bewegung\",\n    \"movement_direction\": \"Bewegungsrichtung\",\n    \"navigation_bar_color_scheme\": \"Farbschema der Navigationsleiste\",\n    \"navigation_bar\": \"Navigationsleiste\",\n    \"navigation\": \"Navigation\",\n    \"open_new_tab\": \"Link in neuem Tab öffnen\",\n    \"overlay_color\": \"Überlagerungsfarbe\",\n    \"overlay\": \"Überlagerung\",\n    \"padding_bottom\": \"Padding unten\",\n    \"padding_horizontal\": \"Horizontales Padding\",\n    \"padding_top\": \"Padding oben\",\n    \"page_width\": \"Seitenbreite\",\n    \"pagination\": \"Seitennummerierung\",\n    \"placement\": \"Platzierung\",\n    \"position\": \"Position\",\n    \"preset\": \"Voreinstellung\",\n    \"product_cards\": \"Produktkarten\",\n    \"product_pages\": \"Produktseiten\",\n    \"product_templates\": \"Produktvorlagen\",\n    \"products\": \"Produkte\",\n    \"quick_add\": \"Quick Add\",\n    \"ratio\": \"Verhältnis\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Anzahl der Bewertungen\",\n    \"right\": \"Rechts\",\n    \"row_height\": \"Zeilenhöhe\",\n    \"row\": \"Zeile\",\n    \"seller_note\": \"Anmerkung an den Verkäufer zulassen\",\n    \"shape\": \"Form\",\n    \"show_as_accordion\": \"Auf Mobilgeräten als Akkordeon-Effekt anzeigen\",\n    \"show_sale_price_first\": \"Angebotspreis zuerst anzeigen\",\n    \"show_tax_info\": \"Steuerinformationen\",\n    \"show\": \"Anzeigen\",\n    \"small\": \"Klein\",\n    \"speed\": \"Geschwindigkeit\",\n    \"statement\": \"Abrechnung\",\n    \"sticky_header\": \"Fixierter Header\",\n    \"text_hierarchy\": \"Texthierarchie\",\n    \"text_presets\": \"Textvoreinstellungen\",\n    \"title\": \"Titel\",\n    \"top\": \"Oben\",\n    \"type_preset\": \"Textvoreinstellung\",\n    \"type\": \"Typ\",\n    \"underline_thickness\": \"Stärke der Unterstreichung\",\n    \"variant_images\": \"Variantenbilder\",\n    \"vendor\": \"Anbieter\",\n    \"vertical_gap\": \"Vertikaler Abstand\",\n    \"vertical_offset\": \"Vertikaler Schattenversatz\",\n    \"vertical_on_mobile\": \"Vertikal auf Mobilgeräten\",\n    \"view_all_as_last_card\": \"„Alle anzeigen“ als letzte Karte\",\n    \"weight\": \"Stärke\",\n    \"wrap\": \"Umbruch\",\n    \"logo_font\": \"Logo-Schriftart\",\n    \"background_color\": \"Hintergrundfarbe\",\n    \"size_mobile\": \"Mobile Größe\",\n    \"pixel_size_mobile\": \"Größe in Pixel\",\n    \"percent_size_mobile\": \"Größe in Prozent\",\n    \"unit\": \"Einheit\",\n    \"custom_mobile_size\": \"Benutzerdefinierte mobile Größe\",\n    \"fixed_height\": \"Pixelhöhe\",\n    \"fixed_width\": \"Pixelbreite\",\n    \"percent_height\": \"Höhe in Prozent\",\n    \"percent_width\": \"Breite in Prozent\",\n    \"percent_size\": \"Größe in Prozent\",\n    \"pixel_size\": \"Größe in Pixel\",\n    \"hide_padding\": \"Padding ausblenden\",\n    \"always_stack_buttons\": \"Schaltflächen immer stapeln\",\n    \"custom_mobile_width\": \"Benutzerdefinierte mobile Breite\",\n    \"shadow_opacity\": \"Schattendeckkraft\",\n    \"show_filter_label\": \"Textetiketten für angewendete Filter\",\n    \"show_swatch_label\": \"Textetiketten für Farbfelder\",\n    \"transparent_background\": \"Transparenter Hintergrund\",\n    \"read_only\": \"Schreibgeschützt\",\n    \"gradient_direction\": \"Verlaufsrichtung\",\n    \"headings\": \"Überschriften\",\n    \"overlay_style\": \"Stil der Überlagerung\",\n    \"account\": \"Konto\",\n    \"align_baseline\": \"Text an Grundlinie ausrichten\",\n    \"add_discount_code\": \"Rabatte im Warenkorb zulassen\",\n    \"background_overlay\": \"Hintergrundüberlagerung\",\n    \"background_media\": \"Hintergrundmedien\",\n    \"border_thickness\": \"Randstärke\",\n    \"bottom_row\": \"Untere Zeile\",\n    \"button_text_case\": \"Schreibweise\",\n    \"auto_open_cart_drawer\": \"„Zum Warenkorb hinzufügen“ öffnet automatisch die Warenkorb-Schublade\",\n    \"collection_count\": \"Anzahl der Kollektionen\",\n    \"custom_liquid\": \"Liquid-Code\",\n    \"default\": \"Standard\",\n    \"default_logo\": \"Standard-Logo\",\n    \"divider_width\": \"Breite der Trennlinie\",\n    \"hide_logo_on_home_page\": \"Logo auf der Startseite ausblenden\",\n    \"horizontal_padding\": \"Horizontales Padding\",\n    \"inverse\": \"Invers\",\n    \"inverse_logo\": \"Inverses Logo\",\n    \"layout_style\": \"Stil\",\n    \"length\": \"Länge\",\n    \"mobile_pagination\": \"Mobile Seitennummerierung\",\n    \"open_row_by_default\": \"Zeile standardmäßig öffnen\",\n    \"page_transition_enabled\": \"Seitenübergang\",\n    \"search\": \"Suche\",\n    \"search_icon\": \"Suchsymbol\",\n    \"search_position\": \"Position\",\n    \"search_row\": \"Zeile\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Ausrichtung anzeigen\",\n    \"show_count\": \"Anzahl anzeigen\",\n    \"show_date\": \"Datum\",\n    \"show_pickup_availability\": \"Abholverfügbarkeit anzeigen\",\n    \"show_search\": \"Suche anzeigen\",\n    \"use_inverse_logo\": \"Inverses Logo verwenden\",\n    \"vertical_padding\": \"Vertikales Padding\",\n    \"visibility\": \"Sichtbarkeit\",\n    \"product_corner_radius\": \"Eckenradius des Produkts\",\n    \"card_corner_radius\": \"Eckenradius der Karte\",\n    \"alignment_mobile\": \"Mobile Ausrichtung\",\n    \"animation_repeat\": \"Animation wiederholen\",\n    \"blurred_reflection\": \"Verschwommene Spiegelung\",\n    \"card_hover_effect\": \"Karten-Hover-Effekt\",\n    \"card_size\": \"Kartengröße\",\n    \"collection_title_case\": \"Schreibweise des Kollektionstitels\",\n    \"inventory_threshold\": \"Schwellenwert für niedrigen Lagerbestand\",\n    \"mobile_card_size\": \"Mobile Kartengröße\",\n    \"page\": \"Seite\",\n    \"product_and_card_title_case\": \"Schreibweise für Produkt- und Kartentitel\",\n    \"product_title_case\": \"Schreibweise des Produkttitels\",\n    \"reflection_opacity\": \"Deckkraft der Spiegelung\",\n    \"right_padding\": \"Padding rechts\",\n    \"show_inventory_quantity\": \"Niedrigen Lagerbestand anzeigen\",\n    \"text_label_case\": \"Schreibweise des Textetiketts\",\n    \"transition_to_main_product\": \"Übergang von Produktkarte zu Produktseite\",\n    \"show_second_image_on_hover\": \"Zweites Bild bei Hover anzeigen\",\n    \"media\": \"Medien\",\n    \"product_card_carousel\": \"Karussell anzeigen\",\n    \"media_fit\": \"Medienanpassung\",\n    \"scroll_speed\": \"Zeit bis zur nächsten Ankündigung\",\n    \"show_powered_by_shopify\": \"„Powered by Shopify“ anzeigen\",\n    \"seller_note_open_by_default\": \"Anmerkung an den Verkäufer standardmäßig öffnen\",\n    \"gift_card_form\": \"Gutscheinformular\",\n    \"add_to_cart_animation\": \"Zum Warenkorb hinzufügen\",\n    \"custom_link\": \"Benutzerdefinierter Link\",\n    \"product_custom_property\": {\n      \"heading\": \"Überschrift\",\n      \"description\": \"Beschreibung\",\n      \"key\": \"Eigenschaftsname\",\n      \"key_info\": \"Darf nicht leer sein und muss für jeden Block einzigartig sein. Wird im Warenkorb, im Checkout und in den Bestelldetails angezeigt.\",\n      \"placeholder_text\": \"Platzhaltertext\",\n      \"default_heading\": \"Passe dein Produkt an\",\n      \"default_placeholder\": \"Gib deine speziellen Anweisungen ein\",\n      \"default_property_key\": \"Spezielle Anweisungen\",\n      \"max_length\": \"Max. Zeichen\",\n      \"required\": \"Eingabe erforderlich, um Artikel zum Warenkorb hinzuzufügen\",\n      \"input_type\": \"Eingabetyp\",\n      \"input_type_text\": \"Text\",\n      \"input_type_checkbox\": \"Kontrollkästchen\",\n      \"content_settings\": \"Inhaltseinstellungen\",\n      \"buyers_input\": \"Käufereingabe\",\n      \"checkbox_label\": \"Bezeichnung des Kontrollkästchens\",\n      \"default_checkbox_label\": \"Als Geschenk verpacken\",\n      \"heading_preset\": \"Überschrift\",\n      \"description_preset\": \"Beschreibung\",\n      \"input_preset\": \"Eingabe\",\n      \"checkbox_preset\": \"Bezeichnung des Kontrollkästchens\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Anzahl der Beiträge\",\n    \"animation\": \"Animation\",\n    \"top_level_size\": \"Größe der obersten Ebene\",\n    \"empty_cart_button_link\": \"Schaltflächenlink für leeren Warenkorb\",\n    \"auto_load_products\": \"Produkte beim Scrollen automatisch laden\",\n    \"products_per_page\": \"Produkte pro Seite\",\n    \"custom_mobile_media\": \"Andere Medien auf Mobilgeräten anzeigen\",\n    \"stack_media_on_mobile\": \"Medien stapeln\",\n    \"media_type_1\": \"Medientyp\",\n    \"media_type_2\": \"Medientyp 2\",\n    \"full_frame_on_mobile\": \"Volle Breite auf Mobilgeräten\",\n    \"skus\": \"SKUs\",\n    \"variant_per_page\": \"Varianten pro Seite\",\n    \"image_1\": \"Bild 1\",\n    \"image_2\": \"Bild 2\",\n    \"after_image\": \"Nachher-Bild\",\n    \"before_image\": \"Vorher-Bild\",\n    \"cs_slider_style\": \"Slider-Stil\",\n    \"cs_slider_color\": \"Slider-Farbe\",\n    \"cs_slider_inner_color\": \"Slider-Innenfarbe\",\n    \"text_on_images\": \"Text auf Bildern\",\n    \"card_height\": \"Kartenhöhe\",\n    \"submenu_size\": \"Untermenü-Größe\",\n    \"desktop_position\": \"Desktop-Position\",\n    \"desktop_pagination\": \"Desktop-Seitennummerierung\",\n    \"bullseye_color\": \"Innere Farbe\",\n    \"hotspot_color\": \"Hotspot-Farbe\",\n    \"product_price_typography\": \"Produktpreis-Typografie\",\n    \"product_title_typography\": \"Produkttitel-Typografie\",\n    \"x_position\": \"Horizontale Position\",\n    \"y_position\": \"Vertikale Position\",\n    \"enable_sticky_add_to_cart\": \"Fixierte Leiste „In den Warenkorb“\",\n    \"sticky_add_to_cart\": \"Fixierte Schaltfläche „In den Warenkorb“\",\n    \"actions_display_style\": \"Menüstil\"\n  },\n  \"options\": {\n    \"apple\": \"Apfel\",\n    \"arrow\": \"Pfeil\",\n    \"banana\": \"Banane\",\n    \"bottle\": \"Flasche\",\n    \"box\": \"Box\",\n    \"buttons\": \"Schaltflächen\",\n    \"carrot\": \"Karotte\",\n    \"center\": \"Zentriert\",\n    \"chat_bubble\": \"Sprechblase\",\n    \"clipboard\": \"Zwischenablage\",\n    \"contain\": \"Einpassen\",\n    \"counter\": \"Zähler\",\n    \"cover\": \"Ausfüllen\",\n    \"custom\": \"Benutzerdefiniert\",\n    \"dairy_free\": \"Milchfrei\",\n    \"dairy\": \"Milchprodukte\",\n    \"dropdowns\": \"Dropdowns\",\n    \"dots\": \"Punkte\",\n    \"dryer\": \"Trockner\",\n    \"end\": \"Ende\",\n    \"eye\": \"Auge\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"Feuer\",\n    \"gluten_free\": \"Glutenfrei\",\n    \"heart\": \"Herz\",\n    \"horizontal\": \"Horizontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Bügeleisen\",\n    \"large\": \"Groß\",\n    \"leaf\": \"Blatt\",\n    \"leather\": \"Leder\",\n    \"lightning_bolt\": \"Blitz\",\n    \"lipstick\": \"Lippenstift\",\n    \"lock\": \"Schloss\",\n    \"map_pin\": \"Karten-Pin\",\n    \"medium\": \"Mittel\",\n    \"none\": \"Keine\",\n    \"numbers\": \"Zahlen\",\n    \"nut_free\": \"Nussfrei\",\n    \"pants\": \"Hose\",\n    \"paw_print\": \"Pfotenabdruck\",\n    \"pepper\": \"Pfeffer\",\n    \"perfume\": \"Parfüm\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Flugzeug\",\n    \"plant\": \"Pflanze\",\n    \"price_tag\": \"Preisschild\",\n    \"question_mark\": \"Fragezeichen\",\n    \"recycle\": \"Recyceln\",\n    \"return\": \"Rückgabe\",\n    \"ruler\": \"Lineal\",\n    \"serving_dish\": \"Servierplatte\",\n    \"shirt\": \"Hemd\",\n    \"shoe\": \"Schuh\",\n    \"silhouette\": \"Silhouette\",\n    \"small\": \"Klein\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Schneeflocke\",\n    \"star\": \"Stern\",\n    \"start\": \"Anfang\",\n    \"stopwatch\": \"Stoppuhr\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"LKW\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"vertical\": \"Vertikal\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Waschen\",\n    \"auto\": \"Automatisch\",\n    \"default\": \"Standard\",\n    \"fill\": \"Füllen\",\n    \"fit\": \"Anpassen\",\n    \"full\": \"Vollständig\",\n    \"full_and_page\": \"Vollständiger Hintergrund, seitenbreiter Inhalt\",\n    \"heading\": \"Überschrift\",\n    \"landscape\": \"Querformat\",\n    \"lg\": \"L\",\n    \"link\": \"Link\",\n    \"lowercase\": \"kleinschreibung\",\n    \"m\": \"M\",\n    \"outline\": \"Umriss\",\n    \"page\": \"Seite\",\n    \"portrait\": \"Hochformat\",\n    \"s\": \"S\",\n    \"sentence\": \"Satz\",\n    \"solid\": \"Einfarbig\",\n    \"space_between\": \"Abstand dazwischen\",\n    \"square\": \"Quadrat\",\n    \"uppercase\": \"Großbuchstaben\",\n    \"circle\": \"Kreis\",\n    \"swatches\": \"Farbfelder\",\n    \"full_and_page_offset_left\": \"Vollständiger Hintergrund, seitenbreiter Inhalt, links versetzt\",\n    \"full_and_page_offset_right\": \"Vollständiger Hintergrund, seitenbreiter Inhalt, rechts versetzt\",\n    \"offset_left\": \"Links versetzt\",\n    \"offset_right\": \"Rechts versetzt\",\n    \"page_center_aligned\": \"Seite, zentriert ausgerichtet\",\n    \"page_left_aligned\": \"Seite, links ausgerichtet\",\n    \"page_right_aligned\": \"Seite, rechts ausgerichtet\",\n    \"button\": \"Schaltfläche\",\n    \"caption\": \"Bildunterschrift\",\n    \"h1\": \"Überschrift 1\",\n    \"h2\": \"Überschrift 2\",\n    \"h3\": \"Überschrift 3\",\n    \"h4\": \"Überschrift 4\",\n    \"h5\": \"Überschrift 5\",\n    \"h6\": \"Überschrift 6\",\n    \"paragraph\": \"Absatz\",\n    \"primary\": \"Primär\",\n    \"secondary\": \"Sekundär\",\n    \"tertiary\": \"Tertiär\",\n    \"chevron_left\": \"Chevron links\",\n    \"chevron_right\": \"Chevron rechts\",\n    \"diamond\": \"Raute\",\n    \"grid\": \"Raster\",\n    \"parallelogram\": \"Parallelogramm\",\n    \"rounded\": \"Abgerundet\",\n    \"fit_content\": \"Anpassen\",\n    \"pills\": \"Pills\",\n    \"heavy\": \"Stark\",\n    \"thin\": \"Dünn\",\n    \"drawer\": \"Drawer\",\n    \"preview\": \"Vorschau\",\n    \"text\": \"Text\",\n    \"video_uploaded\": \"Hochgeladen\",\n    \"video_external_url\": \"Externe URL\",\n    \"aspect_ratio\": \"Seitenverhältnis\",\n    \"above_carousel\": \"Über dem Karussell\",\n    \"all\": \"Alle\",\n    \"always\": \"Immer\",\n    \"arrows_large\": \"Große Pfeile\",\n    \"arrows\": \"Pfeile\",\n    \"balance\": \"Ausgleich\",\n    \"bento\": \"Bento\",\n    \"black\": \"Schwarz\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Text (Groß)\",\n    \"body_regular\": \"Text (Normal)\",\n    \"body_small\": \"Text (Klein)\",\n    \"bold\": \"Fett\",\n    \"bottom_left\": \"Unten links\",\n    \"bottom_right\": \"Unten rechts\",\n    \"bottom\": \"Unten\",\n    \"capitalize\": \"Großschreiben\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Karussell\",\n    \"check_box\": \"Kontrollkästchen\",\n    \"chevron_large\": \"Große Chevrons\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrons\",\n    \"classic\": \"Klassisch\",\n    \"collection_images\": \"Kollektionsbilder\",\n    \"color\": \"Farbe\",\n    \"complementary\": \"Ergänzend\",\n    \"dissolve\": \"Auflösen\",\n    \"dotted\": \"Gepunktet\",\n    \"editorial\": \"Editorial\",\n    \"extra_large\": \"Sehr groß\",\n    \"extra_small\": \"Sehr klein\",\n    \"featured_collections\": \"Vorgestellte Kollektionen\",\n    \"featured_products\": \"Vorgestellte Produkte\",\n    \"font_primary\": \"Primär\",\n    \"font_secondary\": \"Sekundär\",\n    \"font_tertiary\": \"Tertiär\",\n    \"forward\": \"Vorwärts\",\n    \"full_screen\": \"Vollbild\",\n    \"heading_extra_large\": \"Überschrift (Sehr groß)\",\n    \"heading_extra_small\": \"Überschrift (Sehr klein)\",\n    \"heading_large\": \"Überschrift (Groß)\",\n    \"heading_regular\": \"Überschrift (Normal)\",\n    \"heading_small\": \"Überschrift (Klein)\",\n    \"icon\": \"Symbol\",\n    \"image\": \"Bild\",\n    \"input\": \"Eingabe\",\n    \"inside_carousel\": \"Innerhalb des Karussells\",\n    \"inverse_large\": \"Invers groß\",\n    \"inverse\": \"Invers\",\n    \"large_arrows\": \"Große Pfeile\",\n    \"large_chevrons\": \"Große Chevrons\",\n    \"left\": \"Links\",\n    \"light\": \"Leicht\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Locker\",\n    \"media_first\": \"Medien zuerst\",\n    \"media_second\": \"Medien an zweiter Stelle\",\n    \"modal\": \"Modal\",\n    \"narrow\": \"Schmal\",\n    \"never\": \"Nie\",\n    \"next_to_carousel\": \"Neben dem Karussell\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Kein Umbruch\",\n    \"off_media\": \"Außerhalb der Medien\",\n    \"on_media\": \"Auf den Medien\",\n    \"on_scroll_up\": \"Beim Hochscrollen\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pille\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Hübsch\",\n    \"price\": \"Preis\",\n    \"primary_style\": \"Primärer Stil\",\n    \"rectangle\": \"Rechteck\",\n    \"regular\": \"Normal\",\n    \"related\": \"Ähnlich\",\n    \"reverse\": \"Umkehren\",\n    \"rich_text\": \"Rich Text\",\n    \"right\": \"Rechts\",\n    \"secondary_style\": \"Sekundärer Stil\",\n    \"semibold\": \"Halbfett\",\n    \"shaded\": \"Schattiert\",\n    \"show_second_image\": \"Zweites Bild anzeigen\",\n    \"single\": \"Einzeln\",\n    \"slide_left\": \"Nach links schieben\",\n    \"slide_up\": \"Nach oben schieben\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stapeln\",\n    \"text_only\": \"Nur Text\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturansichten\",\n    \"tight\": \"Eng\",\n    \"top_left\": \"Oben links\",\n    \"top_right\": \"Oben rechts\",\n    \"top\": \"Oben\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Unterstrichen\",\n    \"video\": \"Video\",\n    \"wide\": \"Breit\",\n    \"youtube\": \"YouTube\",\n    \"up\": \"Nach oben\",\n    \"down\": \"Nach unten\",\n    \"gradient\": \"Farbverlauf\",\n    \"fixed\": \"Fixiert\",\n    \"pixel\": \"Pixel\",\n    \"percent\": \"Prozent\",\n    \"accent\": \"Akzent\",\n    \"below_image\": \"Unter dem Bild\",\n    \"body\": \"Text\",\n    \"button_primary\": \"Primäre Schaltfläche\",\n    \"button_secondary\": \"Sekundäre Schaltfläche\",\n    \"compact\": \"Kompakt\",\n    \"crop_to_fit\": \"Zum Einpassen zuschneiden\",\n    \"hidden\": \"Ausgeblendet\",\n    \"hint\": \"Hinweis\",\n    \"maintain_aspect_ratio\": \"Seitenverhältnis beibehalten\",\n    \"off\": \"Aus\",\n    \"on_image\": \"Auf dem Bild\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Standard\",\n    \"subheading\": \"Unterüberschrift\",\n    \"blur\": \"Weichzeichnen\",\n    \"lift\": \"Anheben\",\n    \"reveal\": \"Aufdecken\",\n    \"scale\": \"Skalieren\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Mit Hinweisen\",\n    \"below_media\": \"Unter den Medien\",\n    \"full_frame\": \"Vollbild\",\n    \"icons\": \"Symbole\"\n  },\n  \"content\": {\n    \"background_video\": \"Hintergrundvideo\",\n    \"describe_the_video_for\": \"Beschreibe das Video für Kunden, die Screenreader verwenden. [Mehr erfahren](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"Die Breite wird für Mobilgeräte automatisch optimiert.\",\n    \"advanced\": \"Erweitert\",\n    \"background_image\": \"Hintergrundbild\",\n    \"block_size\": \"Blockgröße\",\n    \"borders\": \"Ränder\",\n    \"section_size\": \"Abschnittsgröße\",\n    \"slideshow_width\": \"Folienbreite\",\n    \"typography\": \"Typografie\",\n    \"complementary_products\": \"Ergänzende Produkte müssen mit der Search & Discovery-App eingerichtet werden. [Mehr erfahren](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Spalten werden für Mobilgeräte automatisch optimiert\",\n    \"content_width\": \"Die Inhaltsbreite gilt nur, wenn die Abschnittsbreite auf die volle Breite eingestellt ist.\",\n    \"responsive_font_sizes\": \"Größen werden automatisch für alle Bildschirmgrößen skaliert\",\n    \"buttons\": \"Schaltflächen\",\n    \"swatches\": \"Farbfelder\",\n    \"variant_settings\": \"Varianteneinstellungen\",\n    \"background\": \"Hintergrund\",\n    \"appearance\": \"Erscheinungsbild\",\n    \"arrows\": \"Pfeile\",\n    \"body_size\": \"Textgröße\",\n    \"bottom_row_appearance\": \"Erscheinungsbild der unteren Zeile\",\n    \"carousel_navigation\": \"Karussell-Navigation\",\n    \"carousel_pagination\": \"Karussell-Seitennummerierung\",\n    \"copyright\": \"Urheberrecht\",\n    \"edit_logo_in_theme_settings\": \"Logo in den [Theme-Einstellungen](/editor?context=theme&category=logo%20and%20favicon) bearbeiten\",\n    \"edit_price_in_theme_settings\": \"Preisformatierung in den [Theme-Einstellungen](/editor?context=theme&category=currency%20code) bearbeiten\",\n    \"edit_variants_in_theme_settings\": \"Varianten-Styling in den [Theme-Einstellungen](/editor?context=theme&category=variants) bearbeiten\",\n    \"email_signups_create_customer_profiles\": \"Anmeldungen fügen [Kundenprofile](https://help.shopify.com/manual/customers) hinzu\",\n    \"follow_on_shop_eligiblity\": \"Damit die Schaltfläche angezeigt wird, muss der Shop-Kanal installiert und Shop Pay aktiviert sein. [Mehr erfahren](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Schriftarten\",\n    \"grid\": \"Raster\",\n    \"heading_size\": \"Überschriftengröße\",\n    \"image\": \"Bild\",\n    \"input\": \"Eingabe\",\n    \"layout\": \"Layout\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Link-Padding\",\n    \"localization\": \"Lokalisierung\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margin\",\n    \"media\": \"Medien\",\n    \"media_1\": \"Medien 1\",\n    \"media_2\": \"Medien 2\",\n    \"menu\": \"Menü\",\n    \"mobile_layout\": \"Mobiles Layout\",\n    \"padding\": \"Padding\",\n    \"padding_desktop\": \"Desktop-Padding\",\n    \"paragraph\": \"Absatz\",\n    \"policies\": \"Richtlinien\",\n    \"popup\": \"Pop-up\",\n    \"search\": \"Suche\",\n    \"size\": \"Größe\",\n    \"social_media\": \"Social Media\",\n    \"submit_button\": \"Senden-Schaltfläche\",\n    \"text_presets\": \"Textvoreinstellungen\",\n    \"transparent_background\": \"Transparenter Hintergrund\",\n    \"typography_primary\": \"Primäre Typografie\",\n    \"typography_secondary\": \"Sekundäre Typografie\",\n    \"typography_tertiary\": \"Tertiäre Typografie\",\n    \"mobile_size\": \"Mobile Größe\",\n    \"cards_layout\": \"Kartenlayout\",\n    \"section_layout\": \"Abschnittslayout\",\n    \"mobile_width\": \"Mobile Breite\",\n    \"width\": \"Breite\",\n    \"carousel\": \"Karussell\",\n    \"colors\": \"Farben\",\n    \"collection_page\": \"Kollektionsseite\",\n    \"customer_account\": \"Kundenkonto\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Leere Statuskollektion in den [Theme-Einstellungen](/editor?context=theme&category=search) bearbeiten\",\n    \"home_page\": \"Startseite\",\n    \"images\": \"Bilder\",\n    \"inverse_logo_info\": \"Wird verwendet, wenn der transparente Header-Hintergrund auf „Invers“ eingestellt ist\",\n    \"manage_customer_accounts\": \"[Sichtbarkeit verwalten](/admin/settings/customer_accounts) in den Kundenkonto-Einstellungen. Ältere Konten werden nicht unterstützt.\",\n    \"manage_policies\": \"[Richtlinien verwalten](/admin/settings/legal)\",\n    \"product_page\": \"Produktseite\",\n    \"text\": \"Text\",\n    \"thumbnails\": \"Miniaturansichten\",\n    \"visibility\": \"Sichtbarkeit\",\n    \"visible_if_collection_has_more_products\": \"Sichtbar, wenn die Kollektion mehr Produkte enthält als angezeigt werden\",\n    \"grid_layout\": \"Raster-Layout\",\n    \"app_required_for_ratings\": \"Für Produktbewertungen ist eine App erforderlich. [Mehr erfahren](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Symbol\",\n    \"manage_store_name\": \"[Shop-Namen verwalten](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Zeigt die Kollektion aus dem übergeordneten Abschnitt an\",\n    \"resource_reference_collection_card_image\": \"Zeigt das Bild aus der übergeordneten Kollektion an\",\n    \"resource_reference_collection_title\": \"Zeigt den Titel aus der übergeordneten Kollektion an\",\n    \"resource_reference_product\": \"Stellt automatisch eine Verbindung zum übergeordneten Produkt her\",\n    \"resource_reference_product_card\": \"Zeigt das Produkt aus dem übergeordneten Abschnitt an\",\n    \"resource_reference_product_inventory\": \"Zeigt das Inventar des übergeordneten Produkts an\",\n    \"resource_reference_product_media\": \"Zeigt die Medien des übergeordneten Produkts an\",\n    \"resource_reference_product_price\": \"Zeigt den Preis des übergeordneten Produkts an\",\n    \"resource_reference_product_recommendations\": \"Zeigt Empfehlungen basierend auf dem übergeordneten Produkt an\",\n    \"resource_reference_product_review\": \"Zeigt die Bewertungen des übergeordneten Produkts an\",\n    \"resource_reference_product_swatches\": \"Zeigt die Farbfelder des übergeordneten Produkts an\",\n    \"resource_reference_product_title\": \"Zeigt den Titel des übergeordneten Produkts an\",\n    \"resource_reference_product_variant_picker\": \"Zeigt die Varianten des übergeordneten Produkts an\",\n    \"product_media\": \"Produktmedien\",\n    \"section_link\": \"Abschnittslink\",\n    \"gift_card_form_description\": \"Kunden können Gutscheine mit einer persönlichen Nachricht an die E-Mail-Adresse eines Empfängers senden. [Mehr erfahren](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Überschrift\",\n    \"resource_reference_product_custom_property\": \"Füge anpassbare Eingabefelder hinzu, um benutzerdefinierte Informationen zu erfassen, die dieser Bestellposition hinzugefügt und später in den Bestelldetails angezeigt werden.\",\n    \"block_link\": \"Block-Link\",\n    \"submenu_feature\": \"Untermenüfunktion\",\n    \"cart_features\": \"Warenkorbfunktionen\",\n    \"email_signup\": \"E-Mail-Anmeldung\",\n    \"mobile_media\": \"Mobile Medien\",\n    \"mobile_media_2\": \"Mobile Medien 2\",\n    \"navigation\": \"Navigation\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Popover-Position\",\n    \"resource_reference_product_sku\": \"Zeigt die SKU vom Hauptprodukt an\",\n    \"content_layout\": \"Inhaltslayout\",\n    \"mobile_media_1\": \"Mobile Medien 1\",\n    \"utilities\": \"Dienstprogramme\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Teile Informationen über deine Marke mit deinen Kunden. Beschreibe ein Produkt, mache Ankündigungen oder heiße Kunden in deinem Shop willkommen.</p>\",\n    \"bestseller_h2\": \"<h2>Bestseller</h2>\",\n    \"bestseller_h3\": \"<h3>Bestseller</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Wir glauben daran, Besseres zu schaffen</p>\",\n    \"contact_us\": \"<h2>Kontaktiere uns</h2>\",\n    \"discover_bestsellers\": \"<p>Entdecke die Bestseller, die die Herzen unserer Kunden mit ihrer perfekten Mischung aus Funktionalität und Stil erobert haben.</p>\",\n    \"everythings_starts_with_why\": \"<p>Alles, was wir tun, beginnt mit dem Warum</p>\",\n    \"explore_latest_products\": \"<p>Entdecke unsere neuesten Produkte.</p>\",\n    \"faq\": \"<h3>Häufig gestellte Fragen</h3>\",\n    \"first_to_know\": \"<p>Erfahre als Erster von neuen Kollektionen und Sonderangeboten. </p>\",\n    \"free_returns\": \"<p>Kostenlose 30-Tage-Rückgabe</p>\",\n    \"free_shipping_over\": \"<p>Kostenloser Versand ab 50 $</p>\",\n    \"goal_for_every_customer\": \"<p>Unser Ziel ist es, dass jeder Kunde mit seinem Kauf rundum zufrieden ist. Wenn dies nicht der Fall ist, lass es uns wissen und wir werden unser Bestes tun, um gemeinsam mit dir eine Lösung zu finden.</p>\",\n    \"home_to_shirts\": \"<p>Startseite → Hemden</p>\",\n    \"intentional_design\": \"<h2>Bewusstes Design</h2>\",\n    \"introducing_h2\": \"<h2><em>Wir stellen vor</em></h2>\",\n    \"latest_products\": \"<p>Wir stellen unsere neuesten Produkte vor, die speziell für diese Saison hergestellt wurden. Kaufe deine Favoriten, bevor sie vergriffen sind!</p>\",\n    \"made_local_and_global\": \"<p>Unsere Produkte werden sowohl lokal als auch global hergestellt. Wir wählen unsere Herstellungspartner sorgfältig aus, um sicherzustellen, dass unsere Produkte von hoher Qualität und zu einem fairen Preis sind.</p>\",\n    \"made_with_care_h2\": \"<h2>Mit Sorgfalt hergestellt</h2>\",\n    \"made_with_care_extended\": \"<p>Mit Sorgfalt hergestellt und von unseren Kunden bedingungslos geliebt, übertrifft dieser unverkennbare Bestseller alle Erwartungen.</p>\",\n    \"made_with_care\": \"<p>Mit Sorgfalt hergestellt und von unseren Kunden bedingungslos geliebt.</p>\",\n    \"make_things_better_extended\": \"<p>Wir stellen Dinge her, die besser funktionieren und länger halten. Unsere Produkte lösen echte Probleme mit klarem Design und ehrlichen Materialien.</p>\",\n    \"make_things_better\": \"<p>Wir stellen Dinge her, die besser funktionieren und länger halten.</p>\",\n    \"may_also_like\": \"<h4>Das könnte dir auch gefallen</h4>\",\n    \"new_arrivals_h1\": \"<h1>Neu eingetroffen</h1>\",\n    \"new_arrivals_h2\": \"<h2>Neu eingetroffen</h2>\",\n    \"new_arrivals_h3\": \"<h3>Neu eingetroffen</h3>\",\n    \"product_launch\": \"<p>Wirf einen Blick hinter die Kulissen unserer neuesten Produkteinführung.</p>\",\n    \"product_story\": \"<p>Im Herzen jedes Produkts liegt eine einzigartige Geschichte, angetrieben von unserer Leidenschaft für Qualität und Innovation. Jeder Artikel bereichert deinen Alltag und weckt Freude.</p>\",\n    \"real_people\": \"<p>Echte Menschen, die großartige Produkte herstellen</p>\",\n    \"related_product\": \"<h3>Ähnliche Produkte</h3>\",\n    \"return_policy\": \"<h2>Wie lauten die Rückgaberichtlinien?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 Bewertungen</p>\",\n    \"shipping_based_on_location\": \"<p>Der Versand wird basierend auf deinem Standort und den Artikeln in deiner Bestellung berechnet. Du erfährst den Versandpreis immer, bevor du den Kauf abschließt.</p>\",\n    \"shop_by_collection\": \"<h3>Nach Kollektion einkaufen</h3>\",\n    \"signature_products\": \"<h2>Unser unverkennbares Produkt</h2>\",\n    \"styled_with\": \"<h3>Kombiniert mit</h3>\",\n    \"subscribe\": \"<h2>Abonniere unsere E-Mails</h2>\",\n    \"team_with_goal\": \"<h2>Ein Team mit einem Ziel</h2>\",\n    \"unable_to_accept_returns\": \"<p>Bei bestimmten Artikeln können wir keine Rückgaben akzeptieren. Diese werden vor dem Kauf sorgfältig gekennzeichnet.</p>\",\n    \"work_quickly_to_ship\": \"<p>Wir werden deine Bestellung so schnell wie möglich versenden. Sobald deine Bestellung versandt wurde, erhältst du eine E-Mail mit weiteren Informationen. Die Lieferzeiten variieren je nach deinem Standort.</p>\",\n    \"join_our_email_list\": \"<h2>Trag dich in unsere E-Mail-Liste ein</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Erhalte exklusive Angebote und frühzeitigen Zugriff auf neue Produkte.</p>\",\n    \"artistry_in_action\": \"<p>Kunstfertigkeit in Aktion </p>\",\n    \"authentic_materials\": \"<p>Authentische Materialien, keine Kompromisse </p>\",\n    \"bold_style_recognizable\": \"<p>Ein markanter Stil, der überall wiedererkannt wird</p>\",\n    \"discover_elevated_design\": \"<p>Entdecke anspruchsvolles Design </p>\",\n    \"expert_construction_finish\": \"<p>Meisterhafte Konstruktion und ein makelloses Finish</p>\",\n    \"made_to_last\": \"<p>Für die Ewigkeit gemacht </p>\",\n    \"pieces_better_with_time\": \"<p>Stücke, die mit der Zeit nur noch schöner werden </p>\",\n    \"quality_you_can_feel\": \"<h2>Qualität, die du spüren kannst</h2>\",\n    \"uncompromising_standards\": \"<p>Kompromisslose Standards </p>\",\n    \"featured_collection_h2\": \"<h2>Vorgestellte Kollektion</h2>\",\n    \"shop_collection\": \"<p>Entdecke unsere kuratierte Kollektion mit handverlesenen Favoriten, die Stil und Qualität vereinen.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"Einklappbare Zeile\",\n    \"button_label\": \"Jetzt einkaufen\",\n    \"heading\": \"Überschrift\",\n    \"email_signup_button_label\": \"Abonnieren\",\n    \"accordion_heading\": \"Akkordeon-Überschrift\",\n    \"contact_form_button_label\": \"Senden\",\n    \"popup_link\": \"Pop-up-Link\",\n    \"sign_up\": \"Registrieren\",\n    \"welcome_to_our_store\": \"Willkommen in unserem Shop\",\n    \"be_bold\": \"Sei mutig.\",\n    \"shop_our_latest_arrivals\": \"Kaufe unsere Neuheiten!\",\n    \"are_purchases_final_sale\": \"Sind Käufe vom Umtausch ausgeschlossen?\",\n    \"care_instructions\": \"Pflegehinweise\",\n    \"cart\": \"Warenkorb\",\n    \"discover_collection\": \"Entdecke die Kollektion\",\n    \"fit\": \"Passform\",\n    \"how_much_for_shipping\": \"Wie hoch sind die Versandkosten?\",\n    \"learn_more\": \"Mehr Informationen\",\n    \"manufacturing\": \"Herstellung\",\n    \"materials\": \"Materialien\",\n    \"return_policy\": \"Rückgabebedingungen\",\n    \"shipping\": \"Versand\",\n    \"shop_now_button_label\": \"Jetzt einkaufen\",\n    \"sign_up_button_label\": \"Registrieren\",\n    \"submit_button_label\": \"Senden\",\n    \"up_the_ante\": \"Erhöhe\\nden\\nEinsatz\",\n    \"view_all_button_label\": \"Alle anzeigen\",\n    \"what_is_return_policy\": \"Wie lauten die Rückgabebedingungen?\",\n    \"when_will_order_arrive\": \"Wann erhalte ich meine Bestellung?\",\n    \"where_are_products_made\": \"Wo werden deine Produkte hergestellt?\",\n    \"trending_now\": \"Aktuelle Trends\",\n    \"shop_the_look\": \"Look kaufen\",\n    \"bestsellers\": \"Bestseller\",\n    \"featured_collection\": \"Vorgestellte Kollektion\",\n    \"new_arrivals\": \"Neuheiten\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Beschreibe das Video für Benutzer von Hilfstechnologien\",\n    \"video_autoplay\": \"Videos werden standardmäßig stummgeschaltet\",\n    \"video_external\": \"Verwende eine YouTube- oder Vimeo-URL\",\n    \"carousel_layout_on_mobile\": \"Carousel wird auf Mobilgeräten immer verwendet\",\n    \"carousel_hover_behavior_not_supported\": \"Der „Karussell“-Hover-Effekt wird nicht unterstützt, wenn auf Abschnittsebene der Typ „Karussell“ ausgewählt ist\",\n    \"checkout_buttons\": \"Ermöglicht Käufern einen schnelleren Checkout und kann die Conversion verbessern. [Mehr erfahren](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Benutzerdefinierte Überschrift\",\n    \"edit_presets_in_theme_settings\": \"Voreinstellungen in den [Theme-Einstellungen](/editor?context=theme&category=typography) bearbeiten\",\n    \"enable_filtering_info\": \"Filter mit der [Search & Discovery-App](https://help.shopify.com/manual/online-store/search-and-discovery/filters) anpassen\",\n    \"grid_layout_on_mobile\": \"Auf Mobilgeräten wird ein Raster-Layout verwendet\",\n    \"manage_countries_regions\": \"[Länder/Regionen verwalten](/admin/settings/markets)\",\n    \"manage_languages\": \"[Sprachen verwalten](/admin/settings/languages)\",\n    \"transparent_background\": \"Überprüfe jede Vorlage, bei der ein transparenter Hintergrund angewendet wird, auf Lesbarkeit\",\n    \"logo_font\": \"Gilt nur, wenn kein Logo ausgewählt ist\",\n    \"aspect_ratio_adjusted\": \"In einigen Layouts angepasst\",\n    \"custom_liquid\": \"Füge App-Snippets oder anderen Code hinzu, um erweiterte Anpassungen zu erstellen. [Mehr erfahren](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"Gilt nur für Bilder\",\n    \"hover_effects\": \"Gilt für Produkt- und Kollektionskarten\",\n    \"pills_usage\": \"Wird für angewendete Filter, Rabattcodes und Suchvorschläge verwendet\",\n    \"hide_logo_on_home_page_help\": \"Das Logo bleibt sichtbar, wenn der fixierte Header aktiv ist\",\n    \"media_type_info\": \"Die Funktionen werden aus deinen Menü-Links übernommen\",\n    \"logo_height\": \"Betrifft nur das Header-Logo\",\n    \"actions_display_style\": \"Auf Mobilgeräten werden immer Symbole verwendet\"\n  },\n  \"categories\": {\n    \"product_list\": \"Vorgestellte Kollektion\",\n    \"basic\": \"Grundlagen\",\n    \"collection\": \"Kollektion\",\n    \"collection_list\": \"Kollektionsliste\",\n    \"footer\": \"Fußzeile\",\n    \"forms\": \"Formulare\",\n    \"header\": \"Header\",\n    \"layout\": \"Layout\",\n    \"links\": \"Links\",\n    \"product\": \"Produkt\",\n    \"banners\": \"Banner\",\n    \"collections\": \"Kollektionen\",\n    \"custom\": \"Benutzerdefiniert\",\n    \"decorative\": \"Dekorativ\",\n    \"products\": \"Produkte\",\n    \"other_sections\": \"Sonstige\",\n    \"storytelling\": \"Storytelling\",\n    \"text\": \"Text\"\n  }\n}\n"
  },
  {
    "path": "locales/el.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Φόρτωση βίντεο: {{ description }}\",\n    \"sold_out\": \"Εξαντλήθηκε\",\n    \"email_signup\": {\n      \"label\": \"Email\",\n      \"placeholder\": \"Διεύθυνση email\",\n      \"success\": \"Ευχαριστούμε για την εγγραφή!\"\n    },\n    \"filter\": \"Φιλτράρισμα\",\n    \"payment_methods\": \"Μέθοδοι πληρωμής\",\n    \"contact_form\": {\n      \"name\": \"Όνομα\",\n      \"email\": \"Email\",\n      \"phone\": \"Τηλέφωνο\",\n      \"comment\": \"Σχόλιο\",\n      \"post_success\": \"Ευχαριστούμε που επικοινωνήσατε μαζί μας. Θα σας απαντήσουμε το συντομότερο δυνατόν.\",\n      \"error_heading\": \"Προσαρμόστε τα παρακάτω:\"\n    },\n    \"slider_label\": \"Ρυθμιστικό\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Αναπαραγωγή μοντέλου 3D\",\n    \"play_video\": \"Αναπαραγωγή βίντεο\",\n    \"unit_price\": \"Τιμή μονάδας\",\n    \"country_results_count\": \"{{ count }} αποτελέσματα\",\n    \"slideshow_pause\": \"Παύση παρουσίασης\",\n    \"slideshow_play\": \"Αναπαραγωγή παρουσίασης\",\n    \"remove_item\": \"Κατάργηση {{ title}}\",\n    \"skip_to_text\": \"Απευθείας μετάβαση στο περιεχόμενο\",\n    \"skip_to_product_info\": \"Μετάβαση στις πληροφορίες προϊόντος\",\n    \"skip_to_results_list\": \"Μεταβείτε στη λίστα αποτελεσμάτων\",\n    \"new_window\": \"Ανοίγει σε νέο παράθυρο.\",\n    \"close_dialog\": \"Κλείσιμο διαλόγου\",\n    \"reset_search\": \"Επαναφορά αναζήτησης\",\n    \"search_results_count\": \"{{ count }} αποτελέσματα αναζήτησης βρέθηκαν για \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Δεν βρέθηκαν αποτελέσματα για \\\"{{ query }}\\\"\",\n    \"slideshow_next\": \"Επόμενη διαφάνεια\",\n    \"slideshow_previous\": \"Προηγούμενη διαφάνεια\",\n    \"filters\": \"Φίλτρα\",\n    \"account\": \"Λογαριασμός\",\n    \"cart\": \"Καλάθι\",\n    \"cart_count\": \"Σύνολο προϊόντων στο καλάθι\",\n    \"filter_count\": {\n      \"one\": \"Εφαρμόστηκε {{ count }} φίλτρο\",\n      \"other\": \"Εφαρμόστηκαν {{ count }} φίλτρα\"\n    },\n    \"menu\": \"Μενού\",\n    \"country_region\": \"Χώρα/Περιοχή\",\n    \"slide_status\": \"Διαφάνεια {{ index }} από {{ length }}\",\n    \"scroll_to\": \"Κύλιση προς το {{ title }}\",\n    \"loading_product_recommendations\": \"Φόρτωση συστάσεων προϊόντων\",\n    \"discount\": \"Εφαρμογή κωδικού έκπτωσης\",\n    \"discount_applied\": \"Εφαρμόστηκε ο κωδικός έκπτωση: {{ code }}\",\n    \"inventory_status\": \"Κατάσταση αποθέματος\",\n    \"pause_video\": \"Παύση του βίντεο\",\n    \"localization_region_and_language\": \"Επιλέξτε περιοχή και γλώσσα\",\n    \"find_country\": \"Εύρεση χώρας\",\n    \"decrease_quantity\": \"Μείωση ποσότητας\",\n    \"increase_quantity\": \"Αύξηση ποσότητας\",\n    \"quantity\": \"Ποσότητα\",\n    \"rating\": \"Η βαθμολογία αυτού του προϊόντος είναι {{ rating }} στα 5\",\n    \"nested_product\": \"{{ product_title }} για {{ parent_title }}\",\n    \"discount_menu\": \"Κωδικοί έκπτωσης\",\n    \"remove\": \"Κατάργηση\",\n    \"view_pricing_info\": \"Προβολή πληροφοριών τιμολόγησης\",\n    \"open_hotspot\": \"Άνοιγμα hotspot\",\n    \"slideshow\": \"Προβολή διαφανειών\",\n    \"header_navigation_label\": \"Κύρια\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Προσθήκη στο καλάθι\",\n    \"clear_all\": \"Διαγραφή όλων\",\n    \"remove\": \"Κατάργηση\",\n    \"view_in_your_space\": \"Προβολή στον χώρο σας\",\n    \"show_filters\": \"Φιλτράρισμα\",\n    \"clear\": \"Διαγραφή\",\n    \"continue_shopping\": \"Συνέχιση αγορών\",\n    \"log_in_html\": \"Έχετε λογαριασμό; <a href=\\\"{{ link }}\\\">Συνδεθείτε</a> για ταχύτερη ολοκλήρωση των αγορών σας.\",\n    \"see_items\": {\n      \"one\": \"Δείτε {{ count }} στοιχείο\",\n      \"other\": \"Δείτε {{ count }} στοιχεία\"\n    },\n    \"view_all\": \"Προβολή όλων\",\n    \"add\": \"Προσθήκη\",\n    \"choose\": \"Επιλέξτε\",\n    \"added\": \"Προστέθηκε\",\n    \"show_less\": \"Εμφάνιση λιγότερων\",\n    \"show_more\": \"Εμφάνιση περισσότερων\",\n    \"close\": \"Κλείσιμο\",\n    \"more\": \"Περισσότερα\",\n    \"zoom\": \"Μεγέθυνση\",\n    \"close_dialog\": \"Κλείσιμο διαλόγου\",\n    \"reset\": \"Επαναφορά\",\n    \"enter_using_password\": \"Είσοδος με τη χρήση κωδικού πρόσβασης\",\n    \"submit\": \"Υποβολή\",\n    \"enter_password\": \"Εισαγάγετε κωδικό πρόσβασης\",\n    \"back\": \"Πίσω\",\n    \"log_in\": \"Σύνδεση\",\n    \"log_out\": \"Αποσύνδεση\",\n    \"remove_discount\": \"Κατάργηση κωδικού έκπτωσης {{ code }}\",\n    \"view_store_information\": \"Προβολή πληροφοριών καταστήματος\",\n    \"apply\": \"Εφαρμογή\",\n    \"sign_in_options\": \"Άλλες επιλογές σύνδεσης\",\n    \"sign_up\": \"Εγγραφή\",\n    \"open_image_in_full_screen\": \"Άνοιγμα εικόνας σε πλήρη οθόνη\",\n    \"sort\": \"Ταξινόμηση\",\n    \"show_all_options\": \"Εμφάνιση όλων των επιλογών\",\n    \"open\": \"Σε εξέλιξη\"\n  },\n  \"content\": {\n    \"reviews\": \"κριτικές\",\n    \"no_results_found\": \"Δεν βρέθηκαν αποτελέσματα\",\n    \"language\": \"Γλώσσα\",\n    \"localization_region_and_language\": \"Περιοχή και γλώσσα\",\n    \"cart_total\": \"Συνολικό ποσό στο καλάθι\",\n    \"your_cart_is_empty\": \"Το καλάθι σας είναι κενό\",\n    \"product_image\": \"Εικόνα προϊόντος\",\n    \"product_information\": \"Πληροφορίες προϊόντος\",\n    \"quantity\": \"Ποσότητα\",\n    \"product_total\": \"Συνολική ποσότητα για το προϊόν\",\n    \"cart_estimated_total\": \"Εκτιμώμενο σύνολο\",\n    \"seller_note\": \"Ειδικές οδηγίες\",\n    \"cart_subtotal\": \"Υποσύνολο\",\n    \"discounts\": \"Εκπτώσεις\",\n    \"discount\": \"Έκπτωση\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Οι δασμοί και οι φόροι συμπεριλαμβάνονται. Οι εκπτώσεις και τα έξοδα <a href=\\\"{{ link }}\\\">αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Οι δασμοί και οι φόροι συμπεριλαμβάνονται. Οι εκπτώσεις και τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Οι φόροι συμπεριλαμβάνονται. Οι εκπτώσεις και τα έξοδα <a href=\\\"{{ link }}\\\">αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Οι φόροι συμπεριλαμβάνονται. Οι εκπτώσεις και τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Οι δασμοί συμπεριλαμβάνονται. Οι φόροι, οι εκπτώσεις και τα έξοδα <a href=\\\"{{ link }}\\\">αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Οι δασμοί συμπεριλαμβάνονται. Οι φόροι, οι εκπτώσεις και τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Οι φόροι, οι εκπτώσεις και τα έξοδα <a href=\\\"{{ link }}\\\">αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Οι φόροι, οι εκπτώσεις και τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"checkout\": \"Ολοκλήρωση αγοράς\",\n    \"cart_title\": \"Καλάθι\",\n    \"price\": \"Τιμή\",\n    \"price_regular\": \"Κανονική τιμή\",\n    \"price_compare_at\": \"Σύγκριση σε τιμή\",\n    \"price_sale\": \"Τιμή έκπτωσης\",\n    \"duties_and_taxes_included\": \"Οι δασμοί και οι φόροι συμπεριλαμβάνονται.\",\n    \"duties_included\": \"Οι δασμοί συμπεριλαμβάνονται.\",\n    \"shipping_policy_html\": \"Τα <a href=\\\"{{ link }}\\\">έξοδα αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_included\": \"Οι φόροι συμπεριλαμβάνονται.\",\n    \"product_badge_sold_out\": \"Εξαντλήθηκε\",\n    \"product_badge_sale\": \"Έκπτωση\",\n    \"search_input_label\": \"Αναζήτηση\",\n    \"search_input_placeholder\": \"Αναζήτηση\",\n    \"search_results\": \"Αποτελέσματα αναζήτησης\",\n    \"search_results_label\": \"Αποτελέσματα αναζήτησης\",\n    \"search_results_no_results\": \"Δεν βρέθηκαν αποτελέσματα για \\\"{{ terms }}\\\". Δοκιμάστε άλλη αναζήτηση.\",\n    \"search_results_resource_articles\": \"Αναρτήσεις ιστολογίου\",\n    \"search_results_resource_collections\": \"Συλλογές\",\n    \"search_results_resource_pages\": \"Σελίδες\",\n    \"search_results_resource_products\": \"Προϊόντα\",\n    \"search_results_resource_queries\": \"Προτάσεις αναζήτησης\",\n    \"search_results_view_all\": \"Προβολή όλων\",\n    \"search_results_view_all_button\": \"Προβολή όλων\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} προϊόν\",\n      \"other\": \"{{ count }} προϊόντα\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Προεπιλογή\",\n      \"grid_fieldset\": \"Column grid\",\n      \"single_item\": \"Ενιαία\",\n      \"zoom_out\": \"Σμίκρυνση\"\n    },\n    \"unavailable\": \"Μη διαθέσιμο\",\n    \"recently_viewed_products\": \"Πρόσφατα προβαλλόμενες\",\n    \"collection_placeholder\": \"Τίτλος συλλογής\",\n    \"product_card_placeholder\": \"Τίτλος προϊόντος\",\n    \"product_count\": \"Αριθμός προϊόντων\",\n    \"item_count\": {\n      \"one\": \"{{ count }} προϊόν\",\n      \"other\": \"{{ count }} προϊόντα\"\n    },\n    \"errors\": \"Σφάλματα\",\n    \"price_from\": \"Από {{ price }}\",\n    \"search\": \"Αναζήτηση\",\n    \"search_results_no_results_check_spelling\": \"Δεν βρέθηκαν αποτελέσματα για \\\"{{ terms }}\\\". Ελέγξτε την ορθογραφία ή χρησιμοποιήστε άλλη λέξη ή φράση.\",\n    \"featured_products\": \"Επιλεγμένα προϊόντα\",\n    \"no_products_found\": \"Δεν βρέθηκαν προϊόντα.\",\n    \"use_fewer_filters_html\": \"Δοκιμάστε να χρησιμοποιήσετε λιγότερα φίλτρα ή <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">καταργήστε όλα τα φίλτρα</a>.\",\n    \"filters\": \"Φίλτρα\",\n    \"price_filter_html\": \"Η υψηλότερη τιμή είναι {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Διαβάστε περισσότερα...\",\n    \"wrong_password\": \"Λανθασμένος κωδικός πρόσβασης\",\n    \"account_title\": \"Λογαριασμός\",\n    \"account_title_personalized\": \"Γεια σας {{ first_name }},\",\n    \"account_orders\": \"Παραγγελίες\",\n    \"account_profile\": \"Προφίλ\",\n    \"discount_code\": \"Κωδικός έκπτωσης\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Οι δασμοί και οι φόροι συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Οι δασμοί και οι φόροι συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Οι δασμοί συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Οι δασμοί συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"pickup_available_at_html\": \"Υπάρχει δυνατότητα παραλαβής από <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Υπάρχει δυνατότητα παραλαβής στις {{ pickup_time }}\",\n    \"pickup_not_available\": \"Δεν υπάρχει δυνατότητα παραλαβής αυτήν τη στιγμή\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Οι φόροι και τα έξοδα <a href=\\\"{{ link }}\\\">αποστολής</a> υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Οι φόροι και τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Οι φόροι συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Οι φόροι συμπεριλαμβάνονται. Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"view_more_details\": \"Προβολή περισσοτέρων λεπτομερειών\",\n    \"inventory_low_stock\": \"Χαμηλό απόθεμα\",\n    \"inventory_in_stock\": \"Σε απόθεμα\",\n    \"inventory_out_of_stock\": \"Χωρίς απόθεμα\",\n    \"page_placeholder_title\": \"Τίτλος σελίδας\",\n    \"page_placeholder_content\": \"Επιλέξτε μια σελίδα για να δείτε το περιεχόμενό της.\",\n    \"placeholder_image\": \"Εικόνα placeholder\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} ακόμη\",\n      \"other\": \"{{ count }} ακόμη\"\n    },\n    \"shipping_policy\": \"Τα έξοδα αποστολής υπολογίζονται κατά την ολοκλήρωση της αγοράς.\",\n    \"discount_code_error\": \"Ο κωδικός έκπτωσης δεν μπορεί να εφαρμοστεί στο καλάθι σας\",\n    \"powered_by\": \"Αυτό το κατάστημα θα υποστηρίζεται από το\",\n    \"store_owner_link_html\": \"Είστε ο ιδιοκτήτης του καταστήματος; <a href=\\\"{{ link }}\\\">Συνδεθείτε εδώ</a>\",\n    \"shipping_discount_error\": \"Οι εκπτώσεις αποστολής εμφανίζονται στην ολοκλήρωση αγοράς μετά την προσθήκη διεύθυνσης\",\n    \"recipient_form_send_to\": \"Αποστολή σε\",\n    \"recipient_form_email_label\": \"Email παραλήπτη\",\n    \"recipient_form_email_label_my_email\": \"Το email μου\",\n    \"recipient_form_email_address\": \"Διεύθυνση email παραλήπτη\",\n    \"recipient_form_name_label\": \"Όνομα παραλήπτη (προαιρετικά)\",\n    \"recipient_form_message\": \"Μήνυμα (προαιρετικά)\",\n    \"recipient_form_characters_used\": \"Χρησιμοποιήθηκαν {{ used_chars }}/{{ max_chars }} χαρακτήρες\",\n    \"recipient_form_send_on\": \"ΕΕΕΕ-ΜΜ-ΗΗ\",\n    \"recipient_form_send_on_label\": \"Ημερομηνία αποστολής (προαιρετικά)\",\n    \"recipient_form_fields_visible\": \"Τα πεδία της φόρμας παραλήπτη είναι πλέον ορατά\",\n    \"recipient_form_fields_hidden\": \"Τα πεδία της φόρμας παραλήπτη δεν είναι πλέον ορατά\",\n    \"recipient_form_error\": \"Προέκυψε σφάλμα κατά την υποβολή της φόρμας\",\n    \"product_custom_property_character_count\": \"Χρησιμοποιήθηκαν {{ used_chars }}/{{ max_chars }} χαρακτήρες\",\n    \"terms_and_policies\": \"Όροι και πολιτικές\",\n    \"pagination\": {\n      \"nav_label\": \"Πλοήγηση στη σελιδοποίηση\",\n      \"previous\": \"Προηγούμενη\",\n      \"next\": \"Επόμενη\",\n      \"page\": \"Σελίδα {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Διατίθεται τιμολόγηση βάσει ποσότητας\",\n    \"volume_pricing\": \"Τιμολόγηση βάσει ποσότητας\",\n    \"at_price_each\": \"στα {{ price }}/τμχ\",\n    \"each\": \"{{ price }}/έκαστο\",\n    \"each_abbreviation\": \"τμχ\",\n    \"price_at\": \"σε\",\n    \"price_range\": \"Εύρος τιμών\",\n    \"item_count_cutoff\": \"Περισσότερα από {{ count }} προϊόντα\",\n    \"cancel\": \"Ακύρωση\",\n    \"product_subtotal\": \"Μερικό σύνολο προϊόντων\",\n    \"quantity_per_item\": \"/τμχ\",\n    \"remove_all\": \"Κατάργηση όλων\",\n    \"remove_all_items_confirmation\": \"Να καταργηθούν και τα {{ count }} προϊόντα από το καλάθι σας;\",\n    \"remove_one_item_confirmation\": \"Να καταργηθεί 1 προϊόν από το καλάθι σας;\",\n    \"total_items\": \"Σύνολο προϊόντων\",\n    \"variant\": \"Παραλλαγή\",\n    \"variant_total\": \"Σύνολο παραλλαγών\",\n    \"view_cart\": \"Προβολή καλαθιού\",\n    \"your_cart\": \"Το καλάθι σας\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 προϊόν προστέθηκε στο καλάθι σας\",\n      \"other\": \"{{ count }} προϊόντα προστέθηκαν στο καλάθι\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Χρησιμοποιήστε τον κωδικό της δωροκάρτας στο διαδίκτυο ή τον κωδικό QR στο κατάστημα\",\n      \"title\": \"Αυτό είναι το υπόλοιπο της δωροκάρτας σας ύψους {{ value }} για το {{ shop }}!\",\n      \"subtext\": \"Η δωροκάρτα σας\",\n      \"shop_link\": \"Επισκεφτείτε το διαδικτυακό κατάστημα\",\n      \"add_to_apple_wallet\": \"Προσθήκη στο Apple Wallet\",\n      \"qr_image_alt\": \"Κωδικός QR — σαρώστε για να εξαργυρώσετε τη δωροκάρτα\",\n      \"copy_code\": \"Αντιγραφή κωδικού δωροκάρτας\",\n      \"expiration_date\": \"Λήγει στις {{ expires_on }}\",\n      \"copy_code_success\": \"Η αντιγραφή του κωδικού ήταν επιτυχής\",\n      \"expired\": \"Έληξε\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Κωδικός πρόσβασης\",\n    \"search\": \"Αναζήτηση\",\n    \"product_title\": \"Τίτλος προϊόντος\",\n    \"collection_title\": \"Τίτλος συλλογής\",\n    \"blog_posts\": \"Αναρτήσεις ιστολογίου\",\n    \"blog_post_title\": \"Τίτλος\",\n    \"blog_post_author\": \"Συντάκτης\",\n    \"blog_post_date\": \"Ημερομηνία\",\n    \"blog_post_description\": \"Απόσπασμα από το περιεχόμενο της ανάρτησης στο ιστολόγιό σας\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Προσθήκη στο καλάθι\",\n      \"added_to_cart\": \"Προστέθηκε στο καλάθι\",\n      \"adding_to_cart\": \"Προσθήκη...\",\n      \"add_to_cart_error\": \"Παρουσιάστηκε σφάλμα κατά την προσθήκη στο καλάθι\",\n      \"sold_out\": \"Εξαντλήθηκε\",\n      \"unavailable\": \"Μη διαθέσιμο\",\n      \"quantity_error_max\": \"Αυτό το προϊόν έχει μέγιστο όριο {{ maximum }}\",\n      \"quantity\": \"Ποσότητα\",\n      \"quantity_increments\": \"Ποσότητες των {{ increment }}\",\n      \"quantity_minimum\": \"Ελάχιστο όριο {{ minimum }}\",\n      \"quantity_maximum\": \"Μέγιστο όριο {{ maximum }}\",\n      \"in_cart\": \"στο καλάθι\",\n      \"default_title\": \"Προεπιλεγμένος τίτλος\",\n      \"sticky_add_to_cart\": \"Γρήγορη προσθήκη στο καλάθι\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"σε\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} σχόλιο\",\n        \"other\": \"{{ count }} σχόλια\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Email\",\n      \"error\": \"Αποτυχία δημοσίευσης σχολίου, αντιμετωπίστε τα εξής:\",\n      \"heading\": \"Υποβάλετε ένα σχόλιο\",\n      \"message\": \"Μήνυμα\",\n      \"moderated\": \"Έχετε υπόψη ότι τα σχόλια χρειάζεται να λάβουν έγκριση προτού δημοσιευτούν.\",\n      \"name\": \"Όνομα\",\n      \"post\": \"Ανάρτηση σχολίου\",\n      \"success_moderated\": \"Το σχόλιο δημοσιεύτηκε, εν αναμονή τροποποίησης\",\n      \"success\": \"Το σχόλιο δημοσιεύτηκε\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/en.default.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin language editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n{\n  \"accessibility\": {\n    \"account\": \"Account\",\n    \"cart\": \"Cart\",\n    \"cart_count\": \"Total items in cart\",\n    \"close_dialog\": \"Close dialog\",\n    \"country_region\": \"Country/Region\",\n    \"country_results_count\": \"{{ count }} results\",\n    \"decrease_quantity\": \"Decrease quantity\",\n    \"discount\": \"Apply a discount code\",\n    \"discount_menu\": \"Discount Codes\",\n    \"discount_applied\": \"Applied discount code: {{ code }}\",\n    \"filters\": \"Filters\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter applied\",\n      \"other\": \"{{ count }} filters applied\"\n    },\n    \"increase_quantity\": \"Increase quantity\",\n    \"inventory_status\": \"Inventory status\",\n    \"localization_region_and_language\": \"Region and language selector\",\n    \"menu\": \"Menu\",\n    // This is the label for the header navigation menu when using screen readers, it will read \"Primary navigation\"\n    \"header_navigation_label\": \"Primary\",\n    \"nested_product\": \"{{ product_title }} for {{ parent_title }}\",\n    \"new_window\": \"Opens in a new window.\",\n    \"open_hotspot\": \"Open hotspot\",\n    \"quantity\": \"Quantity\",\n    \"pause_video\": \"Pause video\",\n    \"play_model\": \"Play 3D model\",\n    \"play_video\": \"Play video\",\n    \"loading_product_recommendations\": \"Loading product recommendations\",\n    \"rating\": \"Rating of this product is {{ rating }} out of 5\",\n    \"remove_item\": \"Remove {{ title}}\",\n    \"remove\": \"Remove\",\n    \"reset_search\": \"Reset search\",\n    \"scroll_to\": \"Scroll to {{ title }}\",\n    \"search_results_count\": \"{{ count }} search results found for \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"No results found for \\\"{{ query }}\\\"\",\n    \"skip_to_product_info\": \"Skip to product information\",\n    \"skip_to_results_list\": \"Skip to results list\",\n    \"skip_to_text\": \"Skip to content\",\n    \"slide_status\": \"Slide {{ index }} of {{ length }}\",\n    \"slideshow\": \"Slideshow\",\n    \"slideshow_next\": \"Next slide\",\n    \"slideshow_pause\": \"Pause slideshow\",\n    \"slideshow_play\": \"Play slideshow\",\n    \"slideshow_previous\": \"Previous slide\",\n    \"unit_price\": \"Unit price\",\n    \"find_country\": \"Find country\",\n    \"view_pricing_info\": \"View pricing information\"\n  },\n  \"actions\": {\n    // Quick add button on product cards, shortened version of add to cart\n    \"add\": \"Add\",\n    \"add_to_cart\": \"Add to cart\",\n    // Success message shown after adding item to cart\n    \"added\": \"Added\",\n    // Button to apply discount code to cart\n    \"apply\": \"Apply\",\n    \"back\": \"Back\",\n    \"choose\": \"Choose\",\n    // Button to reset current selection or input\n    \"clear\": \"Clear\",\n    // Button to remove all applied product filters\n    \"clear_all\": \"Clear all\",\n    \"close\": \"Close\",\n    \"open\": \"Open\",\n    // Continue shopping link on the cart page which takes the user back to a collection page\n    \"continue_shopping\": \"Continue shopping\",\n    \"enter_password\": \"Enter password\",\n    \"log_in_html\": \"Have an account? <a href=\\\"{{ link }}\\\">Log in</a> to check out faster.\",\n    \"log_in\": \"Sign in\",\n    \"log_out\": \"Log out\",\n    \"open_image_in_full_screen\": \"Open image in full screen\",\n    // Button to remove applied filters from search/collection results\n    \"remove\": \"Remove\",\n    \"remove_discount\": \"Remove discount {{ code }}\",\n    // Button to expand hidden product variant options\n    \"show_all_options\": \"Show all options\",\n    \"see_items\": {\n      \"one\": \"See {{ count }} item\",\n      // Button to view filtered product results and close filter dialog\n      \"other\": \"See {{ count }} items\"\n    },\n    \"show_filters\": \"Filter\",\n    \"show_less\": \"Show less\",\n    \"show_more\": \"Show more\",\n    \"sign_in_options\": \"Other sign in options\",\n    // AR button to view 3D product model in physical space\n    \"view_in_your_space\": \"View in your space\",\n    // Button to view complete collection/product list\n    \"view_all\": \"View all\",\n    \"more\": \"More\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Close dialog\",\n    // Button to clear search filter and restore default view\n    \"reset\": \"Reset\",\n    \"enter_using_password\": \"Enter using password\",\n    \"sign_up\": \"Sign up\",\n    \"submit\": \"Submit\",\n    \"view_store_information\": \"View store information\",\n    \"sort\": \"Sort\"\n  },\n  \"blocks\": {\n    \"contact_form\": {\n      \"name\": \"Name\",\n      \"email\": \"Email\",\n      \"phone\": \"Phone\",\n      \"comment\": \"Comment\",\n      \"post_success\": \"Thanks for contacting us. We'll get back to you as soon as possible.\",\n      \"error_heading\": \"Please adjust the following:\"\n    },\n    \"email_signup\": {\n      \"label\": \"Email\",\n      \"placeholder\": \"Email address\",\n      \"success\": \"Thanks for subscribing!\"\n    },\n    \"filter\": \"Filter\",\n    \"load_video\": \"Load video: {{ description }}\",\n    \"sold_out\": \"Sold out\",\n    \"payment_methods\": \"Payment methods\",\n    \"slider_label\": \"Slider\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comments_heading\": {\n        \"one\": \"{{ count }} comment\",\n        \"other\": \"{{ count }} comments\"\n      },\n      \"comment_author_separator\": \"•\"\n    },\n    \"comment_form\": {\n      \"email\": \"Email\",\n      \"error\": \"Comment failed to post, please address the following:\",\n      \"heading\": \"Leave a comment\",\n      \"message\": \"Message\",\n      \"moderated\": \"Please note, comments need to be approved before they are published.\",\n      \"name\": \"Name\",\n      \"post\": \"Post comment\",\n      \"success_moderated\": \"Comment posted, awaiting moderation\",\n      \"success\": \"Comment posted\"\n    }\n  },\n  \"content\": {\n    \"cancel\": \"Cancel\",\n    \"discount\": \"Discount\",\n    \"account_title\": \"Account\",\n    \"terms_and_policies\": \"Terms and Policies\",\n    \"account_title_personalized\": \"Hi {{ first_name }}\",\n    \"account_orders\": \"Orders\",\n    \"account_profile\": \"Profile\",\n    \"blog_details_separator\": \"|\",\n    \"cart_estimated_total\": \"Estimated total\",\n    \"cart_title\": \"Cart\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"cart_total\": \"Cart total\",\n    \"checkout\": \"Check out\",\n    \"collection_placeholder\": \"Collection title\",\n    \"discount_code\": \"Discount code\",\n    \"shipping_discount_error\": \"Shipping discounts are shown at checkout after adding an address\",\n    \"discount_code_error\": \"Discount code cannot be applied to your cart\",\n    \"discounts\": \"Discounts\",\n    \"duties_and_taxes_included\": \"Duties and taxes included.\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Duties and taxes included. Discounts and <a href=\\\"{{ link }}\\\">shipping</a> calculated at checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Duties and taxes included. Shipping is calculated at checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Duties and taxes included. Discounts and shipping calculated at checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Duties and taxes included. Shipping is calculated at checkout.\",\n    \"duties_included\": \"Duties included.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Duties included. Taxes, discounts and <a href=\\\"{{ link }}\\\">shipping</a> calculated at checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Duties included. Shipping is calculated at checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Duties included. Taxes, discounts and shipping calculated at checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Duties included. Shipping is calculated at checkout.\",\n    \"featured_products\": \"Featured products\",\n    \"filters\": \"Filters\",\n    \"grid_view\": {\n      \"default_view\": \"Default\",\n      \"grid_fieldset\": \"Column grid\",\n      \"single_item\": \"Single\",\n      \"zoom_out\": \"Zoom out\"\n    },\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} left\",\n      \"other\": \"{{ count }} left\"\n    },\n    \"inventory_low_stock\": \"Low stock\",\n    \"inventory_in_stock\": \"In stock\",\n    \"inventory_out_of_stock\": \"Out of stock\",\n    \"item_count\": {\n      \"one\": \"{{ count }} item\",\n      \"other\": \"{{ count }} items\"\n    },\n    \"item_count_cutoff\": \"More than {{ count }} items\",\n    \"language\": \"Language\",\n    \"localization_region_and_language\": \"Region and language\",\n    \"no_products_found\": \"No products found.\",\n    \"no_results_found\": \"No results found\",\n    \"page_placeholder_title\": \"Page title\",\n    \"page_placeholder_content\": \"Select a page to display its content.\",\n    \"pagination\": {\n      \"nav_label\": \"Pagination navigation\",\n      \"previous\": \"Previous\",\n      \"next\": \"Next\",\n      \"page\": \"Page {{ page }}\"\n    },\n    \"pickup_available_at_html\": \"Pickup available at <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Pickup available, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Pickup currently not available\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"powered_by\": \"This shop will be powered by\",\n    \"price\": \"Price\",\n    \"price_compare_at\": \"Compare at price\",\n    \"price_from\": \"From {{ price }}\",\n    \"price_regular\": \"Regular price\",\n    \"price_sale\": \"Sale price\",\n    \"price_filter_html\": \"The highest price is {{ price }}\",\n    \"product_image\": \"Product image\",\n    \"product_information\": \"Product information\",\n    \"product_subtotal\": \"Product subtotal\",\n    \"product_total\": \"Product total\",\n    \"product_badge_sold_out\": \"Sold out\",\n    \"product_badge_sale\": \"Sale\",\n    \"product_card_placeholder\": \"Product title\",\n    \"placeholder_image\": \"Placeholder image\",\n    \"quantity\": \"Quantity\",\n    \"quantity_per_item\": \"/ea\",\n    \"recently_viewed_products\": \"Recently viewed\",\n    \"remove_all\": \"Remove all\",\n    \"remove_all_items_confirmation\": \"Remove all {{ count }} items from your cart?\",\n    \"remove_one_item_confirmation\": \"Remove 1 item from your cart?\",\n    \"reviews\": \"reviews\",\n    \"read_more\": \"Read more...\",\n    \"search_input_label\": \"Search\",\n    \"search_input_placeholder\": \"Search\",\n    \"search\": \"Search\",\n    \"search_results\": \"Search results\",\n    \"search_results_label\": \"Search results\",\n    \"search_results_no_results\": \"No results found for \\\"{{ terms }}\\\". Try another search.\",\n    \"search_results_no_results_check_spelling\": \"No results found for \\\"{{ terms }}\\\". Check the spelling or use a different word or phrase.\",\n    \"search_results_resource_articles\": \"Blog posts\",\n    \"search_results_resource_collections\": \"Collections\",\n    // Section heading for Shopify store pages in search results\n    \"search_results_resource_pages\": \"Pages\",\n    \"search_results_resource_products\": \"Products\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} product\",\n      \"other\": \"{{ count }} products\"\n    },\n    \"search_results_resource_queries\": \"Search suggestions\",\n    \"total_items\": \"Total items\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Variant total\",\n    \"view_cart\": \"View cart\",\n    \"your_cart\": \"Your cart\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 item added to cart\",\n      \"other\": \"{{ count }} items added to cart\"\n    },\n    // Button to go from search preview to full search results page\n    \"search_results_view_all\": \"View all\",\n    \"search_results_view_all_button\": \"View all\",\n    // Label for customer's note to seller during checkout\n    \"seller_note\": \"Special instructions\",\n    \"shipping_policy\": \"Shipping calculated at checkout.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Shipping</a> calculated at checkout.\",\n    \"store_owner_link_html\": \"Are you the store owner? <a href=\\\"{{ link }}\\\">Log in here</a>\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Taxes, discounts and <a href=\\\"{{ link }}\\\">shipping</a> calculated at checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxes and <a href=\\\"{{ link }}\\\">shipping</a> calculated at checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Taxes, discounts and shipping calculated at checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Taxes and shipping calculated at checkout.\",\n    \"taxes_included\": \"Taxes included.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Taxes included. Discounts and <a href=\\\"{{ link }}\\\">shipping</a> calculated at checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxes included. Shipping is calculated at checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Taxes included. Discounts and shipping calculated at checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Taxes included. Shipping is calculated at checkout.\",\n    \"unavailable\": \"Unavailable\",\n    \"use_fewer_filters_html\": \"Try using fewer filters, or <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">clear all filters</a>.\",\n    // Link or button to expand additional information\n    \"view_more_details\": \"View more details\",\n    \"volume_pricing_available\": \"Volume pricing available\",\n    \"volume_pricing\": \"Volume pricing\",\n    \"at_price_each\": \"at {{ price }}/ea\",\n    \"each\": \"{{ price }}/ea\",\n    \"each_abbreviation\": \"ea\",\n    \"price_at\": \"at\",\n    \"price_range\": \"Price range\",\n    \"your_cart_is_empty\": \"Your cart is empty\",\n    \"product_count\": \"Product count\",\n    \"errors\": \"Errors\",\n    \"wrong_password\": \"Wrong password\",\n    // Legend text for gift card delivery options\n    \"recipient_form_send_to\": \"Send to\",\n    \"recipient_form_email_label\": \"Recipient’s email\",\n    \"recipient_form_email_label_my_email\": \"My email\",\n    \"recipient_form_email_address\": \"Recipient email address\",\n    \"recipient_form_name_label\": \"Recipient name (optional)\",\n    \"recipient_form_message\": \"Message (optional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} characters used\",\n    \"recipient_form_send_on\": \"YYYY-MM-DD\",\n    \"recipient_form_send_on_label\": \"Send on (optional)\",\n    \"recipient_form_fields_visible\": \"Recipient form fields are now visible\",\n    \"recipient_form_fields_hidden\": \"Recipient form fields are now hidden\",\n    \"recipient_form_error\": \"There was an error with the form submission\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} characters used\"\n  },\n  \"fields\": {\n    // Separates min and max values in price range filter\n    \"separator\": \"to\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Use the gift card code online or QR code in-store\",\n      \"title\": \"Here's your {{ value }} gift card balance for {{ shop }}!\",\n      \"subtext\": \"Your gift card\",\n      \"shop_link\": \"Visit online store\",\n      \"add_to_apple_wallet\": \"Add to Apple Wallet\",\n      \"qr_image_alt\": \"QR code — scan to redeem gift card\",\n      \"copy_code\": \"Copy gift card code\",\n      \"expiration_date\": \"Expires {{ expires_on }}\",\n      \"copy_code_success\": \"Code copied successfully\",\n      \"expired\": \"Expired\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Password\",\n    \"search\": \"Search\",\n    \"product_title\": \"Product title\",\n    \"collection_title\": \"Collection title\",\n    \"blog_posts\": \"Blog posts\",\n    \"blog_post_title\": \"Title\",\n    \"blog_post_author\": \"Author\",\n    \"blog_post_date\": \"Date\",\n    \"blog_post_description\": \"An excerpt of your blog post's content\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Add to cart\",\n      \"adding_to_cart\": \"Adding...\",\n      \"added_to_cart\": \"Added to cart\",\n      \"add_to_cart_error\": \"Error adding to cart\",\n      \"quantity_error_max\": \"This item has a maximum of {{ maximum }}\",\n      \"sold_out\": \"Sold out\",\n      \"unavailable\": \"Unavailable\",\n      \"quantity\": \"Quantity\",\n      \"quantity_increments\": \"Increments of {{ increment }}\",\n      \"quantity_minimum\": \"Minimum of {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum of {{ maximum }}\",\n      \"in_cart\": \"in cart\",\n      \"default_title\": \"Default Title\",\n      \"sticky_add_to_cart\": \"Quick add to cart bar\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/en.default.schema.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin language editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n{\n  \"categories\": {\n    \"banners\": \"Banners\",\n    // Category for fundamental content blocks (text, images, buttons)\n    \"basic\": \"Basic\",\n    \"collection\": \"Collection\",\n    \"collections\": \"Collections\",\n    \"collection_list\": \"Collection list\",\n    // Category label for custom/advanced blocks in theme editor\n    \"custom\": \"Custom\",\n    \"decorative\": \"Decorative\",\n    \"footer\": \"Footer\",\n    // Theme component category for contact forms, email signups, etc.\n    \"forms\": \"Forms\",\n    \"header\": \"Header\",\n    \"layout\": \"Layout\",\n    \"links\": \"Links\",\n    \"product\": \"Product\",\n    \"products\": \"Products\",\n    \"product_list\": \"Featured collection\",\n    \"other_sections\": \"Other\",\n    \"storytelling\": \"Storytelling\",\n    \"text\": \"Text\"\n  },\n  \"content\": {\n    \"visible_if_collection_has_more_products\": \"Visible if collection has more products than shown\",\n    \"advanced\": \"Advanced\",\n    \"appearance\": \"Appearance\",\n    \"arrows\": \"Arrows\",\n    \"background\": \"Background\",\n    \"background_image\": \"Background image\",\n    \"background_video\": \"Background video\",\n    \"block_link\": \"Block link\",\n    \"block_size\": \"Block size\",\n    // Typography setting for body text size\n    \"body_size\": \"Body size\",\n    \"borders\": \"Borders\",\n    \"bottom_row_appearance\": \"Bottom row appearance\",\n    \"buttons\": \"Buttons\",\n    \"cards_layout\": \"Cards layout\",\n    \"carousel\": \"Carousel\",\n    \"carousel_navigation\": \"Carousel navigation\",\n    \"carousel_pagination\": \"Carousel pagination\",\n    \"cart_features\": \"Cart features\",\n    \"colors\": \"Colors\",\n    \"collection_page\": \"Collection page\",\n    \"complementary_products\": \"Complementary products must be set up using the Search & Discovery app. [Learn more](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"content_layout\": \"Content layout\",\n    \"content_width\": \"Content width only applies when the section width is set to full width.\",\n    \"copyright\": \"Copyright\",\n    \"customer_account\": \"Customer account\",\n    \"describe_the_video_for\": \"Describe the video for customers using screen readers. [Learn more](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Edit empty state collection in [theme settings](/editor?context=theme&category=search)\",\n    \"edit_logo_in_theme_settings\": \"Edit logo in [theme settings](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Edit price formatting in [theme settings](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Edit variant styling in [theme settings](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Signups add [customer profiles](https://help.shopify.com/manual/customers)\",\n    \"email_signup\": \"Email signup\",\n    \"follow_on_shop_eligiblity\": \"For the button to show, the Shop channel must be installed and Shop Pay activated. [Learn more](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"gift_card_form_description\": \"Customers can send gift cards to a recipient's email with a personal message. [Learn more](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"fonts\": \"Fonts\",\n    \"grid\": \"Grid\",\n    \"grid_layout\": \"Grid layout\",\n    \"heading\": \"Heading\",\n    \"heading_size\": \"Heading size\",\n    \"utilities\": \"Utilities\",\n    \"home_page\": \"Home page\",\n    \"icon\": \"Icon\",\n    \"image\": \"Image\",\n    \"images\": \"Images\",\n    \"input\": \"Input\",\n    \"inverse_logo_info\": \"Used when transparent header background is set to Inverse\",\n    \"layout\": \"Layout\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Link padding\",\n    \"localization\": \"Localization\",\n    \"logo\": \"Logo\",\n    \"manage_customer_accounts\": \"[Manage visibility](/admin/settings/customer_accounts) in customer account settings. Legacy accounts not supported.\",\n    \"manage_policies\": \"[Manage policies](/admin/settings/legal)\",\n    \"manage_store_name\": \"[Manage store name](/admin/settings/general?edit=storeName)\",\n    \"margin\": \"Margin\",\n    \"media\": \"Media\",\n    \"media_1\": \"Media 1\",\n    \"media_2\": \"Media 2\",\n    \"mobile_media\": \"Mobile media\",\n    \"mobile_media_1\": \"Mobile media 1\",\n    \"mobile_media_2\": \"Mobile media 2\",\n    // Section header for navigation menu settings in theme editor\n    \"menu\": \"Menu\",\n    \"mobile_column_optimization\": \"Columns will automatically optimize for mobile\",\n    \"mobile_layout\": \"Mobile layout\",\n    \"mobile_size\": \"Mobile size\",\n    \"mobile_width\": \"Mobile width\",\n    \"padding\": \"Padding\",\n    \"padding_desktop\": \"Desktop padding\",\n    \"paragraph\": \"Paragraph\",\n    // Footer component section header for legal policy links\n    \"policies\": \"Policies\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Popover position\",\n    \"popup\": \"Popup\",\n    \"product_media\": \"Product media\",\n    \"product_page\": \"Product page\",\n    \"responsive_font_sizes\": \"Sizes automatically scale for all screen sizes\",\n    \"resource_reference_collection_card\": \"Displays collection from parent section\",\n    \"resource_reference_collection_card_image\": \"Displays image from parent collection\",\n    \"resource_reference_collection_title\": \"Displays title from parent collection\",\n    \"resource_reference_product\": \"Auto connects to parent product\",\n    \"resource_reference_product_card\": \"Displays product from parent section\",\n    \"resource_reference_product_inventory\": \"Displays inventory from parent product\",\n    \"resource_reference_product_media\": \"Displays media from parent product\",\n    \"resource_reference_product_price\": \"Displays price from parent product\",\n    \"resource_reference_product_recommendations\": \"Displays recommendations based on parent product\",\n    \"resource_reference_product_sku\": \"Displays SKU from parent product\",\n    \"resource_reference_product_review\": \"Displays reviews from parent product\",\n    \"resource_reference_product_swatches\": \"Displays swatches from parent product\",\n    \"resource_reference_product_title\": \"Displays title from parent product\",\n    \"resource_reference_product_variant_picker\": \"Displays variants from parent product\",\n    \"resource_reference_product_custom_property\": \"Add customizable input fields to collect custom information that will be added to this order line item, later visible in the order details.\",\n    \"search\": \"Search\",\n    \"section_layout\": \"Section layout\",\n    \"section_link\": \"Section link\",\n    \"section_size\": \"Section size\",\n    // Section header for width and height controls\n    \"size\": \"Size\",\n    \"slideshow_width\": \"Slide width\",\n    \"social_media\": \"Social media\",\n    \"submit_button\": \"Submit button\",\n    \"swatches\": \"Swatches\",\n    \"submenu_feature\": \"Submenu feature\",\n    // Section header for text positioning settings\n    \"text\": \"Text\",\n    \"text_presets\": \"Text presets\",\n    \"thumbnails\": \"Thumbnails\",\n    \"transparent_background\": \"Transparent background\",\n    \"typography\": \"Typography\",\n    \"typography_primary\": \"Primary typography\",\n    \"typography_secondary\": \"Secondary typography\",\n    \"typography_tertiary\": \"Tertiary typography\",\n    \"variant_settings\": \"Variant settings\",\n    \"visibility\": \"Visibility\",\n    \"width\": \"Width\",\n    \"width_is_automatically_optimized\": \"Width is automatically optimized for mobile.\",\n    \"app_required_for_ratings\": \"An app is required for product ratings. [Learn more](https://help.shopify.com/manual/apps)\",\n    \"navigation\": \"Navigation\"\n  },\n  \"html_defaults\": {\n    \"join_our_email_list\": \"<h2>Join our email list</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Get exclusive deals and early access to new products.</p>\",\n    \"artistry_in_action\": \"<p>Artistry in action </p>\",\n    \"authentic_materials\": \"<p>Authentic materials, no compromises </p>\",\n    \"bestseller_h2\": \"<h2>Bestsellers</h2>\",\n    \"bestseller_h3\": \"<h3>Bestsellers</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"bold_style_recognizable\": \"<p>Bold style that's recognizable anywhere</p>\",\n    \"build_better\": \"<p>We believe in building better</p>\",\n    \"contact_us\": \"<h2>Contact us</h2>\",\n    \"discover_bestsellers\": \"<p>Discover the bestsellers that have captured the hearts of our customers with their perfect blend of functionality and style.</p>\",\n    \"discover_elevated_design\": \"<p>Discover elevated design </p>\",\n    \"everythings_starts_with_why\": \"<p>Everything we do starts with why</p>\",\n    \"expert_construction_finish\": \"<p>Expert construction and an impeccable finish</p>\",\n    \"explore_latest_products\": \"<p>Explore our latest products.</p>\",\n    \"faq\": \"<h3>Frequently asked questions</h3>\",\n    \"featured_collection_h2\": \"<h2>Featured collection</h2>\",\n    \"first_to_know\": \"<p>Be the first to know about new collections and special offers. </p>\",\n    \"free_returns\": \"<p>Free 30-day returns</p>\",\n    \"free_shipping_over\": \"<p>Free shipping over $50</p>\",\n    \"goal_for_every_customer\": \"<p>Our goal is for every customer to be totally satisfied with their purchase. If this isn't the case, let us know and we'll do our best to work with you to make it right.</p>\",\n    \"home_to_shirts\": \"<p>Home → Shirts</p>\",\n    \"intentional_design\": \"<h2>Intentional design</h2>\",\n    \"introducing_h2\": \"<h2><em>Introducing</em></h2>\",\n    \"latest_products\": \"<p>Introducing our latest products, made especially for the season. Shop your favorites before they're gone!</p>\",\n    \"made_local_and_global\": \"<p>Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.</p>\",\n    \"made_to_last\": \"<p>Made to last </p>\",\n    \"made_with_care_h2\": \"<h2>Made with care</h2>\",\n    \"made_with_care_extended\": \"<p>Made with care and unconditionally loved by our customers, this signature bestseller exceeds all expectations.</p>\",\n    \"made_with_care\": \"<p>Made with care and unconditionally loved by our customers.</p>\",\n    \"make_things_better_extended\": \"<p>We make things that work better and last longer. Our products solve real problems with clean design and honest materials.</p>\",\n    \"make_things_better\": \"<p>We make things that work better and last longer.</p>\",\n    \"may_also_like\": \"<h4>You may also like</h4>\",\n    \"new_arrivals_h1\": \"<h1>New arrivals</h1>\",\n    \"pieces_better_with_time\": \"<p>Pieces that only get better with time and wear </p>\",\n    \"new_arrivals_h2\": \"<h2>New arrivals</h2>\",\n    \"new_arrivals_h3\": \"<h3>New arrivals</h3>\",\n    \"product_launch\": \"<p>Take a look behind the scenes of our latest product launch.</p>\",\n    \"product_story\": \"<p>At the heart of every product lies a unique story, driven by our passion for quality and innovation. Each item enhances your everyday life and sparks joy.</p>\",\n    \"quality_you_can_feel\": \"<h2>Quality you can feel</h2>\",\n    \"real_people\": \"<p>Real people making great products</p>\",\n    \"related_product\": \"<h3>Related products</h3>\",\n    \"return_policy\": \"<h2>What is the return policy?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 Reviews</p>\",\n    \"share_information_about_your\": \"<p>Share information about your brand with your customers. Describe a product, make announcements, or welcome customers to your store.</p>\",\n    \"shipping_based_on_location\": \"<p>Shipping is calculated based on your location and the items in your order. You will always know the shipping price before you purchase.</p>\",\n    \"shop_by_collection\": \"<h3>Shop by collection</h3>\",\n    \"shop_collection\": \"<p>Discover our curated collection featuring hand-picked favorites that blend style and quality.</p>\",\n    \"signature_products\": \"<h2>Our signature product</h2>\",\n    \"styled_with\": \"<h3>Styled with</h3>\",\n    \"subscribe\": \"<h2>Subscribe to our emails</h2>\",\n    \"team_with_goal\": \"<h2>A team with a goal</h2>\",\n    \"unable_to_accept_returns\": \"<p>We are unable to accept returns on certain items. These will be carefully marked before purchase.</p>\",\n    \"uncompromising_standards\": \"<p>Uncompromising standards </p>\",\n    \"work_quickly_to_ship\": \"<p>We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.</p>\"\n  },\n  \"info\": {\n    \"actions_display_style\": \"Icons are always used on mobile\",\n    \"applies_on_image_only\": \"Applies to images only\",\n    \"aspect_ratio_adjusted\": \"Adjusted in some layouts\",\n    \"carousel_hover_behavior_not_supported\": \"\\\"Carousel\\\" hover is not supported when \\\"Carousel\\\" type is selected at the section level\",\n    \"carousel_layout_on_mobile\": \"Carousel is always used on mobile\",\n    \"checkout_buttons\": \"Allows buyers to check out faster and can improve conversion. [Learn more](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Custom heading\",\n    \"custom_liquid\": \"Add app snippets or other code to create advanced customizations. [Learn more](https://shopify.dev/docs/api/liquid)\",\n    \"edit_presets_in_theme_settings\": \"Edit presets in [theme settings](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Customize filters with the [Search & Discovery app](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Grid layout is used for mobile\",\n    \"hide_logo_on_home_page_help\": \"Logo will remain visible when sticky header is active\",\n    \"hover_effects\": \"Applies to product and collection cards\",\n    \"logo_font\": \"Applies only when a logo is not selected\",\n    \"logo_height\": \"Only affects header logo\",\n    \"manage_countries_regions\": \"[Manage countries/regions](/admin/settings/markets)\",\n    \"manage_languages\": \"[Manage languages](/admin/settings/languages)\",\n    \"transparent_background\": \"Review each template where transparent background is applied for readability\",\n    \"video_alt_text\": \"Describe the video for assistive tech users\",\n    \"video_autoplay\": \"Videos will be muted by default\",\n    \"video_external\": \"Use a YouTube or Vimeo URL\",\n    \"pills_usage\": \"Used for applied filters, discount codes, and search suggestions\",\n    \"media_type_info\": \"Features are populated from your menu links\"\n  },\n  \"names\": {\n    \"column\": \"Column\",\n    \"product_title\": \"Product title\",\n    \"custom_liquid\": \"Custom Liquid\",\n    \"404\": \"404\",\n    \"accelerated_checkout\": \"Accelerated checkout\",\n    \"accordion\": \"Accordion\",\n    \"accordion_row\": \"Accordion row\",\n    \"add_to_cart\": \"Add to cart\",\n    \"alternating_content_rows\": \"Alternating rows\",\n    \"animations\": \"Animations\",\n    \"announcement\": \"Announcement\",\n    \"announcement_bar\": \"Announcement bar\",\n    \"badges\": \"Badges\",\n    \"blog\": \"Blog\",\n    \"blog_card\": \"Blog card\",\n    \"blog_post\": \"Blog post\",\n    \"blog_posts\": \"Blog posts\",\n    \"blog_posts_grid\": \"Blog posts: Grid\",\n    \"blog_posts_carousel\": \"Blog posts: Carousel\",\n    \"blog_posts_editorial\": \"Blog posts: Editorial\",\n    \"borders\": \"Borders\",\n    \"button\": \"Button\",\n    \"buttons\": \"Buttons\",\n    \"caption\": \"Caption\",\n    \"card\": \"Card\",\n    \"carousel\": \"Carousel\",\n    \"carousel_content\": \"Carousel content\",\n    \"cart\": \"Cart\",\n    \"cart_items\": \"Cart items\",\n    \"cart_products\": \"Cart products\",\n    \"cart_title\": \"Cart\",\n    \"collapsible_row\": \"Collapsible row\",\n    \"collection\": \"Collection\",\n    \"collection_card\": \"Collection card\",\n    \"collection_card_image\": \"Image\",\n    \"collection_columns\": \"Collection columns\",\n    \"collection_container\": \"Collection\",\n    \"collection_description\": \"Collection description\",\n    \"collection_image\": \"Collection image\",\n    \"collection_info\": \"Collection info\",\n    \"collection_list\": \"Collection list\",\n    \"collection_title\": \"Collection title\",\n    \"collections\": \"Collections\",\n    \"collection_links\": \"Collection links\",\n    \"collection_links_spotlight\": \"Collection links: Spotlight\",\n    \"collection_links_text\": \"Collection links: Text\",\n    \"collections_bento\": \"Collection list: Bento\",\n    \"collections_carousel\": \"Collection list: Carousel\",\n    \"collections_editorial\": \"Collection list: Editorial\",\n    \"collections_grid\": \"Collection list: Grid\",\n    \"colors\": \"Colors\",\n    \"contact_form\": \"Contact form\",\n    // Name for layout container block in theme editor\n    \"content\": \"Content\",\n    \"content_grid\": \"Content grid\",\n    \"copyright\": \"Copyright\",\n    \"count\": \"Count\",\n    \"custom_section\": \"Custom section\",\n    \"description\": \"Description\",\n    // Block name for informational content containers\n    \"details\": \"Details\",\n    \"divider\": \"Divider\",\n    \"divider_section\": \"Divider\",\n    \"drawers\": \"Drawers\",\n    \"editorial\": \"Editorial\",\n    \"editorial_jumbo_text\": \"Editorial: Jumbo text\",\n    \"email_signup\": \"Email signup\",\n    \"excerpt\": \"Excerpt\",\n    \"facets\": \"Facets\",\n    \"faq_section\": \"FAQ\",\n    \"featured_collection\": \"Featured collection\",\n    \"featured_product\": \"Product highlight\",\n    \"featured_product_information\": \"Featured product\",\n    \"featured_image\": \"Featured image\",\n    \"filters\": \"Filtering and sorting\",\n    \"follow_on_shop\": \"Follow on Shop\",\n    \"footer\": \"Footer\",\n    \"footer_password\": \"Password footer\",\n    // Footer block containing copyright, policies, and social links\n    \"footer_utilities\": \"Footer utilities\",\n    \"grid_layout_selector\": \"Grid layout selector\",\n    // Layout container block that groups other content\n    \"group\": \"Group\",\n    \"header\": \"Header\",\n    \"heading\": \"Heading\",\n    \"hero\": \"Hero\",\n    \"hero_bottom_aligned\": \"Hero: Bottom aligned\",\n    \"hero_marquee\": \"Hero: Marquee\",\n    \"icon\": \"Icon\",\n    \"icons\": \"Icons\",\n    \"icons_with_text\": \"Icons with text\",\n    \"image\": \"Image\",\n    \"image_compare\": \"Image compare\",\n    \"image_with_text\": \"Image with text\",\n    \"input\": \"Input\",\n    \"input_fields\": \"Input fields\",\n    \"inputs\": \"Inputs\",\n    \"jumbo_text\": \"Jumbo text\",\n    \"large_logo\": \"Large logo\",\n    \"layered_slideshow\": \"Layered slideshow\",\n    \"list_items\": \"List items\",\n    \"local_pickup\": \"Local pickup\",\n    \"logo\": \"Logo\",\n    \"logo_and_favicon\": \"Logo and favicon\",\n    \"magazine_grid\": \"Magazine grid\",\n    // Scrolling text/content component with horizontal animation\n    \"marquee\": \"Marquee\",\n    \"marquee_section\": \"Marquee\",\n    // Block name for image/video component\n    \"media\": \"Media\",\n    \"media_with_text\": \"Media with text\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Mobile layout\",\n    \"multicolumn\": \"Multicolumn\",\n    \"rich_text_section\": \"Rich text\",\n    \"overlapping_blocks\": \"Overlapping blocks\",\n    \"page\": \"Page\",\n    // Theme block name for main page body content\n    \"page_content\": \"Content\",\n    \"page_layout\": \"Page layout\",\n    \"payment_icons\": \"Payment icons\",\n    \"policy_list\": \"Policy links\",\n    \"popovers_and_modals\": \"Popovers and modals\",\n    \"popup_link\": \"Popup link\",\n    \"predictive_search\": \"Search popover\",\n    \"predictive_search_empty\": \"Predictive search empty\",\n    \"price\": \"Price\",\n    \"prices\": \"Prices\",\n    \"primary_button\": \"Primary button\",\n    \"product\": \"Product\",\n    \"product_buy_buttons\": \"Buy buttons\",\n    \"product_card\": \"Product card\",\n    \"product_card_media\": \"Media\",\n    \"product_card_rendering\": \"Product card rendering\",\n    \"product_cards\": \"Product cards\",\n    \"product_description\": \"Description\",\n    // Layout option for displaying products in rows and columns\n    \"product_grid\": \"Grid\",\n    \"product_grid_main\": \"Product grid\",\n    \"product_hotspots\": \"Product hotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_image\": \"Product image\",\n    \"product_information\": \"Product information\",\n    \"product_list\": \"Featured collection\",\n    \"product_list_button\": \"View all button\",\n    \"product_media\": \"Product media\",\n    \"product_price\": \"Price\",\n    \"product_recommendations\": \"Recommended products\",\n    \"product_sku\": \"SKU\",\n    \"product_review_stars\": \"Review stars\",\n    \"product_variant_picker\": \"Variant picker\",\n    \"products_carousel\": \"Featured collection: Carousel\",\n    \"products_editorial\": \"Featured collection: Editorial\",\n    \"products_grid\": \"Featured collection: Grid\",\n    \"product_inventory\": \"Product inventory\",\n    \"product_custom_property\": \"Special instructions\",\n    \"pull_quote\": \"Pull quote\",\n    \"quantity\": \"Quantity\",\n    \"quick_order_list\": \"Quick order list\",\n    \"read_only\": \"Read only\",\n    \"row\": \"Row\",\n    \"search\": \"Search\",\n    \"search_input\": \"Search input\",\n    \"search_results\": \"Search results\",\n    \"secondary_button\": \"Secondary button\",\n    \"section\": \"Section\",\n    \"selected_variants\": \"Selected variants\",\n    \"size\": \"Size\",\n    \"slide\": \"Slide\",\n    \"slideshow\": \"Slideshow\",\n    \"slideshow_full_frame\": \"Slideshow: Full frame\",\n    \"slideshow_inset\": \"Slideshow: Inset\",\n    \"slideshow_controls\": \"Slideshow controls\",\n    \"social_link\": \"Social link\",\n    \"social_media_links\": \"Social media links\",\n    \"spacer\": \"Spacer\",\n    \"spacing\": \"Spacing\",\n    // Banner section with two side-by-side content panels\n    \"split_showcase\": \"Split showcase\",\n    // UI component name for step-by-step process display\n    \"steps\": \"Steps\",\n    \"styles\": \"Styles\",\n    \"subheading\": \"Subheading\",\n    \"submit_button\": \"Submit button\",\n    \"summary\": \"Summary\",\n    \"swatches\": \"Swatches\",\n    \"testimonials\": \"Testimonials\",\n    \"text\": \"Text\",\n    \"title\": \"Title\",\n    \"typography\": \"Typography\",\n    \"utilities\": \"Utilities\",\n    \"policies_and_links\": \"Policies and links\",\n    \"variant_pickers\": \"Variant pickers\",\n    \"variants\": \"Variants\",\n    \"video\": \"Video\",\n    \"video_section\": \"Video\",\n    \"view_all_button\": \"View all\",\n    \"pills\": \"Pills\",\n    \"comparison_slider\": \"Comparison slider\"\n  },\n  \"options\": {\n    \"above_carousel\": \"Above carousel\",\n    \"accent\": \"Accent\",\n    \"all\": \"All\",\n    \"always\": \"Always\",\n    \"apple\": \"Apple\",\n    \"arrow\": \"Arrow\",\n    \"arrows\": \"Arrows\",\n    \"arrows_large\": \"Large arrows\",\n    \"aspect_ratio\": \"Aspect ratio\",\n    \"auto\": \"Auto\",\n    \"balance\": \"Balance\",\n    \"banana\": \"Banana\",\n    \"below_image\": \"Below image\",\n    \"bento\": \"Bento\",\n    \"black\": \"Black\",\n    \"bluesky\": \"Bluesky\",\n    \"blur\": \"Blur\",\n    \"body\": \"Body\",\n    \"body_large\": \"Body (Large)\",\n    \"body_regular\": \"Body (Regular)\",\n    \"body_small\": \"Body (Small)\",\n    \"bold\": \"Bold\",\n    \"bottle\": \"Bottle\",\n    \"bottom\": \"Bottom\",\n    \"bottom_left\": \"Bottom left\",\n    \"bottom_right\": \"Bottom right\",\n    \"box\": \"Box\",\n    \"button\": \"Button\",\n    \"button_primary\": \"Primary button\",\n    \"button_secondary\": \"Secondary button\",\n    \"buttons\": \"Buttons\",\n    \"capitalize\": \"Capitalize\",\n    \"caption\": \"Caption\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carousel\",\n    // Icon selection option for carrot graphic\n    \"carrot\": \"Carrot\",\n    // Alignment option to center content horizontally or vertically\n    \"center\": \"Center\",\n    \"chat_bubble\": \"Chat bubble\",\n    \"check_box\": \"Check box\",\n    \"chevron\": \"Chevron\",\n    \"chevron_large\": \"Large chevrons\",\n    \"chevron_left\": \"Chevron left\",\n    \"chevron_right\": \"Chevron right\",\n    \"chevrons\": \"Chevrons\",\n    \"circle\": \"Circle\",\n    \"classic\": \"Classic\",\n    \"clipboard\": \"Clipboard\",\n    \"collection_images\": \"Collection images\",\n    \"color\": \"Color\",\n    \"compact\": \"Compact\",\n    \"complementary\": \"Complementary\",\n    // CSS object-fit property: scale media to fit container\n    \"contain\": \"Contain\",\n    // Pagination control showing current/total slide numbers (e.g. 1/5)\n    \"counter\": \"Counter\",\n    \"cover\": \"Cover\",\n    \"crop_to_fit\": \"Crop to fit\",\n    \"custom\": \"Custom\",\n    // Icon option representing dairy products\n    \"dairy\": \"Dairy\",\n    // Icon option for dietary restriction indication\n    \"dairy_free\": \"Dairy free\",\n    \"default\": \"Default\",\n    \"diamond\": \"Diamond\",\n    \"dissolve\": \"Dissolve\",\n    \"dots\": \"Dots\",\n    \"dotted\": \"Dotted\",\n    \"down\": \"Down\",\n    \"drawer\": \"Drawer\",\n    \"dropdowns\": \"Dropdowns\",\n    // Icon for laundry care symbol (machine dry)\n    \"dryer\": \"Dryer\",\n    \"editorial\": \"Editorial\",\n    // Text alignment option for end of reading direction\n    \"end\": \"End\",\n    \"extra_large\": \"Extra large\",\n    \"extra_small\": \"Extra small\",\n    // Icon option for decorative eye symbol\n    \"eye\": \"Eye\",\n    \"facebook\": \"Facebook\",\n    \"featured_collections\": \"Featured collections\",\n    \"featured_products\": \"Featured products\",\n    \"fill\": \"Fill\",\n    \"fire\": \"Fire\",\n    // Layout option for content sizing behavior\n    \"fit\": \"Fit\",\n    \"fit_content\": \"Fit\",\n    // Layout option for fixed positioning or sizing\n    \"fixed\": \"Fixed\",\n    \"font_primary\": \"Primary\",\n    \"font_secondary\": \"Secondary\",\n    \"font_tertiary\": \"Tertiary\",\n    // Animation direction option for marquee scrolling\n    \"forward\": \"Forward\",\n    // Width setting: full viewport width vs page width\n    \"full\": \"Full\",\n    \"full_and_page\": \"Full background, page-width content\",\n    \"full_and_page_offset_left\": \"Full background, page-width content, offset left\",\n    \"full_and_page_offset_right\": \"Full background, page-width content, offset right\",\n    \"full_screen\": \"Full screen\",\n    \"full_frame\": \"Full frame\",\n    \"gluten_free\": \"Gluten free\",\n    \"gradient\": \"Gradient\",\n    \"grid\": \"Grid\",\n    \"h1\": \"Heading 1\",\n    \"h2\": \"Heading 2\",\n    \"h3\": \"Heading 3\",\n    \"h4\": \"Heading 4\",\n    \"h5\": \"Heading 5\",\n    \"h6\": \"Heading 6\",\n    \"heading\": \"Heading\",\n    \"heading_extra_large\": \"Heading (Extra large)\",\n    \"heading_extra_small\": \"Heading (Extra small)\",\n    \"heading_large\": \"Heading (Large)\",\n    \"heading_regular\": \"Heading (Regular)\",\n    \"heading_small\": \"Heading (Small)\",\n    \"heart\": \"Heart\",\n    // Icon stroke weight option for thicker lines\n    \"heavy\": \"Heavy\",\n    \"hidden\": \"Hidden\",\n    // Subtle visual scroll indicator for mobile slideshow controls\n    \"hint\": \"Hint\",\n    \"horizontal\": \"Horizontal\",\n    \"icon\": \"Icon\",\n    \"icons\": \"Icons\",\n    \"image\": \"Image\",\n    \"input\": \"Input\",\n    \"inside_carousel\": \"Inside carousel\",\n    \"instagram\": \"Instagram\",\n    // Menu typography style with large child items\n    \"inverse_large\": \"Inverse large\",\n    \"inverse\": \"Inverse\",\n    // Clothes iron appliance icon for care instructions\n    \"iron\": \"Iron\",\n    \"landscape\": \"Landscape\",\n    \"large\": \"Large\",\n    \"large_arrows\": \"Large arrows\",\n    \"large_chevrons\": \"Large chevrons\",\n    \"leaf\": \"Leaf\",\n    \"leather\": \"Leather\",\n    \"left\": \"Left\",\n    // Size option, typically clothing size Large\n    \"lg\": \"LG\",\n    \"lift\": \"Lift\",\n    // Font weight option lighter than regular\n    \"light\": \"Light\",\n    \"lightning_bolt\": \"Lightning bolt\",\n    \"link\": \"Link\",\n    \"linkedin\": \"LinkedIn\",\n    \"lipstick\": \"Lipstick\",\n    \"lock\": \"Lock\",\n    \"loose\": \"Loose\",\n    \"lowercase\": \"lowercase\",\n    // Clothing size Medium, used in product filters\n    \"m\": \"M\",\n    \"maintain_aspect_ratio\": \"Maintain aspect ratio\",\n    \"map_pin\": \"Map pin\",\n    \"media_first\": \"Media first\",\n    \"media_second\": \"Media second\",\n    // Size/weight option between small/light and large/heavy\n    \"medium\": \"Medium\",\n    \"modal\": \"Modal\",\n    \"narrow\": \"Narrow\",\n    \"never\": \"Never\",\n    \"next_to_carousel\": \"Next to carousel\",\n    \"none\": \"None\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"No wrap\",\n    \"numbers\": \"Numbers\",\n    \"nut_free\": \"Nut free\",\n    \"off\": \"Off\",\n    \"off_media\": \"Off media\",\n    \"offset_left\": \"Offset left\",\n    \"offset_right\": \"Offset right\",\n    \"on_image\": \"On image\",\n    \"on_media\": \"On media\",\n    \"on_scroll_up\": \"On scroll up\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    // Star rating style showing empty star outlines\n    \"outline\": \"Outline\",\n    \"page\": \"Page\",\n    \"page_center_aligned\": \"Page, center aligned\",\n    \"page_left_aligned\": \"Page, left aligned\",\n    \"page_right_aligned\": \"Page, right aligned\",\n    \"pants\": \"Pants\",\n    \"paragraph\": \"Paragraph\",\n    \"parallelogram\": \"Parallelogram\",\n    \"paw_print\": \"Paw print\",\n    \"pepper\": \"Pepper\",\n    \"percent\": \"Percent\",\n    \"perfume\": \"Perfume\",\n    \"pill\": \"Pill\",\n    \"pills\": \"Pills\",\n    \"pinterest\": \"Pinterest\",\n    \"pixel\": \"Pixel\",\n    \"plane\": \"Plane\",\n    \"plant\": \"Plant\",\n    \"plus\": \"Plus\",\n    \"portrait\": \"Portrait\",\n    \"pretty\": \"Pretty\",\n    \"preview\": \"Preview\",\n    \"price\": \"Price\",\n    \"price_tag\": \"Price tag\",\n    \"primary\": \"Primary\",\n    \"primary_style\": \"Primary style\",\n    \"question_mark\": \"Question mark\",\n    \"rectangle\": \"Rectangle\",\n    // Icon option for displaying a recycling symbol\n    \"recycle\": \"Recycle\",\n    \"regular\": \"Regular\",\n    // Product recommendation type option in dropdown\n    \"related\": \"Related\",\n    // Icon option showing left-pointing curved arrow\n    \"return\": \"Return\",\n    // Text animation effect that slides characters into view\n    \"reveal\": \"Reveal\",\n    \"reverse\": \"Reverse\",\n    \"rich_text\": \"Rich text\",\n    // Positional option for alignment/layout (opposite of left)\n    \"right\": \"Right\",\n    \"rounded\": \"Rounded\",\n    \"ruler\": \"Ruler\",\n    \"s\": \"S\",\n    \"scale\": \"Scale\",\n    \"secondary\": \"Secondary\",\n    \"secondary_style\": \"Secondary style\",\n    \"semibold\": \"Semibold\",\n    \"sentence\": \"Sentence\",\n    \"serving_dish\": \"Serving dish\",\n    \"shaded\": \"Shaded\",\n    \"shirt\": \"Shirt\",\n    \"shoe\": \"Shoe\",\n    \"show_second_image\": \"Show second image\",\n    \"silhouette\": \"Silhouette\",\n    \"single\": \"Single\",\n    \"slide_left\": \"Slide left\",\n    \"slide_up\": \"Slide up\",\n    \"small\": \"Small\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Snowflake\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    // Uniform style option for borders and overlays\n    \"solid\": \"Solid\",\n    \"space_between\": \"Space between\",\n    \"spotify\": \"Spotify\",\n    \"spotlight\": \"Spotlight\",\n    \"square\": \"Square\",\n    // Layout option to arrange elements vertically\n    \"stack\": \"Stack\",\n    // Size option for header height, larger than compact\n    \"standard\": \"Standard\",\n    // Star-shaped icon option for decorative use\n    \"star\": \"Star\",\n    // CSS logical alignment option, beginning position\n    \"start\": \"Start\",\n    \"stopwatch\": \"Stopwatch\",\n    \"subheading\": \"Subheading\",\n    \"subtle_zoom\": \"Zoom\",\n    \"swatches\": \"Swatches\",\n    // Third-level option in font/typography hierarchy\n    \"tertiary\": \"Tertiary\",\n    \"text\": \"Text\",\n    \"text_only\": \"Text only\",\n    // Icon stroke thickness option, thinnest weight\n    \"thin\": \"Thin\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Thumbnails\",\n    // Typography spacing option for line height and letter spacing\n    \"tight\": \"Tight\",\n    \"tiktok\": \"TikTok\",\n    \"top\": \"Top\",\n    \"top_left\": \"Top left\",\n    \"top_right\": \"Top right\",\n    \"truck\": \"Truck\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Underline\",\n    // Gradient direction option, upward flow\n    \"up\": \"Up\",\n    \"uppercase\": \"Uppercase\",\n    \"vertical\": \"Vertical\",\n    \"video\": \"Video\",\n    \"video_external_url\": \"External URL\",\n    \"video_uploaded\": \"Uploaded\",\n    \"vimeo\": \"Vimeo\",\n    // Icon option for washing machine or laundry symbol\n    \"washing\": \"Washing\",\n    \"wide\": \"Wide\",\n    \"youtube\": \"YouTube\",\n    \"with_hints\": \"With hints\",\n    \"below_media\": \"Below media\"\n  },\n  \"settings\": {\n    \"accordion\": \"Accordion\",\n    \"account\": \"Account\",\n    \"actions_display_style\": \"Menu style\",\n    \"alignment\": \"Alignment\",\n    \"alignment_mobile\": \"Mobile alignment\",\n    \"align_baseline\": \"Align text baseline\",\n    \"animation\": \"Animation\",\n    \"animation_repeat\": \"Repeat animation\",\n    \"add_discount_code\": \"Allow discounts in cart\",\n    \"add_to_cart_animation\": \"Add to cart\",\n    \"always_stack_buttons\": \"Always stack buttons\",\n    \"aspect_ratio\": \"Aspect ratio\",\n    \"custom_mobile_media\": \"Show different media on mobile\",\n    \"stack_media_on_mobile\": \"Stack media\",\n    \"auto_rotate_announcements\": \"Auto-rotate announcements\",\n    \"auto_rotate_slides\": \"Auto-rotate slides\",\n    \"auto_load_products\": \"Auto load products on scroll\",\n    \"autoplay\": \"Autoplay\",\n    \"background\": \"Background\",\n    \"background_color\": \"Background color\",\n    \"background_overlay\": \"Background overlay\",\n    \"badge_corner_radius\": \"Corner radius\",\n    \"background_media\": \"Background media\",\n    \"badge_position\": \"Position on cards\",\n    // Color scheme setting for sale badges on product cards\n    \"badge_sale_color_scheme\": \"Sale\",\n    \"badge_sold_out_color_scheme\": \"Sold out\",\n    // Display type selection for popup content (modal vs drawer)\n    \"behavior\": \"Behavior\",\n    \"blog\": \"Blog\",\n    \"blur\": \"Shadow blur\",\n    \"blurred_reflection\": \"Blurred reflection\",\n    \"border\": \"Border\",\n    \"border_opacity\": \"Border opacity\",\n    \"border_radius\": \"Corner radius\",\n    \"border_style\": \"Border style\",\n    \"border_thickness\": \"Border thickness\",\n    \"border_width\": \"Border thickness\",\n    \"borders\": \"Borders\",\n    \"bottom\": \"Bottom\",\n    \"bullseye_color\": \"Inner color\",\n    \"bottom_row\": \"Bottom row\",\n    \"bottom_padding\": \"Bottom padding\",\n    \"button\": \"Button\",\n    \"button_text_case\": \"Text case\",\n    \"card_height\": \"Card height\",\n    \"card_hover_effect\": \"Card hover effect\",\n    \"card_image_height\": \"Product image height\",\n    \"card_size\": \"Card size\",\n    \"carousel_on_mobile\": \"Carousel on mobile\",\n    \"cart_count\": \"Cart count\",\n    \"cart_items\": \"Cart items\",\n    \"cart_related_products\": \"Related products\",\n    \"cart_title\": \"Cart\",\n    \"cart_total\": \"Cart total\",\n    // Setting label for cart display format (page vs drawer)\n    \"cart_type\": \"Type\",\n    \"auto_open_cart_drawer\": \"\\\"Add to cart\\\" auto-opens drawer\",\n    // Text case setting for typography (uppercase/lowercase)\n    \"case\": \"Case\",\n    \"checkout_buttons\": \"Accelerated checkout buttons\",\n    \"collection\": \"Collection\",\n    \"collection_count\": \"Collection count\",\n    \"collection_list\": \"Collections\",\n    \"collection_templates\": \"Collection templates\",\n    \"collection_title_case\": \"Collection title case\",\n    \"color\": \"Color\",\n    \"color_scheme\": \"Color scheme\",\n    \"colors\": \"Colors\",\n    \"columns\": \"Columns\",\n    // Layout container block name for grouping other blocks\n    \"content\": \"Content\",\n    \"content_alignment\": \"Content alignment\",\n    \"content_direction\": \"Content direction\",\n    \"content_position\": \"Content position\",\n    \"content_width\": \"Content width\",\n    \"corner_radius\": \"Corner radius\",\n    \"country_region\": \"Country/Region\",\n    \"cover_image\": \"Cover image\",\n    \"cover_image_size\": \"Cover image size\",\n    \"currency_code\": \"Currency code\",\n    \"custom_height\": \"Custom height\",\n    \"custom_minimum_height\": \"Custom minimum height\",\n    // Checkbox to enable separate size settings for mobile devices\n    \"custom_mobile_size\": \"Custom mobile size\",\n    \"custom_mobile_width\": \"Custom mobile width\",\n    \"custom_width\": \"Custom width\",\n    \"custom_liquid\": \"Liquid code\",\n    // Primary color scheme option, not specialized variants\n    \"default\": \"Default\",\n    \"default_logo\": \"Default logo\",\n    \"desktop_height\": \"Desktop height\",\n    \"desktop_pagination\": \"Desktop pagination\",\n    \"direction\": \"Direction\",\n    // Button appearance for email signup form\n    \"display\": \"Display\",\n    \"divider\": \"Divider\",\n    \"divider_color\": \"Divider\",\n    \"divider_thickness\": \"Divider thickness\",\n    \"divider_width\": \"Divider width\",\n    \"dividers\": \"Dividers\",\n    \"drop_shadow\": \"Drop shadow\",\n    \"empty_cart_button_link\": \"Empty cart button link\",\n    // Collection setting for products shown before search input\n    \"empty_state_collection\": \"Empty state collection\",\n    \"empty_state_collection_info\": \"Shown before a search is entered\",\n    \"enable_filtering\": \"Filters\",\n    \"enable_grid_density\": \"Grid layout control\",\n    \"enable_sorting\": \"Sorting\",\n    \"enable_sticky_add_to_cart\": \"Sticky add to cart bar\",\n    \"enable_sticky_content\": \"Sticky content on desktop\",\n    \"enable_video_looping\": \"Video looping\",\n    \"enable_zoom\": \"Enable zoom\",\n    \"equal_columns\": \"Equal columns\",\n    \"error_color\": \"Error\",\n    \"expand_first_group\": \"Expand first group\",\n    \"extend_media_to_screen_edge\": \"Extend media to screen edge\",\n    \"extend_summary\": \"Extend to screen edge\",\n    \"extra_large\": \"Extra large\",\n    \"extra_small\": \"Extra small\",\n    \"favicon\": \"Favicon\",\n    \"filter_style\": \"Filter style\",\n    \"first_row_media_position\": \"First row media position\",\n    \"fixed_height\": \"Pixel height\",\n    \"fixed_width\": \"Pixel width\",\n    // Checkbox to show country flag icon in localization selector\n    \"flag\": \"Flag\",\n    \"font\": \"Font\",\n    \"font_family\": \"Font family\",\n    \"font_price\": \"Price font\",\n    \"font_weight\": \"Font weight\",\n    \"full_width_first_image\": \"Full width first image\",\n    \"full_width_on_mobile\": \"Full width on mobile\",\n    \"gap\": \"Gap\",\n    // CSS Y-axis transform setting for vertical positioning (legacy/unused)\n    \"geometric_translate_y\": \"Geometric translate Y\",\n    \"gift_card_form\": \"Gift card form\",\n    \"gradient_direction\": \"Gradient direction\",\n    \"heading\": \"Heading\",\n    \"heading_preset\": \"Heading preset\",\n    \"headings\": \"Headings\",\n    \"height\": \"Height\",\n    \"hide_logo_on_home_page\": \"Hide logo on home page\",\n    // Checkbox to hide padding control settings\n    \"hide_padding\": \"Hide padding\",\n    \"hide_unselected_variant_media\": \"Hide unselected variant media\",\n    \"horizontal_gap\": \"Horizontal gap\",\n    \"hotspot_color\": \"Hotspot color\",\n    \"horizontal_offset\": \"Shadow horizontal offset\",\n    \"horizontal_padding\": \"Horizontal padding\",\n    \"hover_background\": \"Hover background\",\n    \"hover_behavior\": \"Hover behavior\",\n    \"hover_borders\": \"Hover borders\",\n    \"hover_text\": \"Hover text\",\n    \"icon\": \"Icon\",\n    \"icon_background\": \"Icon background\",\n    \"icons\": \"Icons\",\n    \"image\": \"Image\",\n    \"image_1\": \"Image 1\",\n    \"image_2\": \"Image 2\",\n    \"image_border_radius\": \"Image corner radius\",\n    \"image_gap\": \"Image gap\",\n    // Image picker setting to upload custom image as icon\n    \"image_icon\": \"Image icon\",\n    \"image_opacity\": \"Image opacity\",\n    \"image_position\": \"Image position\",\n    \"image_ratio\": \"Image ratio\",\n    \"inherit_color_scheme\": \"Inherit color scheme\",\n    \"inventory_threshold\": \"Low stock threshold\",\n    \"inverse\": \"Inverse\",\n    \"inverse_logo\": \"Inverse logo\",\n    \"installments\": \"Installments\",\n    // Checkbox to embed submit button inside email input field\n    \"integrated_button\": \"Integrated button\",\n    \"items_to_show\": \"Items to show\",\n    \"label\": \"Label\",\n    \"language_selector\": \"Language selector\",\n    \"large\": \"Large\",\n    \"layout\": \"Layout\",\n    \"layout_gap\": \"Layout gap\",\n    // Layout presentation option for displaying items\n    \"layout_style\": \"Style\",\n    // Layout display format (grid, carousel, etc.)\n    \"layout_type\": \"Type\",\n    \"left\": \"Left\",\n    \"left_padding\": \"Left padding\",\n    \"length\": \"Length\",\n    \"letter_spacing\": \"Letter spacing\",\n    \"limit_content_width\": \"Limit content width\",\n    \"limit_media_to_screen_height\": \"Constrain to screen height\",\n    \"limit_product_details_width\": \"Limit product details width\",\n    \"line_height\": \"Line height\",\n    \"link\": \"Link\",\n    \"custom_link\": \"Custom link\",\n    \"link_preset\": \"Link preset\",\n    \"links\": \"Links\",\n    \"logo\": \"Logo\",\n    \"logo_font\": \"Logo font\",\n    \"loop\": \"Loop\",\n    \"make_details_sticky_desktop\": \"Sticky on desktop\",\n    \"make_section_full_width\": \"Make section full width\",\n    \"max_width\": \"Max width\",\n    // Section header for product card media settings\n    \"media\": \"Media\",\n    \"media_fit\": \"Media fit\",\n    \"media_height\": \"Media height\",\n    \"media_overlay\": \"Media overlay\",\n    \"media_position\": \"Media position\",\n    \"media_type\": \"Media type\",\n    \"media_width\": \"Media width\",\n    \"menu\": \"Menu\",\n    \"minimum_height\": \"Minimum height\",\n    \"mobile_card_size\": \"Mobile card size\",\n    \"mobile_columns\": \"Mobile columns\",\n    \"mobile_height\": \"Mobile height\",\n    \"mobile_logo_image\": \"Mobile logo\",\n    \"mobile_pagination\": \"Mobile pagination\",\n    \"mobile_quick_add\": \"Mobile quick add\",\n    \"motion\": \"Motion\",\n    \"motion_direction\": \"Motion direction\",\n    \"movement_direction\": \"Movement direction\",\n    \"navigation\": \"Navigation\",\n    \"navigation_bar\": \"Navigation bar\",\n    \"navigation_bar_color_scheme\": \"Navigation bar color scheme\",\n    \"opacity\": \"Opacity\",\n    \"open_new_tab\": \"Open link in new tab\",\n    \"open_row_by_default\": \"Open row by default\",\n    \"overlay\": \"Overlay\",\n    \"overlay_color\": \"Overlay color\",\n    \"overlay_opacity\": \"Overlay opacity\",\n    \"overlay_style\": \"Overlay style\",\n    \"padding\": \"Padding\",\n    \"padding_bottom\": \"Padding bottom\",\n    \"padding_horizontal\": \"Padding horizontal\",\n    \"padding_top\": \"Padding top\",\n    \"page\": \"Page\",\n    \"page_transition_enabled\": \"Page transition\",\n    \"page_width\": \"Page width\",\n    \"pagination\": \"Pagination\",\n    \"percent_height\": \"Percent height\",\n    \"percent_size\": \"Percent size\",\n    \"percent_size_mobile\": \"Percent size\",\n    \"percent_width\": \"Percent width\",\n    \"pixel_size\": \"Pixel size\",\n    \"pixel_size_mobile\": \"Pixel size\",\n    \"placement\": \"Placement\",\n    \"position\": \"Position\",\n    \"desktop_position\": \"Desktop position\",\n    \"post_count\": \"Post count\",\n    \"preset\": \"Preset\",\n    \"product_price_typography\": \"Product price typography\",\n    \"product_title_typography\": \"Product title typography\",\n    \"primary_button_background\": \"Primary button background\",\n    \"primary_button_border\": \"Primary button border\",\n    \"primary_button_text\": \"Primary button text\",\n    // Color setting for clickable hyperlinks throughout the theme\n    \"primary_color\": \"Links\",\n    \"primary_font\": \"Primary font\",\n    \"primary_hover_color\": \"Hover links\",\n    \"product\": \"Product\",\n    \"product_and_card_title_case\": \"Product and card title case\",\n    // Checkbox to enable image carousel within product cards\n    \"product_card_carousel\": \"Show carousel\",\n    \"product_cards\": \"Product cards\",\n    \"product_count\": \"Product count\",\n    \"product_pages\": \"Product pages\",\n    \"product_templates\": \"Product templates\",\n    // Setting label for text capitalization of product titles\n    \"product_title_case\": \"Product title case\",\n    \"product_type\": \"Product type\",\n    \"products\": \"Products\",\n    \"products_per_page\": \"Products per page\",\n    \"product_custom_property\": {\n      \"heading\": \"Heading\",\n      \"description\": \"Description\",\n      \"key\": \"Property name\",\n      \"key_info\": \"Cannot be blank and must be unique for each block. Shows in cart, checkout, and order details.\",\n      \"placeholder_text\": \"Placeholder text\",\n      \"default_heading\": \"Customize your product\",\n      \"default_placeholder\": \"Enter your special instructions\",\n      \"default_property_key\": \"Special instructions\",\n      \"max_length\": \"Max characters\",\n      \"required\": \"Input required to add item to cart\",\n      \"input_type\": \"Input type\",\n      \"input_type_text\": \"Text\",\n      \"input_type_checkbox\": \"Checkbox\",\n      \"content_settings\": \"Content settings\",\n      \"buyers_input\": \"Buyer input\",\n      \"checkbox_label\": \"Checkbox label\",\n      \"default_checkbox_label\": \"Include gift wrapping\",\n      \"heading_preset\": \"Heading\",\n      \"description_preset\": \"Description\",\n      \"input_preset\": \"Input\",\n      \"checkbox_preset\": \"Checkbox label\"\n    },\n    // Checkbox setting to enable quick add to cart from product cards\n    \"quick_add\": \"Quick add\",\n    // Color scheme for quick add buttons on product cards\n    \"quick_add_colors\": \"Quick add colors\",\n    \"ratio\": \"Ratio\",\n    \"read_only\": \"Read only\",\n    \"reflection_opacity\": \"Reflection opacity\",\n    // Font weight option (400 weight, not bold or light)\n    \"regular\": \"Regular\",\n    \"review_count\": \"Review count\",\n    \"right\": \"Right\",\n    \"right_padding\": \"Right padding\",\n    \"row\": \"Row\",\n    \"scroll_speed\": \"Time to next announcement\",\n    \"search\": \"Search\",\n    \"search_icon\": \"Search icon\",\n    // Setting for search bar placement in header\n    \"search_position\": \"Position\",\n    \"search_row\": \"Row\",\n    \"row_height\": \"Row height\",\n    \"secondary_button_background\": \"Secondary button background\",\n    \"secondary_button_border\": \"Secondary button border\",\n    \"secondary_button_text\": \"Secondary button text\",\n    \"secondary_font\": \"Secondary font\",\n    \"section_width\": \"Section width\",\n    \"seller_note\": \"Allow note to seller\",\n    \"seller_note_open_by_default\": \"Open note to seller by default\",\n    \"shadow_color\": \"Shadow\",\n    \"shadow_opacity\": \"Shadow opacity\",\n    // Background shape for carousel navigation buttons\n    \"shape\": \"Shape\",\n    // Checkbox label to toggle visibility of UI elements\n    \"show\": \"Show\",\n    \"show_as_accordion\": \"Show as accordion on mobile\",\n    \"show_author\": \"Author\",\n    \"show_alignment\": \"Show alignment\",\n    \"show_count\": \"Show count\",\n    \"show_date\": \"Date\",\n    \"show_filter_label\": \"Text labels for applied filters\",\n    \"show_grid_layout_selector\": \"Show grid layout selector\",\n    \"show_inventory_quantity\": \"Show low stock quantity\",\n    \"show_pickup_availability\": \"Show pickup availability\",\n    \"show_powered_by_shopify\": \"Show \\\"Powered by Shopify\\\"\",\n    \"show_sale_price_first\": \"Show sale price first\",\n    \"show_search\": \"Show search\",\n    \"show_second_image_on_hover\": \"Show second image on hover\",\n    \"show_swatch_label\": \"Text labels for swatches\",\n    \"show_tax_info\": \"Tax information\",\n    // Font size or element dimensions setting\n    \"size\": \"Size\",\n    \"skus\": \"SKUs\",\n    \"size_mobile\": \"Mobile size\",\n    \"slide_spacing\": \"Slide gap\",\n    \"slide_width\": \"Slide width\",\n    \"slideshow_fullwidth\": \"Full width slides\",\n    \"small\": \"Small\",\n    // Animation timing control for slideshows and announcements\n    \"speed\": \"Speed\",\n    // Financial statement or account summary setting\n    \"statement\": \"Statement\",\n    \"sticky_add_to_cart\": \"Sticky add to cart\",\n    \"sticky_header\": \"Sticky header\",\n    // Icon line thickness setting label\n    \"stroke\": \"Stroke\",\n    \"style\": \"Style\",\n    \"submenu_size\": \"Submenu size\",\n    \"success_color\": \"Success\",\n    \"swatches\": \"Swatches\",\n    \"tertiary_font\": \"Tertiary font\",\n    // Generic label for text-related settings (content or color)\n    \"text\": \"Text\",\n    // Text capitalization setting for typography (uppercase/lowercase)\n    \"text_case\": \"Case\",\n    \"text_hierarchy\": \"Text hierarchy\",\n    \"text_label_case\": \"Text label case\",\n    \"text_presets\": \"Text presets\",\n    // Pixel width setting for borders, dividers, or lines\n    \"thickness\": \"Thickness\",\n    \"title\": \"Title\",\n    // Label for range input controlling top spacing/margin\n    \"top\": \"Top\",\n    \"top_level_size\": \"Top level size\",\n    \"top_padding\": \"Top padding\",\n    \"transition_to_main_product\": \"Product card to product page transition\",\n    \"transparent_background\": \"Transparent background\",\n    // Label for dropdown to select type/category\n    \"type\": \"Type\",\n    \"type_preset\": \"Text preset\",\n    \"underline_thickness\": \"Underline thickness\",\n    // Measurement unit selector (pixel vs percent)\n    \"unit\": \"Unit\",\n    \"use_inverse_logo\": \"Use inverse logo\",\n    \"variant_images\": \"Variant images\",\n    \"variant_per_page\": \"Variants per page\",\n    \"vendor\": \"Vendor\",\n    \"vertical_gap\": \"Vertical gap\",\n    \"vertical_offset\": \"Shadow vertical offset\",\n    // Layout setting: stacks content vertically on mobile\n    \"vertical_on_mobile\": \"Vertical on mobile\",\n    \"vertical_padding\": \"Vertical padding\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alt text\",\n    \"video_autoplay\": \"Autoplay\",\n    \"video_cover_image\": \"Cover image\",\n    \"video_external_url\": \"URL\",\n    \"video_loop\": \"Loop video\",\n    \"video_position\": \"Video position\",\n    \"video_source\": \"Source\",\n    \"view_all_as_last_card\": \"\\\"View all\\\" as last card\",\n    \"view_more_show\": \"Show View more button\",\n    \"visibility\": \"Visibility\",\n    // Typography setting for font weight/thickness\n    \"weight\": \"Weight\",\n    \"width\": \"Width\",\n    \"width_desktop\": \"Desktop width\",\n    \"width_mobile\": \"Mobile width\",\n    \"wrap\": \"Wrap\",\n    \"z_index\": \"Z-index\",\n    \"product_corner_radius\": \"Product corner radius\",\n    \"card_corner_radius\": \"Card corner radius\",\n    \"media_type_1\": \"Media type\",\n    \"media_type_2\": \"Media 2 type\",\n    \"full_frame_on_mobile\": \"Full width on mobile\",\n    \"after_image\": \"After image\",\n    \"before_image\": \"Before image\",\n    \"cs_slider_style\": \"Slider style\",\n    \"cs_slider_color\": \"Slider color\",\n    \"cs_slider_inner_color\": \"Slider inner color\",\n    \"text_on_images\": \"Text on images\",\n    \"x_position\": \"Horizontal position\",\n    \"y_position\": \"Vertical position\"\n  },\n  \"text_defaults\": {\n    \"accordion_heading\": \"Accordion heading\",\n    \"are_purchases_final_sale\": \"Are any purchases final sale?\",\n    \"be_bold\": \"Be bold.\",\n    \"bestsellers\": \"Bestsellers\",\n    \"button_label\": \"Shop now\",\n    \"care_instructions\": \"Care instructions\",\n    \"cart\": \"Cart\",\n    \"collapsible_row\": \"Collapsible row\",\n    \"contact_form_button_label\": \"Submit\",\n    \"discover_collection\": \"Discover the collection\",\n    \"email_signup_button_label\": \"Subscribe\",\n    \"featured_collection\": \"Featured collection\",\n    \"fit\": \"fit\",\n    \"heading\": \"Heading\",\n    \"how_much_for_shipping\": \"How much does shipping cost?\",\n    \"learn_more\": \"Learn more\",\n    \"manufacturing\": \"Manufacturing\",\n    \"materials\": \"Materials\",\n    \"new_arrivals\": \"New arrivals\",\n    \"popup_link\": \"Popup link\",\n    \"return_policy\": \"Return policy\",\n    \"shipping\": \"Shipping\",\n    \"shop_now_button_label\": \"Shop now\",\n    \"shop_our_latest_arrivals\": \"Shop our latest arrivals!\",\n    \"shop_the_look\": \"Shop the look\",\n    \"sign_up_button_label\": \"Sign up\",\n    \"sign_up\": \"Sign up\",\n    \"submit_button_label\": \"Submit\",\n    \"trending_now\": \"Trending now\",\n    \"up_the_ante\": \"Up\\nThe\\nAnte\",\n    \"view_all_button_label\": \"View all\",\n    \"welcome_to_our_store\": \"Welcome to our store\",\n    \"what_is_return_policy\": \"What is the return policy?\",\n    \"when_will_order_arrive\": \"When will I get my order?\",\n    \"where_are_products_made\": \"Where are your products manufactured?\"\n  }\n}\n"
  },
  {
    "path": "locales/es.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Cargar video: {{ description }}\",\n    \"sold_out\": \"Agotado\",\n    \"email_signup\": {\n      \"label\": \"Correo electrónico\",\n      \"placeholder\": \"Dirección de correo electrónico\",\n      \"success\": \"¡Gracias por suscribirte!\"\n    },\n    \"filter\": \"Filtro\",\n    \"payment_methods\": \"Formas de pago\",\n    \"contact_form\": {\n      \"name\": \"Nombre\",\n      \"email\": \"Correo electrónico\",\n      \"phone\": \"Teléfono\",\n      \"comment\": \"Comentario\",\n      \"post_success\": \"Gracias por contactarnos. Te responderemos lo antes posible.\",\n      \"error_heading\": \"Realiza los ajustes siguientes:\"\n    },\n    \"slider_label\": \"Carrusel\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Reproducir el modelo 3D\",\n    \"play_video\": \"Reproducir el video\",\n    \"unit_price\": \"Precio unitario\",\n    \"country_results_count\": \"{{ count }} resultados\",\n    \"slideshow_pause\": \"Pausar la presentación de diapositivas\",\n    \"slideshow_play\": \"Reproducir la presentación de diapositivas\",\n    \"remove_item\": \"Eliminar {{ title}}\",\n    \"skip_to_text\": \"Ir directamente al contenido\",\n    \"skip_to_product_info\": \"Ir directamente a la información del producto\",\n    \"skip_to_results_list\": \"Omitir para ir a lista de resultados\",\n    \"new_window\": \"Se abre en una ventana nueva.\",\n    \"slideshow_next\": \"Siguiente diapositiva\",\n    \"slideshow_previous\": \"Diapositiva anterior\",\n    \"close_dialog\": \"Cerrar diálogo\",\n    \"reset_search\": \"Restablecer la búsqueda\",\n    \"search_results_count\": \"{{ count }} resultados de búsqueda para \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"No se encontraron resultados para \\\"{{ query }}\\\"\",\n    \"filters\": \"Filtros\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtro aplicado\",\n      \"other\": \"{{ count }} filtros aplicados\",\n      \"many\": \"{{ count }} filtros aplicados\"\n    },\n    \"account\": \"Cuenta\",\n    \"cart\": \"Carrito\",\n    \"cart_count\": \"Total de artículos en el carrito\",\n    \"menu\": \"Menú\",\n    \"country_region\": \"País o región\",\n    \"slide_status\": \"Diapositiva {{ index }} de {{ length }}\",\n    \"scroll_to\": \"Desplázate a {{ title }}\",\n    \"loading_product_recommendations\": \"Carga de recomendaciones de productos\",\n    \"discount\": \"Aplicar un código de descuento\",\n    \"discount_menu\": \"Códigos de descuento\",\n    \"discount_applied\": \"Aplicar código de descuento: {{ code }}\",\n    \"pause_video\": \"Pausar el video\",\n    \"inventory_status\": \"Estado del inventario\",\n    \"find_country\": \"Buscar país\",\n    \"localization_region_and_language\": \"Selector de región e idioma\",\n    \"decrease_quantity\": \"Disminuir cantidad\",\n    \"increase_quantity\": \"Aumentar cantidad\",\n    \"quantity\": \"Cantidad\",\n    \"rating\": \"La calificación de este producto es {{ rating }} de 5\",\n    \"nested_product\": \"{{ product_title }} para {{ parent_title }}\",\n    \"remove\": \"Eliminar\",\n    \"view_pricing_info\": \"Ver la información de fijación de precios\",\n    \"open_hotspot\": \"Abrir el punto de acceso\",\n    \"slideshow\": \"Presentación de diapositivas\",\n    \"header_navigation_label\": \"Principal\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Agregar al carrito\",\n    \"clear_all\": \"Borrar todo\",\n    \"remove\": \"Eliminar\",\n    \"view_in_your_space\": \"Ver en tu espacio\",\n    \"show_filters\": \"Filtro\",\n    \"clear\": \"Borrar\",\n    \"continue_shopping\": \"Seguir comprando\",\n    \"log_in_html\": \"¿Tienes una cuenta? <a href=\\\"{{ link }}\\\">Inicia sesión</a> para pagar más rápido.\",\n    \"see_items\": {\n      \"one\": \"Ver {{ count }} artículo\",\n      \"other\": \"Ver {{ count }} artículos\",\n      \"many\": \"Ver {{ count }} artículos\"\n    },\n    \"view_all\": \"Ver todo\",\n    \"add\": \"Añadir\",\n    \"choose\": \"Elegir\",\n    \"added\": \"Agregada\",\n    \"show_less\": \"Mostrar menos\",\n    \"show_more\": \"Mostrar más\",\n    \"close\": \"Cerrar\",\n    \"more\": \"Más\",\n    \"reset\": \"Restablecer\",\n    \"zoom\": \"Ampliar\",\n    \"close_dialog\": \"Cerrar diálogo\",\n    \"submit\": \"Enviar\",\n    \"back\": \"Atrás\",\n    \"log_in\": \"Iniciar sesión\",\n    \"log_out\": \"Cerrar sesión\",\n    \"remove_discount\": \"Eliminar el descuento {{ code }}\",\n    \"enter_using_password\": \"Entrar con contraseña\",\n    \"enter_password\": \"Introducir la contraseña\",\n    \"view_store_information\": \"Ver la información de la tienda\",\n    \"apply\": \"Aplicar\",\n    \"open_image_in_full_screen\": \"Abrir imagen a pantalla completa\",\n    \"sign_in_options\": \"Otras opciones de inicio de sesión\",\n    \"sign_up\": \"Registrarse\",\n    \"sort\": \"Ordenar\",\n    \"show_all_options\": \"Mostrar todas las opciones\",\n    \"open\": \"Abrir\"\n  },\n  \"content\": {\n    \"reviews\": \"reseñas\",\n    \"language\": \"Idioma\",\n    \"localization_region_and_language\": \"Región e idioma\",\n    \"no_results_found\": \"No se han encontrado resultados\",\n    \"cart_total\": \"Total del carrito\",\n    \"your_cart_is_empty\": \"Tu carrito esta vacío\",\n    \"product_image\": \"Imagen del producto\",\n    \"product_information\": \"Información del producto\",\n    \"quantity\": \"Cantidad\",\n    \"product_total\": \"Total del producto\",\n    \"cart_estimated_total\": \"Total estimado\",\n    \"seller_note\": \"Instrucciones especiales\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Descuentos\",\n    \"discount\": \"Descuento\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Aranceles e impuestos incluidos. Descuentos y <a href=\\\"{{ link }}\\\">envío</a> calculados en la página de pago.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Aranceles e impuestos incluidos. Descuentos y envío calculados en la pantalla de pago.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Impuestos incluidos. Descuentos y <a href=\\\"{{ link }}\\\">envío</a> calculados en la página de pago.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Impuestos incluidos. Descuentos y envío calculados en la pantalla de pago.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Aranceles incluidos. Impuestos, descuentos y <a href=\\\"{{ link }}\\\">envío</a> calculados en la página de pago.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Aranceles incluidos. Impuestos, descuentos y envío calculados en la página de pago.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Impuestos, descuentos y <a href=\\\"{{ link }}\\\">envío</a> calculados en la página de pago.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Impuestos, descuentos y envío calculados en la página de pago.\",\n    \"checkout\": \"Pagar\",\n    \"cart_title\": \"Carrito\",\n    \"price\": \"Precio\",\n    \"price_regular\": \"Precio habitual\",\n    \"price_compare_at\": \"Precio de comparación\",\n    \"price_sale\": \"Precio de oferta\",\n    \"duties_and_taxes_included\": \"Aranceles e impuestos incluidos.\",\n    \"duties_included\": \"Aranceles incluidos.\",\n    \"shipping_policy_html\": \"Los <a href=\\\"{{ link }}\\\">gastos de envío</a> se calculan en la página de pago.\",\n    \"taxes_included\": \"Impuestos incluidos.\",\n    \"product_badge_sold_out\": \"Agotado\",\n    \"product_badge_sale\": \"Oferta\",\n    \"grid_view\": {\n      \"default_view\": \"Predeterminado\",\n      \"grid_fieldset\": \"Columna de cuadrícula\",\n      \"single_item\": \"Única\",\n      \"zoom_out\": \"Alejar\"\n    },\n    \"search_input_label\": \"Buscar\",\n    \"search_input_placeholder\": \"Buscar\",\n    \"search_results\": \"Resultados de la búsqueda\",\n    \"search_results_label\": \"Resultados de la búsqueda\",\n    \"search_results_no_results\": \"No se encontró ningún resultado para \\\"{{ terms }}\\\". Prueba con otra búsqueda.\",\n    \"search_results_resource_articles\": \"Artículos del blog\",\n    \"search_results_resource_collections\": \"Colecciones\",\n    \"search_results_resource_pages\": \"Páginas\",\n    \"search_results_resource_products\": \"Productos\",\n    \"search_results_resource_queries\": \"Sugerencias de búsqueda\",\n    \"search_results_view_all\": \"Ver todo\",\n    \"search_results_view_all_button\": \"Ver todo\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} producto\",\n      \"other\": \"{{ count }} productos\",\n      \"many\": \"{{ count }} productos\"\n    },\n    \"recently_viewed_products\": \"Visto recientemente\",\n    \"unavailable\": \"No disponible\",\n    \"collection_placeholder\": \"Título de la colección\",\n    \"product_card_placeholder\": \"Nombre del producto\",\n    \"product_count\": \"Recuento de productos\",\n    \"item_count\": {\n      \"one\": \"{{ count }} artículo\",\n      \"other\": \"{{ count }} artículos\",\n      \"many\": \"{{ count }} artículos\"\n    },\n    \"errors\": \"Errores\",\n    \"search\": \"Buscar\",\n    \"search_results_no_results_check_spelling\": \"No se encontró ningún resultado para \\\"{{ terms }}\\\". Revisa la ortografía o usa una palabra o frase diferente.\",\n    \"no_products_found\": \"No se encontró ningún producto.\",\n    \"price_from\": \"Desde {{ price }}\",\n    \"use_fewer_filters_html\": \"Prueba a utilizar menos filtros o <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">elimina todos los filtros</a>.\",\n    \"featured_products\": \"Productos destacados\",\n    \"filters\": \"Filtros\",\n    \"price_filter_html\": \"El precio más alto es {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Leer más...\",\n    \"account_title\": \"Cuenta\",\n    \"account_title_personalized\": \"Hola, {{ first_name }}:\",\n    \"account_orders\": \"Pedidos\",\n    \"account_profile\": \"Perfil\",\n    \"discount_code\": \"Código de descuento\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Aranceles e impuestos incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Aranceles e impuestos incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Aranceles incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Aranceles incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"pickup_available_at_html\": \"Retiro disponible en <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Retiro disponible, {{ pickup_time }}\",\n    \"pickup_not_available\": \"El retiro no está disponible actualmente\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Los impuestos y los <a href=\\\"{{ link }}\\\">gastos de envío</a> se calculan en la página de pago.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Los impuestos y los gastos de envío se calculan en la página de pago.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Impuestos incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Impuestos incluidos. Los gastos de envío se calculan en la página de pago.\",\n    \"wrong_password\": \"Contraseña incorrecta\",\n    \"view_more_details\": \"Ver más información\",\n    \"page_placeholder_title\": \"Título de la página\",\n    \"page_placeholder_content\": \"Selecciona una página para mostrar su contenido.\",\n    \"placeholder_image\": \"Imagen marcadora de posición\",\n    \"powered_by\": \"Esta tienda contará con tecnología de\",\n    \"store_owner_link_html\": \"¿Esta tienda es tuya? <a href=\\\"{{ link }}\\\">Inicia sesión aquí</a>\",\n    \"shipping_discount_error\": \"Los descuentos de envío se muestran en la pantalla de pago tras agregar una dirección\",\n    \"discount_code_error\": \"El código de descuento no se puede aplicar a tu carrito\",\n    \"inventory_low_stock\": \"Bajas existencias\",\n    \"inventory_in_stock\": \"En existencias\",\n    \"inventory_out_of_stock\": \"Agotado\",\n    \"shipping_policy\": \"Envío calculado en el pago.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} restante\",\n      \"other\": \"{{ count }} restantes\",\n      \"many\": \"{{ count }} restantes\"\n    },\n    \"recipient_form_send_to\": \"Enviar a\",\n    \"recipient_form_email_label\": \"Correo electrónico del destinatario\",\n    \"recipient_form_email_label_my_email\": \"Mi correo electrónico\",\n    \"recipient_form_email_address\": \"Dirección de correo electrónico del destinatario\",\n    \"recipient_form_name_label\": \"Nombre de la persona destinataria (opcional)\",\n    \"recipient_form_message\": \"Mensaje (opcional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }} de {{ max_chars }} caracteres utilizados\",\n    \"recipient_form_send_on\": \"AAAA-MM-DD\",\n    \"recipient_form_send_on_label\": \"Fecha de envío (opcional)\",\n    \"recipient_form_fields_visible\": \"Los campos de destinatario en el formulario ya son visibles\",\n    \"recipient_form_fields_hidden\": \"Los campos de destinatario en el formulario ya no son visibles\",\n    \"recipient_form_error\": \"Hubo un error al enviar el formulario\",\n    \"product_custom_property_character_count\": \"{{ used_chars }} de {{ max_chars }} caracteres utilizados\",\n    \"terms_and_policies\": \"Términos y políticas\",\n    \"pagination\": {\n      \"nav_label\": \"Navegación de paginación\",\n      \"previous\": \"Anterior\",\n      \"next\": \"Siguiente\",\n      \"page\": \"Página {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Precio basado en el volumen disponible\",\n    \"volume_pricing\": \"Precio basado en el volumen\",\n    \"at_price_each\": \"a {{ price }} por unidad\",\n    \"each\": \"{{ price }} por unidad\",\n    \"each_abbreviation\": \"por unidad\",\n    \"price_at\": \"a\",\n    \"price_range\": \"Rango de precios\",\n    \"item_count_cutoff\": \"Más de {{ count }} artículos\",\n    \"cancel\": \"Cancelar\",\n    \"product_subtotal\": \"Subtotal de productos\",\n    \"quantity_per_item\": \"/unidad\",\n    \"remove_all\": \"Eliminar todo\",\n    \"remove_all_items_confirmation\": \"¿Deseas eliminar los {{ count }} artículos del carrito?\",\n    \"remove_one_item_confirmation\": \"¿Deseas eliminar un artículo de tu carrito?\",\n    \"total_items\": \"Total de artículos\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Total de variantes\",\n    \"view_cart\": \"Ver carrito\",\n    \"your_cart\": \"Tu carrito\",\n    \"items_added_to_cart\": {\n      \"one\": \"Se agregó un artículo al carrito\",\n      \"other\": \"Se agregaron {{ count }} artículos al carrito\",\n      \"many\": \"Se agregaron {{ count }} artículos al carrito\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Usar el código de la tarjeta de regalo online o el código QR en la tienda\",\n      \"title\": \"Este es el saldo de tu tarjeta de regalo de {{ value }} para {{ shop }}.\",\n      \"subtext\": \"Tu tarjeta de regalo\",\n      \"shop_link\": \"Visitar la tienda online\",\n      \"add_to_apple_wallet\": \"Agregar a Apple Wallet\",\n      \"qr_image_alt\": \"Código QR — escanea para canjear la tarjeta de regalo\",\n      \"copy_code\": \"Copiar el código de la tarjeta de regalo\",\n      \"expiration_date\": \"Caduca el {{ expires_on }}\",\n      \"copy_code_success\": \"El código se copió correctamente\",\n      \"expired\": \"Vencida\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Contraseña\",\n    \"search\": \"Buscar\",\n    \"product_title\": \"Nombre del producto\",\n    \"collection_title\": \"Título de la colección\",\n    \"blog_posts\": \"Artículos del blog\",\n    \"blog_post_title\": \"Nombre\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Fecha\",\n    \"blog_post_description\": \"Un extracto del contenido de tus artículos del blog\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Agregar al carrito\",\n      \"added_to_cart\": \"Agregado al carrito\",\n      \"adding_to_cart\": \"Agregando...\",\n      \"add_to_cart_error\": \"Error al agregar al carrito\",\n      \"sold_out\": \"Agotado\",\n      \"unavailable\": \"No disponible\",\n      \"quantity_error_max\": \"Este artículo tiene un máximo de {{ maximum }}.\",\n      \"quantity\": \"Cantidad\",\n      \"quantity_increments\": \"Incrementos de {{ increment }}\",\n      \"quantity_minimum\": \"Mínimo de {{ minimum }}\",\n      \"quantity_maximum\": \"Máximo de {{ maximum }}\",\n      \"in_cart\": \"en el carrito\",\n      \"default_title\": \"Título predeterminado\",\n      \"sticky_add_to_cart\": \"Barra de agregar rápido al carrito\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"a\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} comentario\",\n        \"other\": \"{{ count }} comentarios\",\n        \"many\": \"{{ count }} comentarios\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Correo electrónico\",\n      \"error\": \"No se pudo publicar el comentario. Corrige lo siguiente:\",\n      \"heading\": \"Dejar un comentario\",\n      \"message\": \"Mensaje\",\n      \"moderated\": \"Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.\",\n      \"name\": \"Nombre\",\n      \"post\": \"Publicar comentario\",\n      \"success_moderated\": \"Comentario publicado y a la espera de moderación\",\n      \"success\": \"Comentario publicado\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/es.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Bordes\",\n    \"collapsible_row\": \"Fila plegable\",\n    \"colors\": \"Colores\",\n    \"custom_section\": \"Sección personalizada\",\n    \"icon\": \"Ícono\",\n    \"logo_and_favicon\": \"Logo y favicon\",\n    \"overlapping_blocks\": \"Bloques superpuestos\",\n    \"rich_text_section\": \"Texto enriquecido\",\n    \"product_buy_buttons\": \"Botones de compra\",\n    \"product_description\": \"Descripción\",\n    \"product_price\": \"Precio\",\n    \"product_variant_picker\": \"Selector de variante\",\n    \"slideshow\": \"Presentación de diapositivas\",\n    \"typography\": \"Tipografía\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Controles de presentación\",\n    \"size\": \"Tamaño\",\n    \"spacing\": \"Espaciado\",\n    \"product_recommendations\": \"Productos recomendados\",\n    \"product_media\": \"Multimedia del producto\",\n    \"featured_collection\": \"Colección destacada\",\n    \"add_to_cart\": \"Agregar al carrito\",\n    \"email_signup\": \"Suscripción por correo electrónico\",\n    \"submit_button\": \"Botón Enviar\",\n    \"grid_layout_selector\": \"Selector de diseño de cuadrícula\",\n    \"image\": \"Imagen\",\n    \"list_items\": \"Elementos de lista\",\n    \"facets\": \"Facetas\",\n    \"variants\": \"Variantes\",\n    \"styles\": \"Estilos\",\n    \"product_cards\": \"Tarjetas de producto\",\n    \"primary_button\": \"Botón principal\",\n    \"secondary_button\": \"Botón secundario\",\n    \"popovers_and_modals\": \"Popovers y modales\",\n    \"buttons\": \"Botones\",\n    \"inputs\": \"Entradas\",\n    \"marquee\": \"Marquesina\",\n    \"alternating_content_rows\": \"Filas alternas\",\n    \"product_list\": \"Colección destacada\",\n    \"spacer\": \"Espaciador\",\n    \"pull_quote\": \"Cita destacada\",\n    \"contact_form\": \"Formulario de contacto\",\n    \"featured_product\": \"Destacado de producto\",\n    \"icons_with_text\": \"Íconos con texto\",\n    \"accelerated_checkout\": \"Proceso de pago acelerado\",\n    \"accordion\": \"Acordeón\",\n    \"accordion_row\": \"Fila del acordeón\",\n    \"animations\": \"Animaciones\",\n    \"announcement\": \"Anuncio\",\n    \"announcement_bar\": \"Barra de anuncios\",\n    \"badges\": \"Insignias\",\n    \"button\": \"Botón\",\n    \"cart\": \"Carrito\",\n    \"cart_items\": \"Artículos del carrito\",\n    \"cart_products\": \"Productos del carrito\",\n    \"cart_title\": \"Carrito\",\n    \"collection\": \"Colección\",\n    \"collection_card\": \"Tarjeta de colección\",\n    \"collection_columns\": \"Columnas de colección\",\n    \"collection_container\": \"Colección\",\n    \"collection_description\": \"Descripción de la colección\",\n    \"collection_image\": \"Imagen de la colección\",\n    \"collection_info\": \"Información de la colección\",\n    \"collection_list\": \"Lista de colecciones\",\n    \"collections\": \"Colecciones\",\n    \"content\": \"Contenido\",\n    \"content_grid\": \"Cuadrícula de contenido\",\n    \"details\": \"Detalles\",\n    \"divider\": \"Separador\",\n    \"filters\": \"Filtrado y ordenación\",\n    \"follow_on_shop\": \"Seguir en Shop\",\n    \"footer\": \"Pie de página\",\n    \"footer_utilities\": \"Utilidades del pie de página\",\n    \"group\": \"Grupo\",\n    \"header\": \"Encabezado\",\n    \"heading\": \"Encabezado\",\n    \"icons\": \"Íconos\",\n    \"image_with_text\": \"Imagen con texto\",\n    \"input\": \"Entrada\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Cuadrícula de revista\",\n    \"media\": \"Multimedia\",\n    \"menu\": \"Menú\",\n    \"mobile_layout\": \"Diseño para móvil\",\n    \"payment_icons\": \"Íconos de pago\",\n    \"popup_link\": \"Enlace de ventana emergente\",\n    \"predictive_search\": \"Popover de búsqueda\",\n    \"predictive_search_empty\": \"Búsqueda predictiva vacía\",\n    \"price\": \"Precio\",\n    \"product\": \"Producto\",\n    \"product_card\": \"Tarjeta de producto\",\n    \"product_card_media\": \"Multimedia\",\n    \"product_card_rendering\": \"Renderizado de tarjeta de producto\",\n    \"product_grid\": \"Cuadrícula\",\n    \"product_grid_main\": \"Cuadrícula de productos\",\n    \"product_image\": \"Imagen del producto\",\n    \"product_information\": \"Información del producto\",\n    \"product_review_stars\": \"Estrellas de reseñas\",\n    \"quantity\": \"Cantidad\",\n    \"row\": \"Fila\",\n    \"search\": \"Búsqueda\",\n    \"section\": \"Sección\",\n    \"selected_variants\": \"Variantes seleccionadas\",\n    \"slide\": \"Diapositiva\",\n    \"social_media_links\": \"Enlaces de redes sociales\",\n    \"steps\": \"Pasos\",\n    \"summary\": \"Resumen\",\n    \"swatches\": \"Muestrario\",\n    \"testimonials\": \"Testimonios\",\n    \"text\": \"Texto\",\n    \"title\": \"Título\",\n    \"utilities\": \"Utilidades\",\n    \"search_input\": \"Campo de búsqueda\",\n    \"search_results\": \"Resultados de búsqueda\",\n    \"read_only\": \"Solo lectura\",\n    \"collections_bento\": \"Lista de colecciones: Bento\",\n    \"faq_section\": \"Preguntas frecuentes\",\n    \"hero\": \"Hero\",\n    \"hero_bottom_aligned\": \"Hero: alineado abajo\",\n    \"jumbo_text\": \"Texto grande\",\n    \"video_section\": \"Video\",\n    \"custom_liquid\": \"Liquid personalizado\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Artículo del blog\",\n    \"blog_posts\": \"Artículos del blog\",\n    \"caption\": \"Leyenda\",\n    \"collection_card_image\": \"Imagen\",\n    \"collection_title\": \"Título de la colección\",\n    \"collection_links\": \"Enlaces de colecciones\",\n    \"collection_links_spotlight\": \"Enlaces de colecciones: Spotlight\",\n    \"collection_links_text\": \"Enlaces de colecciones: texto\",\n    \"collections_carousel\": \"Lista de colecciones: carrusel\",\n    \"collections_editorial\": \"Lista de colecciones: editorial\",\n    \"collections_grid\": \"Lista de colecciones: cuadrícula\",\n    \"copyright\": \"Derechos de autor\",\n    \"count\": \"Conteo\",\n    \"divider_section\": \"Separador\",\n    \"drawers\": \"Cajones\",\n    \"editorial\": \"Editorial\",\n    \"editorial_jumbo_text\": \"Editorial: texto grande\",\n    \"hero_marquee\": \"Hero: marquesina\",\n    \"input_fields\": \"Campos de entrada\",\n    \"local_pickup\": \"Retiro en tienda\",\n    \"marquee_section\": \"Marquesina\",\n    \"media_with_text\": \"Multimedia con texto\",\n    \"page\": \"Página\",\n    \"page_content\": \"Contenido\",\n    \"page_layout\": \"Diseño de página\",\n    \"policy_list\": \"Enlaces de políticas\",\n    \"prices\": \"Precios\",\n    \"products_carousel\": \"Colección destacada: carrusel\",\n    \"products_editorial\": \"Colección destacada: editorial\",\n    \"products_grid\": \"Colección destacada: cuadrícula\",\n    \"social_link\": \"Enlace social\",\n    \"split_showcase\": \"Escaparate dividido\",\n    \"variant_pickers\": \"Selectores de variantes\",\n    \"view_all_button\": \"Ver todo\",\n    \"product_title\": \"Nombre del producto\",\n    \"large_logo\": \"Logo grande\",\n    \"product_list_button\": \"Botón Ver todo\",\n    \"product_inventory\": \"Inventario del producto\",\n    \"pills\": \"Etiquetas\",\n    \"description\": \"Descripción\",\n    \"featured_image\": \"Imagen destacada\",\n    \"multicolumn\": \"Multicolumna\",\n    \"product_custom_property\": \"Instrucciones especiales\",\n    \"blog_card\": \"Tarjeta del blog\",\n    \"blog_posts_grid\": \"Artículos del blog: cuadrícula\",\n    \"blog_posts_carousel\": \"Artículos del blog: carrusel\",\n    \"blog_posts_editorial\": \"Artículos del blog: editorial\",\n    \"excerpt\": \"Extracto\",\n    \"footer_password\": \"Pie de página de contraseña\",\n    \"policies_and_links\": \"Políticas y enlaces\",\n    \"card\": \"Tarjeta\",\n    \"carousel\": \"Carrusel\",\n    \"carousel_content\": \"Contenido del carrusel\",\n    \"quick_order_list\": \"Lista de compra rápida\",\n    \"column\": \"Columna\",\n    \"comparison_slider\": \"Control deslizante de comparación\",\n    \"slideshow_full_frame\": \"Presentación de diapositivas: marco completo\",\n    \"slideshow_inset\": \"Presentación de diapositivas: con margen\",\n    \"image_compare\": \"Comparación de imágenes\",\n    \"subheading\": \"Subtítulo\",\n    \"featured_product_information\": \"Producto destacado\",\n    \"product_hotspots\": \"Puntos interactivos del producto\",\n    \"hotspot_product\": \"Punto interactivo\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Presentación de diapositivas en capas\"\n  },\n  \"settings\": {\n    \"alignment\": \"Alineación\",\n    \"autoplay\": \"Reproducción automática\",\n    \"background\": \"Fondo\",\n    \"border_radius\": \"Radio de las esquinas\",\n    \"border_width\": \"Grosor del borde\",\n    \"borders\": \"Bordes\",\n    \"bottom_padding\": \"Relleno inferior\",\n    \"button\": \"Botón\",\n    \"color\": \"Color\",\n    \"colors\": \"Colores\",\n    \"content_alignment\": \"Alineación del contenido\",\n    \"content_direction\": \"Dirección del contenido\",\n    \"content_position\": \"Posición del contenido\",\n    \"cover_image_size\": \"Tamaño de la imagen de portada\",\n    \"cover_image\": \"Imagen de portada\",\n    \"custom_minimum_height\": \"Altura mínima personalizada\",\n    \"custom_width\": \"Ancho personalizado\",\n    \"enable_video_looping\": \"Repetición de video\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"Familia de fuentes\",\n    \"gap\": \"Separación\",\n    \"geometric_translate_y\": \"Traslación geométrica en Y\",\n    \"heading\": \"Título\",\n    \"icon\": \"Ícono\",\n    \"image\": \"Imagen\",\n    \"image_icon\": \"Ícono de imagen\",\n    \"image_opacity\": \"Opacidad de la imagen\",\n    \"image_position\": \"Posición de la imagen\",\n    \"image_ratio\": \"Relación de aspecto de la imagen\",\n    \"label\": \"Etiqueta\",\n    \"line_height\": \"Interlineado\",\n    \"link\": \"Enlace\",\n    \"layout_gap\": \"Separación del diseño\",\n    \"make_section_full_width\": \"Hacer la sección a ancho completo\",\n    \"minimum_height\": \"Altura mínima\",\n    \"opacity\": \"Opacidad\",\n    \"overlay_opacity\": \"Opacidad de la sobreposición\",\n    \"padding\": \"Relleno\",\n    \"primary_color\": \"Enlaces\",\n    \"product\": \"Producto\",\n    \"section_width\": \"Ancho de la sección\",\n    \"size\": \"Tamaño\",\n    \"slide_spacing\": \"Separación entre diapositivas\",\n    \"slide_width\": \"Ancho de la diapositiva\",\n    \"slideshow_fullwidth\": \"Diapositivas a ancho completo\",\n    \"style\": \"Estilo\",\n    \"text\": \"Texto\",\n    \"text_case\": \"Mayúsculas/minúsculas\",\n    \"top_padding\": \"Relleno superior\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Texto alternativo\",\n    \"video_loop\": \"Repetir video\",\n    \"video_position\": \"Posición del video\",\n    \"width\": \"Ancho\",\n    \"z_index\": \"Índice Z\",\n    \"limit_content_width\": \"Limitar ancho del contenido\",\n    \"color_scheme\": \"Esquema de colores\",\n    \"inherit_color_scheme\": \"Heredar esquema de colores\",\n    \"product_count\": \"Número de productos\",\n    \"product_type\": \"Tipo de producto\",\n    \"content_width\": \"Ancho del contenido\",\n    \"collection\": \"Colección\",\n    \"enable_sticky_content\": \"Contenido fijo en escritorio\",\n    \"error_color\": \"Error\",\n    \"success_color\": \"Éxito\",\n    \"primary_font\": \"Fuente principal\",\n    \"secondary_font\": \"Fuente secundaria\",\n    \"tertiary_font\": \"Fuente terciaria\",\n    \"columns\": \"Columnas\",\n    \"items_to_show\": \"Elementos a mostrar\",\n    \"layout\": \"Diseño\",\n    \"layout_type\": \"Tipo\",\n    \"show_grid_layout_selector\": \"Mostrar selector de diseño en cuadrícula\",\n    \"view_more_show\": \"Mostrar botón \\\"Ver más\\\"\",\n    \"image_gap\": \"Separación entre imágenes\",\n    \"width_desktop\": \"Ancho en escritorio\",\n    \"width_mobile\": \"Ancho en móviles\",\n    \"border_style\": \"Estilo de borde\",\n    \"height\": \"Altura\",\n    \"thickness\": \"Grosor\",\n    \"stroke\": \"Trazo\",\n    \"filter_style\": \"Estilo de filtro\",\n    \"swatches\": \"Muestrario\",\n    \"quick_add_colors\": \"Colores de agregar rápido\",\n    \"divider_color\": \"Separador\",\n    \"border_opacity\": \"Opacidad del borde\",\n    \"hover_background\": \"Fondo al pasar el cursor\",\n    \"hover_borders\": \"Bordes al pasar el cursor\",\n    \"hover_text\": \"Texto al pasar el cursor\",\n    \"primary_hover_color\": \"Enlaces al pasar el cursor\",\n    \"primary_button_text\": \"Texto del botón primario\",\n    \"primary_button_background\": \"Fondo del botón primario\",\n    \"primary_button_border\": \"Borde del botón primario\",\n    \"secondary_button_text\": \"Texto del botón secundario\",\n    \"secondary_button_background\": \"Fondo del botón secundario\",\n    \"secondary_button_border\": \"Borde del botón secundario\",\n    \"shadow_color\": \"Sombra\",\n    \"background_color\": \"Color de fondo\",\n    \"video_autoplay\": \"Reproducción automática\",\n    \"video_cover_image\": \"Imagen de portada\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Origen\",\n    \"first_row_media_position\": \"Posición de la multimedia en la primera fila\",\n    \"hide_padding\": \"Ocultar relleno\",\n    \"size_mobile\": \"Tamaño en móviles\",\n    \"pixel_size_mobile\": \"Tamaño en píxeles\",\n    \"percent_size_mobile\": \"Tamaño en porcentaje\",\n    \"unit\": \"Unidad\",\n    \"custom_mobile_size\": \"Tamaño personalizado en móviles\",\n    \"fixed_height\": \"Altura en píxeles\",\n    \"fixed_width\": \"Ancho en píxeles\",\n    \"percent_height\": \"Altura en porcentaje\",\n    \"percent_width\": \"Ancho en porcentaje\",\n    \"percent_size\": \"Tamaño en porcentaje\",\n    \"pixel_size\": \"Tamaño en píxeles\",\n    \"accordion\": \"Acordeón\",\n    \"aspect_ratio\": \"Relación de aspecto\",\n    \"auto_rotate_announcements\": \"Rotar anuncios automáticamente\",\n    \"auto_rotate_slides\": \"Rotar diapositivas automáticamente\",\n    \"badge_corner_radius\": \"Radio de las esquinas\",\n    \"badge_position\": \"Posición en las tarjetas\",\n    \"badge_sale_color_scheme\": \"Oferta\",\n    \"badge_sold_out_color_scheme\": \"Agotado\",\n    \"behavior\": \"Comportamiento\",\n    \"blur\": \"Desenfoque de la sombra\",\n    \"border\": \"Borde\",\n    \"bottom\": \"Abajo\",\n    \"card_image_height\": \"Altura de la imagen del producto\",\n    \"carousel_on_mobile\": \"Carrusel en móviles\",\n    \"cart_count\": \"Contador del carrito\",\n    \"cart_items\": \"Artículos del carrito\",\n    \"cart_related_products\": \"Productos relacionados\",\n    \"cart_title\": \"Carrito\",\n    \"cart_total\": \"Total del carrito\",\n    \"cart_type\": \"Tipo\",\n    \"case\": \"Mayúsculas/minúsculas\",\n    \"checkout_buttons\": \"Botones de proceso de pago acelerado\",\n    \"collection_list\": \"Colecciones\",\n    \"collection_templates\": \"Plantillas de colección\",\n    \"content\": \"Contenido\",\n    \"corner_radius\": \"Radio de las esquinas\",\n    \"country_region\": \"País/región\",\n    \"currency_code\": \"Código de moneda\",\n    \"custom_height\": \"Altura personalizada\",\n    \"desktop_height\": \"Altura en escritorio\",\n    \"direction\": \"Dirección\",\n    \"display\": \"Presentación\",\n    \"divider_thickness\": \"Grosor del separador\",\n    \"divider\": \"Separador\",\n    \"dividers\": \"Separadores\",\n    \"drop_shadow\": \"Sombra paralela\",\n    \"empty_state_collection_info\": \"Se muestra antes de realizar una búsqueda\",\n    \"empty_state_collection\": \"Colección para el estado vacío\",\n    \"enable_filtering\": \"Filtros\",\n    \"enable_grid_density\": \"Control del diseño en cuadrícula\",\n    \"enable_sorting\": \"Ordenación\",\n    \"enable_zoom\": \"Activar zoom\",\n    \"equal_columns\": \"Columnas iguales\",\n    \"expand_first_group\": \"Expandir el primer grupo\",\n    \"extend_media_to_screen_edge\": \"Extender multimedia hasta el borde de la pantalla\",\n    \"extend_summary\": \"Extender hasta el borde de la pantalla\",\n    \"extra_large\": \"Extra grande\",\n    \"extra_small\": \"Extra pequeño\",\n    \"flag\": \"Bandera\",\n    \"font_price\": \"Fuente del precio\",\n    \"font_weight\": \"Grosor de la fuente\",\n    \"font\": \"Fuente\",\n    \"full_width_first_image\": \"Primera imagen a ancho completo\",\n    \"full_width_on_mobile\": \"Ancho completo en móviles\",\n    \"heading_preset\": \"Preajuste de título\",\n    \"hide_unselected_variant_media\": \"Ocultar multimedia de variantes no seleccionadas\",\n    \"horizontal_gap\": \"Separación horizontal\",\n    \"horizontal_offset\": \"Desplazamiento horizontal de la sombra\",\n    \"hover_behavior\": \"Comportamiento al pasar el cursor\",\n    \"icon_background\": \"Fondo del ícono\",\n    \"icons\": \"Íconos\",\n    \"image_border_radius\": \"Radio de las esquinas de la imagen\",\n    \"installments\": \"Cuotas\",\n    \"integrated_button\": \"Botón integrado\",\n    \"language_selector\": \"Selector de idioma\",\n    \"large\": \"Grande\",\n    \"left_padding\": \"Relleno izquierdo\",\n    \"left\": \"Izquierda\",\n    \"letter_spacing\": \"Espaciado entre letras\",\n    \"limit_media_to_screen_height\": \"Ajustar a la altura de la pantalla\",\n    \"limit_product_details_width\": \"Limitar ancho de la información del producto\",\n    \"link_preset\": \"Preajuste de enlace\",\n    \"links\": \"Enlaces\",\n    \"logo_font\": \"Fuente del logo\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Bucle\",\n    \"make_details_sticky_desktop\": \"Fijo en escritorio\",\n    \"max_width\": \"Ancho máximo\",\n    \"media_height\": \"Altura de la multimedia\",\n    \"media_overlay\": \"Sobreposición de la multimedia\",\n    \"media_position\": \"Posición de la multimedia\",\n    \"media_type\": \"Tipo de multimedia\",\n    \"media_width\": \"Ancho de la multimedia\",\n    \"menu\": \"Menú\",\n    \"mobile_columns\": \"Columnas en móviles\",\n    \"mobile_height\": \"Altura en móviles\",\n    \"mobile_logo_image\": \"Logo en móviles\",\n    \"mobile_quick_add\": \"Agregar rápido en móviles\",\n    \"motion_direction\": \"Dirección del movimiento\",\n    \"motion\": \"Movimiento\",\n    \"movement_direction\": \"Dirección del movimiento\",\n    \"navigation_bar_color_scheme\": \"Esquema de colores de la barra de navegación\",\n    \"navigation_bar\": \"Barra de navegación\",\n    \"navigation\": \"Navegación\",\n    \"open_new_tab\": \"Abrir enlace en una pestaña nueva\",\n    \"overlay_color\": \"Color de la sobreposición\",\n    \"overlay\": \"Sobreposición\",\n    \"padding_bottom\": \"Relleno inferior\",\n    \"padding_horizontal\": \"Relleno horizontal\",\n    \"padding_top\": \"Relleno superior\",\n    \"page_width\": \"Ancho de página\",\n    \"pagination\": \"Paginación\",\n    \"placement\": \"Ubicación\",\n    \"position\": \"Posición\",\n    \"preset\": \"Preajuste\",\n    \"product_cards\": \"Tarjetas de producto\",\n    \"product_pages\": \"Páginas de producto\",\n    \"product_templates\": \"Plantillas de producto\",\n    \"products\": \"Productos\",\n    \"quick_add\": \"Agregar rápido\",\n    \"ratio\": \"Relación\",\n    \"regular\": \"Regular\",\n    \"review_count\": \"Número de reseñas\",\n    \"right\": \"Derecha\",\n    \"row_height\": \"Altura de la fila\",\n    \"row\": \"Fila\",\n    \"seller_note\": \"Permitir nota para el vendedor\",\n    \"shape\": \"Forma\",\n    \"show_as_accordion\": \"Mostrar como acordeón en móviles\",\n    \"show_sale_price_first\": \"Mostrar primero el precio de oferta\",\n    \"show_tax_info\": \"Información de impuestos\",\n    \"show\": \"Mostrar\",\n    \"small\": \"Pequeño\",\n    \"speed\": \"Velocidad\",\n    \"statement\": \"Estado de cuenta\",\n    \"sticky_header\": \"Encabezado fijo\",\n    \"text_hierarchy\": \"Jerarquía del texto\",\n    \"text_presets\": \"Preajustes de texto\",\n    \"title\": \"Título\",\n    \"top\": \"Arriba\",\n    \"type\": \"Tipo\",\n    \"type_preset\": \"Preajuste de texto\",\n    \"underline_thickness\": \"Grosor del subrayado\",\n    \"variant_images\": \"Imágenes de variante\",\n    \"vendor\": \"Proveedor\",\n    \"vertical_gap\": \"Separación vertical\",\n    \"vertical_offset\": \"Desplazamiento vertical de la sombra\",\n    \"vertical_on_mobile\": \"Vertical en móviles\",\n    \"view_all_as_last_card\": \"\\\"Ver todo\\\" como última tarjeta\",\n    \"weight\": \"Grosor\",\n    \"wrap\": \"Ajuste de línea\",\n    \"read_only\": \"Solo lectura\",\n    \"always_stack_buttons\": \"Apilar siempre los botones\",\n    \"custom_mobile_width\": \"Ancho personalizado en móviles\",\n    \"gradient_direction\": \"Dirección del degradado\",\n    \"headings\": \"Títulos\",\n    \"overlay_style\": \"Estilo de la sobreposición\",\n    \"shadow_opacity\": \"Opacidad de la sombra\",\n    \"show_filter_label\": \"Etiquetas de texto para filtros aplicados\",\n    \"show_swatch_label\": \"Etiquetas de texto para las muestras\",\n    \"transparent_background\": \"Fondo transparente\",\n    \"account\": \"Cuenta\",\n    \"align_baseline\": \"Alinear la línea base del texto\",\n    \"animation_repeat\": \"Repetir animación\",\n    \"add_discount_code\": \"Permitir descuentos en el carrito\",\n    \"background_overlay\": \"Sobreposición de fondo\",\n    \"background_media\": \"Multimedia de fondo\",\n    \"border_thickness\": \"Grosor del borde\",\n    \"bottom_row\": \"Fila inferior\",\n    \"button_text_case\": \"Mayúsculas/minúsculas del texto\",\n    \"auto_open_cart_drawer\": \"\\\"Agregar al carrito\\\" abre automáticamente el panel\",\n    \"collection_count\": \"Número de colecciones\",\n    \"custom_liquid\": \"Código Liquid\",\n    \"default\": \"Predeterminado\",\n    \"default_logo\": \"Logo predeterminado\",\n    \"divider_width\": \"Ancho del separador\",\n    \"hide_logo_on_home_page\": \"Ocultar el logo en la página de inicio\",\n    \"horizontal_padding\": \"Relleno horizontal\",\n    \"inverse\": \"Inverso\",\n    \"inverse_logo\": \"Logo en inverso\",\n    \"layout_style\": \"Estilo\",\n    \"length\": \"Longitud\",\n    \"mobile_pagination\": \"Paginación en móviles\",\n    \"open_row_by_default\": \"Abrir la fila de forma predeterminada\",\n    \"page\": \"Página\",\n    \"page_transition_enabled\": \"Transición de página\",\n    \"search\": \"Búsqueda\",\n    \"search_icon\": \"Ícono de búsqueda\",\n    \"search_position\": \"Posición\",\n    \"search_row\": \"Fila\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Mostrar alineación\",\n    \"show_count\": \"Mostrar cantidad\",\n    \"show_date\": \"Fecha\",\n    \"show_pickup_availability\": \"Mostrar disponibilidad para retiro\",\n    \"show_search\": \"Mostrar búsqueda\",\n    \"use_inverse_logo\": \"Usar logo en inverso\",\n    \"vertical_padding\": \"Relleno vertical\",\n    \"visibility\": \"Visibilidad\",\n    \"product_corner_radius\": \"Radio de las esquinas del producto\",\n    \"card_corner_radius\": \"Radio de las esquinas de la tarjeta\",\n    \"alignment_mobile\": \"Alineación en móviles\",\n    \"blurred_reflection\": \"Reflejo desenfocado\",\n    \"card_hover_effect\": \"Efecto al pasar el cursor\",\n    \"card_size\": \"Tamaño de la tarjeta\",\n    \"collection_title_case\": \"Mayúsculas/minúsculas del título de la colección\",\n    \"inventory_threshold\": \"Umbral de existencias bajas\",\n    \"mobile_card_size\": \"Tamaño de tarjeta en móviles\",\n    \"product_and_card_title_case\": \"Mayúsculas/minúsculas en títulos de productos y tarjetas\",\n    \"product_title_case\": \"Mayúsculas/minúsculas del título del producto\",\n    \"reflection_opacity\": \"Opacidad del reflejo\",\n    \"right_padding\": \"Relleno derecho\",\n    \"show_inventory_quantity\": \"Mostrar cantidad de existencias bajas\",\n    \"text_label_case\": \"Mayúsculas/minúsculas de las etiquetas de texto\",\n    \"transition_to_main_product\": \"Transición de tarjeta de producto a página de producto\",\n    \"show_second_image_on_hover\": \"Mostrar la segunda imagen al pasar el cursor\",\n    \"media\": \"Multimedia\",\n    \"product_card_carousel\": \"Mostrar carrusel\",\n    \"media_fit\": \"Ajuste de la multimedia\",\n    \"scroll_speed\": \"Tiempo hasta el siguiente anuncio\",\n    \"show_powered_by_shopify\": \"Mostrar \\\"Tecnología de Shopify\\\"\",\n    \"gift_card_form\": \"Formulario de tarjeta de regalo\",\n    \"seller_note_open_by_default\": \"Abrir la nota para el vendedor de forma predeterminada\",\n    \"add_to_cart_animation\": \"Agregar al carrito\",\n    \"custom_link\": \"Enlace personalizado\",\n    \"product_custom_property\": {\n      \"heading\": \"Título\",\n      \"description\": \"Descripción\",\n      \"key\": \"Nombre de la propiedad\",\n      \"key_info\": \"No puede quedar en blanco y debe ser único por bloque. Se muestra en el carrito, la página de pago y los detalles del pedido.\",\n      \"placeholder_text\": \"Texto del marcador de posición\",\n      \"default_heading\": \"Personaliza tu producto\",\n      \"default_placeholder\": \"Escribe tus instrucciones especiales\",\n      \"default_property_key\": \"Instrucciones especiales\",\n      \"max_length\": \"Máximo de caracteres\",\n      \"required\": \"Se requiere para agregar el artículo al carrito\",\n      \"input_type\": \"Tipo de entrada\",\n      \"input_type_text\": \"Texto\",\n      \"input_type_checkbox\": \"Casilla de verificación\",\n      \"content_settings\": \"Configuración de contenido\",\n      \"buyers_input\": \"Entrada de quien compra\",\n      \"checkbox_label\": \"Etiqueta de la casilla de verificación\",\n      \"default_checkbox_label\": \"Incluir envoltura para regalo\",\n      \"heading_preset\": \"Título\",\n      \"description_preset\": \"Descripción\",\n      \"input_preset\": \"Entrada\",\n      \"checkbox_preset\": \"Etiqueta de la casilla de verificación\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Número de publicaciones\",\n    \"animation\": \"Animación\",\n    \"top_level_size\": \"Tamaño del nivel superior\",\n    \"empty_cart_button_link\": \"Enlace del botón cuando el carrito está vacío\",\n    \"auto_load_products\": \"Cargar productos automáticamente al desplazarte\",\n    \"products_per_page\": \"Productos por página\",\n    \"custom_mobile_media\": \"Mostrar multimedia diferente en dispositivos móviles\",\n    \"stack_media_on_mobile\": \"Apilar multimedia en móviles\",\n    \"media_type_1\": \"Tipo de multimedia\",\n    \"media_type_2\": \"Tipo de multimedia 2\",\n    \"full_frame_on_mobile\": \"Ancho completo en dispositivos móviles\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"Variantes por página\",\n    \"image_1\": \"Imagen 1\",\n    \"image_2\": \"Imagen 2\",\n    \"after_image\": \"Imagen del después\",\n    \"before_image\": \"Imagen del antes\",\n    \"cs_slider_style\": \"Estilo del control deslizante\",\n    \"cs_slider_color\": \"Color del control deslizante\",\n    \"cs_slider_inner_color\": \"Color interior del control deslizante\",\n    \"text_on_images\": \"Texto sobre las imágenes\",\n    \"card_height\": \"Altura de la tarjeta\",\n    \"submenu_size\": \"Tamaño del submenú\",\n    \"desktop_position\": \"Posición en escritorio\",\n    \"desktop_pagination\": \"Paginación en escritorio\",\n    \"bullseye_color\": \"Color interior\",\n    \"hotspot_color\": \"Color del punto interactivo\",\n    \"product_price_typography\": \"Tipografía del precio del producto\",\n    \"product_title_typography\": \"Tipografía del nombre del producto\",\n    \"x_position\": \"Posición horizontal\",\n    \"y_position\": \"Posición vertical\",\n    \"enable_sticky_add_to_cart\": \"Barra fija de agregar al carrito\",\n    \"sticky_add_to_cart\": \"Agregar al carrito fijo\",\n    \"actions_display_style\": \"Estilo del menú\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Flecha\",\n    \"auto\": \"Auto\",\n    \"banana\": \"Banana\",\n    \"bottle\": \"Botella\",\n    \"box\": \"Caja\",\n    \"buttons\": \"Botones\",\n    \"carrot\": \"Zanahoria\",\n    \"center\": \"Centro\",\n    \"chat_bubble\": \"Burbuja de chat\",\n    \"clipboard\": \"Portapapeles\",\n    \"contain\": \"Contener\",\n    \"counter\": \"Contador\",\n    \"cover\": \"Cubrir\",\n    \"custom\": \"Personalizado\",\n    \"dairy_free\": \"Sin lácteos\",\n    \"dairy\": \"Lácteos\",\n    \"default\": \"Predeterminado\",\n    \"dropdowns\": \"Desplegables\",\n    \"dots\": \"Puntos\",\n    \"dryer\": \"Secadora\",\n    \"end\": \"Final\",\n    \"eye\": \"Ojo\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Rellenar\",\n    \"fire\": \"Fuego\",\n    \"fit\": \"Ajustar\",\n    \"full\": \"Completo\",\n    \"full_and_page\": \"Fondo completo, contenido al ancho de página\",\n    \"gluten_free\": \"Sin gluten\",\n    \"heading\": \"Encabezado\",\n    \"heart\": \"Corazón\",\n    \"horizontal\": \"Horizontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Plancha\",\n    \"landscape\": \"Apaisado\",\n    \"large\": \"Grande\",\n    \"leaf\": \"Hoja\",\n    \"leather\": \"Cuero\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"Rayo\",\n    \"link\": \"Enlace\",\n    \"lipstick\": \"Labial\",\n    \"lock\": \"Candado\",\n    \"lowercase\": \"minúsculas\",\n    \"m\": \"M\",\n    \"map_pin\": \"Marcador de mapa\",\n    \"medium\": \"Mediano\",\n    \"none\": \"Ninguno\",\n    \"numbers\": \"Números\",\n    \"nut_free\": \"Sin frutos secos\",\n    \"outline\": \"Contorno\",\n    \"page\": \"Página\",\n    \"pants\": \"Pantalones\",\n    \"paw_print\": \"Huella de pata\",\n    \"pepper\": \"Pimienta\",\n    \"perfume\": \"Perfume\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Avión\",\n    \"plant\": \"Planta\",\n    \"portrait\": \"Vertical\",\n    \"price_tag\": \"Etiqueta de precio\",\n    \"question_mark\": \"Signo de interrogación\",\n    \"recycle\": \"Reciclaje\",\n    \"return\": \"Devolver\",\n    \"ruler\": \"Regla\",\n    \"s\": \"S\",\n    \"sentence\": \"Oración\",\n    \"serving_dish\": \"Fuente\",\n    \"shirt\": \"Camisa\",\n    \"shoe\": \"Zapato\",\n    \"silhouette\": \"Silueta\",\n    \"small\": \"Pequeño\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Copo de nieve\",\n    \"solid\": \"Sólido\",\n    \"space_between\": \"Espacio entre\",\n    \"square\": \"Cuadrado\",\n    \"star\": \"Estrella\",\n    \"start\": \"Inicio\",\n    \"stopwatch\": \"Cronómetro\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Camión\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Mayúsculas\",\n    \"vertical\": \"Vertical\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Lavado\",\n    \"circle\": \"Círculo\",\n    \"swatches\": \"Muestrario\",\n    \"full_and_page_offset_left\": \"Fondo completo, contenido al ancho de página, desplazado a la izquierda\",\n    \"full_and_page_offset_right\": \"Fondo completo, contenido al ancho de página, desplazado a la derecha\",\n    \"offset_left\": \"Desplazado a la izquierda\",\n    \"offset_right\": \"Desplazado a la derecha\",\n    \"page_center_aligned\": \"Página, alineado al centro\",\n    \"page_left_aligned\": \"Página, alineado a la izquierda\",\n    \"page_right_aligned\": \"Página, alineado a la derecha\",\n    \"button\": \"Botón\",\n    \"caption\": \"Leyenda\",\n    \"h1\": \"Encabezado 1\",\n    \"h2\": \"Encabezado 2\",\n    \"h3\": \"Encabezado 3\",\n    \"h4\": \"Encabezado 4\",\n    \"h5\": \"Encabezado 5\",\n    \"h6\": \"Encabezado 6\",\n    \"paragraph\": \"Párrafo\",\n    \"primary\": \"Principal\",\n    \"secondary\": \"Secundario\",\n    \"tertiary\": \"Terciario\",\n    \"chevron_left\": \"Chevron izquierdo\",\n    \"chevron_right\": \"Chevron derecho\",\n    \"diamond\": \"Diamante\",\n    \"grid\": \"Cuadrícula\",\n    \"parallelogram\": \"Paralelogramo\",\n    \"rounded\": \"Redondeado\",\n    \"fit_content\": \"Ajustar\",\n    \"pills\": \"Píldoras\",\n    \"heavy\": \"Grueso\",\n    \"thin\": \"Fino\",\n    \"drawer\": \"Cajón\",\n    \"preview\": \"Vista previa\",\n    \"text\": \"Texto\",\n    \"up\": \"Hacia arriba\",\n    \"down\": \"Abajo\",\n    \"gradient\": \"Degradado\",\n    \"video_uploaded\": \"Cargado\",\n    \"video_external_url\": \"URL externa\",\n    \"fixed\": \"Fijo\",\n    \"pixel\": \"Píxel\",\n    \"percent\": \"Porcentaje\",\n    \"aspect_ratio\": \"Relación de aspecto\",\n    \"above_carousel\": \"Encima del carrusel\",\n    \"all\": \"Todo\",\n    \"always\": \"Siempre\",\n    \"arrows_large\": \"Flechas grandes\",\n    \"arrows\": \"Flechas\",\n    \"balance\": \"Equilibrio\",\n    \"bento\": \"Bento\",\n    \"black\": \"Negro\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Cuerpo (grande)\",\n    \"body_regular\": \"Cuerpo (regular)\",\n    \"body_small\": \"Cuerpo (pequeño)\",\n    \"bold\": \"Negrita\",\n    \"bottom_left\": \"Abajo a la izquierda\",\n    \"bottom_right\": \"Abajo a la derecha\",\n    \"bottom\": \"Abajo\",\n    \"capitalize\": \"Mayúscula inicial\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carrusel\",\n    \"check_box\": \"Casilla de verificación\",\n    \"chevron_large\": \"Chevrons grandes\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrons\",\n    \"classic\": \"Clásico\",\n    \"collection_images\": \"Imágenes de colecciones\",\n    \"color\": \"Color\",\n    \"complementary\": \"Complementario\",\n    \"dissolve\": \"Disolver\",\n    \"dotted\": \"Punteado\",\n    \"editorial\": \"Editorial\",\n    \"extra_large\": \"Extragrande\",\n    \"extra_small\": \"Extrapequeño\",\n    \"featured_collections\": \"Colecciones destacadas\",\n    \"featured_products\": \"Productos destacados\",\n    \"font_primary\": \"Principal\",\n    \"font_secondary\": \"Secundaria\",\n    \"font_tertiary\": \"Terciaria\",\n    \"forward\": \"Adelante\",\n    \"full_screen\": \"Pantalla completa\",\n    \"heading_extra_large\": \"Encabezado (extragrande)\",\n    \"heading_extra_small\": \"Encabezado (extrapequeño)\",\n    \"heading_large\": \"Encabezado (grande)\",\n    \"heading_regular\": \"Encabezado (regular)\",\n    \"heading_small\": \"Encabezado (pequeño)\",\n    \"icon\": \"Ícono\",\n    \"image\": \"Imagen\",\n    \"input\": \"Entrada\",\n    \"inside_carousel\": \"Dentro del carrusel\",\n    \"inverse_large\": \"Inversa grande\",\n    \"inverse\": \"Inversa\",\n    \"large_arrows\": \"Flechas grandes\",\n    \"large_chevrons\": \"Chevrons grandes\",\n    \"left\": \"Izquierda\",\n    \"light\": \"Ligero\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Holgado\",\n    \"media_first\": \"Multimedia primero\",\n    \"media_second\": \"Multimedia segundo\",\n    \"modal\": \"Modal\",\n    \"narrow\": \"Estrecho\",\n    \"never\": \"Nunca\",\n    \"next_to_carousel\": \"Junto al carrusel\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Sin salto de línea\",\n    \"off_media\": \"Fuera de la multimedia\",\n    \"on_media\": \"Sobre la multimedia\",\n    \"on_scroll_up\": \"Al desplazarte hacia arriba\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Píldora\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Bonito\",\n    \"price\": \"Precio\",\n    \"primary_style\": \"Estilo principal\",\n    \"rectangle\": \"Rectángulo\",\n    \"regular\": \"Regular\",\n    \"related\": \"Relacionado\",\n    \"reverse\": \"Invertido\",\n    \"rich_text\": \"Texto enriquecido\",\n    \"right\": \"Derecha\",\n    \"secondary_style\": \"Estilo secundario\",\n    \"semibold\": \"Seminegrita\",\n    \"shaded\": \"Sombreado\",\n    \"show_second_image\": \"Mostrar segunda imagen\",\n    \"single\": \"Simple\",\n    \"slide_left\": \"Deslizar a la izquierda\",\n    \"slide_up\": \"Deslizar hacia arriba\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Apilar\",\n    \"text_only\": \"Solo texto\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturas\",\n    \"tight\": \"Ajustado\",\n    \"top_left\": \"Arriba a la izquierda\",\n    \"top_right\": \"Arriba a la derecha\",\n    \"top\": \"Arriba\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Subrayado\",\n    \"video\": \"Video\",\n    \"wide\": \"Ancho\",\n    \"youtube\": \"YouTube\",\n    \"compact\": \"Compacto\",\n    \"standard\": \"Estándar\",\n    \"accent\": \"Acento\",\n    \"below_image\": \"Debajo de la imagen\",\n    \"blur\": \"Desenfoque\",\n    \"body\": \"Cuerpo\",\n    \"button_primary\": \"Botón principal\",\n    \"button_secondary\": \"Botón secundario\",\n    \"crop_to_fit\": \"Recortar para ajustar\",\n    \"hidden\": \"Oculto\",\n    \"hint\": \"Indicación\",\n    \"maintain_aspect_ratio\": \"Mantener la relación de aspecto\",\n    \"off\": \"Desactivado\",\n    \"on_image\": \"Sobre la imagen\",\n    \"reveal\": \"Revelar\",\n    \"social_bluesky\": \"Redes sociales: Bluesky\",\n    \"social_facebook\": \"Redes sociales: Facebook\",\n    \"social_instagram\": \"Redes sociales: Instagram\",\n    \"social_linkedin\": \"Redes sociales: LinkedIn\",\n    \"social_pinterest\": \"Redes sociales: Pinterest\",\n    \"social_snapchat\": \"Redes sociales: Snapchat\",\n    \"social_spotify\": \"Redes sociales: Spotify\",\n    \"social_threads\": \"Redes sociales: Threads\",\n    \"social_tiktok\": \"Redes sociales: TikTok\",\n    \"social_tumblr\": \"Redes sociales: Tumblr\",\n    \"social_twitter\": \"Redes sociales: X (Twitter)\",\n    \"social_whatsapp\": \"Redes sociales: WhatsApp\",\n    \"social_vimeo\": \"Redes sociales: Vimeo\",\n    \"social_youtube\": \"Redes sociales: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"subheading\": \"Subencabezado\",\n    \"lift\": \"Levantar\",\n    \"scale\": \"Escalar\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Con pistas\",\n    \"below_media\": \"Debajo del contenido multimedia\",\n    \"full_frame\": \"Marco completo\",\n    \"icons\": \"Íconos\"\n  },\n  \"content\": {\n    \"advanced\": \"Avanzado\",\n    \"background_image\": \"Imagen de fondo\",\n    \"background_video\": \"Video de fondo\",\n    \"block_size\": \"Tamaño del bloque\",\n    \"borders\": \"Bordes\",\n    \"describe_the_video_for\": \"Describe el video para clientes que usan lectores de pantalla. [Más información](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Tamaño de la sección\",\n    \"slideshow_width\": \"Ancho de la diapositiva\",\n    \"typography\": \"Tipografía\",\n    \"width_is_automatically_optimized\": \"El ancho se optimiza automáticamente para móvil.\",\n    \"complementary_products\": \"Los productos complementarios se configuran con la app Search & Discovery. [Más información](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Las columnas se optimizan automáticamente para móvil\",\n    \"content_width\": \"El ancho del contenido solo se aplica cuando el ancho de la sección está configurado en ancho completo.\",\n    \"responsive_font_sizes\": \"Los tamaños se adaptan automáticamente a todas las pantallas\",\n    \"buttons\": \"Botones\",\n    \"swatches\": \"Muestrario\",\n    \"variant_settings\": \"Configuración de variantes\",\n    \"background\": \"Fondo\",\n    \"cards_layout\": \"Diseño de tarjetas\",\n    \"section_layout\": \"Diseño de la sección\",\n    \"mobile_size\": \"Tamaño para móvil\",\n    \"appearance\": \"Apariencia\",\n    \"arrows\": \"Flechas\",\n    \"body_size\": \"Tamaño del cuerpo de texto\",\n    \"bottom_row_appearance\": \"Apariencia de la fila inferior\",\n    \"carousel_navigation\": \"Navegación del carrusel\",\n    \"carousel_pagination\": \"Paginación del carrusel\",\n    \"copyright\": \"Derechos de autor\",\n    \"edit_logo_in_theme_settings\": \"Edita el logo en [Configuración del tema](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Edita el formato de precios en [Configuración del tema](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Edita el estilo de las variantes en [Configuración del tema](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Las suscripciones agregan [perfiles de cliente](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Para que se muestre el botón, el canal Shop debe estar instalado y Shop Pay activado. [Más información](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Fuentes\",\n    \"grid\": \"Cuadrícula\",\n    \"heading_size\": \"Tamaño del encabezado\",\n    \"image\": \"Imagen\",\n    \"input\": \"Entrada\",\n    \"layout\": \"Diseño\",\n    \"link\": \"Enlace\",\n    \"link_padding\": \"Relleno del enlace\",\n    \"localization\": \"Localización\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margen\",\n    \"media\": \"Multimedia\",\n    \"media_1\": \"Multimedia 1\",\n    \"media_2\": \"Multimedia 2\",\n    \"menu\": \"Menú\",\n    \"mobile_layout\": \"Diseño para móvil\",\n    \"padding\": \"Relleno\",\n    \"padding_desktop\": \"Relleno en escritorio\",\n    \"paragraph\": \"Párrafo\",\n    \"policies\": \"Políticas\",\n    \"popup\": \"Ventana emergente\",\n    \"search\": \"Búsqueda\",\n    \"size\": \"Tamaño\",\n    \"social_media\": \"Redes sociales\",\n    \"submit_button\": \"Botón Enviar\",\n    \"text_presets\": \"Preajustes de texto\",\n    \"transparent_background\": \"Fondo transparente\",\n    \"typography_primary\": \"Tipografía principal\",\n    \"typography_secondary\": \"Tipografía secundaria\",\n    \"typography_tertiary\": \"Tipografía terciaria\",\n    \"mobile_width\": \"Ancho para móvil\",\n    \"width\": \"Ancho\",\n    \"carousel\": \"Carrusel\",\n    \"colors\": \"Colores\",\n    \"collection_page\": \"Página de colección\",\n    \"customer_account\": \"Cuenta de cliente\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Edita la colección del estado vacío en [Configuración del tema](/editor?context=theme&category=search)\",\n    \"home_page\": \"Página de inicio\",\n    \"images\": \"Imágenes\",\n    \"inverse_logo_info\": \"Se usa cuando el fondo de encabezado transparente está configurado en Inversa\",\n    \"manage_customer_accounts\": \"[Gestiona la visibilidad](/admin/settings/customer_accounts) en la configuración de cuentas de cliente. Las cuentas heredadas no son compatibles.\",\n    \"manage_policies\": \"[Gestionar políticas](/admin/settings/legal)\",\n    \"product_page\": \"Página de producto\",\n    \"text\": \"Texto\",\n    \"thumbnails\": \"Miniaturas\",\n    \"visibility\": \"Visibilidad\",\n    \"visible_if_collection_has_more_products\": \"Visible si la colección tiene más productos de los que se muestran\",\n    \"grid_layout\": \"Diseño de cuadrícula\",\n    \"app_required_for_ratings\": \"Se requiere una app para las calificaciones del producto. [Más información](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ícono\",\n    \"manage_store_name\": \"[Gestionar nombre de la tienda](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Muestra la colección de la sección principal\",\n    \"resource_reference_collection_card_image\": \"Muestra la imagen de la colección principal\",\n    \"resource_reference_collection_title\": \"Muestra el título de la colección principal\",\n    \"resource_reference_product\": \"Se conecta automáticamente al producto principal\",\n    \"resource_reference_product_card\": \"Muestra el producto de la sección principal\",\n    \"resource_reference_product_inventory\": \"Muestra el inventario del producto principal\",\n    \"resource_reference_product_price\": \"Muestra el precio del producto principal\",\n    \"resource_reference_product_recommendations\": \"Muestra recomendaciones basadas en el producto principal\",\n    \"resource_reference_product_review\": \"Muestra las reseñas del producto principal\",\n    \"resource_reference_product_swatches\": \"Muestra el muestrario del producto principal\",\n    \"resource_reference_product_title\": \"Muestra el título del producto principal\",\n    \"resource_reference_product_variant_picker\": \"Muestra las variantes del producto principal\",\n    \"resource_reference_product_media\": \"Muestra la multimedia del producto principal\",\n    \"product_media\": \"Multimedia del producto\",\n    \"section_link\": \"Enlace de la sección\",\n    \"gift_card_form_description\": \"Los clientes pueden enviar tarjetas de regalo al correo electrónico del destinatario con un mensaje personal. [Más información](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Encabezado\",\n    \"resource_reference_product_custom_property\": \"Agrega campos de entrada personalizables para recabar información personalizada que se agregará a esta línea de artículo del pedido y luego será visible en los detalles del pedido.\",\n    \"block_link\": \"Enlace del bloque\",\n    \"submenu_feature\": \"Destacado del submenú\",\n    \"cart_features\": \"Funciones del carrito\",\n    \"email_signup\": \"Suscripción por correo electrónico\",\n    \"mobile_media\": \"Multimedia en móvil\",\n    \"mobile_media_2\": \"Multimedia en móvil 2\",\n    \"navigation\": \"Navegación\",\n    \"popover\": \"Cuadro emergente\",\n    \"popover_position\": \"Posición del cuadro emergente\",\n    \"resource_reference_product_sku\": \"Muestra el SKU del producto principal\",\n    \"content_layout\": \"Diseño del contenido\",\n    \"mobile_media_1\": \"Multimedia para dispositivos móviles 1\",\n    \"utilities\": \"Utilidades\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Comparte información sobre tu marca con tus clientes. Describe un producto, anuncia novedades o da la bienvenida a quienes visitan tu tienda.</p>\",\n    \"bestseller_h2\": \"<h2>Más vendidos</h2>\",\n    \"bestseller_h3\": \"<h3>Más vendidos</h3>\",\n    \"bestseller\": \"<p>Más vendido</p>\",\n    \"build_better\": \"<p>Creemos en hacer las cosas mejor</p>\",\n    \"contact_us\": \"<h2>Contáctanos</h2>\",\n    \"discover_bestsellers\": \"<p>Descubre los más vendidos que han conquistado a nuestros clientes por su perfecta combinación de funcionalidad y estilo.</p>\",\n    \"everythings_starts_with_why\": \"<p>Todo lo que hacemos empieza con el porqué</p>\",\n    \"explore_latest_products\": \"<p>Explora nuestros últimos productos.</p>\",\n    \"faq\": \"<h3>Preguntas frecuentes</h3>\",\n    \"first_to_know\": \"<p>Entérate antes que nadie de nuevas colecciones y ofertas especiales. </p>\",\n    \"free_returns\": \"<p>Devoluciones gratis durante 30 días</p>\",\n    \"free_shipping_over\": \"<p>Envío gratis en compras superiores a 50$</p>\",\n    \"goal_for_every_customer\": \"<p>Nuestro objetivo es que cada cliente quede totalmente satisfecho con su compra. Si no es así, cuéntanoslo y haremos todo lo posible para solucionarlo.</p>\",\n    \"home_to_shirts\": \"<p>Inicio → Camisas</p>\",\n    \"intentional_design\": \"<h2>Diseño intencional</h2>\",\n    \"introducing_h2\": \"<h2><em>Presentamos</em></h2>\",\n    \"latest_products\": \"<p>Te presentamos nuestros productos más recientes, diseñados especialmente para la temporada. ¡Compra tus favoritos antes de que se agoten!</p>\",\n    \"made_local_and_global\": \"<p>Nuestros productos se fabrican tanto localmente como globalmente. Seleccionamos cuidadosamente a nuestros socios de fabricación para garantizar alta calidad y un precio justo.</p>\",\n    \"made_with_care_h2\": \"<h2>Hecho con cuidado</h2>\",\n    \"made_with_care_extended\": \"<p>Hecho con cuidado y amado incondicionalmente por nuestros clientes, este superventas emblemático supera todas las expectativas.</p>\",\n    \"made_with_care\": \"<p>Hecho con cuidado y amado incondicionalmente por nuestros clientes.</p>\",\n    \"make_things_better_extended\": \"<p>Creamos cosas que funcionan mejor y duran más. Nuestros productos resuelven problemas reales con un diseño limpio y materiales honestos.</p>\",\n    \"make_things_better\": \"<p>Creamos cosas que funcionan mejor y duran más.</p>\",\n    \"may_also_like\": \"<h4>También te puede gustar</h4>\",\n    \"new_arrivals_h1\": \"<h1>Novedades</h1>\",\n    \"new_arrivals_h2\": \"<h2>Novedades</h2>\",\n    \"new_arrivals_h3\": \"<h3>Novedades</h3>\",\n    \"product_launch\": \"<p>Descubre lo que hay detrás de nuestro último lanzamiento de producto.</p>\",\n    \"product_story\": \"<p>En el corazón de cada producto hay una historia única, impulsada por nuestra pasión por la calidad y la innovación. Cada artículo mejora tu día a día y te alegra.</p>\",\n    \"real_people\": \"<p>Personas reales creando grandes productos</p>\",\n    \"related_product\": \"<h3>Productos relacionados</h3>\",\n    \"return_policy\": \"<h2>¿Cuál es la política de devoluciones?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 reseñas</p>\",\n    \"shipping_based_on_location\": \"<p>El envío se calcula según tu ubicación y los artículos de tu pedido. Siempre conocerás el precio del envío antes de realizar la compra.</p>\",\n    \"shop_by_collection\": \"<h3>Compra por colección</h3>\",\n    \"signature_products\": \"<h2>Nuestro producto insignia</h2>\",\n    \"styled_with\": \"<h3>Combinado con</h3>\",\n    \"subscribe\": \"<h2>Suscríbete a nuestros correos</h2>\",\n    \"team_with_goal\": \"<h2>Un equipo con un objetivo</h2>\",\n    \"unable_to_accept_returns\": \"<p>No podemos aceptar devoluciones de ciertos artículos. Se marcarán claramente antes de la compra.</p>\",\n    \"work_quickly_to_ship\": \"<p>Trabajaremos para enviar tu pedido lo antes posible. Cuando se envíe, recibirás un correo electrónico con más información. Los tiempos de entrega varían según tu ubicación.</p>\",\n    \"join_our_email_list\": \"<h2>Únete a nuestra lista de correo</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Consigue ofertas exclusivas y acceso anticipado a nuevos productos.</p>\",\n    \"artistry_in_action\": \"<p>Artesanía en acción </p>\",\n    \"authentic_materials\": \"<p>Materiales auténticos, sin concesiones </p>\",\n    \"bold_style_recognizable\": \"<p>Estilo audaz que se reconoce en cualquier parte</p>\",\n    \"discover_elevated_design\": \"<p>Descubre un diseño refinado </p>\",\n    \"expert_construction_finish\": \"<p>Construcción experta y acabado impecable</p>\",\n    \"made_to_last\": \"<p>Hecho para durar </p>\",\n    \"pieces_better_with_time\": \"<p>Piezas que solo mejoran con el tiempo y el uso </p>\",\n    \"quality_you_can_feel\": \"<h2>Calidad que se siente</h2>\",\n    \"uncompromising_standards\": \"<p>Estándares sin concesiones </p>\",\n    \"featured_collection_h2\": \"<h2>Colección destacada</h2>\",\n    \"shop_collection\": \"<p>Descubre nuestra colección seleccionada con favoritos seleccionados a mano que combinan estilo y calidad.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Comprar ahora\",\n    \"collapsible_row\": \"Fila plegable\",\n    \"heading\": \"Título\",\n    \"email_signup_button_label\": \"Suscribirse\",\n    \"accordion_heading\": \"Título del acordeón\",\n    \"contact_form_button_label\": \"Enviar\",\n    \"popup_link\": \"Enlace de ventana emergente\",\n    \"sign_up\": \"Regístrate\",\n    \"welcome_to_our_store\": \"Te damos la bienvenida a nuestra tienda\",\n    \"be_bold\": \"Atrévete.\",\n    \"shop_our_latest_arrivals\": \"¡Compra nuestras últimas novedades!\",\n    \"are_purchases_final_sale\": \"¿Alguna compra es final y no tiene devolución?\",\n    \"care_instructions\": \"Instrucciones de cuidado\",\n    \"cart\": \"Carrito\",\n    \"discover_collection\": \"Descubre la colección\",\n    \"fit\": \"ajuste\",\n    \"how_much_for_shipping\": \"¿Cuánto cuesta el envío?\",\n    \"learn_more\": \"Más información\",\n    \"manufacturing\": \"Fabricación\",\n    \"materials\": \"Materiales\",\n    \"return_policy\": \"Política de devoluciones\",\n    \"shipping\": \"Envío\",\n    \"shop_now_button_label\": \"Comprar ahora\",\n    \"sign_up_button_label\": \"Registrarse\",\n    \"submit_button_label\": \"Enviar\",\n    \"up_the_ante\": \"Sube\\nLa\\nApuesta\",\n    \"view_all_button_label\": \"Ver todo\",\n    \"what_is_return_policy\": \"¿Cuál es la política de devoluciones?\",\n    \"when_will_order_arrive\": \"¿Cuándo recibiré mi pedido?\",\n    \"where_are_products_made\": \"¿Dónde se fabrican tus productos?\",\n    \"trending_now\": \"Tendencias del momento\",\n    \"shop_the_look\": \"Compra el look\",\n    \"bestsellers\": \"Más vendidos\",\n    \"featured_collection\": \"Colección destacada\",\n    \"new_arrivals\": \"Novedades\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"En dispositivos móviles siempre se usa el carrusel\",\n    \"video_alt_text\": \"Describe el video para personas usuarias de tecnologías de asistencia\",\n    \"video_autoplay\": \"Los videos estarán silenciados de forma predeterminada\",\n    \"video_external\": \"Usa una URL de YouTube o Vimeo\",\n    \"carousel_hover_behavior_not_supported\": \"El efecto hover de \\\"Carousel\\\" no se admite cuando el tipo \\\"Carousel\\\" está seleccionado a nivel de sección\",\n    \"checkout_buttons\": \"Permite que los compradores paguen más rápido y puede mejorar la conversión. [Más información](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Encabezado personalizado\",\n    \"edit_presets_in_theme_settings\": \"Edita los preajustes en [Configuración del tema](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Personaliza los filtros con la [app Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"En móvil se usa el diseño de cuadrícula\",\n    \"logo_font\": \"Aplica solo cuando no se ha seleccionado un logo\",\n    \"manage_countries_regions\": \"[Gestionar países/regiones](/admin/settings/markets)\",\n    \"manage_languages\": \"[Gestionar idiomas](/admin/settings/languages)\",\n    \"transparent_background\": \"Revisa cada plantilla donde se aplique el fondo transparente para garantizar la legibilidad\",\n    \"aspect_ratio_adjusted\": \"Se ajusta en algunos diseños\",\n    \"custom_liquid\": \"Agrega fragmentos de app u otro código para crear personalizaciones avanzadas. [Más información](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"Se aplica solo a imágenes\",\n    \"hover_effects\": \"Se aplica a las tarjetas de producto y de colección\",\n    \"pills_usage\": \"Se usa para filtros aplicados, códigos de descuento y sugerencias de búsqueda\",\n    \"hide_logo_on_home_page_help\": \"El logo seguirá visible cuando el encabezado fijo esté activo\",\n    \"media_type_info\": \"Los destacados se completan con los enlaces del menú\",\n    \"logo_height\": \"Solo afecta el logo del encabezado\",\n    \"actions_display_style\": \"Los íconos siempre se usan en la versión móvil\"\n  },\n  \"categories\": {\n    \"basic\": \"Básico\",\n    \"collection\": \"Colección\",\n    \"collection_list\": \"Lista de colecciones\",\n    \"footer\": \"Pie de página\",\n    \"forms\": \"Formularios\",\n    \"header\": \"Encabezado\",\n    \"layout\": \"Diseño\",\n    \"links\": \"Enlaces\",\n    \"product\": \"Producto\",\n    \"product_list\": \"Colección destacada\",\n    \"banners\": \"Banners\",\n    \"collections\": \"Colecciones\",\n    \"custom\": \"Personalizado\",\n    \"decorative\": \"Decorativo\",\n    \"products\": \"Productos\",\n    \"other_sections\": \"Otros\",\n    \"storytelling\": \"Narrativa\",\n    \"text\": \"Texto\"\n  }\n}\n"
  },
  {
    "path": "locales/fi.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Lataa video: {{ description }}\",\n    \"sold_out\": \"Loppuunmyyty\",\n    \"email_signup\": {\n      \"label\": \"Sähköposti\",\n      \"placeholder\": \"Sähköpostiosoite\",\n      \"success\": \"Kiitos tilauksesta!\"\n    },\n    \"filter\": \"Suodata\",\n    \"payment_methods\": \"Maksutavat\",\n    \"contact_form\": {\n      \"name\": \"Nimi\",\n      \"email\": \"Sähköpostiosoite\",\n      \"phone\": \"Puhelinnumero\",\n      \"comment\": \"Kommentti\",\n      \"post_success\": \"Kiitos yhteydenotostasi. Vastaamme sinulle mahdollisimman pian.\",\n      \"error_heading\": \"Muokkaa seuraavia:\"\n    },\n    \"slider_label\": \"Liukusäädin\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Toista 3D-malli\",\n    \"play_video\": \"Toista video\",\n    \"unit_price\": \"Yksikköhinta\",\n    \"country_results_count\": \"{{ count }} tulosta\",\n    \"slideshow_pause\": \"Keskeytä diaesitys\",\n    \"slideshow_play\": \"Toista diaesitys\",\n    \"remove_item\": \"Poista {{ title}}\",\n    \"skip_to_text\": \"Ohita ja siirry sisältöön\",\n    \"skip_to_product_info\": \"Siirry tuotetietoihin\",\n    \"skip_to_results_list\": \"Siirry tulosluetteloon\",\n    \"new_window\": \"Avautuu uuteen ikkunaan.\",\n    \"slideshow_next\": \"Seuraava dia\",\n    \"slideshow_previous\": \"Edellinen dia\",\n    \"close_dialog\": \"Sulje valintaikkuna\",\n    \"reset_search\": \"Nollaa haku\",\n    \"search_results_count\": \"{{ count }} hakutulosta haulla {{ query }}\",\n    \"search_results_no_results\": \"Ei tuloksia haulla {{ query }}\",\n    \"filters\": \"Suodattimet\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} suodatin käytössä\",\n      \"other\": \"{{ count }} suodatinta käytössä\"\n    },\n    \"account\": \"Tili\",\n    \"cart\": \"Ostoskori\",\n    \"cart_count\": \"Tuotteita ostoskorissa yhteensä\",\n    \"menu\": \"Valikko\",\n    \"country_region\": \"Maa/alue\",\n    \"slide_status\": \"Dia {{ index }}/{{ length }}\",\n    \"scroll_to\": \"Vieritä kohtaan {{ title }}\",\n    \"loading_product_recommendations\": \"Tuotesuositusten lataaminen\",\n    \"discount\": \"Käytä alennuskoodia\",\n    \"discount_menu\": \"Alennuskoodit\",\n    \"discount_applied\": \"Käytetty alennuskoodi: {{ code }}\",\n    \"inventory_status\": \"Varaston tila\",\n    \"pause_video\": \"Keskeytä video\",\n    \"find_country\": \"Etsi maa\",\n    \"localization_region_and_language\": \"Alue- ja kielivalitsin\",\n    \"decrease_quantity\": \"Pienennä määrää\",\n    \"increase_quantity\": \"Suurenna määrää\",\n    \"quantity\": \"Määrä\",\n    \"rating\": \"Tämän tuoteen tuotearvio on {{ rating }}/5\",\n    \"nested_product\": \"{{ product_title }} – {{ parent_title }}\",\n    \"remove\": \"Poista\",\n    \"view_pricing_info\": \"Näytä hinnoittelutiedot\",\n    \"open_hotspot\": \"Avoin yhteyspiste\",\n    \"slideshow\": \"Diaesitys\",\n    \"header_navigation_label\": \"Ensisijainen\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Lisää ostoskoriin\",\n    \"clear_all\": \"Tyhjennä kaikki\",\n    \"remove\": \"Poista\",\n    \"view_in_your_space\": \"Näytä omassa tilassasi\",\n    \"show_filters\": \"Suodata\",\n    \"clear\": \"Tyhjennä\",\n    \"continue_shopping\": \"Jatka ostoksia\",\n    \"log_in_html\": \"Onko sinulla tili? <a href=\\\"{{ link }}\\\">Kirjaudu sisään</a>, jotta voit maksaa kassalla nopeammin.\",\n    \"see_items\": {\n      \"one\": \"Näytä {{ count }} tuote\",\n      \"other\": \"Näytä {{ count }} tuotetta\"\n    },\n    \"view_all\": \"Näytä kaikki\",\n    \"add\": \"Lisää\",\n    \"choose\": \"Valitse\",\n    \"added\": \"Lisätty\",\n    \"show_less\": \"Näytä vähemmän\",\n    \"show_more\": \"Näytä lisää\",\n    \"close\": \"Sulje\",\n    \"more\": \"Lisää\",\n    \"reset\": \"Palauta\",\n    \"zoom\": \"Lähennä\",\n    \"close_dialog\": \"Sulje valintaikkuna\",\n    \"back\": \"Takaisin\",\n    \"log_in\": \"Kirjaudu sisään\",\n    \"log_out\": \"Kirjaudu ulos\",\n    \"remove_discount\": \"Poista alennus {{ code }}\",\n    \"enter_using_password\": \"Siirry sisään antamalla salasana\",\n    \"submit\": \"Lähetä\",\n    \"enter_password\": \"Anna salasana\",\n    \"view_store_information\": \"Näytä kaupan tiedot\",\n    \"apply\": \"Käytä\",\n    \"sign_in_options\": \"Muut kirjautumisvaihtoehdot\",\n    \"sign_up\": \"Rekisteröidy\",\n    \"open_image_in_full_screen\": \"Avaa kuva koko näytön tilassa\",\n    \"sort\": \"Lajittele\",\n    \"show_all_options\": \"Näytä kaikki vaihtoehdot\",\n    \"open\": \"Avaa\"\n  },\n  \"content\": {\n    \"reviews\": \"arvostelua\",\n    \"language\": \"Kieli\",\n    \"localization_region_and_language\": \"Alue ja kieli\",\n    \"no_results_found\": \"Tuloksia ei löytynyt\",\n    \"cart_total\": \"Ostoskori yhteensä\",\n    \"your_cart_is_empty\": \"Ostoskorisi on tyhjä\",\n    \"product_image\": \"Tuotekuva\",\n    \"product_information\": \"Tuotetiedot\",\n    \"quantity\": \"Määrä\",\n    \"product_total\": \"Tuote yhteensä\",\n    \"cart_estimated_total\": \"Arvioitu kokonaishinta\",\n    \"seller_note\": \"Erityisohjeet\",\n    \"cart_subtotal\": \"Välisumma\",\n    \"discounts\": \"Alennukset\",\n    \"discount\": \"Alennus\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Sisältää tullit ja verot. Alennukset ja <a href=\\\"{{ link }}\\\">toimituskulut</a> lasketaan kassalla.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Sisältää tullit ja verot. Alennukset ja toimituskulut lasketaan kassalla.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Sisältää verot. Alennukset ja <a href=\\\"{{ link }}\\\">toimituskulut</a> lasketaan kassalla.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Sisältää verot. Alennukset ja toimituskulut lasketaan kassalla.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Sisältää tullit. Verot, alennukset ja <a href=\\\"{{ link }}\\\">toimituskulut</a> lasketaan kassalla.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Sisältää tullit. Verot, alennukset ja toimituskulut lasketaan kassalla.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Verot, alennukset ja <a href=\\\"{{ link }}\\\">toimituskulut</a> lasketaan kassalla.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Verot, alennukset ja toimituskulut lasketaan kassalla.\",\n    \"checkout\": \"Maksa kassalla\",\n    \"cart_title\": \"Ostoskori\",\n    \"price\": \"Hinta\",\n    \"price_regular\": \"Normaalihinta\",\n    \"price_compare_at\": \"Vertailuhinta\",\n    \"price_sale\": \"Alennushinta\",\n    \"duties_and_taxes_included\": \"Sisältää tullit ja verot.\",\n    \"duties_included\": \"Sisältää tullit.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Toimituskulut</a> lasketaan kassalla.\",\n    \"taxes_included\": \"Sisältää verot.\",\n    \"product_badge_sold_out\": \"Loppuunmyyty\",\n    \"product_badge_sale\": \"Alennusmyynti\",\n    \"search_input_label\": \"Hae\",\n    \"search_input_placeholder\": \"Hae\",\n    \"search_results\": \"Hakutulokset\",\n    \"search_results_label\": \"Hakutulokset\",\n    \"search_results_no_results\": \"Ei tuloksia haulla {{ terms }}. Kokeile tehdä uusi haku.\",\n    \"search_results_resource_articles\": \"Blogipostaukset\",\n    \"search_results_resource_collections\": \"Kokoelmat\",\n    \"search_results_resource_pages\": \"Sivut\",\n    \"search_results_resource_products\": \"Tuotteet\",\n    \"search_results_resource_queries\": \"Hakuehdotukset\",\n    \"search_results_view_all\": \"Näytä kaikki\",\n    \"search_results_view_all_button\": \"Näytä kaikki\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} tuote\",\n      \"other\": \"{{ count }} tuotetta\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Oletus\",\n      \"grid_fieldset\": \"Sarakeruudukko\",\n      \"single_item\": \"Yksittäinen\",\n      \"zoom_out\": \"Loitonna\"\n    },\n    \"unavailable\": \"Ei saatavilla\",\n    \"collection_placeholder\": \"Kokoelman nimi\",\n    \"product_card_placeholder\": \"Tuotteen nimi\",\n    \"recently_viewed_products\": \"Äskettäin katsottu\",\n    \"product_count\": \"Tuotemäärä\",\n    \"item_count\": {\n      \"one\": \"{{ count }} tuote\",\n      \"other\": \"{{ count }} tuotetta\"\n    },\n    \"errors\": \"Virheet\",\n    \"search\": \"Haku\",\n    \"search_results_no_results_check_spelling\": \"Ei tuloksia haulla {{ terms }}. Tarkista oikeinkirjoitus tai kokeile toista sanaa tai ilmaisua.\",\n    \"featured_products\": \"Esiteltävät tuotteet\",\n    \"price_from\": \"Alkaen {{ price }}\",\n    \"filters\": \"Suodattimet\",\n    \"no_products_found\": \"Tuotteita ei löytynyt.\",\n    \"price_filter_html\": \"Korkein hinta on {{ price }}\",\n    \"use_fewer_filters_html\": \"Käytä vähemmän suodattimia tai <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">tyhjennä kaikki suodattimet</a>.\",\n    \"read_more\": \"Lue lisää...\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Tili\",\n    \"account_title_personalized\": \"Hei {{ first_name }}!\",\n    \"account_orders\": \"Tilaukset\",\n    \"account_profile\": \"Profiili\",\n    \"discount_code\": \"Alennuskoodi\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Sisältää tullit ja verot. Toimituskulut lasketaan kassalla.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Sisältää tullit ja verot. Toimituskulut lasketaan kassalla.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Sisältää tullit. Toimituskulut lasketaan kassalla.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Sisältää tullit. Toimituskulut lasketaan kassalla.\",\n    \"pickup_available_at_html\": \"Noudettavissa sijainnista <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Noudettavissa klo {{ pickup_time }}\",\n    \"pickup_not_available\": \"Nouto ei ole tällä hetkellä mahdollista\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Verot ja <a href=\\\"{{ link }}\\\">toimituskulut</a> lasketaan kassalla.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Verot ja toimituskulut lasketaan kassalla.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Sisältää verot. Toimituskulut lasketaan kassalla.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Sisältää verot. Toimituskulut lasketaan kassalla.\",\n    \"wrong_password\": \"Väärä salasana\",\n    \"view_more_details\": \"Katso lisätietoja\",\n    \"inventory_low_stock\": \"Varasto vähissä\",\n    \"inventory_in_stock\": \"Varastossa\",\n    \"inventory_out_of_stock\": \"Loppunut varastosta\",\n    \"page_placeholder_title\": \"Sivun otsikko\",\n    \"page_placeholder_content\": \"Valitse sivu, jonka sisältöä haluat tarkastella.\",\n    \"placeholder_image\": \"Paikkamerkkikuva\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} jäljellä\",\n      \"other\": \"{{ count }} jäljellä\"\n    },\n    \"powered_by\": \"Tämän kaupan alustana on\",\n    \"store_owner_link_html\": \"Oletko kaupan omistaja? <a href=\\\"{{ link }}\\\">Kirjaudu sisään tästä</a>\",\n    \"shipping_discount_error\": \"Toimitusalennukset näytetään kassalla osoitteen lisäämisen jälkeen\",\n    \"discount_code_error\": \"Alennuskoodin lisääminen ostoskoriisi ei onnistu\",\n    \"shipping_policy\": \"Toimituskulut lasketaan kassalla.\",\n    \"recipient_form_send_to\": \"Lähetä:\",\n    \"recipient_form_email_label\": \"Vastaanottajan sähköpostiosoite\",\n    \"recipient_form_email_label_my_email\": \"Oma sähköpostiosoite\",\n    \"recipient_form_email_address\": \"Vastaanottajan sähköpostiosoite\",\n    \"recipient_form_name_label\": \"Vastaanottajan sähköpostiosoite (valinnainen)\",\n    \"recipient_form_message\": \"Viesti (valinnainen)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} merkkiä käytetty\",\n    \"recipient_form_send_on\": \"VVVV-KK-PP\",\n    \"recipient_form_send_on_label\": \"Lähetysajankohta (valinnainen)\",\n    \"recipient_form_fields_visible\": \"Vastaanottajalomakekentät ovat nyt näkyvissä\",\n    \"recipient_form_fields_hidden\": \"Vastaanottajalomakekentät ovat nyt piilotettuja\",\n    \"recipient_form_error\": \"Lomakkeen lähettämisessä tapahtui virhe\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} merkkiä käytetty\",\n    \"terms_and_policies\": \"Ehdot ja käytännöt\",\n    \"item_count_cutoff\": \"Yli {{ count }} tuotetta\",\n    \"pagination\": {\n      \"nav_label\": \"Sivunumerointinavigointi\",\n      \"previous\": \"Edellinen\",\n      \"next\": \"Seuraava\",\n      \"page\": \"Sivu {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Volyymihinnoittelu saatavilla\",\n    \"volume_pricing\": \"Volyymihinnoittelu\",\n    \"at_price_each\": \"{{ price }}/kpl\",\n    \"each\": \"{{ price }}/kpl\",\n    \"each_abbreviation\": \"kpl\",\n    \"price_at\": \"hintaan\",\n    \"price_range\": \"Hintahaarukka\",\n    \"cancel\": \"Peruuta\",\n    \"product_subtotal\": \"Tuotteen välisumma\",\n    \"quantity_per_item\": \"/kpl\",\n    \"remove_all\": \"Poista kaikki\",\n    \"remove_all_items_confirmation\": \"Poistetaanko kaikki {{ count }} tuotetta ostoskorista?\",\n    \"remove_one_item_confirmation\": \"Poistetaanko 1 tuote ostoskorista?\",\n    \"total_items\": \"Tuotteita yhteensä\",\n    \"variant\": \"Versio\",\n    \"variant_total\": \"Versioiden summa\",\n    \"view_cart\": \"Näytä ostoskori\",\n    \"your_cart\": \"Ostoskorisi\",\n    \"items_added_to_cart\": {\n      \"one\": \"Yksi tuote lisätty ostoskoriin\",\n      \"other\": \"{{ count }} tuotetta lisätty ostoskoriin\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Käytä lahjakortin koodia verkossa tai QR-koodia kaupassa\",\n      \"title\": \"Tässä on lahjakorttisi saldo ({{ value }}) kauppaan {{ shop }}!\",\n      \"subtext\": \"Lahjakorttisi\",\n      \"shop_link\": \"Vieraile verkkokaupassa\",\n      \"add_to_apple_wallet\": \"Lisää Apple Walletiin\",\n      \"qr_image_alt\": \"QR-koodi – lunasta lahjakortti skannaamalla\",\n      \"copy_code\": \"Kopioi lahjakortin koodi\",\n      \"expiration_date\": \"Voimassa {{ expires_on }} asti\",\n      \"copy_code_success\": \"Koodin kopioiminen onnistui\",\n      \"expired\": \"Vanhentunut\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Salasana\",\n    \"search\": \"Hae\",\n    \"product_title\": \"Tuotteen nimi\",\n    \"collection_title\": \"Kokoelman nimi\",\n    \"blog_posts\": \"Blogipostaukset\",\n    \"blog_post_title\": \"Otsikko\",\n    \"blog_post_author\": \"Tekijä\",\n    \"blog_post_date\": \"Päivämäärä\",\n    \"blog_post_description\": \"Ote blogipostauksesi sisällöstä\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Lisää ostoskoriin\",\n      \"added_to_cart\": \"Lisätty ostoskoriin\",\n      \"adding_to_cart\": \"Lisätään...\",\n      \"add_to_cart_error\": \"Ostoskoriin lisättäessä tapahtui virhe\",\n      \"sold_out\": \"Loppuunmyyty\",\n      \"unavailable\": \"Ei käytettävissä\",\n      \"quantity_error_max\": \"Tämän tuotteen enimmäismäärä on {{ maximum }}\",\n      \"quantity\": \"Määrä\",\n      \"quantity_increments\": \"Lisäysten koko: {{ increment }}\",\n      \"quantity_minimum\": \"Vähimmäismäärä {{ minimum }}\",\n      \"quantity_maximum\": \"Enimmäismäärä {{ maximum }}\",\n      \"in_cart\": \"ostoskorissa\",\n      \"default_title\": \"Oletusotsikko\",\n      \"sticky_add_to_cart\": \"Pikalisäys ostoskoririville\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"-\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} kommentti\",\n        \"other\": \"{{ count }} kommenttia\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Sähköposti\",\n      \"error\": \"Kommenttia ei voitu julkaista. Korjaa seuraavat:\",\n      \"heading\": \"Jätä kommentti\",\n      \"message\": \"Viesti\",\n      \"moderated\": \"Huomaa, että kommenttien täytyy olla hyväksyttyjä ennen kuin ne julkaistaan.\",\n      \"name\": \"Nimi\",\n      \"post\": \"Julkaise kommentti\",\n      \"success_moderated\": \"Kommentti on julkaistu; odotetaan moderointia\",\n      \"success\": \"Kommentti on julkaistu\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/fi.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Reunukset\",\n    \"collapsible_row\": \"Supistettava rivi\",\n    \"colors\": \"Värit\",\n    \"custom_section\": \"Mukautettu osio\",\n    \"icon\": \"Kuvake\",\n    \"logo_and_favicon\": \"Logo ja favicon\",\n    \"overlapping_blocks\": \"Limittäiset lohkot\",\n    \"product_buy_buttons\": \"Osta-painikkeet\",\n    \"product_description\": \"Kuvaus\",\n    \"product_price\": \"Hinta\",\n    \"product_variant_picker\": \"Versionvalitsin\",\n    \"slideshow\": \"Diaesitys\",\n    \"typography\": \"Typografia\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Diaesityksen ohjaimet\",\n    \"size\": \"Koko\",\n    \"spacing\": \"Välistys\",\n    \"product_recommendations\": \"Suositellut tuotteet\",\n    \"product_media\": \"Tuotemedia\",\n    \"featured_collection\": \"Esittelykokoelma\",\n    \"add_to_cart\": \"Lisää ostoskoriin\",\n    \"email_signup\": \"Sähköpostitilaus\",\n    \"submit_button\": \"Lähetä-painike\",\n    \"grid_layout_selector\": \"Ruudukkoasettelun valitsin\",\n    \"image\": \"Kuva\",\n    \"list_items\": \"Luettelon kohdat\",\n    \"facets\": \"Kohdistukset\",\n    \"variants\": \"Versiot\",\n    \"styles\": \"Tyylit\",\n    \"product_cards\": \"Tuotekortit\",\n    \"buttons\": \"Painikkeet\",\n    \"inputs\": \"Syöttökentät\",\n    \"primary_button\": \"Ensisijainen painike\",\n    \"secondary_button\": \"Toissijainen painike\",\n    \"popovers_and_modals\": \"Ponnahdusikkunat ja modaaliset ikkunat\",\n    \"marquee\": \"Vierivä banneri\",\n    \"alternating_content_rows\": \"Vuorottelevat rivit\",\n    \"pull_quote\": \"Nostositaatti\",\n    \"contact_form\": \"Yhteydenottolomake\",\n    \"featured_product\": \"Tuotteen korostus\",\n    \"icons_with_text\": \"Kuvakkeet tekstillä\",\n    \"accelerated_checkout\": \"Nopeutettu kassa\",\n    \"accordion\": \"Haitari\",\n    \"accordion_row\": \"Haitaririvi\",\n    \"animations\": \"Animaatiot\",\n    \"announcement\": \"Ilmoitus\",\n    \"announcement_bar\": \"Ilmoituspalkki\",\n    \"badges\": \"Tunnukset\",\n    \"button\": \"Painike\",\n    \"cart\": \"Ostoskori\",\n    \"cart_items\": \"Ostoskorin tuotteet\",\n    \"cart_products\": \"Ostoskorin tuotteet\",\n    \"cart_title\": \"Ostoskori\",\n    \"collection\": \"Kokoelma\",\n    \"collection_card\": \"Kokoelmakortti\",\n    \"collection_columns\": \"Kokoelman sarakkeet\",\n    \"collection_container\": \"Kokoelma\",\n    \"collection_description\": \"Kokoelman kuvaus\",\n    \"collection_image\": \"Kokoelman kuva\",\n    \"collection_info\": \"Kokoelman tiedot\",\n    \"collection_list\": \"Kokoelmaluettelo\",\n    \"collections\": \"Kokoelmat\",\n    \"content\": \"Sisältö\",\n    \"content_grid\": \"Sisältöruudukko\",\n    \"details\": \"Tiedot\",\n    \"divider\": \"Erotin\",\n    \"filters\": \"Suodatus ja lajittelu\",\n    \"follow_on_shop\": \"Seuraa Shopissa\",\n    \"footer\": \"Alatunniste\",\n    \"footer_utilities\": \"Alatunnisteen apuohjelmat\",\n    \"group\": \"Ryhmä\",\n    \"header\": \"Ylätunniste\",\n    \"heading\": \"Otsikko\",\n    \"icons\": \"Kuvakkeet\",\n    \"image_with_text\": \"Kuva tekstillä\",\n    \"input\": \"Syöttökenttä\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Lehtiruudukko\",\n    \"media\": \"Media\",\n    \"menu\": \"Valikko\",\n    \"mobile_layout\": \"Mobiiliasettelu\",\n    \"payment_icons\": \"Maksukuvakkeet\",\n    \"popup_link\": \"Ponnahdusikkunan linkki\",\n    \"predictive_search\": \"Haun ponnahdusikkuna\",\n    \"predictive_search_empty\": \"Ennakoiva haku tyhjä\",\n    \"price\": \"Hinta\",\n    \"product\": \"Tuote\",\n    \"product_card\": \"Tuotekortti\",\n    \"product_card_media\": \"Media\",\n    \"product_card_rendering\": \"Tuotekortin renderöinti\",\n    \"product_grid\": \"Ruudukko\",\n    \"product_grid_main\": \"Tuoteruudukko\",\n    \"product_image\": \"Tuotekuva\",\n    \"product_information\": \"Tuotetiedot\",\n    \"product_list\": \"Esittelykokoelma\",\n    \"product_review_stars\": \"Arvostelutähdet\",\n    \"quantity\": \"Määrä\",\n    \"row\": \"Rivi\",\n    \"search\": \"Haku\",\n    \"section\": \"Osio\",\n    \"selected_variants\": \"Valitut versiot\",\n    \"slide\": \"Dia\",\n    \"social_media_links\": \"Sosiaalisen median linkit\",\n    \"spacer\": \"Välike\",\n    \"steps\": \"Vaiheet\",\n    \"summary\": \"Yhteenveto\",\n    \"swatches\": \"Näyteruudut\",\n    \"testimonials\": \"Asiakaskokemukset\",\n    \"text\": \"Teksti\",\n    \"title\": \"Otsikko\",\n    \"utilities\": \"Apuohjelmat\",\n    \"search_input\": \"Hakukenttä\",\n    \"search_results\": \"Hakutulokset\",\n    \"read_only\": \"Vain luku\",\n    \"collection_title\": \"Kokoelman nimi\",\n    \"collections_bento\": \"Kokoelmaluettelo: Bento-asettelu\",\n    \"faq_section\": \"UKK\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Jumboteksti\",\n    \"view_all_button\": \"Näytä kaikki\",\n    \"video_section\": \"Video\",\n    \"blog\": \"Blogi\",\n    \"blog_posts\": \"Blogipostaukset\",\n    \"custom_liquid\": \"Mukautettu Liquid\",\n    \"blog_post\": \"Blogipostaus\",\n    \"caption\": \"Kuvateksti\",\n    \"collection_card_image\": \"Kuva\",\n    \"collection_links\": \"Kokoelmalinkit\",\n    \"collection_links_spotlight\": \"Kokoelmalinkit: Spotlight\",\n    \"collection_links_text\": \"Kokoelmalinkit: Teksti\",\n    \"collections_carousel\": \"Kokoelmaluettelo: Karuselli\",\n    \"collections_editorial\": \"Kokoelmaluettelo: Toimituksellinen\",\n    \"collections_grid\": \"Kokoelmaluettelo: Ruudukko\",\n    \"copyright\": \"Tekijänoikeus\",\n    \"count\": \"Määrä\",\n    \"divider_section\": \"Erotin\",\n    \"drawers\": \"Laatikot\",\n    \"editorial\": \"Toimituksellinen\",\n    \"editorial_jumbo_text\": \"Toimituksellinen: Jumboteksti\",\n    \"hero_marquee\": \"Hero: Vierivä banneri\",\n    \"input_fields\": \"Syöttökentät\",\n    \"local_pickup\": \"Paikallinen nouto\",\n    \"marquee_section\": \"Vierivä banneri\",\n    \"media_with_text\": \"Media tekstillä\",\n    \"page\": \"Sivu\",\n    \"page_content\": \"Sisältö\",\n    \"page_layout\": \"Sivun asettelu\",\n    \"policy_list\": \"Käytäntölinkit\",\n    \"prices\": \"Hinnat\",\n    \"product_list_button\": \"Näytä kaikki -painike\",\n    \"products_carousel\": \"Esittelykokoelma: Karuselli\",\n    \"products_editorial\": \"Esittelykokoelma: Toimituksellinen\",\n    \"products_grid\": \"Esittelykokoelma: Ruudukko\",\n    \"product_inventory\": \"Tuotevarasto\",\n    \"social_link\": \"Some-linkki\",\n    \"split_showcase\": \"Jaettu esittely\",\n    \"variant_pickers\": \"Versionvalitsimet\",\n    \"pills\": \"Pillerit\",\n    \"product_title\": \"Tuotenimike\",\n    \"large_logo\": \"Suuri logo\",\n    \"description\": \"Kuvaus\",\n    \"featured_image\": \"Esittelykuva\",\n    \"multicolumn\": \"Monisarakkeinen\",\n    \"rich_text_section\": \"Rich text\",\n    \"product_custom_property\": \"Erityisohjeet\",\n    \"hero_bottom_aligned\": \"Hero: Tasaus alas\",\n    \"blog_card\": \"Blogikortti\",\n    \"blog_posts_grid\": \"Blogipostaukset: Ruudukko\",\n    \"blog_posts_carousel\": \"Blogipostaukset: Karuselli\",\n    \"blog_posts_editorial\": \"Blogipostaukset: Toimituksellinen\",\n    \"excerpt\": \"Ote\",\n    \"footer_password\": \"Salasanan alatunniste\",\n    \"policies_and_links\": \"Käytännöt ja linkit\",\n    \"card\": \"Kortti\",\n    \"carousel\": \"Karuselli\",\n    \"carousel_content\": \"Karusellin sisältö\",\n    \"quick_order_list\": \"Pikatilausluettelo\",\n    \"column\": \"Sarake\",\n    \"comparison_slider\": \"Vertailuliukusäädin\",\n    \"slideshow_full_frame\": \"Diaesitys: Koko ruutu\",\n    \"slideshow_inset\": \"Diaesitys: Upotettu\",\n    \"image_compare\": \"Kuvavertailu\",\n    \"subheading\": \"Väliotsikko\",\n    \"featured_product_information\": \"Esittelytuote\",\n    \"product_hotspots\": \"Tuotteen hotspotit\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU-koodi\",\n    \"layered_slideshow\": \"Kerroksittainen diaesitys\"\n  },\n  \"settings\": {\n    \"alignment\": \"Tasaus\",\n    \"autoplay\": \"Automaattinen toisto\",\n    \"background\": \"Tausta\",\n    \"border_radius\": \"Kulman säde\",\n    \"border_width\": \"Reunuksen paksuus\",\n    \"borders\": \"Reunukset\",\n    \"bottom_padding\": \"Alareunatäyte\",\n    \"button\": \"Painike\",\n    \"color\": \"Väri\",\n    \"colors\": \"Värit\",\n    \"content_alignment\": \"Sisällön tasaus\",\n    \"content_direction\": \"Sisällön suunta\",\n    \"content_position\": \"Sisällön sijainti\",\n    \"cover_image_size\": \"Kansikuvan koko\",\n    \"cover_image\": \"Kansikuva\",\n    \"custom_minimum_height\": \"Mukautettu vähimmäiskorkeus\",\n    \"custom_width\": \"Mukautettu leveys\",\n    \"enable_video_looping\": \"Videon silmukointi\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"Fonttiperhe\",\n    \"gap\": \"Väli\",\n    \"geometric_translate_y\": \"Geometrinen muunnos Y\",\n    \"heading\": \"Otsikko\",\n    \"icon\": \"Kuvake\",\n    \"image\": \"Kuva\",\n    \"image_icon\": \"Kuvake (kuva)\",\n    \"image_opacity\": \"Kuvan peittävyys\",\n    \"image_position\": \"Kuvan sijainti\",\n    \"image_ratio\": \"Kuvan suhde\",\n    \"label\": \"Merkintä\",\n    \"line_height\": \"Rivikorkeus\",\n    \"link\": \"Linkki\",\n    \"layout_gap\": \"Asettelun väli\",\n    \"make_section_full_width\": \"Tee osiosta koko leveyden levyinen\",\n    \"minimum_height\": \"Vähimmäiskorkeus\",\n    \"opacity\": \"Peittävyys\",\n    \"overlay_opacity\": \"Peittokuvan peittävyys\",\n    \"padding\": \"Reunatäyte\",\n    \"primary_color\": \"Linkit\",\n    \"product\": \"Tuote\",\n    \"section_width\": \"Osion leveys\",\n    \"size\": \"Koko\",\n    \"slide_spacing\": \"Diojen väli\",\n    \"slide_width\": \"Dian leveys\",\n    \"slideshow_fullwidth\": \"Koko leveyden diat\",\n    \"style\": \"Tyyli\",\n    \"text\": \"Teksti\",\n    \"text_case\": \"Kirjainkoko\",\n    \"top_padding\": \"Yläreunatäyte\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Vaihtoehtoinen teksti\",\n    \"video_loop\": \"Toista video silmukassa\",\n    \"video_position\": \"Videon sijainti\",\n    \"width\": \"Leveys\",\n    \"z_index\": \"Z-indeksi\",\n    \"limit_content_width\": \"Rajoita sisällön leveyttä\",\n    \"color_scheme\": \"Värimalli\",\n    \"inherit_color_scheme\": \"Peri värimalli\",\n    \"product_count\": \"Tuotteiden määrä\",\n    \"product_type\": \"Tuotetyyppi\",\n    \"content_width\": \"Sisällön leveys\",\n    \"collection\": \"Kokoelma\",\n    \"enable_sticky_content\": \"Pysyvä sisältö tietokoneen näkymässä\",\n    \"error_color\": \"Virhe\",\n    \"success_color\": \"Onnistui\",\n    \"primary_font\": \"Ensisijainen fontti\",\n    \"secondary_font\": \"Toissijainen fontti\",\n    \"tertiary_font\": \"Kolmannen asteen fontti\",\n    \"columns\": \"Sarakkeet\",\n    \"items_to_show\": \"Näytettävät tuotteet\",\n    \"layout\": \"Asettelu\",\n    \"layout_type\": \"Tyyppi\",\n    \"show_grid_layout_selector\": \"Näytä ruudukkoasettelun valitsin\",\n    \"view_more_show\": \"Näytä \\\"Näytä lisää\\\" -painike\",\n    \"image_gap\": \"Kuvien väli\",\n    \"width_desktop\": \"Tietokoneen näkymän leveys\",\n    \"width_mobile\": \"Mobiililaitteen leveys\",\n    \"border_style\": \"Reunuksen tyyli\",\n    \"height\": \"Korkeus\",\n    \"thickness\": \"Paksuus\",\n    \"stroke\": \"Viivan paksuus\",\n    \"filter_style\": \"Suodatintyyli\",\n    \"swatches\": \"Näyteruudut\",\n    \"quick_add_colors\": \"Pikalisäyksen värit\",\n    \"divider_color\": \"Erotin\",\n    \"border_opacity\": \"Reunuksen peittävyys\",\n    \"hover_background\": \"Kohdistuksen tausta\",\n    \"hover_borders\": \"Kohdistuksen reunukset\",\n    \"hover_text\": \"Kohdistuksen teksti\",\n    \"primary_hover_color\": \"Linkit kohdistettaessa\",\n    \"primary_button_text\": \"Ensisijaisen painikkeen teksti\",\n    \"primary_button_background\": \"Ensisijaisen painikkeen tausta\",\n    \"primary_button_border\": \"Ensisijaisen painikkeen reunus\",\n    \"secondary_button_text\": \"Toissijaisen painikkeen teksti\",\n    \"secondary_button_background\": \"Toissijaisen painikkeen tausta\",\n    \"secondary_button_border\": \"Toissijaisen painikkeen reunus\",\n    \"shadow_color\": \"Varjo\",\n    \"limit_media_to_screen_height\": \"Rajaa näytön korkeuteen\",\n    \"video_autoplay\": \"Automaattinen toisto\",\n    \"video_cover_image\": \"Kansikuva\",\n    \"video_external_url\": \"URL-osoite\",\n    \"video_source\": \"Lähde\",\n    \"first_row_media_position\": \"Ensimmäisen rivin median sijainti\",\n    \"accordion\": \"Haitari\",\n    \"aspect_ratio\": \"Kuvasuhde\",\n    \"auto_rotate_announcements\": \"Kierrätä ilmoituksia automaattisesti\",\n    \"auto_rotate_slides\": \"Kierrätä dioja automaattisesti\",\n    \"background_color\": \"Taustaväri\",\n    \"badge_corner_radius\": \"Kulman säde\",\n    \"badge_position\": \"Sijainti korteissa\",\n    \"badge_sale_color_scheme\": \"Alennus\",\n    \"badge_sold_out_color_scheme\": \"Loppuunmyyty\",\n    \"behavior\": \"Toimintatapa\",\n    \"blur\": \"Varjon sumennus\",\n    \"border\": \"Reunus\",\n    \"bottom\": \"Alaosa\",\n    \"card_image_height\": \"Tuotekuvan korkeus\",\n    \"carousel_on_mobile\": \"Karuselli mobiililaitteessa\",\n    \"cart_count\": \"Ostoskorin tuotteiden määrä\",\n    \"cart_items\": \"Ostoskorin tuotteet\",\n    \"cart_related_products\": \"Vastaavat tuotteet\",\n    \"cart_title\": \"Ostoskori\",\n    \"cart_total\": \"Ostoskorin loppusumma\",\n    \"cart_type\": \"Tyyppi\",\n    \"case\": \"Kirjainkoko\",\n    \"checkout_buttons\": \"Nopeutetun kassan painikkeet\",\n    \"collection_list\": \"Kokoelmat\",\n    \"collection_templates\": \"Kokoelmamallit\",\n    \"content\": \"Sisältö\",\n    \"corner_radius\": \"Kulman säde\",\n    \"country_region\": \"Maa/alue\",\n    \"currency_code\": \"Valuuttakoodi\",\n    \"custom_height\": \"Mukautettu korkeus\",\n    \"custom_mobile_size\": \"Mukautettu mobiilikoko\",\n    \"desktop_height\": \"Tietokoneen näkymän korkeus\",\n    \"direction\": \"Suunta\",\n    \"display\": \"Näyttötapa\",\n    \"divider_thickness\": \"Erottimen paksuus\",\n    \"divider\": \"Erotin\",\n    \"dividers\": \"Erottimet\",\n    \"drop_shadow\": \"Heittovarjo\",\n    \"empty_state_collection_info\": \"Näytetään ennen haun kirjoittamista\",\n    \"empty_state_collection\": \"Tyhjän tilan kokoelma\",\n    \"enable_filtering\": \"Suodattimet\",\n    \"enable_grid_density\": \"Ruudukkoasettelun hallinta\",\n    \"enable_sorting\": \"Lajittelu\",\n    \"enable_zoom\": \"Ota zoomaus käyttöön\",\n    \"equal_columns\": \"Yhtä leveät sarakkeet\",\n    \"expand_first_group\": \"Laajenna ensimmäinen ryhmä\",\n    \"extend_media_to_screen_edge\": \"Laajenna media näytön reunaan\",\n    \"extend_summary\": \"Laajenna näytön reunaan\",\n    \"extra_large\": \"Erittäin suuri\",\n    \"extra_small\": \"Erittäin pieni\",\n    \"fixed_height\": \"Korkeus pikseleinä\",\n    \"fixed_width\": \"Leveys pikseleinä\",\n    \"flag\": \"Lippu\",\n    \"font_price\": \"Hinnan fontti\",\n    \"font_weight\": \"Fontin paino\",\n    \"font\": \"Fontti\",\n    \"full_width_first_image\": \"Ensimmäinen kuva koko leveydeltä\",\n    \"full_width_on_mobile\": \"Koko leveys mobiililaitteessa\",\n    \"heading_preset\": \"Otsikon esiasetus\",\n    \"hide_padding\": \"Piilota reunatäyte\",\n    \"hide_unselected_variant_media\": \"Piilota valitsemattomien versioiden media\",\n    \"horizontal_gap\": \"Vaakasuuntainen väli\",\n    \"horizontal_offset\": \"Varjon vaakasuuntainen siirtymä\",\n    \"hover_behavior\": \"Kohdistuksen toimintatapa\",\n    \"icon_background\": \"Kuvakkeen tausta\",\n    \"icons\": \"Kuvakkeet\",\n    \"image_border_radius\": \"Kuvan kulman säde\",\n    \"installments\": \"Maksuerät\",\n    \"integrated_button\": \"Integroitu painike\",\n    \"language_selector\": \"Kielivalitsin\",\n    \"large\": \"Suuri\",\n    \"left_padding\": \"Vasen reunatäyte\",\n    \"left\": \"Vasen\",\n    \"letter_spacing\": \"Kirjainväli\",\n    \"limit_product_details_width\": \"Rajoita tuotetietojen leveyttä\",\n    \"link_preset\": \"Linkin esiasetus\",\n    \"links\": \"Linkit\",\n    \"logo_font\": \"Logon fontti\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Silmukka\",\n    \"make_details_sticky_desktop\": \"Pysyvä tietokoneen näkymässä\",\n    \"max_width\": \"Enimmäisleveys\",\n    \"media_height\": \"Median korkeus\",\n    \"media_overlay\": \"Median peittokuva\",\n    \"media_position\": \"Median sijainti\",\n    \"media_type\": \"Mediatyyppi\",\n    \"media_width\": \"Median leveys\",\n    \"menu\": \"Valikko\",\n    \"mobile_columns\": \"Sarakkeet mobiililaitteessa\",\n    \"mobile_height\": \"Mobiililaitteen näkymän korkeus\",\n    \"mobile_logo_image\": \"Mobiililogo\",\n    \"mobile_quick_add\": \"Pikalisäys mobiililaitteessa\",\n    \"motion_direction\": \"Liikkeen suunta\",\n    \"motion\": \"Liike\",\n    \"movement_direction\": \"Liikkumissuunta\",\n    \"navigation_bar_color_scheme\": \"Navigointipalkin värimalli\",\n    \"navigation_bar\": \"Navigointipalkki\",\n    \"navigation\": \"Navigointi\",\n    \"open_new_tab\": \"Avaa linkki uudessa välilehdessä\",\n    \"overlay_color\": \"Peittokuvan väri\",\n    \"overlay\": \"Peittokuva\",\n    \"padding_bottom\": \"Alareunatäyte\",\n    \"padding_horizontal\": \"Vaakasuuntainen reunatäyte\",\n    \"padding_top\": \"Yläreunatäyte\",\n    \"page_width\": \"Sivun leveys\",\n    \"pagination\": \"Sivunumerointi\",\n    \"percent_height\": \"Korkeus prosentteina\",\n    \"percent_size_mobile\": \"Koko prosentteina\",\n    \"percent_size\": \"Koko prosentteina\",\n    \"percent_width\": \"Leveys prosentteina\",\n    \"pixel_size_mobile\": \"Koko pikseleinä\",\n    \"pixel_size\": \"Koko pikseleinä\",\n    \"placement\": \"Sijoittelu\",\n    \"position\": \"Sijainti\",\n    \"preset\": \"Esiasetus\",\n    \"product_cards\": \"Tuotekortit\",\n    \"product_pages\": \"Tuotesivut\",\n    \"product_templates\": \"Tuotemallit\",\n    \"products\": \"Tuotteet\",\n    \"quick_add\": \"Pikalisäys\",\n    \"ratio\": \"Suhde\",\n    \"regular\": \"Normaali\",\n    \"review_count\": \"Arvostelujen määrä\",\n    \"right\": \"Oikea\",\n    \"row_height\": \"Rivin korkeus\",\n    \"row\": \"Rivi\",\n    \"seller_note\": \"Salli viesti myyjälle\",\n    \"shape\": \"Muoto\",\n    \"show_as_accordion\": \"Näytä haitarina mobiililaitteessa\",\n    \"show_sale_price_first\": \"Näytä alennushinta ensin\",\n    \"show_tax_info\": \"Verotiedot\",\n    \"show\": \"Näytä\",\n    \"size_mobile\": \"Mobiilikoko\",\n    \"small\": \"Pieni\",\n    \"speed\": \"Nopeus\",\n    \"statement\": \"Tiliote\",\n    \"sticky_header\": \"Pysyvä ylätunniste\",\n    \"text_hierarchy\": \"Tekstihierarkia\",\n    \"text_presets\": \"Tekstin esiasetukset\",\n    \"title\": \"Otsikko\",\n    \"top\": \"Yläosa\",\n    \"type\": \"Tyyppi\",\n    \"type_preset\": \"Tekstin esiasetus\",\n    \"underline_thickness\": \"Alleviivausviivan paksuus\",\n    \"unit\": \"Yksikkö\",\n    \"variant_images\": \"Versioiden kuvat\",\n    \"vendor\": \"Myyjä\",\n    \"vertical_gap\": \"Pystysuuntainen väli\",\n    \"vertical_offset\": \"Varjon pystysuuntainen siirtymä\",\n    \"vertical_on_mobile\": \"Pystysuuntainen mobiililaitteessa\",\n    \"view_all_as_last_card\": \"\\\"Näytä kaikki\\\" viimeisenä korttina\",\n    \"weight\": \"Paino\",\n    \"wrap\": \"Rivitä\",\n    \"read_only\": \"Vain luku\",\n    \"always_stack_buttons\": \"Pinoa painikkeet aina päällekkäin\",\n    \"custom_mobile_width\": \"Mukautettu mobiilileveys\",\n    \"gradient_direction\": \"Liukuvärin suunta\",\n    \"overlay_style\": \"Peittokuvan tyyli\",\n    \"shadow_opacity\": \"Varjon peittävyys\",\n    \"show_filter_label\": \"Käytössä olevien suodattimien tekstimerkinnät\",\n    \"show_swatch_label\": \"Näyteruutujen tekstimerkinnät\",\n    \"transparent_background\": \"Läpinäkyvä tausta\",\n    \"hide_logo_on_home_page\": \"Piilota logo etusivulla\",\n    \"account\": \"Tili\",\n    \"alignment_mobile\": \"Mobiililaitteen tasaus\",\n    \"align_baseline\": \"Tasaa tekstin perusviiva\",\n    \"add_discount_code\": \"Salli alennukset ostoskorissa\",\n    \"background_overlay\": \"Taustan peittokuva\",\n    \"background_media\": \"Taustamedia\",\n    \"border_thickness\": \"Reunuksen paksuus\",\n    \"bottom_row\": \"Alarivi\",\n    \"button_text_case\": \"Tekstin kirjainkoko\",\n    \"card_size\": \"Kortin koko\",\n    \"auto_open_cart_drawer\": \"\\\"Lisää ostoskoriin\\\" avaa laatikon automaattisesti\",\n    \"collection_count\": \"Kokoelman tuotteiden määrä\",\n    \"collection_title_case\": \"Kokoelman otsikon kirjainkoko\",\n    \"custom_liquid\": \"Liquid-koodi\",\n    \"default\": \"Oletus\",\n    \"default_logo\": \"Oletuslogo\",\n    \"divider_width\": \"Erottimen leveys\",\n    \"headings\": \"Otsikot\",\n    \"horizontal_padding\": \"Vaakasuuntainen reunatäyte\",\n    \"inventory_threshold\": \"Alhaisen varaston kynnysarvo\",\n    \"inverse\": \"Käänteinen\",\n    \"inverse_logo\": \"Käänteinen logo\",\n    \"layout_style\": \"Tyyli\",\n    \"length\": \"Pituus\",\n    \"mobile_card_size\": \"Mobiilikortin koko\",\n    \"mobile_pagination\": \"Mobiililaitteen sivunumerointi\",\n    \"open_row_by_default\": \"Avaa rivi oletusarvoisesti\",\n    \"page\": \"Sivu\",\n    \"page_transition_enabled\": \"Sivun siirtymä\",\n    \"product_and_card_title_case\": \"Tuotteen ja kortin otsikon kirjainkoko\",\n    \"product_title_case\": \"Tuotenimikkeen kirjainkoko\",\n    \"right_padding\": \"Oikea reunatäyte\",\n    \"search\": \"Haku\",\n    \"search_icon\": \"Hakukuvake\",\n    \"search_position\": \"Sijainti\",\n    \"search_row\": \"Rivi\",\n    \"show_author\": \"Tekijä\",\n    \"show_alignment\": \"Näytä tasaus\",\n    \"show_count\": \"Näytä määrä\",\n    \"show_date\": \"Päivämäärä\",\n    \"show_inventory_quantity\": \"Näytä alhaisen varaston määrä\",\n    \"show_pickup_availability\": \"Näytä noudon saatavuus\",\n    \"show_search\": \"Näytä haku\",\n    \"text_label_case\": \"Tekstimerkinnän kirjainkoko\",\n    \"use_inverse_logo\": \"Käytä käänteistä logoa\",\n    \"vertical_padding\": \"Pystysuuntainen reunatäyte\",\n    \"visibility\": \"Näkyvyys\",\n    \"product_corner_radius\": \"Tuotteen kulman säde\",\n    \"card_corner_radius\": \"Kortin kulman säde\",\n    \"animation_repeat\": \"Toista animaatio\",\n    \"blurred_reflection\": \"Sumennettu heijastus\",\n    \"card_hover_effect\": \"Kortin kohdistustehoste\",\n    \"reflection_opacity\": \"Heijastuksen peittävyys\",\n    \"transition_to_main_product\": \"Siirtymä tuotekortista tuotesivulle\",\n    \"media\": \"Media\",\n    \"product_card_carousel\": \"Näytä karuselli\",\n    \"show_second_image_on_hover\": \"Näytä toinen kuva kohdistettaessa\",\n    \"media_fit\": \"Median sovitus\",\n    \"scroll_speed\": \"Aika seuraavaan ilmoitukseen\",\n    \"show_powered_by_shopify\": \"Näytä \\\"Powered by Shopify\\\"\",\n    \"seller_note_open_by_default\": \"Avaa viesti myyjälle oletusarvoisesti\",\n    \"gift_card_form\": \"Lahjakorttilomake\",\n    \"add_to_cart_animation\": \"Lisää ostoskoriin\",\n    \"custom_link\": \"Mukautettu linkki\",\n    \"product_custom_property\": {\n      \"heading\": \"Otsikko\",\n      \"description\": \"Kuvaus\",\n      \"key\": \"Ominaisuuden nimi\",\n      \"key_info\": \"Ei saa olla tyhjä, ja sen on oltava yksilöllinen kullekin lohkolle. Näkyy ostoskorissa, kassalla ja tilauksen tiedoissa.\",\n      \"placeholder_text\": \"Paikkamerkkiteksti\",\n      \"default_heading\": \"Mukauta tuotettasi\",\n      \"default_placeholder\": \"Kirjoita erityisohjeet\",\n      \"default_property_key\": \"Erityisohjeet\",\n      \"max_length\": \"Merkkien enimmäismäärä\",\n      \"required\": \"Syöte vaaditaan tuotteen lisäämiseksi ostoskoriin\",\n      \"input_type\": \"Syötetyyppi\",\n      \"input_type_text\": \"Teksti\",\n      \"input_type_checkbox\": \"Valintaruutu\",\n      \"content_settings\": \"Sisältöasetukset\",\n      \"buyers_input\": \"Ostajan syöte\",\n      \"checkbox_label\": \"Valintaruudun merkintä\",\n      \"default_checkbox_label\": \"Sisällytä lahjapaketointi\",\n      \"heading_preset\": \"Otsikko\",\n      \"description_preset\": \"Kuvaus\",\n      \"input_preset\": \"Syöte\",\n      \"checkbox_preset\": \"Valintaruudun merkintä\"\n    },\n    \"blog\": \"Blogi\",\n    \"post_count\": \"Julkaisujen määrä\",\n    \"animation\": \"Animaatio\",\n    \"top_level_size\": \"Ylätason koko\",\n    \"empty_cart_button_link\": \"Tyhjän ostoskorin painikelinkki\",\n    \"auto_load_products\": \"Lataa tuotteet automaattisesti vieritettäessä\",\n    \"products_per_page\": \"Tuotteita sivulla\",\n    \"custom_mobile_media\": \"Näytä eri mediaa mobiilissa\",\n    \"stack_media_on_mobile\": \"Pinoa media päällekkäin\",\n    \"media_type_1\": \"Mediatyyppi\",\n    \"media_type_2\": \"Median 2 tyyppi\",\n    \"full_frame_on_mobile\": \"Koko leveys mobiililaitteessa\",\n    \"skus\": \"SKU-koodit\",\n    \"variant_per_page\": \"Versioita sivulla\",\n    \"image_1\": \"Kuva 1\",\n    \"image_2\": \"Kuva 2\",\n    \"after_image\": \"Jälkeen-kuva\",\n    \"before_image\": \"Ennen-kuva\",\n    \"cs_slider_style\": \"Liukusäätimen tyyli\",\n    \"cs_slider_color\": \"Liukusäätimen väri\",\n    \"cs_slider_inner_color\": \"Liukusäätimen sisäosan väri\",\n    \"text_on_images\": \"Teksti kuvien päällä\",\n    \"card_height\": \"Kortin korkeus\",\n    \"submenu_size\": \"Alavalikon koko\",\n    \"desktop_position\": \"Sijainti tietokoneella\",\n    \"desktop_pagination\": \"Tietokoneen sivunumerointi\",\n    \"bullseye_color\": \"Sisäosan väri\",\n    \"hotspot_color\": \"Hotspotin väri\",\n    \"product_price_typography\": \"Tuotteen hinnan typografia\",\n    \"product_title_typography\": \"Tuotenimikkeen typografia\",\n    \"x_position\": \"Vaakasuuntainen sijainti\",\n    \"y_position\": \"Pystysuuntainen sijainti\",\n    \"enable_sticky_add_to_cart\": \"Kiinteä Lisää ostoskoriin -palkki\",\n    \"sticky_add_to_cart\": \"Kiinteä Lisää ostoskoriin -toiminto\",\n    \"actions_display_style\": \"Valikkotyyli\"\n  },\n  \"options\": {\n    \"apple\": \"Omena\",\n    \"arrow\": \"Nuoli\",\n    \"auto\": \"Automaattinen\",\n    \"banana\": \"Banaani\",\n    \"bottle\": \"Pullo\",\n    \"box\": \"Laatikko\",\n    \"buttons\": \"Painikkeet\",\n    \"carrot\": \"Porkkana\",\n    \"center\": \"Keskellä\",\n    \"chat_bubble\": \"Chat-kupla\",\n    \"clipboard\": \"Leikepöytä\",\n    \"contain\": \"Sovita\",\n    \"counter\": \"Laskuri\",\n    \"cover\": \"Peitä\",\n    \"custom\": \"Mukautettu\",\n    \"dairy_free\": \"Maidoton\",\n    \"dairy\": \"Maitotuote\",\n    \"default\": \"Oletus\",\n    \"dropdowns\": \"Pudotusvalikot\",\n    \"dots\": \"Pisteet\",\n    \"dryer\": \"Kuivausrumpu\",\n    \"end\": \"Loppu\",\n    \"eye\": \"Silmä\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Täyttö\",\n    \"fire\": \"Tuli\",\n    \"fit\": \"Sovita\",\n    \"full\": \"Koko\",\n    \"full_and_page\": \"Koko tausta, sivun levyinen sisältö\",\n    \"gluten_free\": \"Gluteeniton\",\n    \"heading\": \"Otsikko\",\n    \"heart\": \"Sydän\",\n    \"horizontal\": \"Vaakasuuntainen\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Silitysrauta\",\n    \"landscape\": \"Vaaka\",\n    \"large\": \"Suuri\",\n    \"leaf\": \"Lehti\",\n    \"leather\": \"Nahka\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"Salama\",\n    \"link\": \"Linkki\",\n    \"lipstick\": \"Huulipuna\",\n    \"lock\": \"Lukko\",\n    \"lowercase\": \"pienet kirjaimet\",\n    \"m\": \"M\",\n    \"map_pin\": \"Karttaneula\",\n    \"medium\": \"Keskikokoinen\",\n    \"none\": \"Ei mitään\",\n    \"numbers\": \"Numerot\",\n    \"nut_free\": \"Pähkinätön\",\n    \"outline\": \"Ääriviiva\",\n    \"page\": \"Sivu\",\n    \"pants\": \"Housut\",\n    \"paw_print\": \"Tassunjälki\",\n    \"pepper\": \"Pippuri\",\n    \"perfume\": \"Hajuvesi\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Lentokone\",\n    \"plant\": \"Kasvi\",\n    \"portrait\": \"Pysty\",\n    \"price_tag\": \"Hintalappu\",\n    \"question_mark\": \"Kysymysmerkki\",\n    \"recycle\": \"Kierrätys\",\n    \"return\": \"Palautus\",\n    \"ruler\": \"Viivain\",\n    \"s\": \"S\",\n    \"sentence\": \"Lause\",\n    \"serving_dish\": \"Tarjoiluvati\",\n    \"shirt\": \"Paita\",\n    \"shoe\": \"Kenkä\",\n    \"silhouette\": \"Siluetti\",\n    \"small\": \"Pieni\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Lumihiutale\",\n    \"solid\": \"Yhtenäinen\",\n    \"space_between\": \"Tilaa välissä\",\n    \"square\": \"Neliö\",\n    \"star\": \"Tähti\",\n    \"start\": \"Alku\",\n    \"stopwatch\": \"Sekuntikello\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Kuorma-auto\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Suuraakkoset\",\n    \"vertical\": \"Pystysuuntainen\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Pesu\",\n    \"circle\": \"Ympyrä\",\n    \"swatches\": \"Näyteruudut\",\n    \"full_and_page_offset_left\": \"Koko tausta, sivun levyinen sisältö, siirretty vasemmalle\",\n    \"full_and_page_offset_right\": \"Koko tausta, sivun levyinen sisältö, siirretty oikealle\",\n    \"offset_left\": \"Siirretty vasemmalle\",\n    \"offset_right\": \"Siirretty oikealle\",\n    \"page_center_aligned\": \"Sivu, tasattu keskelle\",\n    \"page_left_aligned\": \"Sivu, tasattu vasemmalle\",\n    \"page_right_aligned\": \"Sivu, tasattu oikealle\",\n    \"button\": \"Painike\",\n    \"caption\": \"Kuvateksti\",\n    \"h1\": \"Otsikko 1\",\n    \"h2\": \"Otsikko 2\",\n    \"h3\": \"Otsikko 3\",\n    \"h4\": \"Otsikko 4\",\n    \"h5\": \"Otsikko 5\",\n    \"h6\": \"Otsikko 6\",\n    \"paragraph\": \"Kappale\",\n    \"primary\": \"Ensisijainen\",\n    \"secondary\": \"Toissijainen\",\n    \"tertiary\": \"Kolmannen asteen\",\n    \"chevron_left\": \"Kulmanuoli vasemmalle\",\n    \"chevron_right\": \"Kulmanuoli oikealle\",\n    \"diamond\": \"Timantti\",\n    \"grid\": \"Ruudukko\",\n    \"parallelogram\": \"Suunnikas\",\n    \"rounded\": \"Pyöristetty\",\n    \"fit_content\": \"Sovita\",\n    \"pills\": \"Pillerit\",\n    \"heavy\": \"Paksu\",\n    \"thin\": \"Ohut\",\n    \"drawer\": \"Laatikko\",\n    \"preview\": \"Esikatselu\",\n    \"text\": \"Teksti\",\n    \"video_uploaded\": \"Ladattu palvelimelle\",\n    \"video_external_url\": \"Ulkoinen URL-osoite\",\n    \"aspect_ratio\": \"Kuvasuhde\",\n    \"fixed\": \"Kiinteä\",\n    \"pixel\": \"Pikseli\",\n    \"percent\": \"Prosentti\",\n    \"above_carousel\": \"Karusellin yläpuolella\",\n    \"all\": \"Kaikki\",\n    \"up\": \"Ylös\",\n    \"down\": \"Alas\",\n    \"always\": \"Aina\",\n    \"arrows_large\": \"Suuret nuolet\",\n    \"arrows\": \"Nuolet\",\n    \"balance\": \"Tasapaino\",\n    \"bento\": \"Bento\",\n    \"black\": \"Musta\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Leipäteksti (suuri)\",\n    \"body_regular\": \"Leipäteksti (normaali)\",\n    \"body_small\": \"Leipäteksti (pieni)\",\n    \"bold\": \"Lihavoitu\",\n    \"bottom_left\": \"Vasemmalla alhaalla\",\n    \"bottom_right\": \"Oikealla alhaalla\",\n    \"bottom\": \"Alaosa\",\n    \"capitalize\": \"Isolla alkukirjaimella\",\n    \"caret\": \"Hattu\",\n    \"carousel\": \"Karuselli\",\n    \"check_box\": \"Valintaruutu\",\n    \"chevron_large\": \"Suuret kulmanuolet\",\n    \"chevron\": \"Kulmanuoli\",\n    \"chevrons\": \"Kulmanuolet\",\n    \"classic\": \"Klassinen\",\n    \"collection_images\": \"Kokoelmakuvat\",\n    \"color\": \"Väri\",\n    \"complementary\": \"Täydentävä\",\n    \"dissolve\": \"Häivytys\",\n    \"dotted\": \"Pisteviiva\",\n    \"editorial\": \"Toimituksellinen\",\n    \"extra_large\": \"Erittäin suuri\",\n    \"extra_small\": \"Erittäin pieni\",\n    \"featured_collections\": \"Esittelykokoelmat\",\n    \"featured_products\": \"Esittelytuotteet\",\n    \"font_primary\": \"Ensisijainen\",\n    \"font_secondary\": \"Toissijainen\",\n    \"font_tertiary\": \"Kolmannen asteen\",\n    \"forward\": \"Eteenpäin\",\n    \"full_screen\": \"Koko näyttö\",\n    \"gradient\": \"Liukuväri\",\n    \"heading_extra_large\": \"Otsikko (erittäin suuri)\",\n    \"heading_extra_small\": \"Otsikko (erittäin pieni)\",\n    \"heading_large\": \"Otsikko (suuri)\",\n    \"heading_regular\": \"Otsikko (normaali)\",\n    \"heading_small\": \"Otsikko (pieni)\",\n    \"icon\": \"Kuvake\",\n    \"image\": \"Kuva\",\n    \"input\": \"Syöttökenttä\",\n    \"inside_carousel\": \"Karusellin sisällä\",\n    \"inverse_large\": \"Käänteinen suuri\",\n    \"inverse\": \"Käänteinen\",\n    \"large_arrows\": \"Suuret nuolet\",\n    \"large_chevrons\": \"Suuret kulmanuolet\",\n    \"left\": \"Vasen\",\n    \"light\": \"Kevyt\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Löysä\",\n    \"media_first\": \"Media ensin\",\n    \"media_second\": \"Media toisena\",\n    \"modal\": \"Modaalinen\",\n    \"narrow\": \"Kapea\",\n    \"never\": \"Ei koskaan\",\n    \"next_to_carousel\": \"Karusellin vieressä\",\n    \"normal\": \"Normaali\",\n    \"nowrap\": \"Ei rivitystä\",\n    \"off_media\": \"Median ulkopuolella\",\n    \"on_media\": \"Median päällä\",\n    \"on_scroll_up\": \"Ylös vieritettäessä\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pilleri\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Sievä\",\n    \"price\": \"Hinta\",\n    \"primary_style\": \"Ensisijainen tyyli\",\n    \"rectangle\": \"Suorakulmio\",\n    \"regular\": \"Normaali\",\n    \"related\": \"Vastaavat\",\n    \"reverse\": \"Käänteinen\",\n    \"rich_text\": \"Rich text\",\n    \"right\": \"Oikea\",\n    \"secondary_style\": \"Toissijainen tyyli\",\n    \"semibold\": \"Puolilihavoitu\",\n    \"shaded\": \"Varjostettu\",\n    \"show_second_image\": \"Näytä toinen kuva\",\n    \"single\": \"Yksi\",\n    \"slide_left\": \"Liu'uta vasemmalle\",\n    \"slide_up\": \"Liu'uta ylös\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Pino\",\n    \"text_only\": \"Vain teksti\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Pikkukuvat\",\n    \"tight\": \"Tiukka\",\n    \"top_left\": \"Vasemmalla ylhäällä\",\n    \"top_right\": \"Oikea yläkulma\",\n    \"top\": \"Yläosa\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Alleviivaus\",\n    \"video\": \"Video\",\n    \"wide\": \"Leveä\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"Kuvan alla\",\n    \"crop_to_fit\": \"Rajaa sopivaksi\",\n    \"maintain_aspect_ratio\": \"Säilytä kuvasuhde\",\n    \"off\": \"Pois päältä\",\n    \"on_image\": \"Kuvan päällä\",\n    \"accent\": \"Korostus\",\n    \"body\": \"Leipäteksti\",\n    \"button_primary\": \"Ensisijainen painike\",\n    \"button_secondary\": \"Toissijainen painike\",\n    \"compact\": \"Kompakti\",\n    \"hidden\": \"Piilotettu\",\n    \"hint\": \"Vihje\",\n    \"social_bluesky\": \"Some: Bluesky\",\n    \"social_facebook\": \"Some: Facebook\",\n    \"social_instagram\": \"Some: Instagram\",\n    \"social_linkedin\": \"Some: LinkedIn\",\n    \"social_pinterest\": \"Some: Pinterest\",\n    \"social_snapchat\": \"Some: Snapchat\",\n    \"social_spotify\": \"Some: Spotify\",\n    \"social_threads\": \"Some: Threads\",\n    \"social_tiktok\": \"Some: TikTok\",\n    \"social_tumblr\": \"Some: Tumblr\",\n    \"social_twitter\": \"Some: X (Twitter)\",\n    \"social_whatsapp\": \"Some: WhatsApp\",\n    \"social_vimeo\": \"Some: Vimeo\",\n    \"social_youtube\": \"Some: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Vakio\",\n    \"subheading\": \"Alaotsikko\",\n    \"blur\": \"Sumennus\",\n    \"lift\": \"Nosto\",\n    \"reveal\": \"Paljastus\",\n    \"scale\": \"Skaalaus\",\n    \"subtle_zoom\": \"Zoomaus\",\n    \"with_hints\": \"Vihjeillä\",\n    \"below_media\": \"Median alapuolella\",\n    \"full_frame\": \"Koko ruutu\",\n    \"icons\": \"Kuvakkeet\"\n  },\n  \"content\": {\n    \"advanced\": \"Lisäasetukset\",\n    \"background_image\": \"Taustakuva\",\n    \"background_video\": \"Taustavideo\",\n    \"block_size\": \"Lohkon koko\",\n    \"borders\": \"Reunukset\",\n    \"describe_the_video_for\": \"Kuvaile video ruudunlukijoita käyttäville asiakkaille. [Lue lisää](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Osion koko\",\n    \"slideshow_width\": \"Dian leveys\",\n    \"typography\": \"Typografia\",\n    \"width_is_automatically_optimized\": \"Leveys optimoidaan automaattisesti mobiililaitteille.\",\n    \"complementary_products\": \"Täydentävät tuotteet on määritettävä Search & Discovery -sovelluksella. [Lue lisää](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Sarakkeet optimoidaan automaattisesti mobiililaitteille\",\n    \"content_width\": \"Sisällön leveys on käytössä vain, kun osion leveydeksi on asetettu koko leveys.\",\n    \"responsive_font_sizes\": \"Koot skaalautuvat automaattisesti kaikille näyttökooille\",\n    \"buttons\": \"Painikkeet\",\n    \"swatches\": \"Näyteruudut\",\n    \"variant_settings\": \"Versioasetukset\",\n    \"background\": \"Tausta\",\n    \"appearance\": \"Ulkoasu\",\n    \"arrows\": \"Nuolet\",\n    \"body_size\": \"Leipätekstin koko\",\n    \"mobile_size\": \"Mobiilikoko\",\n    \"bottom_row_appearance\": \"Alarivin ulkoasu\",\n    \"cards_layout\": \"Korttien asettelu\",\n    \"carousel_navigation\": \"Karusellin navigointi\",\n    \"carousel_pagination\": \"Karusellin sivunumerointi\",\n    \"copyright\": \"Tekijänoikeus\",\n    \"edit_logo_in_theme_settings\": \"Muokkaa logoa [teeman asetuksissa](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Muokkaa hinnan muotoilua [teeman asetuksissa](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Muokkaa versioiden tyyliä [teeman asetuksissa](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Rekisteröitymiset lisäävät [asiakasprofiileja](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Jotta painike näkyy, Shop-kanava on asennettava ja Shop Pay aktivoitava. [Lue lisää](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Fontit\",\n    \"grid\": \"Ruudukko\",\n    \"heading_size\": \"Otsikon koko\",\n    \"image\": \"Kuva\",\n    \"input\": \"Syöttökenttä\",\n    \"layout\": \"Asettelu\",\n    \"link\": \"Linkki\",\n    \"link_padding\": \"Linkin reunatäyte\",\n    \"localization\": \"Lokalisointi\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Marginaali\",\n    \"media\": \"Media\",\n    \"media_1\": \"Media 1\",\n    \"media_2\": \"Media 2\",\n    \"menu\": \"Valikko\",\n    \"mobile_layout\": \"Mobiiliasettelu\",\n    \"padding\": \"Reunatäyte\",\n    \"padding_desktop\": \"Tietokoneen reunatäyte\",\n    \"paragraph\": \"Kappale\",\n    \"policies\": \"Käytännöt\",\n    \"popup\": \"Ponnahdusikkuna\",\n    \"search\": \"Haku\",\n    \"section_layout\": \"Osion asettelu\",\n    \"size\": \"Koko\",\n    \"social_media\": \"Sosiaalinen media\",\n    \"submit_button\": \"Lähetä-painike\",\n    \"text_presets\": \"Tekstin esiasetukset\",\n    \"transparent_background\": \"Läpinäkyvä tausta\",\n    \"typography_primary\": \"Ensisijainen typografia\",\n    \"typography_secondary\": \"Toissijainen typografia\",\n    \"typography_tertiary\": \"Kolmannen asteen typografia\",\n    \"mobile_width\": \"Mobiilileveys\",\n    \"width\": \"Leveys\",\n    \"images\": \"Kuvat\",\n    \"visibility\": \"Näkyvyys\",\n    \"visible_if_collection_has_more_products\": \"Näkyvissä, jos kokoelmassa on enemmän tuotteita kuin näytetään\",\n    \"carousel\": \"Karuselli\",\n    \"colors\": \"Värit\",\n    \"collection_page\": \"Kokoelmasivu\",\n    \"customer_account\": \"Asiakastili\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Muokkaa tyhjän tilan kokoelmaa [teeman asetuksissa](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Ruudukkoasettelu\",\n    \"home_page\": \"Etusivu\",\n    \"inverse_logo_info\": \"Käytetään, kun läpinäkyvän ylätunnisteen taustaksi on asetettu Käänteinen\",\n    \"manage_customer_accounts\": \"[Hallinnoi näkyvyyttä](/admin/settings/customer_accounts) asiakastilien asetuksissa. Vanhoja tilejä ei tueta.\",\n    \"manage_policies\": \"[Hallinnoi käytäntöjä](/admin/settings/legal)\",\n    \"product_page\": \"Tuotesivu\",\n    \"text\": \"Teksti\",\n    \"thumbnails\": \"Pikkukuvat\",\n    \"app_required_for_ratings\": \"Tuotearvioita varten tarvitaan sovellus. [Lue lisää](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Kuvake\",\n    \"manage_store_name\": \"[Hallinnoi kaupan nimeä](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Näyttää kokoelman ylätason osiosta\",\n    \"resource_reference_collection_card_image\": \"Näyttää kuvan ylätason kokoelmasta\",\n    \"resource_reference_collection_title\": \"Näyttää nimen ylätason kokoelmasta\",\n    \"resource_reference_product\": \"Yhdistyy automaattisesti ylätason tuotteeseen\",\n    \"resource_reference_product_card\": \"Näyttää tuotteen ylätason osiosta\",\n    \"resource_reference_product_inventory\": \"Näyttää varaston ylätason tuotteesta\",\n    \"resource_reference_product_price\": \"Näyttää hinnan ylätason tuotteesta\",\n    \"resource_reference_product_recommendations\": \"Näyttää suositukset ylätason tuotteen perusteella\",\n    \"resource_reference_product_review\": \"Näyttää arvostelut ylätason tuotteesta\",\n    \"resource_reference_product_swatches\": \"Näyttää näyteruudut ylätason tuotteesta\",\n    \"resource_reference_product_title\": \"Näyttää nimikkeen ylätason tuotteesta\",\n    \"resource_reference_product_variant_picker\": \"Näyttää versiot ylätason tuotteesta\",\n    \"resource_reference_product_media\": \"Näyttää median ylätason tuotteesta\",\n    \"product_media\": \"Tuotemedia\",\n    \"section_link\": \"Osion linkki\",\n    \"gift_card_form_description\": \"Asiakkaat voivat lähettää lahjakortteja vastaanottajan sähköpostiin henkilökohtaisen viestin kera. [Lue lisää](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Otsikko\",\n    \"resource_reference_product_custom_property\": \"Lisää mukautettavia syöttökenttiä kerätäksesi mukautettuja tietoja, jotka lisätään tähän tilauksen rivikohtaan ja jotka ovat myöhemmin nähtävissä tilauksen tiedoissa.\",\n    \"block_link\": \"Lohkon linkki\",\n    \"submenu_feature\": \"Alavalikon ominaisuus\",\n    \"cart_features\": \"Ostoskorin ominaisuudet\",\n    \"email_signup\": \"Sähköpostitilaus\",\n    \"mobile_media\": \"Mobiilimedia\",\n    \"mobile_media_2\": \"Mobiilimedia 2\",\n    \"navigation\": \"Navigointi\",\n    \"popover\": \"Ponnahdus\",\n    \"popover_position\": \"Ponnahduksen sijainti\",\n    \"resource_reference_product_sku\": \"Näyttää SKU-koodin päätuotteesta\",\n    \"content_layout\": \"Sisällön asettelu\",\n    \"mobile_media_1\": \"Mobiilimedia 1\",\n    \"utilities\": \"Aputoiminnot\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Jaa tietoja brändistäsi asiakkaillesi. Kuvaile tuotetta, tee ilmoituksia tai toivota asiakkaat tervetulleiksi kauppaasi.</p>\",\n    \"bestseller_h2\": \"<h2>Myydyimmät</h2>\",\n    \"bestseller_h3\": \"<h3>Myydyimmät</h3>\",\n    \"bestseller\": \"<p>Myydyin</p>\",\n    \"build_better\": \"<p>Uskomme parempien tuotteiden luomiseen</p>\",\n    \"contact_us\": \"<h2>Ota yhteyttä</h2>\",\n    \"discover_bestsellers\": \"<p>Tutustu myydyimpiin tuotteisiimme, jotka ovat valloittaneet asiakkaidemme sydämet täydellisellä toiminnallisuuden ja tyylin yhdistelmällä.</p>\",\n    \"everythings_starts_with_why\": \"<p>Kaikki, mitä teemme, alkaa kysymyksestä miksi</p>\",\n    \"explore_latest_products\": \"<p>Tutustu uusimpiin tuotteisiimme.</p>\",\n    \"faq\": \"<h3>Usein kysytyt kysymykset</h3>\",\n    \"first_to_know\": \"<p>Saa ensimmäisenä tietoa uusista kokoelmista ja erikoistarjouksista. </p>\",\n    \"free_returns\": \"<p>Ilmainen 30 päivän palautusoikeus</p>\",\n    \"free_shipping_over\": \"<p>Ilmainen toimitus yli 50 $:n tilauksiin</p>\",\n    \"goal_for_every_customer\": \"<p>Tavoitteenamme on, että jokainen asiakas on täysin tyytyväinen ostokseensa. Jos näin ei ole, kerro siitä meille, niin teemme parhaamme korjataksemme tilanteen.</p>\",\n    \"home_to_shirts\": \"<p>Koti → Paidat</p>\",\n    \"intentional_design\": \"<h2>Tarkoituksenmukaista muotoilua</h2>\",\n    \"introducing_h2\": \"<h2><em>Esittelyssä</em></h2>\",\n    \"latest_products\": \"<p>Esittelyssä uusimmat tuotteemme, jotka on tehty erityisesti tätä sesonkia varten. Osta suosikkisi ennen kuin ne loppuvat!</p>\",\n    \"made_local_and_global\": \"<p>Tuotteemme valmistetaan sekä paikallisesti että maailmanlaajuisesti. Valitsemme valmistuskumppanimme huolellisesti varmistaaksemme, että tuotteemme ovat laadukkaita ja kohtuuhintaisia.</p>\",\n    \"made_with_care_h2\": \"<h2>Huolella tehty</h2>\",\n    \"made_with_care_extended\": \"<p>Huolella tehty ja asiakkaidemme ehdottomasti rakastama, tämä tunnusomainen bestseller ylittää kaikki odotukset.</p>\",\n    \"made_with_care\": \"<p>Huolella tehty ja asiakkaidemme ehdottomasti rakastama.</p>\",\n    \"make_things_better_extended\": \"<p>Teemme tuotteita, jotka toimivat paremmin ja kestävät pidempään. Tuotteemme ratkaisevat todellisia ongelmia selkeällä muotoilulla ja aidoilla materiaaleilla.</p>\",\n    \"make_things_better\": \"<p>Teemme tuotteita, jotka toimivat paremmin ja kestävät pidempään.</p>\",\n    \"may_also_like\": \"<h4>Saatat pitää myös näistä</h4>\",\n    \"new_arrivals_h1\": \"<h1>Uutuudet</h1>\",\n    \"new_arrivals_h2\": \"<h2>Uutuudet</h2>\",\n    \"new_arrivals_h3\": \"<h3>Uutuudet</h3>\",\n    \"product_launch\": \"<p>Kurkista uusimman tuotelanseerauksemme kulissien taakse.</p>\",\n    \"product_story\": \"<p>Jokaisen tuotteen ytimessä on ainutlaatuinen tarina, jonka takana on intohimomme laatuun ja innovaatioon. Jokainen tuote parantaa arkeasi ja tuo iloa.</p>\",\n    \"real_people\": \"<p>Oikeat ihmiset tekevät upeita tuotteita</p>\",\n    \"related_product\": \"<h3>Vastaavat tuotteet</h3>\",\n    \"return_policy\": \"<h2>Mikä on palautuskäytäntö?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 arvostelua</p>\",\n    \"shipping_based_on_location\": \"<p>Toimituskulut lasketaan sijaintisi ja tilauksesi tuotteiden perusteella. Näet aina toimituskulujen hinnan ennen ostoksen tekemistä.</p>\",\n    \"shop_by_collection\": \"<h3>Osta kokoelman mukaan</h3>\",\n    \"signature_products\": \"<h2>Tunnustuotteemme</h2>\",\n    \"styled_with\": \"<h3>Yhdistettynä näihin</h3>\",\n    \"subscribe\": \"<h2>Tilaa sähköpostimme</h2>\",\n    \"team_with_goal\": \"<h2>Tiimi, jolla on tavoite</h2>\",\n    \"unable_to_accept_returns\": \"<p>Emme voi hyväksyä palautuksia tietyille tuotteille. Nämä on merkitty huolellisesti ennen ostoa.</p>\",\n    \"work_quickly_to_ship\": \"<p>Pyrimme lähettämään tilauksesi mahdollisimman nopeasti. Kun tilauksesi on lähetetty, saat sähköpostitse lisätietoja. Toimitusajat vaihtelevat sijaintisi mukaan.</p>\",\n    \"join_our_email_list\": \"<h2>Liity sähköpostilistallemme</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Saa erikoistarjouksia ja tutustu uusiin tuotteisiin ennakkoon.</p>\",\n    \"artistry_in_action\": \"<p>Taidetta toiminnassa </p>\",\n    \"authentic_materials\": \"<p>Aitoja materiaaleja, ei kompromisseja </p>\",\n    \"bold_style_recognizable\": \"<p>Rohkea tyyli, joka tunnistetaan kaikkialla</p>\",\n    \"discover_elevated_design\": \"<p>Tutustu hienostuneeseen muotoiluun </p>\",\n    \"expert_construction_finish\": \"<p>Mestarillinen valmistus ja virheetön viimeistely</p>\",\n    \"made_to_last\": \"<p>Tehty kestämään </p>\",\n    \"pieces_better_with_time\": \"<p>Kappaleita, jotka vain paranevat ajan ja käytön myötä </p>\",\n    \"quality_you_can_feel\": \"<h2>Laatua, jonka voit tuntea</h2>\",\n    \"uncompromising_standards\": \"<p>Tinkimättömät standardit </p>\",\n    \"featured_collection_h2\": \"<h2>Esittelykokoelma</h2>\",\n    \"shop_collection\": \"<p>Tutustu kuratoituun kokoelmaamme, joka sisältää käsin valittuja suosikkeja, joissa yhdistyvät tyyli ja laatu.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Osta nyt\",\n    \"collapsible_row\": \"Kutistettava rivi\",\n    \"heading\": \"Otsikko\",\n    \"email_signup_button_label\": \"Tilaa\",\n    \"accordion_heading\": \"Haitarin otsikko\",\n    \"contact_form_button_label\": \"Lähetä\",\n    \"popup_link\": \"Ponnahdusikkunan linkki\",\n    \"sign_up\": \"Rekisteröidy\",\n    \"welcome_to_our_store\": \"Tervetuloa kauppaamme\",\n    \"be_bold\": \"Ole rohkea.\",\n    \"shop_our_latest_arrivals\": \"Osta uusimmat tuotteemme!\",\n    \"are_purchases_final_sale\": \"Ovatko jotkin ostokset lopullisia?\",\n    \"care_instructions\": \"Hoito-ohjeet\",\n    \"cart\": \"Ostoskori\",\n    \"discover_collection\": \"Tutustu kokoelmaan\",\n    \"fit\": \"istuvuus\",\n    \"how_much_for_shipping\": \"Paljonko toimitus maksaa?\",\n    \"learn_more\": \"Lue lisää\",\n    \"manufacturing\": \"Valmistus\",\n    \"materials\": \"Materiaalit\",\n    \"return_policy\": \"Palautuskäytäntö\",\n    \"shipping\": \"Toimitus\",\n    \"shop_now_button_label\": \"Osta nyt\",\n    \"sign_up_button_label\": \"Rekisteröidy\",\n    \"submit_button_label\": \"Lähetä\",\n    \"up_the_ante\": \"Nosta\\npanoksia\",\n    \"view_all_button_label\": \"Näytä kaikki\",\n    \"what_is_return_policy\": \"Mikä on palautuskäytäntö?\",\n    \"when_will_order_arrive\": \"Milloin saan tilaukseni?\",\n    \"where_are_products_made\": \"Missä tuotteenne valmistetaan?\",\n    \"trending_now\": \"Nyt pinnalla\",\n    \"shop_the_look\": \"Osta kokonaisuus\",\n    \"bestsellers\": \"Myydyimmät\",\n    \"featured_collection\": \"Esittelykokoelma\",\n    \"new_arrivals\": \"Uutuudet\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Mobiilissa käytetään aina karusellia.\",\n    \"video_alt_text\": \"Kuvaile video avustavan teknologian käyttäjille\",\n    \"video_autoplay\": \"Videot mykistetään oletusarvoisesti\",\n    \"video_external\": \"Käytä YouTube- tai Vimeo-URL-osoitetta\",\n    \"carousel_hover_behavior_not_supported\": \"Karusellin kohdistustehostetta ei tueta, kun osion tasolla on valittu tyypiksi Karuselli\",\n    \"checkout_buttons\": \"Antaa ostajien siirtyä kassalle nopeammin ja voi parantaa konversiota. [Lue lisää](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Mukautettu otsikko\",\n    \"edit_presets_in_theme_settings\": \"Muokkaa esiasetuksia [teeman asetuksissa](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Mukauta suodattimia [Search & Discovery -sovelluksella](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Ruudukkoasettelua käytetään mobiililaitteilla\",\n    \"logo_font\": \"Koskee vain, kun logoa ei ole valittu\",\n    \"manage_countries_regions\": \"[Hallinnoi maita/alueita](/admin/settings/markets)\",\n    \"manage_languages\": \"[Hallinnoi kieliä](/admin/settings/languages)\",\n    \"transparent_background\": \"Tarkista jokaisen mallin luettavuus, jossa käytetään läpinäkyvää taustaa\",\n    \"aspect_ratio_adjusted\": \"Säädetty joissakin asetteluissa\",\n    \"custom_liquid\": \"Lisää sovelluksen koodinpätkiä tai muuta koodia luodaksesi edistyneitä mukautuksia. [Lue lisää](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Käytetään käytössä oleville suodattimille, alennuskoodeille ja hakuehdotuksille\",\n    \"applies_on_image_only\": \"Koskee vain kuvia\",\n    \"hover_effects\": \"Koskee tuote- ja kokoelmakortteja\",\n    \"hide_logo_on_home_page_help\": \"Logo pysyy näkyvissä, kun kiinteä ylätunniste on aktiivinen\",\n    \"media_type_info\": \"Ominaisuudet noudetaan valikkolinkeistäsi\",\n    \"logo_height\": \"Vaikuttaa vain ylätunnisteen logoon\",\n    \"actions_display_style\": \"Kuvakkeet ovat aina käytössä mobiililaitteilla\"\n  },\n  \"categories\": {\n    \"basic\": \"Perusosat\",\n    \"collection\": \"Kokoelma\",\n    \"collection_list\": \"Kokoelmaluettelo\",\n    \"footer\": \"Alatunniste\",\n    \"forms\": \"Lomakkeet\",\n    \"header\": \"Ylätunniste\",\n    \"layout\": \"Asettelu\",\n    \"links\": \"Linkit\",\n    \"product\": \"Tuote\",\n    \"product_list\": \"Esittelykokoelma\",\n    \"banners\": \"Bannerit\",\n    \"collections\": \"Kokoelmat\",\n    \"custom\": \"Mukautettu\",\n    \"decorative\": \"Koristeellinen\",\n    \"products\": \"Tuotteet\",\n    \"other_sections\": \"Muut\",\n    \"storytelling\": \"Tarinankerronta\",\n    \"text\": \"Teksti\"\n  }\n}\n"
  },
  {
    "path": "locales/fr.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Charger la vidéo : {{ description }}\",\n    \"sold_out\": \"Épuisé\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"Adresse e-mail\",\n      \"success\": \"Merci de vous être abonné(e) !\"\n    },\n    \"filter\": \"Filtrer\",\n    \"payment_methods\": \"Moyens de paiement\",\n    \"contact_form\": {\n      \"name\": \"Nom\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Téléphone\",\n      \"comment\": \"Commentaire\",\n      \"post_success\": \"Merci de nous avoir contactés. Nous vous répondrons dès que possible.\",\n      \"error_heading\": \"Veuillez ajuster les éléments suivants :\"\n    },\n    \"slider_label\": \"Carrousel\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Jouer le modèle 3D\",\n    \"play_video\": \"Lire la vidéo\",\n    \"unit_price\": \"Prix unitaire\",\n    \"country_results_count\": \"{{ count }} résultats\",\n    \"slideshow_pause\": \"Interrompre le diaporama\",\n    \"slideshow_play\": \"Lire le diaporama\",\n    \"remove_item\": \"Supprimer {{ title}}\",\n    \"skip_to_text\": \"Ignorer et passer au contenu\",\n    \"skip_to_product_info\": \"Passer aux informations sur le produit\",\n    \"skip_to_results_list\": \"Passer à la liste des résultats\",\n    \"new_window\": \"S’ouvre dans une nouvelle fenêtre.\",\n    \"slideshow_next\": \"Diapositive suivante\",\n    \"slideshow_previous\": \"Diapositive précédente\",\n    \"close_dialog\": \"Fermer la boîte de dialogue\",\n    \"reset_search\": \"Réinitialiser la recherche\",\n    \"search_results_count\": \"{{ count }} résultats de recherche trouvés pour « {{ query }} »\",\n    \"search_results_no_results\": \"Aucun résultat trouvé pour « {{ query }} »\",\n    \"filters\": \"Filtres\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtre appliqué\",\n      \"other\": \"{{ count }} filtres appliqués\",\n      \"many\": \"{{ count }} filtres appliqués\"\n    },\n    \"account\": \"Compte\",\n    \"cart\": \"Panier\",\n    \"cart_count\": \"Nombre total d’articles dans le panier\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"Pays/région\",\n    \"slide_status\": \"Diapositive {{ index }} sur {{ length }}\",\n    \"scroll_to\": \"Faire défiler vers {{ title }}\",\n    \"loading_product_recommendations\": \"Chargement des recommandations de produits\",\n    \"discount\": \"Appliquer un code de réduction\",\n    \"discount_menu\": \"Codes de réduction\",\n    \"discount_applied\": \"Code de réduction appliqué : {{ code }}\",\n    \"inventory_status\": \"Statut du stock\",\n    \"pause_video\": \"Mettre la vidéo en pause\",\n    \"find_country\": \"Trouver un pays\",\n    \"localization_region_and_language\": \"Sélecteur de région et de langue\",\n    \"decrease_quantity\": \"Diminuer la quantité\",\n    \"increase_quantity\": \"Augmenter la quantité\",\n    \"quantity\": \"Quantité\",\n    \"rating\": \"La note de ce produit est {{ rating }} sur 5\",\n    \"nested_product\": \"{{ product_title }} pour {{ parent_title }}\",\n    \"remove\": \"Retirer\",\n    \"view_pricing_info\": \"Afficher les informations de tarification\",\n    \"open_hotspot\": \"Ouvrir le point d’accès\",\n    \"slideshow\": \"Diaporama\",\n    \"header_navigation_label\": \"Principale\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Ajouter au panier\",\n    \"clear_all\": \"Tout effacer\",\n    \"remove\": \"Supprimer\",\n    \"view_in_your_space\": \"Afficher dans votre espace\",\n    \"show_filters\": \"Filtrer\",\n    \"clear\": \"Effacer\",\n    \"continue_shopping\": \"Continuer les achats\",\n    \"log_in_html\": \"Vous possédez un compte ? <a href=\\\"{{ link }}\\\">Connectez-vous</a> pour payer plus vite.\",\n    \"see_items\": {\n      \"one\": \"Voir {{ count }} article\",\n      \"other\": \"Voir {{ count }} articles\",\n      \"many\": \"Voir {{ count }} articles\"\n    },\n    \"view_all\": \"Voir tout\",\n    \"add\": \"Ajouter\",\n    \"choose\": \"Choisir\",\n    \"added\": \"Ajouté\",\n    \"show_less\": \"Afficher moins\",\n    \"show_more\": \"Afficher plus\",\n    \"close\": \"Fermer\",\n    \"more\": \"Plus\",\n    \"reset\": \"Réinitialiser\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Fermer la boîte de dialogue\",\n    \"enter_using_password\": \"Accéder avec le mot de passe\",\n    \"submit\": \"Soumettre\",\n    \"enter_password\": \"Saisir le mot de passe\",\n    \"back\": \"Retour\",\n    \"log_in\": \"Se connecter\",\n    \"log_out\": \"Se déconnecter\",\n    \"remove_discount\": \"Supprimer le {{ code }} de réduction\",\n    \"view_store_information\": \"Afficher les informations de la boutique\",\n    \"apply\": \"Appliquer\",\n    \"sign_up\": \"S’inscrire\",\n    \"sign_in_options\": \"Autres options de connexion\",\n    \"open_image_in_full_screen\": \"Ouvrir l’image en plein écran\",\n    \"sort\": \"Trier\",\n    \"show_all_options\": \"Afficher toutes les options\",\n    \"open\": \"Ouvrir\"\n  },\n  \"content\": {\n    \"reviews\": \"avis\",\n    \"language\": \"Langue\",\n    \"localization_region_and_language\": \"Région et langue\",\n    \"no_results_found\": \"Aucun résultat trouvé\",\n    \"cart_total\": \"Total du panier\",\n    \"your_cart_is_empty\": \"Votre panier est vide\",\n    \"product_image\": \"Image de produit\",\n    \"product_information\": \"Informations sur le produit\",\n    \"quantity\": \"Quantité\",\n    \"product_total\": \"Nombre total de produits\",\n    \"cart_estimated_total\": \"Total estimé\",\n    \"seller_note\": \"Instructions spéciales\",\n    \"cart_subtotal\": \"Sous-total\",\n    \"discounts\": \"Réductions\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Frais de douane et taxes inclus. Réductions et <a href=\\\"{{ link }}\\\">frais d’expédition</a> calculés à l’étape du paiement.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Frais de douane et taxes inclus. Réductions et frais d’expédition calculés à l’étape du paiement.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Taxes incluses. Réductions et <a href=\\\"{{ link }}\\\">frais d’expédition</a> calculés à l’étape du paiement.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Taxes incluses. Réductions et frais d’expédition calculés à l’étape du paiement.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Frais de douane inclus. Taxes, réductions et <a href=\\\"{{ link }}\\\">frais d’expédition</a> calculés à l’étape du paiement.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Frais de douane inclus. Taxes, réductions et frais d’expédition calculés à l’étape du paiement.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Taxes, réductions et <a href=\\\"{{ link }}\\\">frais d’expédition</a> calculés à l’étape du paiement.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Taxes, réductions et frais d’expédition calculés à l’étape du paiement.\",\n    \"checkout\": \"Payer\",\n    \"cart_title\": \"Panier\",\n    \"price\": \"Prix\",\n    \"price_regular\": \"Prix régulier\",\n    \"price_compare_at\": \"Prix avant réduction\",\n    \"price_sale\": \"Prix promotionnel\",\n    \"duties_and_taxes_included\": \"Frais de douane et taxes inclus.\",\n    \"duties_included\": \"Frais de douane inclus.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Expédition</a> calculée lors du paiement.\",\n    \"taxes_included\": \"Taxes incluses.\",\n    \"product_badge_sold_out\": \"Épuisé\",\n    \"product_badge_sale\": \"Promotion\",\n    \"grid_view\": {\n      \"default_view\": \"Par défaut\",\n      \"grid_fieldset\": \"Grille de colonnes\",\n      \"single_item\": \"Unique\",\n      \"zoom_out\": \"Dézoomer\"\n    },\n    \"search_input_label\": \"Rechercher\",\n    \"search_input_placeholder\": \"Rechercher\",\n    \"search_results\": \"Résultats de la recherche\",\n    \"search_results_label\": \"Résultats de la recherche\",\n    \"search_results_no_results\": \"Aucun résultat trouvé pour « {{ terms }} ». Essayez une autre recherche.\",\n    \"search_results_resource_articles\": \"Articles de blog\",\n    \"search_results_resource_collections\": \"Collections\",\n    \"search_results_resource_pages\": \"Pages\",\n    \"search_results_resource_products\": \"Produits\",\n    \"search_results_resource_queries\": \"Suggestions de recherche\",\n    \"search_results_view_all\": \"Tout afficher\",\n    \"search_results_view_all_button\": \"Tout afficher\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produit\",\n      \"other\": \"{{ count }} produits\",\n      \"many\": \"{{ count }} produits\"\n    },\n    \"recently_viewed_products\": \"Récemment consulté(s)\",\n    \"unavailable\": \"Indisponible\",\n    \"collection_placeholder\": \"Titre de la collection\",\n    \"product_card_placeholder\": \"Titre du produit\",\n    \"product_count\": \"Nombre de produits\",\n    \"item_count\": {\n      \"one\": \"{{ count }} article\",\n      \"other\": \"{{ count }} articles\",\n      \"many\": \"{{ count }} articles\"\n    },\n    \"errors\": \"Erreurs\",\n    \"price_from\": \"De {{ price }}\",\n    \"search\": \"Rechercher\",\n    \"search_results_no_results_check_spelling\": \"Aucun résultat trouvé pour « {{ terms }} ». Vérifiez l’orthographe ou utilisez un autre mot ou une autre expression.\",\n    \"no_products_found\": \"Aucun produit trouvé.\",\n    \"use_fewer_filters_html\": \"Essayez d’utiliser moins de filtres, ou <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">effacez tous les filtres</a>.\",\n    \"featured_products\": \"Produits en vedette\",\n    \"filters\": \"Filtres\",\n    \"price_filter_html\": \"Le prix le plus élevé est de {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Lire plus...\",\n    \"wrong_password\": \"Mot de passe incorrect\",\n    \"account_title\": \"Compte\",\n    \"account_title_personalized\": \"Bonjour {{ first_name }}\",\n    \"account_orders\": \"Commandes\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Code de réduction\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Droits de douane et taxes inclus. L’expédition est calculée lors du paiement.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Droits de douane et taxes inclus. L’expédition est calculée lors du paiement.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Droits de douane inclus. L’expédition est calculée lors du paiement.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Droits de douane inclus. L’expédition est calculée lors du paiement.\",\n    \"pickup_available_at_html\": \"Retrait disponible à <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Retrait disponible, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Retrait actuellement non disponible\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxes et <a href=\\\"{{ link }}\\\">expédition</a> calculés lors du paiement.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Taxes et expédition calculés lors du paiement.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxes incluses. L’expédition est calculée lors du paiement.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Taxes incluses. L’expédition est calculée lors du paiement.\",\n    \"view_more_details\": \"Afficher plus de détails\",\n    \"page_placeholder_title\": \"Titre de la page\",\n    \"page_placeholder_content\": \"Sélectionnez une page pour afficher son contenu.\",\n    \"placeholder_image\": \"Image du paramètre fictif\",\n    \"inventory_low_stock\": \"Stock faible\",\n    \"inventory_in_stock\": \"En stock\",\n    \"inventory_out_of_stock\": \"En rupture de stock\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} restant(s)\",\n      \"other\": \"{{ count }} restant(s)\",\n      \"many\": \"{{ count }} restant(s)\"\n    },\n    \"shipping_policy\": \"Expédition calculée lors du paiement.\",\n    \"powered_by\": \"Cette boutique sera exploitée par\",\n    \"store_owner_link_html\": \"Êtes-vous le propriétaire de la boutique ? <a href=\\\"{{ link }}\\\">Connectez-vous ici</a>\",\n    \"shipping_discount_error\": \"Les réductions sur l’expédition sont affichées lors du paiement après avoir ajouté une adresse\",\n    \"discount_code_error\": \"Le code de réduction ne peut pas être appliqué à votre panier\",\n    \"discount\": \"Réduction\",\n    \"recipient_form_send_to\": \"Envoyer à\",\n    \"recipient_form_email_label\": \"E-mail du destinataire\",\n    \"recipient_form_email_label_my_email\": \"Mon e-mail\",\n    \"recipient_form_email_address\": \"Adresse e-mail du destinataire\",\n    \"recipient_form_name_label\": \"Nom du destinataire (facultatif)\",\n    \"recipient_form_message\": \"Message (facultatif)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} caractères utilisés\",\n    \"recipient_form_send_on\": \"JJ-MM-AAAA\",\n    \"recipient_form_send_on_label\": \"Envoyer le (facultatif)\",\n    \"recipient_form_fields_visible\": \"Les champs du formulaire de destinataire sont désormais visibles\",\n    \"recipient_form_fields_hidden\": \"Les champs du formulaire de destinataire sont désormais masqués\",\n    \"recipient_form_error\": \"La soumission du formulaire présentait une erreur\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} caractères utilisés\",\n    \"terms_and_policies\": \"Conditions générales et politiques\",\n    \"pagination\": {\n      \"nav_label\": \"Navigation par pagination\",\n      \"previous\": \"Précédent\",\n      \"next\": \"Suivant\",\n      \"page\": \"Page {{ page }}\"\n    },\n    \"volume_pricing_available\": \"La tarification basée sur la quantité est disponible\",\n    \"volume_pricing\": \"Tarification basée sur la quantité\",\n    \"at_price_each\": \"à {{ price }}/pièce\",\n    \"each\": \"{{ price }}/pièce\",\n    \"each_abbreviation\": \"pièce\",\n    \"price_at\": \"à\",\n    \"price_range\": \"Fourchette de prix\",\n    \"item_count_cutoff\": \"Plus de {{ count }} articles\",\n    \"cancel\": \"Annuler\",\n    \"product_subtotal\": \"Sous-total des produits\",\n    \"quantity_per_item\": \"/pièce\",\n    \"remove_all\": \"Tout retirer\",\n    \"remove_all_items_confirmation\": \"Retirer les {{ count }} articles de votre panier ?\",\n    \"remove_one_item_confirmation\": \"Retirer 1 article de votre panier ?\",\n    \"total_items\": \"Total des articles\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Total des variantes\",\n    \"view_cart\": \"Voir le panier\",\n    \"your_cart\": \"Votre panier\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 article ajouté au panier\",\n      \"other\": \"{{ count }} articles ajoutés au panier\",\n      \"many\": \"{{ count }} articles ajoutés au panier\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Utiliser le code de la carte‑cadeau en ligne ou le code QR en boutique\",\n      \"title\": \"Voici le solde de votre carte‑cadeau {{ shop }} d'une valeur de {{ value }} !\",\n      \"subtext\": \"Votre carte‑cadeau\",\n      \"shop_link\": \"Visiter la boutique en ligne\",\n      \"add_to_apple_wallet\": \"Ajouter à Apple Wallet\",\n      \"qr_image_alt\": \"Code QR : scannez‑le pour utiliser votre carte‑cadeau\",\n      \"copy_code\": \"Copier le code de la carte‑cadeau\",\n      \"expiration_date\": \"Expire le {{ expires_on }}\",\n      \"copy_code_success\": \"Le code a bien été copié\",\n      \"expired\": \"Expirée\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Mot de passe\",\n    \"search\": \"Rechercher\",\n    \"product_title\": \"Titre de produit\",\n    \"collection_title\": \"Titre de la collection\",\n    \"blog_posts\": \"Articles de blog\",\n    \"blog_post_title\": \"Titre\",\n    \"blog_post_author\": \"Auteur\",\n    \"blog_post_date\": \"Date\",\n    \"blog_post_description\": \"Un extrait du contenu de votre article de blog\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Ajouter au panier\",\n      \"added_to_cart\": \"Ajouté au panier\",\n      \"adding_to_cart\": \"Ajout...\",\n      \"add_to_cart_error\": \"Erreur lors de l’ajout au panier\",\n      \"sold_out\": \"Épuisé\",\n      \"unavailable\": \"Non disponible(s)\",\n      \"quantity_error_max\": \"Cet article a un maximum de {{ maximum }}\",\n      \"quantity\": \"Quantité\",\n      \"quantity_increments\": \"Incréments de {{ increment }}\",\n      \"quantity_minimum\": \"Minimum de {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum de {{ maximum }}\",\n      \"in_cart\": \"dans le panier\",\n      \"default_title\": \"Titre par défaut\",\n      \"sticky_add_to_cart\": \"Barre d’ajout rapide au panier\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"à\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} commentaire\",\n        \"other\": \"{{ count }} commentaires\",\n        \"many\": \"{{ count }} commentaires\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"La publication du commentaire a échoué. Veuillez corriger les éléments suivants :\",\n      \"heading\": \"Laisser un commentaire\",\n      \"message\": \"Message\",\n      \"moderated\": \"Veuillez noter que les commentaires doivent être approuvés avant leur publication.\",\n      \"name\": \"Nom\",\n      \"post\": \"Publier le commentaire\",\n      \"success_moderated\": \"Commentaire publié, en attente de modération\",\n      \"success\": \"Commentaire publié\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/fr.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Bordures\",\n    \"collapsible_row\": \"Rangée réductible\",\n    \"custom_section\": \"Section personnalisée\",\n    \"icon\": \"Icône\",\n    \"logo_and_favicon\": \"Logo et favicon\",\n    \"product_buy_buttons\": \"Boutons d’achat\",\n    \"product_description\": \"Description\",\n    \"product_price\": \"Prix\",\n    \"slideshow\": \"Diaporama\",\n    \"typography\": \"Typographie\",\n    \"video\": \"Vidéo\",\n    \"colors\": \"Couleurs\",\n    \"overlapping_blocks\": \"Blocs superposés\",\n    \"rich_text_section\": \"Texte enrichi\",\n    \"product_variant_picker\": \"Sélecteur de variante\",\n    \"slideshow_controls\": \"Commandes du diaporama\",\n    \"size\": \"Taille\",\n    \"spacing\": \"Espacement\",\n    \"product_recommendations\": \"Produits recommandés\",\n    \"product_media\": \"Support multimédia du produit\",\n    \"featured_collection\": \"Collection en vedette\",\n    \"add_to_cart\": \"Ajouter au panier\",\n    \"email_signup\": \"Inscription à la liste de diffusion\",\n    \"submit_button\": \"Bouton Soumettre\",\n    \"grid_layout_selector\": \"Sélecteur de mise en page en grille\",\n    \"image\": \"Image\",\n    \"list_items\": \"Éléments de liste\",\n    \"facets\": \"Facettes\",\n    \"variants\": \"Variantes\",\n    \"styles\": \"Styles\",\n    \"product_cards\": \"Cartes de produit\",\n    \"primary_button\": \"Bouton principal\",\n    \"secondary_button\": \"Bouton secondaire\",\n    \"popovers_and_modals\": \"Pop-overs et fenêtres modales\",\n    \"buttons\": \"Boutons\",\n    \"inputs\": \"Saisies\",\n    \"marquee\": \"Bandeau défilant\",\n    \"alternating_content_rows\": \"Rangées alternées\",\n    \"pull_quote\": \"Citation\",\n    \"contact_form\": \"Formulaire de contact\",\n    \"featured_product\": \"Mise en avant du produit\",\n    \"icons_with_text\": \"Icônes avec texte\",\n    \"jumbo_text\": \"Texte jumbo\",\n    \"accelerated_checkout\": \"Paiement accéléré\",\n    \"accordion\": \"Accordéon\",\n    \"accordion_row\": \"Rangée d’accordéon\",\n    \"animations\": \"Animations\",\n    \"announcement\": \"Annonce\",\n    \"announcement_bar\": \"Barre d’annonces\",\n    \"badges\": \"Badges\",\n    \"button\": \"Bouton\",\n    \"cart\": \"Panier\",\n    \"cart_items\": \"Articles du panier\",\n    \"cart_products\": \"Produits du panier\",\n    \"cart_title\": \"Panier\",\n    \"collection\": \"Collection\",\n    \"collection_card\": \"Carte de collection\",\n    \"collection_columns\": \"Colonnes de collection\",\n    \"collection_container\": \"Collection\",\n    \"collection_description\": \"Description de la collection\",\n    \"collection_image\": \"Image de collection\",\n    \"collection_info\": \"Informations sur la collection\",\n    \"collection_list\": \"Liste de collections\",\n    \"collections\": \"Collections\",\n    \"content\": \"Contenu\",\n    \"content_grid\": \"Grille de contenu\",\n    \"details\": \"Détails\",\n    \"divider\": \"Séparateur\",\n    \"filters\": \"Filtrage et tri\",\n    \"follow_on_shop\": \"Suivre sur Shop\",\n    \"footer\": \"Pied de page\",\n    \"footer_utilities\": \"Utilitaires du pied de page\",\n    \"group\": \"Groupe\",\n    \"header\": \"En-tête\",\n    \"heading\": \"Titre\",\n    \"icons\": \"Icônes\",\n    \"image_with_text\": \"Image avec texte\",\n    \"input\": \"Saisie\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Grille de type magazine\",\n    \"media\": \"Support multimédia\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Mise en page mobile\",\n    \"payment_icons\": \"Icônes de paiement\",\n    \"popup_link\": \"Lien pop-up\",\n    \"predictive_search\": \"Pop-over de recherche\",\n    \"predictive_search_empty\": \"Recherche prédictive vide\",\n    \"price\": \"Prix\",\n    \"product\": \"Produit\",\n    \"product_card\": \"Carte de produit\",\n    \"product_card_media\": \"Support multimédia\",\n    \"product_card_rendering\": \"Rendu de la carte de produit\",\n    \"product_grid\": \"Grille\",\n    \"product_grid_main\": \"Grille de produits\",\n    \"product_image\": \"Image de produit\",\n    \"product_information\": \"Informations sur le produit\",\n    \"product_review_stars\": \"Étoiles d’évaluation\",\n    \"quantity\": \"Quantité\",\n    \"row\": \"Rangée\",\n    \"search\": \"Recherche\",\n    \"section\": \"Section\",\n    \"selected_variants\": \"Variantes sélectionnées\",\n    \"slide\": \"Diapositive\",\n    \"social_media_links\": \"Liens de réseaux sociaux\",\n    \"steps\": \"Étapes\",\n    \"summary\": \"Résumé\",\n    \"swatches\": \"Nuanciers\",\n    \"testimonials\": \"Témoignages\",\n    \"text\": \"Texte\",\n    \"title\": \"Titre\",\n    \"utilities\": \"Utilitaires\",\n    \"search_input\": \"Saisie de recherche\",\n    \"search_results\": \"Résultats de recherche\",\n    \"read_only\": \"Lecture seule\",\n    \"collections_bento\": \"Liste de collections : Bento\",\n    \"faq_section\": \"FAQ\",\n    \"hero\": \"Bannière principale\",\n    \"hero_bottom_aligned\": \"Bannière principale : alignée en bas\",\n    \"product_list\": \"Collection en vedette\",\n    \"spacer\": \"Espaceur\",\n    \"video_section\": \"Vidéo\",\n    \"custom_liquid\": \"Liquid personnalisé\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Article de blog\",\n    \"blog_posts\": \"Articles de blog\",\n    \"caption\": \"Légende\",\n    \"collection_card_image\": \"Image\",\n    \"collection_title\": \"Titre de la collection\",\n    \"collection_links\": \"Liens de collection\",\n    \"collection_links_spotlight\": \"Liens de collection : Spotlight\",\n    \"collection_links_text\": \"Liens de collection : Texte\",\n    \"collections_carousel\": \"Liste de collections : Carrousel\",\n    \"collections_editorial\": \"Liste de collections : Éditorial\",\n    \"collections_grid\": \"Liste de collections : Grille\",\n    \"copyright\": \"Droits d’auteur\",\n    \"count\": \"Nombre\",\n    \"divider_section\": \"Séparateur\",\n    \"drawers\": \"Tiroirs\",\n    \"editorial\": \"Éditorial\",\n    \"editorial_jumbo_text\": \"Éditorial : Texte jumbo\",\n    \"hero_marquee\": \"Bannière principale : bandeau défilant\",\n    \"input_fields\": \"Champs de saisie\",\n    \"local_pickup\": \"Retrait en magasin\",\n    \"marquee_section\": \"Bandeau défilant\",\n    \"media_with_text\": \"Support multimédia avec texte\",\n    \"page\": \"Page\",\n    \"page_content\": \"Contenu\",\n    \"page_layout\": \"Mise en page\",\n    \"policy_list\": \"Liens vers les politiques\",\n    \"prices\": \"Prix\",\n    \"product_list_button\": \"Bouton Tout voir\",\n    \"products_carousel\": \"Collection en vedette : Carrousel\",\n    \"products_editorial\": \"Collection en vedette : Éditorial\",\n    \"products_grid\": \"Collection en vedette : Grille\",\n    \"social_link\": \"Lien de réseau social\",\n    \"split_showcase\": \"Vitrine divisée\",\n    \"variant_pickers\": \"Sélecteurs de variantes\",\n    \"view_all_button\": \"Tout voir\",\n    \"pills\": \"Pilules\",\n    \"product_title\": \"Titre de produit\",\n    \"large_logo\": \"Grand logo\",\n    \"product_inventory\": \"Stock du produit\",\n    \"description\": \"Description\",\n    \"featured_image\": \"Image vedette\",\n    \"multicolumn\": \"Multicolonne\",\n    \"product_custom_property\": \"Instructions spéciales\",\n    \"blog_card\": \"Carte d’article de blog\",\n    \"blog_posts_grid\": \"Articles de blog : Grille\",\n    \"blog_posts_carousel\": \"Articles de blog : Carrousel\",\n    \"blog_posts_editorial\": \"Articles de blog : Éditorial\",\n    \"excerpt\": \"Extrait\",\n    \"footer_password\": \"Pied de page pour mot de passe\",\n    \"policies_and_links\": \"Politiques et liens\",\n    \"card\": \"Carte\",\n    \"carousel\": \"Carrousel\",\n    \"carousel_content\": \"Contenu du carrousel\",\n    \"quick_order_list\": \"Liste de commande rapide\",\n    \"column\": \"Colonne\",\n    \"comparison_slider\": \"Curseur de comparaison\",\n    \"slideshow_full_frame\": \"Diaporama : plein cadre\",\n    \"slideshow_inset\": \"Diaporama : encart\",\n    \"image_compare\": \"Comparaison d’images\",\n    \"subheading\": \"Sous-titre\",\n    \"featured_product_information\": \"Produit en vedette\",\n    \"product_hotspots\": \"Zones réactives de produit\",\n    \"hotspot_product\": \"Zone réactive\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Diaporama superposé\"\n  },\n  \"settings\": {\n    \"autoplay\": \"Lecture automatique\",\n    \"background\": \"Arrière-plan\",\n    \"border_radius\": \"Rayon de la bordure\",\n    \"border_width\": \"Épaisseur de la bordure\",\n    \"borders\": \"Bordures\",\n    \"bottom_padding\": \"Espacement inférieur\",\n    \"color\": \"Couleur\",\n    \"content_direction\": \"Direction du contenu\",\n    \"content_position\": \"Position du contenu\",\n    \"cover_image_size\": \"Taille de l'image de couverture\",\n    \"cover_image\": \"Image de couverture\",\n    \"custom_width\": \"Largeur personnalisée\",\n    \"enable_video_looping\": \"Vidéo en boucle\",\n    \"favicon\": \"Favicon\",\n    \"heading\": \"Titre\",\n    \"icon\": \"Icône\",\n    \"image_icon\": \"Icône d'image\",\n    \"make_section_full_width\": \"Afficher la section en pleine largeur\",\n    \"overlay_opacity\": \"Opacité de la superposition\",\n    \"padding\": \"Espacement\",\n    \"product\": \"Produit\",\n    \"text\": \"Texte\",\n    \"top_padding\": \"Espacement supérieur\",\n    \"video\": \"Vidéo\",\n    \"video_alt_text\": \"Texte alternatif\",\n    \"video_loop\": \"Vidéo en boucle\",\n    \"video_position\": \"Position de la vidéo\",\n    \"width\": \"Largeur\",\n    \"alignment\": \"Alignement\",\n    \"button\": \"Bouton\",\n    \"colors\": \"Couleurs\",\n    \"content_alignment\": \"Alignement du contenu\",\n    \"custom_minimum_height\": \"Hauteur minimale personnalisée\",\n    \"font_family\": \"Famille de polices\",\n    \"gap\": \"Espacement\",\n    \"geometric_translate_y\": \"Translation géométrique Y\",\n    \"image\": \"Image\",\n    \"image_opacity\": \"Opacité de l'image\",\n    \"image_position\": \"Position de l'image\",\n    \"image_ratio\": \"Format d'image\",\n    \"label\": \"Étiquette\",\n    \"line_height\": \"Hauteur de ligne\",\n    \"link\": \"Lien\",\n    \"layout_gap\": \"Espacement de la mise en page\",\n    \"minimum_height\": \"Hauteur minimale\",\n    \"opacity\": \"Opacité\",\n    \"primary_color\": \"Liens\",\n    \"section_width\": \"Largeur de la section\",\n    \"size\": \"Taille\",\n    \"slide_spacing\": \"Espacement entre les diapositives\",\n    \"slide_width\": \"Largeur de la diapositive\",\n    \"slideshow_fullwidth\": \"Diapositives en pleine largeur\",\n    \"style\": \"Style\",\n    \"text_case\": \"Casse\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Limiter la largeur du contenu\",\n    \"color_scheme\": \"Combinaison de couleurs\",\n    \"inherit_color_scheme\": \"Hériter de la combinaison de couleurs\",\n    \"product_count\": \"Nombre de produits\",\n    \"product_type\": \"Type de produit\",\n    \"content_width\": \"Largeur du contenu\",\n    \"collection\": \"Collection\",\n    \"enable_sticky_content\": \"Contenu fixe sur ordinateur\",\n    \"error_color\": \"Erreur\",\n    \"success_color\": \"Réussite\",\n    \"primary_font\": \"Police principale\",\n    \"secondary_font\": \"Police secondaire\",\n    \"tertiary_font\": \"Police tertiaire\",\n    \"columns\": \"Colonnes\",\n    \"items_to_show\": \"Articles à afficher\",\n    \"layout\": \"Mise en page\",\n    \"layout_type\": \"Type\",\n    \"show_grid_layout_selector\": \"Afficher le sélecteur de mise en page en grille\",\n    \"view_more_show\": \"Afficher le bouton Tout voir\",\n    \"image_gap\": \"Espacement entre les images\",\n    \"width_desktop\": \"Largeur sur ordinateur\",\n    \"width_mobile\": \"Largeur sur mobile\",\n    \"border_style\": \"Style de bordure\",\n    \"height\": \"Hauteur\",\n    \"thickness\": \"Épaisseur\",\n    \"stroke\": \"Contour\",\n    \"filter_style\": \"Style de filtre\",\n    \"swatches\": \"Nuanciers\",\n    \"quick_add_colors\": \"Couleurs de l'ajout rapide\",\n    \"divider_color\": \"Séparateur\",\n    \"border_opacity\": \"Opacité de la bordure\",\n    \"hover_background\": \"Arrière-plan au survol\",\n    \"hover_borders\": \"Bordures au survol\",\n    \"hover_text\": \"Texte au survol\",\n    \"primary_hover_color\": \"Liens au survol\",\n    \"primary_button_text\": \"Texte du bouton principal\",\n    \"primary_button_background\": \"Arrière-plan du bouton principal\",\n    \"primary_button_border\": \"Bordure du bouton principal\",\n    \"secondary_button_text\": \"Texte du bouton secondaire\",\n    \"secondary_button_background\": \"Arrière-plan du bouton secondaire\",\n    \"secondary_button_border\": \"Bordure du bouton secondaire\",\n    \"shadow_color\": \"Ombre\",\n    \"video_autoplay\": \"Lecture automatique\",\n    \"video_cover_image\": \"Image de couverture\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Source\",\n    \"first_row_media_position\": \"Position du support multimédia de la première rangée\",\n    \"shadow_opacity\": \"Opacité de l'ombre\",\n    \"show_filter_label\": \"Étiquettes de texte pour les filtres appliqués\",\n    \"show_swatch_label\": \"Étiquettes de texte pour les nuanciers\",\n    \"accordion\": \"Accordéon\",\n    \"aspect_ratio\": \"Format d'image\",\n    \"auto_rotate_announcements\": \"Rotation automatique des annonces\",\n    \"auto_rotate_slides\": \"Rotation automatique des diapositives\",\n    \"badge_corner_radius\": \"Rayon de la bordure\",\n    \"badge_position\": \"Position sur les cartes\",\n    \"badge_sale_color_scheme\": \"Promotion\",\n    \"badge_sold_out_color_scheme\": \"Épuisé\",\n    \"behavior\": \"Comportement\",\n    \"blur\": \"Flou de l'ombre\",\n    \"border\": \"Bordure\",\n    \"bottom\": \"Bas\",\n    \"card_image_height\": \"Hauteur de l'image de produit\",\n    \"carousel_on_mobile\": \"Carrousel sur mobile\",\n    \"cart_count\": \"Nombre d'articles dans le panier\",\n    \"cart_items\": \"Articles du panier\",\n    \"cart_related_products\": \"Produits associés\",\n    \"cart_title\": \"Panier\",\n    \"cart_total\": \"Total du panier\",\n    \"cart_type\": \"Type\",\n    \"case\": \"Casse\",\n    \"checkout_buttons\": \"Boutons de paiement accéléré\",\n    \"collection_list\": \"Collections\",\n    \"collection_templates\": \"Modèles de collection\",\n    \"content\": \"Contenu\",\n    \"corner_radius\": \"Rayon de la bordure\",\n    \"country_region\": \"Pays/Région\",\n    \"currency_code\": \"Code de devise\",\n    \"custom_height\": \"Hauteur personnalisée\",\n    \"desktop_height\": \"Hauteur sur ordinateur\",\n    \"direction\": \"Direction\",\n    \"display\": \"Affichage\",\n    \"divider_thickness\": \"Épaisseur du séparateur\",\n    \"divider\": \"Séparateur\",\n    \"dividers\": \"Séparateurs\",\n    \"drop_shadow\": \"Ombre portée\",\n    \"empty_state_collection_info\": \"Affichée avant la saisie d'une recherche\",\n    \"empty_state_collection\": \"Collection pour l'état vide\",\n    \"enable_filtering\": \"Filtres\",\n    \"enable_grid_density\": \"Contrôle de la disposition en grille\",\n    \"enable_sorting\": \"Tri\",\n    \"enable_zoom\": \"Activer le zoom\",\n    \"equal_columns\": \"Colonnes égales\",\n    \"expand_first_group\": \"Développer le premier groupe\",\n    \"extend_media_to_screen_edge\": \"Étendre le support multimédia jusqu'au bord de l'écran\",\n    \"extend_summary\": \"Étendre jusqu'au bord de l'écran\",\n    \"extra_large\": \"Très grande\",\n    \"extra_small\": \"Très petite\",\n    \"flag\": \"Drapeau\",\n    \"font_price\": \"Police du prix\",\n    \"font_weight\": \"Graisse de la police\",\n    \"font\": \"Police\",\n    \"full_width_first_image\": \"Première image en pleine largeur\",\n    \"full_width_on_mobile\": \"Pleine largeur sur mobile\",\n    \"heading_preset\": \"Préréglage du titre\",\n    \"hide_unselected_variant_media\": \"Masquer les supports multimédias des variantes non sélectionnées\",\n    \"horizontal_gap\": \"Espacement horizontal\",\n    \"horizontal_offset\": \"Décalage horizontal de l'ombre\",\n    \"hover_behavior\": \"Comportement au survol\",\n    \"icon_background\": \"Arrière-plan de l'icône\",\n    \"icons\": \"Icônes\",\n    \"image_border_radius\": \"Rayon de la bordure de l'image\",\n    \"installments\": \"Échéances\",\n    \"integrated_button\": \"Bouton intégré\",\n    \"language_selector\": \"Sélecteur de langue\",\n    \"large\": \"Grande\",\n    \"left_padding\": \"Espacement à gauche\",\n    \"left\": \"Gauche\",\n    \"letter_spacing\": \"Espacement des lettres\",\n    \"limit_media_to_screen_height\": \"Limiter à la hauteur de l'écran\",\n    \"limit_product_details_width\": \"Limiter la largeur des détails du produit\",\n    \"link_preset\": \"Préréglage du lien\",\n    \"links\": \"Liens\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Boucle\",\n    \"make_details_sticky_desktop\": \"Fixe sur ordinateur\",\n    \"max_width\": \"Largeur maximale\",\n    \"media_height\": \"Hauteur du support multimédia\",\n    \"media_overlay\": \"Superposition du support multimédia\",\n    \"media_position\": \"Position du support multimédia\",\n    \"media_type\": \"Type de support multimédia\",\n    \"media_width\": \"Largeur du support multimédia\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Colonnes sur mobile\",\n    \"mobile_height\": \"Hauteur sur mobile\",\n    \"mobile_logo_image\": \"Logo sur mobile\",\n    \"mobile_quick_add\": \"Ajout rapide sur mobile\",\n    \"motion_direction\": \"Direction du mouvement\",\n    \"motion\": \"Mouvement\",\n    \"movement_direction\": \"Direction du mouvement\",\n    \"navigation_bar_color_scheme\": \"Combinaison de couleurs de la barre de navigation\",\n    \"navigation_bar\": \"Barre de navigation\",\n    \"navigation\": \"Navigation\",\n    \"open_new_tab\": \"Ouvrir le lien dans un nouvel onglet\",\n    \"overlay_color\": \"Couleur de superposition\",\n    \"overlay\": \"Superposition\",\n    \"padding_bottom\": \"Espacement inférieur\",\n    \"padding_horizontal\": \"Espacement horizontal\",\n    \"padding_top\": \"Espacement supérieur\",\n    \"page_width\": \"Largeur de la page\",\n    \"pagination\": \"Pagination\",\n    \"placement\": \"Emplacement\",\n    \"position\": \"Position\",\n    \"preset\": \"Préréglage\",\n    \"product_cards\": \"Cartes de produit\",\n    \"product_pages\": \"Pages de produits\",\n    \"product_templates\": \"Modèles de produit\",\n    \"products\": \"Produits\",\n    \"quick_add\": \"Ajout rapide\",\n    \"ratio\": \"Ratio\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Nombre d'avis\",\n    \"right\": \"Droite\",\n    \"row_height\": \"Hauteur de la rangée\",\n    \"row\": \"Rangée\",\n    \"seller_note\": \"Autoriser une note au vendeur\",\n    \"shape\": \"Forme\",\n    \"show_as_accordion\": \"Afficher en accordéon sur mobile\",\n    \"show_sale_price_first\": \"Afficher le prix soldé en premier\",\n    \"show_tax_info\": \"Informations sur les taxes\",\n    \"show\": \"Afficher\",\n    \"small\": \"Petite\",\n    \"speed\": \"Vitesse\",\n    \"statement\": \"Relevé\",\n    \"sticky_header\": \"En-tête fixe\",\n    \"text_hierarchy\": \"Hiérarchie du texte\",\n    \"text_presets\": \"Préréglages du texte\",\n    \"title\": \"Titre\",\n    \"top\": \"Haut\",\n    \"type\": \"Type\",\n    \"type_preset\": \"Préréglage du texte\",\n    \"underline_thickness\": \"Épaisseur du soulignement\",\n    \"variant_images\": \"Images de variantes\",\n    \"vendor\": \"Fournisseur\",\n    \"vertical_gap\": \"Espacement vertical\",\n    \"vertical_offset\": \"Décalage vertical de l'ombre\",\n    \"vertical_on_mobile\": \"Vertical sur mobile\",\n    \"view_all_as_last_card\": \"« Tout voir » en tant que dernière carte\",\n    \"weight\": \"Graisse\",\n    \"wrap\": \"Retour à la ligne\",\n    \"read_only\": \"Lecture seule\",\n    \"always_stack_buttons\": \"Toujours empiler les boutons\",\n    \"background_color\": \"Couleur d'arrière-plan\",\n    \"custom_mobile_size\": \"Taille personnalisée sur mobile\",\n    \"custom_mobile_width\": \"Largeur personnalisée sur mobile\",\n    \"fixed_height\": \"Hauteur en pixels\",\n    \"fixed_width\": \"Largeur en pixels\",\n    \"gradient_direction\": \"Direction du dégradé\",\n    \"hide_padding\": \"Masquer l'espacement\",\n    \"logo_font\": \"Police du logo\",\n    \"overlay_style\": \"Style de superposition\",\n    \"percent_height\": \"Hauteur en pourcentage\",\n    \"percent_size_mobile\": \"Taille en pourcentage\",\n    \"percent_size\": \"Taille en pourcentage\",\n    \"percent_width\": \"Largeur en pourcentage\",\n    \"pixel_size_mobile\": \"Taille en pixels\",\n    \"pixel_size\": \"Taille en pixels\",\n    \"size_mobile\": \"Taille sur mobile\",\n    \"transparent_background\": \"Arrière-plan transparent\",\n    \"unit\": \"Unité\",\n    \"account\": \"Compte\",\n    \"align_baseline\": \"Aligner la ligne de base du texte\",\n    \"add_discount_code\": \"Autoriser les réductions dans le panier\",\n    \"background_overlay\": \"Superposition d'arrière-plan\",\n    \"background_media\": \"Support multimédia d'arrière-plan\",\n    \"border_thickness\": \"Épaisseur de la bordure\",\n    \"bottom_row\": \"Rangée du bas\",\n    \"button_text_case\": \"Casse du texte\",\n    \"card_size\": \"Taille de la carte\",\n    \"auto_open_cart_drawer\": \"« Ajouter au panier » ouvre automatiquement le tiroir\",\n    \"collection_count\": \"Nombre de produits\",\n    \"custom_liquid\": \"Code Liquid\",\n    \"default\": \"Par défaut\",\n    \"default_logo\": \"Logo par défaut\",\n    \"divider_width\": \"Largeur du séparateur\",\n    \"headings\": \"Titres\",\n    \"hide_logo_on_home_page\": \"Masquer le logo sur la page d'accueil\",\n    \"horizontal_padding\": \"Espacement horizontal\",\n    \"inverse\": \"Inversée\",\n    \"inverse_logo\": \"Logo inversé\",\n    \"layout_style\": \"Style\",\n    \"length\": \"Longueur\",\n    \"mobile_card_size\": \"Taille de la carte sur mobile\",\n    \"mobile_pagination\": \"Pagination sur mobile\",\n    \"open_row_by_default\": \"Ouvrir la rangée par défaut\",\n    \"page\": \"Page\",\n    \"page_transition_enabled\": \"Transition de page\",\n    \"right_padding\": \"Espacement à droite\",\n    \"search\": \"Rechercher\",\n    \"search_icon\": \"Icône de recherche\",\n    \"search_position\": \"Position\",\n    \"search_row\": \"Rangée\",\n    \"show_author\": \"Auteur\",\n    \"show_alignment\": \"Afficher l'alignement\",\n    \"show_count\": \"Afficher le nombre\",\n    \"show_date\": \"Date\",\n    \"show_pickup_availability\": \"Afficher la disponibilité pour le retrait\",\n    \"show_search\": \"Afficher la recherche\",\n    \"use_inverse_logo\": \"Utiliser le logo inversé\",\n    \"vertical_padding\": \"Espacement vertical\",\n    \"visibility\": \"Visibilité\",\n    \"product_corner_radius\": \"Rayon de la bordure du produit\",\n    \"card_corner_radius\": \"Rayon de la bordure de la carte\",\n    \"alignment_mobile\": \"Alignement sur mobile\",\n    \"animation_repeat\": \"Répéter l'animation\",\n    \"blurred_reflection\": \"Reflet flou\",\n    \"card_hover_effect\": \"Effet de survol de la carte\",\n    \"collection_title_case\": \"Casse du titre de la collection\",\n    \"inventory_threshold\": \"Seuil de stock bas\",\n    \"product_and_card_title_case\": \"Casse du titre du produit et de la carte\",\n    \"product_title_case\": \"Casse du titre de produit\",\n    \"reflection_opacity\": \"Opacité du reflet\",\n    \"show_inventory_quantity\": \"Afficher la quantité en stock faible\",\n    \"text_label_case\": \"Casse de l'étiquette de texte\",\n    \"transition_to_main_product\": \"Transition de la carte de produit à la page de produit\",\n    \"media\": \"Support multimédia\",\n    \"product_card_carousel\": \"Afficher le carrousel\",\n    \"show_second_image_on_hover\": \"Afficher la deuxième image au survol\",\n    \"media_fit\": \"Ajustement du support multimédia\",\n    \"scroll_speed\": \"Délai avant la prochaine annonce\",\n    \"show_powered_by_shopify\": \"Afficher « Propulsé par Shopify »\",\n    \"gift_card_form\": \"Formulaire de carte-cadeau\",\n    \"seller_note_open_by_default\": \"Ouvrir la note au vendeur par défaut\",\n    \"add_to_cart_animation\": \"Ajouter au panier\",\n    \"custom_link\": \"Lien personnalisé\",\n    \"product_custom_property\": {\n      \"heading\": \"Titre\",\n      \"description\": \"Description\",\n      \"key\": \"Nom de la propriété\",\n      \"key_info\": \"Ne peut être vide et doit être unique pour chaque bloc. S’affiche dans le panier, au moment du paiement et dans les détails de la commande.\",\n      \"placeholder_text\": \"Texte de l'espace réservé\",\n      \"default_heading\": \"Personnalisez votre produit\",\n      \"default_placeholder\": \"Saisissez vos instructions spéciales\",\n      \"default_property_key\": \"Instructions spéciales\",\n      \"max_length\": \"Nombre maximal de caractères\",\n      \"required\": \"Saisie obligatoire pour ajouter l'article au panier\",\n      \"input_type\": \"Type de saisie\",\n      \"input_type_text\": \"Texte\",\n      \"input_type_checkbox\": \"Case à cocher\",\n      \"content_settings\": \"Paramètres de contenu\",\n      \"buyers_input\": \"Saisie de l'acheteur\",\n      \"checkbox_label\": \"Étiquette de la case à cocher\",\n      \"default_checkbox_label\": \"Inclure l'emballage cadeau\",\n      \"heading_preset\": \"Titre\",\n      \"description_preset\": \"Description\",\n      \"input_preset\": \"Saisie\",\n      \"checkbox_preset\": \"Étiquette de la case à cocher\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Nombre d'articles\",\n    \"animation\": \"Animation\",\n    \"top_level_size\": \"Taille du niveau supérieur\",\n    \"empty_cart_button_link\": \"Lien du bouton du panier vide\",\n    \"auto_load_products\": \"Chargement automatique des produits au défilement\",\n    \"products_per_page\": \"Produits par page\",\n    \"custom_mobile_media\": \"Afficher un média différent sur mobile\",\n    \"stack_media_on_mobile\": \"Empiler les supports multimédias\",\n    \"media_type_1\": \"Type de support multimédia\",\n    \"media_type_2\": \"Type de support multimédia 2\",\n    \"full_frame_on_mobile\": \"Pleine largeur sur mobile\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"Variantes par page\",\n    \"image_1\": \"Image 1\",\n    \"image_2\": \"Image 2\",\n    \"after_image\": \"Image « après »\",\n    \"before_image\": \"Image « avant »\",\n    \"cs_slider_style\": \"Style du curseur\",\n    \"cs_slider_color\": \"Couleur du curseur\",\n    \"cs_slider_inner_color\": \"Couleur intérieure du curseur\",\n    \"text_on_images\": \"Texte sur les images\",\n    \"card_height\": \"Hauteur de la carte\",\n    \"submenu_size\": \"Taille du sous-menu\",\n    \"desktop_position\": \"Position sur ordinateur\",\n    \"desktop_pagination\": \"Pagination sur ordinateur\",\n    \"bullseye_color\": \"Couleur intérieure\",\n    \"hotspot_color\": \"Couleur de la zone réactive\",\n    \"product_price_typography\": \"Typographie du prix du produit\",\n    \"product_title_typography\": \"Typographie du titre de produit\",\n    \"x_position\": \"Position horizontale\",\n    \"y_position\": \"Position verticale\",\n    \"enable_sticky_add_to_cart\": \"Barre d’ajout au panier flottante\",\n    \"sticky_add_to_cart\": \"Ajout au panier flottant\",\n    \"actions_display_style\": \"Style de menu\"\n  },\n  \"options\": {\n    \"apple\": \"Pomme\",\n    \"arrow\": \"Flèche\",\n    \"banana\": \"Banane\",\n    \"bottle\": \"Bouteille\",\n    \"box\": \"Boîte\",\n    \"buttons\": \"Boutons\",\n    \"carrot\": \"Carotte\",\n    \"center\": \"Centre\",\n    \"chat_bubble\": \"Bulle de chat\",\n    \"clipboard\": \"Presse-papiers\",\n    \"contain\": \"Contenir\",\n    \"counter\": \"Compteur\",\n    \"cover\": \"Couvrir\",\n    \"custom\": \"Personnalisé\",\n    \"dairy_free\": \"Sans produits laitiers\",\n    \"dairy\": \"Produit laitier\",\n    \"dropdowns\": \"Listes déroulantes\",\n    \"dots\": \"Points\",\n    \"dryer\": \"Sèche-linge\",\n    \"end\": \"Fin\",\n    \"eye\": \"Œil\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"Feu\",\n    \"gluten_free\": \"Sans gluten\",\n    \"heart\": \"Cœur\",\n    \"horizontal\": \"Horizontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Fer à repasser\",\n    \"large\": \"Grand\",\n    \"leaf\": \"Feuille\",\n    \"leather\": \"Cuir\",\n    \"lightning_bolt\": \"Éclair\",\n    \"lipstick\": \"Rouge à lèvres\",\n    \"lock\": \"Cadenas\",\n    \"map_pin\": \"Épingle de carte\",\n    \"medium\": \"Moyen\",\n    \"none\": \"Aucun\",\n    \"numbers\": \"Nombres\",\n    \"nut_free\": \"Sans noix\",\n    \"pants\": \"Pantalon\",\n    \"paw_print\": \"Empreinte de patte\",\n    \"pepper\": \"Poivre\",\n    \"perfume\": \"Parfum\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Avion\",\n    \"plant\": \"Plante\",\n    \"price_tag\": \"Étiquette de prix\",\n    \"question_mark\": \"Point d’interrogation\",\n    \"recycle\": \"Recycler\",\n    \"return\": \"Retour\",\n    \"ruler\": \"Règle\",\n    \"serving_dish\": \"Plat de service\",\n    \"shirt\": \"Chemise\",\n    \"shoe\": \"Chaussure\",\n    \"silhouette\": \"Silhouette\",\n    \"small\": \"Petit\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Flocon de neige\",\n    \"star\": \"Étoile\",\n    \"start\": \"Début\",\n    \"stopwatch\": \"Chronomètre\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Camion\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"vertical\": \"Vertical\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Lavage\",\n    \"auto\": \"Automatique\",\n    \"default\": \"Par défaut\",\n    \"fill\": \"Remplir\",\n    \"fit\": \"Ajuster\",\n    \"full\": \"Pleine\",\n    \"full_and_page\": \"Arrière-plan pleine largeur, contenu à la largeur de la page\",\n    \"heading\": \"Titre\",\n    \"landscape\": \"Paysage\",\n    \"lg\": \"G\",\n    \"link\": \"Lien\",\n    \"lowercase\": \"minuscules\",\n    \"m\": \"M\",\n    \"outline\": \"Contour\",\n    \"page\": \"Page\",\n    \"portrait\": \"Portrait\",\n    \"s\": \"P\",\n    \"sentence\": \"Phrase\",\n    \"solid\": \"Plein\",\n    \"space_between\": \"Espacer\",\n    \"square\": \"Carré\",\n    \"uppercase\": \"Majuscules\",\n    \"circle\": \"Cercle\",\n    \"swatches\": \"Nuanciers\",\n    \"full_and_page_offset_left\": \"Arrière-plan pleine largeur, contenu à la largeur de la page, décalé à gauche\",\n    \"full_and_page_offset_right\": \"Arrière-plan pleine largeur, contenu à la largeur de la page, décalé à droite\",\n    \"offset_left\": \"Décalé à gauche\",\n    \"offset_right\": \"Décalé à droite\",\n    \"page_center_aligned\": \"Page, aligné au centre\",\n    \"page_left_aligned\": \"Page, aligné à gauche\",\n    \"page_right_aligned\": \"Page, aligné à droite\",\n    \"button\": \"Bouton\",\n    \"caption\": \"Légende\",\n    \"h1\": \"Titre 1\",\n    \"h2\": \"Titre 2\",\n    \"h3\": \"Titre 3\",\n    \"h4\": \"Titre 4\",\n    \"h5\": \"Titre 5\",\n    \"h6\": \"Titre 6\",\n    \"paragraph\": \"Paragraphe\",\n    \"primary\": \"Principal\",\n    \"secondary\": \"Secondaire\",\n    \"tertiary\": \"Tertiaire\",\n    \"chevron_left\": \"Chevron gauche\",\n    \"chevron_right\": \"Chevron droit\",\n    \"diamond\": \"Diamant\",\n    \"grid\": \"Grille\",\n    \"parallelogram\": \"Parallélogramme\",\n    \"rounded\": \"Arrondi\",\n    \"fit_content\": \"Ajuster\",\n    \"pills\": \"Pilules\",\n    \"heavy\": \"Épais\",\n    \"thin\": \"Fin\",\n    \"drawer\": \"Tiroir\",\n    \"preview\": \"Aperçu\",\n    \"text\": \"Texte\",\n    \"video_uploaded\": \"Importée\",\n    \"video_external_url\": \"URL externe\",\n    \"aspect_ratio\": \"Format d’image\",\n    \"above_carousel\": \"Au-dessus du carrousel\",\n    \"all\": \"Tout\",\n    \"always\": \"Toujours\",\n    \"arrows_large\": \"Grandes flèches\",\n    \"arrows\": \"Flèches\",\n    \"balance\": \"Équilibre\",\n    \"bento\": \"Bento\",\n    \"black\": \"Noir\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Corps de texte (grand)\",\n    \"body_regular\": \"Corps de texte (normal)\",\n    \"body_small\": \"Corps de texte (petit)\",\n    \"bold\": \"Gras\",\n    \"bottom_left\": \"En bas à gauche\",\n    \"bottom_right\": \"En bas à droite\",\n    \"bottom\": \"Bas\",\n    \"capitalize\": \"Mettre en majuscules\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carrousel\",\n    \"check_box\": \"Case à cocher\",\n    \"chevron_large\": \"Grands chevrons\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrons\",\n    \"classic\": \"Classique\",\n    \"collection_images\": \"Images de collection\",\n    \"color\": \"Couleur\",\n    \"complementary\": \"Complémentaire\",\n    \"dissolve\": \"Fondu\",\n    \"dotted\": \"Pointillés\",\n    \"editorial\": \"Éditorial\",\n    \"extra_large\": \"Très grand\",\n    \"extra_small\": \"Très petit\",\n    \"featured_collections\": \"Collections en vedette\",\n    \"featured_products\": \"Produits en vedette\",\n    \"font_primary\": \"Principale\",\n    \"font_secondary\": \"Secondaire\",\n    \"font_tertiary\": \"Tertiaire\",\n    \"forward\": \"Avant\",\n    \"full_screen\": \"Plein écran\",\n    \"heading_extra_large\": \"Titre (très grand)\",\n    \"heading_extra_small\": \"Titre (très petit)\",\n    \"heading_large\": \"Titre (grand)\",\n    \"heading_regular\": \"Titre (normal)\",\n    \"heading_small\": \"Titre (petit)\",\n    \"icon\": \"Icône\",\n    \"image\": \"Image\",\n    \"input\": \"Saisie\",\n    \"inside_carousel\": \"À l’intérieur du carrousel\",\n    \"inverse_large\": \"Inverse grand\",\n    \"inverse\": \"Inverse\",\n    \"large_arrows\": \"Grandes flèches\",\n    \"large_chevrons\": \"Grands chevrons\",\n    \"left\": \"Gauche\",\n    \"light\": \"Léger\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Ample\",\n    \"media_first\": \"Support multimédia en premier\",\n    \"media_second\": \"Support multimédia en deuxième\",\n    \"modal\": \"Fenêtre modale\",\n    \"narrow\": \"Étroit\",\n    \"never\": \"Jamais\",\n    \"next_to_carousel\": \"À côté du carrousel\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Pas de retour à la ligne\",\n    \"off_media\": \"Hors du support multimédia\",\n    \"on_media\": \"Sur le support multimédia\",\n    \"on_scroll_up\": \"Au défilement vers le haut\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pilule\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Joli\",\n    \"price\": \"Prix\",\n    \"primary_style\": \"Style principal\",\n    \"rectangle\": \"Rectangle\",\n    \"regular\": \"Normal\",\n    \"related\": \"Connexe\",\n    \"reverse\": \"Inverser\",\n    \"rich_text\": \"Texte enrichi\",\n    \"right\": \"Droite\",\n    \"secondary_style\": \"Style secondaire\",\n    \"semibold\": \"Demi-gras\",\n    \"shaded\": \"Ombré\",\n    \"show_second_image\": \"Afficher la deuxième image\",\n    \"single\": \"Unique\",\n    \"slide_left\": \"Glisser vers la gauche\",\n    \"slide_up\": \"Glisser vers le haut\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Empiler\",\n    \"text_only\": \"Texte uniquement\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Vignettes\",\n    \"tight\": \"Serré\",\n    \"top_left\": \"En haut à gauche\",\n    \"top_right\": \"En haut à droite\",\n    \"top\": \"Haut\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Souligné\",\n    \"video\": \"Vidéo\",\n    \"wide\": \"Large\",\n    \"youtube\": \"YouTube\",\n    \"down\": \"Vers le bas\",\n    \"fixed\": \"Fixe\",\n    \"gradient\": \"Dégradé\",\n    \"percent\": \"Pourcentage\",\n    \"pixel\": \"Pixel\",\n    \"up\": \"Vers le haut\",\n    \"compact\": \"Compact\",\n    \"standard\": \"Standard\",\n    \"accent\": \"Accentuation\",\n    \"below_image\": \"Sous l’image\",\n    \"body\": \"Corps de texte\",\n    \"button_primary\": \"Bouton principal\",\n    \"button_secondary\": \"Bouton secondaire\",\n    \"crop_to_fit\": \"Recadrer pour ajuster\",\n    \"hidden\": \"Masqué\",\n    \"hint\": \"Indice\",\n    \"maintain_aspect_ratio\": \"Conserver le format d’image\",\n    \"off\": \"Désactivé\",\n    \"on_image\": \"Sur l’image\",\n    \"social_bluesky\": \"Social : Bluesky\",\n    \"social_facebook\": \"Social : Facebook\",\n    \"social_instagram\": \"Social : Instagram\",\n    \"social_linkedin\": \"Social : LinkedIn\",\n    \"social_pinterest\": \"Social : Pinterest\",\n    \"social_snapchat\": \"Social : Snapchat\",\n    \"social_spotify\": \"Social : Spotify\",\n    \"social_threads\": \"Social : Threads\",\n    \"social_tiktok\": \"Social : TikTok\",\n    \"social_tumblr\": \"Social : Tumblr\",\n    \"social_twitter\": \"Social : X (Twitter)\",\n    \"social_whatsapp\": \"Social : WhatsApp\",\n    \"social_vimeo\": \"Social : Vimeo\",\n    \"social_youtube\": \"Social : YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"subheading\": \"Sous-titre\",\n    \"blur\": \"Flou\",\n    \"lift\": \"Soulever\",\n    \"reveal\": \"Révéler\",\n    \"scale\": \"Mettre à l’échelle\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Avec indicateurs\",\n    \"below_media\": \"Sous le support multimédia\",\n    \"full_frame\": \"Plein cadre\",\n    \"icons\": \"Icônes\"\n  },\n  \"content\": {\n    \"background_video\": \"Vidéo de fond\",\n    \"describe_the_video_for\": \"Décrivez la vidéo pour les clients qui utilisent des lecteurs d’écran. [En savoir plus](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"La largeur est automatiquement optimisée pour les appareils mobiles.\",\n    \"advanced\": \"Avancé\",\n    \"background_image\": \"Image de fond\",\n    \"block_size\": \"Taille du bloc\",\n    \"borders\": \"Bordures\",\n    \"section_size\": \"Taille de la section\",\n    \"slideshow_width\": \"Largeur de la diapositive\",\n    \"typography\": \"Typographie\",\n    \"complementary_products\": \"Les produits complémentaires doivent être configurés à l’aide de l’application Search & Discovery. [En savoir plus](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Les colonnes s’optimiseront automatiquement pour les appareils mobiles\",\n    \"content_width\": \"La largeur du contenu ne s’applique que lorsque la largeur de la section est définie sur « Pleine largeur ».\",\n    \"responsive_font_sizes\": \"Les tailles s’adaptent automatiquement à toutes les tailles d’écran\",\n    \"buttons\": \"Boutons\",\n    \"swatches\": \"Nuanciers\",\n    \"variant_settings\": \"Paramètres des variantes\",\n    \"background\": \"Arrière-plan\",\n    \"appearance\": \"Apparence\",\n    \"arrows\": \"Flèches\",\n    \"body_size\": \"Taille du corps de texte\",\n    \"bottom_row_appearance\": \"Apparence de la rangée du bas\",\n    \"carousel_navigation\": \"Navigation du carrousel\",\n    \"carousel_pagination\": \"Pagination du carrousel\",\n    \"copyright\": \"Droits d’auteur\",\n    \"edit_logo_in_theme_settings\": \"Modifier le logo dans les [paramètres du thème](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Modifier le format du prix dans les [paramètres du thème](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Modifier le style des variantes dans les [paramètres du thème](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Les inscriptions ajoutent des [profils de client](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Pour que le bouton s’affiche, le canal Shop doit être installé et Shop Pay doit être activé. [En savoir plus](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Polices\",\n    \"grid\": \"Grille\",\n    \"heading_size\": \"Taille du titre\",\n    \"image\": \"Image\",\n    \"input\": \"Saisie\",\n    \"layout\": \"Mise en page\",\n    \"link\": \"Lien\",\n    \"link_padding\": \"Espacement du lien\",\n    \"localization\": \"Localisation\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Marge\",\n    \"media\": \"Support multimédia\",\n    \"media_1\": \"Support multimédia 1\",\n    \"media_2\": \"Support multimédia 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Mise en page mobile\",\n    \"padding\": \"Espacement\",\n    \"padding_desktop\": \"Espacement sur ordinateur\",\n    \"paragraph\": \"Paragraphe\",\n    \"policies\": \"Politiques\",\n    \"popup\": \"Pop-up\",\n    \"search\": \"Recherche\",\n    \"size\": \"Taille\",\n    \"social_media\": \"Réseaux sociaux\",\n    \"submit_button\": \"Bouton Soumettre\",\n    \"text_presets\": \"Préréglages de texte\",\n    \"transparent_background\": \"Arrière-plan transparent\",\n    \"typography_primary\": \"Typographie principale\",\n    \"typography_secondary\": \"Typographie secondaire\",\n    \"typography_tertiary\": \"Typographie tertiaire\",\n    \"mobile_size\": \"Taille sur mobile\",\n    \"cards_layout\": \"Mise en page des cartes\",\n    \"mobile_width\": \"Largeur sur mobile\",\n    \"section_layout\": \"Mise en page de la section\",\n    \"width\": \"Largeur\",\n    \"visible_if_collection_has_more_products\": \"Visible si la collection contient plus de produits que ceux affichés\",\n    \"carousel\": \"Carrousel\",\n    \"colors\": \"Couleurs\",\n    \"collection_page\": \"Page de collection\",\n    \"customer_account\": \"Compte client\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Modifier la collection pour état vide dans les [paramètres du thème](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Mise en page en grille\",\n    \"home_page\": \"Page d’accueil\",\n    \"images\": \"Images\",\n    \"inverse_logo_info\": \"Utilisé lorsque l’arrière-plan transparent de l’en-tête est défini sur Inverse\",\n    \"manage_customer_accounts\": \"[Gérer la visibilité](/admin/settings/customer_accounts) dans les paramètres de compte client. Les comptes hérités ne sont pas pris en charge.\",\n    \"manage_policies\": \"[Gérer les politiques](/admin/settings/legal)\",\n    \"product_page\": \"Page de produit\",\n    \"text\": \"Texte\",\n    \"thumbnails\": \"Vignettes\",\n    \"visibility\": \"Visibilité\",\n    \"app_required_for_ratings\": \"Une appli est requise pour les évaluations de produit. [En savoir plus](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Icône\",\n    \"manage_store_name\": \"[Gérer le nom de la boutique](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Affiche la collection de la section parente\",\n    \"resource_reference_collection_card_image\": \"Affiche l’image de la collection parente\",\n    \"resource_reference_collection_title\": \"Affiche le titre de la collection parente\",\n    \"resource_reference_product\": \"Se connecte automatiquement au produit parent\",\n    \"resource_reference_product_card\": \"Affiche le produit de la section parente\",\n    \"resource_reference_product_inventory\": \"Affiche le stock du produit parent\",\n    \"resource_reference_product_price\": \"Affiche le prix du produit parent\",\n    \"resource_reference_product_recommendations\": \"Affiche les recommandations basées sur le produit parent\",\n    \"resource_reference_product_review\": \"Affiche les avis sur le produit parent\",\n    \"resource_reference_product_swatches\": \"Affiche les nuanciers du produit parent\",\n    \"resource_reference_product_title\": \"Affiche le titre du produit parent\",\n    \"resource_reference_product_variant_picker\": \"Affiche les variantes du produit parent\",\n    \"resource_reference_product_media\": \"Affiche le support multimédia du produit parent\",\n    \"product_media\": \"Support multimédia du produit\",\n    \"section_link\": \"Lien de la section\",\n    \"gift_card_form_description\": \"Les clients peuvent envoyer des cartes-cadeaux à l’e-mail d’un destinataire avec un message personnel. [En savoir plus](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Titre\",\n    \"resource_reference_product_custom_property\": \"Ajoutez des champs de saisie personnalisables pour recueillir des informations personnalisées qui seront ajoutées à cet article du panier et qui seront visibles plus tard dans les détails de la commande.\",\n    \"block_link\": \"Lien du bloc\",\n    \"submenu_feature\": \"Fonctionnalité de sous-menu\",\n    \"cart_features\": \"Fonctionnalités du panier\",\n    \"email_signup\": \"Inscription à la liste de diffusion\",\n    \"mobile_media\": \"Support multimédia mobile\",\n    \"mobile_media_2\": \"Support multimédia mobile 2\",\n    \"navigation\": \"Navigation\",\n    \"popover\": \"Fenêtre contextuelle\",\n    \"popover_position\": \"Position de la fenêtre contextuelle\",\n    \"resource_reference_product_sku\": \"Affiche le SKU du produit parent\",\n    \"content_layout\": \"Mise en page du contenu\",\n    \"mobile_media_1\": \"Média mobile 1\",\n    \"utilities\": \"Utilitaires\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Partagez des informations sur votre marque avec vos clients. Décrivez un produit, faites des annonces ou accueillez les clients dans votre boutique.</p>\",\n    \"bestseller_h2\": \"<h2>Meilleures ventes</h2>\",\n    \"bestseller_h3\": \"<h3>Meilleures ventes</h3>\",\n    \"bestseller\": \"<p>Meilleure vente</p>\",\n    \"build_better\": \"<p>Nous croyons en l’amélioration continue</p>\",\n    \"contact_us\": \"<h2>Contactez-nous</h2>\",\n    \"discover_bestsellers\": \"<p>Découvrez les meilleures ventes qui ont conquis le cœur de nos clients grâce à leur mélange parfait de fonctionnalité et de style.</p>\",\n    \"everythings_starts_with_why\": \"<p>Tout ce que nous faisons commence par un « pourquoi »</p>\",\n    \"explore_latest_products\": \"<p>Découvrez nos derniers produits.</p>\",\n    \"faq\": \"<h3>Foire aux questions</h3>\",\n    \"first_to_know\": \"<p>Soyez les premiers informés des nouvelles collections et des offres spéciales. </p>\",\n    \"free_returns\": \"<p>Retours gratuits sous 30 jours</p>\",\n    \"free_shipping_over\": \"<p>Livraison gratuite pour les commandes de plus de 50 $</p>\",\n    \"goal_for_every_customer\": \"<p>Notre objectif est que chaque client soit entièrement satisfait de son achat. Si ce n’est pas le cas, faites-le-nous savoir et nous ferons de notre mieux pour trouver une solution avec vous.</p>\",\n    \"home_to_shirts\": \"<p>Accueil → Chemises</p>\",\n    \"intentional_design\": \"<h2>Conception intentionnelle</h2>\",\n    \"introducing_h2\": \"<h2><em>Nouveauté</em></h2>\",\n    \"latest_products\": \"<p>Découvrez nos derniers produits, conçus spécialement pour la saison. Achetez vos favoris avant qu’ils ne disparaissent !</p>\",\n    \"made_local_and_global\": \"<p>Nos produits sont fabriqués localement et dans le monde entier. Nous sélectionnons soigneusement nos partenaires de fabrication pour garantir que nos produits sont de haute qualité et d’un juste rapport qualité-prix.</p>\",\n    \"made_with_care_h2\": \"<h2>Fabriqué avec soin</h2>\",\n    \"made_with_care_extended\": \"<p>Fabriquée avec soin et inconditionnellement appréciée par nos clients, cette meilleure vente emblématique dépasse toutes les attentes.</p>\",\n    \"made_with_care\": \"<p>Fabriqué avec soin et inconditionnellement apprécié par nos clients.</p>\",\n    \"make_things_better_extended\": \"<p>Nous fabriquons des articles plus performants et plus durables. Nos produits résolvent de vrais problèmes avec un design épuré et des matériaux honnêtes.</p>\",\n    \"make_things_better\": \"<p>Nous fabriquons des articles plus performants et plus durables.</p>\",\n    \"may_also_like\": \"<h4>Vous pourriez aussi aimer</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nouveautés</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nouveautés</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nouveautés</h3>\",\n    \"product_launch\": \"<p>Découvrez les coulisses de notre dernier lancement de produit.</p>\",\n    \"product_story\": \"<p>Au cœur de chaque produit se trouve une histoire unique, animée par notre passion pour la qualité et l’innovation. Chaque article améliore votre quotidien et suscite de la joie.</p>\",\n    \"real_people\": \"<p>De vraies personnes qui fabriquent d’excellents produits</p>\",\n    \"related_product\": \"<h3>Produits connexes</h3>\",\n    \"return_policy\": \"<h2>Quelle est la politique de retour ?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 avis</p>\",\n    \"shipping_based_on_location\": \"<p>L’expédition est calculée en fonction de votre emplacement et des articles de votre commande. Vous connaîtrez toujours le prix de l’expédition avant d’effectuer votre achat.</p>\",\n    \"shop_by_collection\": \"<h3>Magasiner par collection</h3>\",\n    \"signature_products\": \"<h2>Notre produit phare</h2>\",\n    \"styled_with\": \"<h3>Porté avec</h3>\",\n    \"subscribe\": \"<h2>Abonnez-vous à nos e-mails</h2>\",\n    \"team_with_goal\": \"<h2>Une équipe avec un objectif</h2>\",\n    \"unable_to_accept_returns\": \"<p>Nous ne pouvons pas accepter les retours sur certains articles. Ceux-ci seront clairement indiqués avant l’achat.</p>\",\n    \"work_quickly_to_ship\": \"<p>Nous nous efforcerons d’expédier votre commande le plus rapidement possible. Une fois votre commande expédiée, vous recevrez un e-mail contenant des informations supplémentaires. Les délais de livraison varient en fonction de votre emplacement.</p>\",\n    \"join_our_email_list\": \"<h2>Inscrivez-vous à notre liste de diffusion</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Recevez des offres exclusives et un accès anticipé aux nouveaux produits.</p>\",\n    \"artistry_in_action\": \"<p>L’art en action </p>\",\n    \"authentic_materials\": \"<p>Matériaux authentiques, sans compromis </p>\",\n    \"bold_style_recognizable\": \"<p>Un style audacieux reconnaissable partout</p>\",\n    \"discover_elevated_design\": \"<p>Découvrez un design de niveau supérieur </p>\",\n    \"expert_construction_finish\": \"<p>Une confection experte et une finition impeccable</p>\",\n    \"made_to_last\": \"<p>Conçu pour durer </p>\",\n    \"pieces_better_with_time\": \"<p>Des pièces qui se bonifient avec le temps et l’usure </p>\",\n    \"quality_you_can_feel\": \"<h2>Une qualité qui se ressent</h2>\",\n    \"uncompromising_standards\": \"<p>Des normes sans compromis </p>\",\n    \"featured_collection_h2\": \"<h2>Collection en vedette</h2>\",\n    \"shop_collection\": \"<p>Découvrez notre collection exclusive, qui comprend des articles triés sur le volet alliant style et qualité.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"Rangée réductible\",\n    \"button_label\": \"Acheter maintenant\",\n    \"heading\": \"Titre\",\n    \"email_signup_button_label\": \"S'abonner\",\n    \"be_bold\": \"Soyez audacieux.\",\n    \"accordion_heading\": \"Titre de l'accordéon\",\n    \"contact_form_button_label\": \"Envoyer\",\n    \"popup_link\": \"Lien du pop-up\",\n    \"sign_up\": \"S'inscrire\",\n    \"welcome_to_our_store\": \"Bienvenue dans notre boutique\",\n    \"shop_our_latest_arrivals\": \"Découvrez nos derniers arrivages !\",\n    \"are_purchases_final_sale\": \"Certains achats sont-ils des ventes fermes ?\",\n    \"care_instructions\": \"Instructions d'entretien\",\n    \"cart\": \"Panier\",\n    \"discover_collection\": \"Découvrir la collection\",\n    \"fit\": \"coupe\",\n    \"how_much_for_shipping\": \"Quels sont les frais d'expédition ?\",\n    \"learn_more\": \"En savoir plus\",\n    \"manufacturing\": \"Fabrication\",\n    \"materials\": \"Matériaux\",\n    \"return_policy\": \"Politique de retour\",\n    \"shipping\": \"Expédition\",\n    \"shop_now_button_label\": \"Acheter maintenant\",\n    \"sign_up_button_label\": \"S'inscrire\",\n    \"submit_button_label\": \"Envoyer\",\n    \"up_the_ante\": \"Mettre\\nla\\nbarre plus haut\",\n    \"view_all_button_label\": \"Tout voir\",\n    \"what_is_return_policy\": \"Quelle est la politique de retour ?\",\n    \"when_will_order_arrive\": \"Quand recevrai-je ma commande ?\",\n    \"where_are_products_made\": \"Où sont fabriqués vos produits ?\",\n    \"trending_now\": \"Tendances actuelles\",\n    \"shop_the_look\": \"Acheter le style complet\",\n    \"bestsellers\": \"Meilleures ventes\",\n    \"featured_collection\": \"Collection en vedette\",\n    \"new_arrivals\": \"Nouveautés\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Le carrousel est toujours utilisé sur mobile\",\n    \"video_alt_text\": \"Décrivez la vidéo pour les utilisateurs de technologies d’assistance\",\n    \"video_autoplay\": \"Les vidéos seront mises en sourdine par défaut\",\n    \"video_external\": \"Utilisez une URL YouTube ou Vimeo\",\n    \"carousel_hover_behavior_not_supported\": \"Le survol « Carrousel » n’est pas pris en charge lorsque le type « Carrousel » est sélectionné au niveau de la section\",\n    \"checkout_buttons\": \"Permet aux acheteurs de payer plus rapidement et peut améliorer la conversion. [En savoir plus](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Titre personnalisé\",\n    \"edit_presets_in_theme_settings\": \"Modifier les préréglages dans les [paramètres du thème](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Personnalisez les filtres avec l’[application Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"La mise en page en grille est utilisée pour les appareils mobiles\",\n    \"manage_countries_regions\": \"[Gérer les pays/régions](/admin/settings/markets)\",\n    \"manage_languages\": \"[Gérer les langues](/admin/settings/languages)\",\n    \"transparent_background\": \"Vérifiez la lisibilité de chaque modèle où un arrière-plan transparent est appliqué\",\n    \"logo_font\": \"S’applique uniquement lorsqu’aucun logo n’est sélectionné\",\n    \"aspect_ratio_adjusted\": \"Ajusté dans certaines mises en page\",\n    \"custom_liquid\": \"Ajoutez des extraits d’application ou d’autres codes pour créer des personnalisations avancées. [En savoir plus](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Utilisé pour les filtres appliqués, les codes de réduction et les suggestions de recherche\",\n    \"applies_on_image_only\": \"S’applique uniquement aux images\",\n    \"hover_effects\": \"S’applique aux cartes de produit et de collection\",\n    \"hide_logo_on_home_page_help\": \"Le logo restera visible lorsque l’en-tête fixe est actif\",\n    \"media_type_info\": \"Les fonctionnalités sont renseignées à partir des liens de votre menu\",\n    \"logo_height\": \"Affecte uniquement le logo de l’en-tête\",\n    \"actions_display_style\": \"Les icônes sont toujours utilisées sur mobile\"\n  },\n  \"categories\": {\n    \"basic\": \"De base\",\n    \"collection\": \"Collection\",\n    \"collection_list\": \"Liste de collections\",\n    \"footer\": \"Pied de page\",\n    \"forms\": \"Formulaires\",\n    \"header\": \"En-tête\",\n    \"layout\": \"Mise en page\",\n    \"links\": \"Liens\",\n    \"product\": \"Produit\",\n    \"product_list\": \"Collection en vedette\",\n    \"banners\": \"Bannières\",\n    \"collections\": \"Collections\",\n    \"custom\": \"Personnalisé\",\n    \"decorative\": \"Décoratif\",\n    \"products\": \"Produits\",\n    \"other_sections\": \"Autre\",\n    \"storytelling\": \"Narration\",\n    \"text\": \"Texte\"\n  }\n}\n"
  },
  {
    "path": "locales/hr.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Učitaj videozapis: {{ description }}\",\n    \"sold_out\": \"Rasprodano\",\n    \"email_signup\": {\n      \"label\": \"Adresa e-pošte\",\n      \"placeholder\": \"Adresa e-pošte\",\n      \"success\": \"Hvala što ste se pretplatili!\"\n    },\n    \"filter\": \"Filtriraj\",\n    \"payment_methods\": \"Načini plaćanja\",\n    \"contact_form\": {\n      \"name\": \"Ime\",\n      \"email\": \"Adresa e-pošte\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Komentar\",\n      \"post_success\": \"Hvala vam na javljanju. Odgovorit ćemo vam u najkraćem mogućem roku.\",\n      \"error_heading\": \"Prilagodite sljedeće:\"\n    },\n    \"slider_label\": \"Kliznik\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Reproduciraj 3D model\",\n    \"play_video\": \"Reproduciraj videozapis\",\n    \"unit_price\": \"Jedinična cijena\",\n    \"country_results_count\": \"Broj rezultata: {{ count }}\",\n    \"slideshow_pause\": \"Pauziraj prezentaciju\",\n    \"slideshow_play\": \"Reproduciraj prezentaciju\",\n    \"remove_item\": \"Ukloni {{ title}}\",\n    \"skip_to_text\": \"Preskoči na sadržaj\",\n    \"skip_to_product_info\": \"Preskoči do informacija o proizvodu\",\n    \"skip_to_results_list\": \"Preskoči na popis rezultata\",\n    \"new_window\": \"Otvara se u novom prozoru.\",\n    \"slideshow_next\": \"Sljedeći slajd\",\n    \"slideshow_previous\": \"Prethodni slajd\",\n    \"close_dialog\": \"Zatvori dijaloški okvir\",\n    \"reset_search\": \"Ponovno postavi pretragu\",\n    \"search_results_count\": \"Broj rezultata pretraživanja pronađenih za „{{ query }}”: {{ count }}\",\n    \"search_results_no_results\": \"Nema rezultata za „{{ query }}”\",\n    \"filters\": \"Filtri\",\n    \"filter_count\": {\n      \"one\": \"Primijenjen je {{ count }} filtar\",\n      \"other\": \"Primijenjen je sljedeći broj filtara: {{ count }}\",\n      \"few\": \"Primijenjen je sljedeći broj filtara: {{ count }}\"\n    },\n    \"account\": \"Račun\",\n    \"cart\": \"Košarica\",\n    \"cart_count\": \"Ukupan broj stavki u košarici\",\n    \"menu\": \"Izbornik\",\n    \"country_region\": \"Država/regija\",\n    \"slide_status\": \"Slajd {{ index }} od {{ length }}\",\n    \"scroll_to\": \"Idi na {{ title }}\",\n    \"loading_product_recommendations\": \"Učitavanje preporuka proizvoda\",\n    \"discount\": \"Primijeni kod za popust\",\n    \"discount_applied\": \"Primijenjeni kod za popust: {{ code }}\",\n    \"inventory_status\": \"Status zaliha\",\n    \"pause_video\": \"Pauziraj videozapis\",\n    \"localization_region_and_language\": \"Izbornik regije i jezika\",\n    \"find_country\": \"Pronađi državu\",\n    \"decrease_quantity\": \"Smanji količinu\",\n    \"increase_quantity\": \"Povećaj količinu\",\n    \"quantity\": \"Količina\",\n    \"rating\": \"Ocjena ovog proizvoda je {{ rating }} od 5\",\n    \"nested_product\": \"{{ product_title }} za {{ parent_title }}\",\n    \"discount_menu\": \"Kodovi za popust\",\n    \"remove\": \"Ukloni\",\n    \"view_pricing_info\": \"Prikaži informacije o cijeni\",\n    \"open_hotspot\": \"Otvori hotspot\",\n    \"slideshow\": \"Prezentacija\",\n    \"header_navigation_label\": \"Primarna\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Dodaj u košaricu\",\n    \"clear_all\": \"Očisti sve\",\n    \"remove\": \"Ukloni\",\n    \"view_in_your_space\": \"Pogledajte u svojem prostoru\",\n    \"show_filters\": \"Filtriraj\",\n    \"clear\": \"Očisti\",\n    \"continue_shopping\": \"Nastavi s kupovinom\",\n    \"log_in_html\": \"Imate li račun? <a href=\\\"{{ link }}\\\">Prijavite se</a> za brži završetak kupovine.\",\n    \"see_items\": {\n      \"one\": \"Pogledaj sljedeći broj artikala: {{ count }}\",\n      \"other\": \"Pogledaj sljedeći broj artikala: {{ count }}\",\n      \"few\": \"Pogledaj sljedeći broj artikala: {{ count }}\"\n    },\n    \"view_all\": \"Prikaži sve\",\n    \"add\": \"Dodaj\",\n    \"choose\": \"Odaberi\",\n    \"added\": \"Dodano\",\n    \"show_less\": \"Prikaži manje\",\n    \"show_more\": \"Prikaži više\",\n    \"close\": \"Zatvori\",\n    \"more\": \"Više\",\n    \"zoom\": \"Uvećaj\",\n    \"close_dialog\": \"Zatvori dijaloški okvir\",\n    \"reset\": \"Resetiraj\",\n    \"back\": \"Natrag\",\n    \"log_in\": \"Prijava\",\n    \"log_out\": \"Odjava\",\n    \"remove_discount\": \"Ukloni popust {{ code }}\",\n    \"enter_using_password\": \"Uđite pomoću lozinke\",\n    \"submit\": \"Pošalji\",\n    \"enter_password\": \"Unesite lozinku\",\n    \"view_store_information\": \"Prikaži informacije o trgovini\",\n    \"apply\": \"Primijeni\",\n    \"sign_in_options\": \"Druge mogućnosti prijave\",\n    \"sign_up\": \"Registrirajte se\",\n    \"open_image_in_full_screen\": \"Otvori sliku preko cijelog zaslona\",\n    \"sort\": \"Razvrstaj\",\n    \"show_all_options\": \"Prikaži sve opcije\",\n    \"open\": \"Otvori\"\n  },\n  \"content\": {\n    \"reviews\": \"recenzije\",\n    \"no_results_found\": \"Nema pronađenih rezultata\",\n    \"language\": \"Jezik\",\n    \"localization_region_and_language\": \"Regija i jezik\",\n    \"cart_total\": \"Ukupni iznos košarice\",\n    \"your_cart_is_empty\": \"Vaša je košarica prazna\",\n    \"product_image\": \"Slika proizvoda\",\n    \"product_information\": \"Informacije o proizvodu\",\n    \"quantity\": \"Količina\",\n    \"product_total\": \"Proizvod ukupno\",\n    \"cart_estimated_total\": \"Procijenjen ukupni iznos\",\n    \"seller_note\": \"Posebne upute\",\n    \"cart_subtotal\": \"Podzbroj\",\n    \"discounts\": \"Popusti\",\n    \"discount\": \"Popust\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Carina i porezi su uključeni. Popusti i <a href=\\\"{{ link }}\\\">poštarina</a> obračunavaju se prilikom plaćanja.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Carina i porezi su uključeni. Popusti i poštarina obračunavaju se prilikom plaćanja.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Porezi su uključeni. Popusti i <a href=\\\"{{ link }}\\\">poštarina</a> obračunavaju se prilikom plaćanja.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Porezi su uključeni. Popusti i poštarina obračunavaju se prilikom plaćanja.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Carina je uključena. Porezi, popusti i <a href=\\\"{{ link }}\\\">poštarina</a> obračunavaju se prilikom plaćanja.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Carina je uključena. Porezi, popusti i poštarina obračunavaju se prilikom plaćanja.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Porezi, popusti i <a href=\\\"{{ link }}\\\">poštarina</a> obračunavaju se prilikom plaćanja.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Porezi, popusti i poštarina obračunavaju se prilikom plaćanja.\",\n    \"price\": \"Cijena\",\n    \"price_regular\": \"Redovna cijena\",\n    \"price_compare_at\": \"Usporedba cijena\",\n    \"price_sale\": \"Prodajna cijena\",\n    \"checkout\": \"Plaćanje\",\n    \"cart_title\": \"Košarica\",\n    \"duties_and_taxes_included\": \"Carina i porezi su uključeni.\",\n    \"duties_included\": \"Carina je uključena.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Poštarina</a> se obračunava prilikom plaćanja.\",\n    \"taxes_included\": \"Porezi su uključeni.\",\n    \"product_badge_sold_out\": \"Rasprodano\",\n    \"product_badge_sale\": \"Sniženje\",\n    \"search_input_label\": \"Traži\",\n    \"search_input_placeholder\": \"Pretraživanje\",\n    \"search_results\": \"Rezultati pretraživanja\",\n    \"search_results_label\": \"Rezultati pretraživanja\",\n    \"search_results_no_results\": \"Nema rezultata za „{{ terms }}”. Pokušajte izvršiti drugo pretraživanje.\",\n    \"search_results_resource_articles\": \"Objava na blogu\",\n    \"search_results_resource_collections\": \"Kolekcije\",\n    \"search_results_resource_pages\": \"Stranice\",\n    \"search_results_resource_products\": \"Proizvodi\",\n    \"search_results_resource_queries\": \"Prijedlozi pretraživanja\",\n    \"search_results_view_all\": \"Prikaži sve\",\n    \"search_results_view_all_button\": \"Prikaži sve\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} proizvod\",\n      \"other\": \"Broj proizvoda: {{ count }}\",\n      \"few\": \"Broj proizvoda: {{ count }}\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Zadano\",\n      \"grid_fieldset\": \"Grid sa stupcima\",\n      \"single_item\": \"Jedan\",\n      \"zoom_out\": \"Smanji\"\n    },\n    \"recently_viewed_products\": \"Nedavno pregledano\",\n    \"unavailable\": \"Nedostupno\",\n    \"collection_placeholder\": \"Naziv kolekcije\",\n    \"product_card_placeholder\": \"Naziv proizvoda\",\n    \"product_count\": \"Broj proizvoda\",\n    \"item_count\": {\n      \"one\": \"{{ count }} artikl\",\n      \"other\": \"Broj artikala: {{ count }}\",\n      \"few\": \"Broj artikala: {{ count }}\"\n    },\n    \"errors\": \"Pogreške\",\n    \"search\": \"Pretraživanje\",\n    \"search_results_no_results_check_spelling\": \"Nema rezultata za „{{ terms }}”. Provjerite pravopis ili upotrijebite drugu riječ ili izraz.\",\n    \"featured_products\": \"Istaknuti proizvodi\",\n    \"no_products_found\": \"Nije pronađen nijedan proizvod.\",\n    \"price_from\": \"Od {{ price }}\",\n    \"use_fewer_filters_html\": \"Pokušaje upotrijebiti manje filtara ili <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">očistite sve filtere</a>.\",\n    \"filters\": \"Filtri\",\n    \"price_filter_html\": \"Najveća cijena iznosi {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Pročitajte više...\",\n    \"account_title\": \"Račun\",\n    \"account_title_personalized\": \"Pozdrav, {{ first_name }}\",\n    \"account_orders\": \"Narudžbe\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Kod za popust\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Carina i porezi su uključeni. Poštarina se obračunava prilikom plaćanja.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Carina i porezi su uključeni. Poštarina se obračunava prilikom plaćanja.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Carina je uključena. Poštarina se obračunava prilikom plaćanja.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Carina je uključena. Poštarina se obračunava prilikom plaćanja.\",\n    \"pickup_available_at_html\": \"Preuzimanje je dostupno na lokaciji <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Preuzimanje je dostupno, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Preuzimanje trenutačno nije dostupno\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Porezi i <a href=\\\"{{ link }}\\\">troškovi dostave</a> obračunavaju se prilikom završetka kupovine.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Porezi i poštarina obračunavaju se prilikom plaćanja.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Porezi su uključeni. Poštarina se obračunava prilikom plaćanja.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Porezi su uključeni. Poštarina se obračunava prilikom plaćanja.\",\n    \"wrong_password\": \"Pogrešna lozinka\",\n    \"view_more_details\": \"Prikaži više pojedinosti\",\n    \"page_placeholder_title\": \"Naslov stranice\",\n    \"page_placeholder_content\": \"Odaberite stranicu za prikaz sadržaja.\",\n    \"placeholder_image\": \"Slika kao rezervirano mjesto\",\n    \"inventory_low_stock\": \"Preostalo malo komada\",\n    \"inventory_in_stock\": \"Na zalihama\",\n    \"inventory_out_of_stock\": \"Nema na zalihama\",\n    \"shipping_policy\": \"Poštarina se obračunava prilikom plaćanja.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"preostalo: {{ count }}\",\n      \"other\": \"preostalo: {{ count }}\",\n      \"few\": \"preostalo: {{ count }}\"\n    },\n    \"discount_code_error\": \"Kod za popust se ne može primijeniti na Vašu košaricu\",\n    \"shipping_discount_error\": \"Popusti na dostavu prikazuju se na blagajni nakon dodavanja adrese\",\n    \"powered_by\": \"Ova trgovina koristi sustav\",\n    \"store_owner_link_html\": \"Jeste li vlasnik/vlasnica trgovine? <a href=\\\"{{ link }}\\\">Prijavite se ovdje</a>\",\n    \"recipient_form_send_to\": \"Pošalji na\",\n    \"recipient_form_email_label\": \"E-adresa primatelja\",\n    \"recipient_form_email_label_my_email\": \"Moju e-adresu\",\n    \"recipient_form_email_address\": \"E-adresu primatelja\",\n    \"recipient_form_name_label\": \"Ime primatelja (nije obavezno)\",\n    \"recipient_form_message\": \"Poruka (nije obavezno)\",\n    \"recipient_form_characters_used\": \"Upotrijebljeno znakova: {{ used_chars }}/{{ max_chars }}\",\n    \"recipient_form_send_on\": \"GGGG-MM-DD\",\n    \"recipient_form_send_on_label\": \"Datum slanja (nije obavezno)\",\n    \"recipient_form_fields_visible\": \"Polja obrasca primatelja sada su vidljiva\",\n    \"recipient_form_fields_hidden\": \"Polja obrasca primatelja sada su skrivena\",\n    \"recipient_form_error\": \"Došlo je do pogreške u slanju obrasca\",\n    \"product_custom_property_character_count\": \"Upotrijebljeno znakova: {{ used_chars }}/{{ max_chars }}\",\n    \"terms_and_policies\": \"Uvjeti i pravila\",\n    \"pagination\": {\n      \"nav_label\": \"Kretanje po stranicama\",\n      \"previous\": \"Prethodna\",\n      \"next\": \"Sljedeća\",\n      \"page\": \"Stranica {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Dostupan je popust na količinu\",\n    \"volume_pricing\": \"Popust na količinu\",\n    \"at_price_each\": \"po cijeni od {{ price }}/kom.\",\n    \"each\": \"{{ price }}/kom.\",\n    \"each_abbreviation\": \"kom.\",\n    \"price_at\": \"po cijeni od\",\n    \"price_range\": \"Raspon cijena\",\n    \"item_count_cutoff\": \"Više od sljedećeg broja artikala: {{ count }}\",\n    \"cancel\": \"Odustani\",\n    \"product_subtotal\": \"Podzbroj proizvoda\",\n    \"quantity_per_item\": \"/kom.\",\n    \"remove_all\": \"Ukloni sve\",\n    \"remove_all_items_confirmation\": \"Želite li ukloniti sve artikle ({{ count }}) iz košarice?\",\n    \"remove_one_item_confirmation\": \"Želite li ukloniti 1 artikl iz košarice?\",\n    \"total_items\": \"Ukupno artikala\",\n    \"variant\": \"Varijanta\",\n    \"variant_total\": \"Ukupno za varijantu\",\n    \"view_cart\": \"Prikaži košaricu\",\n    \"your_cart\": \"Vaša košarica\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 artikl dodan u košaricu\",\n      \"other\": \"Artikala dodano u košaricu: {{ count }}\",\n      \"few\": \"Artikala dodano u košaricu: {{ count }}\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Upotrijebite kod poklon-kartice na internetu ili QR kod u trgovini\",\n      \"title\": \"Poklanjamo vam darovnu karticu u vrijednosti od {{ value }} za trgovinu {{ shop }}!\",\n      \"subtext\": \"Vaša poklon-kartica\",\n      \"shop_link\": \"Posjeti internetsku trgovinu\",\n      \"add_to_apple_wallet\": \"Dodaj u Apple Wallet\",\n      \"qr_image_alt\": \"QR kod – skenirajte ga kako biste iskoristili poklon-karticu\",\n      \"copy_code\": \"Kopiraj kod poklon-kartice\",\n      \"expiration_date\": \"Istječe {{ expires_on }}\",\n      \"copy_code_success\": \"Kod je uspješno kopiran\",\n      \"expired\": \"Isteklo\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Lozinka\",\n    \"search\": \"Pretraživanje\",\n    \"product_title\": \"Naziv proizvoda\",\n    \"collection_title\": \"Naziv kolekcije\",\n    \"blog_posts\": \"Blogovi\",\n    \"blog_post_title\": \"Naslov\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Izvadak sadržaja vašeg bloga\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Dodaj u košaricu\",\n      \"added_to_cart\": \"Dodano u košaricu\",\n      \"adding_to_cart\": \"Dodavanje...\",\n      \"add_to_cart_error\": \"Pogreška prilikom dodavanja u košaricu\",\n      \"sold_out\": \"Rasprodano\",\n      \"unavailable\": \"Nedostupno\",\n      \"quantity_error_max\": \"Maksimum za ovaj artikl iznosi {{ maximum }}\",\n      \"quantity\": \"Količina\",\n      \"quantity_increments\": \"Povećanje od {{ increment }}\",\n      \"quantity_minimum\": \"Minimalno {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimalno {{ maximum }}\",\n      \"in_cart\": \"u košarici\",\n      \"default_title\": \"Zadani naziv\",\n      \"sticky_add_to_cart\": \"Traka za brzo dodavanje u košaricu\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"do\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentar\",\n        \"other\": \"{{ count }} komentara\",\n        \"few\": \"{{ count }} komentara\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Adresa e-pošte\",\n      \"error\": \"Objava komentara nije uspjela, obratite se na sljedeće:\",\n      \"heading\": \"Ostavite komentar\",\n      \"message\": \"Poruka\",\n      \"moderated\": \"Napominjemo da komentari moraju biti odobreni prije objave.\",\n      \"name\": \"Ime\",\n      \"post\": \"Objavi komentar\",\n      \"success_moderated\": \"Komentar je objavljen, čeka moderiranje\",\n      \"success\": \"Komentar objavljen\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/hu.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Videó betöltése: {{ description }}\",\n    \"sold_out\": \"Elfogyott\",\n    \"email_signup\": {\n      \"label\": \"E-mail-cím\",\n      \"placeholder\": \"E-mail-cím\",\n      \"success\": \"Köszönjük feliratkozást!\"\n    },\n    \"filter\": \"Szűrés\",\n    \"payment_methods\": \"Fizetési módok\",\n    \"contact_form\": {\n      \"name\": \"Név\",\n      \"email\": \"E-mail-cím\",\n      \"phone\": \"Telefonszám\",\n      \"comment\": \"Hozzászólás\",\n      \"post_success\": \"Köszönjük, hogy írtál nekünk. A lehető legrövidebb időn belül válaszolni fogunk.\",\n      \"error_heading\": \"Kérjük, helyesbítsd a következőket:\"\n    },\n    \"slider_label\": \"Csúszka\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3D-modell lejátszása\",\n    \"play_video\": \"Videó lejátszása\",\n    \"unit_price\": \"Egységár\",\n    \"country_results_count\": \"{{ count }} találat\",\n    \"slideshow_pause\": \"Diavetítés megállítása\",\n    \"slideshow_play\": \"Diavetítés indítása\",\n    \"remove_item\": \"{{ title}} eltávolítása\",\n    \"skip_to_text\": \"Ugrás a tartalomhoz\",\n    \"skip_to_product_info\": \"Kihagyás, és ugrás a termékadatokra\",\n    \"skip_to_results_list\": \"Ugrás a találati listára\",\n    \"new_window\": \"Új ablakban nyílik meg.\",\n    \"slideshow_next\": \"Következő dia\",\n    \"slideshow_previous\": \"Előző dia\",\n    \"close_dialog\": \"Párbeszédablak bezárása\",\n    \"reset_search\": \"Keresés alaphelyzetbe állítása\",\n    \"search_results_count\": \"{{ count }} találat a(z) „{{ query }}” kifejezésre\",\n    \"search_results_no_results\": \"Nincs találat a(z) „{{ query }}” kifejezésre\",\n    \"filters\": \"Szűrők\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} szűrő alkalmazva\",\n      \"other\": \"{{ count }} szűrő alkalmazva\"\n    },\n    \"account\": \"Fiók\",\n    \"cart\": \"Kosár\",\n    \"cart_count\": \"Összes termék a kosárban\",\n    \"menu\": \"Menü\",\n    \"country_region\": \"Ország/régió\",\n    \"slide_status\": \"{{ index }}./{{ length }} dia\",\n    \"scroll_to\": \"Görgess ide: {{ title }}\",\n    \"loading_product_recommendations\": \"Termékajánlások betöltése\",\n    \"discount\": \"Kedvezménykód beváltása\",\n    \"discount_applied\": \"Beváltott kedvezménykód: {{ code }}\",\n    \"inventory_status\": \"Készlet állapota\",\n    \"pause_video\": \"Videó szüneteltetése\",\n    \"find_country\": \"Ország keresése\",\n    \"localization_region_and_language\": \"Régió- és nyelvválasztó\",\n    \"decrease_quantity\": \"Mennyiség csökkentése\",\n    \"increase_quantity\": \"Mennyiség növelése\",\n    \"quantity\": \"Mennyiség\",\n    \"rating\": \"A termék értékelése: {{ rating }} / 5\",\n    \"nested_product\": \"{{ product_title }} – {{ parent_title }}\",\n    \"discount_menu\": \"Kedvezménykódok\",\n    \"remove\": \"Eltávolítás\",\n    \"view_pricing_info\": \"Árképzési adatok megtekintése\",\n    \"open_hotspot\": \"Hotspot megnyitása\",\n    \"slideshow\": \"Diavetítés\",\n    \"header_navigation_label\": \"Elsődleges\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Hozzáadás a kosárhoz\",\n    \"clear_all\": \"Az összes törléses\",\n    \"remove\": \"Eltávolítás\",\n    \"view_in_your_space\": \"Megtekintés a saját környezetben\",\n    \"show_filters\": \"Szűrés\",\n    \"clear\": \"Törlés\",\n    \"continue_shopping\": \"Vásárlás folytatása\",\n    \"log_in_html\": \"Már van fiókod? <a href=\\\"{{ link }}\\\">Jelentkezz be</a> a gyorsabb fizetéshez.\",\n    \"see_items\": {\n      \"one\": \"{{ count }} termék megtekintése\",\n      \"other\": \"{{ count }} termék megtekintése\"\n    },\n    \"view_all\": \"Az összes megtekintése\",\n    \"add\": \"Hozzáadás\",\n    \"choose\": \"Kiválasztás\",\n    \"added\": \"Hozzáadva\",\n    \"show_less\": \"Kevesebb megjelenítése\",\n    \"show_more\": \"Több megjelenítése\",\n    \"close\": \"Bezárás\",\n    \"more\": \"Egyebek\",\n    \"zoom\": \"Nagyítás\",\n    \"close_dialog\": \"Párbeszédablak bezárása\",\n    \"reset\": \"Alaphelyzetbe állítás\",\n    \"enter_using_password\": \"Belépés jelszóval\",\n    \"submit\": \"Beküldés\",\n    \"enter_password\": \"Jelszó megadása\",\n    \"back\": \"Vissza\",\n    \"log_in\": \"Bejelentkezés\",\n    \"log_out\": \"Kijelentkezés\",\n    \"remove_discount\": \"Kedvezménykód ({{ code }}) eltávolítása\",\n    \"view_store_information\": \"Webáruház adatai\",\n    \"apply\": \"Beváltás\",\n    \"sign_in_options\": \"További bejelentkezési lehetőségek\",\n    \"sign_up\": \"Regisztráció\",\n    \"open_image_in_full_screen\": \"Kép megnyitása teljes képernyőn\",\n    \"sort\": \"Rendezés\",\n    \"show_all_options\": \"Összes lehetőség megjelenítése\",\n    \"open\": \"Megnyitás\"\n  },\n  \"content\": {\n    \"reviews\": \"összegzés\",\n    \"no_results_found\": \"Nincs találat\",\n    \"language\": \"Nyelv\",\n    \"localization_region_and_language\": \"Régió és nyelv\",\n    \"cart_total\": \"Kosár végösszege\",\n    \"your_cart_is_empty\": \"A kosarad üres\",\n    \"product_image\": \"Termékkép\",\n    \"product_information\": \"Termékadatok\",\n    \"quantity\": \"Mennyiség\",\n    \"product_total\": \"Termék végösszege\",\n    \"cart_estimated_total\": \"Becsült végösszeg\",\n    \"seller_note\": \"Különleges utasítások\",\n    \"cart_subtotal\": \"Részösszeg\",\n    \"discounts\": \"Kedvezmények\",\n    \"discount\": \"Kedvezmény\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Tartalmazza a vámokat és az adókat. A kedvezmények és a <a href=\\\"{{ link }}\\\">szállítási költség</a> kiszámítása a pénztárban történik.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Tartalmazza a vámokat és az adókat. A kedvezmények és a szállítási költség kiszámítása a pénztárban történik.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Tartalmazza az adókat. A kedvezmények és a <a href=\\\"{{ link }}\\\">szállítási költség</a> kiszámítása a pénztárban történik.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Tartalmazza az adókat. A kedvezmények és a szállítási költség kiszámítása a pénztárban történik.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Tartalmazza a vámokat. Az adók, a kedvezmények és a <a href=\\\"{{ link }}\\\">szállítási költség</a> kiszámítása a pénztárban történik.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Tartalmazza a vámokat. Az adók, a kedvezmények és a szállítási költség kiszámítása a pénztárban történik.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Az adók, a kedvezmények és a <a href=\\\"{{ link }}\\\">szállítási költség</a> kiszámítása a pénztárban történik..\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Az adók, a kedvezmények és a szállítási költség kiszámítása a pénztárban történik.\",\n    \"cart_title\": \"Kosár\",\n    \"price\": \"Ár\",\n    \"price_regular\": \"Normál ár\",\n    \"price_compare_at\": \"Összehasonlítás ár alapján\",\n    \"price_sale\": \"Akciós ár\",\n    \"checkout\": \"Fizetés\",\n    \"duties_and_taxes_included\": \"Tartalmazza a vámokat és az adókat.\",\n    \"duties_included\": \"Tartalmazza a vámokat.\",\n    \"shipping_policy_html\": \"A fizetéskor kiszámított <a href=\\\"{{ link }}\\\">szállítási költség</a>.\",\n    \"taxes_included\": \"Tartalmazza az adókat.\",\n    \"product_badge_sold_out\": \"Elfogyott\",\n    \"product_badge_sale\": \"Akciós\",\n    \"grid_view\": {\n      \"default_view\": \"Alapértelmezett\",\n      \"grid_fieldset\": \"Oszloprács\",\n      \"single_item\": \"Önálló\",\n      \"zoom_out\": \"Felnagyítás\"\n    },\n    \"search_input_label\": \"Keresés\",\n    \"search_input_placeholder\": \"Keresés\",\n    \"search_results\": \"Találatok\",\n    \"search_results_label\": \"Találatok\",\n    \"search_results_no_results\": \"Nincs találat erre: „{{ terms }}”. Próbálj meg másra rákeresni.\",\n    \"search_results_resource_articles\": \"Blogbejegyzések\",\n    \"search_results_resource_collections\": \"Kollekciók\",\n    \"search_results_resource_pages\": \"Oldal\",\n    \"search_results_resource_products\": \"Termékek\",\n    \"search_results_resource_queries\": \"Javaslatok keresése\",\n    \"search_results_view_all\": \"Összes megtekintése\",\n    \"search_results_view_all_button\": \"Összes megtekintése\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} termék\",\n      \"other\": \"{{ count }} termék\"\n    },\n    \"recently_viewed_products\": \"Nemrégiben megtekintett\",\n    \"unavailable\": \"Nem áll rendelkezésre\",\n    \"collection_placeholder\": \"Kollekció címe\",\n    \"product_card_placeholder\": \"Termék címe\",\n    \"product_count\": \"Termékek száma\",\n    \"item_count\": {\n      \"one\": \"{{ count }} termék\",\n      \"other\": \"{{ count }} termék\"\n    },\n    \"errors\": \"Hibák\",\n    \"price_from\": \"Indulóár: {{ price }}\",\n    \"featured_products\": \"Kiemelt termékek\",\n    \"no_products_found\": \"Nincs találat.\",\n    \"use_fewer_filters_html\": \"Próbálj meg kevesebb szűrőt használni, vagy <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">töröld az összes szűrőt</a>.\",\n    \"search\": \"Keresés\",\n    \"search_results_no_results_check_spelling\": \"Nincs találat erre: „{{ terms }}”. Ellenőrizd a helyesírást, vagy írj be egy másik szót vagy kifejezést.\",\n    \"filters\": \"Szűrők\",\n    \"price_filter_html\": \"A legmagasabb ár {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Bővebben…\",\n    \"wrong_password\": \"Hibás jelszó\",\n    \"account_title\": \"Fiók\",\n    \"account_title_personalized\": \"Kedves {{ first_name }}!\",\n    \"account_orders\": \"Rendelések\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Kedvezménykód\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Tartalmazza a vámokat és az adókat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Tartalmazza a vámokat és az adókat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Tartalmazza a vámokat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Tartalmazza a vámokat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"pickup_available_at_html\": \"Személyesen átvehető itt: <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Személyesen átvehető ekkor: {{ pickup_time }}\",\n    \"pickup_not_available\": \"Személyes átvétel jelenleg nem érhető el\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Az adókat és a <a href=\\\"{{ link }}\\\">szállítási díjat</a> a pénztárnál számítjuk ki.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Az adókat és a szállítási díjat a pénztárnál számítjuk ki.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Tartalmazza az adókat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Tartalmazza az adókat. A szállítási díjat a pénztárnál számítjuk ki.\",\n    \"view_more_details\": \"További részletek megtekintése\",\n    \"inventory_low_stock\": \"Alacsony készlet\",\n    \"inventory_in_stock\": \"Készleten\",\n    \"inventory_out_of_stock\": \"Nincs készleten\",\n    \"page_placeholder_title\": \"Oldal címe\",\n    \"page_placeholder_content\": \"Jelölj ki egy oldalt a tartalma megjelenítéséhez.\",\n    \"placeholder_image\": \"Helyőrző kép\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Elérhető összeg: {{ count }}\",\n      \"other\": \"Elérhető összeg: {{ count }}\"\n    },\n    \"shipping_policy\": \"A fizetéskor kiszámított szállítási költség.\",\n    \"discount_code_error\": \"A kedvezménykód nem érvényesíthető a kosaradon\",\n    \"shipping_discount_error\": \"A szállítási kedvezmények a fizetéskor jelennek meg a cím megadását követően\",\n    \"powered_by\": \"A bolt szolgáltatója:\",\n    \"store_owner_link_html\": \"Te vagy az áruház tulajdonosa? <a href=\\\"{{ link }}\\\">Jelentkezz be itt</a>\",\n    \"recipient_form_send_to\": \"Címzett\",\n    \"recipient_form_email_label\": \"Címzett e-mail-címe\",\n    \"recipient_form_email_label_my_email\": \"Az e-mail-címem\",\n    \"recipient_form_email_address\": \"Címzett e-mail-címe\",\n    \"recipient_form_name_label\": \"Címzett neve (nem kötelező)\",\n    \"recipient_form_message\": \"Üzenet (nem kötelező)\",\n    \"recipient_form_characters_used\": \"{{ max_chars }} karakterből {{ used_chars }} felhasználva\",\n    \"recipient_form_send_on\": \"ÉÉÉÉ-HH-NN\",\n    \"recipient_form_send_on_label\": \"Küldés dátuma (nem kötelező)\",\n    \"recipient_form_fields_visible\": \"A kedvezményezettre vonatkozó űrlapmezők most láthatók\",\n    \"recipient_form_fields_hidden\": \"A kedvezményezettre vonatkozó űrlapmezők most el vannak rejtve\",\n    \"recipient_form_error\": \"Hiba történt az űrlap beküldése során\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} karakter felhasználva\",\n    \"terms_and_policies\": \"Feltételek és szabályzatok\",\n    \"pagination\": {\n      \"nav_label\": \"Lapozás\",\n      \"previous\": \"Előző\",\n      \"next\": \"Következő\",\n      \"page\": \"{{ page }}. oldal\"\n    },\n    \"volume_pricing_available\": \"Mennyiségi árképzés rendelkezésre áll\",\n    \"volume_pricing\": \"Mennyiség árképzés\",\n    \"at_price_each\": \"{{ price }}/db\",\n    \"each\": \"{{ price }}/db\",\n    \"each_abbreviation\": \"db\",\n    \"price_at\": \"–\",\n    \"price_range\": \"Árkategória\",\n    \"cancel\": \"Mégse\",\n    \"product_subtotal\": \"Termékek részösszege\",\n    \"quantity_per_item\": \"/db\",\n    \"remove_all\": \"Összes eltávolítása\",\n    \"remove_all_items_confirmation\": \"Eltávolítod mind a(z) {{ count }} tételt a kosárból?\",\n    \"remove_one_item_confirmation\": \"Eltávolítod ezt az 1 tételt a kosárból?\",\n    \"total_items\": \"Tétel összesen\",\n    \"variant\": \"Változat\",\n    \"variant_total\": \"Változat összesen\",\n    \"view_cart\": \"Kosár megtekintése\",\n    \"your_cart\": \"Kosár\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 tétel hozzáadva a kosárhoz\",\n      \"other\": \"{{ count }} tétel hozzáadva a kosárhoz\"\n    },\n    \"item_count_cutoff\": \"Több mint {{ count }} tétel\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Az ajándékkártya kódja online, a QR-kód pedig az üzletben használható fel\",\n      \"title\": \"Íme a(z) {{ shop }} üzletben levásárolható, {{ value }} értékű ajándékkártyád!\",\n      \"subtext\": \"Ajándékkártya\",\n      \"shop_link\": \"Webáruház megnyitása\",\n      \"add_to_apple_wallet\": \"Hozzáadás az Apple Wallethoz\",\n      \"qr_image_alt\": \"Ezt a QR-kódot beszkennelve beválthatod az ajándékkártyát.\",\n      \"copy_code\": \"Ajándékkártya kódjának másolása\",\n      \"expiration_date\": \"Lejárat dátuma: {{ expires_on }}\",\n      \"copy_code_success\": \"Sikeres volt a kód másolása\",\n      \"expired\": \"Lejárt\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} hozzászólás\",\n        \"other\": \"{{ count }} hozzászólás\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E‑mail-cím\",\n      \"error\": \"A hozzászólás közzététele nem sikerült, kérjük, ügyelj a következőkre:\",\n      \"heading\": \"Hozzászólás írása\",\n      \"message\": \"Üzenet\",\n      \"moderated\": \"Felhívjuk a figyelmedet, hogy közzététel előtt a hozzászólásokat jóvá kell hagyni.\",\n      \"name\": \"Név\",\n      \"post\": \"Hozzászólás elküldése\",\n      \"success_moderated\": \"Hozzászólás közzétéve, moderálásra vár\",\n      \"success\": \"Hozzászólás közzétéve\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"–\"\n  },\n  \"placeholders\": {\n    \"password\": \"Jelszó\",\n    \"search\": \"Keresés\",\n    \"product_title\": \"Termék megnevezése\",\n    \"collection_title\": \"Kollekció megnevezése\",\n    \"blog_posts\": \"Blogbejegyzések\",\n    \"blog_post_title\": \"Cím\",\n    \"blog_post_author\": \"Szerző\",\n    \"blog_post_date\": \"Dátum\",\n    \"blog_post_description\": \"Összefoglaló a blogbejegyzésed tartalmáról\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Hozzáadás a kosárhoz\",\n      \"adding_to_cart\": \"Hozzáadás…\",\n      \"added_to_cart\": \"Hozzáadva a kosárhoz\",\n      \"add_to_cart_error\": \"Nem tudtuk hozzáadni a terméket a kosárhoz\",\n      \"quantity_error_max\": \"A tétel maximális mennyisége {{ maximum }}\",\n      \"sold_out\": \"Elfogyott\",\n      \"unavailable\": \"Nincs készleten\",\n      \"quantity\": \"Mennyiség\",\n      \"quantity_increments\": \"Növekmény: {{ increment }}\",\n      \"quantity_minimum\": \"Minimum: {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum: {{ maximum }}\",\n      \"in_cart\": \"a kosárban\",\n      \"default_title\": \"Alapértelmezett cím\",\n      \"sticky_add_to_cart\": \"Gyors hozzáadás a kosárhoz sáv\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/id.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Muat video: {{ description }}\",\n    \"sold_out\": \"Habis\",\n    \"email_signup\": {\n      \"label\": \"Email\",\n      \"placeholder\": \"Alamat email\",\n      \"success\": \"Terima kasih sudah berlangganan!\"\n    },\n    \"filter\": \"Filter\",\n    \"payment_methods\": \"Metode pembayaran\",\n    \"contact_form\": {\n      \"name\": \"Nama\",\n      \"email\": \"Email\",\n      \"phone\": \"Telepon\",\n      \"comment\": \"Komentar\",\n      \"post_success\": \"Terima kasih sudah menghubungi kami. Kami akan segera menghubungi Anda.\",\n      \"error_heading\": \"Mohon sesuaikan:\"\n    },\n    \"slider_label\": \"Slider\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Putar model 3D\",\n    \"play_video\": \"Putar video\",\n    \"unit_price\": \"Harga satuan\",\n    \"country_results_count\": \"{{ count }} hasil\",\n    \"slideshow_pause\": \"Jeda slideshow\",\n    \"slideshow_play\": \"Putar slideshow\",\n    \"remove_item\": \"Hapus {{ title}}\",\n    \"skip_to_text\": \"Langsung ke konten\",\n    \"skip_to_product_info\": \"Langsung ke informasi produk\",\n    \"skip_to_results_list\": \"Langsung ke daftar hasil\",\n    \"new_window\": \"Membuka di jendela baru.\",\n    \"close_dialog\": \"Tutup dialog\",\n    \"reset_search\": \"Reset pencarian\",\n    \"search_results_count\": \"{{ count }} hasil pencarian ditemukan untuk \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Tidak ditemukan hasil untuk \\\"{{ query }}\\\"\",\n    \"slideshow_next\": \"Slide berikutnya\",\n    \"slideshow_previous\": \"Slide sebelumnya\",\n    \"filters\": \"Filter\",\n    \"account\": \"Akun\",\n    \"cart\": \"Keranjang\",\n    \"cart_count\": \"Total item di keranjang\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter diterapkan\",\n      \"other\": \"{{ count }} filter diterapkan\"\n    },\n    \"menu\": \"Menu\",\n    \"country_region\": \"Negara/Wilayah\",\n    \"slide_status\": \"Slide {{ index }} dari {{ length }}\",\n    \"scroll_to\": \"Gulir ke {{ title }}\",\n    \"loading_product_recommendations\": \"Memuat rekomendasi produk\",\n    \"discount\": \"Pakai kode diskon\",\n    \"discount_applied\": \"Kode diskon yang dipakai: {{ code }}\",\n    \"inventory_status\": \"Status Inventaris\",\n    \"pause_video\": \"Jeda video\",\n    \"find_country\": \"Temukan negara\",\n    \"localization_region_and_language\": \"Pemilih wilayah dan bahasa\",\n    \"decrease_quantity\": \"Kurangi jumlah\",\n    \"increase_quantity\": \"Tambah jumlah\",\n    \"quantity\": \"Jumlah\",\n    \"rating\": \"Peringkat produk ini adalah {{ rating }} dari 5\",\n    \"nested_product\": \"{{ product_title }} untuk {{ parent_title }}\",\n    \"discount_menu\": \"Kode Diskon\",\n    \"remove\": \"Hapus\",\n    \"view_pricing_info\": \"Lihat informasi harga\",\n    \"open_hotspot\": \"Buka hotspot\",\n    \"slideshow\": \"Tayangan slide\",\n    \"header_navigation_label\": \"Utama\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Tambahkan ke keranjang\",\n    \"clear_all\": \"Hapus semua\",\n    \"remove\": \"Hapus\",\n    \"view_in_your_space\": \"Lihat di lokasi Anda\",\n    \"show_filters\": \"Filter\",\n    \"clear\": \"Kosongkan\",\n    \"continue_shopping\": \"Lanjutkan belanja\",\n    \"log_in_html\": \"Sudah punya akun? <a href=\\\"{{ link }}\\\">Login</a> untuk checkout lebih cepat.\",\n    \"see_items\": {\n      \"one\": \"Lihat {{ count }} item\",\n      \"other\": \"Lihat {{ count }} item\"\n    },\n    \"view_all\": \"Lihat semua\",\n    \"add\": \"Tambah\",\n    \"choose\": \"Pilih\",\n    \"added\": \"Ditambahkan\",\n    \"show_less\": \"Sembunyikan lainnya\",\n    \"show_more\": \"Selengkapnya\",\n    \"close\": \"Tutup\",\n    \"more\": \"Selengkapnya\",\n    \"zoom\": \"Perbesar\",\n    \"close_dialog\": \"Tutup dialog\",\n    \"reset\": \"Reset\",\n    \"remove_discount\": \"Hapus diskon {{ code }}\",\n    \"enter_using_password\": \"Masuk dengan sandi\",\n    \"submit\": \"Kirim\",\n    \"enter_password\": \"Masukkan sandi\",\n    \"view_store_information\": \"Lihat informasi toko\",\n    \"back\": \"Kembali\",\n    \"log_in\": \"Masuk\",\n    \"log_out\": \"Logout\",\n    \"apply\": \"Pakai\",\n    \"sign_in_options\": \"Opsi masuk lainnya\",\n    \"open_image_in_full_screen\": \"Buka gambar dalam layar penuh\",\n    \"sign_up\": \"Daftar\",\n    \"sort\": \"Urutkan\",\n    \"show_all_options\": \"Tampilkan semua opsi\",\n    \"open\": \"Buka\"\n  },\n  \"content\": {\n    \"reviews\": \"ulasan\",\n    \"language\": \"Bahasa\",\n    \"localization_region_and_language\": \"Wilayah dan bahasa\",\n    \"no_results_found\": \"Hasil tidak ditemukan\",\n    \"cart_total\": \"Total keranjang\",\n    \"your_cart_is_empty\": \"Keranjang Anda kosong\",\n    \"product_image\": \"Gambar produk\",\n    \"product_information\": \"Informasi produk\",\n    \"quantity\": \"Jumlah\",\n    \"product_total\": \"Total produk\",\n    \"cart_estimated_total\": \"Estimasi total\",\n    \"seller_note\": \"Instruksi khusus\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Diskon\",\n    \"discount\": \"Diskon\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Termasuk bea cukai dan pajak. Diskon dan <a href=\\\"{{ link }}\\\">biaya pengiriman</a> dihitung saat checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Termasuk bea cukai dan pajak. Diskon dan biaya pengiriman dihitung saat checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Termasuk pajak. Diskon dan <a href=\\\"{{ link }}\\\">biaya pengiriman</a> dihitung saat checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Termasuk pajak. Diskon dan biaya pengiriman dihitung saat checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Termasuk bea cukai. Pajak, diskon, dan <a href=\\\"{{ link }}\\\">biaya pengiriman</a> dihitung saat checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Termasuk bea cukai. Pajak, diskon, dan biaya pengiriman dihitung saat checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Pajak, diskon, dan <a href=\\\"{{ link }}\\\">biaya pengiriman</a> dihitung saat checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Pajak, diskon, dan biaya pengiriman dihitung saat checkout.\",\n    \"checkout\": \"Check out\",\n    \"cart_title\": \"Keranjang\",\n    \"price\": \"Harga\",\n    \"price_regular\": \"Harga reguler\",\n    \"price_compare_at\": \"Bandingkan dengan harga\",\n    \"price_sale\": \"Harga obral\",\n    \"duties_and_taxes_included\": \"Termasuk bea cukai dan pajak.\",\n    \"duties_included\": \"Termasuk bea cukai.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Biaya pengiriman</a> dihitung saat checkout.\",\n    \"taxes_included\": \"Termasuk pajak.\",\n    \"product_badge_sold_out\": \"Habis\",\n    \"product_badge_sale\": \"Promo\",\n    \"search_input_label\": \"Cari\",\n    \"search_input_placeholder\": \"Cari\",\n    \"search_results\": \"Hasil pencarian\",\n    \"search_results_label\": \"Hasil pencarian\",\n    \"search_results_no_results\": \"Tidak ada hasil yang ditemukan untuk \\\"{{ terms }}\\\". Coba pencarian lain.\",\n    \"search_results_resource_articles\": \"Postingan blog\",\n    \"search_results_resource_collections\": \"Koleksi\",\n    \"search_results_resource_pages\": \"Halaman\",\n    \"search_results_resource_products\": \"Produk\",\n    \"search_results_resource_queries\": \"Saran pencarian\",\n    \"search_results_view_all\": \"Lihat semua\",\n    \"search_results_view_all_button\": \"Lihat semua\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produk\",\n      \"other\": \"{{ count }} produk\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Default\",\n      \"grid_fieldset\": \"Grid kolom\",\n      \"single_item\": \"Tunggal\",\n      \"zoom_out\": \"Perkecil\"\n    },\n    \"recently_viewed_products\": \"Baru saja dilihat\",\n    \"collection_placeholder\": \"Judul koleksi\",\n    \"product_card_placeholder\": \"Judul produk\",\n    \"unavailable\": \"Tidak tersedia\",\n    \"product_count\": \"Jumlah produk\",\n    \"item_count\": {\n      \"one\": \"{{ count }} item\",\n      \"other\": \"{{ count }} item\"\n    },\n    \"errors\": \"Kesalahan\",\n    \"price_from\": \"Mulai {{ price }}\",\n    \"search\": \"Cari\",\n    \"search_results_no_results_check_spelling\": \"Tidak ada hasil yang ditemukan untuk \\\"{{ terms }}\\\". Periksa ejaan atau gunakan kata atau frasa yang berbeda.\",\n    \"featured_products\": \"Produk unggulan\",\n    \"no_products_found\": \"Tidak ada produk yang ditemukan.\",\n    \"use_fewer_filters_html\": \"Coba kurangi filter, atau <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">hapus semua filter</a>.\",\n    \"filters\": \"Filter\",\n    \"price_filter_html\": \"Harga tertingginya adalah {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Baca selengkapnya...\",\n    \"discount_code\": \"Kode diskon\",\n    \"pickup_available_at_html\": \"Pengambilan dapat dilakukan di <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Pengambilan dapat dilakukan pada {{ pickup_time }}\",\n    \"pickup_not_available\": \"Pengambilan saat ini tidak tersedia\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"wrong_password\": \"Sandi salah\",\n    \"account_title\": \"Akun\",\n    \"account_title_personalized\": \"Hai {{ first_name }}\",\n    \"account_orders\": \"Pesanan\",\n    \"account_profile\": \"Profil\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Termasuk bea cukai dan pajak. Biaya pengiriman dihitung saat checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Termasuk bea cukai dan pajak. Biaya pengiriman dihitung saat checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Termasuk bea cukai. Biaya pengiriman dihitung saat checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Termasuk bea cukai. Biaya pengiriman dihitung saat checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Pajak dan <a href=\\\"{{ link }}\\\">biaya pengiriman</a> dihitung saat checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Pajak dan biaya pengiriman dihitung saat checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Termasuk pajak. Biaya pengiriman dihitung saat checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Termasuk pajak. Biaya pengiriman dihitung saat checkout.\",\n    \"view_more_details\": \"Lihat detail lebih lanjut\",\n    \"inventory_low_stock\": \"Stok sedikit\",\n    \"inventory_in_stock\": \"Tersedia\",\n    \"inventory_out_of_stock\": \"Stok habis\",\n    \"page_placeholder_title\": \"Judul halaman\",\n    \"page_placeholder_content\": \"Pilih halaman untuk menampilkan kontennya.\",\n    \"placeholder_image\": \"Gambar placeholder\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Tersisa {{ count }}\",\n      \"other\": \"Tersisa {{ count }}\"\n    },\n    \"discount_code_error\": \"Kode diskon tidak dapat diterapkan ke keranjang Anda\",\n    \"shipping_policy\": \"Biaya pengiriman dihitung saat checkout.\",\n    \"shipping_discount_error\": \"Diskon biaya pengiriman akan ditampilkan saat checkout setelah menambahkan alamat\",\n    \"powered_by\": \"Toko ini didukung oleh\",\n    \"store_owner_link_html\": \"Anda pemilik toko? <a href=\\\"{{ link }}\\\">Login di sini</a>\",\n    \"recipient_form_send_to\": \"Kirim ke\",\n    \"recipient_form_email_label\": \"Email penerima\",\n    \"recipient_form_email_label_my_email\": \"Email saya\",\n    \"recipient_form_email_address\": \"Alamat email penerima\",\n    \"recipient_form_name_label\": \"Nama penerima (opsional)\",\n    \"recipient_form_message\": \"Pesan (opsional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} karakter digunakan\",\n    \"recipient_form_send_on\": \"TTTT-BB-HH\",\n    \"recipient_form_send_on_label\": \"Kirim pada (opsional)\",\n    \"recipient_form_fields_visible\": \"Kolom formulir penerima sekarang ditampilkan\",\n    \"recipient_form_fields_hidden\": \"Kolom formulir penerima sekarang disembunyikan\",\n    \"recipient_form_error\": \"Terjadi kesalahan saat pengiriman formulir\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} karakter digunakan\",\n    \"terms_and_policies\": \"Ketentuan dan Kebijakan\",\n    \"pagination\": {\n      \"nav_label\": \"Navigasi paginasi\",\n      \"previous\": \"Sebelumnya\",\n      \"next\": \"Berikutnya\",\n      \"page\": \"Halaman {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Harga volume tersedia\",\n    \"volume_pricing\": \"Harga volume\",\n    \"at_price_each\": \"harga {{ price }}/satuan\",\n    \"each\": \"{{ price }}/satuan\",\n    \"each_abbreviation\": \"satuan\",\n    \"price_at\": \"dalam\",\n    \"price_range\": \"Kisaran harga\",\n    \"item_count_cutoff\": \"Lebih dari {{ count }} item\",\n    \"cancel\": \"Batal\",\n    \"product_subtotal\": \"Subtotal produk\",\n    \"quantity_per_item\": \"/satuan\",\n    \"remove_all\": \"Hapus semua\",\n    \"remove_all_items_confirmation\": \"Hapus {{ count }} item ini dari keranjang Anda?\",\n    \"remove_one_item_confirmation\": \"Hapus 1 item dari keranjang Anda?\",\n    \"total_items\": \"Total item\",\n    \"variant\": \"Varian\",\n    \"variant_total\": \"Total varian\",\n    \"view_cart\": \"Lihat keranjang\",\n    \"your_cart\": \"Keranjang Anda\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 item ditambahkan ke keranjang\",\n      \"other\": \"{{ count }} item ditambahkan ke keranjang\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Gunakan kode voucher secara online atau kode QR di toko\",\n      \"title\": \"Ini dia voucher senilai {{ value }} Anda untuk {{ shop }}!\",\n      \"subtext\": \"Voucher Anda\",\n      \"shop_link\": \"Kunjungi toko online\",\n      \"add_to_apple_wallet\": \"Tambahkan ke Dompet Apple\",\n      \"qr_image_alt\": \"Kode QR — pindai untuk menukarkan voucher\",\n      \"copy_code\": \"Salin kode voucher\",\n      \"expiration_date\": \"Kedaluwarsa pada {{ expires_on }}\",\n      \"copy_code_success\": \"Kode berhasil disalin\",\n      \"expired\": \"Kedaluwarsa\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Sandi\",\n    \"search\": \"Cari\",\n    \"product_title\": \"Judul produk\",\n    \"collection_title\": \"Judul koleksi\",\n    \"blog_posts\": \"Postingan blog\",\n    \"blog_post_title\": \"Judul\",\n    \"blog_post_author\": \"Penulis\",\n    \"blog_post_date\": \"Tanggal\",\n    \"blog_post_description\": \"Cuplikan dari konten postingan blog Anda\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Tambahkan ke keranjang\",\n      \"added_to_cart\": \"Ditambahkan ke keranjang\",\n      \"adding_to_cart\": \"Menambahkan...\",\n      \"add_to_cart_error\": \"Kesalahan saat menambahkan ke keranjang\",\n      \"sold_out\": \"Habis\",\n      \"unavailable\": \"Tidak Tersedia\",\n      \"quantity_error_max\": \"Item ini memiliki batas maksimum {{ maximum }}\",\n      \"quantity\": \"Jumlah\",\n      \"quantity_increments\": \"Nilai peningkatan {{ increment }}\",\n      \"quantity_minimum\": \"Minimum {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimum {{ maximum }}\",\n      \"in_cart\": \"di keranjang\",\n      \"default_title\": \"Judul Bawaan\",\n      \"sticky_add_to_cart\": \"Bilah penambahan cepat ke keranjang\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"hingga\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentar\",\n        \"other\": \"{{ count }} komentar\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Email\",\n      \"error\": \"Komentar gagal dikirim, perbaiki hal-hal berikut:\",\n      \"heading\": \"Tulis komentar\",\n      \"message\": \"Pesan\",\n      \"moderated\": \"Ingat, komentar perlu disetujui sebelum dipublikasikan.\",\n      \"name\": \"Nama\",\n      \"post\": \"Posting komentar\",\n      \"success_moderated\": \"Komentar diposting, menunggu moderasi\",\n      \"success\": \"Komentar diposting\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/it.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Carica il video: {{ description }}\",\n    \"sold_out\": \"Esaurito\",\n    \"email_signup\": {\n      \"label\": \"Email\",\n      \"placeholder\": \"Indirizzo email\",\n      \"success\": \"Grazie per l'iscrizione!\"\n    },\n    \"filter\": \"Filtro\",\n    \"payment_methods\": \"Metodi di pagamento\",\n    \"contact_form\": {\n      \"name\": \"Nome\",\n      \"email\": \"Email\",\n      \"phone\": \"Telefono\",\n      \"comment\": \"Commento\",\n      \"post_success\": \"Grazie per averci contattato. Risponderemo il prima possibile.\",\n      \"error_heading\": \"Correggi gli errori seguenti:\"\n    },\n    \"slider_label\": \"Cursore\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Riproduci modello 3D\",\n    \"play_video\": \"Riproduci video\",\n    \"unit_price\": \"Prezzo unitario\",\n    \"country_results_count\": \"{{ count }} risultati\",\n    \"slideshow_pause\": \"Metti in pausa presentazione\",\n    \"slideshow_play\": \"Avvia presentazione\",\n    \"remove_item\": \"Rimuovi {{ title}}\",\n    \"skip_to_text\": \"Vai direttamente al contenuto\",\n    \"skip_to_product_info\": \"Passa alle informazioni sul prodotto\",\n    \"skip_to_results_list\": \"Passa all'elenco dei risultati\",\n    \"new_window\": \"Si apre in una nuova finestra.\",\n    \"slideshow_next\": \"Slide successiva\",\n    \"slideshow_previous\": \"Slide precedente\",\n    \"close_dialog\": \"Chiudi finestra di dialogo\",\n    \"reset_search\": \"Ripristina ricerca\",\n    \"search_results_count\": \"{{ count }} risultati della ricerca trovati per \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Nessun risultato trovato per \\\"{{ query }}\\\"\",\n    \"filters\": \"Filtri\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtro applicato\",\n      \"other\": \"{{ count }} filtri applicati\",\n      \"many\": \"{{ count }} filtri applicati\"\n    },\n    \"account\": \"Account\",\n    \"cart\": \"Carrello\",\n    \"cart_count\": \"Totale articoli nel carrello\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"Paese/Area geografica\",\n    \"slide_status\": \"Slide {{ index }} di {{ length }}\",\n    \"scroll_to\": \"Scorri fino a {{ title }}\",\n    \"loading_product_recommendations\": \"Caricamento delle raccomandazioni sui prodotti\",\n    \"discount\": \"Applica un codice sconto\",\n    \"discount_menu\": \"Codici sconto\",\n    \"discount_applied\": \"Codice sconto applicato: {{ code }}\",\n    \"inventory_status\": \"Stato delle scorte\",\n    \"pause_video\": \"Metti video in pausa\",\n    \"find_country\": \"Trova paese\",\n    \"localization_region_and_language\": \"Selettore dell'area geografica e della lingua\",\n    \"decrease_quantity\": \"Diminuisci quantità\",\n    \"increase_quantity\": \"Aumenta quantità\",\n    \"quantity\": \"Quantità\",\n    \"rating\": \"Il voto per questo prodotto è {{ rating }} su 5\",\n    \"nested_product\": \"{{ product_title }} per {{ parent_title }}\",\n    \"remove\": \"Rimuovi\",\n    \"view_pricing_info\": \"Visualizza informazioni sui prezzi\",\n    \"open_hotspot\": \"Apri hotspot\",\n    \"slideshow\": \"Presentazione\",\n    \"header_navigation_label\": \"Principale\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Aggiungi al carrello\",\n    \"clear_all\": \"Cancella tutto\",\n    \"remove\": \"Rimuovi\",\n    \"view_in_your_space\": \"Visualizza nel tuo spazio\",\n    \"show_filters\": \"Filtro\",\n    \"clear\": \"Cancella\",\n    \"continue_shopping\": \"Continua lo shopping\",\n    \"log_in_html\": \"Hai un account? <a href=\\\"{{ link }}\\\">Accedi</a> per un check-out più veloce.\",\n    \"see_items\": {\n      \"one\": \"Vedi {{ count }} articolo\",\n      \"other\": \"Vedi {{ count }} articoli\",\n      \"many\": \"Vedi {{ count }} articoli\"\n    },\n    \"view_all\": \"Visualizza tutto\",\n    \"add\": \"Aggiungi\",\n    \"choose\": \"Scegli\",\n    \"added\": \"Aggiunto\",\n    \"show_less\": \"Mostra meno\",\n    \"show_more\": \"Mostra di più\",\n    \"close\": \"Chiudi\",\n    \"more\": \"Altro\",\n    \"reset\": \"Ripristina\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Chiudi finestra di dialogo\",\n    \"back\": \"Indietro\",\n    \"log_in\": \"Accedi\",\n    \"log_out\": \"Esci\",\n    \"remove_discount\": \"Rimuovi sconto {{ code }}\",\n    \"enter_using_password\": \"Accedi utilizzando la password\",\n    \"submit\": \"Invia\",\n    \"enter_password\": \"Inserisci password\",\n    \"view_store_information\": \"Visualizza i dettagli del negozio\",\n    \"apply\": \"Applica\",\n    \"sign_in_options\": \"Altre opzioni di accesso\",\n    \"sign_up\": \"Iscriviti\",\n    \"open_image_in_full_screen\": \"Apri immagine a schermo intero\",\n    \"sort\": \"Ordina\",\n    \"show_all_options\": \"Mostra tutte le opzioni\",\n    \"open\": \"Apri\"\n  },\n  \"content\": {\n    \"reviews\": \"recensioni\",\n    \"no_results_found\": \"Nessun risultato trovato\",\n    \"language\": \"Lingua\",\n    \"localization_region_and_language\": \"Area geografica e lingua\",\n    \"cart_total\": \"Totale carrello\",\n    \"your_cart_is_empty\": \"Il tuo carrello è vuoto\",\n    \"product_image\": \"Immagine del prodotto\",\n    \"product_information\": \"Informazioni sul prodotto\",\n    \"quantity\": \"Quantità\",\n    \"product_total\": \"Totale del prodotto\",\n    \"cart_estimated_total\": \"Totale stimato\",\n    \"seller_note\": \"Istruzioni speciali\",\n    \"cart_subtotal\": \"Subtotale\",\n    \"discounts\": \"Sconti\",\n    \"discount\": \"Sconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Dazi e imposte inclusi. Sconti e <a href=\\\"{{ link }}\\\">spedizione</a> calcolati al check-out.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Dazi e imposte inclusi. Sconti e spedizione calcolati al check-out.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Imposte incluse. Sconti e <a href=\\\"{{ link }}\\\">spedizione</a> calcolati al check-out.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Imposte incluse. Sconti e spedizione calcolati al check-out.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Dazi inclusi. Imposte, sconti e <a href=\\\"{{ link }}\\\">spedizione</a> calcolati al check-out.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Dazi inclusi. Imposte, sconti e spedizione calcolati al check-out.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Imposte, sconti e <a href=\\\"{{ link }}\\\">spedizione</a> calcolati al check-out.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Imposte, sconti e spedizione calcolati al check-out.\",\n    \"checkout\": \"Check-out\",\n    \"cart_title\": \"Carrello\",\n    \"price\": \"Prezzo\",\n    \"price_regular\": \"Prezzo di listino\",\n    \"price_compare_at\": \"Prezzo di confronto\",\n    \"price_sale\": \"Prezzo promozionale\",\n    \"duties_and_taxes_included\": \"Dazi e imposte inclusi.\",\n    \"duties_included\": \"Dazi inclusi.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Spese di spedizione</a> calcolate al check-out.\",\n    \"taxes_included\": \"Imposte incluse.\",\n    \"product_badge_sold_out\": \"Esaurito\",\n    \"product_badge_sale\": \"In offerta\",\n    \"search_input_label\": \"Ricerca\",\n    \"search_input_placeholder\": \"Ricerca\",\n    \"search_results\": \"Risultati della ricerca\",\n    \"search_results_label\": \"Risultati della ricerca\",\n    \"search_results_no_results\": \"Nessun risultato trovato per “{{ terms }}”. Prova con un’altra ricerca.\",\n    \"search_results_resource_articles\": \"Articoli del blog\",\n    \"search_results_resource_collections\": \"Collezioni\",\n    \"search_results_resource_pages\": \"Pagine\",\n    \"search_results_resource_products\": \"Prodotti\",\n    \"search_results_resource_queries\": \"Suggerimenti di ricerca\",\n    \"search_results_view_all\": \"Visualizza tutto\",\n    \"search_results_view_all_button\": \"Visualizza tutto\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} prodotto\",\n      \"other\": \"{{ count }} prodotti\",\n      \"many\": \"{{ count }} prodotti\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Predefinito\",\n      \"grid_fieldset\": \"Griglia a colonne\",\n      \"single_item\": \"Singola\",\n      \"zoom_out\": \"Allontana\"\n    },\n    \"unavailable\": \"Non disponibile\",\n    \"collection_placeholder\": \"Titolo della collezione\",\n    \"product_card_placeholder\": \"Titolo del prodotto\",\n    \"recently_viewed_products\": \"Visualizzati di recente\",\n    \"product_count\": \"Conteggio prodotti\",\n    \"item_count\": {\n      \"one\": \"{{ count }} articolo\",\n      \"other\": \"{{ count }} articoli\",\n      \"many\": \"{{ count }} articoli\"\n    },\n    \"errors\": \"Errori\",\n    \"search\": \"Ricerca\",\n    \"search_results_no_results_check_spelling\": \"Nessun risultato trovato per \\\"{{ terms }}\\\". Controlla l'ortografia o usa un'altra parola o frase.\",\n    \"featured_products\": \"Prodotti in primo piano\",\n    \"no_products_found\": \"Nessun prodotto trovato.\",\n    \"price_from\": \"Da {{ price }}\",\n    \"use_fewer_filters_html\": \"Prova a usare meno filtri oppure <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">cancella tutti i filtri</a>.\",\n    \"filters\": \"Filtri\",\n    \"price_filter_html\": \"Il prezzo più alto è {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Maggiori informazioni...\",\n    \"account_title\": \"Account\",\n    \"account_title_personalized\": \"Ciao {{ first_name }}\",\n    \"account_orders\": \"Ordini\",\n    \"account_profile\": \"Profilo\",\n    \"discount_code\": \"Codice sconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Imposte e dazi inclusi. Le spese di spedizione vengono calcolate al check-out.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Imposte e dazi inclusi. Le spese di spedizione vengono calcolate al check-out.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Dazi inclusi. Le spese di spedizione vengono calcolate al check-out.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Dazi inclusi. Le spese di spedizione vengono calcolate al check-out.\",\n    \"pickup_available_at_html\": \"Ritiro disponibile presso la sede <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Ritiro disponibile, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Ritiro non disponibile al momento\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Imposte e <a href=\\\"{{ link }}\\\">spese di spedizione</a> calcolate al check-out.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Imposte e spese di spedizione calcolate al check-out.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Imposte incluse. Le spese di spedizione vengono calcolate al check-out.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Imposte incluse. Le spese di spedizione vengono calcolate al check-out.\",\n    \"wrong_password\": \"Password errata\",\n    \"view_more_details\": \"Visualizza più dettagli\",\n    \"inventory_low_stock\": \"Scorte ridotte\",\n    \"inventory_in_stock\": \"Disponibile\",\n    \"inventory_out_of_stock\": \"Esaurito\",\n    \"page_placeholder_title\": \"Titolo della pagina\",\n    \"page_placeholder_content\": \"Seleziona una pagina per visualizzarne il contenuto.\",\n    \"placeholder_image\": \"Immagine segnaposto\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} rimasto\",\n      \"other\": \"{{ count }} rimasto\",\n      \"many\": \"{{ count }} rimasto\"\n    },\n    \"discount_code_error\": \"Il codice sconto non può essere applicato al tuo carrello\",\n    \"shipping_policy\": \"Spese di spedizione calcolate al check-out.\",\n    \"powered_by\": \"Questo negozio sarà ospitato su\",\n    \"store_owner_link_html\": \"Il negozio è di tua proprietà? <a href=\\\"{{ link }}\\\">Accedi qui</a>\",\n    \"shipping_discount_error\": \"Gli sconti sulla spedizione vengono mostrati al momento del check-out dopo l'aggiunta di un indirizzo\",\n    \"recipient_form_send_to\": \"Invia a\",\n    \"recipient_form_email_label\": \"Email del destinatario\",\n    \"recipient_form_email_label_my_email\": \"La mia email\",\n    \"recipient_form_email_address\": \"Indirizzo email del destinatario\",\n    \"recipient_form_name_label\": \"Nome destinatario (facoltativo)\",\n    \"recipient_form_message\": \"Messaggio (facoltativo)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} caratteri utilizzati\",\n    \"recipient_form_send_on\": \"GG/MM/AAAA\",\n    \"recipient_form_send_on_label\": \"Spedisci il giorno (opzionale)\",\n    \"recipient_form_fields_visible\": \"I campi del modulo destinatario sono ora visibili\",\n    \"recipient_form_fields_hidden\": \"I campi del modulo destinatario sono ora nascosti\",\n    \"recipient_form_error\": \"Si è verificato un errore durante l'invio del modulo\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} caratteri utilizzati\",\n    \"terms_and_policies\": \"Termini e informative\",\n    \"pagination\": {\n      \"nav_label\": \"Navigazione impaginazione\",\n      \"previous\": \"Indietro\",\n      \"next\": \"Avanti\",\n      \"page\": \"Pagina {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Sono disponibili prezzi basati sui volumi\",\n    \"volume_pricing\": \"Prezzi basati sui volumi\",\n    \"at_price_each\": \"a {{ price }}/cad.\",\n    \"each\": \"{{ price }}/cad.\",\n    \"each_abbreviation\": \"cad.\",\n    \"price_at\": \"a\",\n    \"price_range\": \"Intervallo di prezzo\",\n    \"cancel\": \"Annulla\",\n    \"product_subtotal\": \"Subtotale prodotto\",\n    \"quantity_per_item\": \"cad.\",\n    \"remove_all\": \"Rimuovi tutto\",\n    \"remove_all_items_confirmation\": \"Rimuovere tutti i {{ count }} articoli dal carrello?\",\n    \"remove_one_item_confirmation\": \"Rimuovere un articolo dal carrello?\",\n    \"total_items\": \"Articoli totali\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Totale variante\",\n    \"view_cart\": \"Visualizza carrello\",\n    \"your_cart\": \"Il tuo carrello\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 articolo aggiunto al carrello\",\n      \"other\": \"{{ count }} articoli aggiunti al carrello\",\n      \"many\": \"{{ count }} articoli aggiunti al carrello\"\n    },\n    \"item_count_cutoff\": \"Più di {{ count }} articoli\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Utilizza il codice del buono regalo online o il codice QR in negozio\",\n      \"title\": \"Ecco il saldo del tuo buono regalo dal valore di {{ value }} per {{ shop }}!\",\n      \"subtext\": \"Il tuo buono regalo\",\n      \"shop_link\": \"Visita il negozio online\",\n      \"add_to_apple_wallet\": \"Aggiungi a Apple Wallet\",\n      \"qr_image_alt\": \"Codice QR — scansiona per riscattare il buono regalo\",\n      \"copy_code\": \"Copia codice del buono regalo\",\n      \"expiration_date\": \"Scade il giorno {{ expires_on }}\",\n      \"copy_code_success\": \"Codice copiato correttamente\",\n      \"expired\": \"Scaduto\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} commento\",\n        \"other\": \"{{ count }} commenti\",\n        \"many\": \"{{ count }} commenti\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Email\",\n      \"error\": \"Pubblicazione del commento non riuscita; verifica quanto segue:\",\n      \"heading\": \"Lascia un commento\",\n      \"message\": \"Messaggio\",\n      \"moderated\": \"Ricorda che i commenti devono essere approvati prima di essere pubblicati.\",\n      \"name\": \"Nome\",\n      \"post\": \"Pubblica commento\",\n      \"success_moderated\": \"Commento pubblicato, in attesa di moderazione\",\n      \"success\": \"Commento pubblicato\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"a\"\n  },\n  \"placeholders\": {\n    \"password\": \"Password\",\n    \"search\": \"Ricerca\",\n    \"product_title\": \"Titolo del prodotto\",\n    \"collection_title\": \"Titolo della collezione\",\n    \"blog_posts\": \"Articoli del blog\",\n    \"blog_post_title\": \"Titolo\",\n    \"blog_post_author\": \"Autore\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Un estratto dal contenuto del tuo articolo del blog\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Aggiungi al carrello\",\n      \"adding_to_cart\": \"Aggiunta in corso...\",\n      \"added_to_cart\": \"Aggiunto al carrello\",\n      \"add_to_cart_error\": \"Errore durante l'aggiunta al carrello\",\n      \"quantity_error_max\": \"Questo articolo ha un massimo di {{ maximum }}\",\n      \"sold_out\": \"Esaurito\",\n      \"unavailable\": \"Non disponibile\",\n      \"quantity\": \"Quantità\",\n      \"quantity_increments\": \"Incrementi di {{ increment }}\",\n      \"quantity_minimum\": \"Minimo di {{ minimum }}\",\n      \"quantity_maximum\": \"Massimo di {{ maximum }}\",\n      \"in_cart\": \"nel carrello\",\n      \"default_title\": \"Titolo predefinito\",\n      \"sticky_add_to_cart\": \"Barra per l'aggiunta rapida al carrello\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/it.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Bordi\",\n    \"collapsible_row\": \"Riga comprimibile\",\n    \"colors\": \"Colori\",\n    \"custom_section\": \"Sezione personalizzata\",\n    \"icon\": \"Icona\",\n    \"logo_and_favicon\": \"Logo e favicon\",\n    \"overlapping_blocks\": \"Blocchi sovrapposti\",\n    \"product_buy_buttons\": \"Pulsanti di acquisto\",\n    \"product_description\": \"Descrizione\",\n    \"product_price\": \"Prezzo\",\n    \"product_variant_picker\": \"Selettore di variante\",\n    \"slideshow\": \"Presentazione\",\n    \"typography\": \"Tipografia\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Controlli della presentazione\",\n    \"size\": \"Taglia\",\n    \"spacing\": \"Spaziatura\",\n    \"product_recommendations\": \"Prodotti consigliati\",\n    \"product_media\": \"Contenuti multimediali del prodotto\",\n    \"featured_collection\": \"Collezione in evidenza\",\n    \"add_to_cart\": \"Aggiungi al carrello\",\n    \"email_signup\": \"Iscrizione alla newsletter\",\n    \"submit_button\": \"Pulsante di invio\",\n    \"grid_layout_selector\": \"Selettore del layout a griglia\",\n    \"image\": \"Immagine\",\n    \"list_items\": \"Voci dell'elenco\",\n    \"facets\": \"Filtri\",\n    \"variants\": \"Varianti\",\n    \"product_cards\": \"Schede prodotto\",\n    \"styles\": \"Stili\",\n    \"primary_button\": \"Pulsante principale\",\n    \"secondary_button\": \"Pulsante secondario\",\n    \"popovers_and_modals\": \"Popover e modali\",\n    \"buttons\": \"Pulsanti\",\n    \"inputs\": \"Input\",\n    \"marquee\": \"Marquee\",\n    \"alternating_content_rows\": \"Righe alternate\",\n    \"pull_quote\": \"Citazione in evidenza\",\n    \"contact_form\": \"Modulo di contatto\",\n    \"featured_product\": \"Prodotto in primo piano\",\n    \"icons_with_text\": \"Icone con testo\",\n    \"products_carousel\": \"Collezione in evidenza: Carosello\",\n    \"products_grid\": \"Collezione in evidenza: Griglia\",\n    \"product_list\": \"Collezione in evidenza\",\n    \"spacer\": \"Spaziatore\",\n    \"accelerated_checkout\": \"Check-out veloce\",\n    \"accordion\": \"Accordion\",\n    \"accordion_row\": \"Riga accordion\",\n    \"animations\": \"Animazioni\",\n    \"announcement\": \"Annuncio\",\n    \"announcement_bar\": \"Barra degli annunci\",\n    \"badges\": \"Badge\",\n    \"button\": \"Pulsante\",\n    \"cart\": \"Carrello\",\n    \"cart_items\": \"Articoli del carrello\",\n    \"cart_products\": \"Prodotti nel carrello\",\n    \"cart_title\": \"Carrello\",\n    \"collection\": \"Collezione\",\n    \"collection_card\": \"Scheda della collezione\",\n    \"collection_columns\": \"Colonne della collezione\",\n    \"collection_container\": \"Collezione\",\n    \"collection_description\": \"Descrizione della collezione\",\n    \"collection_image\": \"Immagine della collezione\",\n    \"collection_info\": \"Informazioni sulla collezione\",\n    \"collection_list\": \"Elenco delle collezioni\",\n    \"collections\": \"Collezioni\",\n    \"content\": \"Contenuto\",\n    \"content_grid\": \"Griglia di contenuto\",\n    \"details\": \"Dettagli\",\n    \"divider\": \"Divisore\",\n    \"filters\": \"Filtro e ordinamento\",\n    \"follow_on_shop\": \"Segui su Shop\",\n    \"footer\": \"Footer\",\n    \"footer_utilities\": \"Utilità del footer\",\n    \"group\": \"Gruppo\",\n    \"header\": \"Header\",\n    \"heading\": \"Intestazione\",\n    \"icons\": \"Icone\",\n    \"image_with_text\": \"Immagine con testo\",\n    \"input\": \"Input\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Griglia stile rivista\",\n    \"media\": \"Contenuti multimediali\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout per dispositivi mobili\",\n    \"payment_icons\": \"Icone di pagamento\",\n    \"popup_link\": \"Link pop up\",\n    \"predictive_search\": \"Popover di ricerca\",\n    \"predictive_search_empty\": \"Ricerca predittiva vuota\",\n    \"price\": \"Prezzo\",\n    \"product\": \"Prodotto\",\n    \"product_card\": \"Scheda prodotto\",\n    \"product_card_media\": \"Contenuti multimediali\",\n    \"product_card_rendering\": \"Rendering della scheda prodotto\",\n    \"product_grid\": \"Griglia\",\n    \"product_grid_main\": \"Griglia di prodotti\",\n    \"product_image\": \"Immagine del prodotto\",\n    \"product_information\": \"Informazioni sul prodotto\",\n    \"product_review_stars\": \"Stelle di recensione\",\n    \"quantity\": \"Quantità\",\n    \"row\": \"Riga\",\n    \"search\": \"Cerca\",\n    \"section\": \"Sezione\",\n    \"selected_variants\": \"Varianti selezionate\",\n    \"slide\": \"Slide\",\n    \"social_media_links\": \"Link dei social media\",\n    \"steps\": \"Passaggi\",\n    \"summary\": \"Riepilogo\",\n    \"swatches\": \"Campioni\",\n    \"testimonials\": \"Testimonianze\",\n    \"text\": \"Testo\",\n    \"title\": \"Titolo\",\n    \"utilities\": \"Utilità\",\n    \"search_input\": \"Input di ricerca\",\n    \"search_results\": \"Risultati di ricerca\",\n    \"read_only\": \"Sola lettura\",\n    \"collection_title\": \"Titolo della collezione\",\n    \"collections_bento\": \"Elenco delle collezioni: Bento\",\n    \"collections_carousel\": \"Elenco delle collezioni: Carosello\",\n    \"collections_grid\": \"Elenco delle collezioni: Griglia\",\n    \"collection_links\": \"Link delle collezioni\",\n    \"collection_links_spotlight\": \"Link delle collezioni: Spotlight\",\n    \"collection_links_text\": \"Link delle collezioni: Testo\",\n    \"count\": \"Conteggio\",\n    \"divider_section\": \"Divisore\",\n    \"faq_section\": \"Domande frequenti\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Testo jumbo\",\n    \"marquee_section\": \"Marquee\",\n    \"media_with_text\": \"Contenuti multimediali con testo\",\n    \"view_all_button\": \"Visualizza tutto\",\n    \"video_section\": \"Video\",\n    \"blog\": \"Blog\",\n    \"blog_posts\": \"Articoli del blog\",\n    \"product_title\": \"Titolo del prodotto\",\n    \"custom_liquid\": \"Liquid personalizzato\",\n    \"blog_post\": \"Articolo del blog\",\n    \"caption\": \"Didascalia\",\n    \"collection_card_image\": \"Immagine\",\n    \"collections_editorial\": \"Elenco delle collezioni: Editoriale\",\n    \"copyright\": \"Copyright\",\n    \"drawers\": \"Menu a comparsa\",\n    \"editorial\": \"Editoriale\",\n    \"editorial_jumbo_text\": \"Editoriale: Testo jumbo\",\n    \"hero_marquee\": \"Hero: Marquee\",\n    \"input_fields\": \"Campi di input\",\n    \"local_pickup\": \"Ritiro locale\",\n    \"page\": \"Pagina\",\n    \"page_content\": \"Contenuto\",\n    \"page_layout\": \"Layout di pagina\",\n    \"policy_list\": \"Link alle informative\",\n    \"prices\": \"Prezzi\",\n    \"product_list_button\": \"Pulsante \\\"Visualizza tutto\\\"\",\n    \"products_editorial\": \"Collezione in evidenza: Editoriale\",\n    \"social_link\": \"Link social\",\n    \"split_showcase\": \"Vetrina divisa\",\n    \"variant_pickers\": \"Selettori di variante\",\n    \"pills\": \"Pillole\",\n    \"large_logo\": \"Logo grande\",\n    \"product_inventory\": \"Scorte del prodotto\",\n    \"description\": \"Descrizione\",\n    \"featured_image\": \"Immagine in evidenza\",\n    \"multicolumn\": \"Multicolonna\",\n    \"rich_text_section\": \"Rich text\",\n    \"product_custom_property\": \"Istruzioni speciali\",\n    \"hero_bottom_aligned\": \"Hero: Allineato in basso\",\n    \"blog_card\": \"Scheda del blog\",\n    \"blog_posts_grid\": \"Articoli del blog: Griglia\",\n    \"blog_posts_carousel\": \"Articoli del blog: Carosello\",\n    \"blog_posts_editorial\": \"Articoli del blog: Editoriale\",\n    \"excerpt\": \"Estratto\",\n    \"footer_password\": \"Footer per pagina protetta da password\",\n    \"policies_and_links\": \"Informative e link\",\n    \"card\": \"Scheda\",\n    \"carousel\": \"Carosello\",\n    \"carousel_content\": \"Contenuto del carosello\",\n    \"quick_order_list\": \"Elenco per ordine rapido\",\n    \"column\": \"Colonna\",\n    \"comparison_slider\": \"Slider di confronto\",\n    \"slideshow_full_frame\": \"Presentazione: A schermo intero\",\n    \"slideshow_inset\": \"Presentazione: Riquadro\",\n    \"image_compare\": \"Confronto immagini\",\n    \"subheading\": \"Sottotitolo\",\n    \"featured_product_information\": \"Prodotto in evidenza\",\n    \"product_hotspots\": \"Hotspot prodotto\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Presentazione a livelli\"\n  },\n  \"settings\": {\n    \"alignment\": \"Allineamento\",\n    \"autoplay\": \"Riproduzione automatica\",\n    \"background\": \"Sfondo\",\n    \"border_radius\": \"Raggio dell'angolo\",\n    \"border_width\": \"Spessore bordo\",\n    \"borders\": \"Bordi\",\n    \"bottom_padding\": \"Spaziatura interna inferiore\",\n    \"button\": \"Pulsante\",\n    \"color\": \"Colore\",\n    \"colors\": \"Colori\",\n    \"content_alignment\": \"Allineamento contenuto\",\n    \"content_direction\": \"Direzione contenuto\",\n    \"content_position\": \"Posizione contenuto\",\n    \"cover_image_size\": \"Dimensione immagine di copertina\",\n    \"cover_image\": \"Immagine di copertina\",\n    \"custom_minimum_height\": \"Altezza minima personalizzata\",\n    \"custom_width\": \"Larghezza personalizzata\",\n    \"enable_video_looping\": \"Riproduzione video in loop\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"Famiglia di font\",\n    \"gap\": \"Spaziatura\",\n    \"geometric_translate_y\": \"Traslazione geometrica Y\",\n    \"heading\": \"Intestazione\",\n    \"icon\": \"Icona\",\n    \"image\": \"Immagine\",\n    \"image_icon\": \"Icona immagine\",\n    \"image_opacity\": \"Opacità immagine\",\n    \"image_position\": \"Posizione immagine\",\n    \"image_ratio\": \"Proporzioni immagine\",\n    \"label\": \"Etichetta\",\n    \"line_height\": \"Altezza riga\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Spaziatura layout\",\n    \"make_section_full_width\": \"Imposta la sezione a larghezza intera\",\n    \"minimum_height\": \"Altezza minima\",\n    \"opacity\": \"Opacità\",\n    \"overlay_opacity\": \"Opacità di sovrapposizione\",\n    \"padding\": \"Spaziatura interna\",\n    \"primary_color\": \"Link\",\n    \"product\": \"Prodotto\",\n    \"section_width\": \"Larghezza sezione\",\n    \"size\": \"Dimensione\",\n    \"slide_spacing\": \"Spaziatura slide\",\n    \"slide_width\": \"Larghezza slide\",\n    \"slideshow_fullwidth\": \"Slide a larghezza intera\",\n    \"style\": \"Stile\",\n    \"text\": \"Testo\",\n    \"text_case\": \"Maiuscole/minuscole\",\n    \"top_padding\": \"Spaziatura interna superiore\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Testo alternativo\",\n    \"video_loop\": \"Riproduci video in loop\",\n    \"video_position\": \"Posizione video\",\n    \"width\": \"Larghezza\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Limita larghezza contenuto\",\n    \"color_scheme\": \"Schema di colori\",\n    \"inherit_color_scheme\": \"Eredita schema di colori\",\n    \"product_count\": \"Conteggio prodotti\",\n    \"product_type\": \"Tipo di prodotto\",\n    \"content_width\": \"Larghezza contenuto\",\n    \"collection\": \"Collezione\",\n    \"enable_sticky_content\": \"Contenuto fisso su desktop\",\n    \"error_color\": \"Errore\",\n    \"success_color\": \"Operazione riuscita\",\n    \"primary_font\": \"Font principale\",\n    \"secondary_font\": \"Font secondario\",\n    \"tertiary_font\": \"Font terziario\",\n    \"columns\": \"Colonne\",\n    \"items_to_show\": \"Articoli da mostrare\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Tipo\",\n    \"show_grid_layout_selector\": \"Mostra selettore del layout a griglia\",\n    \"view_more_show\": \"Mostra pulsante Visualizza altro\",\n    \"image_gap\": \"Spaziatura immagine\",\n    \"width_desktop\": \"Larghezza desktop\",\n    \"width_mobile\": \"Larghezza su dispositivo mobile\",\n    \"border_style\": \"Stile bordo\",\n    \"height\": \"Altezza\",\n    \"thickness\": \"Spessore\",\n    \"stroke\": \"Tratto\",\n    \"filter_style\": \"Stile filtro\",\n    \"swatches\": \"Campioni\",\n    \"quick_add_colors\": \"Colori aggiunta rapida\",\n    \"divider_color\": \"Divisore\",\n    \"border_opacity\": \"Opacità bordo\",\n    \"hover_background\": \"Sfondo al passaggio del mouse\",\n    \"hover_borders\": \"Bordi al passaggio del mouse\",\n    \"hover_text\": \"Testo al passaggio del mouse\",\n    \"primary_hover_color\": \"Link al passaggio del mouse\",\n    \"primary_button_text\": \"Testo pulsante principale\",\n    \"primary_button_background\": \"Sfondo pulsante principale\",\n    \"primary_button_border\": \"Bordo pulsante principale\",\n    \"secondary_button_text\": \"Testo pulsante secondario\",\n    \"secondary_button_background\": \"Sfondo pulsante secondario\",\n    \"secondary_button_border\": \"Bordo pulsante secondario\",\n    \"shadow_color\": \"Ombra\",\n    \"mobile_logo_image\": \"Logo per dispositivi mobili\",\n    \"video_autoplay\": \"Riproduzione automatica\",\n    \"video_cover_image\": \"Immagine di copertina\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Origine\",\n    \"first_row_media_position\": \"Posizione contenuti multimediali prima riga\",\n    \"card_image_height\": \"Altezza immagine del prodotto\",\n    \"background_color\": \"Colore di sfondo\",\n    \"hide_padding\": \"Nascondi spaziatura interna\",\n    \"logo_font\": \"Font del logo\",\n    \"size_mobile\": \"Dimensione su dispositivo mobile\",\n    \"pixel_size_mobile\": \"Dimensione in pixel\",\n    \"percent_size_mobile\": \"Dimensione percentuale\",\n    \"unit\": \"Unità\",\n    \"custom_mobile_size\": \"Dimensioni personalizzate per dispositivi mobili\",\n    \"fixed_height\": \"Altezza in pixel\",\n    \"fixed_width\": \"Larghezza in pixel\",\n    \"percent_height\": \"Altezza percentuale\",\n    \"percent_width\": \"Larghezza percentuale\",\n    \"percent_size\": \"Dimensione percentuale\",\n    \"pixel_size\": \"Dimensione in pixel\",\n    \"accordion\": \"Accordion\",\n    \"aspect_ratio\": \"Proporzioni\",\n    \"auto_rotate_announcements\": \"Ruota automaticamente gli annunci\",\n    \"auto_rotate_slides\": \"Ruota automaticamente le slide\",\n    \"badge_corner_radius\": \"Raggio dell'angolo\",\n    \"badge_position\": \"Posizione sulle schede\",\n    \"badge_sale_color_scheme\": \"Promozione\",\n    \"badge_sold_out_color_scheme\": \"Esaurito\",\n    \"behavior\": \"Comportamento\",\n    \"blur\": \"Sfumatura ombra\",\n    \"border\": \"Bordo\",\n    \"bottom\": \"Inferiore\",\n    \"carousel_on_mobile\": \"Carosello su dispositivo mobile\",\n    \"cart_count\": \"Conteggio carrello\",\n    \"cart_items\": \"Articoli nel carrello\",\n    \"cart_related_products\": \"Prodotti correlati\",\n    \"cart_title\": \"Carrello\",\n    \"cart_total\": \"Totale carrello\",\n    \"cart_type\": \"Tipo\",\n    \"case\": \"Maiuscole/minuscole\",\n    \"checkout_buttons\": \"Pulsanti di check-out veloce\",\n    \"collection_list\": \"Collezioni\",\n    \"collection_templates\": \"Modelli di collezione\",\n    \"content\": \"Contenuto\",\n    \"corner_radius\": \"Raggio dell'angolo\",\n    \"country_region\": \"Paese/area geografica\",\n    \"currency_code\": \"Codice valuta\",\n    \"custom_height\": \"Altezza personalizzata\",\n    \"desktop_height\": \"Altezza desktop\",\n    \"direction\": \"Direzione\",\n    \"display\": \"Visualizzazione\",\n    \"divider_thickness\": \"Spessore divisore\",\n    \"divider\": \"Divisore\",\n    \"dividers\": \"Divisori\",\n    \"drop_shadow\": \"Ombra esterna\",\n    \"empty_state_collection_info\": \"Mostrata prima che venga inserita una ricerca\",\n    \"empty_state_collection\": \"Collezione per stato vuoto\",\n    \"enable_filtering\": \"Filtri\",\n    \"enable_grid_density\": \"Controllo layout a griglia\",\n    \"enable_sorting\": \"Ordinamento\",\n    \"enable_zoom\": \"Abilita zoom\",\n    \"equal_columns\": \"Colonne uguali\",\n    \"expand_first_group\": \"Espandi primo gruppo\",\n    \"extend_media_to_screen_edge\": \"Estendi i contenuti multimediali fino al bordo dello schermo\",\n    \"extend_summary\": \"Estendi fino al bordo dello schermo\",\n    \"extra_large\": \"Molto grande\",\n    \"extra_small\": \"Molto piccolo\",\n    \"flag\": \"Bandiera\",\n    \"font_price\": \"Font del prezzo\",\n    \"font_weight\": \"Spessore font\",\n    \"font\": \"Font\",\n    \"full_width_first_image\": \"Prima immagine a larghezza intera\",\n    \"full_width_on_mobile\": \"Larghezza intera su dispositivo mobile\",\n    \"heading_preset\": \"Preimpostazione intestazione\",\n    \"hide_unselected_variant_media\": \"Nascondi contenuti multimediali delle varianti non selezionate\",\n    \"horizontal_gap\": \"Spaziatura orizzontale\",\n    \"horizontal_offset\": \"Scostamento orizzontale ombra\",\n    \"hover_behavior\": \"Comportamento al passaggio del mouse\",\n    \"icon_background\": \"Sfondo icona\",\n    \"icons\": \"Icone\",\n    \"image_border_radius\": \"Raggio dell'angolo dell'immagine\",\n    \"installments\": \"Rate\",\n    \"integrated_button\": \"Pulsante integrato\",\n    \"language_selector\": \"Selettore lingua\",\n    \"large\": \"Grande\",\n    \"left_padding\": \"Spaziatura interna sinistra\",\n    \"left\": \"Sinistra\",\n    \"letter_spacing\": \"Spaziatura tra lettere\",\n    \"limit_media_to_screen_height\": \"Vincola all'altezza dello schermo\",\n    \"limit_product_details_width\": \"Limita larghezza dettagli prodotto\",\n    \"link_preset\": \"Preimpostazione link\",\n    \"links\": \"Link\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Loop\",\n    \"make_details_sticky_desktop\": \"Fisso su desktop\",\n    \"max_width\": \"Larghezza massima\",\n    \"media_height\": \"Altezza contenuti multimediali\",\n    \"media_overlay\": \"Sovrapposizione contenuti multimediali\",\n    \"media_position\": \"Posizione contenuti multimediali\",\n    \"media_type\": \"Tipo di contenuto multimediale\",\n    \"media_width\": \"Larghezza contenuti multimediali\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Colonne su dispositivo mobile\",\n    \"mobile_height\": \"Altezza su dispositivo mobile\",\n    \"mobile_quick_add\": \"Aggiunta rapida su dispositivo mobile\",\n    \"motion_direction\": \"Direzione del movimento\",\n    \"motion\": \"Movimento\",\n    \"movement_direction\": \"Direzione del movimento\",\n    \"navigation_bar_color_scheme\": \"Schema di colori della barra di navigazione\",\n    \"navigation_bar\": \"Barra di navigazione\",\n    \"navigation\": \"Navigazione\",\n    \"open_new_tab\": \"Apri link in una nuova scheda\",\n    \"overlay_color\": \"Colore di sovrapposizione\",\n    \"overlay\": \"Sovrapposizione\",\n    \"padding_bottom\": \"Spaziatura interna inferiore\",\n    \"padding_horizontal\": \"Spaziatura interna orizzontale\",\n    \"padding_top\": \"Spaziatura interna superiore\",\n    \"page_width\": \"Larghezza pagina\",\n    \"pagination\": \"Impaginazione\",\n    \"placement\": \"Posizionamento\",\n    \"position\": \"Posizione\",\n    \"preset\": \"Preimpostazione\",\n    \"product_cards\": \"Schede prodotto\",\n    \"product_pages\": \"Pagine di prodotto\",\n    \"product_templates\": \"Modelli di prodotto\",\n    \"products\": \"Prodotti\",\n    \"quick_add\": \"Aggiunta rapida\",\n    \"ratio\": \"Proporzioni\",\n    \"regular\": \"Normale\",\n    \"review_count\": \"Conteggio recensioni\",\n    \"right\": \"Destra\",\n    \"row_height\": \"Altezza riga\",\n    \"row\": \"Riga\",\n    \"seller_note\": \"Consenti nota al venditore\",\n    \"shape\": \"Forma\",\n    \"show_as_accordion\": \"Mostra come accordion su dispositivo mobile\",\n    \"show_sale_price_first\": \"Mostra prima il prezzo promozionale\",\n    \"show_tax_info\": \"Informazioni fiscali\",\n    \"show\": \"Mostra\",\n    \"small\": \"Piccolo\",\n    \"speed\": \"Velocità\",\n    \"statement\": \"Estratto conto\",\n    \"sticky_header\": \"Header fisso\",\n    \"text_hierarchy\": \"Gerarchia del testo\",\n    \"text_presets\": \"Preimpostazioni testo\",\n    \"title\": \"Titolo\",\n    \"top\": \"Superiore\",\n    \"type\": \"Tipo\",\n    \"type_preset\": \"Preimpostazione testo\",\n    \"underline_thickness\": \"Spessore sottolineatura\",\n    \"variant_images\": \"Immagini della variante\",\n    \"vendor\": \"Venditore\",\n    \"vertical_gap\": \"Spaziatura verticale\",\n    \"vertical_offset\": \"Scostamento verticale ombra\",\n    \"vertical_on_mobile\": \"Verticale su dispositivo mobile\",\n    \"view_all_as_last_card\": \"\\\"Visualizza tutto\\\" come ultima scheda\",\n    \"weight\": \"Spessore\",\n    \"wrap\": \"A capo\",\n    \"read_only\": \"Sola lettura\",\n    \"always_stack_buttons\": \"Impila sempre i pulsanti\",\n    \"button_text_case\": \"Maiuscole/minuscole\",\n    \"custom_mobile_width\": \"Larghezza personalizzata per dispositivi mobili\",\n    \"gradient_direction\": \"Direzione sfumatura\",\n    \"headings\": \"Intestazioni\",\n    \"horizontal_padding\": \"Spaziatura interna orizzontale\",\n    \"overlay_style\": \"Stile di sovrapposizione\",\n    \"shadow_opacity\": \"Opacità ombra\",\n    \"show_filter_label\": \"Etichette di testo per i filtri applicati\",\n    \"show_swatch_label\": \"Etichette di testo per i campioni\",\n    \"show_count\": \"Mostra conteggio\",\n    \"transparent_background\": \"Sfondo trasparente\",\n    \"vertical_padding\": \"Spaziatura interna verticale\",\n    \"visibility\": \"Visibilità\",\n    \"account\": \"Account\",\n    \"align_baseline\": \"Allinea linea di base del testo\",\n    \"add_discount_code\": \"Consenti sconti nel carrello\",\n    \"background_overlay\": \"Sovrapposizione di sfondo\",\n    \"background_media\": \"Contenuti multimediali di sfondo\",\n    \"border_thickness\": \"Spessore bordo\",\n    \"bottom_row\": \"Riga inferiore\",\n    \"card_size\": \"Dimensione scheda\",\n    \"auto_open_cart_drawer\": \"L'opzione \\\"Aggiungi al carrello\\\" apre automaticamente il cassetto\",\n    \"collection_count\": \"Conteggio collezione\",\n    \"collection_title_case\": \"Maiuscole/minuscole titolo collezione\",\n    \"custom_liquid\": \"Codice Liquid\",\n    \"default\": \"Predefinito\",\n    \"default_logo\": \"Logo predefinito\",\n    \"divider_width\": \"Larghezza divisore\",\n    \"hide_logo_on_home_page\": \"Nascondi logo sulla homepage\",\n    \"inverse\": \"Inverso\",\n    \"inverse_logo\": \"Logo inverso\",\n    \"layout_style\": \"Stile\",\n    \"length\": \"Lunghezza\",\n    \"mobile_card_size\": \"Dimensione scheda su dispositivo mobile\",\n    \"mobile_pagination\": \"Impaginazione su dispositivo mobile\",\n    \"open_row_by_default\": \"Apri riga per impostazione predefinita\",\n    \"page\": \"Pagina\",\n    \"page_transition_enabled\": \"Transizione di pagina\",\n    \"product_and_card_title_case\": \"Maiuscole/minuscole titolo prodotto e scheda\",\n    \"product_title_case\": \"Maiuscole/minuscole titolo del prodotto\",\n    \"right_padding\": \"Spaziatura interna destra\",\n    \"search\": \"Cerca\",\n    \"search_icon\": \"Icona di ricerca\",\n    \"search_position\": \"Posizione\",\n    \"search_row\": \"Riga\",\n    \"show_author\": \"Autore\",\n    \"show_alignment\": \"Mostra allineamento\",\n    \"show_date\": \"Data\",\n    \"show_pickup_availability\": \"Mostra disponibilità per il ritiro\",\n    \"show_search\": \"Mostra ricerca\",\n    \"text_label_case\": \"Maiuscole/minuscole etichetta di testo\",\n    \"use_inverse_logo\": \"Usa logo inverso\",\n    \"product_corner_radius\": \"Raggio dell'angolo del prodotto\",\n    \"card_corner_radius\": \"Raggio dell'angolo della scheda\",\n    \"alignment_mobile\": \"Allineamento su dispositivo mobile\",\n    \"animation_repeat\": \"Ripeti animazione\",\n    \"blurred_reflection\": \"Riflesso sfocato\",\n    \"card_hover_effect\": \"Effetto al passaggio del mouse sulla scheda\",\n    \"inventory_threshold\": \"Soglia scorte in esaurimento\",\n    \"reflection_opacity\": \"Opacità riflesso\",\n    \"show_inventory_quantity\": \"Mostra quantità scorte in esaurimento\",\n    \"transition_to_main_product\": \"Transizione da scheda prodotto a pagina di prodotto\",\n    \"show_second_image_on_hover\": \"Mostra la seconda immagine al passaggio del mouse\",\n    \"media\": \"Contenuti multimediali\",\n    \"product_card_carousel\": \"Mostra carosello\",\n    \"media_fit\": \"Adattamento contenuti multimediali\",\n    \"scroll_speed\": \"Tempo fino al prossimo annuncio\",\n    \"show_powered_by_shopify\": \"Mostra \\\"Powered by Shopify\\\"\",\n    \"seller_note_open_by_default\": \"Apri nota al venditore per impostazione predefinita\",\n    \"gift_card_form\": \"Modulo buono regalo\",\n    \"add_to_cart_animation\": \"Aggiungi al carrello\",\n    \"custom_link\": \"Link personalizzato\",\n    \"product_custom_property\": {\n      \"heading\": \"Intestazione\",\n      \"description\": \"Descrizione\",\n      \"key\": \"Nome proprietà\",\n      \"key_info\": \"Non può essere vuoto e deve essere univoco per ogni blocco. Viene visualizzato nel carrello, al check-out e nei dettagli dell’ordine.\",\n      \"placeholder_text\": \"Testo segnaposto\",\n      \"default_heading\": \"Personalizza il tuo prodotto\",\n      \"default_placeholder\": \"Inserisci le tue istruzioni speciali\",\n      \"default_property_key\": \"Istruzioni speciali\",\n      \"max_length\": \"Numero massimo di caratteri\",\n      \"required\": \"Input obbligatorio per aggiungere l'articolo al carrello\",\n      \"input_type\": \"Tipo di input\",\n      \"input_type_text\": \"Testo\",\n      \"input_type_checkbox\": \"Casella di spunta\",\n      \"content_settings\": \"Impostazioni del contenuto\",\n      \"buyers_input\": \"Input dell'acquirente\",\n      \"checkbox_label\": \"Etichetta della casella di spunta\",\n      \"default_checkbox_label\": \"Includi confezione regalo\",\n      \"heading_preset\": \"Intestazione\",\n      \"description_preset\": \"Descrizione\",\n      \"input_preset\": \"Input\",\n      \"checkbox_preset\": \"Etichetta della casella di spunta\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Conteggio post\",\n    \"animation\": \"Animazione\",\n    \"top_level_size\": \"Dimensione primo livello\",\n    \"empty_cart_button_link\": \"Link pulsante per carrello vuoto\",\n    \"auto_load_products\": \"Carica automaticamente i prodotti durante lo scorrimento\",\n    \"products_per_page\": \"Prodotti per pagina\",\n    \"custom_mobile_media\": \"Mostra contenuti multimediali diversi su mobile\",\n    \"stack_media_on_mobile\": \"Impila contenuti multimediali\",\n    \"media_type_1\": \"Tipo di contenuto multimediale\",\n    \"media_type_2\": \"Tipo di contenuto multimediale 2\",\n    \"full_frame_on_mobile\": \"A larghezza intera su dispositivo mobile\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"Varianti per pagina\",\n    \"image_1\": \"Immagine 1\",\n    \"image_2\": \"Immagine 2\",\n    \"after_image\": \"Immagine successiva\",\n    \"before_image\": \"Immagine precedente\",\n    \"cs_slider_style\": \"Stile slider\",\n    \"cs_slider_color\": \"Colore slider\",\n    \"cs_slider_inner_color\": \"Colore interno slider\",\n    \"text_on_images\": \"Testo sulle immagini\",\n    \"card_height\": \"Altezza scheda\",\n    \"submenu_size\": \"Dimensione sottomenu\",\n    \"desktop_position\": \"Posizione su desktop\",\n    \"desktop_pagination\": \"Impaginazione desktop\",\n    \"bullseye_color\": \"Colore interno\",\n    \"hotspot_color\": \"Colore hotspot\",\n    \"product_price_typography\": \"Tipografia prezzo del prodotto\",\n    \"product_title_typography\": \"Tipografia titolo del prodotto\",\n    \"x_position\": \"Posizione orizzontale\",\n    \"y_position\": \"Posizione verticale\",\n    \"enable_sticky_add_to_cart\": \"Barra fissa per l'aggiunta al carrello\",\n    \"sticky_add_to_cart\": \"Aggiunta al carrello fissa\",\n    \"actions_display_style\": \"Stile menu\"\n  },\n  \"options\": {\n    \"apple\": \"Mela\",\n    \"arrow\": \"Freccia\",\n    \"auto\": \"Automatico\",\n    \"banana\": \"Banana\",\n    \"bottle\": \"Bottiglia\",\n    \"box\": \"Riquadro\",\n    \"buttons\": \"Pulsanti\",\n    \"carrot\": \"Carota\",\n    \"center\": \"Centrato\",\n    \"chat_bubble\": \"Fumetto chat\",\n    \"clipboard\": \"Appunti\",\n    \"contain\": \"Contieni\",\n    \"counter\": \"Contatore\",\n    \"cover\": \"Copri\",\n    \"custom\": \"Personalizzato\",\n    \"dairy_free\": \"Senza latticini\",\n    \"dairy\": \"Latticini\",\n    \"default\": \"Predefinito\",\n    \"dropdowns\": \"Menu a discesa\",\n    \"dots\": \"Punti\",\n    \"dryer\": \"Asciugatrice\",\n    \"end\": \"Fine\",\n    \"eye\": \"Occhio\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Riempi\",\n    \"fire\": \"Fuoco\",\n    \"fit\": \"Adatta\",\n    \"full\": \"A tutta larghezza\",\n    \"full_and_page\": \"Sfondo a tutta larghezza, contenuto a larghezza di pagina\",\n    \"gluten_free\": \"Senza glutine\",\n    \"heading\": \"Intestazione\",\n    \"heart\": \"Cuore\",\n    \"horizontal\": \"Orizzontale\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Ferro da stiro\",\n    \"landscape\": \"Orizzontale\",\n    \"large\": \"Grande\",\n    \"leaf\": \"Foglia\",\n    \"leather\": \"Pelle\",\n    \"lg\": \"L\",\n    \"lightning_bolt\": \"Fulmine\",\n    \"link\": \"Link\",\n    \"lipstick\": \"Rossetto\",\n    \"lock\": \"Lucchetto\",\n    \"lowercase\": \"minuscolo\",\n    \"m\": \"M\",\n    \"map_pin\": \"Puntina da mappa\",\n    \"medium\": \"Medio\",\n    \"none\": \"Nessuno\",\n    \"numbers\": \"Numeri\",\n    \"nut_free\": \"Senza frutta a guscio\",\n    \"outline\": \"Contorno\",\n    \"page\": \"Pagina\",\n    \"pants\": \"Pantaloni\",\n    \"paw_print\": \"Impronta di zampa\",\n    \"pepper\": \"Pepe\",\n    \"perfume\": \"Profumo\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Aereo\",\n    \"plant\": \"Pianta\",\n    \"portrait\": \"Verticale\",\n    \"price_tag\": \"Cartellino del prezzo\",\n    \"question_mark\": \"Punto interrogativo\",\n    \"recycle\": \"Riciclo\",\n    \"return\": \"Reso\",\n    \"ruler\": \"Righello\",\n    \"s\": \"S\",\n    \"sentence\": \"Frase\",\n    \"serving_dish\": \"Piatto da portata\",\n    \"shirt\": \"Camicia\",\n    \"shoe\": \"Scarpa\",\n    \"silhouette\": \"Silhouette\",\n    \"small\": \"Piccolo\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Fiocco di neve\",\n    \"solid\": \"Tinta unita\",\n    \"space_between\": \"Spazio tra\",\n    \"square\": \"Quadrato\",\n    \"star\": \"Stella\",\n    \"start\": \"Inizio\",\n    \"stopwatch\": \"Cronometro\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Camion\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Maiuscolo\",\n    \"vertical\": \"Verticale\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Lavaggio\",\n    \"circle\": \"Cerchio\",\n    \"swatches\": \"Campioni\",\n    \"full_and_page_offset_left\": \"Sfondo a tutta larghezza, contenuto a larghezza di pagina, scostamento a sinistra\",\n    \"full_and_page_offset_right\": \"Sfondo a tutta larghezza, contenuto a larghezza di pagina, scostamento a destra\",\n    \"offset_left\": \"Scostamento a sinistra\",\n    \"offset_right\": \"Scostamento a destra\",\n    \"page_center_aligned\": \"Pagina, allineato al centro\",\n    \"page_left_aligned\": \"Pagina, allineato a sinistra\",\n    \"page_right_aligned\": \"Pagina, allineato a destra\",\n    \"button\": \"Pulsante\",\n    \"caption\": \"Didascalia\",\n    \"h1\": \"Intestazione 1\",\n    \"h2\": \"Intestazione 2\",\n    \"h3\": \"Intestazione 3\",\n    \"h4\": \"Intestazione 4\",\n    \"h5\": \"Intestazione 5\",\n    \"h6\": \"Intestazione 6\",\n    \"paragraph\": \"Paragrafo\",\n    \"primary\": \"Primario\",\n    \"secondary\": \"Secondario\",\n    \"tertiary\": \"Terziario\",\n    \"chevron_left\": \"Chevron a sinistra\",\n    \"chevron_right\": \"Chevron a destra\",\n    \"diamond\": \"Diamante\",\n    \"grid\": \"Griglia\",\n    \"parallelogram\": \"Parallelogramma\",\n    \"rounded\": \"Arrotondato\",\n    \"fit_content\": \"Adatta\",\n    \"pills\": \"Pillole\",\n    \"heavy\": \"Spesso\",\n    \"thin\": \"Sottile\",\n    \"drawer\": \"Menu a comparsa\",\n    \"preview\": \"Anteprima\",\n    \"text\": \"Testo\",\n    \"video_uploaded\": \"Caricato\",\n    \"video_external_url\": \"URL esterno\",\n    \"up\": \"Verso l'alto\",\n    \"down\": \"Giù\",\n    \"gradient\": \"Gradiente\",\n    \"aspect_ratio\": \"Proporzioni\",\n    \"fixed\": \"Fisso\",\n    \"pixel\": \"Pixel\",\n    \"percent\": \"Percentuale\",\n    \"above_carousel\": \"Sopra il carosello\",\n    \"all\": \"Tutti\",\n    \"always\": \"Sempre\",\n    \"arrows_large\": \"Frecce grandi\",\n    \"arrows\": \"Frecce\",\n    \"balance\": \"Bilanciato\",\n    \"bento\": \"Bento\",\n    \"black\": \"Nero\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Corpo del testo (Grande)\",\n    \"body_regular\": \"Corpo del testo (Normale)\",\n    \"body_small\": \"Corpo del testo (Piccolo)\",\n    \"bold\": \"Grassetto\",\n    \"bottom_left\": \"In basso a sinistra\",\n    \"bottom_right\": \"In basso a destra\",\n    \"bottom\": \"Inferiore\",\n    \"capitalize\": \"Iniziali maiuscole\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carosello\",\n    \"check_box\": \"Casella di spunta\",\n    \"chevron_large\": \"Chevron grandi\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevron\",\n    \"classic\": \"Classico\",\n    \"collection_images\": \"Immagini della collezione\",\n    \"color\": \"Colore\",\n    \"complementary\": \"Complementari\",\n    \"dissolve\": \"Dissolvenza\",\n    \"dotted\": \"Punteggiato\",\n    \"editorial\": \"Editoriale\",\n    \"extra_large\": \"Molto grande\",\n    \"extra_small\": \"Molto piccolo\",\n    \"featured_collections\": \"Collezioni in evidenza\",\n    \"featured_products\": \"Prodotti in evidenza\",\n    \"font_primary\": \"Primario\",\n    \"font_secondary\": \"Secondario\",\n    \"font_tertiary\": \"Terziario\",\n    \"forward\": \"In avanti\",\n    \"full_screen\": \"A schermo intero\",\n    \"heading_extra_large\": \"Intestazione (Molto grande)\",\n    \"heading_extra_small\": \"Intestazione (Molto piccola)\",\n    \"heading_large\": \"Intestazione (Grande)\",\n    \"heading_regular\": \"Intestazione (Normale)\",\n    \"heading_small\": \"Intestazione (Piccola)\",\n    \"icon\": \"Icona\",\n    \"image\": \"Immagine\",\n    \"input\": \"Input\",\n    \"inside_carousel\": \"All'interno del carosello\",\n    \"inverse_large\": \"Inverso grande\",\n    \"inverse\": \"Inverso\",\n    \"large_arrows\": \"Frecce grandi\",\n    \"large_chevrons\": \"Chevron grandi\",\n    \"left\": \"Sinistra\",\n    \"light\": \"Chiaro\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Largo\",\n    \"media_first\": \"Prima i contenuti multimediali\",\n    \"media_second\": \"Secondi i contenuti multimediali\",\n    \"modal\": \"Modale\",\n    \"narrow\": \"Stretto\",\n    \"never\": \"Mai\",\n    \"next_to_carousel\": \"Accanto al carosello\",\n    \"normal\": \"Normale\",\n    \"nowrap\": \"Nessun a capo\",\n    \"off_media\": \"Fuori dai contenuti multimediali\",\n    \"on_media\": \"Sui contenuti multimediali\",\n    \"on_scroll_up\": \"Scorrendo verso l'alto\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pillola\",\n    \"plus\": \"Più\",\n    \"pretty\": \"Carino\",\n    \"price\": \"Prezzo\",\n    \"primary_style\": \"Stile principale\",\n    \"rectangle\": \"Rettangolo\",\n    \"regular\": \"Normale\",\n    \"related\": \"Correlati\",\n    \"reverse\": \"Inverti\",\n    \"rich_text\": \"Rich text\",\n    \"right\": \"Destra\",\n    \"secondary_style\": \"Stile secondario\",\n    \"semibold\": \"Semigrassetto\",\n    \"shaded\": \"Ombreggiato\",\n    \"show_second_image\": \"Mostra seconda immagine\",\n    \"single\": \"Singolo\",\n    \"slide_left\": \"Scorri a sinistra\",\n    \"slide_up\": \"Scorri verso l'alto\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"In pila\",\n    \"text_only\": \"Solo testo\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniature\",\n    \"tight\": \"Stretto\",\n    \"top_left\": \"In alto a sinistra\",\n    \"top_right\": \"In alto a destra\",\n    \"top\": \"Superiore\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Sottolineato\",\n    \"video\": \"Video\",\n    \"wide\": \"Largo\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"Sotto l'immagine\",\n    \"button_primary\": \"Pulsante principale\",\n    \"button_secondary\": \"Pulsante secondario\",\n    \"hidden\": \"Non in elenco\",\n    \"on_image\": \"Sull'immagine\",\n    \"spotlight\": \"Spotlight\",\n    \"compact\": \"Compatto\",\n    \"standard\": \"Standard\",\n    \"accent\": \"Evidenziato\",\n    \"body\": \"Corpo del testo\",\n    \"crop_to_fit\": \"Ritaglia per adattare\",\n    \"hint\": \"Suggerimento\",\n    \"maintain_aspect_ratio\": \"Mantieni proporzioni\",\n    \"off\": \"Disattivato\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"subheading\": \"Sottotitolo\",\n    \"blur\": \"Sfumatura\",\n    \"lift\": \"Sollevato\",\n    \"reveal\": \"Rivela\",\n    \"scale\": \"Scala\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Con suggerimenti\",\n    \"below_media\": \"Sotto i contenuti multimediali\",\n    \"full_frame\": \"A schermo intero\",\n    \"icons\": \"Icone\"\n  },\n  \"content\": {\n    \"advanced\": \"Avanzate\",\n    \"background_image\": \"Immagine di sfondo\",\n    \"background_video\": \"Video di sfondo\",\n    \"block_size\": \"Dimensioni del blocco\",\n    \"borders\": \"Bordi\",\n    \"describe_the_video_for\": \"Descrivi il video per i clienti che utilizzano utilità per la lettura dello schermo. [Maggiori informazioni](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Dimensioni della sezione\",\n    \"slideshow_width\": \"Larghezza slide\",\n    \"typography\": \"Tipografia\",\n    \"width_is_automatically_optimized\": \"La larghezza viene ottimizzata automaticamente per i dispositivi mobili.\",\n    \"complementary_products\": \"I prodotti complementari devono essere configurati utilizzando l'app Search & Discovery. [Maggiori informazioni](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Le colonne verranno ottimizzate automaticamente per i dispositivi mobili\",\n    \"content_width\": \"La larghezza del contenuto si applica solo quando la larghezza della sezione è impostata su \\\"A tutta larghezza\\\".\",\n    \"responsive_font_sizes\": \"Le dimensioni si adattano automaticamente a tutte le dimensioni dello schermo\",\n    \"buttons\": \"Pulsanti\",\n    \"swatches\": \"Campioni\",\n    \"variant_settings\": \"Impostazioni delle varianti\",\n    \"background\": \"Sfondo\",\n    \"cards_layout\": \"Layout delle schede\",\n    \"section_layout\": \"Layout della sezione\",\n    \"mobile_size\": \"Dimensioni per dispositivi mobili\",\n    \"appearance\": \"Aspetto\",\n    \"arrows\": \"Frecce\",\n    \"body_size\": \"Dimensioni del corpo del testo\",\n    \"bottom_row_appearance\": \"Aspetto della riga inferiore\",\n    \"carousel_navigation\": \"Navigazione carosello\",\n    \"carousel_pagination\": \"Impaginazione carosello\",\n    \"copyright\": \"Copyright\",\n    \"edit_logo_in_theme_settings\": \"Modifica il logo nelle [impostazioni del tema](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Modifica la formattazione del prezzo nelle [impostazioni del tema](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Modifica lo stile delle varianti nelle [impostazioni del tema](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Le iscrizioni aggiungono [profili cliente](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Affinché il pulsante venga visualizzato, il canale Shop deve essere installato e Shop Pay attivato. [Maggiori informazioni](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Font\",\n    \"grid\": \"Griglia\",\n    \"heading_size\": \"Dimensioni intestazione\",\n    \"image\": \"Immagine\",\n    \"input\": \"Input\",\n    \"layout\": \"Layout\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Spaziatura interna link\",\n    \"localization\": \"Localizzazione\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margine\",\n    \"media\": \"Contenuti multimediali\",\n    \"media_1\": \"Contenuto multimediale 1\",\n    \"media_2\": \"Contenuto multimediale 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout per dispositivi mobili\",\n    \"padding\": \"Spaziatura interna\",\n    \"padding_desktop\": \"Spaziatura interna per desktop\",\n    \"paragraph\": \"Paragrafo\",\n    \"policies\": \"Informative\",\n    \"popup\": \"Pop up\",\n    \"search\": \"Cerca\",\n    \"size\": \"Dimensioni\",\n    \"social_media\": \"Social media\",\n    \"submit_button\": \"Pulsante di invio\",\n    \"text_presets\": \"Preimpostazioni del testo\",\n    \"transparent_background\": \"Sfondo trasparente\",\n    \"typography_primary\": \"Tipografia primaria\",\n    \"typography_secondary\": \"Tipografia secondaria\",\n    \"typography_tertiary\": \"Tipografia terziaria\",\n    \"mobile_width\": \"Larghezza per dispositivi mobili\",\n    \"width\": \"Larghezza\",\n    \"images\": \"Immagini\",\n    \"visible_if_collection_has_more_products\": \"Visibile se la collezione ha più prodotti di quelli mostrati\",\n    \"carousel\": \"Carosello\",\n    \"colors\": \"Colori\",\n    \"collection_page\": \"Pagina di collezione\",\n    \"customer_account\": \"Account cliente\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Modifica la collezione per lo stato vuoto nelle [impostazioni del tema](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Layout a griglia\",\n    \"home_page\": \"Homepage\",\n    \"inverse_logo_info\": \"Utilizzato quando lo sfondo dell'header trasparente è impostato su Inverso\",\n    \"manage_customer_accounts\": \"[Gestisci la visibilità](/admin/settings/customer_accounts) nelle impostazioni dell'account cliente. Gli account legacy non sono supportati.\",\n    \"manage_policies\": \"[Gestisci le informative](/admin/settings/legal)\",\n    \"product_page\": \"Pagina del prodotto\",\n    \"text\": \"Testo\",\n    \"thumbnails\": \"Miniature\",\n    \"visibility\": \"Visibilità\",\n    \"app_required_for_ratings\": \"Per le valutazioni del prodotto è necessaria un'app. [Maggiori informazioni](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Icona\",\n    \"manage_store_name\": \"[Gestisci il nome del negozio](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Visualizza la collezione dalla sezione principale\",\n    \"resource_reference_collection_card_image\": \"Visualizza l'immagine dalla collezione principale\",\n    \"resource_reference_collection_title\": \"Visualizza il titolo dalla collezione principale\",\n    \"resource_reference_product\": \"Si collega automaticamente al prodotto principale\",\n    \"resource_reference_product_card\": \"Visualizza il prodotto dalla sezione principale\",\n    \"resource_reference_product_inventory\": \"Visualizza le scorte dal prodotto principale\",\n    \"resource_reference_product_price\": \"Visualizza il prezzo dal prodotto principale\",\n    \"resource_reference_product_recommendations\": \"Visualizza i suggerimenti in base al prodotto principale\",\n    \"resource_reference_product_review\": \"Visualizza le recensioni dal prodotto principale\",\n    \"resource_reference_product_swatches\": \"Visualizza i campioni dal prodotto principale\",\n    \"resource_reference_product_title\": \"Visualizza il titolo dal prodotto principale\",\n    \"resource_reference_product_variant_picker\": \"Visualizza le varianti dal prodotto principale\",\n    \"resource_reference_product_media\": \"Visualizza i contenuti multimediali dal prodotto principale\",\n    \"product_media\": \"Contenuti multimediali del prodotto\",\n    \"section_link\": \"Link della sezione\",\n    \"gift_card_form_description\": \"I clienti possono inviare buoni regalo all'email di un destinatario con un messaggio personale. [Maggiori informazioni](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Intestazione\",\n    \"resource_reference_product_custom_property\": \"Aggiungi campi di input personalizzabili per raccogliere informazioni personalizzate che verranno aggiunte a questa voce dell'ordine e saranno visibili nei dettagli dell'ordine.\",\n    \"block_link\": \"Link del blocco\",\n    \"submenu_feature\": \"Funzionalità del sottomenu\",\n    \"cart_features\": \"Funzionalità del carrello\",\n    \"email_signup\": \"Iscrizione alla newsletter\",\n    \"mobile_media\": \"Contenuti multimediali per dispositivi mobili\",\n    \"mobile_media_2\": \"Contenuto multimediale per dispositivi mobili 2\",\n    \"navigation\": \"Navigazione\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Posizione popover\",\n    \"resource_reference_product_sku\": \"Mostra lo SKU del prodotto principale\",\n    \"content_layout\": \"Layout del contenuto\",\n    \"mobile_media_1\": \"Contenuto multimediale per mobile 1\",\n    \"utilities\": \"Utilità\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Condividi informazioni sul tuo brand con i clienti. Descrivi un prodotto, fai annunci o dai il benvenuto ai clienti nel tuo negozio.</p>\",\n    \"bestseller_h2\": \"<h2>Bestseller</h2>\",\n    \"bestseller_h3\": \"<h3>Bestseller</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Crediamo nella creazione di prodotti migliori</p>\",\n    \"contact_us\": \"<h2>Contattaci</h2>\",\n    \"discover_bestsellers\": \"<p>Scopri i bestseller che hanno conquistato i nostri clienti con il loro mix perfetto di funzionalità e stile.</p>\",\n    \"everythings_starts_with_why\": \"<p>Tutto ciò che facciamo parte da un perché</p>\",\n    \"explore_latest_products\": \"<p>Esplora i nostri ultimi prodotti.</p>\",\n    \"faq\": \"<h3>Domande frequenti</h3>\",\n    \"first_to_know\": \"<p>Sii il primo a scoprire le nuove collezioni e le offerte speciali. </p>\",\n    \"free_returns\": \"<p>Resi gratuiti entro 30 giorni</p>\",\n    \"free_shipping_over\": \"<p>Spedizione gratuita per ordini superiori a 50 $</p>\",\n    \"goal_for_every_customer\": \"<p>Il nostro obiettivo è la totale soddisfazione di ogni cliente. In caso contrario, contattaci e faremo del nostro meglio per trovare una soluzione insieme a te.</p>\",\n    \"home_to_shirts\": \"<p>Home → Camicie</p>\",\n    \"intentional_design\": \"<h2>Design intenzionale</h2>\",\n    \"introducing_h2\": \"<h2><em>Ti presentiamo</em></h2>\",\n    \"latest_products\": \"<p>Ti presentiamo i nostri ultimi prodotti, realizzati appositamente per la stagione. Acquista i tuoi preferiti prima che finiscano!</p>\",\n    \"made_local_and_global\": \"<p>I nostri prodotti sono realizzati sia a livello locale che globale. Selezioniamo attentamente i nostri partner di produzione per garantire prodotti di alta qualità a un prezzo equo.</p>\",\n    \"made_with_care_h2\": \"<h2>Realizzati con cura</h2>\",\n    \"made_with_care_extended\": \"<p>Realizzato con cura e amato incondizionatamente dai nostri clienti, questo bestseller supera ogni aspettativa.</p>\",\n    \"made_with_care\": \"<p>Realizzati con cura e amati incondizionatamente dai nostri clienti.</p>\",\n    \"make_things_better_extended\": \"<p>Realizziamo articoli che funzionano meglio e durano più a lungo. I nostri prodotti risolvono problemi reali con un design pulito e materiali autentici.</p>\",\n    \"make_things_better\": \"<p>Realizziamo articoli che funzionano meglio e durano più a lungo.</p>\",\n    \"may_also_like\": \"<h4>Potrebbe interessarti anche</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nuovi arrivi</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nuovi arrivi</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nuovi arrivi</h3>\",\n    \"product_launch\": \"<p>Dai un'occhiata al dietro le quinte del lancio del nostro ultimo prodotto.</p>\",\n    \"product_story\": \"<p>Al centro di ogni prodotto c'è una storia unica, guidata dalla nostra passione per la qualità e l'innovazione. Ogni articolo migliora la tua vita quotidiana e suscita gioia.</p>\",\n    \"real_people\": \"<p>Persone vere che realizzano prodotti fantastici</p>\",\n    \"related_product\": \"<h3>Prodotti correlati</h3>\",\n    \"return_policy\": \"<h2>Qual è l'informativa sui resi?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 recensioni</p>\",\n    \"shipping_based_on_location\": \"<p>La spedizione viene calcolata in base alla tua posizione e agli articoli presenti nel tuo ordine. Conoscerai sempre il prezzo della spedizione prima di completare l'acquisto.</p>\",\n    \"shop_by_collection\": \"<h3>Acquista per collezione</h3>\",\n    \"signature_products\": \"<h2>Il nostro prodotto di punta</h2>\",\n    \"styled_with\": \"<h3>Abbinato con</h3>\",\n    \"subscribe\": \"<h2>Iscriviti alle nostre email</h2>\",\n    \"team_with_goal\": \"<h2>Un team con un obiettivo</h2>\",\n    \"unable_to_accept_returns\": \"<p>Non possiamo accettare resi su determinati articoli. Questi articoli saranno chiaramente contrassegnati prima dell'acquisto.</p>\",\n    \"work_quickly_to_ship\": \"<p>Lavoreremo rapidamente per spedire il tuo ordine il prima possibile. Una volta spedito l'ordine, riceverai un'email con ulteriori informazioni. I tempi di consegna variano a seconda della tua posizione.</p>\",\n    \"join_our_email_list\": \"<h2>Iscriviti alla nostra mailing list</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Ricevi offerte esclusive e l'accesso anticipato ai nuovi prodotti.</p>\",\n    \"artistry_in_action\": \"<p>L'arte in azione </p>\",\n    \"authentic_materials\": \"<p>Materiali autentici, senza compromessi </p>\",\n    \"bold_style_recognizable\": \"<p>Uno stile audace e riconoscibile ovunque</p>\",\n    \"discover_elevated_design\": \"<p>Scopri un design di livello superiore </p>\",\n    \"expert_construction_finish\": \"<p>Lavorazione esperta e una finitura impeccabile</p>\",\n    \"made_to_last\": \"<p>Fatto per durare </p>\",\n    \"pieces_better_with_time\": \"<p>Capi che migliorano con il tempo e l'uso </p>\",\n    \"quality_you_can_feel\": \"<h2>La qualità che puoi toccare con mano</h2>\",\n    \"uncompromising_standards\": \"<p>Standard senza compromessi </p>\",\n    \"featured_collection_h2\": \"<h2>Collezione in evidenza</h2>\",\n    \"shop_collection\": \"<p>Scopri la nostra collezione curata con i nostri articoli preferiti, scelti per unire stile e qualità.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Acquista ora\",\n    \"collapsible_row\": \"Riga comprimibile\",\n    \"heading\": \"Intestazione\",\n    \"email_signup_button_label\": \"Iscriviti\",\n    \"accordion_heading\": \"Intestazione accordion\",\n    \"contact_form_button_label\": \"Invia\",\n    \"popup_link\": \"Link pop-up\",\n    \"sign_up\": \"Iscriviti\",\n    \"welcome_to_our_store\": \"Ti diamo il benvenuto nel nostro negozio\",\n    \"be_bold\": \"Sii audace.\",\n    \"shop_our_latest_arrivals\": \"Acquista i nostri ultimi arrivi!\",\n    \"are_purchases_final_sale\": \"Ci sono acquisti per cui non è previsto il reso?\",\n    \"care_instructions\": \"Istruzioni per la cura\",\n    \"cart\": \"Carrello\",\n    \"discover_collection\": \"Scopri la collezione\",\n    \"fit\": \"vestibilità\",\n    \"how_much_for_shipping\": \"Qual è il costo di spedizione?\",\n    \"learn_more\": \"Scopri di più\",\n    \"manufacturing\": \"Produzione\",\n    \"materials\": \"Materiali\",\n    \"return_policy\": \"Politica di reso\",\n    \"shipping\": \"Spedizione\",\n    \"shop_now_button_label\": \"Acquista ora\",\n    \"sign_up_button_label\": \"Iscriviti\",\n    \"submit_button_label\": \"Invia\",\n    \"up_the_ante\": \"Alza\\nla\\nposta\",\n    \"view_all_button_label\": \"Visualizza tutto\",\n    \"what_is_return_policy\": \"Qual è la politica di reso?\",\n    \"when_will_order_arrive\": \"Quando riceverò il mio ordine?\",\n    \"where_are_products_made\": \"Dove vengono fabbricati i tuoi prodotti?\",\n    \"trending_now\": \"Di tendenza\",\n    \"shop_the_look\": \"Acquista il look\",\n    \"bestsellers\": \"Bestseller\",\n    \"featured_collection\": \"Collezione in evidenza\",\n    \"new_arrivals\": \"Nuovi arrivi\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Sui dispositivi mobili viene sempre utilizzato il carosello.\",\n    \"video_alt_text\": \"Descrivi il video per gli utenti di tecnologie assistive\",\n    \"video_autoplay\": \"I video saranno senza audio per impostazione predefinita\",\n    \"video_external\": \"Usa un URL di YouTube o Vimeo\",\n    \"carousel_hover_behavior_not_supported\": \"Il passaggio del mouse su \\\"Carosello\\\" non è supportato quando il tipo \\\"Carosello\\\" è selezionato a livello di sezione\",\n    \"grid_layout_on_mobile\": \"Il layout a griglia viene utilizzato per i dispositivi mobili\",\n    \"logo_font\": \"Si applica solo quando non è selezionato un logo\",\n    \"checkout_buttons\": \"Consente agli acquirenti di eseguire il check-out più velocemente e può migliorare la conversione. [Maggiori informazioni](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Intestazione personalizzata\",\n    \"edit_presets_in_theme_settings\": \"Modifica le preimpostazioni nelle [impostazioni del tema](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Personalizza i filtri con l'[app Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"manage_countries_regions\": \"[Gestisci paesi/aree geografiche](/admin/settings/markets)\",\n    \"manage_languages\": \"[Gestisci lingue](/admin/settings/languages)\",\n    \"transparent_background\": \"Controlla ogni modello in cui viene applicato lo sfondo trasparente per verificarne la leggibilità\",\n    \"aspect_ratio_adjusted\": \"Regolato in alcuni layout\",\n    \"custom_liquid\": \"Aggiungi snippet di app o altro codice per creare personalizzazioni avanzate. [Maggiori informazioni](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Utilizzato per filtri applicati, codici sconto e suggerimenti di ricerca\",\n    \"applies_on_image_only\": \"Si applica solo alle immagini\",\n    \"hover_effects\": \"Si applica alle schede di prodotto e di collezione\",\n    \"hide_logo_on_home_page_help\": \"Il logo rimarrà visibile quando l'header permanente è attivo\",\n    \"media_type_info\": \"Le funzionalità vengono popolate dai link del menu\",\n    \"logo_height\": \"Riguarda solo il logo dell’header\",\n    \"actions_display_style\": \"Le icone vengono sempre usate sui dispositivi mobili\"\n  },\n  \"categories\": {\n    \"product_list\": \"Collezione in evidenza\",\n    \"basic\": \"Base\",\n    \"collection\": \"Collezione\",\n    \"collection_list\": \"Elenco delle collezioni\",\n    \"footer\": \"Footer\",\n    \"forms\": \"Moduli\",\n    \"header\": \"Header\",\n    \"layout\": \"Layout\",\n    \"links\": \"Link\",\n    \"product\": \"Prodotto\",\n    \"decorative\": \"Decorativo\",\n    \"banners\": \"Banner\",\n    \"collections\": \"Collezioni\",\n    \"custom\": \"Personalizzato\",\n    \"products\": \"Prodotti\",\n    \"other_sections\": \"Altro\",\n    \"storytelling\": \"Storytelling\",\n    \"text\": \"Testo\"\n  }\n}\n"
  },
  {
    "path": "locales/ja.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"ビデオを読み込む: {{ description }}\",\n    \"sold_out\": \"売り切れ\",\n    \"email_signup\": {\n      \"label\": \"メール\",\n      \"placeholder\": \"メールアドレス\",\n      \"success\": \"ご登録ありがとうございます！\"\n    },\n    \"filter\": \"フィルター\",\n    \"payment_methods\": \"決済方法\",\n    \"contact_form\": {\n      \"name\": \"名前\",\n      \"email\": \"メールアドレス\",\n      \"phone\": \"電話\",\n      \"comment\": \"コメント\",\n      \"post_success\": \"お問い合わせいただきありがとうございます。早急に返信いたします。\",\n      \"error_heading\": \"以下を確認してください。\"\n    },\n    \"slider_label\": \"スライダー\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3Dモデルを再生\",\n    \"play_video\": \"ビデオを再生\",\n    \"unit_price\": \"単価\",\n    \"country_results_count\": \"{{ count }}件の結果\",\n    \"slideshow_pause\": \"スライドショーを一時停止\",\n    \"slideshow_play\": \"スライドショーを再生\",\n    \"remove_item\": \"{{ title}}を削除する\",\n    \"skip_to_text\": \"コンテンツにスキップ\",\n    \"skip_to_product_info\": \"商品情報にスキップ\",\n    \"skip_to_results_list\": \"結果リストにスキップ\",\n    \"new_window\": \"新しいウィンドウで開きます。\",\n    \"slideshow_next\": \"次のスライド\",\n    \"slideshow_previous\": \"前のスライド\",\n    \"close_dialog\": \"ダイアログを閉じる\",\n    \"reset_search\": \"検索をリセットする\",\n    \"search_results_count\": \"「{{ query }}」の検索結果{{ count }}件\",\n    \"search_results_no_results\": \"「{{ query }}」の検索結果は見つかりませんでした\",\n    \"filters\": \"絞り込み\",\n    \"filter_count\": {\n      \"one\": \"{{ count }}フィルターを適用しました\",\n      \"other\": \"{{ count }}フィルターを適用しました\"\n    },\n    \"account\": \"アカウント\",\n    \"cart\": \"カート\",\n    \"cart_count\": \"カート内の合計アイテム数\",\n    \"menu\": \"メニュー\",\n    \"country_region\": \"国 / 地域\",\n    \"slide_status\": \"スライド {{ index }}/{{ length }}\",\n    \"scroll_to\": \"{{ title }}までスクロール\",\n    \"loading_product_recommendations\": \"商品のおすすめを読み込んでいます\",\n    \"discount\": \"クーポンコードを適用する\",\n    \"discount_menu\": \"ディスカウントコード\",\n    \"discount_applied\": \"適用クーポンコード:{{ code }}\",\n    \"pause_video\": \"動画を一時停止\",\n    \"inventory_status\": \"在庫ステータス\",\n    \"find_country\": \"国を探す\",\n    \"localization_region_and_language\": \"地域と言語セレクター\",\n    \"decrease_quantity\": \"数量を減らす\",\n    \"increase_quantity\": \"数量を増やす\",\n    \"quantity\": \"数量\",\n    \"rating\": \"この商品の評価は、5段階中{{ rating }}です\",\n    \"nested_product\": \"{{ parent_title }}向けの{{ product_title }}\",\n    \"remove\": \"削除\",\n    \"view_pricing_info\": \"価格情報を表示する\",\n    \"open_hotspot\": \"ホットスポットを開く\",\n    \"slideshow\": \"スライドショー\",\n    \"header_navigation_label\": \"プライマリー\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"カートに追加\",\n    \"clear_all\": \"すべてクリア\",\n    \"remove\": \"削除\",\n    \"view_in_your_space\": \"スペースに表示\",\n    \"show_filters\": \"フィルター\",\n    \"clear\": \"透明\",\n    \"continue_shopping\": \"買い物を続ける\",\n    \"log_in_html\": \"アカウントをお持ちですか？<a href=\\\"{{ link }}\\\">ログイン</a>することで、チェックアウトがスピーディーに行えます。\",\n    \"see_items\": {\n      \"one\": \"{{ count }}個のアイテムを表示する\",\n      \"other\": \"{{ count }}個のアイテムを表示する\"\n    },\n    \"view_all\": \"すべてを表示\",\n    \"add\": \"追加\",\n    \"choose\": \"選択\",\n    \"added\": \"追加済み\",\n    \"show_less\": \"表示を減らす\",\n    \"show_more\": \"さらに表示する\",\n    \"close\": \"閉じる\",\n    \"more\": \"さらに表示する\",\n    \"reset\": \"リセット\",\n    \"zoom\": \"ズーム\",\n    \"close_dialog\": \"ダイアログを閉じる\",\n    \"back\": \"戻る\",\n    \"log_in\": \"ログイン\",\n    \"log_out\": \"ログアウト\",\n    \"remove_discount\": \"クーポン{{ code }}を削除する\",\n    \"enter_using_password\": \"パスワードを入力してアクセスする\",\n    \"submit\": \"送信\",\n    \"enter_password\": \"パスワードを入力する\",\n    \"view_store_information\": \"ストア情報を表示する\",\n    \"apply\": \"適用\",\n    \"open_image_in_full_screen\": \"画像を全画面で表示\",\n    \"sign_in_options\": \"その他のログインオプション\",\n    \"sign_up\": \"サインアップする\",\n    \"sort\": \"並び替え\",\n    \"show_all_options\": \"すべてのオプションを表示する\",\n    \"open\": \"オープン\"\n  },\n  \"content\": {\n    \"reviews\": \"レビュー\",\n    \"language\": \"言語\",\n    \"localization_region_and_language\": \"地域と言語\",\n    \"no_results_found\": \"結果は見つかりませんでした\",\n    \"cart_total\": \"カートの合計\",\n    \"your_cart_is_empty\": \"カートの中身が空です\",\n    \"product_image\": \"商品画像\",\n    \"product_information\": \"商品情報\",\n    \"quantity\": \"数量\",\n    \"product_total\": \"商品合計\",\n    \"cart_estimated_total\": \"見積もり合計\",\n    \"seller_note\": \"特別な指示\",\n    \"cart_subtotal\": \"小計\",\n    \"discounts\": \"ディスカウント\",\n    \"discount\": \"ディスカウント\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"関税と税金が含まれます。ディスカウントと<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"関税と税金が含まれます。ディスカウントと配送料はチェックアウト時に計算されます。\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"税込。ディスカウントと<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます。\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"税込。ディスカウントと配送料はチェックアウト時に計算されます。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"関税込。税、ディスカウント、および<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"関税込。税、ディスカウント、および配送料はチェックアウト時に計算されます。\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"税、ディスカウント、および<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます。\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"税、ディスカウント、および配送料はチェックアウト時に計算されます。\",\n    \"checkout\": \"チェックアウト\",\n    \"cart_title\": \"カート\",\n    \"price\": \"価格\",\n    \"price_regular\": \"通常価格\",\n    \"price_compare_at\": \"割引前価格\",\n    \"price_sale\": \"セール価格\",\n    \"duties_and_taxes_included\": \"関税と税金が含まれます。\",\n    \"duties_included\": \"関税込。\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます。\",\n    \"taxes_included\": \"税込。\",\n    \"product_badge_sold_out\": \"売り切れ\",\n    \"product_badge_sale\": \"セール\",\n    \"search_input_label\": \"検索\",\n    \"search_input_placeholder\": \"検索\",\n    \"search_results\": \"検索結果\",\n    \"search_results_label\": \"検索結果\",\n    \"search_results_no_results\": \"「{{ terms }}」の検索結果は見つかりませんでした。別の検索をお試しください。\",\n    \"search_results_resource_articles\": \"ブログ記事\",\n    \"search_results_resource_collections\": \"コレクション\",\n    \"search_results_resource_pages\": \"ページ\",\n    \"search_results_resource_products\": \"商品管理\",\n    \"search_results_resource_queries\": \"検索候補\",\n    \"search_results_view_all\": \"すべてを表示\",\n    \"search_results_view_all_button\": \"すべてを表示\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }}個の商品\",\n      \"other\": \"{{ count }}個の商品\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"デフォルト\",\n      \"grid_fieldset\": \"列グリッド\",\n      \"single_item\": \"単一\",\n      \"zoom_out\": \"ズームアウト\"\n    },\n    \"recently_viewed_products\": \"最近閲覧した商品\",\n    \"unavailable\": \"利用不可\",\n    \"collection_placeholder\": \"コレクションのタイトル\",\n    \"product_card_placeholder\": \"商品名\",\n    \"product_count\": \"商品数\",\n    \"item_count\": {\n      \"one\": \"{{ count }}個のアイテム\",\n      \"other\": \"{{ count }}個のアイテム\"\n    },\n    \"errors\": \"エラー\",\n    \"search\": \"検索\",\n    \"search_results_no_results_check_spelling\": \"「{{ terms }}」の検索結果は見つかりませんでした。スペルを確認するか、別の単語やフレーズを使用してください。\",\n    \"featured_products\": \"注目商品\",\n    \"no_products_found\": \"商品が見つかりません。\",\n    \"price_from\": \"{{ price }}から\",\n    \"use_fewer_filters_html\": \"フィルターの数を減らしたり、<a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">すべてのフィルターをクリア</a>したりしてみてください。\",\n    \"filters\": \"絞り込み\",\n    \"price_filter_html\": \"最高価格は{{ price }}です\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"続きを読む...\",\n    \"account_title\": \"アカウント\",\n    \"account_title_personalized\": \"こんにちは、{{ first_name }}さん\",\n    \"account_orders\": \"注文\",\n    \"account_profile\": \"プロフィール\",\n    \"discount_code\": \"クーポンコード\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"関税と税金が含まれます。送料はチェックアウト時に計算されます。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"関税と税金が含まれます。送料はチェックアウト時に計算されます。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"関税が含まれています。送料はチェックアウト時に計算されます。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"関税が含まれています。送料はチェックアウト時に計算されます。\",\n    \"pickup_available_at_html\": \"<b>{{ location }}</b>での受取が可能です\",\n    \"pickup_available_in\": \"{{ pickup_time }}に受取が可能です\",\n    \"pickup_not_available\": \"受取は現在不可能です\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"税と<a href=\\\"{{ link }}\\\">配送料</a>はチェックアウト時に計算されます\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"税と配送料はチェックアウト時に計算されます\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"税込。送料はチェックアウト時に計算されます。\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"税込。送料はチェックアウト時に計算されます。\",\n    \"view_more_details\": \"詳細を表示する\",\n    \"wrong_password\": \"パスワードが正しくありません。\",\n    \"powered_by\": \"このお店は次を使用しています\",\n    \"store_owner_link_html\": \"あなたはストアオーナーですか?<a href=\\\"{{ link }}\\\">こちらからログインする</a>\",\n    \"shipping_discount_error\": \"配送料の割引は、住所を追加した後のチェックアウト時に表示されます\",\n    \"discount_code_error\": \"クーポンコードはあなたのカートには適用できません。\",\n    \"inventory_low_stock\": \"低在庫\",\n    \"inventory_in_stock\": \"在庫あり\",\n    \"inventory_out_of_stock\": \"在庫切れ\",\n    \"page_placeholder_title\": \"ページタイトル\",\n    \"page_placeholder_content\": \"ページを選択して、そのコンテンツを表示します。\",\n    \"placeholder_image\": \"プレースホルダーの画像\",\n    \"shipping_policy\": \"配送料はチェックアウト時に計算されます。\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"残り{{ count }}利用できます\",\n      \"other\": \"残り{{ count }}利用できます\"\n    },\n    \"recipient_form_send_to\": \"送信先\",\n    \"recipient_form_email_label\": \"受信者のメール\",\n    \"recipient_form_email_label_my_email\": \"私のメール\",\n    \"recipient_form_email_address\": \"受信者のメールアドレス\",\n    \"recipient_form_name_label\": \"受信者の名前 (任意）\",\n    \"recipient_form_message\": \"メッセージ (任意)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }}文字使用\",\n    \"recipient_form_send_on\": \"年/月/日\",\n    \"recipient_form_send_on_label\": \"送信日 (任意)\",\n    \"recipient_form_fields_visible\": \"受信者フォームフィールドが表示されました\",\n    \"recipient_form_fields_hidden\": \"受信者フォームフィールドが非表示になりました\",\n    \"recipient_form_error\": \"フォームの送信の際にエラーが発生しました\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }}文字使用\",\n    \"terms_and_policies\": \"利用規約\",\n    \"pagination\": {\n      \"nav_label\": \"ページネーションメニュー\",\n      \"previous\": \"前へ\",\n      \"next\": \"次へ\",\n      \"page\": \"{{ page }}ページ\"\n    },\n    \"volume_pricing_available\": \"量による価格が利用可能\",\n    \"volume_pricing\": \"ボリューム価格設定\",\n    \"at_price_each\": \"{{ price }}/ユニットで\",\n    \"each\": \"{{ price }}/ユニット\",\n    \"each_abbreviation\": \"ユニット\",\n    \"price_at\": \"で\",\n    \"price_range\": \"価格帯\",\n    \"item_count_cutoff\": \"{{ count }}点超のアイテム\",\n    \"cancel\": \"キャンセル\",\n    \"product_subtotal\": \"商品の小計\",\n    \"quantity_per_item\": \"/ユニット\",\n    \"remove_all\": \"すべてを削除\",\n    \"remove_all_items_confirmation\": \"カートから{{ count }}個のアイテムすべてを削除しますか？\",\n    \"remove_one_item_confirmation\": \"カートからアイテムを1個削除しますか？\",\n    \"total_items\": \"アイテムの総数\",\n    \"variant\": \"バリエーション\",\n    \"variant_total\": \"バリエーションの合計額\",\n    \"view_cart\": \"カートを見る\",\n    \"your_cart\": \"あなたのカート\",\n    \"items_added_to_cart\": {\n      \"one\": \"1個のアイテムがカートに追加されました\",\n      \"other\": \"{{ count }}個のアイテムがカートに追加されました\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"オンラインではギフトカードコード、実店舗ではQRコードを使用する\",\n      \"title\": \"{{ shop }}で利用可能な{{ value }}のギフトカードの残高です。\",\n      \"subtext\": \"あなたのギフトカード\",\n      \"shop_link\": \"オンラインストアにアクセスする\",\n      \"add_to_apple_wallet\": \"Apple Walletに追加する\",\n      \"qr_image_alt\": \"QRコード: スキャンしてギフトカードにクーポンを使う\",\n      \"copy_code\": \"ギフトカードコードをコピーする\",\n      \"expiration_date\": \"{{ expires_on }}に期限が切れます\",\n      \"copy_code_success\": \"コードは正常にコピーされました\",\n      \"expired\": \"期限切れ\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"パスワード\",\n    \"search\": \"検索\",\n    \"product_title\": \"商品名\",\n    \"collection_title\": \"コレクションのタイトル\",\n    \"blog_posts\": \"ブログ記事\",\n    \"blog_post_title\": \"タイトル\",\n    \"blog_post_author\": \"作成者\",\n    \"blog_post_date\": \"日付\",\n    \"blog_post_description\": \"ブログ記事の内容の抜粋\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"カートに追加する\",\n      \"added_to_cart\": \"カートに追加済み\",\n      \"adding_to_cart\": \"追加中...\",\n      \"add_to_cart_error\": \"カートに追加する際にエラーが発生しました\",\n      \"sold_out\": \"売り切れ\",\n      \"unavailable\": \"利用できません\",\n      \"quantity_error_max\": \"このアイテムの最大値は{{ maximum }}です\",\n      \"quantity\": \"個数\",\n      \"quantity_increments\": \"{{ increment }}の増分\",\n      \"quantity_minimum\": \"最小{{ minimum }}\",\n      \"quantity_maximum\": \"最大{{ maximum }}\",\n      \"in_cart\": \"カート内\",\n      \"default_title\": \"デフォルトのタイトル\",\n      \"sticky_add_to_cart\": \"クイック「カートに追加」バー\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"～\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }}件のコメント\",\n        \"other\": \"{{ count }}件のコメント\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"メールアドレス\",\n      \"error\": \"コメントを投稿できませんでした。次の点に留意してください。\",\n      \"heading\": \"コメントを残す\",\n      \"message\": \"メッセージ\",\n      \"moderated\": \"コメントは公開前に承認される必要があることにご注意ください。\",\n      \"name\": \"名前\",\n      \"post\": \"コメントを投稿する\",\n      \"success_moderated\": \"コメントを投稿しました。承認待ちです\",\n      \"success\": \"コメントを投稿しました\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/ja.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"枠線\",\n    \"collapsible_row\": \"折りたたみ可能な行\",\n    \"colors\": \"色\",\n    \"custom_section\": \"カスタムセクション\",\n    \"icon\": \"アイコン\",\n    \"logo_and_favicon\": \"ロゴとファビコン\",\n    \"overlapping_blocks\": \"重なり合うブロック\",\n    \"rich_text_section\": \"リッチテキスト\",\n    \"product_buy_buttons\": \"購入ボタン\",\n    \"product_description\": \"説明\",\n    \"product_price\": \"価格\",\n    \"product_variant_picker\": \"バリエーションピッカー\",\n    \"slideshow\": \"スライドショー\",\n    \"typography\": \"タイポグラフィ\",\n    \"video\": \"動画\",\n    \"slideshow_controls\": \"スライドショーのコントロール\",\n    \"size\": \"サイズ\",\n    \"spacing\": \"間隔\",\n    \"product_recommendations\": \"おすすめ商品\",\n    \"product_media\": \"商品メディア\",\n    \"featured_collection\": \"特集コレクション\",\n    \"add_to_cart\": \"カートに追加\",\n    \"email_signup\": \"メールマガジン登録\",\n    \"submit_button\": \"送信ボタン\",\n    \"grid_layout_selector\": \"グリッドレイアウトセレクター\",\n    \"image\": \"画像\",\n    \"list_items\": \"リストアイテム\",\n    \"facets\": \"ファセット\",\n    \"variants\": \"バリエーション\",\n    \"styles\": \"スタイル\",\n    \"product_cards\": \"商品カード\",\n    \"buttons\": \"ボタン\",\n    \"inputs\": \"入力\",\n    \"primary_button\": \"プライマリーボタン\",\n    \"secondary_button\": \"セカンダリーボタン\",\n    \"popovers_and_modals\": \"ポップオーバーとモーダル\",\n    \"marquee\": \"マーキー\",\n    \"alternating_content_rows\": \"交互の行\",\n    \"pull_quote\": \"引用\",\n    \"contact_form\": \"問い合わせフォーム\",\n    \"featured_product\": \"商品ハイライト\",\n    \"icons_with_text\": \"テキスト付きアイコン\",\n    \"product_list\": \"特集コレクション\",\n    \"spacer\": \"スペーサー\",\n    \"products_carousel\": \"特集コレクション: カルーセル\",\n    \"products_grid\": \"特集コレクション: グリッド\",\n    \"accelerated_checkout\": \"簡単なチェックアウト\",\n    \"accordion\": \"アコーディオン\",\n    \"accordion_row\": \"アコーディオンの行\",\n    \"animations\": \"アニメーション\",\n    \"announcement\": \"お知らせ\",\n    \"announcement_bar\": \"告知バー\",\n    \"badges\": \"バッジ\",\n    \"button\": \"ボタン\",\n    \"cart\": \"カート\",\n    \"cart_items\": \"カートのアイテム\",\n    \"cart_products\": \"カート内の商品\",\n    \"cart_title\": \"カート\",\n    \"collection\": \"コレクション\",\n    \"collection_card\": \"コレクションカード\",\n    \"collection_columns\": \"コレクションの列\",\n    \"collection_container\": \"コレクション\",\n    \"collection_description\": \"コレクションの説明\",\n    \"collection_image\": \"コレクション画像\",\n    \"collection_info\": \"コレクション情報\",\n    \"collection_list\": \"コレクションリスト\",\n    \"collections\": \"コレクション\",\n    \"content\": \"コンテンツ\",\n    \"content_grid\": \"コンテンツグリッド\",\n    \"details\": \"詳細\",\n    \"divider\": \"区切り線\",\n    \"filters\": \"絞り込みと並べ替え\",\n    \"follow_on_shop\": \"Shopでフォロー\",\n    \"footer\": \"フッター\",\n    \"footer_utilities\": \"フッターユーティリティ\",\n    \"group\": \"グループ\",\n    \"header\": \"ヘッダー\",\n    \"heading\": \"見出し\",\n    \"icons\": \"アイコン\",\n    \"image_with_text\": \"テキスト付き画像\",\n    \"input\": \"入力\",\n    \"logo\": \"ロゴ\",\n    \"magazine_grid\": \"マガジングリッド\",\n    \"media\": \"メディア\",\n    \"menu\": \"メニュー\",\n    \"mobile_layout\": \"モバイルレイアウト\",\n    \"payment_icons\": \"決済アイコン\",\n    \"popup_link\": \"ポップアップリンク\",\n    \"predictive_search\": \"検索ポップオーバー\",\n    \"predictive_search_empty\": \"予測検索 (空)\",\n    \"price\": \"価格\",\n    \"product\": \"商品\",\n    \"product_card\": \"商品カード\",\n    \"product_card_media\": \"メディア\",\n    \"product_card_rendering\": \"商品カードのレンダリング\",\n    \"product_grid\": \"グリッド\",\n    \"product_grid_main\": \"商品グリッド\",\n    \"product_image\": \"商品画像\",\n    \"product_information\": \"商品情報\",\n    \"product_review_stars\": \"レビューの星\",\n    \"quantity\": \"数量\",\n    \"row\": \"行\",\n    \"search\": \"検索\",\n    \"section\": \"セクション\",\n    \"selected_variants\": \"選択されたバリエーション\",\n    \"slide\": \"スライド\",\n    \"social_media_links\": \"SNSリンク\",\n    \"steps\": \"ステップ\",\n    \"summary\": \"サマリー\",\n    \"swatches\": \"見本\",\n    \"testimonials\": \"お客様の声\",\n    \"text\": \"テキスト\",\n    \"title\": \"タイトル\",\n    \"utilities\": \"ユーティリティ\",\n    \"collection_title\": \"コレクションのタイトル\",\n    \"collections_bento\": \"コレクションリスト: Bento\",\n    \"faq_section\": \"よくある質問\",\n    \"hero\": \"ヒーロー\",\n    \"hero_bottom_aligned\": \"ヒーロー: 下揃え\",\n    \"jumbo_text\": \"ジャンボテキスト\",\n    \"read_only\": \"読み取り専用\",\n    \"search_input\": \"検索入力\",\n    \"search_results\": \"検索結果\",\n    \"view_all_button\": \"すべて表示\",\n    \"video_section\": \"動画\",\n    \"custom_liquid\": \"カスタムLiquid\",\n    \"blog\": \"ブログ\",\n    \"blog_post\": \"ブログ記事\",\n    \"blog_posts\": \"ブログ記事\",\n    \"caption\": \"キャプション\",\n    \"collection_card_image\": \"画像\",\n    \"collection_links\": \"コレクションリンク\",\n    \"collection_links_spotlight\": \"コレクションリンク: スポットライト\",\n    \"collection_links_text\": \"コレクションリンク: テキスト\",\n    \"collections_carousel\": \"コレクションリスト: カルーセル\",\n    \"collections_editorial\": \"コレクションリスト: エディトリアル\",\n    \"collections_grid\": \"コレクションリスト: グリッド\",\n    \"copyright\": \"著作権\",\n    \"count\": \"件数\",\n    \"divider_section\": \"区切り線\",\n    \"drawers\": \"ドロワー\",\n    \"editorial\": \"エディトリアル\",\n    \"editorial_jumbo_text\": \"エディトリアル: ジャンボテキスト\",\n    \"hero_marquee\": \"ヒーロー: マーキー\",\n    \"input_fields\": \"入力フィールド\",\n    \"local_pickup\": \"店舗受取\",\n    \"marquee_section\": \"マーキー\",\n    \"media_with_text\": \"テキスト付きメディア\",\n    \"page\": \"ページ\",\n    \"page_content\": \"コンテンツ\",\n    \"page_layout\": \"ページレイアウト\",\n    \"policy_list\": \"ポリシーリンク\",\n    \"prices\": \"価格\",\n    \"products_editorial\": \"特集コレクション: エディトリアル\",\n    \"social_link\": \"SNSリンク\",\n    \"split_showcase\": \"分割ショーケース\",\n    \"variant_pickers\": \"バリエーションピッカー\",\n    \"product_title\": \"商品名\",\n    \"large_logo\": \"大きなロゴ\",\n    \"product_list_button\": \"すべて表示ボタン\",\n    \"product_inventory\": \"商品在庫\",\n    \"pills\": \"ピル\",\n    \"description\": \"説明\",\n    \"featured_image\": \"記事のサムネイル\",\n    \"multicolumn\": \"マルチカラム\",\n    \"product_custom_property\": \"特記事項\",\n    \"blog_card\": \"ブログカード\",\n    \"blog_posts_grid\": \"ブログ記事: グリッド\",\n    \"blog_posts_carousel\": \"ブログ記事: カルーセル\",\n    \"blog_posts_editorial\": \"ブログ記事: エディトリアル\",\n    \"excerpt\": \"抜粋\",\n    \"footer_password\": \"パスワードフッター\",\n    \"policies_and_links\": \"ポリシーとリンク\",\n    \"card\": \"カード\",\n    \"carousel\": \"カルーセル\",\n    \"carousel_content\": \"カルーセルのコンテンツ\",\n    \"quick_order_list\": \"クイック注文リスト\",\n    \"column\": \"列\",\n    \"comparison_slider\": \"比較スライダー\",\n    \"slideshow_full_frame\": \"スライドショー：フルフレーム\",\n    \"slideshow_inset\": \"スライドショー：インセット\",\n    \"image_compare\": \"画像比較\",\n    \"subheading\": \"小見出し\",\n    \"featured_product_information\": \"特集商品\",\n    \"product_hotspots\": \"商品ホットスポット\",\n    \"hotspot_product\": \"ホットスポット\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"レイヤースライドショー\"\n  },\n  \"settings\": {\n    \"alignment\": \"配置\",\n    \"autoplay\": \"自動再生\",\n    \"background\": \"背景\",\n    \"border_radius\": \"角の丸み\",\n    \"border_width\": \"枠線の太さ\",\n    \"borders\": \"枠線\",\n    \"bottom_padding\": \"下の余白\",\n    \"button\": \"ボタン\",\n    \"color\": \"色\",\n    \"colors\": \"カラー\",\n    \"content_alignment\": \"コンテンツの配置\",\n    \"content_direction\": \"コンテンツの方向\",\n    \"content_position\": \"コンテンツの位置\",\n    \"cover_image_size\": \"カバー画像のサイズ\",\n    \"cover_image\": \"カバー画像\",\n    \"custom_minimum_height\": \"カスタムの最小の高さ\",\n    \"custom_width\": \"カスタムの幅\",\n    \"enable_video_looping\": \"ビデオのループ再生\",\n    \"favicon\": \"ファビコン\",\n    \"font_family\": \"フォントファミリー\",\n    \"gap\": \"間隔\",\n    \"geometric_translate_y\": \"幾何学的なY軸移動\",\n    \"heading\": \"見出し\",\n    \"icon\": \"アイコン\",\n    \"image\": \"画像\",\n    \"image_icon\": \"画像アイコン\",\n    \"image_opacity\": \"画像の不透明度\",\n    \"image_position\": \"画像の位置\",\n    \"image_ratio\": \"画像の比率\",\n    \"label\": \"ラベル\",\n    \"line_height\": \"行の高さ\",\n    \"link\": \"リンク\",\n    \"layout_gap\": \"レイアウトの間隔\",\n    \"make_section_full_width\": \"セクションを全幅にする\",\n    \"minimum_height\": \"最小の高さ\",\n    \"opacity\": \"不透明度\",\n    \"overlay_opacity\": \"オーバーレイの不透明度\",\n    \"padding\": \"余白\",\n    \"primary_color\": \"リンク\",\n    \"product\": \"商品\",\n    \"section_width\": \"セクションの幅\",\n    \"size\": \"サイズ\",\n    \"slide_spacing\": \"スライドの間隔\",\n    \"slide_width\": \"スライドの幅\",\n    \"slideshow_fullwidth\": \"全幅スライド\",\n    \"style\": \"スタイル\",\n    \"text\": \"テキスト\",\n    \"text_case\": \"大文字/小文字\",\n    \"top_padding\": \"上の余白\",\n    \"video\": \"ビデオ\",\n    \"video_alt_text\": \"代替テキスト\",\n    \"video_loop\": \"ビデオをループ再生する\",\n    \"video_position\": \"ビデオの位置\",\n    \"width\": \"幅\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"コンテンツの幅を制限する\",\n    \"color_scheme\": \"配色\",\n    \"inherit_color_scheme\": \"配色を継承する\",\n    \"product_count\": \"商品数\",\n    \"product_type\": \"商品タイプ\",\n    \"content_width\": \"コンテンツの幅\",\n    \"collection\": \"コレクション\",\n    \"enable_sticky_content\": \"デスクトップでコンテンツを固定表示\",\n    \"error_color\": \"エラー\",\n    \"success_color\": \"成功\",\n    \"primary_font\": \"プライマリーフォント\",\n    \"secondary_font\": \"セカンダリーフォント\",\n    \"tertiary_font\": \"ターシャリーフォント\",\n    \"columns\": \"列\",\n    \"items_to_show\": \"表示するアイテム数\",\n    \"layout\": \"レイアウト\",\n    \"layout_type\": \"タイプ\",\n    \"show_grid_layout_selector\": \"グリッドレイアウトセレクターを表示\",\n    \"view_more_show\": \"「もっと見る」ボタンを表示\",\n    \"image_gap\": \"画像の間隔\",\n    \"width_desktop\": \"デスクトップでの幅\",\n    \"width_mobile\": \"モバイルでの幅\",\n    \"border_style\": \"枠線のスタイル\",\n    \"height\": \"高さ\",\n    \"thickness\": \"太さ\",\n    \"stroke\": \"線の太さ\",\n    \"filter_style\": \"フィルタースタイル\",\n    \"swatches\": \"見本\",\n    \"quick_add_colors\": \"クイック追加の色\",\n    \"divider_color\": \"区切り線\",\n    \"border_opacity\": \"枠線の不透明度\",\n    \"hover_background\": \"ホバー時の背景\",\n    \"hover_borders\": \"ホバー時の枠線\",\n    \"hover_text\": \"ホバー時のテキスト\",\n    \"primary_hover_color\": \"ホバー時のリンク\",\n    \"primary_button_text\": \"プライマリーボタンのテキスト\",\n    \"primary_button_background\": \"プライマリーボタンの背景\",\n    \"primary_button_border\": \"プライマリーボタンの枠線\",\n    \"secondary_button_text\": \"セカンダリーボタンのテキスト\",\n    \"secondary_button_background\": \"セカンダリーボタンの背景\",\n    \"secondary_button_border\": \"セカンダリーボタンの枠線\",\n    \"shadow_color\": \"影\",\n    \"limit_media_to_screen_height\": \"画面の高さに合わせる\",\n    \"video_autoplay\": \"自動再生\",\n    \"video_cover_image\": \"カバー画像\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"ソース\",\n    \"background_color\": \"背景色\",\n    \"first_row_media_position\": \"最初の行のメディアの位置\",\n    \"hide_padding\": \"余白を非表示にする\",\n    \"size_mobile\": \"モバイルでのサイズ\",\n    \"pixel_size_mobile\": \"ピクセルサイズ\",\n    \"percent_size_mobile\": \"サイズ (%)\",\n    \"unit\": \"単位\",\n    \"custom_mobile_size\": \"モバイル用のカスタムサイズ\",\n    \"fixed_height\": \"ピクセル単位の高さ\",\n    \"fixed_width\": \"ピクセル単位の幅\",\n    \"percent_height\": \"高さ (%)\",\n    \"percent_width\": \"幅 (%)\",\n    \"percent_size\": \"サイズ (%)\",\n    \"pixel_size\": \"ピクセルサイズ\",\n    \"card_image_height\": \"商品画像の高さ\",\n    \"logo_font\": \"ロゴフォント\",\n    \"always_stack_buttons\": \"常にボタンを重ねて表示する\",\n    \"custom_mobile_width\": \"モバイル用のカスタム幅\",\n    \"accordion\": \"アコーディオン\",\n    \"aspect_ratio\": \"アスペクト比\",\n    \"auto_rotate_announcements\": \"お知らせを自動で切り替える\",\n    \"auto_rotate_slides\": \"スライドを自動で切り替える\",\n    \"badge_corner_radius\": \"角の丸み\",\n    \"badge_position\": \"カード上の位置\",\n    \"badge_sale_color_scheme\": \"セール\",\n    \"badge_sold_out_color_scheme\": \"売り切れ\",\n    \"behavior\": \"動作\",\n    \"blur\": \"影のぼかし\",\n    \"border\": \"枠線\",\n    \"bottom\": \"下部\",\n    \"carousel_on_mobile\": \"モバイルでのカルーセル表示\",\n    \"cart_count\": \"カート内のアイテム数\",\n    \"cart_items\": \"カート内のアイテム\",\n    \"cart_related_products\": \"関連商品\",\n    \"cart_title\": \"カート\",\n    \"cart_total\": \"カートの合計金額\",\n    \"cart_type\": \"タイプ\",\n    \"case\": \"大文字/小文字\",\n    \"checkout_buttons\": \"簡単なチェックアウトボタン\",\n    \"collection_list\": \"コレクション\",\n    \"collection_templates\": \"コレクションテンプレート\",\n    \"content\": \"コンテンツ\",\n    \"corner_radius\": \"角の丸み\",\n    \"country_region\": \"国/地域\",\n    \"currency_code\": \"通貨コード\",\n    \"custom_height\": \"カスタムの高さ\",\n    \"desktop_height\": \"デスクトップでの高さ\",\n    \"direction\": \"方向\",\n    \"display\": \"表示\",\n    \"divider_thickness\": \"区切り線の太さ\",\n    \"divider\": \"区切り線\",\n    \"dividers\": \"区切り線\",\n    \"drop_shadow\": \"ドロップシャドウ\",\n    \"empty_state_collection_info\": \"検索語が入力される前に表示されます\",\n    \"empty_state_collection\": \"空の状態のコレクション\",\n    \"enable_filtering\": \"フィルター\",\n    \"enable_grid_density\": \"グリッドレイアウトの管理\",\n    \"enable_sorting\": \"並べ替え\",\n    \"enable_zoom\": \"ズームを有効にする\",\n    \"equal_columns\": \"等しい列幅\",\n    \"expand_first_group\": \"最初のグループを展開する\",\n    \"extend_media_to_screen_edge\": \"メディアを画面の端まで広げる\",\n    \"extend_summary\": \"画面の端まで広げる\",\n    \"extra_large\": \"特大\",\n    \"extra_small\": \"極小\",\n    \"flag\": \"国旗\",\n    \"font_price\": \"価格フォント\",\n    \"font_weight\": \"フォントの太さ\",\n    \"font\": \"フォント\",\n    \"full_width_first_image\": \"最初の画像を全幅表示\",\n    \"full_width_on_mobile\": \"モバイルで全幅表示\",\n    \"heading_preset\": \"見出しのプリセット\",\n    \"hide_unselected_variant_media\": \"選択されていないバリエーションのメディアを非表示にする\",\n    \"horizontal_gap\": \"水平方向の間隔\",\n    \"horizontal_offset\": \"影の水平オフセット\",\n    \"hover_behavior\": \"ホバー時の動作\",\n    \"icon_background\": \"アイコンの背景\",\n    \"icons\": \"アイコン\",\n    \"image_border_radius\": \"画像の角の丸み\",\n    \"installments\": \"分割払い\",\n    \"integrated_button\": \"統合ボタン\",\n    \"language_selector\": \"言語セレクター\",\n    \"large\": \"大\",\n    \"left_padding\": \"左の余白\",\n    \"left\": \"左\",\n    \"letter_spacing\": \"文字間隔\",\n    \"limit_product_details_width\": \"商品詳細の幅を制限する\",\n    \"link_preset\": \"リンクのプリセット\",\n    \"links\": \"リンク\",\n    \"logo\": \"ロゴ\",\n    \"loop\": \"ループ\",\n    \"make_details_sticky_desktop\": \"デスクトップで固定表示\",\n    \"max_width\": \"最大幅\",\n    \"media_height\": \"メディアの高さ\",\n    \"media_overlay\": \"メディアのオーバーレイ\",\n    \"media_position\": \"メディアの位置\",\n    \"media_type\": \"メディアタイプ\",\n    \"media_width\": \"メディアの幅\",\n    \"menu\": \"メニュー\",\n    \"mobile_columns\": \"モバイルでの列数\",\n    \"mobile_height\": \"モバイルでの高さ\",\n    \"mobile_logo_image\": \"モバイル用ロゴ\",\n    \"mobile_quick_add\": \"モバイルでのクイック追加\",\n    \"motion_direction\": \"モーションの方向\",\n    \"motion\": \"モーション\",\n    \"movement_direction\": \"移動方向\",\n    \"navigation_bar_color_scheme\": \"ナビゲーションバーの配色\",\n    \"navigation_bar\": \"ナビゲーションバー\",\n    \"navigation\": \"メニュー\",\n    \"open_new_tab\": \"リンクを新しいタブで開く\",\n    \"overlay_color\": \"オーバーレイの色\",\n    \"overlay\": \"オーバーレイ\",\n    \"padding_bottom\": \"下の余白\",\n    \"padding_horizontal\": \"水平方向の余白\",\n    \"padding_top\": \"上の余白\",\n    \"page_width\": \"ページの幅\",\n    \"pagination\": \"ページネーション\",\n    \"placement\": \"配置\",\n    \"position\": \"位置\",\n    \"preset\": \"プリセット\",\n    \"product_cards\": \"商品カード\",\n    \"product_pages\": \"商品ページ\",\n    \"product_templates\": \"商品テンプレート\",\n    \"products\": \"商品\",\n    \"quick_add\": \"クイック追加\",\n    \"ratio\": \"比率\",\n    \"regular\": \"標準\",\n    \"review_count\": \"レビュー数\",\n    \"right\": \"右\",\n    \"row_height\": \"行の高さ\",\n    \"row\": \"行\",\n    \"seller_note\": \"販売者へのメモを許可する\",\n    \"shape\": \"シェイプ\",\n    \"show_as_accordion\": \"モバイルでアコーディオンとして表示\",\n    \"show_sale_price_first\": \"セール価格を先に表示\",\n    \"show_tax_info\": \"税情報\",\n    \"show\": \"表示する\",\n    \"small\": \"小\",\n    \"speed\": \"速度\",\n    \"statement\": \"明細\",\n    \"sticky_header\": \"ヘッダーを固定する\",\n    \"text_hierarchy\": \"テキスト階層\",\n    \"text_presets\": \"テキストのプリセット\",\n    \"title\": \"タイトル\",\n    \"top\": \"上部\",\n    \"type\": \"タイプ\",\n    \"type_preset\": \"テキストのプリセット\",\n    \"underline_thickness\": \"下線の太さ\",\n    \"variant_images\": \"バリエーション画像\",\n    \"vendor\": \"販売元\",\n    \"vertical_gap\": \"垂直方向の間隔\",\n    \"vertical_offset\": \"影の垂直オフセット\",\n    \"vertical_on_mobile\": \"モバイルで垂直に表示\",\n    \"view_all_as_last_card\": \"最後のカードとして「すべて表示」\",\n    \"weight\": \"太さ\",\n    \"wrap\": \"折り返す\",\n    \"gradient_direction\": \"グラデーションの方向\",\n    \"headings\": \"見出し\",\n    \"overlay_style\": \"オーバーレイのスタイル\",\n    \"read_only\": \"読み取り専用\",\n    \"shadow_opacity\": \"影の不透明度\",\n    \"show_filter_label\": \"適用されたフィルターのテキストラベル\",\n    \"show_swatch_label\": \"見本のテキストラベル\",\n    \"transparent_background\": \"透明な背景\",\n    \"hide_logo_on_home_page\": \"ホームページでロゴを非表示にする\",\n    \"account\": \"アカウント\",\n    \"align_baseline\": \"テキストのベースラインを揃える\",\n    \"add_discount_code\": \"カートでのディスカウントを許可する\",\n    \"background_overlay\": \"背景のオーバーレイ\",\n    \"background_media\": \"背景メディア\",\n    \"border_thickness\": \"枠線の太さ\",\n    \"bottom_row\": \"下の行\",\n    \"button_text_case\": \"大文字/小文字\",\n    \"auto_open_cart_drawer\": \"「カートに追加」でドロワーを自動で開く\",\n    \"collection_count\": \"コレクション数\",\n    \"custom_liquid\": \"Liquidコード\",\n    \"default\": \"デフォルト\",\n    \"default_logo\": \"デフォルトのロゴ\",\n    \"divider_width\": \"区切り線の幅\",\n    \"horizontal_padding\": \"水平方向の余白\",\n    \"inverse\": \"反転\",\n    \"inverse_logo\": \"反転ロゴ\",\n    \"layout_style\": \"スタイル\",\n    \"length\": \"長さ\",\n    \"mobile_pagination\": \"モバイルでのページネーション\",\n    \"open_row_by_default\": \"デフォルトで行を展開する\",\n    \"page_transition_enabled\": \"ページ切り替え\",\n    \"search\": \"検索\",\n    \"search_icon\": \"検索アイコン\",\n    \"search_position\": \"位置\",\n    \"search_row\": \"行\",\n    \"show_author\": \"作成者\",\n    \"show_alignment\": \"配置を表示\",\n    \"show_count\": \"件数を表示\",\n    \"show_date\": \"日付\",\n    \"show_pickup_availability\": \"店舗受取の出品状況を表示\",\n    \"show_search\": \"検索を表示\",\n    \"use_inverse_logo\": \"反転ロゴを使用する\",\n    \"vertical_padding\": \"垂直方向の余白\",\n    \"visibility\": \"表示設定\",\n    \"product_corner_radius\": \"商品の角の丸み\",\n    \"card_corner_radius\": \"カードの角の丸み\",\n    \"alignment_mobile\": \"モバイルでの配置\",\n    \"animation_repeat\": \"アニメーションを繰り返す\",\n    \"blurred_reflection\": \"ぼやけた反射\",\n    \"card_hover_effect\": \"カードのホバー効果\",\n    \"card_size\": \"カードサイズ\",\n    \"collection_title_case\": \"コレクション名の大文字/小文字\",\n    \"inventory_threshold\": \"在庫わずかのしきい値\",\n    \"mobile_card_size\": \"モバイルでのカードサイズ\",\n    \"page\": \"ページ\",\n    \"product_and_card_title_case\": \"商品名とカード名の大文字/小文字\",\n    \"product_title_case\": \"商品名の大文字/小文字\",\n    \"reflection_opacity\": \"反射の不透明度\",\n    \"right_padding\": \"右の余白\",\n    \"show_inventory_quantity\": \"在庫わずかの数量を表示\",\n    \"text_label_case\": \"テキストラベルの大文字/小文字\",\n    \"transition_to_main_product\": \"商品カードから商品ページへの切り替え\",\n    \"show_second_image_on_hover\": \"ホバー時に2枚目の画像を表示\",\n    \"media\": \"メディア\",\n    \"product_card_carousel\": \"カルーセルを表示\",\n    \"media_fit\": \"メディアのフィット\",\n    \"scroll_speed\": \"次のお知らせまでの時間\",\n    \"show_powered_by_shopify\": \"「Powered by Shopify」を表示する\",\n    \"seller_note_open_by_default\": \"デフォルトで販売者へのメモを開く\",\n    \"gift_card_form\": \"ギフトカードフォーム\",\n    \"add_to_cart_animation\": \"カートに追加\",\n    \"custom_link\": \"カスタムリンク\",\n    \"product_custom_property\": {\n      \"heading\": \"見出し\",\n      \"description\": \"説明\",\n      \"key\": \"プロパティ名\",\n      \"key_info\": \"カート、チェックアウト、注文詳細に表示されるため、空白にすることはできず、各ブロックで固有である必要があります。\",\n      \"placeholder_text\": \"プレースホルダーテキスト\",\n      \"default_heading\": \"商品をカスタマイズする\",\n      \"default_placeholder\": \"特別な指示を入力してください\",\n      \"default_property_key\": \"特別な指示\",\n      \"max_length\": \"最大文字数\",\n      \"required\": \"カートにアイテムを追加するには入力が必須です\",\n      \"input_type\": \"入力タイプ\",\n      \"input_type_text\": \"テキスト\",\n      \"input_type_checkbox\": \"チェックボックス\",\n      \"content_settings\": \"コンテンツ設定\",\n      \"buyers_input\": \"購入者の入力\",\n      \"checkbox_label\": \"チェックボックスのラベル\",\n      \"default_checkbox_label\": \"ギフト包装を含める\",\n      \"heading_preset\": \"見出し\",\n      \"description_preset\": \"説明\",\n      \"input_preset\": \"入力\",\n      \"checkbox_preset\": \"チェックボックスのラベル\"\n    },\n    \"blog\": \"ブログ\",\n    \"post_count\": \"投稿数\",\n    \"animation\": \"アニメーション\",\n    \"top_level_size\": \"トップレベルのサイズ\",\n    \"empty_cart_button_link\": \"カートが空の場合のボタンのリンク\",\n    \"auto_load_products\": \"スクロール時に商品を自動で読み込む\",\n    \"products_per_page\": \"ページあたりの商品数\",\n    \"custom_mobile_media\": \"モバイルで別のメディアを表示する\",\n    \"stack_media_on_mobile\": \"メディアを重ねて表示\",\n    \"media_type_1\": \"メディアタイプ\",\n    \"media_type_2\": \"メディア2のタイプ\",\n    \"full_frame_on_mobile\": \"モバイルで全幅表示\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"ページあたりのバリエーション数\",\n    \"image_1\": \"画像1\",\n    \"image_2\": \"画像2\",\n    \"after_image\": \"変更後の画像\",\n    \"before_image\": \"変更前の画像\",\n    \"cs_slider_style\": \"スライダーのスタイル\",\n    \"cs_slider_color\": \"スライダーの色\",\n    \"cs_slider_inner_color\": \"スライダーの内側の色\",\n    \"text_on_images\": \"画像上のテキスト\",\n    \"card_height\": \"カードの高さ\",\n    \"submenu_size\": \"サブメニューのサイズ\",\n    \"desktop_position\": \"デスクトップでの位置\",\n    \"desktop_pagination\": \"デスクトップのページネーション\",\n    \"bullseye_color\": \"内側の色\",\n    \"hotspot_color\": \"ホットスポットの色\",\n    \"product_price_typography\": \"商品価格のタイポグラフィ\",\n    \"product_title_typography\": \"商品名のタイポグラフィ\",\n    \"x_position\": \"横位置\",\n    \"y_position\": \"縦位置\",\n    \"enable_sticky_add_to_cart\": \"固定「カートに追加」バー\",\n    \"sticky_add_to_cart\": \"固定「カートに追加」\",\n    \"actions_display_style\": \"メニュースタイル\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"矢印\",\n    \"auto\": \"自動\",\n    \"banana\": \"バナナ\",\n    \"bottle\": \"ボトル\",\n    \"box\": \"ボックス\",\n    \"buttons\": \"ボタン\",\n    \"carrot\": \"ニンジン\",\n    \"center\": \"中央\",\n    \"chat_bubble\": \"チャットバブル\",\n    \"clipboard\": \"クリップボード\",\n    \"contain\": \"コンテイン\",\n    \"counter\": \"カウンター\",\n    \"cover\": \"カバー\",\n    \"custom\": \"カスタム\",\n    \"dairy_free\": \"乳製品不使用\",\n    \"dairy\": \"乳製品\",\n    \"default\": \"デフォルト\",\n    \"dropdowns\": \"ドロップダウン\",\n    \"dots\": \"ドット\",\n    \"dryer\": \"乾燥機\",\n    \"end\": \"終了\",\n    \"eye\": \"目\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"塗りつぶし\",\n    \"fire\": \"火\",\n    \"fit\": \"フィット\",\n    \"full\": \"全幅\",\n    \"full_and_page\": \"全幅の背景、ページ幅のコンテンツ\",\n    \"gluten_free\": \"グルテンフリー\",\n    \"heading\": \"見出し\",\n    \"heart\": \"ハート\",\n    \"horizontal\": \"水平\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"アイロン\",\n    \"landscape\": \"横長\",\n    \"large\": \"大\",\n    \"leaf\": \"葉\",\n    \"leather\": \"レザー\",\n    \"lg\": \"L\",\n    \"lightning_bolt\": \"稲妻\",\n    \"link\": \"リンク\",\n    \"lipstick\": \"口紅\",\n    \"lock\": \"ロック\",\n    \"lowercase\": \"小文字\",\n    \"m\": \"M\",\n    \"map_pin\": \"マップピン\",\n    \"medium\": \"中\",\n    \"none\": \"なし\",\n    \"numbers\": \"数字\",\n    \"nut_free\": \"ナッツ不使用\",\n    \"outline\": \"アウトライン\",\n    \"page\": \"ページ\",\n    \"pants\": \"パンツ\",\n    \"paw_print\": \"足跡\",\n    \"pepper\": \"コショウ\",\n    \"perfume\": \"香水\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"飛行機\",\n    \"plant\": \"植物\",\n    \"portrait\": \"縦長\",\n    \"price_tag\": \"価格タグ\",\n    \"question_mark\": \"疑問符\",\n    \"recycle\": \"リサイクル\",\n    \"return\": \"返品\",\n    \"ruler\": \"定規\",\n    \"s\": \"S\",\n    \"sentence\": \"文\",\n    \"serving_dish\": \"大皿\",\n    \"shirt\": \"シャツ\",\n    \"shoe\": \"靴\",\n    \"silhouette\": \"シルエット\",\n    \"small\": \"小\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"雪の結晶\",\n    \"solid\": \"実線\",\n    \"space_between\": \"均等配置\",\n    \"square\": \"正方形\",\n    \"star\": \"星\",\n    \"start\": \"開始\",\n    \"stopwatch\": \"ストップウォッチ\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"トラック\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"大文字\",\n    \"vertical\": \"垂直\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"洗濯\",\n    \"circle\": \"円\",\n    \"swatches\": \"見本\",\n    \"full_and_page_offset_left\": \"全幅の背景、ページ幅のコンテンツ、左にオフセット\",\n    \"full_and_page_offset_right\": \"全幅の背景、ページ幅のコンテンツ、右にオフセット\",\n    \"offset_left\": \"左にオフセット\",\n    \"offset_right\": \"右にオフセット\",\n    \"page_center_aligned\": \"ページ、中央揃え\",\n    \"page_left_aligned\": \"ページ、左揃え\",\n    \"page_right_aligned\": \"ページ、右揃え\",\n    \"button\": \"ボタン\",\n    \"caption\": \"キャプション\",\n    \"h1\": \"見出し1\",\n    \"h2\": \"見出し2\",\n    \"h3\": \"見出し3\",\n    \"h4\": \"見出し4\",\n    \"h5\": \"見出し5\",\n    \"h6\": \"見出し6\",\n    \"paragraph\": \"段落\",\n    \"primary\": \"プライマリー\",\n    \"secondary\": \"セカンダリー\",\n    \"tertiary\": \"ターシャリー\",\n    \"chevron_left\": \"シェブロン (左)\",\n    \"chevron_right\": \"シェブロン (右)\",\n    \"diamond\": \"ダイヤモンド\",\n    \"grid\": \"グリッド\",\n    \"parallelogram\": \"平行四辺形\",\n    \"rounded\": \"角丸\",\n    \"fit_content\": \"フィット\",\n    \"pills\": \"ピル\",\n    \"heavy\": \"太い\",\n    \"thin\": \"細い\",\n    \"drawer\": \"ドロワー\",\n    \"preview\": \"プレビュー\",\n    \"text\": \"テキスト\",\n    \"video_uploaded\": \"アップロード済み\",\n    \"video_external_url\": \"外部URL\",\n    \"up\": \"上へ\",\n    \"down\": \"下\",\n    \"gradient\": \"グラデーション\",\n    \"fixed\": \"固定\",\n    \"pixel\": \"ピクセル\",\n    \"percent\": \"パーセント\",\n    \"aspect_ratio\": \"アスペクト比\",\n    \"above_carousel\": \"カルーセルの上\",\n    \"all\": \"すべて\",\n    \"always\": \"常に\",\n    \"arrows_large\": \"大きな矢印\",\n    \"arrows\": \"矢印\",\n    \"balance\": \"バランス\",\n    \"bento\": \"Bento\",\n    \"black\": \"黒\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"本文 (大)\",\n    \"body_regular\": \"本文 (標準)\",\n    \"body_small\": \"本文 (小)\",\n    \"bold\": \"太字\",\n    \"bottom_left\": \"左下\",\n    \"bottom_right\": \"右下\",\n    \"bottom\": \"下\",\n    \"capitalize\": \"先頭を大文字にする\",\n    \"caret\": \"キャレット\",\n    \"carousel\": \"カルーセル\",\n    \"check_box\": \"チェックボックス\",\n    \"chevron_large\": \"大きなシェブロン\",\n    \"chevron\": \"シェブロン\",\n    \"chevrons\": \"シェブロン\",\n    \"classic\": \"クラシック\",\n    \"collection_images\": \"コレクション画像\",\n    \"color\": \"色\",\n    \"complementary\": \"付加的\",\n    \"dissolve\": \"ディゾルブ\",\n    \"dotted\": \"点線\",\n    \"editorial\": \"エディトリアル\",\n    \"extra_large\": \"特大\",\n    \"extra_small\": \"極小\",\n    \"featured_collections\": \"特集コレクション\",\n    \"featured_products\": \"特集商品\",\n    \"font_primary\": \"プライマリー\",\n    \"font_secondary\": \"セカンダリー\",\n    \"font_tertiary\": \"ターシャリー\",\n    \"forward\": \"順方向\",\n    \"full_screen\": \"全画面\",\n    \"heading_extra_large\": \"見出し (特大)\",\n    \"heading_extra_small\": \"見出し (極小)\",\n    \"heading_large\": \"見出し (大)\",\n    \"heading_regular\": \"見出し (標準)\",\n    \"heading_small\": \"見出し (小)\",\n    \"icon\": \"アイコン\",\n    \"image\": \"画像\",\n    \"input\": \"入力\",\n    \"inside_carousel\": \"カルーセル内\",\n    \"inverse_large\": \"反転 (大)\",\n    \"inverse\": \"反転\",\n    \"large_arrows\": \"大きな矢印\",\n    \"large_chevrons\": \"大きなシェブロン\",\n    \"left\": \"左\",\n    \"light\": \"細い\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"ルーズ\",\n    \"media_first\": \"メディアを先に\",\n    \"media_second\": \"メディアを後に\",\n    \"modal\": \"モーダル\",\n    \"narrow\": \"狭い\",\n    \"never\": \"なし\",\n    \"next_to_carousel\": \"カルーセルの横\",\n    \"normal\": \"標準\",\n    \"nowrap\": \"折り返さない\",\n    \"off_media\": \"メディア外\",\n    \"on_media\": \"メディア上\",\n    \"on_scroll_up\": \"上にスクロール時\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"ピル\",\n    \"plus\": \"プラス\",\n    \"pretty\": \"プリティ\",\n    \"price\": \"価格\",\n    \"primary_style\": \"プライマリースタイル\",\n    \"rectangle\": \"長方形\",\n    \"regular\": \"標準\",\n    \"related\": \"関連\",\n    \"reverse\": \"逆方向\",\n    \"rich_text\": \"リッチテキスト\",\n    \"right\": \"右\",\n    \"secondary_style\": \"セカンダリースタイル\",\n    \"semibold\": \"中太字\",\n    \"shaded\": \"シェード\",\n    \"show_second_image\": \"2番目の画像を表示\",\n    \"single\": \"単一\",\n    \"slide_left\": \"左にスライド\",\n    \"slide_up\": \"上にスライド\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"スタック\",\n    \"text_only\": \"テキストのみ\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"サムネイル\",\n    \"tight\": \"狭い\",\n    \"top_left\": \"左上\",\n    \"top_right\": \"右上\",\n    \"top\": \"上\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"下線\",\n    \"video\": \"ビデオ\",\n    \"wide\": \"ワイド\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"画像の下\",\n    \"on_image\": \"画像上\",\n    \"accent\": \"アクセント\",\n    \"body\": \"本文\",\n    \"button_primary\": \"プライマリーボタン\",\n    \"button_secondary\": \"セカンダリーボタン\",\n    \"compact\": \"コンパクト\",\n    \"crop_to_fit\": \"切り抜いて合わせる\",\n    \"hidden\": \"非表示\",\n    \"hint\": \"ヒント\",\n    \"maintain_aspect_ratio\": \"アスペクト比を維持\",\n    \"off\": \"オフ\",\n    \"social_bluesky\": \"SNS: Bluesky\",\n    \"social_facebook\": \"SNS: Facebook\",\n    \"social_instagram\": \"SNS: Instagram\",\n    \"social_linkedin\": \"SNS: LinkedIn\",\n    \"social_pinterest\": \"SNS: Pinterest\",\n    \"social_snapchat\": \"SNS: Snapchat\",\n    \"social_spotify\": \"SNS: Spotify\",\n    \"social_threads\": \"SNS: Threads\",\n    \"social_tiktok\": \"SNS: TikTok\",\n    \"social_tumblr\": \"SNS: Tumblr\",\n    \"social_twitter\": \"SNS: X (Twitter)\",\n    \"social_whatsapp\": \"SNS: WhatsApp\",\n    \"social_vimeo\": \"SNS: Vimeo\",\n    \"social_youtube\": \"SNS: YouTube\",\n    \"spotlight\": \"スポットライト\",\n    \"standard\": \"標準\",\n    \"subheading\": \"小見出し\",\n    \"blur\": \"ぼかし\",\n    \"lift\": \"リフト\",\n    \"reveal\": \"リビール\",\n    \"scale\": \"拡大\",\n    \"subtle_zoom\": \"ズーム\",\n    \"with_hints\": \"ヒント付き\",\n    \"below_media\": \"メディアの下\",\n    \"full_frame\": \"フルフレーム\",\n    \"icons\": \"アイコン\"\n  },\n  \"content\": {\n    \"advanced\": \"高度な設定\",\n    \"background_image\": \"背景画像\",\n    \"background_video\": \"背景動画\",\n    \"block_size\": \"ブロックサイズ\",\n    \"borders\": \"枠線\",\n    \"describe_the_video_for\": \"スクリーンリーダーを使用しているお客様のために、動画の説明を記述します。[詳細はこちら](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"セクションサイズ\",\n    \"slideshow_width\": \"スライドの幅\",\n    \"typography\": \"タイポグラフィ\",\n    \"width_is_automatically_optimized\": \"幅はモバイル向けに自動的に最適化されます。\",\n    \"complementary_products\": \"付加的な商品は、Search & Discoveryアプリを使用して設定する必要があります。[詳細はこちら](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"列はモバイル向けに自動的に最適化されます\",\n    \"content_width\": \"コンテンツの幅は、セクションの幅が全幅に設定されている場合にのみ適用されます。\",\n    \"responsive_font_sizes\": \"サイズはすべての画面サイズに合わせて自動的に拡大縮小されます\",\n    \"buttons\": \"ボタン\",\n    \"swatches\": \"見本\",\n    \"variant_settings\": \"バリエーション設定\",\n    \"background\": \"背景\",\n    \"cards_layout\": \"カードのレイアウト\",\n    \"section_layout\": \"セクションのレイアウト\",\n    \"mobile_size\": \"モバイルサイズ\",\n    \"mobile_width\": \"モバイルでの幅\",\n    \"width\": \"幅\",\n    \"appearance\": \"デザイン\",\n    \"arrows\": \"矢印\",\n    \"body_size\": \"本文サイズ\",\n    \"bottom_row_appearance\": \"最下段のデザイン\",\n    \"carousel_navigation\": \"カルーセルのナビゲーション\",\n    \"carousel_pagination\": \"カルーセルのページネーション\",\n    \"copyright\": \"著作権\",\n    \"edit_logo_in_theme_settings\": \"[テーマ設定](/editor?context=theme&category=logo%20and%20favicon)でロゴを編集する\",\n    \"edit_price_in_theme_settings\": \"[テーマ設定](/editor?context=theme&category=currency%20code)で価格の形式を編集する\",\n    \"edit_variants_in_theme_settings\": \"[テーマ設定](/editor?context=theme&category=variants)でバリエーションのスタイルを編集する\",\n    \"email_signups_create_customer_profiles\": \"登録すると[顧客プロフィール](https://help.shopify.com/manual/customers)が追加されます\",\n    \"follow_on_shop_eligiblity\": \"ボタンを表示するには、Shopチャネルをインストールし、Shop Payを有効にする必要があります。[詳細はこちら](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"フォント\",\n    \"grid\": \"グリッド\",\n    \"heading_size\": \"見出しサイズ\",\n    \"image\": \"画像\",\n    \"input\": \"入力\",\n    \"layout\": \"レイアウト\",\n    \"link\": \"リンク\",\n    \"link_padding\": \"リンクの余白\",\n    \"localization\": \"ローカライズ\",\n    \"logo\": \"ロゴ\",\n    \"margin\": \"マージン\",\n    \"media\": \"メディア\",\n    \"media_1\": \"メディア1\",\n    \"media_2\": \"メディア2\",\n    \"menu\": \"メニュー\",\n    \"mobile_layout\": \"モバイルレイアウト\",\n    \"padding\": \"余白\",\n    \"padding_desktop\": \"デスクトップの余白\",\n    \"paragraph\": \"段落\",\n    \"policies\": \"ポリシー\",\n    \"popup\": \"ポップアップ\",\n    \"search\": \"検索\",\n    \"size\": \"サイズ\",\n    \"social_media\": \"SNS\",\n    \"submit_button\": \"送信ボタン\",\n    \"text_presets\": \"テキストプリセット\",\n    \"transparent_background\": \"透明な背景\",\n    \"typography_primary\": \"プライマリータイポグラフィ\",\n    \"typography_secondary\": \"セカンダリータイポグラフィ\",\n    \"typography_tertiary\": \"ターシャリータイポグラフィ\",\n    \"visibility\": \"表示設定\",\n    \"carousel\": \"カルーセル\",\n    \"colors\": \"色\",\n    \"collection_page\": \"コレクションページ\",\n    \"customer_account\": \"お客様アカウント\",\n    \"edit_empty_state_collection_in_theme_settings\": \"[テーマ設定](/editor?context=theme&category=search)で空の状態のコレクションを編集する\",\n    \"home_page\": \"ホームページ\",\n    \"images\": \"画像\",\n    \"inverse_logo_info\": \"透明なヘッダーの背景が [反転] に設定されている場合に使用されます\",\n    \"manage_customer_accounts\": \"お客様アカウント設定で[表示を管理](/admin/settings/customer_accounts)します。レガシーアカウントはサポートされていません。\",\n    \"manage_policies\": \"[ポリシーを管理する](/admin/settings/legal)\",\n    \"product_page\": \"商品ページ\",\n    \"text\": \"テキスト\",\n    \"thumbnails\": \"サムネイル\",\n    \"visible_if_collection_has_more_products\": \"コレクションに表示されている商品数よりも多くの商品がある場合に表示されます\",\n    \"grid_layout\": \"グリッドレイアウト\",\n    \"app_required_for_ratings\": \"商品評価にはアプリが必要です。[詳細はこちら](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"アイコン\",\n    \"manage_store_name\": \"[ストア名を管理する](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"親セクションのコレクションを表示します\",\n    \"resource_reference_collection_card_image\": \"親コレクションの画像を表示します\",\n    \"resource_reference_collection_title\": \"親コレクションのタイトルを表示します\",\n    \"resource_reference_product\": \"親商品に自動的に接続します\",\n    \"resource_reference_product_card\": \"親セクションの商品を表示します\",\n    \"resource_reference_product_inventory\": \"親商品の在庫を表示します\",\n    \"resource_reference_product_price\": \"親商品の価格を表示します\",\n    \"resource_reference_product_recommendations\": \"親商品に基づいておすすめを表示します\",\n    \"resource_reference_product_review\": \"親商品のレビューを表示します\",\n    \"resource_reference_product_swatches\": \"親商品の見本を表示します\",\n    \"resource_reference_product_title\": \"親商品の商品名を表示します\",\n    \"resource_reference_product_variant_picker\": \"親商品のバリエーションを表示します\",\n    \"resource_reference_product_media\": \"親商品のメディアを表示します\",\n    \"product_media\": \"商品メディア\",\n    \"section_link\": \"セクションリンク\",\n    \"gift_card_form_description\": \"お客様は、パーソナルメッセージを添えて、受取人のメールアドレスにギフトカードを送信できます。[詳細はこちら](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"見出し\",\n    \"resource_reference_product_custom_property\": \"カスタマイズ可能な入力フィールドを追加して、注文の項目に追加されるカスタム情報を収集します。この情報は後で注文詳細に表示されます。\",\n    \"block_link\": \"ブロックリンク\",\n    \"submenu_feature\": \"サブメニューの機能\",\n    \"cart_features\": \"カートの機能\",\n    \"email_signup\": \"メール登録\",\n    \"mobile_media\": \"モバイルメディア\",\n    \"mobile_media_2\": \"モバイルメディア2\",\n    \"navigation\": \"メニュー\",\n    \"popover\": \"ポップオーバー\",\n    \"popover_position\": \"ポップオーバーの位置\",\n    \"resource_reference_product_sku\": \"親商品のSKUを表示します\",\n    \"content_layout\": \"コンテンツレイアウト\",\n    \"mobile_media_1\": \"モバイルメディア1\",\n    \"utilities\": \"ユーティリティ\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>ブランドに関する情報をお客様に伝えましょう。商品の説明、お知らせ、ストアへのお客様への歓迎メッセージなどに使用します。</p>\",\n    \"bestseller_h2\": \"<h2>ベストセラー</h2>\",\n    \"bestseller_h3\": \"<h3>ベストセラー</h3>\",\n    \"bestseller\": \"<p>ベストセラー</p>\",\n    \"build_better\": \"<p>私たちは、より良いものづくりを信じています</p>\",\n    \"contact_us\": \"<h2>お問い合わせ</h2>\",\n    \"discover_bestsellers\": \"<p>機能性とスタイルを絶妙に融合させ、お客様の心を掴んだベストセラー商品をご覧ください。</p>\",\n    \"everythings_starts_with_why\": \"<p>私たちのすべての行動は「なぜ」から始まります</p>\",\n    \"explore_latest_products\": \"<p>最新の商品をご覧ください。</p>\",\n    \"faq\": \"<h3>よくある質問</h3>\",\n    \"first_to_know\": \"<p>新しいコレクションや特別オファーの情報をいち早くお届けします。</p>\",\n    \"free_returns\": \"<p>30日間返品無料</p>\",\n    \"free_shipping_over\": \"<p>50ドル以上のご購入で送料無料</p>\",\n    \"goal_for_every_customer\": \"<p>すべてのお客様にご購入いただいた商品に完全にご満足いただくことが私たちの目標です。万が一ご満足いただけない場合は、お知らせください。ご満足いただけるよう最善を尽くします。</p>\",\n    \"home_to_shirts\": \"<p>ホーム → シャツ</p>\",\n    \"intentional_design\": \"<h2>意図的なデザイン</h2>\",\n    \"introducing_h2\": \"<h2><em>新登場</em></h2>\",\n    \"latest_products\": \"<p>この季節にぴったりの最新商品をご紹介します。売り切れる前にお気に入りを見つけてください！</p>\",\n    \"made_local_and_global\": \"<p>私たちの商品は、国内および海外で製造されています。高品質で適正な価格の商品をお届けするため、製造パートナーを慎重に選定しています。</p>\",\n    \"made_with_care_h2\": \"<h2>心を込めて作られました</h2>\",\n    \"made_with_care_extended\": \"<p>心を込めて作られ、お客様から絶大な支持を得ているこの代表的なベストセラーは、あらゆる期待を上回ります。</p>\",\n    \"made_with_care\": \"<p>心を込めて作られ、お客様に愛されています。</p>\",\n    \"make_things_better_extended\": \"<p>私たちは、より機能的で長持ちするものを作ります。私たちの商品は、クリーンなデザインと誠実な素材で、現実の問題を解決します。</p>\",\n    \"make_things_better\": \"<p>私たちは、より機能的で長持ちするものを作ります。</p>\",\n    \"may_also_like\": \"<h4>こちらもおすすめです</h4>\",\n    \"new_arrivals_h1\": \"<h1>新着商品</h1>\",\n    \"new_arrivals_h2\": \"<h2>新着商品</h2>\",\n    \"new_arrivals_h3\": \"<h3>新着商品</h3>\",\n    \"product_launch\": \"<p>最新の商品リリースの舞台裏をご覧ください。</p>\",\n    \"product_story\": \"<p>すべての商品の中心には、品質と革新への情熱に支えられたユニークなストーリーがあります。一つひとつのアイテムが、あなたの毎日を豊かにし、喜びをもたらします。</p>\",\n    \"real_people\": \"<p>素晴らしい商品を作る、実在の人々</p>\",\n    \"related_product\": \"<h3>関連商品</h3>\",\n    \"return_policy\": \"<h2>返品ポリシーについて</h2>\",\n    \"reviews\": \"<p>★★★★★ 368件のレビュー</p>\",\n    \"shipping_based_on_location\": \"<p>送料は、お客様の所在地とご注文の商品に基づいて計算されます。購入前に必ず送料をご確認いただけます。</p>\",\n    \"shop_by_collection\": \"<h3>コレクションから探す</h3>\",\n    \"signature_products\": \"<h2>当店の代表的な商品</h2>\",\n    \"styled_with\": \"<h3>コーディネートアイテム</h3>\",\n    \"subscribe\": \"<h2>メールマガジンに登録する</h2>\",\n    \"team_with_goal\": \"<h2>目標を持つチーム</h2>\",\n    \"unable_to_accept_returns\": \"<p>一部の商品については返品を承ることができません。対象商品は購入前に明記されます。</p>\",\n    \"work_quickly_to_ship\": \"<p>ご注文の商品はできるだけ早く発送できるよう努めます。発送が完了しましたら、詳細を記載したメールをお送りします。配達日時はお届け先によって異なります。</p>\",\n    \"join_our_email_list\": \"<h2>メールマガジンに登録</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>限定セールや新商品の早期アクセス情報を入手できます。</p>\",\n    \"artistry_in_action\": \"<p>匠の技が息づく</p>\",\n    \"authentic_materials\": \"<p>妥協のない、本物の素材</p>\",\n    \"bold_style_recognizable\": \"<p>どこにいても目を引く、大胆なスタイル</p>\",\n    \"discover_elevated_design\": \"<p>ワンランク上のデザインを発見</p>\",\n    \"expert_construction_finish\": \"<p>熟練の技と丁寧な仕上げ</p>\",\n    \"made_to_last\": \"<p>長く使えるデザイン</p>\",\n    \"pieces_better_with_time\": \"<p>時間とともに、使い込むほどに味が出るアイテム</p>\",\n    \"quality_you_can_feel\": \"<h2>実感できる品質の高さ</h2>\",\n    \"uncompromising_standards\": \"<p>妥協のない基準</p>\",\n    \"featured_collection_h2\": \"<h2>特集コレクション</h2>\",\n    \"shop_collection\": \"<p>スタイルと品質を両立した、厳選されたお気に入りのアイテムが揃ったコレクションをご覧ください。</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"今すぐ購入\",\n    \"collapsible_row\": \"折りたたみ可能な行\",\n    \"heading\": \"見出し\",\n    \"email_signup_button_label\": \"登録\",\n    \"accordion_heading\": \"アコーディオンの見出し\",\n    \"contact_form_button_label\": \"送信\",\n    \"popup_link\": \"ポップアップリンク\",\n    \"sign_up\": \"サインアップ\",\n    \"welcome_to_our_store\": \"当ストアへようこそ\",\n    \"be_bold\": \"大胆に。\",\n    \"shop_our_latest_arrivals\": \"最新の入荷商品をチェック！\",\n    \"are_purchases_final_sale\": \"最終セールとなる購入はありますか？\",\n    \"care_instructions\": \"お手入れ方法\",\n    \"cart\": \"カート\",\n    \"discover_collection\": \"コレクションを見る\",\n    \"fit\": \"フィット感\",\n    \"how_much_for_shipping\": \"送料はいくらですか？\",\n    \"learn_more\": \"詳しくはこちら\",\n    \"manufacturing\": \"製造\",\n    \"materials\": \"素材\",\n    \"return_policy\": \"返品ポリシー\",\n    \"shipping\": \"発送\",\n    \"shop_now_button_label\": \"今すぐ購入\",\n    \"sign_up_button_label\": \"サインアップ\",\n    \"submit_button_label\": \"送信\",\n    \"up_the_ante\": \"さらに\\n高み\\nへ\",\n    \"view_all_button_label\": \"すべて表示\",\n    \"what_is_return_policy\": \"返品ポリシーはどのようになっていますか？\",\n    \"when_will_order_arrive\": \"注文した商品はいつ届きますか？\",\n    \"where_are_products_made\": \"商品はどこで製造されていますか？\",\n    \"trending_now\": \"トレンド\",\n    \"shop_the_look\": \"このルックを購入\",\n    \"bestsellers\": \"ベストセラー\",\n    \"featured_collection\": \"特集コレクション\",\n    \"new_arrivals\": \"新着商品\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"支援技術のユーザーのために動画の説明を記述します\",\n    \"video_autoplay\": \"動画はデフォルトでミュートになります\",\n    \"video_external\": \"YouTubeまたはVimeoのURLを使用します\",\n    \"carousel_layout_on_mobile\": \"モバイルでは常にカルーセルが使用されます。\",\n    \"carousel_hover_behavior_not_supported\": \"セクションレベルで [カルーセル] タイプが選択されている場合、[カルーセル] のホバーはサポートされていません\",\n    \"grid_layout_on_mobile\": \"モバイルではグリッドレイアウトが使用されます\",\n    \"logo_font\": \"ロゴが選択されていない場合にのみ適用されます\",\n    \"checkout_buttons\": \"購入者がより迅速にチェックアウトできるようになり、コンバージョンを向上させることができます。[詳細はこちら](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"カスタム見出し\",\n    \"edit_presets_in_theme_settings\": \"[テーマ設定](/editor?context=theme&category=typography)でプリセットを編集します\",\n    \"enable_filtering_info\": \"[Search & Discoveryアプリ](https://help.shopify.com/manual/online-store/search-and-discovery/filters)で絞り込みをカスタマイズします\",\n    \"manage_countries_regions\": \"[国/地域を管理する](/admin/settings/markets)\",\n    \"manage_languages\": \"[言語を管理する](/admin/settings/languages)\",\n    \"transparent_background\": \"透明な背景が適用されている各テンプレートで、読みやすさを確認してください\",\n    \"aspect_ratio_adjusted\": \"一部のレイアウトでは調整されます\",\n    \"custom_liquid\": \"アプリのスニペットやその他のコードを追加して、高度なカスタマイズを作成します。[詳細はこちら](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"画像にのみ適用されます\",\n    \"hover_effects\": \"商品カードとコレクションカードに適用されます\",\n    \"pills_usage\": \"適用された絞り込み、ディスカウントコード、検索候補に使用されます\",\n    \"hide_logo_on_home_page_help\": \"ロゴは、固定ヘッダーが有効な場合は表示されたままになります\",\n    \"media_type_info\": \"機能はメニューのリンクを元に表示されます。\",\n    \"logo_height\": \"ヘッダーのロゴにのみ適用されます。\",\n    \"actions_display_style\": \"モバイルでは常にアイコンが表示されます\"\n  },\n  \"categories\": {\n    \"product_list\": \"特集コレクション\",\n    \"basic\": \"基本\",\n    \"collection\": \"コレクション\",\n    \"collection_list\": \"コレクションリスト\",\n    \"footer\": \"フッター\",\n    \"forms\": \"フォーム\",\n    \"header\": \"ヘッダー\",\n    \"layout\": \"レイアウト\",\n    \"links\": \"リンク\",\n    \"product\": \"商品\",\n    \"banners\": \"バナー\",\n    \"collections\": \"コレクション\",\n    \"custom\": \"カスタム\",\n    \"decorative\": \"装飾\",\n    \"products\": \"商品\",\n    \"other_sections\": \"その他\",\n    \"storytelling\": \"ストーリーテリング\",\n    \"text\": \"テキスト\"\n  }\n}\n"
  },
  {
    "path": "locales/ko.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"동영상 로드: {{ description }}\",\n    \"sold_out\": \"품절\",\n    \"email_signup\": {\n      \"label\": \"이메일\",\n      \"placeholder\": \"이메일 주소\",\n      \"success\": \"가입해 주셔서 감사합니다!\"\n    },\n    \"filter\": \"필터\",\n    \"payment_methods\": \"결제 방법\",\n    \"contact_form\": {\n      \"name\": \"이름\",\n      \"email\": \"이메일\",\n      \"phone\": \"전화\",\n      \"comment\": \"댓글\",\n      \"post_success\": \"문의해 주셔서 감사합니다. 최대한 빨리 답변드리겠습니다.\",\n      \"error_heading\": \"다음을 조정하세요.\"\n    },\n    \"slider_label\": \"슬라이더\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3D 모델 재생\",\n    \"play_video\": \"동영상 재생\",\n    \"unit_price\": \"단가\",\n    \"country_results_count\": \"결과 {{ count }}개\",\n    \"slideshow_pause\": \"슬라이드 쇼 멈춤\",\n    \"slideshow_play\": \"슬라이드 쇼 재생\",\n    \"remove_item\": \"{{ title}} 제거\",\n    \"skip_to_text\": \"콘텐츠로 건너뛰기\",\n    \"skip_to_product_info\": \"제품 정보로 건너뛰기\",\n    \"skip_to_results_list\": \"결과 목록으로 건너뛰기\",\n    \"new_window\": \"새 창에서 열립니다.\",\n    \"slideshow_next\": \"다음 슬라이드\",\n    \"slideshow_previous\": \"이전 슬라이드\",\n    \"close_dialog\": \"대화 상자 닫기\",\n    \"reset_search\": \"검색 재설정\",\n    \"search_results_count\": \"\\\"{{ query }}\\\" 검색 결과 {{ count }}건\",\n    \"search_results_no_results\": \"\\\"{{ query }}\\\" 검색 결과 없음\",\n    \"filters\": \"필터\",\n    \"filter_count\": {\n      \"one\": \"{{ count }}개 필터 적용됨\",\n      \"other\": \"{{ count }}개 필터 적용됨\"\n    },\n    \"account\": \"계정\",\n    \"cart\": \"카트\",\n    \"cart_count\": \"카트에 있는 총 품목 수\",\n    \"menu\": \"메뉴\",\n    \"country_region\": \"국가/지역\",\n    \"slide_status\": \"{{ index }}/{{ length }}번째 슬라이드\",\n    \"scroll_to\": \"{{ title }}(으)로 스크롤\",\n    \"loading_product_recommendations\": \"제품 추천 로드 중\",\n    \"discount\": \"할인 코드 적용\",\n    \"discount_menu\": \"할인 코드\",\n    \"discount_applied\": \"적용된 할인 코드: {{ code }}\",\n    \"pause_video\": \"동영상 일시 중지\",\n    \"inventory_status\": \"재고 상태\",\n    \"find_country\": \"국가 찾기\",\n    \"localization_region_and_language\": \"지역 및 언어 선택기\",\n    \"decrease_quantity\": \"수량 감소\",\n    \"increase_quantity\": \"수량 증가\",\n    \"quantity\": \"수량\",\n    \"rating\": \"이 제품의 평점은 5점 만점에 {{ rating }}점입니다\",\n    \"nested_product\": \"{{ parent_title }}용 {{ product_title }}\",\n    \"remove\": \"제거\",\n    \"view_pricing_info\": \"가격 정보 보기\",\n    \"open_hotspot\": \"핫스팟 열기\",\n    \"slideshow\": \"슬라이드 쇼\",\n    \"header_navigation_label\": \"기본\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"카트에 추가\",\n    \"clear_all\": \"모두 지우기\",\n    \"remove\": \"제거\",\n    \"view_in_your_space\": \"사용자 공간에서 보기\",\n    \"show_filters\": \"필터\",\n    \"clear\": \"지우기\",\n    \"continue_shopping\": \"쇼핑 계속하기\",\n    \"log_in_html\": \"계정이 있으십니까? 더 빠르게 결제하려면 <a href=\\\"{{ link }}\\\">로그인</a>하십시오.\",\n    \"see_items\": {\n      \"one\": \"{{ count }}개 품목 보기\",\n      \"other\": \"{{ count }}개 품목 보기\"\n    },\n    \"view_all\": \"모두 보기\",\n    \"add\": \"추가\",\n    \"choose\": \"선택\",\n    \"added\": \"추가됨\",\n    \"show_less\": \"간단히 표시\",\n    \"show_more\": \"자세히 표시\",\n    \"close\": \"닫기\",\n    \"more\": \"자세히\",\n    \"reset\": \"재설정\",\n    \"zoom\": \"확대/축소\",\n    \"close_dialog\": \"대화 상자 닫기\",\n    \"enter_using_password\": \"비밀번호를 사용하여 입장\",\n    \"submit\": \"제출\",\n    \"enter_password\": \"비밀번호 입력\",\n    \"remove_discount\": \"할인 {{ code }} 제거\",\n    \"view_store_information\": \"스토어 정보 보기\",\n    \"back\": \"뒤로\",\n    \"log_in\": \"로그인\",\n    \"log_out\": \"로그아웃\",\n    \"apply\": \"적용\",\n    \"open_image_in_full_screen\": \"전체 화면으로 이미지 열기\",\n    \"sign_in_options\": \"기타 로그인 옵션\",\n    \"sign_up\": \"가입하기\",\n    \"sort\": \"정렬\",\n    \"show_all_options\": \"모든 옵션 보기\",\n    \"open\": \"열기\"\n  },\n  \"content\": {\n    \"reviews\": \"리뷰\",\n    \"language\": \"언어\",\n    \"localization_region_and_language\": \"지역 및 언어\",\n    \"no_results_found\": \"결과 없음\",\n    \"cart_total\": \"카트 총계\",\n    \"your_cart_is_empty\": \"카트가 비어 있습니다\",\n    \"product_image\": \"제품 이미지\",\n    \"product_information\": \"제품 정보\",\n    \"quantity\": \"수량\",\n    \"product_total\": \"제품 총계\",\n    \"cart_estimated_total\": \"예상 총액\",\n    \"seller_note\": \"특별 지침\",\n    \"cart_subtotal\": \"소계\",\n    \"discounts\": \"할인\",\n    \"discount\": \"할인\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"관세 및 세금이 포함된 가격입니다. 결제 시 할인 및 <a href=\\\"{{ link }}\\\">배송료</a>가 계산됩니다.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"관세 및 세금이 포함된 가격입니다. 결제 시 할인 및 배송료가 계산됩니다.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"세금이 포함된 가격입니다. 결제 시 할인 및 <a href=\\\"{{ link }}\\\">배송료</a>가 계산됩니다.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"세금이 포함된 가격입니다. 결제 시 할인 및 배송료가 계산됩니다.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"관세가 포함된 가격입니다. 결제 시 세금, 할인 및 <a href=\\\"{{ link }}\\\">배송료</a>가 계산됩니다.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"관세가 포함된 가격입니다. 결제 시 세금, 할인 및 배송료가 계산됩니다.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"결제 시 세금, 할인 및 <a href=\\\"{{ link }}\\\">배송료</a>가 계산됩니다.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"결제 시 세금, 할인 및 배송료가 계산됩니다.\",\n    \"checkout\": \"결제\",\n    \"cart_title\": \"카트\",\n    \"price\": \"가격\",\n    \"price_regular\": \"정가\",\n    \"price_compare_at\": \"가격 비교\",\n    \"price_sale\": \"할인가\",\n    \"duties_and_taxes_included\": \"관세 및 세금이 포함된 가격입니다.\",\n    \"duties_included\": \"관세가 포함된 가격입니다.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">배송료</a>는 결제 시 계산됩니다.\",\n    \"taxes_included\": \"세금이 포함된 가격입니다.\",\n    \"product_badge_sold_out\": \"품절\",\n    \"product_badge_sale\": \"판매\",\n    \"search_input_label\": \"검색\",\n    \"search_input_placeholder\": \"검색\",\n    \"search_results\": \"검색 결과\",\n    \"search_results_label\": \"검색 결과\",\n    \"search_results_no_results\": \"\\\"{{ terms }}\\\"에 대한 검색 결과가 없습니다. 다시 검색해 보세요\",\n    \"search_results_resource_articles\": \"블로그 게시물\",\n    \"search_results_resource_collections\": \"컬렉션\",\n    \"search_results_resource_pages\": \"페이지\",\n    \"search_results_resource_products\": \"제품\",\n    \"search_results_resource_queries\": \"검색 제안\",\n    \"search_results_view_all\": \"모두 보기\",\n    \"search_results_view_all_button\": \"모두 보기\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"제품 {{ count }}개\",\n      \"other\": \"제품 {{ count }}개\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"기본\",\n      \"grid_fieldset\": \"열 그리드\",\n      \"single_item\": \"단일\",\n      \"zoom_out\": \"축소\"\n    },\n    \"recently_viewed_products\": \"최근에 본 항목\",\n    \"unavailable\": \"사용할 수 없음\",\n    \"collection_placeholder\": \"컬렉션 제목\",\n    \"product_card_placeholder\": \"제품 이름\",\n    \"product_count\": \"제품 수\",\n    \"item_count\": {\n      \"one\": \"{{ count }}개 품목\",\n      \"other\": \"{{ count }}개 품목\"\n    },\n    \"errors\": \"오류\",\n    \"search\": \"검색\",\n    \"search_results_no_results_check_spelling\": \"\\\"{{ terms }}\\\"에 대한 검색 결과가 없습니다. 철자를 확인하거나 다른 단어 또는 문구를 사용해 보세요.\",\n    \"filters\": \"필터\",\n    \"no_products_found\": \"제품을 찾을 수 없습니다.\",\n    \"price_from\": \"{{ price }}부터\",\n    \"price_filter_html\": \"최고가는 {{ price }}입니다\",\n    \"use_fewer_filters_html\": \"필터 수를 줄여보거나 <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">모든 필터를 지워보세요</a>.\",\n    \"featured_products\": \"추천 제품\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"자세히 보기\",\n    \"wrong_password\": \"잘못된 비밀번호\",\n    \"discount_code\": \"할인 코드\",\n    \"pickup_available_at_html\": \"<b>{{ location }}</b>에서 픽업 가능\",\n    \"pickup_available_in\": \"{{ pickup_time }}에 픽업 가능\",\n    \"pickup_not_available\": \"현재 픽업 사용 불가\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"account_title\": \"계정\",\n    \"account_title_personalized\": \"{{ first_name }} 님, 안녕하세요.\",\n    \"account_orders\": \"주문\",\n    \"account_profile\": \"프로필\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"관세 및 세금이 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"관세 및 세금이 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"관세가 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"관세가 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"세금 및 <a href=\\\"{{ link }}\\\">배송료</a>는 결제 시 계산됩니다.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"세금 및 배송료는 결제 시 계산됩니다.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"세금이 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"세금이 포함된 가격입니다. 배송료는 결제 시 계산됩니다.\",\n    \"view_more_details\": \"더 많은 세부 정보 보기\",\n    \"powered_by\": \"상점 제공:\",\n    \"store_owner_link_html\": \"스토어 소유자이신가요? <a href=\\\"{{ link }}\\\">여기에서 로그인</a>하세요.\",\n    \"shipping_discount_error\": \"배송 요금 할인은 결제 단계에서 주소를 추가한 후에 표시됩니다.\",\n    \"discount_code_error\": \"카트에 할인 코드를 적용할 수 없습니다\",\n    \"inventory_low_stock\": \"재고 부족\",\n    \"inventory_in_stock\": \"재고 있음\",\n    \"inventory_out_of_stock\": \"품절\",\n    \"page_placeholder_title\": \"페이지 제목\",\n    \"page_placeholder_content\": \"해당 콘텐츠를 표시할 페이지를 선택합니다.\",\n    \"placeholder_image\": \"플레이스 홀더 이미지\",\n    \"shipping_policy\": \"결제 시 배송료 계산됨.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }}개 남음\",\n      \"other\": \"{{ count }}개 남음\"\n    },\n    \"recipient_form_send_to\": \"전송 대상:\",\n    \"recipient_form_email_label\": \"수신자 이메일\",\n    \"recipient_form_email_label_my_email\": \"내 이메일\",\n    \"recipient_form_email_address\": \"수신자 이메일 주소\",\n    \"recipient_form_name_label\": \"수신자 이름(선택 사항)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }}자 입력함\",\n    \"recipient_form_send_on\": \"YYYY-MM-DD\",\n    \"recipient_form_send_on_label\": \"전송 날짜(선택 사항)\",\n    \"recipient_form_message\": \"메시지(선택 사항)\",\n    \"recipient_form_fields_visible\": \"이제 수취인 양식 필드가 표시됩니다.\",\n    \"recipient_form_fields_hidden\": \"이제 수취인 양식 필드가 숨겨집니다.\",\n    \"recipient_form_error\": \"양식 제출과 관련하여 오류가 발생했습니다.\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }}자 입력함\",\n    \"terms_and_policies\": \"약관 및 정책\",\n    \"pagination\": {\n      \"nav_label\": \"페이지 탐색\",\n      \"previous\": \"이전\",\n      \"next\": \"다음\",\n      \"page\": \"{{ page }}페이지\"\n    },\n    \"volume_pricing_available\": \"수량별 가격 책정 사용 가능\",\n    \"volume_pricing\": \"수량별 가격 책정\",\n    \"at_price_each\": \"개당 {{ price }}\",\n    \"each\": \"개당 {{ price }}\",\n    \"each_abbreviation\": \"각\",\n    \"price_at\": \"가격\",\n    \"price_range\": \"가격 범위\",\n    \"cancel\": \"취소\",\n    \"product_subtotal\": \"제품 소계\",\n    \"quantity_per_item\": \"/개\",\n    \"remove_all\": \"모두 제거\",\n    \"remove_all_items_confirmation\": \"카트에서 {{ count }}개 품목을 모두 제거하시겠습니까?\",\n    \"remove_one_item_confirmation\": \"카트에서 1개 품목을 제거하시겠습니까?\",\n    \"total_items\": \"총 품목 수\",\n    \"variant\": \"이형 상품\",\n    \"variant_total\": \"이형 상품 합계\",\n    \"view_cart\": \"카트 보기\",\n    \"your_cart\": \"카트\",\n    \"items_added_to_cart\": {\n      \"one\": \"카트에 1개 품목이 추가됨\",\n      \"other\": \"카트에 {{ count }}개 품목이 추가됨\"\n    },\n    \"item_count_cutoff\": \"{{ count }}개 이상의 품목\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"온라인 기프트 카드 코드 또는 매장 내 QR 코드 사용\",\n      \"title\": \"다음은 {{ shop }}의 {{ value }} 기프트 카드 잔액입니다.\",\n      \"subtext\": \"기프트 카드\",\n      \"shop_link\": \"온라인 스토어 방문\",\n      \"add_to_apple_wallet\": \"Apple Wallet에 추가\",\n      \"qr_image_alt\": \"QR 코드 — 스캔하여 기프트 카드 사용\",\n      \"copy_code\": \"기프트 카드 코드 복사\",\n      \"expiration_date\": \"만료: {{ expires_on }}\",\n      \"copy_code_success\": \"코드 복사 완료\",\n      \"expired\": \"만료됨\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"비밀번호\",\n    \"search\": \"검색\",\n    \"product_title\": \"제품명\",\n    \"collection_title\": \"컬렉션 제목\",\n    \"blog_posts\": \"블로그 게시물\",\n    \"blog_post_title\": \"제목\",\n    \"blog_post_author\": \"작성자\",\n    \"blog_post_date\": \"날짜\",\n    \"blog_post_description\": \"블로그 게시물 콘텐츠의 요약\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"카트에 추가\",\n      \"added_to_cart\": \"카트에 추가됨\",\n      \"adding_to_cart\": \"추가 중...\",\n      \"add_to_cart_error\": \"카트에 추가하는 중 오류 발생\",\n      \"sold_out\": \"품절\",\n      \"unavailable\": \"사용할 수 없음\",\n      \"quantity_error_max\": \"이 품목의 최대 개수는 {{ maximum }}개입니다.\",\n      \"quantity\": \"수량\",\n      \"quantity_increments\": \"{{ increment }}개씩 증가\",\n      \"quantity_minimum\": \"최소 {{ minimum }}개\",\n      \"quantity_maximum\": \"최대 {{ maximum }}개\",\n      \"in_cart\": \"카트에 있음\",\n      \"default_title\": \"기본 이름\",\n      \"sticky_add_to_cart\": \"빠른 카트 추가 바\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"~\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"댓글 {{ count }}개\",\n        \"other\": \"댓글 {{ count }}개\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"이메일\",\n      \"error\": \"댓글을 게시하지 못했습니다. 다음 사항을 해결해 주세요.\",\n      \"heading\": \"댓글 남기기\",\n      \"message\": \"메시지\",\n      \"moderated\": \"댓글을 게시하려면 먼저 승인을 받아야 합니다.\",\n      \"name\": \"이름\",\n      \"post\": \"댓글 달기\",\n      \"success_moderated\": \"댓글이 게시되었습니다. 조정 대기 중입니다\",\n      \"success\": \"댓글 게시됨\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/ko.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"테두리\",\n    \"collapsible_row\": \"축소 가능 행\",\n    \"custom_section\": \"사용자 지정 섹션\",\n    \"icon\": \"아이콘\",\n    \"logo_and_favicon\": \"로고 및 favicon\",\n    \"product_buy_buttons\": \"구매 버튼\",\n    \"product_description\": \"설명\",\n    \"product_price\": \"가격\",\n    \"slideshow\": \"슬라이드 쇼\",\n    \"typography\": \"타이포그래피\",\n    \"video\": \"비디오\",\n    \"colors\": \"색상\",\n    \"overlapping_blocks\": \"겹치는 블록\",\n    \"rich_text_section\": \"서식있는 텍스트\",\n    \"product_variant_picker\": \"이형 상품 피커\",\n    \"slideshow_controls\": \"슬라이드 쇼 컨트롤\",\n    \"size\": \"사이즈\",\n    \"spacing\": \"간격\",\n    \"product_recommendations\": \"추천 제품\",\n    \"product_media\": \"제품 미디어\",\n    \"featured_collection\": \"추천 컬렉션\",\n    \"add_to_cart\": \"카트에 추가\",\n    \"email_signup\": \"이메일 가입\",\n    \"submit_button\": \"제출 버튼\",\n    \"grid_layout_selector\": \"그리드 레이아웃 선택기\",\n    \"image\": \"이미지\",\n    \"list_items\": \"목록 품목\",\n    \"facets\": \"필터 항목\",\n    \"variants\": \"이형 상품\",\n    \"styles\": \"스타일\",\n    \"product_cards\": \"제품 카드\",\n    \"buttons\": \"버튼\",\n    \"inputs\": \"입력\",\n    \"primary_button\": \"기본 버튼\",\n    \"secondary_button\": \"보조 버튼\",\n    \"popovers_and_modals\": \"팝오버 및 모달\",\n    \"marquee\": \"스크롤 배너\",\n    \"pull_quote\": \"인용문\",\n    \"contact_form\": \"문의 양식\",\n    \"featured_product\": \"제품 하이라이트\",\n    \"icons_with_text\": \"텍스트 포함 아이콘\",\n    \"alternating_content_rows\": \"교차 행\",\n    \"accelerated_checkout\": \"빠른 결제\",\n    \"accordion\": \"아코디언\",\n    \"accordion_row\": \"아코디언 행\",\n    \"animations\": \"애니메이션\",\n    \"announcement\": \"공지\",\n    \"announcement_bar\": \"공지 표시줄\",\n    \"badges\": \"배지\",\n    \"button\": \"버튼\",\n    \"cart\": \"카트\",\n    \"cart_items\": \"카트 품목\",\n    \"cart_products\": \"카트 제품\",\n    \"cart_title\": \"카트\",\n    \"collection\": \"컬렉션\",\n    \"collection_card\": \"컬렉션 카드\",\n    \"collection_columns\": \"컬렉션 열\",\n    \"collection_container\": \"컬렉션\",\n    \"collection_description\": \"컬렉션 설명\",\n    \"collection_image\": \"컬렉션 이미지\",\n    \"collection_info\": \"컬렉션 정보\",\n    \"collection_list\": \"컬렉션 목록\",\n    \"collections\": \"컬렉션\",\n    \"content\": \"콘텐츠\",\n    \"content_grid\": \"콘텐츠 그리드\",\n    \"details\": \"세부 정보\",\n    \"divider\": \"구분선\",\n    \"filters\": \"필터링 및 정렬\",\n    \"follow_on_shop\": \"Shop에서 팔로우\",\n    \"footer\": \"바닥글\",\n    \"footer_utilities\": \"바닥글 유틸리티\",\n    \"group\": \"그룹\",\n    \"header\": \"머리글\",\n    \"heading\": \"제목\",\n    \"icons\": \"아이콘\",\n    \"image_with_text\": \"텍스트 포함 이미지\",\n    \"input\": \"입력\",\n    \"logo\": \"로고\",\n    \"magazine_grid\": \"매거진 그리드\",\n    \"media\": \"미디어\",\n    \"menu\": \"메뉴\",\n    \"mobile_layout\": \"모바일 레이아웃\",\n    \"payment_icons\": \"결제 아이콘\",\n    \"popup_link\": \"팝업 링크\",\n    \"predictive_search\": \"검색 팝오버\",\n    \"predictive_search_empty\": \"자동 완성 검색 결과 없음\",\n    \"price\": \"가격\",\n    \"product\": \"제품\",\n    \"product_card\": \"제품 카드\",\n    \"product_card_media\": \"미디어\",\n    \"product_card_rendering\": \"제품 카드 렌더링\",\n    \"product_grid\": \"그리드\",\n    \"product_grid_main\": \"제품 그리드\",\n    \"product_image\": \"제품 이미지\",\n    \"product_information\": \"제품 정보\",\n    \"product_review_stars\": \"리뷰 별점\",\n    \"quantity\": \"수량\",\n    \"row\": \"행\",\n    \"search\": \"검색\",\n    \"section\": \"섹션\",\n    \"selected_variants\": \"선택한 이형 상품\",\n    \"slide\": \"슬라이드\",\n    \"social_media_links\": \"소셜 미디어 링크\",\n    \"steps\": \"단계\",\n    \"summary\": \"요약\",\n    \"swatches\": \"견본\",\n    \"testimonials\": \"추천사\",\n    \"text\": \"텍스트\",\n    \"title\": \"제목\",\n    \"utilities\": \"유틸리티\",\n    \"search_input\": \"검색 입력\",\n    \"search_results\": \"검색 결과\",\n    \"read_only\": \"읽기 전용\",\n    \"collection_title\": \"컬렉션 이름\",\n    \"collections_bento\": \"컬렉션 목록: Bento\",\n    \"faq_section\": \"FAQ\",\n    \"hero\": \"히어로\",\n    \"jumbo_text\": \"점보 텍스트\",\n    \"product_list\": \"추천 컬렉션\",\n    \"spacer\": \"간격\",\n    \"view_all_button\": \"모두 보기\",\n    \"video_section\": \"비디오\",\n    \"blog\": \"블로그\",\n    \"blog_posts\": \"블로그 게시물\",\n    \"custom_liquid\": \"사용자 지정 Liquid\",\n    \"blog_post\": \"블로그 게시물\",\n    \"caption\": \"캡션\",\n    \"collection_card_image\": \"이미지\",\n    \"collection_links\": \"컬렉션 링크\",\n    \"collection_links_spotlight\": \"컬렉션 링크: Spotlight\",\n    \"collection_links_text\": \"컬렉션 링크: 텍스트\",\n    \"collections_carousel\": \"컬렉션 목록: 캐러셀\",\n    \"collections_editorial\": \"컬렉션 목록: 편집\",\n    \"collections_grid\": \"컬렉션 목록: 그리드\",\n    \"copyright\": \"저작권\",\n    \"count\": \"개수\",\n    \"divider_section\": \"구분선\",\n    \"drawers\": \"드로어\",\n    \"editorial\": \"편집\",\n    \"editorial_jumbo_text\": \"편집: 점보 텍스트\",\n    \"hero_marquee\": \"히어로: 스크롤 배너\",\n    \"input_fields\": \"입력 필드\",\n    \"local_pickup\": \"지역 픽업\",\n    \"marquee_section\": \"스크롤 배너\",\n    \"media_with_text\": \"텍스트 포함 미디어\",\n    \"page\": \"페이지\",\n    \"page_content\": \"콘텐츠\",\n    \"page_layout\": \"페이지 레이아웃\",\n    \"policy_list\": \"정책 링크\",\n    \"prices\": \"가격\",\n    \"products_carousel\": \"추천 컬렉션: 캐러셀\",\n    \"products_editorial\": \"추천 컬렉션: 편집\",\n    \"products_grid\": \"추천 컬렉션: 그리드\",\n    \"social_link\": \"소셜 링크\",\n    \"split_showcase\": \"분할 쇼케이스\",\n    \"variant_pickers\": \"이형 상품 피커\",\n    \"product_title\": \"제품 이름\",\n    \"large_logo\": \"큰 로고\",\n    \"product_list_button\": \"모두 보기 버튼\",\n    \"product_inventory\": \"제품 재고\",\n    \"pills\": \"필\",\n    \"description\": \"설명\",\n    \"featured_image\": \"추천 이미지\",\n    \"multicolumn\": \"다중 열\",\n    \"product_custom_property\": \"특별 지침\",\n    \"hero_bottom_aligned\": \"히어로: 아래쪽 정렬\",\n    \"blog_card\": \"블로그 카드\",\n    \"blog_posts_grid\": \"블로그 게시물: 그리드\",\n    \"blog_posts_carousel\": \"블로그 게시물: 캐러셀\",\n    \"blog_posts_editorial\": \"블로그 게시물: 편집\",\n    \"excerpt\": \"발췌\",\n    \"footer_password\": \"비밀번호 바닥글\",\n    \"policies_and_links\": \"정책 및 링크\",\n    \"card\": \"카드\",\n    \"carousel\": \"캐러셀\",\n    \"carousel_content\": \"캐러셀 콘텐츠\",\n    \"quick_order_list\": \"빠른 주문 목록\",\n    \"column\": \"열\",\n    \"comparison_slider\": \"비교 슬라이더\",\n    \"slideshow_full_frame\": \"슬라이드 쇼: 전체 프레임\",\n    \"slideshow_inset\": \"슬라이드 쇼: 인세트\",\n    \"image_compare\": \"이미지 비교\",\n    \"subheading\": \"소제목\",\n    \"featured_product_information\": \"추천 제품\",\n    \"product_hotspots\": \"제품 핫스팟\",\n    \"hotspot_product\": \"핫스팟\",\n    \"product_sku\": \"SKU(재고 관리 코드)\",\n    \"layered_slideshow\": \"레이어드 슬라이드 쇼\"\n  },\n  \"settings\": {\n    \"autoplay\": \"자동 재생\",\n    \"background\": \"배경\",\n    \"border_radius\": \"모서리 반경\",\n    \"border_width\": \"테두리 두께\",\n    \"borders\": \"테두리\",\n    \"bottom_padding\": \"아래쪽 패딩\",\n    \"color\": \"색상\",\n    \"content_direction\": \"콘텐츠 방향\",\n    \"content_position\": \"콘텐츠 위치\",\n    \"cover_image_size\": \"커버 이미지 사이즈\",\n    \"cover_image\": \"커버 이미지\",\n    \"custom_width\": \"사용자 지정 너비\",\n    \"enable_video_looping\": \"동영상 반복\",\n    \"favicon\": \"Favicon\",\n    \"heading\": \"제목\",\n    \"icon\": \"아이콘\",\n    \"image_icon\": \"이미지 아이콘\",\n    \"make_section_full_width\": \"섹션을 전체 너비로 만들기\",\n    \"overlay_opacity\": \"오버레이 불투명도\",\n    \"padding\": \"패딩\",\n    \"product\": \"제품\",\n    \"text\": \"텍스트\",\n    \"top_padding\": \"위쪽 패딩\",\n    \"video\": \"동영상\",\n    \"video_alt_text\": \"대체 텍스트\",\n    \"video_loop\": \"동영상 반복\",\n    \"video_position\": \"동영상 위치\",\n    \"width\": \"너비\",\n    \"alignment\": \"정렬\",\n    \"button\": \"버튼\",\n    \"colors\": \"색상\",\n    \"content_alignment\": \"콘텐츠 정렬\",\n    \"custom_minimum_height\": \"사용자 지정 최소 높이\",\n    \"font_family\": \"글꼴 모음\",\n    \"gap\": \"간격\",\n    \"geometric_translate_y\": \"기하학적 변환 Y\",\n    \"image\": \"이미지\",\n    \"image_opacity\": \"이미지 불투명도\",\n    \"image_position\": \"이미지 위치\",\n    \"image_ratio\": \"이미지 비율\",\n    \"label\": \"레이블\",\n    \"line_height\": \"줄 높이\",\n    \"link\": \"링크\",\n    \"layout_gap\": \"레이아웃 간격\",\n    \"minimum_height\": \"최소 높이\",\n    \"opacity\": \"불투명도\",\n    \"primary_color\": \"링크\",\n    \"section_width\": \"섹션 너비\",\n    \"size\": \"사이즈\",\n    \"slide_spacing\": \"슬라이드 간격\",\n    \"slide_width\": \"슬라이드 너비\",\n    \"slideshow_fullwidth\": \"전체 너비 슬라이드\",\n    \"style\": \"스타일\",\n    \"text_case\": \"대/소문자\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"콘텐츠 너비 제한\",\n    \"color_scheme\": \"색상 구성표\",\n    \"inherit_color_scheme\": \"색상 구성표 상속\",\n    \"product_count\": \"제품 수\",\n    \"product_type\": \"제품 유형\",\n    \"content_width\": \"콘텐츠 너비\",\n    \"collection\": \"컬렉션\",\n    \"enable_sticky_content\": \"데스크톱에서 콘텐츠 고정\",\n    \"error_color\": \"오류\",\n    \"success_color\": \"성공\",\n    \"primary_font\": \"기본 글꼴\",\n    \"secondary_font\": \"보조 글꼴\",\n    \"tertiary_font\": \"3차 글꼴\",\n    \"columns\": \"열\",\n    \"items_to_show\": \"표시할 품목\",\n    \"layout\": \"레이아웃\",\n    \"layout_type\": \"유형\",\n    \"show_grid_layout_selector\": \"그리드 레이아웃 선택기 표시\",\n    \"view_more_show\": \"더 보기 버튼 표시\",\n    \"image_gap\": \"이미지 간격\",\n    \"width_desktop\": \"데스크톱 너비\",\n    \"width_mobile\": \"모바일 너비\",\n    \"border_style\": \"테두리 스타일\",\n    \"height\": \"높이\",\n    \"thickness\": \"두께\",\n    \"stroke\": \"선 두께\",\n    \"filter_style\": \"필터 스타일\",\n    \"swatches\": \"견본\",\n    \"quick_add_colors\": \"빠른 추가 색상\",\n    \"divider_color\": \"구분선\",\n    \"border_opacity\": \"테두리 불투명도\",\n    \"hover_background\": \"호버 배경\",\n    \"hover_borders\": \"호버 테두리\",\n    \"hover_text\": \"호버 텍스트\",\n    \"primary_hover_color\": \"호버 링크\",\n    \"primary_button_text\": \"기본 버튼 텍스트\",\n    \"primary_button_background\": \"기본 버튼 배경\",\n    \"primary_button_border\": \"기본 버튼 테두리\",\n    \"secondary_button_text\": \"보조 버튼 텍스트\",\n    \"secondary_button_background\": \"보조 버튼 배경\",\n    \"secondary_button_border\": \"보조 버튼 테두리\",\n    \"shadow_color\": \"그림자\",\n    \"video_autoplay\": \"자동 재생\",\n    \"video_cover_image\": \"커버 이미지\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"소스\",\n    \"first_row_media_position\": \"첫 번째 행 미디어 위치\",\n    \"accordion\": \"아코디언\",\n    \"aspect_ratio\": \"가로 세로 비율\",\n    \"auto_rotate_announcements\": \"공지 자동 회전\",\n    \"auto_rotate_slides\": \"슬라이드 자동 회전\",\n    \"badge_corner_radius\": \"모서리 반경\",\n    \"badge_position\": \"카드 위 위치\",\n    \"badge_sale_color_scheme\": \"할인\",\n    \"badge_sold_out_color_scheme\": \"품절\",\n    \"behavior\": \"동작\",\n    \"blur\": \"그림자 흐림 효과\",\n    \"border\": \"테두리\",\n    \"bottom\": \"아래쪽\",\n    \"card_image_height\": \"제품 이미지 높이\",\n    \"carousel_on_mobile\": \"모바일에서 캐러셀\",\n    \"cart_count\": \"카트 개수\",\n    \"cart_items\": \"카트 품목\",\n    \"cart_related_products\": \"관련 제품\",\n    \"cart_title\": \"카트\",\n    \"cart_total\": \"카트 합계\",\n    \"cart_type\": \"유형\",\n    \"case\": \"대/소문자\",\n    \"checkout_buttons\": \"빠른 결제 버튼\",\n    \"collection_list\": \"컬렉션\",\n    \"collection_templates\": \"컬렉션 템플릿\",\n    \"content\": \"콘텐츠\",\n    \"corner_radius\": \"모서리 반경\",\n    \"country_region\": \"국가/지역\",\n    \"currency_code\": \"통화 코드\",\n    \"custom_height\": \"사용자 지정 높이\",\n    \"desktop_height\": \"데스크톱 높이\",\n    \"direction\": \"방향\",\n    \"display\": \"표시\",\n    \"divider_thickness\": \"구분선 두께\",\n    \"divider\": \"구분선\",\n    \"dividers\": \"구분선\",\n    \"drop_shadow\": \"그림자 효과\",\n    \"empty_state_collection_info\": \"검색어를 입력하기 전에 표시됩니다\",\n    \"empty_state_collection\": \"빈 상태 컬렉션\",\n    \"enable_filtering\": \"필터\",\n    \"enable_grid_density\": \"그리드 레이아웃 제어\",\n    \"enable_sorting\": \"정렬\",\n    \"enable_zoom\": \"확대/축소 활성화\",\n    \"equal_columns\": \"동일한 열\",\n    \"expand_first_group\": \"첫 번째 그룹 펼치기\",\n    \"extend_media_to_screen_edge\": \"미디어를 화면 가장자리까지 확장\",\n    \"extend_summary\": \"화면 가장자리까지 확장\",\n    \"extra_large\": \"매우 크게\",\n    \"extra_small\": \"매우 작게\",\n    \"flag\": \"국기\",\n    \"font_price\": \"가격 글꼴\",\n    \"font_weight\": \"글꼴 두께\",\n    \"font\": \"글꼴\",\n    \"full_width_first_image\": \"첫 번째 이미지 전체 너비\",\n    \"full_width_on_mobile\": \"모바일에서 전체 너비\",\n    \"heading_preset\": \"제목 사전 설정\",\n    \"hide_unselected_variant_media\": \"선택되지 않은 이형 상품 미디어 숨기기\",\n    \"horizontal_gap\": \"가로 간격\",\n    \"horizontal_offset\": \"그림자 가로 오프셋\",\n    \"hover_behavior\": \"호버 동작\",\n    \"icon_background\": \"아이콘 배경\",\n    \"icons\": \"아이콘\",\n    \"image_border_radius\": \"이미지 모서리 반경\",\n    \"installments\": \"할부\",\n    \"integrated_button\": \"통합 버튼\",\n    \"language_selector\": \"언어 선택기\",\n    \"large\": \"크게\",\n    \"left_padding\": \"왼쪽 패딩\",\n    \"left\": \"왼쪽\",\n    \"letter_spacing\": \"글자 간격\",\n    \"limit_media_to_screen_height\": \"화면 높이에 맞춤\",\n    \"limit_product_details_width\": \"제품 세부 정보 너비 제한\",\n    \"link_preset\": \"링크 사전 설정\",\n    \"links\": \"링크\",\n    \"logo\": \"로고\",\n    \"loop\": \"반복\",\n    \"make_details_sticky_desktop\": \"데스크톱에서 고정\",\n    \"max_width\": \"최대 너비\",\n    \"media_height\": \"미디어 높이\",\n    \"media_overlay\": \"미디어 오버레이\",\n    \"media_position\": \"미디어 위치\",\n    \"media_type\": \"미디어 유형\",\n    \"media_width\": \"미디어 너비\",\n    \"menu\": \"메뉴\",\n    \"mobile_columns\": \"모바일 열\",\n    \"mobile_height\": \"모바일 높이\",\n    \"mobile_logo_image\": \"모바일 로고\",\n    \"mobile_quick_add\": \"모바일 빠른 추가\",\n    \"motion_direction\": \"모션 방향\",\n    \"motion\": \"모션\",\n    \"movement_direction\": \"이동 방향\",\n    \"navigation_bar_color_scheme\": \"탐색 모음 색상 구성표\",\n    \"navigation_bar\": \"탐색 모음\",\n    \"navigation\": \"탐색\",\n    \"open_new_tab\": \"새 탭에서 링크 열기\",\n    \"overlay_color\": \"오버레이 색상\",\n    \"overlay\": \"오버레이\",\n    \"padding_bottom\": \"아래쪽 패딩\",\n    \"padding_horizontal\": \"가로 패딩\",\n    \"padding_top\": \"위쪽 패딩\",\n    \"page_width\": \"페이지 너비\",\n    \"pagination\": \"페이지 매김\",\n    \"placement\": \"배치\",\n    \"position\": \"위치\",\n    \"preset\": \"사전 설정\",\n    \"product_cards\": \"제품 카드\",\n    \"product_pages\": \"제품 페이지\",\n    \"product_templates\": \"제품 템플릿\",\n    \"products\": \"제품\",\n    \"quick_add\": \"빠른 추가\",\n    \"ratio\": \"비율\",\n    \"regular\": \"보통\",\n    \"review_count\": \"리뷰 수\",\n    \"right\": \"오른쪽\",\n    \"row_height\": \"행 높이\",\n    \"row\": \"행\",\n    \"seller_note\": \"판매자에게 메모 허용\",\n    \"shape\": \"모양\",\n    \"show_as_accordion\": \"모바일에서 아코디언으로 표시\",\n    \"show_sale_price_first\": \"할인가 먼저 표시\",\n    \"show_tax_info\": \"세금 정보\",\n    \"show\": \"표시\",\n    \"small\": \"작게\",\n    \"speed\": \"속도\",\n    \"statement\": \"명세서\",\n    \"sticky_header\": \"고정 머리글\",\n    \"text_hierarchy\": \"텍스트 계층\",\n    \"text_presets\": \"텍스트 사전 설정\",\n    \"title\": \"제목\",\n    \"top\": \"위쪽\",\n    \"type\": \"유형\",\n    \"type_preset\": \"텍스트 사전 설정\",\n    \"underline_thickness\": \"밑줄 두께\",\n    \"variant_images\": \"이형 상품 이미지\",\n    \"vendor\": \"공급업체\",\n    \"vertical_gap\": \"세로 간격\",\n    \"vertical_offset\": \"그림자 세로 오프셋\",\n    \"vertical_on_mobile\": \"모바일에서 세로\",\n    \"view_all_as_last_card\": \"마지막 카드로 “모두 보기”\",\n    \"weight\": \"두께\",\n    \"wrap\": \"줄 바꿈\",\n    \"read_only\": \"읽기 전용\",\n    \"always_stack_buttons\": \"항상 버튼 세로로 표시\",\n    \"background_color\": \"배경 색상\",\n    \"custom_mobile_size\": \"사용자 지정 모바일 사이즈\",\n    \"custom_mobile_width\": \"사용자 지정 모바일 너비\",\n    \"fixed_height\": \"픽셀 높이\",\n    \"fixed_width\": \"픽셀 너비\",\n    \"gradient_direction\": \"그라데이션 방향\",\n    \"hide_padding\": \"패딩 숨기기\",\n    \"logo_font\": \"로고 글꼴\",\n    \"overlay_style\": \"오버레이 스타일\",\n    \"percent_height\": \"백분율 높이\",\n    \"percent_size_mobile\": \"백분율 사이즈\",\n    \"percent_size\": \"백분율 사이즈\",\n    \"percent_width\": \"백분율 너비\",\n    \"pixel_size_mobile\": \"픽셀 사이즈\",\n    \"pixel_size\": \"픽셀 사이즈\",\n    \"shadow_opacity\": \"그림자 불투명도\",\n    \"show_filter_label\": \"적용된 필터의 텍스트 레이블\",\n    \"show_swatch_label\": \"견본의 텍스트 레이블\",\n    \"size_mobile\": \"모바일 사이즈\",\n    \"transparent_background\": \"투명 배경\",\n    \"unit\": \"단위\",\n    \"hide_logo_on_home_page\": \"홈페이지에서 로고 숨기기\",\n    \"account\": \"계정\",\n    \"align_baseline\": \"텍스트 기준선 정렬\",\n    \"add_discount_code\": \"카트 내 할인 허용\",\n    \"background_overlay\": \"배경 오버레이\",\n    \"background_media\": \"배경 미디어\",\n    \"border_thickness\": \"테두리 두께\",\n    \"bottom_row\": \"하단 행\",\n    \"button_text_case\": \"텍스트 대/소문자\",\n    \"auto_open_cart_drawer\": \"“카트에 추가” 시 서랍 자동 열기\",\n    \"collection_count\": \"컬렉션 개수\",\n    \"custom_liquid\": \"Liquid 코드\",\n    \"default\": \"기본값\",\n    \"default_logo\": \"기본 로고\",\n    \"divider_width\": \"구분선 너비\",\n    \"headings\": \"제목\",\n    \"horizontal_padding\": \"가로 패딩\",\n    \"inverse\": \"반전\",\n    \"inverse_logo\": \"반전 로고\",\n    \"layout_style\": \"스타일\",\n    \"length\": \"길이\",\n    \"mobile_pagination\": \"모바일 페이지 매김\",\n    \"open_row_by_default\": \"기본적으로 행 열기\",\n    \"page_transition_enabled\": \"페이지 전환\",\n    \"search\": \"검색\",\n    \"search_icon\": \"검색 아이콘\",\n    \"search_position\": \"위치\",\n    \"search_row\": \"행\",\n    \"show_author\": \"작성자\",\n    \"show_alignment\": \"정렬 표시\",\n    \"show_count\": \"개수 표시\",\n    \"show_date\": \"날짜\",\n    \"show_pickup_availability\": \"픽업 가능 여부 표시\",\n    \"show_search\": \"검색 표시\",\n    \"use_inverse_logo\": \"반전 로고 사용\",\n    \"vertical_padding\": \"세로 패딩\",\n    \"visibility\": \"표시 여부\",\n    \"product_corner_radius\": \"제품 모서리 반경\",\n    \"card_corner_radius\": \"카드 모서리 반경\",\n    \"alignment_mobile\": \"모바일 정렬\",\n    \"animation_repeat\": \"애니메이션 반복\",\n    \"blurred_reflection\": \"흐린 반사 효과\",\n    \"card_hover_effect\": \"카드 호버 효과\",\n    \"card_size\": \"카드 사이즈\",\n    \"collection_title_case\": \"컬렉션 이름 대/소문자\",\n    \"inventory_threshold\": \"재고 부족 기준\",\n    \"mobile_card_size\": \"모바일 카드 사이즈\",\n    \"page\": \"페이지\",\n    \"product_and_card_title_case\": \"제품 및 카드 이름 대/소문자\",\n    \"product_title_case\": \"제품 이름 대/소문자\",\n    \"reflection_opacity\": \"반사 불투명도\",\n    \"right_padding\": \"오른쪽 패딩\",\n    \"show_inventory_quantity\": \"재고 부족 수량 표시\",\n    \"text_label_case\": \"텍스트 레이블 대/소문자\",\n    \"transition_to_main_product\": \"제품 카드에서 제품 페이지로 전환\",\n    \"show_second_image_on_hover\": \"호버 시 두 번째 이미지 표시\",\n    \"media\": \"미디어\",\n    \"product_card_carousel\": \"캐러셀 표시\",\n    \"media_fit\": \"미디어 맞춤\",\n    \"scroll_speed\": \"다음 공지까지의 시간\",\n    \"show_powered_by_shopify\": \"“Powered by Shopify” 표시\",\n    \"seller_note_open_by_default\": \"기본적으로 판매자에게 보내는 메모 열기\",\n    \"gift_card_form\": \"기프트 카드 양식\",\n    \"custom_link\": \"사용자 지정 링크\",\n    \"add_to_cart_animation\": \"카트에 추가\",\n    \"product_custom_property\": {\n      \"heading\": \"제목\",\n      \"description\": \"설명\",\n      \"key\": \"속성 이름\",\n      \"key_info\": \"비워 둘 수 없으며 각 블록마다 고유해야 합니다. 카트, 체크아웃 및 주문 세부 정보에 표시됩니다.\",\n      \"placeholder_text\": \"플레이스 홀더 텍스트\",\n      \"default_heading\": \"제품 사용자 지정\",\n      \"default_placeholder\": \"특별 지침을 입력하세요\",\n      \"default_property_key\": \"특별 지침\",\n      \"max_length\": \"최대 글자 수\",\n      \"required\": \"카트에 품목을 추가하려면 입력해야 합니다\",\n      \"input_type\": \"입력 유형\",\n      \"input_type_text\": \"텍스트\",\n      \"input_type_checkbox\": \"확인란\",\n      \"content_settings\": \"콘텐츠 설정\",\n      \"buyers_input\": \"구매자 입력\",\n      \"checkbox_label\": \"확인란 레이블\",\n      \"default_checkbox_label\": \"선물 포장 포함\",\n      \"heading_preset\": \"제목\",\n      \"description_preset\": \"설명\",\n      \"input_preset\": \"입력\",\n      \"checkbox_preset\": \"확인란 레이블\"\n    },\n    \"blog\": \"블로그\",\n    \"post_count\": \"게시물 수\",\n    \"animation\": \"애니메이션\",\n    \"top_level_size\": \"최상위 사이즈\",\n    \"empty_cart_button_link\": \"빈 카트 버튼 링크\",\n    \"auto_load_products\": \"스크롤 시 제품 자동 로드\",\n    \"products_per_page\": \"페이지당 제품 수\",\n    \"custom_mobile_media\": \"모바일에서 다른 미디어 표시\",\n    \"stack_media_on_mobile\": \"미디어 쌓기\",\n    \"media_type_1\": \"미디어 유형\",\n    \"media_type_2\": \"미디어 2 유형\",\n    \"full_frame_on_mobile\": \"모바일 전체 너비\",\n    \"skus\": \"SKU(재고 관리 코드)\",\n    \"variant_per_page\": \"페이지당 이형 상품\",\n    \"image_1\": \"이미지 1\",\n    \"image_2\": \"이미지 2\",\n    \"after_image\": \"변경 후 이미지\",\n    \"before_image\": \"변경 전 이미지\",\n    \"cs_slider_style\": \"슬라이더 스타일\",\n    \"cs_slider_color\": \"슬라이더 색상\",\n    \"cs_slider_inner_color\": \"슬라이더 내부 색상\",\n    \"text_on_images\": \"이미지 위 텍스트\",\n    \"card_height\": \"카드 높이\",\n    \"submenu_size\": \"하위 메뉴 사이즈\",\n    \"desktop_position\": \"데스크톱 위치\",\n    \"desktop_pagination\": \"데스크톱 페이지 매김\",\n    \"bullseye_color\": \"내부 색상\",\n    \"hotspot_color\": \"핫스팟 색상\",\n    \"product_price_typography\": \"제품 가격 서체\",\n    \"product_title_typography\": \"제품 이름 서체\",\n    \"x_position\": \"가로 위치\",\n    \"y_position\": \"세로 위치\",\n    \"enable_sticky_add_to_cart\": \"고정 카트 추가 바\",\n    \"sticky_add_to_cart\": \"고정 카트 추가\",\n    \"actions_display_style\": \"메뉴 스타일\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"화살표\",\n    \"banana\": \"바나나\",\n    \"bottle\": \"병\",\n    \"box\": \"상자\",\n    \"buttons\": \"버튼\",\n    \"carrot\": \"당근\",\n    \"center\": \"가운데\",\n    \"chat_bubble\": \"말풍선\",\n    \"clipboard\": \"클립보드\",\n    \"contain\": \"포함\",\n    \"counter\": \"카운터\",\n    \"cover\": \"커버\",\n    \"custom\": \"사용자 지정\",\n    \"dairy_free\": \"유제품 미포함\",\n    \"dairy\": \"유제품\",\n    \"dropdowns\": \"드롭다운\",\n    \"dots\": \"점\",\n    \"dryer\": \"건조기\",\n    \"end\": \"끝\",\n    \"eye\": \"눈\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"불\",\n    \"gluten_free\": \"글루텐 프리\",\n    \"heart\": \"하트\",\n    \"horizontal\": \"가로\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"다리미\",\n    \"large\": \"크게\",\n    \"leaf\": \"잎\",\n    \"leather\": \"가죽\",\n    \"lightning_bolt\": \"번개\",\n    \"lipstick\": \"립스틱\",\n    \"lock\": \"잠금\",\n    \"map_pin\": \"지도 핀\",\n    \"medium\": \"중간\",\n    \"none\": \"없음\",\n    \"numbers\": \"숫자\",\n    \"nut_free\": \"견과류 미포함\",\n    \"pants\": \"바지\",\n    \"paw_print\": \"발자국\",\n    \"pepper\": \"고추\",\n    \"perfume\": \"향수\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"비행기\",\n    \"plant\": \"식물\",\n    \"price_tag\": \"가격표\",\n    \"question_mark\": \"물음표\",\n    \"recycle\": \"재활용\",\n    \"return\": \"반품\",\n    \"ruler\": \"자\",\n    \"serving_dish\": \"서빙 접시\",\n    \"shirt\": \"셔츠\",\n    \"shoe\": \"신발\",\n    \"silhouette\": \"실루엣\",\n    \"small\": \"작게\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"눈송이\",\n    \"star\": \"별\",\n    \"start\": \"시작\",\n    \"stopwatch\": \"스톱워치\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"트럭\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X(Twitter)\",\n    \"vertical\": \"세로\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"세탁\",\n    \"auto\": \"자동\",\n    \"default\": \"기본값\",\n    \"fill\": \"채우기\",\n    \"fit\": \"맞춤\",\n    \"full\": \"전체\",\n    \"full_and_page\": \"전체 배경, 페이지 너비 콘텐츠\",\n    \"heading\": \"제목\",\n    \"landscape\": \"가로 방향\",\n    \"lg\": \"LG\",\n    \"link\": \"링크\",\n    \"lowercase\": \"소문자\",\n    \"m\": \"M\",\n    \"outline\": \"윤곽선\",\n    \"page\": \"페이지\",\n    \"portrait\": \"세로 방향\",\n    \"s\": \"S\",\n    \"sentence\": \"문장\",\n    \"solid\": \"실선\",\n    \"space_between\": \"간격 두기\",\n    \"square\": \"정사각형\",\n    \"uppercase\": \"대문자\",\n    \"circle\": \"원\",\n    \"swatches\": \"견본\",\n    \"full_and_page_offset_left\": \"전체 배경, 페이지 너비 콘텐츠, 왼쪽 오프셋\",\n    \"full_and_page_offset_right\": \"전체 배경, 페이지 너비 콘텐츠, 오른쪽 오프셋\",\n    \"offset_left\": \"왼쪽 오프셋\",\n    \"offset_right\": \"오른쪽 오프셋\",\n    \"page_center_aligned\": \"페이지, 가운데 정렬\",\n    \"page_left_aligned\": \"페이지, 왼쪽 정렬\",\n    \"page_right_aligned\": \"페이지, 오른쪽 정렬\",\n    \"button\": \"버튼\",\n    \"caption\": \"캡션\",\n    \"h1\": \"제목 1\",\n    \"h2\": \"제목 2\",\n    \"h3\": \"제목 3\",\n    \"h4\": \"제목 4\",\n    \"h5\": \"제목 5\",\n    \"h6\": \"제목 6\",\n    \"paragraph\": \"단락\",\n    \"primary\": \"기본\",\n    \"secondary\": \"보조\",\n    \"tertiary\": \"3차\",\n    \"chevron_left\": \"왼쪽 셰브론\",\n    \"chevron_right\": \"오른쪽 셰브론\",\n    \"diamond\": \"다이아몬드\",\n    \"grid\": \"그리드\",\n    \"parallelogram\": \"평행사변형\",\n    \"rounded\": \"둥글게\",\n    \"fit_content\": \"맞춤\",\n    \"pills\": \"필\",\n    \"heavy\": \"굵게\",\n    \"thin\": \"가늘게\",\n    \"drawer\": \"드로어\",\n    \"preview\": \"미리 보기\",\n    \"text\": \"텍스트\",\n    \"video_uploaded\": \"업로드됨\",\n    \"video_external_url\": \"외부 URL\",\n    \"above_carousel\": \"캐러셀 위\",\n    \"all\": \"모두\",\n    \"always\": \"항상\",\n    \"arrows_large\": \"큰 화살표\",\n    \"arrows\": \"화살표\",\n    \"aspect_ratio\": \"가로 세로 비율\",\n    \"balance\": \"균형\",\n    \"bento\": \"Bento\",\n    \"black\": \"검정색\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"본문(크게)\",\n    \"body_regular\": \"본문(보통)\",\n    \"body_small\": \"본문(작게)\",\n    \"bold\": \"굵게\",\n    \"bottom_left\": \"왼쪽 아래\",\n    \"bottom_right\": \"오른쪽 아래\",\n    \"bottom\": \"아래쪽\",\n    \"capitalize\": \"첫 글자 대문자\",\n    \"caret\": \"캐럿\",\n    \"carousel\": \"캐러셀\",\n    \"check_box\": \"확인란\",\n    \"chevron_large\": \"큰 셰브론\",\n    \"chevron\": \"셰브론\",\n    \"chevrons\": \"셰브론\",\n    \"classic\": \"클래식\",\n    \"collection_images\": \"컬렉션 이미지\",\n    \"color\": \"색상\",\n    \"complementary\": \"추천 추가\",\n    \"dissolve\": \"디졸브\",\n    \"dotted\": \"점선\",\n    \"editorial\": \"편집\",\n    \"extra_large\": \"매우 크게\",\n    \"extra_small\": \"매우 작게\",\n    \"featured_collections\": \"추천 컬렉션\",\n    \"featured_products\": \"추천 제품\",\n    \"font_primary\": \"기본\",\n    \"font_secondary\": \"보조\",\n    \"font_tertiary\": \"3차\",\n    \"forward\": \"앞으로\",\n    \"full_screen\": \"전체 화면\",\n    \"heading_extra_large\": \"제목(매우 크게)\",\n    \"heading_extra_small\": \"제목(매우 작게)\",\n    \"heading_large\": \"제목(크게)\",\n    \"heading_regular\": \"제목(보통)\",\n    \"heading_small\": \"제목(작게)\",\n    \"icon\": \"아이콘\",\n    \"image\": \"이미지\",\n    \"input\": \"입력\",\n    \"inside_carousel\": \"캐러셀 내부\",\n    \"inverse_large\": \"반전 크게\",\n    \"inverse\": \"반전\",\n    \"large_arrows\": \"큰 화살표\",\n    \"large_chevrons\": \"큰 셰브론\",\n    \"left\": \"왼쪽\",\n    \"light\": \"가늘게\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"느슨하게\",\n    \"media_first\": \"미디어 우선\",\n    \"media_second\": \"미디어 다음\",\n    \"modal\": \"모달\",\n    \"narrow\": \"좁게\",\n    \"never\": \"사용 안 함\",\n    \"next_to_carousel\": \"캐러셀 옆\",\n    \"normal\": \"보통\",\n    \"nowrap\": \"줄 바꿈 안 함\",\n    \"off_media\": \"미디어 끄기\",\n    \"on_media\": \"미디어 위\",\n    \"on_scroll_up\": \"위로 스크롤 시\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"필\",\n    \"plus\": \"플러스\",\n    \"pretty\": \"예쁘게\",\n    \"price\": \"가격\",\n    \"primary_style\": \"기본 스타일\",\n    \"rectangle\": \"직사각형\",\n    \"regular\": \"보통\",\n    \"related\": \"관련\",\n    \"reverse\": \"역방향\",\n    \"rich_text\": \"서식있는 텍스트\",\n    \"right\": \"오른쪽\",\n    \"secondary_style\": \"보조 스타일\",\n    \"semibold\": \"세미볼드\",\n    \"shaded\": \"음영\",\n    \"show_second_image\": \"두 번째 이미지 표시\",\n    \"single\": \"단일\",\n    \"slide_left\": \"왼쪽으로 슬라이드\",\n    \"slide_up\": \"위로 슬라이드\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"스택\",\n    \"text_only\": \"텍스트만\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"미리 보기 이미지\",\n    \"tight\": \"좁게\",\n    \"top_left\": \"왼쪽 위\",\n    \"top_right\": \"오른쪽 상단\",\n    \"top\": \"위쪽\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"밑줄\",\n    \"video\": \"동영상\",\n    \"wide\": \"넓게\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"이미지 아래\",\n    \"down\": \"아래로\",\n    \"fixed\": \"고정\",\n    \"gradient\": \"그라데이션\",\n    \"on_image\": \"이미지 위\",\n    \"percent\": \"백분율\",\n    \"pixel\": \"픽셀\",\n    \"up\": \"위로\",\n    \"accent\": \"강조\",\n    \"body\": \"본문\",\n    \"button_primary\": \"기본 버튼\",\n    \"button_secondary\": \"보조 버튼\",\n    \"compact\": \"컴팩트\",\n    \"crop_to_fit\": \"잘라서 맞춤\",\n    \"hidden\": \"숨김\",\n    \"hint\": \"힌트\",\n    \"maintain_aspect_ratio\": \"가로 세로 비율 유지\",\n    \"off\": \"끄기\",\n    \"social_bluesky\": \"소셜: Bluesky\",\n    \"social_facebook\": \"소셜: Facebook\",\n    \"social_instagram\": \"소셜: Instagram\",\n    \"social_linkedin\": \"소셜: LinkedIn\",\n    \"social_pinterest\": \"소셜: Pinterest\",\n    \"social_snapchat\": \"소셜: Snapchat\",\n    \"social_spotify\": \"소셜: Spotify\",\n    \"social_threads\": \"소셜: Threads\",\n    \"social_tiktok\": \"소셜: TikTok\",\n    \"social_tumblr\": \"소셜: Tumblr\",\n    \"social_twitter\": \"소셜: X(Twitter)\",\n    \"social_whatsapp\": \"소셜: WhatsApp\",\n    \"social_vimeo\": \"소셜: Vimeo\",\n    \"social_youtube\": \"소셜: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"표준\",\n    \"subheading\": \"소제목\",\n    \"blur\": \"블러\",\n    \"lift\": \"리프트\",\n    \"reveal\": \"드러내기\",\n    \"scale\": \"확장\",\n    \"subtle_zoom\": \"확대/축소\",\n    \"with_hints\": \"힌트 포함\",\n    \"below_media\": \"미디어 아래\",\n    \"full_frame\": \"전체 프레임\",\n    \"icons\": \"아이콘\"\n  },\n  \"content\": {\n    \"background_video\": \"배경 비디오\",\n    \"describe_the_video_for\": \"화면 읽기 프로그램을 사용하는 고객을 위해 비디오에 대해 설명하세요. [자세히 알아보기](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"너비는 모바일에 맞게 자동으로 최적화됩니다.\",\n    \"advanced\": \"고급\",\n    \"background_image\": \"배경 이미지\",\n    \"block_size\": \"블록 크기\",\n    \"borders\": \"테두리\",\n    \"section_size\": \"섹션 크기\",\n    \"slideshow_width\": \"슬라이드 너비\",\n    \"typography\": \"타이포그래피\",\n    \"complementary_products\": \"추천 추가 상품은 검색 및 검색 앱을 사용하여 설정해야 합니다. [자세히 알아보기](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"열은 모바일에 맞게 자동으로 최적화됩니다\",\n    \"content_width\": \"콘텐츠 너비는 섹션 너비가 전체 너비로 설정된 경우에만 적용됩니다.\",\n    \"responsive_font_sizes\": \"모든 화면 크기에 맞게 사이즈가 자동으로 조정됩니다\",\n    \"buttons\": \"버튼\",\n    \"swatches\": \"견본\",\n    \"variant_settings\": \"이형 상품 설정\",\n    \"background\": \"배경\",\n    \"appearance\": \"모양\",\n    \"arrows\": \"화살표\",\n    \"body_size\": \"본문 크기\",\n    \"bottom_row_appearance\": \"아래쪽 행 모양\",\n    \"carousel_navigation\": \"캐러셀 탐색\",\n    \"carousel_pagination\": \"캐러셀 페이지 매김\",\n    \"copyright\": \"저작권\",\n    \"edit_logo_in_theme_settings\": \"[테마 설정](/editor?context=theme&category=logo%20and%20favicon)에서 로고 편집\",\n    \"edit_price_in_theme_settings\": \"[테마 설정](/editor?context=theme&category=currency%20code)에서 가격 서식 편집\",\n    \"edit_variants_in_theme_settings\": \"[테마 설정](/editor?context=theme&category=variants)에서 이형 상품 스타일 편집\",\n    \"email_signups_create_customer_profiles\": \"가입 시 [고객 프로필](https://help.shopify.com/manual/customers)이 추가됩니다\",\n    \"follow_on_shop_eligiblity\": \"버튼을 표시하려면 Shop 채널을 설치하고 Shop Pay를 활성화해야 합니다. [자세히 알아보기](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"글꼴\",\n    \"grid\": \"그리드\",\n    \"heading_size\": \"제목 크기\",\n    \"image\": \"이미지\",\n    \"input\": \"입력\",\n    \"layout\": \"레이아웃\",\n    \"link\": \"링크\",\n    \"link_padding\": \"링크 패딩\",\n    \"localization\": \"현지화\",\n    \"logo\": \"로고\",\n    \"margin\": \"여백\",\n    \"media\": \"미디어\",\n    \"media_1\": \"미디어 1\",\n    \"media_2\": \"미디어 2\",\n    \"menu\": \"메뉴\",\n    \"mobile_layout\": \"모바일 레이아웃\",\n    \"padding\": \"패딩\",\n    \"padding_desktop\": \"데스크톱 패딩\",\n    \"paragraph\": \"단락\",\n    \"policies\": \"정책\",\n    \"popup\": \"팝업\",\n    \"search\": \"검색\",\n    \"size\": \"크기\",\n    \"social_media\": \"소셜 미디어\",\n    \"submit_button\": \"제출 버튼\",\n    \"text_presets\": \"텍스트 사전 설정\",\n    \"transparent_background\": \"투명 배경\",\n    \"typography_primary\": \"기본 타이포그래피\",\n    \"typography_secondary\": \"보조 타이포그래피\",\n    \"typography_tertiary\": \"3차 타이포그래피\",\n    \"mobile_size\": \"모바일 크기\",\n    \"cards_layout\": \"카드 레이아웃\",\n    \"mobile_width\": \"모바일 너비\",\n    \"section_layout\": \"섹션 레이아웃\",\n    \"width\": \"너비\",\n    \"images\": \"이미지\",\n    \"visibility\": \"공개 상태\",\n    \"carousel\": \"캐러셀\",\n    \"colors\": \"색상\",\n    \"collection_page\": \"컬렉션 페이지\",\n    \"customer_account\": \"고객 계정\",\n    \"edit_empty_state_collection_in_theme_settings\": \"[테마 설정](/editor?context=theme&category=search)에서 빈 상태 컬렉션 편집\",\n    \"home_page\": \"홈페이지\",\n    \"inverse_logo_info\": \"투명한 머리글 배경이 반전으로 설정된 경우에 사용됩니다\",\n    \"manage_customer_accounts\": \"고객 계정 설정에서 [공개 상태를 관리](/admin/settings/customer_accounts)하세요. 레거시 계정은 지원되지 않습니다.\",\n    \"manage_policies\": \"[정책 관리](/admin/settings/legal)\",\n    \"product_page\": \"제품 페이지\",\n    \"text\": \"텍스트\",\n    \"thumbnails\": \"미리 보기 이미지\",\n    \"visible_if_collection_has_more_products\": \"표시된 제품보다 컬렉션에 더 많은 제품이 있는 경우에 표시됩니다\",\n    \"grid_layout\": \"그리드 레이아웃\",\n    \"app_required_for_ratings\": \"제품 평점을 사용하려면 앱이 필요합니다. [자세히 알아보기](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"아이콘\",\n    \"manage_store_name\": \"[스토어 이름 관리](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"상위 섹션의 컬렉션을 표시합니다\",\n    \"resource_reference_collection_card_image\": \"상위 컬렉션의 이미지를 표시합니다\",\n    \"resource_reference_collection_title\": \"상위 컬렉션의 제목을 표시합니다\",\n    \"resource_reference_product\": \"상위 제품에 자동으로 연결됩니다\",\n    \"resource_reference_product_card\": \"상위 섹션의 제품을 표시합니다\",\n    \"resource_reference_product_inventory\": \"상위 제품의 재고를 표시합니다\",\n    \"resource_reference_product_price\": \"상위 제품의 가격을 표시합니다\",\n    \"resource_reference_product_recommendations\": \"상위 제품을 기반으로 추천 항목을 표시합니다\",\n    \"resource_reference_product_review\": \"상위 제품의 리뷰를 표시합니다\",\n    \"resource_reference_product_swatches\": \"상위 제품의 견본을 표시합니다\",\n    \"resource_reference_product_title\": \"상위 제품의 제목을 표시합니다\",\n    \"resource_reference_product_variant_picker\": \"상위 제품의 이형 상품을 표시합니다\",\n    \"resource_reference_product_media\": \"상위 제품의 미디어를 표시합니다\",\n    \"product_media\": \"제품 미디어\",\n    \"section_link\": \"섹션 링크\",\n    \"gift_card_form_description\": \"고객은 개인 메시지와 함께 수신자의 이메일로 기프트 카드를 보낼 수 있습니다. [자세히 알아보기](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"제목\",\n    \"resource_reference_product_custom_property\": \"사용자 지정 정보를 수집하기 위해 사용자 지정 가능한 입력 필드를 추가합니다. 이 정보는 이 주문 품목에 추가되며 나중에 주문 세부 정보에서 볼 수 있습니다.\",\n    \"block_link\": \"블록 링크\",\n    \"submenu_feature\": \"서브메뉴 기능\",\n    \"cart_features\": \"카트 기능\",\n    \"email_signup\": \"이메일 가입\",\n    \"mobile_media\": \"모바일 미디어\",\n    \"mobile_media_2\": \"모바일 미디어 2\",\n    \"navigation\": \"탐색\",\n    \"popover\": \"팝오버\",\n    \"popover_position\": \"팝오버 위치\",\n    \"resource_reference_product_sku\": \"상위 제품의 SKU(재고 관리 코드)를 표시합니다\",\n    \"content_layout\": \"콘텐츠 레이아웃\",\n    \"mobile_media_1\": \"모바일 미디어 1\",\n    \"utilities\": \"유틸리티\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>고객과 브랜드에 대한 정보를 공유하세요. 제품을 설명하거나, 공지 사항을 알리거나, 스토어를 방문하는 고객을 환영할 수 있습니다.</p>\",\n    \"bestseller_h2\": \"<h2>베스트셀러</h2>\",\n    \"bestseller_h3\": \"<h3>베스트셀러</h3>\",\n    \"bestseller\": \"<p>베스트셀러</p>\",\n    \"build_better\": \"<p>더 나은 제품을 만든다는 신념</p>\",\n    \"contact_us\": \"<h2>문의하기</h2>\",\n    \"discover_bestsellers\": \"<p>기능성과 스타일의 완벽한 조화로 고객의 마음을 사로잡은 베스트셀러를 만나보세요.</p>\",\n    \"everythings_starts_with_why\": \"<p>우리의 모든 것은 '왜'라는 질문에서 시작됩니다</p>\",\n    \"explore_latest_products\": \"<p>최신 제품을 살펴보세요.</p>\",\n    \"faq\": \"<h3>자주 묻는 질문</h3>\",\n    \"first_to_know\": \"<p>새로운 컬렉션과 특별 할인에 대한 소식을 가장 먼저 받아보세요. </p>\",\n    \"free_returns\": \"<p>30일 이내 무료 반품</p>\",\n    \"free_shipping_over\": \"<p>$50 이상 구매 시 무료 배송</p>\",\n    \"goal_for_every_customer\": \"<p>모든 고객이 구매에 완전히 만족하는 것이 저희의 목표입니다. 그렇지 않은 경우 저희에게 알려주시면 문제를 해결하기 위해 최선을 다하겠습니다.</p>\",\n    \"home_to_shirts\": \"<p>홈 → 셔츠</p>\",\n    \"intentional_design\": \"<h2>의도적인 디자인</h2>\",\n    \"introducing_h2\": \"<h2><em>소개합니다</em></h2>\",\n    \"latest_products\": \"<p>이번 시즌을 위해 특별히 제작된 최신 제품을 소개합니다. 품절되기 전에 마음에 드는 제품을 쇼핑하세요!</p>\",\n    \"made_local_and_global\": \"<p>저희 제품은 국내 및 해외에서 제조됩니다. 저희는 제품의 높은 품질과 합리적인 가치를 보장하기 위해 제조 파트너를 신중하게 선택합니다.</p>\",\n    \"made_with_care_h2\": \"<h2>정성을 담아 제작</h2>\",\n    \"made_with_care_extended\": \"<p>정성을 다해 제작하고 고객의 무한한 사랑을 받는 이 시그니처 베스트셀러는 모든 기대를 뛰어넘습니다.</p>\",\n    \"made_with_care\": \"<p>정성을 다해 제작하고 고객의 무한한 사랑을 받습니다.</p>\",\n    \"make_things_better_extended\": \"<p>저희는 더 잘 작동하고 더 오래 지속되는 제품을 만듭니다. 저희 제품은 깔끔한 디자인과 정직한 소재로 실제 문제를 해결합니다.</p>\",\n    \"make_things_better\": \"<p>저희는 더 잘 작동하고 더 오래 지속되는 제품을 만듭니다.</p>\",\n    \"may_also_like\": \"<h4>추천 상품</h4>\",\n    \"new_arrivals_h1\": \"<h1>신상품</h1>\",\n    \"new_arrivals_h2\": \"<h2>신상품</h2>\",\n    \"new_arrivals_h3\": \"<h3>신상품</h3>\",\n    \"product_launch\": \"<p>최신 제품 출시 비하인드 스토리를 살펴보세요.</p>\",\n    \"product_story\": \"<p>모든 제품의 중심에는 품질과 혁신에 대한 열정으로 탄생한 고유한 스토리가 있습니다. 각 품목은 여러분의 일상을 향상시키고 즐거움을 선사합니다.</p>\",\n    \"real_people\": \"<p>훌륭한 제품을 만드는 실제 사람들</p>\",\n    \"related_product\": \"<h3>관련 제품</h3>\",\n    \"return_policy\": \"<h2>반품 정책은 무엇인가요?</h2>\",\n    \"reviews\": \"<p>★★★★★ 리뷰 368개</p>\",\n    \"shipping_based_on_location\": \"<p>배송비는 고객님의 위치와 주문 품목에 따라 계산됩니다. 구매 전에 항상 배송비를 확인할 수 있습니다.</p>\",\n    \"shop_by_collection\": \"<h3>컬렉션별로 쇼핑하기</h3>\",\n    \"signature_products\": \"<h2>시그니처 제품</h2>\",\n    \"styled_with\": \"<h3>함께 스타일링한 제품</h3>\",\n    \"subscribe\": \"<h2>이메일 구독</h2>\",\n    \"team_with_goal\": \"<h2>목표를 가진 팀</h2>\",\n    \"unable_to_accept_returns\": \"<p>특정 품목은 반품이 불가능합니다. 이러한 품목은 구매 전에 신중하게 표시됩니다.</p>\",\n    \"work_quickly_to_ship\": \"<p>주문하신 상품을 최대한 빨리 배송하기 위해 신속하게 처리하겠습니다. 주문이 배송되면 추가 정보가 포함된 이메일을 받게 됩니다. 배송 시간은 위치에 따라 다릅니다.</p>\",\n    \"join_our_email_list\": \"<h2>이메일 목록에 가입하세요</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>독점 할인 혜택을 받고 신제품을 가장 먼저 만나보세요.</p>\",\n    \"artistry_in_action\": \"<p>살아 숨 쉬는 예술성 </p>\",\n    \"authentic_materials\": \"<p>타협 없는 진정한 소재 </p>\",\n    \"bold_style_recognizable\": \"<p>어디서나 알아볼 수 있는 대담한 스타일</p>\",\n    \"discover_elevated_design\": \"<p>한 차원 높은 디자인을 만나보세요 </p>\",\n    \"expert_construction_finish\": \"<p>전문가의 손길로 완성된 완벽한 마감</p>\",\n    \"made_to_last\": \"<p>오래도록 지속되는 디자인 </p>\",\n    \"pieces_better_with_time\": \"<p>시간이 흐를수록 가치를 더하는 제품 </p>\",\n    \"quality_you_can_feel\": \"<h2>손끝으로 느껴지는 퀄리티</h2>\",\n    \"uncompromising_standards\": \"<p>타협 없는 기준 </p>\",\n    \"featured_collection_h2\": \"<h2>추천 컬렉션</h2>\",\n    \"shop_collection\": \"<p>스타일과 품질을 겸비한 엄선된 인기 제품으로 구성된 큐레이션 컬렉션을 만나보세요.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"축소 가능 행\",\n    \"button_label\": \"지금 쇼핑하기\",\n    \"heading\": \"제목\",\n    \"email_signup_button_label\": \"구독\",\n    \"accordion_heading\": \"아코디언 제목\",\n    \"contact_form_button_label\": \"제출\",\n    \"popup_link\": \"팝업 링크\",\n    \"sign_up\": \"가입\",\n    \"welcome_to_our_store\": \"저희 스토어에 오신 것을 환영합니다\",\n    \"be_bold\": \"과감하게 표현하세요.\",\n    \"shop_our_latest_arrivals\": \"최신 상품을 쇼핑하세요!\",\n    \"are_purchases_final_sale\": \"최종 할인 구매 상품이 있습니까?\",\n    \"care_instructions\": \"관리 지침\",\n    \"cart\": \"카트\",\n    \"discover_collection\": \"컬렉션 살펴보기\",\n    \"fit\": \"핏\",\n    \"how_much_for_shipping\": \"배송비는 얼마인가요?\",\n    \"learn_more\": \"자세히 알아보기\",\n    \"manufacturing\": \"제조\",\n    \"materials\": \"소재\",\n    \"return_policy\": \"반품 정책\",\n    \"shipping\": \"배송\",\n    \"shop_now_button_label\": \"지금 쇼핑하기\",\n    \"sign_up_button_label\": \"가입\",\n    \"submit_button_label\": \"제출\",\n    \"up_the_ante\": \"한\\n단계\\n더\",\n    \"view_all_button_label\": \"모두 보기\",\n    \"what_is_return_policy\": \"반품 정책은 무엇인가요?\",\n    \"when_will_order_arrive\": \"주문한 상품은 언제 도착하나요?\",\n    \"where_are_products_made\": \"제품은 어디에서 제조되나요?\",\n    \"trending_now\": \"인기 급상승\",\n    \"shop_the_look\": \"Shop the look\",\n    \"bestsellers\": \"베스트셀러\",\n    \"featured_collection\": \"추천 컬렉션\",\n    \"new_arrivals\": \"신상품\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"모바일에서는 항상 캐러셀이 사용됩니다.\",\n    \"video_alt_text\": \"보조 기술 사용자를 위해 비디오를 설명하세요\",\n    \"video_autoplay\": \"비디오는 기본적으로 음소거됩니다\",\n    \"video_external\": \"YouTube 또는 Vimeo URL을 사용하세요\",\n    \"carousel_hover_behavior_not_supported\": \"섹션 수준에서 “캐러셀” 유형을 선택하면 “캐러셀” 마우스오버가 지원되지 않습니다\",\n    \"checkout_buttons\": \"구매자가 더 빠르게 결제할 수 있도록 하여 전환율을 개선할 수 있습니다. [자세히 알아보기](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"사용자 지정 제목\",\n    \"edit_presets_in_theme_settings\": \"[테마 설정](/editor?context=theme&category=typography)에서 사전 설정 편집\",\n    \"enable_filtering_info\": \"[검색 및 검색 앱](https://help.shopify.com/manual/online-store/search-and-discovery/filters)으로 필터 사용자 지정\",\n    \"grid_layout_on_mobile\": \"모바일에는 그리드 레이아웃이 사용됩니다\",\n    \"manage_countries_regions\": \"[국가/지역 관리](/admin/settings/markets)\",\n    \"manage_languages\": \"[언어 관리](/admin/settings/languages)\",\n    \"transparent_background\": \"가독성을 위해 투명 배경이 적용된 각 템플릿을 검토하세요\",\n    \"logo_font\": \"로고를 선택하지 않은 경우에만 적용됩니다\",\n    \"aspect_ratio_adjusted\": \"일부 레이아웃에서 조정됨\",\n    \"custom_liquid\": \"앱 코드 조각 또는 기타 코드를 추가하여 고급 맞춤 설정을 생성하세요. [자세히 알아보기](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"이미지에만 적용됩니다\",\n    \"hover_effects\": \"제품 및 컬렉션 카드에 적용됩니다\",\n    \"pills_usage\": \"적용된 필터, 할인 코드, 검색 제안에 사용됩니다\",\n    \"hide_logo_on_home_page_help\": \"고정 머리글이 활성화되면 로고가 계속 표시됩니다\",\n    \"media_type_info\": \"기능은 메뉴 링크에서 가져옵니다.\",\n    \"logo_height\": \"머리글 로고에만 적용됩니다.\",\n    \"actions_display_style\": \"모바일에서는 항상 아이콘이 사용됩니다.\"\n  },\n  \"categories\": {\n    \"basic\": \"기본\",\n    \"collection\": \"컬렉션\",\n    \"collection_list\": \"컬렉션 목록\",\n    \"footer\": \"바닥글\",\n    \"forms\": \"양식\",\n    \"header\": \"머리글\",\n    \"layout\": \"레이아웃\",\n    \"links\": \"링크\",\n    \"product\": \"제품\",\n    \"product_list\": \"추천 컬렉션\",\n    \"banners\": \"배너\",\n    \"collections\": \"컬렉션\",\n    \"custom\": \"사용자 지정\",\n    \"decorative\": \"장식\",\n    \"products\": \"제품\",\n    \"other_sections\": \"기타\",\n    \"storytelling\": \"스토리텔링\",\n    \"text\": \"텍스트\"\n  }\n}\n"
  },
  {
    "path": "locales/lt.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Įkelti vaizdo įrašą „{{ description }}“\",\n    \"sold_out\": \"Išparduota\",\n    \"email_signup\": {\n      \"label\": \"El. paštas\",\n      \"placeholder\": \"El. pašto adresas\",\n      \"success\": \"Dėkojame, kad prenumeruojate!\"\n    },\n    \"filter\": \"Filtruoti\",\n    \"payment_methods\": \"Mokėjimo būdai\",\n    \"contact_form\": {\n      \"name\": \"Vardas\",\n      \"email\": \"El. pašto adresas\",\n      \"phone\": \"Telefonas\",\n      \"comment\": \"Komentaras\",\n      \"post_success\": \"Dėkojame, kad kreipėtės. Atsakysime kaip galėdami greičiau.\",\n      \"error_heading\": \"Pakoreguokite toliau pateiktą informaciją:\"\n    },\n    \"slider_label\": \"Slankiklis\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Paleisti 3D modelį\",\n    \"play_video\": \"Paleisti vaizdo įrašą\",\n    \"unit_price\": \"Vieneto kaina\",\n    \"country_results_count\": \"{{ count }} rezultatai (-ų)\",\n    \"slideshow_pause\": \"Pristabdyti skaidrių peržiūrą\",\n    \"slideshow_play\": \"Leisti skaidrių peržiūrą\",\n    \"remove_item\": \"Pašalinti {{ title}}\",\n    \"skip_to_text\": \"Eiti į turinį\",\n    \"skip_to_product_info\": \"Eiti prie informacijos apie gaminį\",\n    \"skip_to_results_list\": \"Eiti į rezultatų sąrašą\",\n    \"new_window\": \"Atidaroma naujame lange.\",\n    \"slideshow_next\": \"Kita skaidrė\",\n    \"slideshow_previous\": \"Ankstesnė skaidrė\",\n    \"close_dialog\": \"Uždaryti dialogo langą\",\n    \"reset_search\": \"Nustatyti paiešką iš naujo\",\n    \"search_results_count\": \"Rasti {{ count }} rezultatai (-ų) pagal užklausą „{{ query }}“\",\n    \"search_results_no_results\": \"Nerasta jokių rezultatų pagal užklausą „{{ query }}“\",\n    \"filters\": \"Filtrai\",\n    \"account\": \"Paskyra\",\n    \"cart\": \"Krepšelis\",\n    \"cart_count\": \"Iš viso prekių krepšelyje\",\n    \"filter_count\": {\n      \"one\": \"Pritaikytas {{ count }} filtras\",\n      \"other\": \"Pritaikyti filtrai: {{ count }}\",\n      \"few\": \"Pritaikyti filtrai: {{ count }}\",\n      \"many\": \"Pritaikyti filtrai: {{ count }}\"\n    },\n    \"menu\": \"Meniu\",\n    \"country_region\": \"Šalis / regionas\",\n    \"slide_status\": \"{{ index }} skaidrė iš {{ length }}\",\n    \"scroll_to\": \"Slinkti į „{{ title }}“\",\n    \"loading_product_recommendations\": \"Įkeliamos gaminių rekomendacijos\",\n    \"discount\": \"Taikyti nuolaidos kodą\",\n    \"discount_applied\": \"Pritaikytas nuolaidos kodas: {{ code }}\",\n    \"inventory_status\": \"Atsargų būsena\",\n    \"pause_video\": \"Pristabdyti vaizdo įrašą\",\n    \"find_country\": \"Rasti šalį\",\n    \"localization_region_and_language\": \"Regiono ir kalbos parinkiklis\",\n    \"decrease_quantity\": \"Sumažinti kiekį\",\n    \"increase_quantity\": \"Padidinti kiekį\",\n    \"rating\": \"Šio produkto vertinimas: {{ rating }} iš 5\",\n    \"quantity\": \"Kiekis\",\n    \"nested_product\": \"{{ product_title }} ({{ parent_title }})\",\n    \"discount_menu\": \"Nuolaidų kodai\",\n    \"remove\": \"Pašalinti\",\n    \"view_pricing_info\": \"Peržiūrėti kainodaros informaciją\",\n    \"open_hotspot\": \"Atverti interneto prieigos tašką\",\n    \"slideshow\": \"Skaidrių demonstracija\",\n    \"header_navigation_label\": \"Pagrindinis\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Įdėti į krepšelį\",\n    \"clear_all\": \"Išvalyti viską\",\n    \"remove\": \"Pašalinti\",\n    \"view_in_your_space\": \"Peržiūra savo erdvėje\",\n    \"show_filters\": \"Filtruoti\",\n    \"clear\": \"Išvalyti\",\n    \"continue_shopping\": \"Tęsti apsipirkimą\",\n    \"log_in_html\": \"Turite paskyrą? <a href=\\\"{{ link }}\\\">Prisijunkite</a> ir atsiskaitysite greičiau.\",\n    \"see_items\": {\n      \"one\": \"Žr. {{ count }} prekę\",\n      \"other\": \"Žr. {{ count }} prekes(-ių)\",\n      \"few\": \"Žr. {{ count }} prekes(-ių)\",\n      \"many\": \"Žr. {{ count }} prekes(-ių)\"\n    },\n    \"view_all\": \"Žr. viską\",\n    \"add\": \"Pridėti\",\n    \"choose\": \"Rinktis\",\n    \"added\": \"Pridėta\",\n    \"show_less\": \"Rodyti mažiau\",\n    \"show_more\": \"Rodyti daugiau\",\n    \"close\": \"Uždaryti\",\n    \"more\": \"Daugiau\",\n    \"zoom\": \"Keisti mastelį\",\n    \"close_dialog\": \"Uždaryti dialogo langą\",\n    \"reset\": \"Nustatyti iš naujo\",\n    \"back\": \"Atgal\",\n    \"log_in\": \"Prisijungti\",\n    \"log_out\": \"Atsijungti\",\n    \"remove_discount\": \"Pašalinti nuolaidos {{ code }}\",\n    \"enter_using_password\": \"Įeiti naudojant slaptažodį\",\n    \"submit\": \"Pateikti\",\n    \"enter_password\": \"Įveskite slaptažodį\",\n    \"view_store_information\": \"Žiūrėti parduotuvės informaciją\",\n    \"apply\": \"Taikyti\",\n    \"sign_in_options\": \"Kitos prisijungimo parinktys\",\n    \"sign_up\": \"Prisiregistruoti\",\n    \"open_image_in_full_screen\": \"Atidaryti vaizdą per visą ekraną\",\n    \"sort\": \"Rūšiuoti\",\n    \"show_all_options\": \"Rodyti visus variantus\",\n    \"open\": \"Atidaryti\"\n  },\n  \"content\": {\n    \"reviews\": \"apžvalgos (-ų; -a)\",\n    \"language\": \"Kalba\",\n    \"localization_region_and_language\": \"Regionas ir kalba\",\n    \"no_results_found\": \"Rezultatų nerasta\",\n    \"cart_total\": \"Bendra krepšelio suma\",\n    \"your_cart_is_empty\": \"Jūsų krepšelis tuščias\",\n    \"product_image\": \"Gaminio nuotrauka\",\n    \"product_information\": \"Gaminio informacija\",\n    \"quantity\": \"Kiekis\",\n    \"product_total\": \"Iš viso gaminių\",\n    \"cart_estimated_total\": \"Apskaičiuota bendra suma\",\n    \"seller_note\": \"Specialūs nurodymai\",\n    \"cart_subtotal\": \"Tarpinė suma\",\n    \"discounts\": \"Nuolaidos\",\n    \"discount\": \"Nuolaida\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Muito ir kiti mokesčiai įtraukti. Nuolaidos ir <a href=\\\"{{ link }}\\\">siuntimo išlaidos</a> apskaičiuojamos atsiskaitant.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Muito ir kiti mokesčiai įtraukti. Nuolaidos ir siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Mokesčiai įtraukti. Nuolaidos ir <a href=\\\"{{ link }}\\\">siuntimo išlaidos</a> apskaičiuojamos atsiskaitant.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Mokesčiai įtraukti. Nuolaidos ir siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Muito mokesčiai įtraukti. Mokesčiai, nuolaidos ir <a href=\\\"{{ link }}\\\">siuntimo išlaidos</a> apskaičiuojamos atsiskaitant.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Muito mokesčiai įtraukti. Mokesčiai, nuolaidos ir siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Mokesčiai, nuolaidos ir <a href=\\\"{{ link }}\\\">siuntimo išlaidos</a> apskaičiuojamos atsiskaitant.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Mokesčiai, nuolaidos ir siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"checkout\": \"Atsiskaityti\",\n    \"cart_title\": \"Krepšelis\",\n    \"price\": \"Kaina\",\n    \"price_regular\": \"Įprasta kaina\",\n    \"price_compare_at\": \"Kainų palyginimas\",\n    \"price_sale\": \"Kaina su nuolaida\",\n    \"duties_and_taxes_included\": \"Muito ir kiti mokesčiai įtraukti.\",\n    \"duties_included\": \"Muito mokesčiai įtraukti.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Siuntimo išlaidos</a> apskaičiuojamos atsiskaitant.\",\n    \"taxes_included\": \"Mokesčiai įtraukti.\",\n    \"product_badge_sold_out\": \"Išparduota\",\n    \"product_badge_sale\": \"Išpardavimas\",\n    \"search_input_label\": \"Ieškoti\",\n    \"search_input_placeholder\": \"Ieškoti\",\n    \"search_results\": \"Paieškos rezultatai\",\n    \"search_results_label\": \"Paieškos rezultatai\",\n    \"search_results_no_results\": \"Nerasta rezultatų pagal užklausą „{{ terms }}“. Bandykite kitą paiešką.\",\n    \"search_results_resource_articles\": \"Tinklaraščio įrašai\",\n    \"search_results_resource_collections\": \"Kolekcijos\",\n    \"search_results_resource_pages\": \"Puslapiai\",\n    \"search_results_resource_products\": \"Gaminiai\",\n    \"search_results_resource_queries\": \"Paieškos pasiūlymai\",\n    \"search_results_view_all\": \"Žr. viską\",\n    \"search_results_view_all_button\": \"Žr. viską\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} gaminys\",\n      \"other\": \"{{ count }} gaminiai (-ių)\",\n      \"few\": \"{{ count }} gaminiai (-ių)\",\n      \"many\": \"{{ count }} gaminiai (-ių)\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Numatytasis\",\n      \"grid_fieldset\": \"Stulpelių tinklelis\",\n      \"single_item\": \"Vienas\",\n      \"zoom_out\": \"Atitraukti\"\n    },\n    \"recently_viewed_products\": \"Neseniai žiūrėta\",\n    \"unavailable\": \"Nepasiekiama\",\n    \"collection_placeholder\": \"Kolekcijos pavadinimas\",\n    \"product_card_placeholder\": \"Gaminio pavadinimas\",\n    \"product_count\": \"Gaminių skaičius\",\n    \"item_count\": {\n      \"one\": \"{{ count }} prekė\",\n      \"other\": \"{{ count }} prekės (-ių)\",\n      \"few\": \"{{ count }} prekės (-ių)\",\n      \"many\": \"{{ count }} prekės (-ių)\"\n    },\n    \"errors\": \"Klaidos\",\n    \"price_from\": \"Nuo {{ price }}\",\n    \"featured_products\": \"Siūlomi gaminiai\",\n    \"filters\": \"Filtrai\",\n    \"no_products_found\": \"Nerasta jokių gaminių.\",\n    \"price_filter_html\": \"Didžiausia kaina yra {{ price }}\",\n    \"use_fewer_filters_html\": \"Pabandykite naudoti mažiau filtrų arba <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">išvalyti visus filtrus</a>.\",\n    \"search\": \"Ieškoti\",\n    \"search_results_no_results_check_spelling\": \"Jokių rezultatų pagal užklausą „{{ terms }}“. Patikrinkite rašybą arba vartokite kitą žodį ar frazę.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Skaityti daugiau...\",\n    \"account_title\": \"Paskyra\",\n    \"account_title_personalized\": \"Sveiki, {{ first_name }},\",\n    \"account_orders\": \"Užsakymai\",\n    \"account_profile\": \"Profilis\",\n    \"discount_code\": \"Nuolaidos kodas\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Muito ir kiti mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Muito ir kiti mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Muito mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Muito mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"pickup_available_at_html\": \"Galima atsiimti <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Galima atsiimti {{ pickup_time }}\",\n    \"pickup_not_available\": \"Šiuo metu atsiimti negalima\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Mokesčiai ir <a href=\\\"{{ link }}\\\">siuntimo išlaidos</a> apskaičiuojami atsiskaitant.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Mokesčiai ir siuntimo išlaidos apskaičiuojami atsiskaitant.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Mokesčiai įtraukti. Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"wrong_password\": \"Slaptažodis neteisingas\",\n    \"view_more_details\": \"Žiūrėti daugiau informacijos\",\n    \"inventory_low_stock\": \"Atsargos senka\",\n    \"inventory_in_stock\": \"Yra sandėlyje\",\n    \"inventory_out_of_stock\": \"Neturime\",\n    \"page_placeholder_title\": \"Puslapio pavadinimas\",\n    \"page_placeholder_content\": \"Pasirinkite puslapį jo turiniui peržiūrėti.\",\n    \"placeholder_image\": \"Vietos ženklo vaizdas\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Liko {{ count }}\",\n      \"other\": \"Liko {{ count }}\",\n      \"few\": \"Liko {{ count }}\",\n      \"many\": \"Liko {{ count }}\"\n    },\n    \"discount_code_error\": \"Jūsų krepšeliui nuolaidos kodo pritaikyti negalima\",\n    \"shipping_policy\": \"Siuntimo išlaidos apskaičiuojamos atsiskaitant.\",\n    \"shipping_discount_error\": \"Siuntimui taikomos nuolaidos rodomos atsiskaitant, įvedus adresą\",\n    \"powered_by\": \"Ši parduotuvė bus teikiama per platformą\",\n    \"store_owner_link_html\": \"Ar esate parduotuvės savininkas? <a href=\\\"{{ link }}\\\">Prisijunkite čia</a>\",\n    \"recipient_form_send_to\": \"Siųsti\",\n    \"recipient_form_email_label\": \"Gavėjo el. pašto adresas\",\n    \"recipient_form_email_label_my_email\": \"Mano el. pašto adresas\",\n    \"recipient_form_email_address\": \"Gavėjo el. pašto adresas\",\n    \"recipient_form_name_label\": \"Gavėjo vardas (pasirinktinai)\",\n    \"recipient_form_message\": \"Žinutė (pasirinktinai)\",\n    \"recipient_form_characters_used\": \"Panaudota {{ used_chars }}/{{ max_chars }} simbolių\",\n    \"recipient_form_send_on\": \"MMMM-MM-DD\",\n    \"recipient_form_send_on_label\": \"Išsiuntimo data (pasirinktinai)\",\n    \"recipient_form_fields_visible\": \"Dabar gavėjo formos laukai yra matomi\",\n    \"recipient_form_fields_hidden\": \"Dabar gavėjo formos laukai yra paslėpti\",\n    \"recipient_form_error\": \"Įvyko su formos pateikimu susijusi klaida\",\n    \"product_custom_property_character_count\": \"Panaudota {{ used_chars }}/{{ max_chars }} simbolių\",\n    \"terms_and_policies\": \"Sąlygos ir politika\",\n    \"pagination\": {\n      \"nav_label\": \"Skirstymo puslapiais navigacija\",\n      \"previous\": \"Ankstesnis\",\n      \"next\": \"Kitas\",\n      \"page\": \"{{ page }} puslapis\"\n    },\n    \"volume_pricing_available\": \"Galima kiekiu pagrįsta kainodara\",\n    \"volume_pricing\": \"Kiekiu pagrįsta kainodara\",\n    \"at_price_each\": \"po {{ price }}/vnt.\",\n    \"each\": \"{{ price }}/vnt.\",\n    \"each_abbreviation\": \"vnt.\",\n    \"price_at\": \"po\",\n    \"price_range\": \"Kainų intervalas\",\n    \"cancel\": \"Atšaukti\",\n    \"product_subtotal\": \"Produktų tarpinė suma\",\n    \"quantity_per_item\": \"/vnt.\",\n    \"remove_all\": \"Pašalinti visus\",\n    \"remove_all_items_confirmation\": \"Pašalinti visas {{ count }} prekes (-ių) iš krepšelio?\",\n    \"remove_one_item_confirmation\": \"Pašalinti 1 prekę iš krepšelio?\",\n    \"total_items\": \"Iš viso prekių\",\n    \"variant\": \"Variantas\",\n    \"variant_total\": \"Variantų bendroji suma\",\n    \"view_cart\": \"Peržiūrėti krepšelį\",\n    \"your_cart\": \"Jūsų krepšelis\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 prekė pridėta prie krepšelio\",\n      \"other\": \"{{ count }} prekių pridėta prie krepšelio\",\n      \"few\": \"{{ count }} prekių pridėta prie krepšelio\",\n      \"many\": \"{{ count }} prekių pridėta prie krepšelio\"\n    },\n    \"item_count_cutoff\": \"Daugiau kaip {{ count }} prekės (-ių)\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Panaudokite dovanų kortelės kodą internetinėje parduotuvėje arba QR kodą fizinėje parduotuvėje\",\n      \"title\": \"Štai jūsų {{ value }} vertės parduotuvės {{ shop }} dovanų kortelė!\",\n      \"subtext\": \"Jūsų dovanų kortelė\",\n      \"shop_link\": \"Apsilankyti internetinėje parduotuvėje\",\n      \"add_to_apple_wallet\": \"Pridėti prie „Apple Wallet“\",\n      \"qr_image_alt\": \"QR kodas — nuskaitykite ir panaudokite dovanų kortelę\",\n      \"copy_code\": \"Kopijuoti dovanų kortelės kodą\",\n      \"expiration_date\": \"Baigs galioti {{ expires_on }}\",\n      \"copy_code_success\": \"Kodą pavyko nukopijuoti\",\n      \"expired\": \"Nebegalioja\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentaras\",\n        \"other\": \"{{ count }} komentarai (-ų)\",\n        \"few\": \"{{ count }} komentarai (-ų)\",\n        \"many\": \"{{ count }} komentarai (-ų)\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"El. pašto adresas\",\n      \"error\": \"Komentaro paskelbti nepavyko, išspręskite nurodytas problemas:\",\n      \"heading\": \"Rašyti komentarą\",\n      \"message\": \"Žinutė\",\n      \"moderated\": \"Turėkite omenyje, kad prieš paskelbiant komentarus, jie turi būti patvirtinti.\",\n      \"name\": \"Vardas\",\n      \"post\": \"Skelbti komentarą\",\n      \"success_moderated\": \"Komentaras paskelbtas, laukiama moderavimo\",\n      \"success\": \"Komentaras paskelbtas\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"iki\"\n  },\n  \"placeholders\": {\n    \"password\": \"Slaptažodis\",\n    \"search\": \"Ieškoti\",\n    \"product_title\": \"Gaminio pavadinimas\",\n    \"collection_title\": \"Kolekcijos pavadinimas\",\n    \"blog_posts\": \"Tinklaraščio įrašai\",\n    \"blog_post_title\": \"Pavadinimas\",\n    \"blog_post_author\": \"Autorius\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Jūsų tinklaraščio įrašo turinio ištrauka\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Įdėti į krepšelį\",\n      \"adding_to_cart\": \"Pridedama…\",\n      \"added_to_cart\": \"Įdėta į krepšelį\",\n      \"add_to_cart_error\": \"Dedant į krepšelį įvyko klaida\",\n      \"quantity_error_max\": \"Nustatytas didžiausias šios prekės kiekis: {{ maximum }}\",\n      \"sold_out\": \"Išparduota\",\n      \"unavailable\": \"Nėra\",\n      \"quantity\": \"Kiekis\",\n      \"quantity_increments\": \"Kiekis didėja kas {{ increment }}\",\n      \"quantity_minimum\": \"Mažiausiai {{ minimum }}\",\n      \"quantity_maximum\": \"Daugiausiai {{ maximum }}\",\n      \"in_cart\": \"krepšelyje\",\n      \"default_title\": \"Numatytasis pavadinimas\",\n      \"sticky_add_to_cart\": \"Greito pridėjimo į krepšelį juosta\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/nb.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Last inn video: {{ description }}\",\n    \"sold_out\": \"Utsolgt\",\n    \"email_signup\": {\n      \"label\": \"E-post\",\n      \"placeholder\": \"E-postadresse\",\n      \"success\": \"Takk for at du abonnerer!\"\n    },\n    \"filter\": \"Filter\",\n    \"payment_methods\": \"Betalingsmåter\",\n    \"contact_form\": {\n      \"name\": \"Navn\",\n      \"email\": \"E-post\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Kommentar\",\n      \"post_success\": \"Takk for at du kontaktet oss. Vi svarer så snart som mulig.\",\n      \"error_heading\": \"Juster følgende:\"\n    },\n    \"slider_label\": \"Glidefelt\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Spill av 3D-modell\",\n    \"play_video\": \"Spill av video\",\n    \"unit_price\": \"Enhetspris\",\n    \"country_results_count\": \"{{ count }} resultater\",\n    \"slideshow_pause\": \"Sett lysbildefremvisningen på pause\",\n    \"slideshow_play\": \"Spill av lysbildefremvisningen\",\n    \"remove_item\": \"Fjern {{ title}}\",\n    \"skip_to_text\": \"Gå videre til innholdet\",\n    \"skip_to_product_info\": \"Hopp til produktinformasjon\",\n    \"skip_to_results_list\": \"Gå til resultatlisten\",\n    \"new_window\": \"Åpner i et nytt vindu.\",\n    \"slideshow_next\": \"Neste lysbilde\",\n    \"slideshow_previous\": \"Forrige lysbilde\",\n    \"close_dialog\": \"Lukk dialogboksen\",\n    \"reset_search\": \"Tilbakestill søk\",\n    \"search_results_count\": \"{{ count }} søkeresultater funnet for «{{ query }}»\",\n    \"search_results_no_results\": \"Fant ingen resultater for «{{ query }}»\",\n    \"filters\": \"Filtre\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter brukt\",\n      \"other\": \"{{ count }} filtre brukt\"\n    },\n    \"account\": \"Konto\",\n    \"cart\": \"Handlekurv\",\n    \"cart_count\": \"Totalt antall varer i handlekurven\",\n    \"menu\": \"Meny\",\n    \"country_region\": \"Land/region\",\n    \"slide_status\": \"Lysbilde {{ index }} av {{ length }}\",\n    \"scroll_to\": \"Bla til {{ title }}\",\n    \"loading_product_recommendations\": \"Laster inn produktanbefalinger\",\n    \"discount\": \"Bruk en rabattkode\",\n    \"discount_menu\": \"Rabattkoder\",\n    \"discount_applied\": \"Brukt rabattkode: {{ code }}\",\n    \"pause_video\": \"Sett videoen på pause\",\n    \"inventory_status\": \"Lagerstatus\",\n    \"find_country\": \"Finn land\",\n    \"localization_region_and_language\": \"Region- og språkvelger\",\n    \"decrease_quantity\": \"Reduser antallet\",\n    \"increase_quantity\": \"Øk antallet\",\n    \"quantity\": \"Antall\",\n    \"rating\": \"Vurderingen av dette produktet er {{ rating }} av 5\",\n    \"nested_product\": \"{{ product_title }} for {{ parent_title }}\",\n    \"remove\": \"Fjern\",\n    \"view_pricing_info\": \"Se prisinformasjon\",\n    \"open_hotspot\": \"Åpne tilgangspunkt\",\n    \"slideshow\": \"Lysbildefremvisning\",\n    \"header_navigation_label\": \"Primær\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Legg i handlekurv\",\n    \"clear_all\": \"Fjern alle\",\n    \"remove\": \"Fjern\",\n    \"view_in_your_space\": \"Vis på området ditt\",\n    \"show_filters\": \"Filter\",\n    \"clear\": \"Fjern\",\n    \"continue_shopping\": \"Fortsett å handle\",\n    \"log_in_html\": \"Har du en konto? <a href=\\\"{{ link }}\\\">Logg inn</a> for å betale raskere.\",\n    \"see_items\": {\n      \"one\": \"Se {{ count }} vare\",\n      \"other\": \"Se {{ count }} varer\"\n    },\n    \"view_all\": \"Vis alle\",\n    \"add\": \"Legg til\",\n    \"choose\": \"Velg\",\n    \"added\": \"Lagt til\",\n    \"show_less\": \"Vis mindre\",\n    \"show_more\": \"Vis mer\",\n    \"close\": \"Lukk\",\n    \"more\": \"Mer\",\n    \"reset\": \"Tilbakestill\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Lukk dialogboksen\",\n    \"apply\": \"Bruk\",\n    \"back\": \"Tilbake\",\n    \"log_in\": \"Logg inn\",\n    \"log_out\": \"Logg ut\",\n    \"remove_discount\": \"Fjern rabatten {{ code }}\",\n    \"enter_using_password\": \"Bruk passordet til å gå inn\",\n    \"submit\": \"Send inn\",\n    \"enter_password\": \"Angi passordet\",\n    \"view_store_information\": \"Vis butikkinformasjon\",\n    \"open_image_in_full_screen\": \"Åpne bildet i fullskjerm\",\n    \"sign_in_options\": \"Andre påloggingsalternativer\",\n    \"sign_up\": \"Registrer deg\",\n    \"sort\": \"Sorter\",\n    \"show_all_options\": \"Vis alle alternativer\",\n    \"open\": \"Åpen\"\n  },\n  \"content\": {\n    \"reviews\": \"anmeldelser\",\n    \"no_results_found\": \"Fant ingen resultater\",\n    \"language\": \"Språk\",\n    \"localization_region_and_language\": \"Område og språk\",\n    \"cart_total\": \"Totalsum for handlekurv\",\n    \"your_cart_is_empty\": \"Handlekurven din er tom\",\n    \"product_image\": \"Produktbilde\",\n    \"product_information\": \"Produktinformasjon\",\n    \"quantity\": \"Antall\",\n    \"product_total\": \"Sum for produkt\",\n    \"cart_estimated_total\": \"Estimert totalsum\",\n    \"seller_note\": \"Spesielle instruksjoner\",\n    \"cart_subtotal\": \"Delsum\",\n    \"discounts\": \"Rabatter\",\n    \"discount\": \"Rabatt\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Inkludert toll og andre avgifter. Rabatter og <a href=\\\"{{ link }}\\\">frakt</a> beregnes i kassen.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Inkludert toll og andre avgifter. Rabatter og frakt beregnes i kassen.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Avgifter inkludert. Rabatter og <a href=\\\"{{ link }}\\\">frakt</a> beregnes i kassen.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Avgifter inkludert. Rabatter og frakt beregnes i kassen.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Tollavgifter inkludert. Avgifter, rabatter og <a href=\\\"{{ link }}\\\">frakt</a> beregnes i kassen.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Tollavgifter inkludert. Avgifter, rabatter og frakt beregnes i kassen.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Avgifter, rabatter og <a href=\\\"{{ link }}\\\">frakt</a> beregnes i kassen.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Avgifter, rabatter og frakt beregnes i kassen.\",\n    \"checkout\": \"Betaling\",\n    \"cart_title\": \"Handlekurv\",\n    \"price\": \"Pris\",\n    \"price_regular\": \"Vanlig pris\",\n    \"price_compare_at\": \"Sammenligningspris\",\n    \"price_sale\": \"Rabattert pris\",\n    \"duties_and_taxes_included\": \"Toll og andre avgifter inkludert.\",\n    \"duties_included\": \"Tollavgifter inkludert.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Frakt</a> beregnes i kassen.\",\n    \"taxes_included\": \"Avgifter inkludert.\",\n    \"product_badge_sold_out\": \"Utsolgt\",\n    \"product_badge_sale\": \"Salg\",\n    \"search_input_label\": \"Søk\",\n    \"search_input_placeholder\": \"Søk\",\n    \"search_results\": \"Søkeresultater\",\n    \"search_results_label\": \"Søkeresultater\",\n    \"search_results_no_results\": \"Fant ingen resultater for «{{ terms }}». Prøv et annet søk.\",\n    \"search_results_resource_articles\": \"Blogginnlegg\",\n    \"search_results_resource_collections\": \"Samlinger\",\n    \"search_results_resource_pages\": \"Sider\",\n    \"search_results_resource_products\": \"Produkter\",\n    \"search_results_resource_queries\": \"Søkeforslag\",\n    \"search_results_view_all\": \"Vis alle\",\n    \"search_results_view_all_button\": \"Vis alle\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} produkter\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Standard\",\n      \"grid_fieldset\": \"Kolonne-rutenett\",\n      \"single_item\": \"Enkel\",\n      \"zoom_out\": \"Zoom ut\"\n    },\n    \"recently_viewed_products\": \"Nylig vist\",\n    \"unavailable\": \"Utilgjengelig\",\n    \"collection_placeholder\": \"Samlingstittel\",\n    \"product_card_placeholder\": \"Produkttittel\",\n    \"product_count\": \"Antall produkter\",\n    \"item_count\": {\n      \"one\": \"{{ count }} vare\",\n      \"other\": \"{{ count }} varer\"\n    },\n    \"errors\": \"Feil\",\n    \"price_from\": \"Fra {{ price }}\",\n    \"search\": \"Søk\",\n    \"search_results_no_results_check_spelling\": \"Fant ingen resultater for «{{ terms }}». Kontroller stavemåten, eller bruk et annet ord eller frase.\",\n    \"featured_products\": \"Utvalgte produkter\",\n    \"filters\": \"Filtre\",\n    \"no_products_found\": \"Fant ingen produkter.\",\n    \"price_filter_html\": \"Den høyeste prisen er {{ price }}\",\n    \"use_fewer_filters_html\": \"Prøv å bruke færre filtre eller <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">tøm alle filtre</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Les mer …\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Hei, {{ first_name }}\",\n    \"account_orders\": \"Bestillinger\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Rabattkode\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Inkludert tollplikter og avgifter. Frakt beregnes i kassen.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Inkludert tollplikter og avgifter. Frakt beregnes i kassen.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Inkludert tollplikter. Frakt beregnes i kassen.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Inkludert tollplikter. Frakt beregnes i kassen.\",\n    \"pickup_available_at_html\": \"Kan hentes hos <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Kan hentes {{ pickup_time }}\",\n    \"pickup_not_available\": \"Henting er ikke tilgjengelig for øyeblikket\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Avgifter og <a href=\\\"{{ link }}\\\">frakt</a> beregnes i kassen.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Avgifter og frakt beregnes i kassen.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Avgifter inkludert. Frakt beregnes i kassen.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Avgifter inkludert. Frakt beregnes i kassen.\",\n    \"view_more_details\": \"Vis mer informasjon\",\n    \"wrong_password\": \"Feil passord\",\n    \"page_placeholder_title\": \"Sidetittel\",\n    \"page_placeholder_content\": \"Velg en side for å vise innholdet.\",\n    \"placeholder_image\": \"Plassholderbilde\",\n    \"shipping_discount_error\": \"Fraktrabatter vises i kassen etter at du har lagt til en adresse\",\n    \"discount_code_error\": \"Rabattkoden kan ikke brukes på handlekurven din\",\n    \"inventory_low_stock\": \"Lav lagerbeholdning\",\n    \"inventory_in_stock\": \"På lager\",\n    \"inventory_out_of_stock\": \"Ikke på lager\",\n    \"shipping_policy\": \"Frakt beregnes i kassen.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} igjen\",\n      \"other\": \"{{ count }} igjen\"\n    },\n    \"powered_by\": \"Denne butikken skal bli drevet av\",\n    \"store_owner_link_html\": \"Er du butikkeieren? <a href=\\\"{{ link }}\\\">Logg inn her</a>\",\n    \"recipient_form_send_to\": \"Send til\",\n    \"recipient_form_email_label\": \"Mottakerens e-postadresse\",\n    \"recipient_form_email_label_my_email\": \"Min e-postadresse\",\n    \"recipient_form_email_address\": \"Mottakerens e-postadresse\",\n    \"recipient_form_name_label\": \"Mottakerens navn (valgfritt)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} tegn brukt\",\n    \"recipient_form_send_on\": \"DD.MM.ÅÅÅÅ\",\n    \"recipient_form_send_on_label\": \"Send den (valgfritt)\",\n    \"recipient_form_message\": \"Melding (valgfritt)\",\n    \"recipient_form_fields_visible\": \"Feltene i mottakerskjemaet er nå synlige\",\n    \"recipient_form_fields_hidden\": \"Feltene i mottakerskjemaet er nå skjult\",\n    \"recipient_form_error\": \"Det oppsto en feil ved innsendingen av skjemaet\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} tegn er brukt\",\n    \"terms_and_policies\": \"Vilkår og betingelser\",\n    \"pagination\": {\n      \"nav_label\": \"Sideinndelingsnavigasjon\",\n      \"previous\": \"Forrige\",\n      \"next\": \"Neste\",\n      \"page\": \"Side {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Du kan bruke volumbasert prising\",\n    \"volume_pricing\": \"Volumbasert prising\",\n    \"at_price_each\": \"til {{ price }} per stk.\",\n    \"each\": \"{{ price }} per stk.\",\n    \"each_abbreviation\": \"per stk.\",\n    \"price_at\": \"til\",\n    \"price_range\": \"Prisklasse\",\n    \"cancel\": \"Avbryt\",\n    \"product_subtotal\": \"Produktets delsum\",\n    \"quantity_per_item\": \"per stk.\",\n    \"remove_all\": \"Fjern alle\",\n    \"remove_all_items_confirmation\": \"Vil du fjerne alle ({{ count }}) varer fra handlekurven?\",\n    \"remove_one_item_confirmation\": \"Vil du fjerne én vare fra handlekurven?\",\n    \"total_items\": \"Totalt antall varer\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Variantens totalsum\",\n    \"view_cart\": \"Vis handlekurv\",\n    \"your_cart\": \"Handlekurven din\",\n    \"items_added_to_cart\": {\n      \"one\": \"Én vare er lagt til i handlekurven\",\n      \"other\": \"{{ count }} varer er lagt til i handlekurven\"\n    },\n    \"item_count_cutoff\": \"Mer enn {{ count }} varer\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Bruk gavekortet på nettet eller QR-koden i butikken\",\n      \"title\": \"Her er gavekortsaldoen {{ value }} for {{ shop }}.\",\n      \"subtext\": \"Ditt gavekort\",\n      \"shop_link\": \"Besøk nettbutikken\",\n      \"add_to_apple_wallet\": \"Legg til i Apple Wallet\",\n      \"qr_image_alt\": \"QR-kode – skann for å løse inn gavekortet\",\n      \"copy_code\": \"Kopier gavekortkoden\",\n      \"expiration_date\": \"Utløper {{ expires_on }}\",\n      \"copy_code_success\": \"Koden er kopiert\",\n      \"expired\": \"Utløpt\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} kommentar\",\n        \"other\": \"{{ count }} kommentarer\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-postadresse\",\n      \"error\": \"Kunne ikke legge ut kommentaren. Kontroller følgende:\",\n      \"heading\": \"Skriv en kommentar\",\n      \"message\": \"Melding\",\n      \"moderated\": \"Merk at kommentarer må godkjennes før de publiseres.\",\n      \"name\": \"Navn\",\n      \"post\": \"Del en kommentar\",\n      \"success_moderated\": \"Kommentar lagt ut, venter på moderering\",\n      \"success\": \"Kommentar lagt ut\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"til\"\n  },\n  \"placeholders\": {\n    \"password\": \"Passord\",\n    \"search\": \"Søk\",\n    \"product_title\": \"Produkttittel\",\n    \"collection_title\": \"Samlingstittel\",\n    \"blog_posts\": \"Blogginnlegg\",\n    \"blog_post_title\": \"Tittel\",\n    \"blog_post_author\": \"Forfatter\",\n    \"blog_post_date\": \"Dato\",\n    \"blog_post_description\": \"Et utdrag av blogginnleggets innhold\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Legg i handlekurv\",\n      \"adding_to_cart\": \"Legger til ...\",\n      \"added_to_cart\": \"Lagt til i handlekurv\",\n      \"add_to_cart_error\": \"Problem med å legge til i handlekurven\",\n      \"quantity_error_max\": \"Denne varen har et maksimumsantall på {{ maximum }}\",\n      \"sold_out\": \"Utsolgt\",\n      \"unavailable\": \"Utilgjengelig\",\n      \"quantity\": \"Antall\",\n      \"quantity_increments\": \"Økninger på {{ increment }}\",\n      \"quantity_minimum\": \"Minimum {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimum {{ maximum }}\",\n      \"in_cart\": \"i handlekurv\",\n      \"default_title\": \"Standardtittel\",\n      \"sticky_add_to_cart\": \"Hurtiglinje for «Legg i handlekurv»\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/nb.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Kanter\",\n    \"collapsible_row\": \"Sammenleggbar rad\",\n    \"colors\": \"Farger\",\n    \"custom_section\": \"Egendefinert seksjon\",\n    \"icon\": \"Ikon\",\n    \"logo_and_favicon\": \"Logo og favorittikon\",\n    \"overlapping_blocks\": \"Overlappende blokker\",\n    \"rich_text_section\": \"Rik tekst\",\n    \"product_buy_buttons\": \"Kjøpsknapper\",\n    \"product_description\": \"Beskrivelse\",\n    \"product_price\": \"Pris\",\n    \"product_variant_picker\": \"Variantvelger\",\n    \"slideshow\": \"Lysbildefremvisning\",\n    \"typography\": \"Typografi\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Kontroller for lysbildefremvisning\",\n    \"size\": \"Størrelse\",\n    \"spacing\": \"Avstand\",\n    \"product_recommendations\": \"Anbefalte produkter\",\n    \"product_media\": \"Produktmedier\",\n    \"featured_collection\": \"Utvalgt samling\",\n    \"add_to_cart\": \"Legg i handlekurv\",\n    \"email_signup\": \"E-postregistrering\",\n    \"submit_button\": \"Send inn-knapp\",\n    \"grid_layout_selector\": \"Rutenettlayout-velger\",\n    \"image\": \"Bilde\",\n    \"list_items\": \"Listeelementer\",\n    \"facets\": \"Fasetter\",\n    \"variants\": \"Varianter\",\n    \"product_cards\": \"Produktkort\",\n    \"styles\": \"Stiler\",\n    \"primary_button\": \"Primærknapp\",\n    \"secondary_button\": \"Sekundærknapp\",\n    \"buttons\": \"Knapper\",\n    \"inputs\": \"Inndatafelt\",\n    \"popovers_and_modals\": \"Popovers og modaler\",\n    \"marquee\": \"Rullebanner\",\n    \"alternating_content_rows\": \"Alternerende rader\",\n    \"pull_quote\": \"Uthevet sitat\",\n    \"contact_form\": \"Kontaktskjema\",\n    \"featured_product\": \"Produktfremheving\",\n    \"icons_with_text\": \"Ikoner med tekst\",\n    \"products_carousel\": \"Utvalgt samling: Karusell\",\n    \"products_grid\": \"Utvalgt samling: Rutenett\",\n    \"jumbo_text\": \"Jumbotekst\",\n    \"accelerated_checkout\": \"Hurtigkasse\",\n    \"accordion\": \"Trekkspillmeny\",\n    \"accordion_row\": \"Rad i trekkspillmeny\",\n    \"animations\": \"Animasjoner\",\n    \"announcement\": \"Kunngjøring\",\n    \"announcement_bar\": \"Kunngjøringslinje\",\n    \"badges\": \"Badges\",\n    \"button\": \"Knapp\",\n    \"cart\": \"Handlekurv\",\n    \"cart_items\": \"Varer i handlekurv\",\n    \"cart_products\": \"Produkter i handlekurv\",\n    \"cart_title\": \"Handlekurv\",\n    \"collection\": \"Samling\",\n    \"collection_card\": \"Samlingskort\",\n    \"collection_columns\": \"Samlingskolonner\",\n    \"collection_container\": \"Samling\",\n    \"collection_description\": \"Samlingsbeskrivelse\",\n    \"collection_image\": \"Samlingsbilde\",\n    \"collection_info\": \"Samlingsinformasjon\",\n    \"collection_list\": \"Samlingsliste\",\n    \"collections\": \"Samlinger\",\n    \"content\": \"Innhold\",\n    \"content_grid\": \"Innholdsrutenett\",\n    \"details\": \"Detaljer\",\n    \"divider\": \"Skillelinje\",\n    \"filters\": \"Filtrering og sortering\",\n    \"follow_on_shop\": \"Følg på Shop\",\n    \"footer\": \"Bunntekst\",\n    \"footer_utilities\": \"Verktøy i bunntekst\",\n    \"group\": \"Gruppe\",\n    \"header\": \"Topptekst\",\n    \"heading\": \"Overskrift\",\n    \"icons\": \"Ikoner\",\n    \"image_with_text\": \"Bilde med tekst\",\n    \"input\": \"Inndatafelt\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Magasinrutenett\",\n    \"media\": \"Medier\",\n    \"menu\": \"Meny\",\n    \"mobile_layout\": \"Mobillayout\",\n    \"payment_icons\": \"Betalingsikoner\",\n    \"popup_link\": \"Popup-lenke\",\n    \"predictive_search\": \"Søkepopover\",\n    \"predictive_search_empty\": \"Tomt prediktivt søk\",\n    \"price\": \"Pris\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Produktkort\",\n    \"product_card_media\": \"Medier\",\n    \"product_card_rendering\": \"Gjengivelse av produktkort\",\n    \"product_grid\": \"Rutenett\",\n    \"product_grid_main\": \"Produktrutenett\",\n    \"product_image\": \"Produktbilde\",\n    \"product_information\": \"Produktinformasjon\",\n    \"product_list\": \"Utvalgt samling\",\n    \"product_review_stars\": \"Anmeldelsesstjerner\",\n    \"quantity\": \"Antall\",\n    \"row\": \"Rad\",\n    \"search\": \"Søk\",\n    \"section\": \"Seksjon\",\n    \"selected_variants\": \"Valgte varianter\",\n    \"slide\": \"Lysbilde\",\n    \"social_media_links\": \"Lenker til sosiale medier\",\n    \"spacer\": \"Avstandsstykke\",\n    \"steps\": \"Trinn\",\n    \"summary\": \"Sammendrag\",\n    \"swatches\": \"Produktversjoner\",\n    \"testimonials\": \"Kundeomtaler\",\n    \"text\": \"Tekst\",\n    \"title\": \"Tittel\",\n    \"utilities\": \"Verktøy\",\n    \"search_input\": \"Søkeinndata\",\n    \"search_results\": \"Søkeresultater\",\n    \"read_only\": \"Skrivebeskyttet\",\n    \"collection_title\": \"Samlingstittel\",\n    \"collections_bento\": \"Samlingsliste: Bento\",\n    \"faq_section\": \"Vanlige spørsmål\",\n    \"hero\": \"Hero\",\n    \"view_all_button\": \"Vis alle\",\n    \"video_section\": \"Video\",\n    \"blog\": \"Blogg\",\n    \"blog_posts\": \"Blogginnlegg\",\n    \"custom_liquid\": \"Egendefinert Liquid\",\n    \"blog_post\": \"Blogginnlegg\",\n    \"caption\": \"Bildetekst\",\n    \"collection_card_image\": \"Bilde\",\n    \"collection_links\": \"Samlingslenker\",\n    \"collection_links_spotlight\": \"Samlingslenker: Fokus\",\n    \"collection_links_text\": \"Samlingslenker: Tekst\",\n    \"collections_carousel\": \"Samlingsliste: Karusell\",\n    \"collections_editorial\": \"Samlingsliste: Redaksjonelt\",\n    \"collections_grid\": \"Samlingsliste: Rutenett\",\n    \"copyright\": \"Opphavsrett\",\n    \"count\": \"Antall\",\n    \"divider_section\": \"Skillelinje\",\n    \"drawers\": \"Skuffer\",\n    \"editorial\": \"Redaksjonelt\",\n    \"editorial_jumbo_text\": \"Redaksjonelt: Jumbotekst\",\n    \"hero_marquee\": \"Hero: Rullebanner\",\n    \"input_fields\": \"Inndatafelt\",\n    \"local_pickup\": \"Lokal henting\",\n    \"marquee_section\": \"Rullebanner\",\n    \"media_with_text\": \"Medier med tekst\",\n    \"page\": \"Side\",\n    \"page_content\": \"Innhold\",\n    \"page_layout\": \"Sidelayout\",\n    \"policy_list\": \"Retningslinjelenker\",\n    \"prices\": \"Priser\",\n    \"products_editorial\": \"Utvalgt samling: Redaksjonelt\",\n    \"social_link\": \"Sosial lenke\",\n    \"split_showcase\": \"Delt utstilling\",\n    \"variant_pickers\": \"Variantvelgere\",\n    \"pills\": \"Piller\",\n    \"product_title\": \"Produkttittel\",\n    \"large_logo\": \"Stor logo\",\n    \"product_list_button\": \"Vis alle-knapp\",\n    \"product_inventory\": \"Produktvarelager\",\n    \"description\": \"Beskrivelse\",\n    \"featured_image\": \"Fremhevet bilde\",\n    \"multicolumn\": \"Flere kolonner\",\n    \"product_custom_property\": \"Spesielle instruksjoner\",\n    \"hero_bottom_aligned\": \"Hero: Bunnjustert\",\n    \"blog_card\": \"Bloggkort\",\n    \"blog_posts_grid\": \"Blogginnlegg: Rutenett\",\n    \"blog_posts_carousel\": \"Blogginnlegg: Karusell\",\n    \"blog_posts_editorial\": \"Blogginnlegg: Redaksjonelt\",\n    \"excerpt\": \"Utdrag\",\n    \"footer_password\": \"Bunntekst for passord\",\n    \"policies_and_links\": \"Retningslinjer og lenker\",\n    \"card\": \"Kort\",\n    \"carousel\": \"Karusell\",\n    \"carousel_content\": \"Karusellinnhold\",\n    \"quick_order_list\": \"Hurtigbestillingsliste\",\n    \"column\": \"Kolonne\",\n    \"comparison_slider\": \"Sammenligningsglidebryter\",\n    \"slideshow_full_frame\": \"Lysbildefremvisning: Full ramme\",\n    \"slideshow_inset\": \"Lysbildefremvisning: Innfelt\",\n    \"image_compare\": \"Bildesammenligning\",\n    \"subheading\": \"Underoverskrift\",\n    \"featured_product_information\": \"Utvalgt produkt\",\n    \"product_hotspots\": \"Produkthotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Lagdelt lysbildefremvisning\"\n  },\n  \"settings\": {\n    \"alignment\": \"Justering\",\n    \"autoplay\": \"Autospill\",\n    \"background\": \"Bakgrunn\",\n    \"border_radius\": \"Hjørneradius\",\n    \"border_width\": \"Kantlinjetykkelse\",\n    \"borders\": \"Kantlinjer\",\n    \"bottom_padding\": \"Utfylling nederst\",\n    \"button\": \"Knapp\",\n    \"color\": \"Farge\",\n    \"colors\": \"Farger\",\n    \"content_alignment\": \"Innholdsjustering\",\n    \"content_direction\": \"Innholdsretning\",\n    \"content_position\": \"Innholdsposisjon\",\n    \"cover_image_size\": \"Størrelse på forsidebilde\",\n    \"cover_image\": \"Forsidebilde\",\n    \"custom_minimum_height\": \"Egendefinert minimumshøyde\",\n    \"custom_width\": \"Egendefinert bredde\",\n    \"enable_video_looping\": \"Videolooping\",\n    \"favicon\": \"Favorittikon\",\n    \"font_family\": \"Skriftfamilie\",\n    \"gap\": \"Mellomrom\",\n    \"geometric_translate_y\": \"Geometrisk translasjon Y\",\n    \"heading\": \"Overskrift\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Bilde\",\n    \"image_icon\": \"Bildeikon\",\n    \"image_opacity\": \"Bildeopasitet\",\n    \"image_position\": \"Bildeposisjon\",\n    \"image_ratio\": \"Sideforhold for bilde\",\n    \"label\": \"Etikett\",\n    \"line_height\": \"Linjehøyde\",\n    \"link\": \"Kobling\",\n    \"layout_gap\": \"Mellomrom i layout\",\n    \"make_section_full_width\": \"Gjør seksjonen til full bredde\",\n    \"minimum_height\": \"Minimumshøyde\",\n    \"opacity\": \"Opasitet\",\n    \"overlay_opacity\": \"Opasitet for overlegg\",\n    \"padding\": \"Utfylling\",\n    \"primary_color\": \"Koblinger\",\n    \"product\": \"Produkt\",\n    \"section_width\": \"Seksjonsbredde\",\n    \"size\": \"Størrelse\",\n    \"slide_spacing\": \"Mellomrom mellom lysbilder\",\n    \"slide_width\": \"Bredde på lysbilde\",\n    \"slideshow_fullwidth\": \"Lysbilder i full bredde\",\n    \"style\": \"Stil\",\n    \"text\": \"Tekst\",\n    \"text_case\": \"Store/små bokstaver\",\n    \"top_padding\": \"Utfylling øverst\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alt. tekst\",\n    \"video_loop\": \"Loop video\",\n    \"video_position\": \"Videoposisjon\",\n    \"width\": \"Bredde\",\n    \"z_index\": \"Z-indeks\",\n    \"limit_content_width\": \"Begrens innholdsbredde\",\n    \"color_scheme\": \"Fargeskjema\",\n    \"inherit_color_scheme\": \"Arv fargeskjema\",\n    \"product_count\": \"Antall produkter\",\n    \"product_type\": \"Produkttype\",\n    \"content_width\": \"Innholdsbredde\",\n    \"collection\": \"Samling\",\n    \"enable_sticky_content\": \"Festet innhold på stasjonær datamaskin\",\n    \"error_color\": \"Feil\",\n    \"success_color\": \"Vellykket\",\n    \"primary_font\": \"Primær skrifttype\",\n    \"secondary_font\": \"Sekundær skrifttype\",\n    \"tertiary_font\": \"Tertiær skrifttype\",\n    \"columns\": \"Kolonner\",\n    \"items_to_show\": \"Varer som skal vises\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Type\",\n    \"show_grid_layout_selector\": \"Vis velger for rutenettlayout\",\n    \"view_more_show\": \"Vis «Se mer»-knappen\",\n    \"image_gap\": \"Bildemellomrom\",\n    \"width_desktop\": \"Bredde på stasjonær datamaskin\",\n    \"width_mobile\": \"Bredde på mobil\",\n    \"border_style\": \"Kantlinjestil\",\n    \"height\": \"Høyde\",\n    \"thickness\": \"Tykkelse\",\n    \"stroke\": \"Strøkbredde\",\n    \"filter_style\": \"Filterstil\",\n    \"swatches\": \"Produktversjoner\",\n    \"quick_add_colors\": \"Farger for hurtigkjøp\",\n    \"divider_color\": \"Skillelinje\",\n    \"border_opacity\": \"Kantlinjeopasitet\",\n    \"hover_background\": \"Bakgrunn ved peking\",\n    \"hover_borders\": \"Kantlinjer ved peking\",\n    \"hover_text\": \"Tekst ved peking\",\n    \"primary_hover_color\": \"Koblinger ved peking\",\n    \"primary_button_text\": \"Tekst for primærknapp\",\n    \"primary_button_background\": \"Bakgrunn for primærknapp\",\n    \"primary_button_border\": \"Kantlinje for primærknapp\",\n    \"secondary_button_text\": \"Tekst for sekundærknapp\",\n    \"secondary_button_background\": \"Bakgrunn for sekundærknapp\",\n    \"secondary_button_border\": \"Kantlinje for sekundærknapp\",\n    \"shadow_color\": \"Skygge\",\n    \"video_autoplay\": \"Autospill\",\n    \"video_cover_image\": \"Forsidebilde\",\n    \"video_external_url\": \"URL-adresse\",\n    \"video_source\": \"Kilde\",\n    \"first_row_media_position\": \"Medieposisjon for første rad\",\n    \"card_image_height\": \"Produktbildehøyde\",\n    \"shadow_opacity\": \"Skyggeopasitet\",\n    \"show_filter_label\": \"Tekstetiketter for brukte filtre\",\n    \"show_swatch_label\": \"Tekstetiketter for produktversjoner\",\n    \"accordion\": \"Trekkspillmeny\",\n    \"aspect_ratio\": \"Sideforhold\",\n    \"auto_rotate_announcements\": \"Roter kunngjøringer automatisk\",\n    \"auto_rotate_slides\": \"Roter lysbilder automatisk\",\n    \"background_color\": \"Bakgrunnsfarge\",\n    \"badge_corner_radius\": \"Hjørneradius\",\n    \"badge_position\": \"Posisjon på kort\",\n    \"badge_sale_color_scheme\": \"Salg\",\n    \"badge_sold_out_color_scheme\": \"Utsolgt\",\n    \"behavior\": \"Atferd\",\n    \"blur\": \"Skyggeuskarphet\",\n    \"border\": \"Kantlinje\",\n    \"bottom\": \"Bunn\",\n    \"carousel_on_mobile\": \"Karusell på mobil\",\n    \"cart_count\": \"Antall i handlekurv\",\n    \"cart_items\": \"Varer i handlekurv\",\n    \"cart_related_products\": \"Relaterte produkter\",\n    \"cart_title\": \"Handlekurv\",\n    \"cart_total\": \"Totalsum for handlekurv\",\n    \"cart_type\": \"Type\",\n    \"case\": \"Store/små bokstaver\",\n    \"checkout_buttons\": \"Knapper for hurtigkasse\",\n    \"collection_list\": \"Samlinger\",\n    \"collection_templates\": \"Samlingsmaler\",\n    \"content\": \"Innhold\",\n    \"corner_radius\": \"Hjørneradius\",\n    \"country_region\": \"Land/region\",\n    \"currency_code\": \"Valutakode\",\n    \"custom_height\": \"Egendefinert høyde\",\n    \"custom_mobile_size\": \"Egendefinert størrelse for mobil\",\n    \"desktop_height\": \"Høyde på stasjonær datamaskin\",\n    \"direction\": \"Retning\",\n    \"display\": \"Visning\",\n    \"divider_thickness\": \"Tykkelse på skillelinje\",\n    \"divider\": \"Skillelinje\",\n    \"dividers\": \"Skillelinjer\",\n    \"drop_shadow\": \"Skygge\",\n    \"empty_state_collection_info\": \"Vises før et søk angis\",\n    \"empty_state_collection\": \"Samling for tom tilstand\",\n    \"enable_filtering\": \"Filtre\",\n    \"enable_grid_density\": \"Kontroll for rutenettlayout\",\n    \"enable_sorting\": \"Sortering\",\n    \"enable_zoom\": \"Aktiver zoom\",\n    \"equal_columns\": \"Like kolonner\",\n    \"expand_first_group\": \"Vis første gruppe som standard\",\n    \"extend_media_to_screen_edge\": \"Utvid medier til skjermkant\",\n    \"extend_summary\": \"Utvid til skjermkant\",\n    \"extra_large\": \"Ekstra stor\",\n    \"extra_small\": \"Ekstra liten\",\n    \"fixed_height\": \"Høyde i piksler\",\n    \"fixed_width\": \"Bredde i piksler\",\n    \"flag\": \"Flagg\",\n    \"font_price\": \"Skrifttype for pris\",\n    \"font_weight\": \"Skriftvekt\",\n    \"font\": \"Skrifttype\",\n    \"full_width_first_image\": \"Første bilde i full bredde\",\n    \"full_width_on_mobile\": \"Full bredde på mobil\",\n    \"heading_preset\": \"Forhåndsinnstilling for overskrift\",\n    \"hide_padding\": \"Skjul utfylling\",\n    \"hide_unselected_variant_media\": \"Skjul medier for varianter som ikke er valgt\",\n    \"horizontal_gap\": \"Vannrett mellomrom\",\n    \"horizontal_offset\": \"Vannrett forskyvning for skygge\",\n    \"hover_behavior\": \"Atferd ved peking\",\n    \"icon_background\": \"Ikonbakgrunn\",\n    \"icons\": \"Ikoner\",\n    \"image_border_radius\": \"Hjørneradius for bilde\",\n    \"installments\": \"Avdrag\",\n    \"integrated_button\": \"Integrert knapp\",\n    \"language_selector\": \"Språkvelger\",\n    \"large\": \"Stor\",\n    \"left_padding\": \"Utfylling til venstre\",\n    \"left\": \"Venstre\",\n    \"letter_spacing\": \"Bokstavavstand\",\n    \"limit_media_to_screen_height\": \"Begrens til skjermhøyde\",\n    \"limit_product_details_width\": \"Begrens bredden på produktopplysninger\",\n    \"link_preset\": \"Forhåndsinnstilling for kobling\",\n    \"links\": \"Koblinger\",\n    \"logo_font\": \"Skrifttype for logo\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Loop\",\n    \"make_details_sticky_desktop\": \"Festet på stasjonær datamaskin\",\n    \"max_width\": \"Maksimal bredde\",\n    \"media_height\": \"Mediehøyde\",\n    \"media_overlay\": \"Medieoverlegg\",\n    \"media_position\": \"Medieposisjon\",\n    \"media_type\": \"Medietype\",\n    \"media_width\": \"Mediebredde\",\n    \"menu\": \"Meny\",\n    \"mobile_columns\": \"Kolonner på mobil\",\n    \"mobile_height\": \"Høyde på mobil\",\n    \"mobile_logo_image\": \"Logo for mobil\",\n    \"mobile_quick_add\": \"Hurtigkjøp på mobil\",\n    \"motion_direction\": \"Bevegelsesretning\",\n    \"motion\": \"Bevegelse\",\n    \"movement_direction\": \"Bevegelsesretning\",\n    \"navigation_bar_color_scheme\": \"Fargeskjema for navigasjonslinje\",\n    \"navigation_bar\": \"Navigasjonslinje\",\n    \"navigation\": \"Navigasjon\",\n    \"open_new_tab\": \"Åpne kobling i ny fane\",\n    \"overlay_color\": \"Farge på overlegg\",\n    \"overlay\": \"Overlegg\",\n    \"padding_bottom\": \"Utfylling nederst\",\n    \"padding_horizontal\": \"Vannrett utfylling\",\n    \"padding_top\": \"Utfylling øverst\",\n    \"page_width\": \"Sidebredde\",\n    \"pagination\": \"Sideinndeling\",\n    \"percent_height\": \"Høyde i prosent\",\n    \"percent_size_mobile\": \"Størrelse i prosent\",\n    \"percent_size\": \"Størrelse i prosent\",\n    \"percent_width\": \"Bredde i prosent\",\n    \"pixel_size_mobile\": \"Størrelse i piksler\",\n    \"pixel_size\": \"Størrelse i piksler\",\n    \"placement\": \"Plassering\",\n    \"position\": \"Posisjon\",\n    \"preset\": \"Forhåndsinnstilling\",\n    \"product_cards\": \"Produktkort\",\n    \"product_pages\": \"Produktsider\",\n    \"product_templates\": \"Produktmaler\",\n    \"products\": \"Produkter\",\n    \"quick_add\": \"Hurtigkjøp\",\n    \"ratio\": \"Forhold\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Antall anmeldelser\",\n    \"right\": \"Høyre\",\n    \"row_height\": \"Radhøyde\",\n    \"row\": \"Rad\",\n    \"seller_note\": \"Tillat merknad til selger\",\n    \"shape\": \"Form\",\n    \"show_as_accordion\": \"Vis som trekkspillmeny på mobil\",\n    \"show_sale_price_first\": \"Vis rabattert pris først\",\n    \"show_tax_info\": \"Avgiftsinformasjon\",\n    \"show\": \"Vis\",\n    \"size_mobile\": \"Størrelse på mobil\",\n    \"small\": \"Liten\",\n    \"speed\": \"Hastighet\",\n    \"statement\": \"Utsagn\",\n    \"sticky_header\": \"Festet topptekst\",\n    \"text_hierarchy\": \"Teksthierarki\",\n    \"text_presets\": \"Forhåndsinnstillinger for tekst\",\n    \"title\": \"Tittel\",\n    \"top\": \"Topp\",\n    \"type\": \"Type\",\n    \"type_preset\": \"Forhåndsinnstilling for tekst\",\n    \"underline_thickness\": \"Tykkelse på understreking\",\n    \"unit\": \"Enhet\",\n    \"variant_images\": \"Variantbilder\",\n    \"vendor\": \"Selger\",\n    \"vertical_gap\": \"Loddrett mellomrom\",\n    \"vertical_offset\": \"Loddrett forskyvning for skygge\",\n    \"vertical_on_mobile\": \"Loddrett på mobil\",\n    \"view_all_as_last_card\": \"«Se alle» som siste kort\",\n    \"weight\": \"Vekt\",\n    \"wrap\": \"Bryt\",\n    \"read_only\": \"Skrivebeskyttet\",\n    \"always_stack_buttons\": \"Stable alltid knapper\",\n    \"custom_mobile_width\": \"Egendefinert bredde for mobil\",\n    \"gradient_direction\": \"Gradientretning\",\n    \"headings\": \"Overskrifter\",\n    \"overlay_style\": \"Stil for overlegg\",\n    \"transparent_background\": \"Gjennomsiktig bakgrunn\",\n    \"account\": \"Konto\",\n    \"align_baseline\": \"Juster tekstens grunnlinje\",\n    \"add_discount_code\": \"Tillat rabatter i handlekurven\",\n    \"background_overlay\": \"Bakgrunnsoverlegg\",\n    \"background_media\": \"Bakgrunnsmedier\",\n    \"border_thickness\": \"Kantlinjetykkelse\",\n    \"bottom_row\": \"Nederste rad\",\n    \"button_text_case\": \"Store/små bokstaver\",\n    \"card_size\": \"Kortstørrelse\",\n    \"auto_open_cart_drawer\": \"«Legg i handlekurv» åpner skuffen automatisk\",\n    \"collection_count\": \"Antall samlinger\",\n    \"collection_title_case\": \"Store/små bokstaver for samlingstittel\",\n    \"custom_liquid\": \"Liquid-kode\",\n    \"default\": \"Standard\",\n    \"default_logo\": \"Standardlogo\",\n    \"divider_width\": \"Bredde på skillelinje\",\n    \"hide_logo_on_home_page\": \"Skjul logo på startsiden\",\n    \"horizontal_padding\": \"Vannrett utfylling\",\n    \"inverse\": \"Invertert\",\n    \"inverse_logo\": \"Invertert logo\",\n    \"layout_style\": \"Stil\",\n    \"length\": \"Lengde\",\n    \"mobile_card_size\": \"Kortstørrelse på mobil\",\n    \"mobile_pagination\": \"Sideinndeling på mobil\",\n    \"open_row_by_default\": \"Åpne rad som standard\",\n    \"page\": \"Side\",\n    \"page_transition_enabled\": \"Sideovergang\",\n    \"product_and_card_title_case\": \"Store/små bokstaver for produkt- og korttittel\",\n    \"product_title_case\": \"Store/små bokstaver for produkttittel\",\n    \"right_padding\": \"Utfylling til høyre\",\n    \"search\": \"Søk\",\n    \"search_icon\": \"Søkeikon\",\n    \"search_position\": \"Posisjon\",\n    \"search_row\": \"Rad\",\n    \"show_author\": \"Forfatter\",\n    \"show_alignment\": \"Vis justering\",\n    \"show_count\": \"Vis antall\",\n    \"show_date\": \"Dato\",\n    \"show_pickup_availability\": \"Vis tilgjengelighet for henting\",\n    \"show_search\": \"Vis søk\",\n    \"text_label_case\": \"Store/små bokstaver for tekstetikett\",\n    \"use_inverse_logo\": \"Bruk invertert logo\",\n    \"vertical_padding\": \"Loddrett utfylling\",\n    \"visibility\": \"Synlighet\",\n    \"product_corner_radius\": \"Hjørneradius for produkt\",\n    \"card_corner_radius\": \"Hjørneradius for kort\",\n    \"alignment_mobile\": \"Justering på mobil\",\n    \"animation_repeat\": \"Gjenta animasjon\",\n    \"blurred_reflection\": \"Uskarp refleksjon\",\n    \"card_hover_effect\": \"Kortets pekeeffekt\",\n    \"inventory_threshold\": \"Terskel for lav lagerbeholdning\",\n    \"reflection_opacity\": \"Refleksjonsopasitet\",\n    \"show_inventory_quantity\": \"Vis antall ved lav lagerbeholdning\",\n    \"transition_to_main_product\": \"Overgang fra produktkort til produktside\",\n    \"show_second_image_on_hover\": \"Vis det andre bildet ved peking\",\n    \"media\": \"Medier\",\n    \"product_card_carousel\": \"Vis karusell\",\n    \"media_fit\": \"Medietilpasning\",\n    \"scroll_speed\": \"Tid til neste kunngjøring\",\n    \"show_powered_by_shopify\": \"Vis «Drevet av Shopify»\",\n    \"gift_card_form\": \"Gavekortskjema\",\n    \"seller_note_open_by_default\": \"Åpne merknad til selger som standard\",\n    \"add_to_cart_animation\": \"Legg i handlekurv\",\n    \"custom_link\": \"Egendefinert lenke\",\n    \"product_custom_property\": {\n      \"heading\": \"Overskrift\",\n      \"description\": \"Beskrivelse\",\n      \"key\": \"Egenskapsnavn\",\n      \"key_info\": \"Kan ikke være tomt og må være unikt for hver blokk. Vises i handlekurven, kassen og bestillingsdetaljene.\",\n      \"placeholder_text\": \"Plassholdertekst\",\n      \"default_heading\": \"Tilpass produktet ditt\",\n      \"default_placeholder\": \"Angi spesielle instruksjoner\",\n      \"default_property_key\": \"Spesielle instruksjoner\",\n      \"max_length\": \"Maksimalt antall tegn\",\n      \"required\": \"Inndata kreves for å legge varen i handlekurven\",\n      \"input_type\": \"Inndatatype\",\n      \"input_type_text\": \"Tekst\",\n      \"input_type_checkbox\": \"Avmerkingsboks\",\n      \"content_settings\": \"Innholdsinnstillinger\",\n      \"buyers_input\": \"Kjøperens inndata\",\n      \"checkbox_label\": \"Etikett for avmerkingsboks\",\n      \"default_checkbox_label\": \"Inkluder gaveinnpakning\",\n      \"heading_preset\": \"Overskrift\",\n      \"description_preset\": \"Beskrivelse\",\n      \"input_preset\": \"Inndata\",\n      \"checkbox_preset\": \"Etikett for avmerkingsboks\"\n    },\n    \"blog\": \"Blogg\",\n    \"post_count\": \"Antall innlegg\",\n    \"animation\": \"Animasjon\",\n    \"top_level_size\": \"Størrelse på toppnivå\",\n    \"empty_cart_button_link\": \"Knappekobling for tom handlekurv\",\n    \"auto_load_products\": \"Last inn produkter automatisk ved rulling\",\n    \"products_per_page\": \"Produkter per side\",\n    \"custom_mobile_media\": \"Vis et annet medium på mobil\",\n    \"stack_media_on_mobile\": \"Stable medier\",\n    \"media_type_1\": \"Medietype\",\n    \"media_type_2\": \"Medietype 2\",\n    \"full_frame_on_mobile\": \"Full bredde på mobil\",\n    \"skus\": \"SKU-er\",\n    \"variant_per_page\": \"Varianter per side\",\n    \"image_1\": \"Bilde 1\",\n    \"image_2\": \"Bilde 2\",\n    \"after_image\": \"Etter-bilde\",\n    \"before_image\": \"Før-bilde\",\n    \"cs_slider_style\": \"Stil på glidebryter\",\n    \"cs_slider_color\": \"Farge på glidebryter\",\n    \"cs_slider_inner_color\": \"Indre farge på glidebryter\",\n    \"text_on_images\": \"Tekst på bilder\",\n    \"card_height\": \"Korthøyde\",\n    \"submenu_size\": \"Størrelse på undermeny\",\n    \"desktop_position\": \"Posisjon på stasjonær\",\n    \"desktop_pagination\": \"Sideinndeling på stasjonær\",\n    \"bullseye_color\": \"Indre farge\",\n    \"hotspot_color\": \"Hotspot-farge\",\n    \"product_price_typography\": \"Typografi for produktpris\",\n    \"product_title_typography\": \"Typografi for produkttittel\",\n    \"x_position\": \"Vannrett posisjon\",\n    \"y_position\": \"Loddrett posisjon\",\n    \"enable_sticky_add_to_cart\": \"Festet «Legg i handlekurv»-linje\",\n    \"sticky_add_to_cart\": \"Festet «Legg i handlekurv»\",\n    \"actions_display_style\": \"Menystil\"\n  },\n  \"options\": {\n    \"apple\": \"Eple\",\n    \"arrow\": \"Pil\",\n    \"auto\": \"Auto\",\n    \"banana\": \"Banan\",\n    \"bottle\": \"Flaske\",\n    \"box\": \"Boks\",\n    \"buttons\": \"Knapper\",\n    \"carrot\": \"Gulrot\",\n    \"center\": \"Midtstilt\",\n    \"chat_bubble\": \"Chat-boble\",\n    \"clipboard\": \"Utklippstavle\",\n    \"contain\": \"Tilpass\",\n    \"counter\": \"Teller\",\n    \"cover\": \"Dekk\",\n    \"custom\": \"Egendefinert\",\n    \"dairy_free\": \"Melkefri\",\n    \"dairy\": \"Meieriprodukter\",\n    \"default\": \"Standard\",\n    \"dropdowns\": \"Rullegardinmenyer\",\n    \"dots\": \"Prikker\",\n    \"dryer\": \"Tørketrommel\",\n    \"end\": \"Slutt\",\n    \"eye\": \"Øye\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Fyll\",\n    \"fire\": \"Brann\",\n    \"fit\": \"Tilpass\",\n    \"full\": \"Full\",\n    \"full_and_page\": \"Full bakgrunn, sidebredde-innhold\",\n    \"gluten_free\": \"Glutenfri\",\n    \"heading\": \"Overskrift\",\n    \"heart\": \"Hjerte\",\n    \"horizontal\": \"Horisontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Strykejern\",\n    \"landscape\": \"Liggende\",\n    \"large\": \"Stor\",\n    \"leaf\": \"Blad\",\n    \"leather\": \"Skinn\",\n    \"lg\": \"L\",\n    \"lightning_bolt\": \"Lyn\",\n    \"link\": \"Lenke\",\n    \"lipstick\": \"Leppestift\",\n    \"lock\": \"Lås\",\n    \"lowercase\": \"små bokstaver\",\n    \"m\": \"M\",\n    \"map_pin\": \"Kartnål\",\n    \"medium\": \"Middels\",\n    \"none\": \"Ingen\",\n    \"numbers\": \"Tall\",\n    \"nut_free\": \"Nøttefri\",\n    \"outline\": \"Omriss\",\n    \"page\": \"Side\",\n    \"pants\": \"Bukser\",\n    \"paw_print\": \"Poteavtrykk\",\n    \"pepper\": \"Pepper\",\n    \"perfume\": \"Parfyme\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Fly\",\n    \"plant\": \"Plante\",\n    \"portrait\": \"Stående\",\n    \"price_tag\": \"Prislapp\",\n    \"question_mark\": \"Spørsmålstegn\",\n    \"recycle\": \"Resirkuler\",\n    \"return\": \"Retur\",\n    \"ruler\": \"Linjal\",\n    \"s\": \"S\",\n    \"sentence\": \"Setning\",\n    \"serving_dish\": \"Serveringsfat\",\n    \"shirt\": \"Skjorte\",\n    \"shoe\": \"Sko\",\n    \"silhouette\": \"Silhuett\",\n    \"small\": \"Liten\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Snøfnugg\",\n    \"solid\": \"Heltrukken\",\n    \"space_between\": \"Mellomrom\",\n    \"square\": \"Firkant\",\n    \"star\": \"Stjerne\",\n    \"start\": \"Start\",\n    \"stopwatch\": \"Stoppeklokke\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Lastebil\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Store bokstaver\",\n    \"vertical\": \"Loddrett\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Vask\",\n    \"circle\": \"Sirkel\",\n    \"swatches\": \"Produktversjoner\",\n    \"full_and_page_offset_left\": \"Full bakgrunn, sidebredde-innhold, forskjøvet til venstre\",\n    \"full_and_page_offset_right\": \"Full bakgrunn, sidebredde-innhold, forskjøvet til høyre\",\n    \"offset_left\": \"Forskjøvet til venstre\",\n    \"offset_right\": \"Forskjøvet til høyre\",\n    \"page_center_aligned\": \"Side, midtstilt\",\n    \"page_left_aligned\": \"Side, venstrejustert\",\n    \"page_right_aligned\": \"Side, høyrejustert\",\n    \"button\": \"Knapp\",\n    \"caption\": \"Bildetekst\",\n    \"h1\": \"Overskrift 1\",\n    \"h2\": \"Overskrift 2\",\n    \"h3\": \"Overskrift 3\",\n    \"h4\": \"Overskrift 4\",\n    \"h5\": \"Overskrift 5\",\n    \"h6\": \"Overskrift 6\",\n    \"paragraph\": \"Avsnitt\",\n    \"primary\": \"Primær\",\n    \"secondary\": \"Sekundær\",\n    \"tertiary\": \"Tertiær\",\n    \"chevron_left\": \"Vinkel venstre\",\n    \"chevron_right\": \"Vinkel høyre\",\n    \"diamond\": \"Diamant\",\n    \"grid\": \"Rutenett\",\n    \"parallelogram\": \"Parallellogram\",\n    \"rounded\": \"Avrundet\",\n    \"fit_content\": \"Tilpass\",\n    \"pills\": \"Piller\",\n    \"heavy\": \"Tjukk\",\n    \"thin\": \"Tynn\",\n    \"drawer\": \"Skuff\",\n    \"preview\": \"Forhåndsvisning\",\n    \"text\": \"Tekst\",\n    \"video_uploaded\": \"Opplastet\",\n    \"video_external_url\": \"Ekstern URL-adresse\",\n    \"aspect_ratio\": \"Størrelsesforhold\",\n    \"fixed\": \"Fast\",\n    \"pixel\": \"Piksel\",\n    \"percent\": \"Prosent\",\n    \"above_carousel\": \"Over karusellen\",\n    \"all\": \"Alle\",\n    \"up\": \"Opp\",\n    \"down\": \"Ned\",\n    \"always\": \"Alltid\",\n    \"arrows_large\": \"Store piler\",\n    \"arrows\": \"Piler\",\n    \"balance\": \"Balanse\",\n    \"bento\": \"Bento\",\n    \"black\": \"Svart\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Brødtekst (Stor)\",\n    \"body_regular\": \"Brødtekst (Vanlig)\",\n    \"body_small\": \"Brødtekst (Liten)\",\n    \"bold\": \"Fet\",\n    \"bottom_left\": \"Nede til venstre\",\n    \"bottom_right\": \"Nede til høyre\",\n    \"bottom\": \"Bunn\",\n    \"capitalize\": \"Bruk store forbokstaver\",\n    \"caret\": \"Innskuddstegn\",\n    \"carousel\": \"Karusell\",\n    \"check_box\": \"Avmerkingsboks\",\n    \"chevron_large\": \"Store vinkler\",\n    \"chevron\": \"Vinkel\",\n    \"chevrons\": \"Vinkler\",\n    \"classic\": \"Klassisk\",\n    \"collection_images\": \"Samlingsbilder\",\n    \"color\": \"Farge\",\n    \"complementary\": \"Komplementær\",\n    \"dissolve\": \"Oppløsning\",\n    \"dotted\": \"Stiplet\",\n    \"editorial\": \"Redaksjonelt\",\n    \"extra_large\": \"Ekstra stor\",\n    \"extra_small\": \"Ekstra liten\",\n    \"featured_collections\": \"Utvalgte samlinger\",\n    \"featured_products\": \"Utvalgte produkter\",\n    \"font_primary\": \"Primær\",\n    \"font_secondary\": \"Sekundær\",\n    \"font_tertiary\": \"Tertiær\",\n    \"forward\": \"Fremover\",\n    \"full_screen\": \"Fullskjerm\",\n    \"gradient\": \"Gradering\",\n    \"heading_extra_large\": \"Overskrift (Ekstra stor)\",\n    \"heading_extra_small\": \"Overskrift (Ekstra liten)\",\n    \"heading_large\": \"Overskrift (Stor)\",\n    \"heading_regular\": \"Overskrift (Vanlig)\",\n    \"heading_small\": \"Overskrift (Liten)\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Bilde\",\n    \"input\": \"Inndatafelt\",\n    \"inside_carousel\": \"Inne i karusellen\",\n    \"inverse_large\": \"Invers stor\",\n    \"inverse\": \"Invers\",\n    \"large_arrows\": \"Store piler\",\n    \"large_chevrons\": \"Store vinkler\",\n    \"left\": \"Venstre\",\n    \"light\": \"Lett\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Løs\",\n    \"media_first\": \"Medier først\",\n    \"media_second\": \"Medier som nummer to\",\n    \"modal\": \"Modal\",\n    \"narrow\": \"Smal\",\n    \"never\": \"Aldri\",\n    \"next_to_carousel\": \"Ved siden av karusellen\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Ingen tekstbryting\",\n    \"off_media\": \"Utenfor medier\",\n    \"on_media\": \"På medier\",\n    \"on_scroll_up\": \"Ved rulling opp\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pille\",\n    \"plus\": \"Pluss\",\n    \"pretty\": \"Pen\",\n    \"price\": \"Pris\",\n    \"primary_style\": \"Primær stil\",\n    \"rectangle\": \"Rektangel\",\n    \"regular\": \"Vanlig\",\n    \"related\": \"Relatert\",\n    \"reverse\": \"Motsatt\",\n    \"rich_text\": \"Rik tekst\",\n    \"right\": \"Høyre\",\n    \"secondary_style\": \"Sekundær stil\",\n    \"semibold\": \"Halvfet\",\n    \"shaded\": \"Skyggelagt\",\n    \"show_second_image\": \"Vis det andre bildet\",\n    \"single\": \"Enkel\",\n    \"slide_left\": \"Skyv til venstre\",\n    \"slide_up\": \"Skyv opp\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stable\",\n    \"text_only\": \"Kun tekst\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniatyrbilder\",\n    \"tight\": \"Tett\",\n    \"top_left\": \"Oppe til venstre\",\n    \"top_right\": \"Øverst til høyre\",\n    \"top\": \"Topp\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Understreking\",\n    \"video\": \"Video\",\n    \"wide\": \"Bred\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"Aksent\",\n    \"below_image\": \"Under bildet\",\n    \"body\": \"Brødtekst\",\n    \"button_primary\": \"Primærknapp\",\n    \"button_secondary\": \"Sekundærknapp\",\n    \"compact\": \"Kompakt\",\n    \"crop_to_fit\": \"Beskjær for å tilpasse\",\n    \"hidden\": \"Skjult\",\n    \"hint\": \"Hint\",\n    \"maintain_aspect_ratio\": \"Behold størrelsesforhold\",\n    \"off\": \"Av\",\n    \"on_image\": \"På bildet\",\n    \"social_bluesky\": \"Sosialt: Bluesky\",\n    \"social_facebook\": \"Sosialt: Facebook\",\n    \"social_instagram\": \"Sosialt: Instagram\",\n    \"social_linkedin\": \"Sosialt: LinkedIn\",\n    \"social_pinterest\": \"Sosialt: Pinterest\",\n    \"social_snapchat\": \"Sosialt: Snapchat\",\n    \"social_spotify\": \"Sosialt: Spotify\",\n    \"social_threads\": \"Sosialt: Threads\",\n    \"social_tiktok\": \"Sosialt: TikTok\",\n    \"social_tumblr\": \"Sosialt: Tumblr\",\n    \"social_twitter\": \"Sosialt: X (Twitter)\",\n    \"social_whatsapp\": \"Sosialt: WhatsApp\",\n    \"social_vimeo\": \"Sosialt: Vimeo\",\n    \"social_youtube\": \"Sosialt: YouTube\",\n    \"spotlight\": \"Fokus\",\n    \"standard\": \"Standard\",\n    \"subheading\": \"Underoverskrift\",\n    \"blur\": \"Uskarphet\",\n    \"lift\": \"Løft\",\n    \"reveal\": \"Avslør\",\n    \"scale\": \"Skaler\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Med hint\",\n    \"below_media\": \"Under mediene\",\n    \"full_frame\": \"Full ramme\",\n    \"icons\": \"Ikoner\"\n  },\n  \"content\": {\n    \"advanced\": \"Avansert\",\n    \"background_image\": \"Bakgrunnsbilde\",\n    \"background_video\": \"Bakgrunnsvideo\",\n    \"block_size\": \"Blokkstørrelse\",\n    \"borders\": \"Kanter\",\n    \"describe_the_video_for\": \"Beskriv videoen for kunder som bruker skjermlesere. [Finn ut mer](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Seksjonsstørrelse\",\n    \"slideshow_width\": \"Bredde på lysbilde\",\n    \"typography\": \"Typografi\",\n    \"width_is_automatically_optimized\": \"Bredden optimaliseres automatisk for mobil.\",\n    \"complementary_products\": \"Relaterte produkter må konfigureres med appen Search & Discovery. [Finn ut mer](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Kolonner optimaliseres automatisk for mobil\",\n    \"content_width\": \"Innholdsbredde gjelder bare når seksjonsbredden er satt til full bredde.\",\n    \"responsive_font_sizes\": \"Størrelser skaleres automatisk for alle skjermstørrelser\",\n    \"buttons\": \"Knapper\",\n    \"swatches\": \"Produktversjoner\",\n    \"variant_settings\": \"Variantinnstillinger\",\n    \"background\": \"Bakgrunn\",\n    \"appearance\": \"Utseende\",\n    \"arrows\": \"Piler\",\n    \"body_size\": \"Brødtekststørrelse\",\n    \"mobile_size\": \"Mobilstørrelse\",\n    \"bottom_row_appearance\": \"Utseende for nederste rad\",\n    \"cards_layout\": \"Kortlayout\",\n    \"carousel_navigation\": \"Karusellnavigasjon\",\n    \"carousel_pagination\": \"Karusell-sideinndeling\",\n    \"copyright\": \"Opphavsrett\",\n    \"edit_logo_in_theme_settings\": \"Rediger logo i [temainnstillinger](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Rediger prisformatering i [temainnstillinger](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Rediger styling av varianter i [temainnstillinger](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Registreringer legger til [kundeprofiler](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"For at knappen skal vises, må Shop-kanalen være installert og Shop Pay aktivert. [Finn ut mer](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Skrifttyper\",\n    \"grid\": \"Rutenett\",\n    \"heading_size\": \"Overskriftsstørrelse\",\n    \"image\": \"Bilde\",\n    \"input\": \"Inndatafelt\",\n    \"layout\": \"Layout\",\n    \"link\": \"Lenke\",\n    \"link_padding\": \"Lenkeutfylling\",\n    \"localization\": \"Lokal tilpasning\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Marg\",\n    \"media\": \"Medier\",\n    \"media_1\": \"Medie 1\",\n    \"media_2\": \"Medie 2\",\n    \"menu\": \"Meny\",\n    \"mobile_layout\": \"Mobillayout\",\n    \"padding\": \"Utfylling\",\n    \"padding_desktop\": \"Utfylling for stasjonær datamaskin\",\n    \"paragraph\": \"Avsnitt\",\n    \"policies\": \"Retningslinjer\",\n    \"popup\": \"Popup\",\n    \"search\": \"Søk\",\n    \"section_layout\": \"Seksjonslayout\",\n    \"size\": \"Størrelse\",\n    \"social_media\": \"Sosiale medier\",\n    \"submit_button\": \"Send inn-knapp\",\n    \"text_presets\": \"Forhåndsinnstillinger for tekst\",\n    \"transparent_background\": \"Gjennomsiktig bakgrunn\",\n    \"typography_primary\": \"Primær typografi\",\n    \"typography_secondary\": \"Sekundær typografi\",\n    \"typography_tertiary\": \"Tertiær typografi\",\n    \"mobile_width\": \"Mobilbredde\",\n    \"width\": \"Bredde\",\n    \"images\": \"Bilder\",\n    \"carousel\": \"Karusell\",\n    \"colors\": \"Farger\",\n    \"collection_page\": \"Samlingsside\",\n    \"customer_account\": \"Kundekonto\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Rediger samling for tom tilstand i [temainnstillinger](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Rutenettlayout\",\n    \"home_page\": \"Startside\",\n    \"inverse_logo_info\": \"Brukes når gjennomsiktig topptekstbakgrunn er satt til Invers\",\n    \"manage_customer_accounts\": \"[Administrer synlighet](/admin/settings/customer_accounts) i innstillinger for kundekonto. Eldre kontoer støttes ikke.\",\n    \"manage_policies\": \"[Administrer retningslinjer](/admin/settings/legal)\",\n    \"product_page\": \"Produktside\",\n    \"text\": \"Tekst\",\n    \"thumbnails\": \"Miniatyrbilder\",\n    \"visibility\": \"Synlighet\",\n    \"visible_if_collection_has_more_products\": \"Synlig hvis samlingen har flere produkter enn det som vises\",\n    \"app_required_for_ratings\": \"En app kreves for produktanmeldelser. [Finn ut mer](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ikon\",\n    \"manage_store_name\": \"[Administrer butikknavn](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Viser samling fra overordnet seksjon\",\n    \"resource_reference_collection_card_image\": \"Viser bilde fra overordnet samling\",\n    \"resource_reference_collection_title\": \"Viser tittel fra overordnet samling\",\n    \"resource_reference_product\": \"Kobler automatisk til overordnet produkt\",\n    \"resource_reference_product_card\": \"Viser produkt fra overordnet seksjon\",\n    \"resource_reference_product_inventory\": \"Viser varelager fra overordnet produkt\",\n    \"resource_reference_product_price\": \"Viser pris fra overordnet produkt\",\n    \"resource_reference_product_recommendations\": \"Viser anbefalinger basert på overordnet produkt\",\n    \"resource_reference_product_review\": \"Viser anmeldelser fra overordnet produkt\",\n    \"resource_reference_product_swatches\": \"Viser produktversjoner fra overordnet produkt\",\n    \"resource_reference_product_title\": \"Viser tittel fra overordnet produkt\",\n    \"resource_reference_product_variant_picker\": \"Viser varianter fra overordnet produkt\",\n    \"resource_reference_product_media\": \"Viser medier fra overordnet produkt\",\n    \"product_media\": \"Produktmedier\",\n    \"section_link\": \"Seksjonslenke\",\n    \"gift_card_form_description\": \"Kunder kan sende gavekort til en mottakers e-postadresse med en personlig melding. [Finn ut mer](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Overskrift\",\n    \"resource_reference_product_custom_property\": \"Legg til tilpassbare inndatafelt for å samle inn egendefinert informasjon som legges til denne varelinjen i bestillingen, og som senere er synlig i bestillingsinformasjonen.\",\n    \"block_link\": \"Blokkeringslenke\",\n    \"submenu_feature\": \"Undermenyfunksjon\",\n    \"cart_features\": \"Handlekurvfunksjoner\",\n    \"email_signup\": \"E-postregistrering\",\n    \"mobile_media\": \"Mobilmedier\",\n    \"mobile_media_2\": \"Mobilmedie 2\",\n    \"navigation\": \"Navigasjon\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Popover-posisjon\",\n    \"resource_reference_product_sku\": \"Viser SKU fra hovedproduktet\",\n    \"content_layout\": \"Innholdslayout\",\n    \"mobile_media_1\": \"Mobilmedium 1\",\n    \"utilities\": \"Verktøy\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Del informasjon om merkevaren din med kundene. Beskriv et produkt, kom med kunngjøringer eller ønsk kundene velkommen til butikken.</p>\",\n    \"bestseller_h2\": \"<h2>Bestselgere</h2>\",\n    \"bestseller_h3\": \"<h3>Bestselgere</h3>\",\n    \"bestseller\": \"<p>Bestselger</p>\",\n    \"build_better\": \"<p>Vi tror på å bygge bedre</p>\",\n    \"contact_us\": \"<h2>Kontakt oss</h2>\",\n    \"discover_bestsellers\": \"<p>Oppdag bestselgerne som har vunnet kundenes hjerter med sin perfekte blanding av funksjonalitet og stil.</p>\",\n    \"everythings_starts_with_why\": \"<p>Alt vi gjør starter med hvorfor</p>\",\n    \"explore_latest_products\": \"<p>Utforsk de nyeste produktene våre.</p>\",\n    \"faq\": \"<h3>Vanlige spørsmål</h3>\",\n    \"first_to_know\": \"<p>Vær den første til å få vite om nye samlinger og spesialtilbud. </p>\",\n    \"free_returns\": \"<p>Gratis 30-dagers retur</p>\",\n    \"free_shipping_over\": \"<p>Gratis frakt på bestillinger over 50 USD</p>\",\n    \"goal_for_every_customer\": \"<p>Målet vårt er at alle kunder skal være helt fornøyde med kjøpet sitt. Hvis dette ikke er tilfelle, gi oss beskjed, så skal vi gjøre vårt beste for å finne en løsning sammen med deg.</p>\",\n    \"home_to_shirts\": \"<p>Startside → Skjorter</p>\",\n    \"intentional_design\": \"<h2>Bevisst design</h2>\",\n    \"introducing_h2\": \"<h2><em>Vi presenterer</em></h2>\",\n    \"latest_products\": \"<p>Vi presenterer de nyeste produktene våre, laget spesielt for sesongen. Kjøp favorittene dine før de blir utsolgt!</p>\",\n    \"made_local_and_global\": \"<p>Produktene våre produseres både lokalt og globalt. Vi velger produksjonspartnerne våre med omhu for å sikre at produktene våre er av høy kvalitet og til en rimelig pris.</p>\",\n    \"made_with_care_h2\": \"<h2>Laget med omhu</h2>\",\n    \"made_with_care_extended\": \"<p>Denne bestselgeren er laget med omhu og elsket av kundene våre, og overgår alle forventninger.</p>\",\n    \"made_with_care\": \"<p>Laget med omhu og elsket av kundene våre.</p>\",\n    \"make_things_better_extended\": \"<p>Vi lager ting som fungerer bedre og varer lenger. Produktene våre løser reelle problemer med rent design og ærlige materialer.</p>\",\n    \"make_things_better\": \"<p>Vi lager ting som fungerer bedre og varer lenger.</p>\",\n    \"may_also_like\": \"<h4>Kanskje du også liker</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nyheter</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nyheter</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nyheter</h3>\",\n    \"product_launch\": \"<p>Ta en titt bak kulissene på vår nyeste produktlansering.</p>\",\n    \"product_story\": \"<p>I hjertet av hvert produkt ligger en unik historie, drevet av vår lidenskap for kvalitet og innovasjon. Hver vare forbedrer hverdagen din og skaper glede.</p>\",\n    \"real_people\": \"<p>Ekte mennesker som lager flotte produkter</p>\",\n    \"related_product\": \"<h3>Relaterte produkter</h3>\",\n    \"return_policy\": \"<h2>Hva er returvilkårene?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 anmeldelser</p>\",\n    \"shipping_based_on_location\": \"<p>Frakt beregnes basert på lokasjonen din og varene i bestillingen. Du vil alltid vite fraktprisen før du kjøper.</p>\",\n    \"shop_by_collection\": \"<h3>Handle etter samling</h3>\",\n    \"signature_products\": \"<h2>Signaturproduktet vårt</h2>\",\n    \"styled_with\": \"<h3>Stylet med</h3>\",\n    \"subscribe\": \"<h2>Abonner på e-postene våre</h2>\",\n    \"team_with_goal\": \"<h2>Et team med et mål</h2>\",\n    \"unable_to_accept_returns\": \"<p>Vi kan ikke godta retur på enkelte varer. Disse vil være tydelig merket før kjøp.</p>\",\n    \"work_quickly_to_ship\": \"<p>Vi jobber raskt for å sende bestillingen din så snart som mulig. Når bestillingen er sendt, vil du motta en e-post med mer informasjon. Leveringstiden varierer avhengig av hvor du befinner deg.</p>\",\n    \"join_our_email_list\": \"<h2>Bli med på e-postlisten vår</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Få eksklusive tilbud og tidlig tilgang til nye produkter.</p>\",\n    \"artistry_in_action\": \"<p>Kunst i praksis</p>\",\n    \"authentic_materials\": \"<p>Ekte materialer, uten kompromisser</p>\",\n    \"bold_style_recognizable\": \"<p>En dristig stil som gjenkjennes overalt</p>\",\n    \"discover_elevated_design\": \"<p>Oppdag utsøkt design</p>\",\n    \"expert_construction_finish\": \"<p>Fagmessig konstruksjon og en upåklagelig finish</p>\",\n    \"made_to_last\": \"<p>Laget for å vare</p>\",\n    \"pieces_better_with_time\": \"<p>Produkter som bare blir bedre med tiden og bruk</p>\",\n    \"quality_you_can_feel\": \"<h2>Kvalitet du kan kjenne</h2>\",\n    \"uncompromising_standards\": \"<p>Kompromissløse standarder</p>\",\n    \"featured_collection_h2\": \"<h2>Utvalgt samling</h2>\",\n    \"shop_collection\": \"<p>Oppdag vår utvalgte samling med håndplukkede favoritter som kombinerer stil og kvalitet.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Handle nå\",\n    \"collapsible_row\": \"Sammenleggbar rad\",\n    \"heading\": \"Overskrift\",\n    \"email_signup_button_label\": \"Abonner\",\n    \"be_bold\": \"Vær dristig.\",\n    \"accordion_heading\": \"Overskrift for trekkspillmeny\",\n    \"contact_form_button_label\": \"Send inn\",\n    \"popup_link\": \"Popup-kobling\",\n    \"sign_up\": \"Registrer deg\",\n    \"welcome_to_our_store\": \"Velkommen til butikken vår\",\n    \"shop_our_latest_arrivals\": \"Handle våre siste nyheter!\",\n    \"are_purchases_final_sale\": \"Er noen kjøp endelige?\",\n    \"care_instructions\": \"Vedlikeholdsinstruksjoner\",\n    \"cart\": \"Handlekurv\",\n    \"discover_collection\": \"Oppdag samlingen\",\n    \"fit\": \"passform\",\n    \"how_much_for_shipping\": \"Hvor mye koster frakten?\",\n    \"learn_more\": \"Finn ut mer\",\n    \"manufacturing\": \"Produksjon\",\n    \"materials\": \"Materialer\",\n    \"return_policy\": \"Retningslinjer for retur\",\n    \"shipping\": \"Frakt\",\n    \"shop_now_button_label\": \"Handle nå\",\n    \"sign_up_button_label\": \"Registrer deg\",\n    \"submit_button_label\": \"Send inn\",\n    \"up_the_ante\": \"Høy\\nInnsatsen\",\n    \"view_all_button_label\": \"Se alle\",\n    \"what_is_return_policy\": \"Hva er retningslinjene for retur?\",\n    \"when_will_order_arrive\": \"Når får jeg bestillingen min?\",\n    \"where_are_products_made\": \"Hvor produseres produktene deres?\",\n    \"trending_now\": \"Populært nå\",\n    \"shop_the_look\": \"Kjøp stilen\",\n    \"bestsellers\": \"Bestselgere\",\n    \"featured_collection\": \"Utvalgt samling\",\n    \"new_arrivals\": \"Nyheter\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Karusell brukes alltid på mobil\",\n    \"video_alt_text\": \"Beskriv videoen for brukere av hjelpeteknologi\",\n    \"video_autoplay\": \"Videoer dempes som standard\",\n    \"video_external\": \"Bruk en URL-adresse fra YouTube eller Vimeo\",\n    \"carousel_hover_behavior_not_supported\": \"«Karusell»-pekeeffekt støttes ikke når «Karusell»-typen er valgt på seksjonsnivå\",\n    \"checkout_buttons\": \"Lar kjøpere betale raskere og kan forbedre konverteringen. [Finn ut mer](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Egendefinert overskrift\",\n    \"edit_presets_in_theme_settings\": \"Rediger forhåndsinnstillinger i [temainnstillinger](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Tilpass filtre med [appen Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Rutenettlayout brukes på mobil\",\n    \"logo_font\": \"Gjelder bare når en logo ikke er valgt\",\n    \"manage_countries_regions\": \"[Administrer land/regioner](/admin/settings/markets)\",\n    \"manage_languages\": \"[Administrer språk](/admin/settings/languages)\",\n    \"transparent_background\": \"Se over hver mal der gjennomsiktig bakgrunn brukes, for å sikre lesbarhet\",\n    \"aspect_ratio_adjusted\": \"Justert i enkelte layouter\",\n    \"custom_liquid\": \"Legg til kodeutdrag fra apper eller annen kode for å lage avanserte tilpasninger. [Finn ut mer](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Brukes for anvendte filtre, rabattkoder og søkeforslag\",\n    \"applies_on_image_only\": \"Gjelder kun for bilder\",\n    \"hover_effects\": \"Gjelder for produkt- og samlingskort\",\n    \"hide_logo_on_home_page_help\": \"Logoen forblir synlig når klebrig topptekst er aktiv\",\n    \"media_type_info\": \"Funksjonene hentes fra menykoblingene\",\n    \"logo_height\": \"Påvirker kun logoen i toppteksten\",\n    \"actions_display_style\": \"Ikoner brukes alltid på mobil\"\n  },\n  \"categories\": {\n    \"product_list\": \"Utvalgt samling\",\n    \"basic\": \"Grunnleggende\",\n    \"collection\": \"Samling\",\n    \"collection_list\": \"Samlingsliste\",\n    \"footer\": \"Bunntekst\",\n    \"forms\": \"Skjemaer\",\n    \"header\": \"Topptekst\",\n    \"layout\": \"Layout\",\n    \"links\": \"Lenker\",\n    \"product\": \"Produkt\",\n    \"banners\": \"Bannere\",\n    \"collections\": \"Samlinger\",\n    \"custom\": \"Egendefinert\",\n    \"decorative\": \"Dekorativt\",\n    \"products\": \"Produkter\",\n    \"other_sections\": \"Annet\",\n    \"storytelling\": \"Historiefortelling\",\n    \"text\": \"Tekst\"\n  }\n}\n"
  },
  {
    "path": "locales/nl.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Video laden: {{ description }}\",\n    \"sold_out\": \"Uitverkocht\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"E-mailadres\",\n      \"success\": \"Bedankt dat je abonnee bent geworden!\"\n    },\n    \"filter\": \"Filter\",\n    \"payment_methods\": \"Betaalmethoden\",\n    \"contact_form\": {\n      \"name\": \"Naam\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefoonnummer\",\n      \"comment\": \"Reactie\",\n      \"post_success\": \"Bedankt dat je contact met ons hebt opgenomen. Je hoort zo snel mogelijk van ons.\",\n      \"error_heading\": \"Pas het volgende aan:\"\n    },\n    \"slider_label\": \"Schuifregelaar\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3D-model afspelen\",\n    \"play_video\": \"Video afspelen\",\n    \"unit_price\": \"Eenheidsprijs\",\n    \"country_results_count\": \"{{ count }} resultaten\",\n    \"slideshow_pause\": \"Diavoorstelling pauzeren\",\n    \"slideshow_play\": \"Diavoorstelling afspelen\",\n    \"remove_item\": \"{{ title}} verwijderen\",\n    \"skip_to_text\": \"Ga direct naar de content\",\n    \"skip_to_product_info\": \"Ga direct naar de productinformatie\",\n    \"skip_to_results_list\": \"Meteen naar lijst met resultaten\",\n    \"new_window\": \"Wordt geopend in een nieuw venster.\",\n    \"slideshow_next\": \"Volgende dia\",\n    \"slideshow_previous\": \"Vorige dia\",\n    \"close_dialog\": \"Dialoogvenster sluiten\",\n    \"reset_search\": \"Zoekactie opnieuw instellen\",\n    \"search_results_count\": \"{{ count }} zoekresultaten gevonden voor '{{ query }}'\",\n    \"search_results_no_results\": \"Geen resultaten gevonden voor '{{ query }}'\",\n    \"filters\": \"Filters\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter toegepast\",\n      \"other\": \"{{ count }} filters toegepast\"\n    },\n    \"account\": \"Account\",\n    \"cart\": \"Winkelwagen\",\n    \"cart_count\": \"Totaal aantal artikelen in winkelwagen\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"Land/regio\",\n    \"slide_status\": \"Dia {{ index }} van {{ length }}\",\n    \"scroll_to\": \"Scrol naar {{ title }}\",\n    \"loading_product_recommendations\": \"Productaanbevelingen laden\",\n    \"discount\": \"Kortingscode toepassen\",\n    \"discount_menu\": \"Kortingscodes\",\n    \"discount_applied\": \"Toegepaste kortingscode: {{ code }}\",\n    \"inventory_status\": \"Voorraadstatus\",\n    \"pause_video\": \"Video pauzeren\",\n    \"find_country\": \"Land zoeken\",\n    \"localization_region_and_language\": \"Regio- en taalkiezer\",\n    \"decrease_quantity\": \"Aantal verlagen\",\n    \"increase_quantity\": \"Aantal verhogen\",\n    \"quantity\": \"Aantal\",\n    \"rating\": \"Beoordeling van dit product is {{ rating }} van 5\",\n    \"nested_product\": \"{{ product_title }} voor {{ parent_title }}\",\n    \"remove\": \"Verwijderen\",\n    \"view_pricing_info\": \"Prijsinformatie bekijken\",\n    \"open_hotspot\": \"Hotspot openen\",\n    \"slideshow\": \"Diavoorstelling\",\n    \"header_navigation_label\": \"Primair\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Aan winkelwagen toevoegen\",\n    \"clear_all\": \"Alles wissen\",\n    \"remove\": \"Verwijderen\",\n    \"view_in_your_space\": \"In ruimte bekijken\",\n    \"show_filters\": \"Filter\",\n    \"clear\": \"Wissen\",\n    \"continue_shopping\": \"Doorgaan met winkelen\",\n    \"log_in_html\": \"Heb je een account? <a href=\\\"{{ link }}\\\">Log in</a> om sneller af te rekenen.\",\n    \"see_items\": {\n      \"one\": \"{{ count }} artikel weergeven\",\n      \"other\": \"{{ count }} artikelen weergeven\"\n    },\n    \"view_all\": \"Alles bekijken\",\n    \"add\": \"Toevoegen\",\n    \"choose\": \"Kiezen\",\n    \"added\": \"Toegevoegd\",\n    \"show_less\": \"Minder weergeven\",\n    \"show_more\": \"Meer weergeven\",\n    \"close\": \"Sluiten\",\n    \"more\": \"Meer\",\n    \"reset\": \"Opnieuw instellen\",\n    \"zoom\": \"Zoomen\",\n    \"close_dialog\": \"Dialoogvenster sluiten\",\n    \"back\": \"Terug\",\n    \"log_in\": \"Inloggen\",\n    \"log_out\": \"Uitloggen\",\n    \"remove_discount\": \"Kortingscode {{ code }} verwijderen\",\n    \"enter_using_password\": \"Ga naar binnen met wachtwoord\",\n    \"submit\": \"Indienen\",\n    \"enter_password\": \"Wachtwoord invoeren\",\n    \"view_store_information\": \"Winkelgegevens bekijken\",\n    \"apply\": \"Toepassen\",\n    \"sign_in_options\": \"Andere inlogopties\",\n    \"sign_up\": \"Aanmelden\",\n    \"open_image_in_full_screen\": \"Afbeelding openen in volledig scherm\",\n    \"sort\": \"Sorteren\",\n    \"show_all_options\": \"Alle opties tonen\",\n    \"open\": \"Openen\"\n  },\n  \"content\": {\n    \"reviews\": \"recensies\",\n    \"no_results_found\": \"Geen resultaten gevonden\",\n    \"language\": \"Taal\",\n    \"localization_region_and_language\": \"Regio en taal\",\n    \"cart_total\": \"Totaal van de winkelwagen\",\n    \"your_cart_is_empty\": \"Je winkelwagen is leeg\",\n    \"product_image\": \"Productafbeelding\",\n    \"product_information\": \"Productinformatie\",\n    \"quantity\": \"Aantal\",\n    \"product_total\": \"Totaal product\",\n    \"cart_estimated_total\": \"Geschat totaal\",\n    \"seller_note\": \"Speciale instructies\",\n    \"cart_subtotal\": \"Subtotaal\",\n    \"discounts\": \"Kortingen\",\n    \"discount\": \"Korting\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Douanerechten en belastingen inbegrepen. Kortingen en <a href=\\\"{{ link }}\\\">verzending</a> worden bij de checkout berekend.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Douanerechten en belastingen inbegrepen. Kortingen en verzending worden bij de checkout berekend.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Belastingen inbegrepen. Kortingen en <a href=\\\"{{ link }}\\\">verzending</a> worden bij de checkout berekend.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Belastingen inbegrepen. Kortingen en verzending worden bij de checkout berekend.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Douanerechten inbegrepen. Belastingen, kortingen en <a href=\\\"{{ link }}\\\">verzending</a> worden bij de checkout berekend.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Douanerechten inbegrepen. Belastingen, kortingen en verzending worden bij de checkout berekend.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Belastingen, kortingen en <a href=\\\"{{ link }}\\\">verzending</a> worden bij de checkout berekend.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Belastingen, kortingen en verzending worden bij de checkout berekend.\",\n    \"checkout\": \"Afrekenen\",\n    \"cart_title\": \"Winkelwagen\",\n    \"price\": \"Prijs\",\n    \"price_regular\": \"Normale prijs\",\n    \"price_compare_at\": \"Vergelijkingsprijs\",\n    \"price_sale\": \"Prijs met korting\",\n    \"duties_and_taxes_included\": \"Douanerechten en belastingen inbegrepen.\",\n    \"duties_included\": \"Douanerechten inbegrepen.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Verzendkosten</a> worden berekend bij de checkout.\",\n    \"taxes_included\": \"Belastingen inbegrepen.\",\n    \"product_badge_sold_out\": \"Uitverkocht\",\n    \"product_badge_sale\": \"Uitverkoop\",\n    \"search_input_label\": \"Zoeken\",\n    \"search_input_placeholder\": \"Zoekopdracht\",\n    \"search_results\": \"Zoekresultaten\",\n    \"search_results_label\": \"Zoekresultaten\",\n    \"search_results_no_results\": \"Geen resultaten gevonden voor '{{ terms }}'. Probeer een andere zoekopdracht.\",\n    \"search_results_resource_articles\": \"Blogposts\",\n    \"search_results_resource_collections\": \"Collecties\",\n    \"search_results_resource_pages\": \"Pagina's\",\n    \"search_results_resource_products\": \"Producten\",\n    \"search_results_resource_queries\": \"Zoeksuggesties\",\n    \"search_results_view_all\": \"Alles bekijken\",\n    \"search_results_view_all_button\": \"Alles bekijken\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} product\",\n      \"other\": \"{{ count }} producten\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Standaard\",\n      \"grid_fieldset\": \"Kolomgrid\",\n      \"single_item\": \"Eén\",\n      \"zoom_out\": \"Uitzoomen\"\n    },\n    \"recently_viewed_products\": \"Recent beoordeeld\",\n    \"unavailable\": \"Niet beschikbaar\",\n    \"collection_placeholder\": \"Titel collectie\",\n    \"product_card_placeholder\": \"Producttitel\",\n    \"product_count\": \"Aantal producten\",\n    \"item_count\": {\n      \"one\": \"{{ count }} artikel\",\n      \"other\": \"{{ count }} artikelen\"\n    },\n    \"errors\": \"Fouten\",\n    \"price_from\": \"Vanaf {{ price }}\",\n    \"search\": \"Zoekopdracht\",\n    \"search_results_no_results_check_spelling\": \"Geen resultaten gevonden voor '{{ terms }}'. Controleer de spelling of gebruik een ander woord of een andere zin.\",\n    \"featured_products\": \"Uitgelichte producten\",\n    \"filters\": \"Filters\",\n    \"no_products_found\": \"Geen producten gevonden.\",\n    \"price_filter_html\": \"De hoogste prijs is {{ price }}\",\n    \"use_fewer_filters_html\": \"Probeer minder filters te gebruiken of <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">wis alle filters</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Meer informatie...\",\n    \"account_title\": \"Account\",\n    \"account_title_personalized\": \"Hallo {{ first_name }}\",\n    \"account_orders\": \"Bestellingen\",\n    \"account_profile\": \"Profiel\",\n    \"discount_code\": \"Kortingscode\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Douanerechten en belastingen inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Douanerechten en belastingen inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Douanerechten inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Douanerechten inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"pickup_available_at_html\": \"Afhalen is mogelijk op <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Afhalen mogelijk, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Afhalen is op dit moment niet beschikbaar\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Belastingen en <a href=\\\"{{ link }}\\\">verzendkosten</a> worden berekend bij de checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Belastingen en verzendkosten worden berekend bij de checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Belastingen inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Belastingen inbegrepen. Verzendkosten worden berekend bij de checkout.\",\n    \"wrong_password\": \"Wachtwoord onjuist\",\n    \"view_more_details\": \"Meer gegevens bekijken\",\n    \"page_placeholder_title\": \"Paginatitel\",\n    \"page_placeholder_content\": \"Selecteer een pagina om de content weer te geven.\",\n    \"placeholder_image\": \"Afbeelding tijdelijke aanduiding\",\n    \"inventory_low_stock\": \"Voorraad laag\",\n    \"inventory_in_stock\": \"Op voorraad\",\n    \"inventory_out_of_stock\": \"Niet op voorraad\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} over\",\n      \"other\": \"{{ count }} over\"\n    },\n    \"shipping_policy\": \"Verzendkosten worden berekend bij de checkout.\",\n    \"shipping_discount_error\": \"Verzendkortingen worden bij de checkout getoond nadat het adres is ingevoerd\",\n    \"discount_code_error\": \"Kortingscode kan niet worden toegepast op je winkelwagen\",\n    \"powered_by\": \"Deze winkel wordt mogelijk gemaakt door\",\n    \"store_owner_link_html\": \"Ben jij de winkeleigenaar? <a href=\\\"{{ link }}\\\">Log hier in</a>\",\n    \"recipient_form_send_to\": \"Verzenden naar\",\n    \"recipient_form_email_label\": \"E-mailadres ontvanger\",\n    \"recipient_form_email_label_my_email\": \"Mijn e-mailadres\",\n    \"recipient_form_email_address\": \"E-mailadres ontvanger\",\n    \"recipient_form_name_label\": \"Naam ontvanger (optioneel)\",\n    \"recipient_form_message\": \"Bericht (optioneel)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} tekens gebruikt\",\n    \"recipient_form_send_on\": \"JJJJ-MM-DD\",\n    \"recipient_form_send_on_label\": \"Verzenden op (optioneel)\",\n    \"recipient_form_fields_visible\": \"De formuliervelden voor de ontvanger zijn nu zichtbaar\",\n    \"recipient_form_fields_hidden\": \"De formuliervelden voor de ontvanger zijn nu verborgen\",\n    \"recipient_form_error\": \"Er is een fout opgetreden bij de indiening van het formulier\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} tekens gebruikt\",\n    \"terms_and_policies\": \"Voorwaarden en beleid\",\n    \"pagination\": {\n      \"nav_label\": \"Navigatie paginering\",\n      \"previous\": \"Vorige\",\n      \"next\": \"Volgende\",\n      \"page\": \"Pagina {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Op volume gebaseerde prijsstelling beschikbaar\",\n    \"volume_pricing\": \"Volumeprijzen\",\n    \"at_price_each\": \"{{ price }}/st.\",\n    \"each\": \"{{ price }}/st.\",\n    \"each_abbreviation\": \"st.\",\n    \"price_at\": \"voor\",\n    \"price_range\": \"Prijsklasse\",\n    \"cancel\": \"Annuleren\",\n    \"product_subtotal\": \"Productsubtotaal\",\n    \"quantity_per_item\": \"/st.\",\n    \"remove_all\": \"Alles verwijderen\",\n    \"remove_all_items_confirmation\": \"Alle {{ count }} artikelen uit je winkelwagen verwijderen?\",\n    \"remove_one_item_confirmation\": \"1 artikel uit je winkelwagen verwijderen?\",\n    \"total_items\": \"Totaal aantal artikelen\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Totaal variant\",\n    \"view_cart\": \"Winkelwagen bekijken\",\n    \"your_cart\": \"Je winkelwagen\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 artikel verwijderd uit winkelwagen\",\n      \"other\": \"{{ count }} artikelen toegevoegd aan winkelwagen\"\n    },\n    \"item_count_cutoff\": \"Meer dan {{ count }} artikelen\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Gebruik de cadeauboncode online of de QR-code in de winkel\",\n      \"title\": \"Dit is het saldo van de cadeaubon ter waarde van {{ value }} voor {{ shop }}\",\n      \"subtext\": \"Je cadeaubon\",\n      \"shop_link\": \"Webshop bezoeken\",\n      \"add_to_apple_wallet\": \"Aan Apple Wallet toevoegen\",\n      \"qr_image_alt\": \"QR-code — scan om cadeaubon te verzilveren\",\n      \"copy_code\": \"Cadeauboncode kopiëren\",\n      \"expiration_date\": \"Verloopt op {{ expires_on }}\",\n      \"copy_code_success\": \"Code gekopieerd\",\n      \"expired\": \"Verlopen\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} reactie\",\n        \"other\": \"{{ count }} reacties\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"Reactie kan niet worden geplaatst, controleer het volgende:\",\n      \"heading\": \"Reactie plaatsen\",\n      \"message\": \"Bericht\",\n      \"moderated\": \"Let op: Reacties worden pas na goedkeuring gepubliceerd.\",\n      \"name\": \"Naam\",\n      \"post\": \"Reactie plaatsen\",\n      \"success_moderated\": \"Reactie geplaatst, in afwachting van moderatie\",\n      \"success\": \"Reactie geplaatst\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"aan\"\n  },\n  \"placeholders\": {\n    \"password\": \"Wachtwoord\",\n    \"search\": \"Zoeken\",\n    \"product_title\": \"Producttitel\",\n    \"collection_title\": \"Collectietitel\",\n    \"blog_posts\": \"Blogposts\",\n    \"blog_post_title\": \"Titel\",\n    \"blog_post_author\": \"Auteur\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Een uittreksel van de content van je blogpost\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Aan winkelwagen toevoegen\",\n      \"adding_to_cart\": \"Toevoegen...\",\n      \"added_to_cart\": \"Toegevoegd aan winkelwagen\",\n      \"add_to_cart_error\": \"Fout bij het toevoegen aan de winkelwagen\",\n      \"quantity_error_max\": \"Voor dit artikel geldt een maximum van {{ maximum }}.\",\n      \"sold_out\": \"Uitverkocht\",\n      \"unavailable\": \"Niet beschikbaar\",\n      \"quantity\": \"Aantal\",\n      \"quantity_increments\": \"Stappen van {{ increment }}\",\n      \"quantity_minimum\": \"Minimum van {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum van {{ maximum }}\",\n      \"in_cart\": \"in winkelwagen\",\n      \"default_title\": \"Standaardtitel\",\n      \"sticky_add_to_cart\": \"Balk voor snel toevoegen aan winkelwagen\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/nl.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Randen\",\n    \"collapsible_row\": \"Inklapbare rij\",\n    \"custom_section\": \"Aangepaste sectie\",\n    \"icon\": \"Pictogram\",\n    \"logo_and_favicon\": \"Logo en favicon\",\n    \"product_buy_buttons\": \"Koopknoppen\",\n    \"product_description\": \"Beschrijving\",\n    \"product_price\": \"Prijs\",\n    \"slideshow\": \"Diavoorstelling\",\n    \"typography\": \"Typografie\",\n    \"video\": \"Video\",\n    \"colors\": \"Kleuren\",\n    \"overlapping_blocks\": \"Overlappende blokken\",\n    \"product_variant_picker\": \"Variantkiezer\",\n    \"slideshow_controls\": \"Besturingselementen voor diavoorstelling\",\n    \"size\": \"Maat\",\n    \"spacing\": \"Spatiëring\",\n    \"product_recommendations\": \"Aanbevolen producten\",\n    \"product_media\": \"Productmedia\",\n    \"featured_collection\": \"Uitgelichte collectie\",\n    \"add_to_cart\": \"Toevoegen aan winkelwagen\",\n    \"email_signup\": \"Aanmelding voor e-mail\",\n    \"submit_button\": \"Verzendknop\",\n    \"grid_layout_selector\": \"Grid-indelingskiezer\",\n    \"image\": \"Afbeelding\",\n    \"list_items\": \"Lijstitems\",\n    \"facets\": \"Facetten\",\n    \"variants\": \"Varianten\",\n    \"product_cards\": \"Productkaarten\",\n    \"styles\": \"Stijlen\",\n    \"buttons\": \"Knoppen\",\n    \"inputs\": \"Invoer\",\n    \"primary_button\": \"Primaire knop\",\n    \"secondary_button\": \"Secundaire knop\",\n    \"popovers_and_modals\": \"Popovers en modalen\",\n    \"marquee\": \"Marquee\",\n    \"alternating_content_rows\": \"Afwisselende rijen\",\n    \"product_list\": \"Uitgelichte collectie\",\n    \"spacer\": \"Tussenruimte\",\n    \"products_carousel\": \"Uitgelichte collectie: Carrousel\",\n    \"products_grid\": \"Uitgelichte collectie: Grid\",\n    \"pull_quote\": \"Quote\",\n    \"contact_form\": \"Contactformulier\",\n    \"featured_product\": \"Productuitlichting\",\n    \"icons_with_text\": \"Pictogrammen met tekst\",\n    \"accelerated_checkout\": \"Versnelde checkout\",\n    \"accordion\": \"Accordion\",\n    \"accordion_row\": \"Accordion-rij\",\n    \"animations\": \"Animaties\",\n    \"announcement\": \"Aankondiging\",\n    \"announcement_bar\": \"Aankondigingsbalk\",\n    \"badges\": \"Badges\",\n    \"button\": \"Knop\",\n    \"cart\": \"Winkelwagen\",\n    \"cart_items\": \"Winkelwagenartikelen\",\n    \"cart_products\": \"Producten in winkelwagen\",\n    \"cart_title\": \"Winkelwagen\",\n    \"collection\": \"Collectie\",\n    \"collection_card\": \"Collectiekaart\",\n    \"collection_columns\": \"Collectiekolommen\",\n    \"collection_container\": \"Collectie\",\n    \"collection_description\": \"Collectiebeschrijving\",\n    \"collection_image\": \"Collectieafbeelding\",\n    \"collection_info\": \"Collectie-informatie\",\n    \"collection_list\": \"Collectielijst\",\n    \"collections\": \"Collecties\",\n    \"content\": \"Content\",\n    \"content_grid\": \"Content-grid\",\n    \"details\": \"Gegevens\",\n    \"divider\": \"Scheidingslijn\",\n    \"filters\": \"Filteren en sorteren\",\n    \"follow_on_shop\": \"Volgen op Shop\",\n    \"footer\": \"Voettekst\",\n    \"footer_utilities\": \"Hulpprogramma's voor voettekst\",\n    \"group\": \"Groep\",\n    \"header\": \"Koptekst\",\n    \"heading\": \"Kop\",\n    \"icons\": \"Pictogrammen\",\n    \"image_with_text\": \"Afbeelding met tekst\",\n    \"input\": \"Invoer\",\n    \"jumbo_text\": \"Jumbotekst\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Tijdschrift-grid\",\n    \"media\": \"Media\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Mobiele opmaak\",\n    \"payment_icons\": \"Betalingspictogrammen\",\n    \"popup_link\": \"Pop-uplink\",\n    \"predictive_search\": \"Zoek-popover\",\n    \"predictive_search_empty\": \"Leeg voorspellend zoeken\",\n    \"price\": \"Prijs\",\n    \"product\": \"Product\",\n    \"product_card\": \"Productkaart\",\n    \"product_card_media\": \"Media\",\n    \"product_card_rendering\": \"Productkaartweergave\",\n    \"product_grid\": \"Grid\",\n    \"product_grid_main\": \"Productgrid\",\n    \"product_image\": \"Productafbeelding\",\n    \"product_information\": \"Productinformatie\",\n    \"product_review_stars\": \"Beoordelingssterren\",\n    \"quantity\": \"Aantal\",\n    \"row\": \"Rij\",\n    \"search\": \"Zoeken\",\n    \"section\": \"Sectie\",\n    \"selected_variants\": \"Geselecteerde varianten\",\n    \"slide\": \"Dia\",\n    \"social_media_links\": \"Links naar social media\",\n    \"steps\": \"Stappen\",\n    \"summary\": \"Overzicht\",\n    \"swatches\": \"Stalen\",\n    \"testimonials\": \"Testimonials\",\n    \"text\": \"Tekst\",\n    \"title\": \"Titel\",\n    \"utilities\": \"Hulpprogramma's\",\n    \"search_input\": \"Zoekinvoer\",\n    \"search_results\": \"Zoekresultaten\",\n    \"read_only\": \"Alleen-lezen\",\n    \"collection_title\": \"Collectietitel\",\n    \"collections_bento\": \"Collectielijst: Bento\",\n    \"faq_section\": \"Veelgestelde vragen\",\n    \"hero\": \"Hero\",\n    \"view_all_button\": \"Alles weergeven\",\n    \"video_section\": \"Video\",\n    \"product_title\": \"Producttitel\",\n    \"custom_liquid\": \"Custom Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Blogpost\",\n    \"blog_posts\": \"Blogposts\",\n    \"caption\": \"Bijschrift\",\n    \"collection_card_image\": \"Afbeelding\",\n    \"collection_links\": \"Collectielinks\",\n    \"collection_links_spotlight\": \"Collectielinks: Spotlight\",\n    \"collection_links_text\": \"Collectielinks: Tekst\",\n    \"collections_carousel\": \"Collectielijst: Carrousel\",\n    \"collections_editorial\": \"Collectielijst: Redactioneel\",\n    \"collections_grid\": \"Collectielijst: Grid\",\n    \"copyright\": \"Auteursrecht\",\n    \"count\": \"Aantal\",\n    \"divider_section\": \"Scheidingslijn\",\n    \"drawers\": \"Lades\",\n    \"editorial\": \"Redactioneel\",\n    \"editorial_jumbo_text\": \"Redactioneel: Jumbotekst\",\n    \"hero_marquee\": \"Hero: Marquee\",\n    \"input_fields\": \"Invoervelden\",\n    \"local_pickup\": \"Afhalen ter plaatse\",\n    \"marquee_section\": \"Marquee\",\n    \"media_with_text\": \"Media met tekst\",\n    \"page\": \"Pagina\",\n    \"page_content\": \"Content\",\n    \"page_layout\": \"Paginaopmaak\",\n    \"policy_list\": \"Beleidslinks\",\n    \"prices\": \"Prijzen\",\n    \"product_list_button\": \"Knop ‘Alles weergeven’\",\n    \"products_editorial\": \"Uitgelichte collectie: Redactioneel\",\n    \"social_link\": \"Sociale link\",\n    \"split_showcase\": \"Gesplitste showcase\",\n    \"variant_pickers\": \"Variantkiezers\",\n    \"pills\": \"Pills\",\n    \"large_logo\": \"Groot logo\",\n    \"product_inventory\": \"Productvoorraad\",\n    \"description\": \"Beschrijving\",\n    \"featured_image\": \"Uitgelichte afbeelding\",\n    \"rich_text_section\": \"Tekst met opmaak\",\n    \"product_custom_property\": \"Speciale instructies\",\n    \"multicolumn\": \"Meerdere kolommen\",\n    \"hero_bottom_aligned\": \"Hero: Onder uitgelijnd\",\n    \"blog_card\": \"Blogkaart\",\n    \"blog_posts_grid\": \"Blogposts: Grid\",\n    \"blog_posts_carousel\": \"Blogposts: Carrousel\",\n    \"blog_posts_editorial\": \"Blogposts: Redactioneel\",\n    \"excerpt\": \"Uittreksel\",\n    \"footer_password\": \"Voettekst voor wachtwoordpagina\",\n    \"policies_and_links\": \"Beleid en links\",\n    \"card\": \"Kaart\",\n    \"carousel\": \"Carrousel\",\n    \"carousel_content\": \"Carrouselcontent\",\n    \"quick_order_list\": \"Snelle bestellijst\",\n    \"column\": \"Kolom\",\n    \"comparison_slider\": \"Vergelijkingsslider\",\n    \"slideshow_full_frame\": \"Diavoorstelling: Volledig kader\",\n    \"slideshow_inset\": \"Diavoorstelling: Inzet\",\n    \"image_compare\": \"Afbeeldingsvergelijking\",\n    \"subheading\": \"Subkop\",\n    \"featured_product_information\": \"Uitgelicht product\",\n    \"product_hotspots\": \"Producthotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Gelaagde diavoorstelling\"\n  },\n  \"settings\": {\n    \"autoplay\": \"Automatisch afspelen\",\n    \"background\": \"Achtergrond\",\n    \"border_radius\": \"Hoekradius\",\n    \"border_width\": \"Randdikte\",\n    \"borders\": \"Randen\",\n    \"bottom_padding\": \"Padding onder\",\n    \"color\": \"Kleur\",\n    \"content_direction\": \"Richting content\",\n    \"content_position\": \"Positie content\",\n    \"cover_image_size\": \"Grootte omslagafbeelding\",\n    \"cover_image\": \"Omslagafbeelding\",\n    \"custom_width\": \"Aangepaste breedte\",\n    \"enable_video_looping\": \"Video herhalen\",\n    \"favicon\": \"Favicon\",\n    \"heading\": \"Kop\",\n    \"icon\": \"Pictogram\",\n    \"image_icon\": \"Afbeeldingspictogram\",\n    \"make_section_full_width\": \"Sectie op volledige breedte weergeven\",\n    \"overlay_opacity\": \"Dekking overlay\",\n    \"padding\": \"Padding\",\n    \"product\": \"Product\",\n    \"text\": \"Tekst\",\n    \"top_padding\": \"Padding boven\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alt-tekst\",\n    \"video_loop\": \"Video herhalen\",\n    \"video_position\": \"Positie video\",\n    \"width\": \"Breedte\",\n    \"alignment\": \"Uitlijning\",\n    \"button\": \"Knop\",\n    \"colors\": \"Kleuren\",\n    \"content_alignment\": \"Uitlijning content\",\n    \"custom_minimum_height\": \"Aangepaste minimumhoogte\",\n    \"font_family\": \"Lettertypefamilie\",\n    \"gap\": \"Tussenruimte\",\n    \"geometric_translate_y\": \"Geometrische translatie Y\",\n    \"image\": \"Afbeelding\",\n    \"image_opacity\": \"Afbeeldingsdekking\",\n    \"image_position\": \"Positie afbeelding\",\n    \"image_ratio\": \"Beeldverhouding\",\n    \"label\": \"Label\",\n    \"line_height\": \"Regelhoogte\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Tussenruimte opmaak\",\n    \"minimum_height\": \"Minimumhoogte\",\n    \"opacity\": \"Dekking\",\n    \"primary_color\": \"Links\",\n    \"section_width\": \"Sectiebreedte\",\n    \"size\": \"Grootte\",\n    \"slide_spacing\": \"Tussenruimte dia\",\n    \"slide_width\": \"Breedte dia\",\n    \"slideshow_fullwidth\": \"Dia's op volledige breedte\",\n    \"style\": \"Stijl\",\n    \"text_case\": \"Hoofdlettergebruik\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Breedte van content beperken\",\n    \"color_scheme\": \"Kleurenschema\",\n    \"inherit_color_scheme\": \"Kleurenschema overnemen\",\n    \"product_count\": \"Aantal producten\",\n    \"product_type\": \"Producttype\",\n    \"content_width\": \"Breedte content\",\n    \"collection\": \"Collectie\",\n    \"enable_sticky_content\": \"Vastgezette content op desktop\",\n    \"error_color\": \"Fout\",\n    \"success_color\": \"Geslaagd\",\n    \"primary_font\": \"Primair lettertype\",\n    \"secondary_font\": \"Secundair lettertype\",\n    \"tertiary_font\": \"Tertiair lettertype\",\n    \"columns\": \"Kolommen\",\n    \"items_to_show\": \"Weer te geven artikelen\",\n    \"layout\": \"Opmaak\",\n    \"layout_type\": \"Type\",\n    \"show_grid_layout_selector\": \"Selector voor grid-indeling weergeven\",\n    \"view_more_show\": \"Knop ‘Meer bekijken’ weergeven\",\n    \"image_gap\": \"Tussenruimte afbeelding\",\n    \"width_desktop\": \"Breedte op desktop\",\n    \"width_mobile\": \"Breedte op mobiel\",\n    \"border_style\": \"Randstijl\",\n    \"height\": \"Hoogte\",\n    \"thickness\": \"Dikte\",\n    \"stroke\": \"Lijndikte\",\n    \"filter_style\": \"Filterstijl\",\n    \"swatches\": \"Stalen\",\n    \"quick_add_colors\": \"Kleuren voor snel toevoegen\",\n    \"divider_color\": \"Scheidingslijn\",\n    \"border_opacity\": \"Randdekking\",\n    \"hover_background\": \"Achtergrond bij hover\",\n    \"hover_borders\": \"Randen bij hover\",\n    \"hover_text\": \"Tekst bij hover\",\n    \"primary_hover_color\": \"Links bij hover\",\n    \"primary_button_text\": \"Tekst primaire knop\",\n    \"primary_button_background\": \"Achtergrond primaire knop\",\n    \"primary_button_border\": \"Rand primaire knop\",\n    \"secondary_button_text\": \"Tekst secundaire knop\",\n    \"secondary_button_background\": \"Achtergrond secundaire knop\",\n    \"secondary_button_border\": \"Rand secundaire knop\",\n    \"shadow_color\": \"Schaduw\",\n    \"mobile_logo_image\": \"Logo voor mobiel\",\n    \"video_autoplay\": \"Automatisch afspelen\",\n    \"video_cover_image\": \"Omslagafbeelding\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Bron\",\n    \"first_row_media_position\": \"Positie media eerste rij\",\n    \"hide_padding\": \"Padding verbergen\",\n    \"background_color\": \"Achtergrondkleur\",\n    \"size_mobile\": \"Grootte op mobiel\",\n    \"pixel_size_mobile\": \"Grootte in pixels\",\n    \"percent_size_mobile\": \"Grootte in procent\",\n    \"unit\": \"Eenheid\",\n    \"custom_mobile_size\": \"Aangepaste grootte voor mobiel\",\n    \"fixed_height\": \"Hoogte in pixels\",\n    \"fixed_width\": \"Breedte in pixels\",\n    \"percent_height\": \"Hoogte in procent\",\n    \"percent_width\": \"Breedte in procent\",\n    \"percent_size\": \"Grootte in procent\",\n    \"pixel_size\": \"Grootte in pixels\",\n    \"card_image_height\": \"Hoogte productafbeelding\",\n    \"logo_font\": \"Lettertype logo\",\n    \"accordion\": \"Accordion\",\n    \"always_stack_buttons\": \"Knoppen altijd stapelen\",\n    \"aspect_ratio\": \"Beeldverhouding\",\n    \"auto_rotate_announcements\": \"Aankondigingen automatisch draaien\",\n    \"auto_rotate_slides\": \"Dia's automatisch draaien\",\n    \"badge_corner_radius\": \"Hoekradius\",\n    \"badge_position\": \"Positie op kaarten\",\n    \"badge_sale_color_scheme\": \"Uitverkoop\",\n    \"badge_sold_out_color_scheme\": \"Uitverkocht\",\n    \"behavior\": \"Gedrag\",\n    \"blur\": \"Schaduwvervaging\",\n    \"border\": \"Rand\",\n    \"bottom\": \"Onder\",\n    \"carousel_on_mobile\": \"Carrousel op mobiel\",\n    \"cart_count\": \"Aantal in winkelwagen\",\n    \"cart_items\": \"Artikelen in winkelwagen\",\n    \"cart_related_products\": \"Gerelateerde producten\",\n    \"cart_title\": \"Winkelwagen\",\n    \"cart_total\": \"Totaalbedrag winkelwagen\",\n    \"cart_type\": \"Type\",\n    \"case\": \"Hoofdlettergebruik\",\n    \"checkout_buttons\": \"Knoppen voor versnelde checkout\",\n    \"collection_list\": \"Collecties\",\n    \"collection_templates\": \"Collectietemplates\",\n    \"content\": \"Content\",\n    \"corner_radius\": \"Hoekradius\",\n    \"country_region\": \"Land/regio\",\n    \"currency_code\": \"Valutacode\",\n    \"custom_height\": \"Aangepaste hoogte\",\n    \"custom_mobile_width\": \"Aangepaste breedte voor mobiel\",\n    \"desktop_height\": \"Hoogte op desktop\",\n    \"direction\": \"Richting\",\n    \"display\": \"Weergave\",\n    \"divider_thickness\": \"Dikte scheidingslijn\",\n    \"divider\": \"Scheidingslijn\",\n    \"dividers\": \"Scheidingslijnen\",\n    \"drop_shadow\": \"Slagschaduw\",\n    \"empty_state_collection_info\": \"Weergegeven voordat een zoekopdracht wordt ingevoerd\",\n    \"empty_state_collection\": \"Collectie voor lege staat\",\n    \"enable_filtering\": \"Filters\",\n    \"enable_grid_density\": \"Beheer grid-indeling\",\n    \"enable_sorting\": \"Sorteren\",\n    \"enable_zoom\": \"Zoom inschakelen\",\n    \"equal_columns\": \"Gelijke kolommen\",\n    \"expand_first_group\": \"Eerste groep uitklappen\",\n    \"extend_media_to_screen_edge\": \"Media uitbreiden tot schermrand\",\n    \"extend_summary\": \"Uitbreiden tot schermrand\",\n    \"extra_large\": \"Extra groot\",\n    \"extra_small\": \"Extra klein\",\n    \"flag\": \"Vlag\",\n    \"font_price\": \"Lettertype prijs\",\n    \"font_weight\": \"Lettertypedikte\",\n    \"font\": \"Lettertype\",\n    \"full_width_first_image\": \"Eerste afbeelding op volledige breedte\",\n    \"full_width_on_mobile\": \"Volledige breedte op mobiel\",\n    \"heading_preset\": \"Voorinstelling kop\",\n    \"hide_unselected_variant_media\": \"Media van niet-geselecteerde variant verbergen\",\n    \"horizontal_gap\": \"Horizontale tussenruimte\",\n    \"horizontal_offset\": \"Horizontale offset schaduw\",\n    \"hover_behavior\": \"Gedrag bij hover\",\n    \"icon_background\": \"Achtergrond pictogram\",\n    \"icons\": \"Pictogrammen\",\n    \"image_border_radius\": \"Hoekradius afbeelding\",\n    \"installments\": \"Termijnbetalingen\",\n    \"integrated_button\": \"Geïntegreerde knop\",\n    \"language_selector\": \"Taalkiezer\",\n    \"large\": \"Groot\",\n    \"left_padding\": \"Padding links\",\n    \"left\": \"Links\",\n    \"letter_spacing\": \"Letterafstand\",\n    \"limit_media_to_screen_height\": \"Beperken tot schermhoogte\",\n    \"limit_product_details_width\": \"Breedte van productgegevens beperken\",\n    \"link_preset\": \"Voorinstelling link\",\n    \"links\": \"Links\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Herhalen\",\n    \"make_details_sticky_desktop\": \"Vastgezet op desktop\",\n    \"max_width\": \"Max. breedte\",\n    \"media_height\": \"Hoogte media\",\n    \"media_overlay\": \"Media-overlay\",\n    \"media_position\": \"Positie media\",\n    \"media_type\": \"Mediatype\",\n    \"media_width\": \"Breedte media\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Kolommen op mobiel\",\n    \"mobile_height\": \"Hoogte op mobiel\",\n    \"mobile_quick_add\": \"Snelle toevoeging op mobiel\",\n    \"motion_direction\": \"Bewegingsrichting\",\n    \"motion\": \"Beweging\",\n    \"movement_direction\": \"Bewegingsrichting\",\n    \"navigation_bar_color_scheme\": \"Kleurenschema navigatiebalk\",\n    \"navigation_bar\": \"Navigatiebalk\",\n    \"navigation\": \"Navigatie\",\n    \"open_new_tab\": \"Link openen in nieuw tabblad\",\n    \"overlay_color\": \"Kleur overlay\",\n    \"overlay\": \"Overlay\",\n    \"padding_bottom\": \"Padding onder\",\n    \"padding_horizontal\": \"Horizontale padding\",\n    \"padding_top\": \"Padding boven\",\n    \"page_width\": \"Paginabreedte\",\n    \"pagination\": \"Paginering\",\n    \"placement\": \"Plaatsing\",\n    \"position\": \"Positie\",\n    \"preset\": \"Voorinstelling\",\n    \"product_cards\": \"Productkaarten\",\n    \"product_pages\": \"Productpagina's\",\n    \"product_templates\": \"Producttemplates\",\n    \"products\": \"Producten\",\n    \"quick_add\": \"Snel toevoegen\",\n    \"ratio\": \"Verhouding\",\n    \"regular\": \"Normaal\",\n    \"review_count\": \"Aantal beoordelingen\",\n    \"right\": \"Rechts\",\n    \"row_height\": \"Rijhoogte\",\n    \"row\": \"Rij\",\n    \"seller_note\": \"Notitie aan verkoper toestaan\",\n    \"shadow_opacity\": \"Schaduwdekking\",\n    \"shape\": \"Vorm\",\n    \"show_as_accordion\": \"Weergeven als accordion op mobiel\",\n    \"show_filter_label\": \"Tekstlabels voor toegepaste filters\",\n    \"show_sale_price_first\": \"Aanbieding eerst weergeven\",\n    \"show_swatch_label\": \"Tekstlabels voor stalen weergeven\",\n    \"show_tax_info\": \"Btw-informatie\",\n    \"show\": \"Weergeven\",\n    \"small\": \"Klein\",\n    \"speed\": \"Snelheid\",\n    \"statement\": \"Overzicht\",\n    \"sticky_header\": \"Vastgezette koptekst\",\n    \"text_hierarchy\": \"Teksthiërarchie\",\n    \"text_presets\": \"Voorinstellingen tekst\",\n    \"title\": \"Titel\",\n    \"top\": \"Boven\",\n    \"type\": \"Type\",\n    \"type_preset\": \"Voorinstelling tekst\",\n    \"underline_thickness\": \"Dikte onderstreping\",\n    \"variant_images\": \"Variantafbeeldingen\",\n    \"vendor\": \"Verkoper\",\n    \"vertical_gap\": \"Verticale tussenruimte\",\n    \"vertical_offset\": \"Verticale offset schaduw\",\n    \"vertical_on_mobile\": \"Verticaal op mobiel\",\n    \"view_all_as_last_card\": \"‘Alles bekijken’ als laatste kaart\",\n    \"weight\": \"Dikte\",\n    \"wrap\": \"Terugloop\",\n    \"read_only\": \"Alleen-lezen\",\n    \"gradient_direction\": \"Richting verloop\",\n    \"headings\": \"Koppen\",\n    \"overlay_style\": \"Stijl overlay\",\n    \"transparent_background\": \"Transparante achtergrond\",\n    \"hide_logo_on_home_page\": \"Logo verbergen op homepage\",\n    \"account\": \"Account\",\n    \"align_baseline\": \"Tekstbasislijn uitlijnen\",\n    \"add_discount_code\": \"Kortingen in winkelwagen toestaan\",\n    \"background_overlay\": \"Achtergrondoverlay\",\n    \"background_media\": \"Achtergrondmedia\",\n    \"border_thickness\": \"Randdikte\",\n    \"bottom_row\": \"Onderste rij\",\n    \"button_text_case\": \"Hoofdlettergebruik\",\n    \"card_size\": \"Kaartgrootte\",\n    \"auto_open_cart_drawer\": \"Lade automatisch openen na ‘Toevoegen aan winkelwagen’\",\n    \"collection_count\": \"Aantal in collectie\",\n    \"collection_title_case\": \"Hoofdlettergebruik collectietitel\",\n    \"custom_liquid\": \"Liquid-code\",\n    \"default\": \"Standaard\",\n    \"default_logo\": \"Standaardlogo\",\n    \"divider_width\": \"Breedte scheidingslijn\",\n    \"horizontal_padding\": \"Horizontale padding\",\n    \"inverse\": \"Invers\",\n    \"inverse_logo\": \"Invers logo\",\n    \"layout_style\": \"Stijl\",\n    \"length\": \"Lengte\",\n    \"mobile_card_size\": \"Kaartgrootte op mobiel\",\n    \"mobile_pagination\": \"Paginering op mobiel\",\n    \"open_row_by_default\": \"Rij standaard openen\",\n    \"page\": \"Pagina\",\n    \"page_transition_enabled\": \"Paginaovergang\",\n    \"product_and_card_title_case\": \"Hoofdlettergebruik product- en kaarttitel\",\n    \"product_title_case\": \"Hoofdlettergebruik producttitel\",\n    \"right_padding\": \"Padding rechts\",\n    \"search\": \"Zoeken\",\n    \"search_icon\": \"Zoekpictogram\",\n    \"search_position\": \"Positie\",\n    \"search_row\": \"Rij\",\n    \"show_author\": \"Auteur\",\n    \"show_alignment\": \"Uitlijning weergeven\",\n    \"show_count\": \"Aantal weergeven\",\n    \"show_date\": \"Datum\",\n    \"show_pickup_availability\": \"Beschikbaarheid voor afhalen weergeven\",\n    \"show_search\": \"Zoekfunctie weergeven\",\n    \"text_label_case\": \"Hoofdlettergebruik tekstlabel\",\n    \"use_inverse_logo\": \"Invers logo gebruiken\",\n    \"vertical_padding\": \"Verticale padding\",\n    \"visibility\": \"Zichtbaarheid\",\n    \"product_corner_radius\": \"Hoekradius product\",\n    \"card_corner_radius\": \"Hoekradius kaart\",\n    \"alignment_mobile\": \"Uitlijning op mobiel\",\n    \"animation_repeat\": \"Animatie herhalen\",\n    \"blurred_reflection\": \"Vervaging reflectie\",\n    \"card_hover_effect\": \"Kaart-hovereffect\",\n    \"inventory_threshold\": \"Drempel voor lage voorraad\",\n    \"reflection_opacity\": \"Dekking reflectie\",\n    \"show_inventory_quantity\": \"Aantal bij lage voorraad weergeven\",\n    \"transition_to_main_product\": \"Overgang van productkaart naar productpagina\",\n    \"show_second_image_on_hover\": \"Tweede afbeelding weergeven bij hover\",\n    \"media\": \"Media\",\n    \"product_card_carousel\": \"Carrousel weergeven\",\n    \"media_fit\": \"Passing media\",\n    \"scroll_speed\": \"Tijd tot volgende aankondiging\",\n    \"show_powered_by_shopify\": \"‘Powered by Shopify’ weergeven\",\n    \"seller_note_open_by_default\": \"Notitie aan verkoper standaard openen\",\n    \"gift_card_form\": \"Cadeaubonformulier\",\n    \"add_to_cart_animation\": \"Toevoegen aan winkelwagen\",\n    \"custom_link\": \"Aangepaste link\",\n    \"product_custom_property\": {\n      \"heading\": \"Kop\",\n      \"description\": \"Beschrijving\",\n      \"key\": \"Naam eigenschap\",\n      \"key_info\": \"Mag niet leeg zijn en moet uniek zijn per blok. Wordt weergegeven in de winkelwagen, checkout en bestelgegevens.\",\n      \"placeholder_text\": \"Tekst tijdelijke aanduiding\",\n      \"default_heading\": \"Personaliseer je product\",\n      \"default_placeholder\": \"Voer je speciale instructies in\",\n      \"default_property_key\": \"Speciale instructies\",\n      \"max_length\": \"Max. aantal tekens\",\n      \"required\": \"Invoer vereist om artikel aan winkelwagen toe te voegen\",\n      \"input_type\": \"Invoertype\",\n      \"input_type_text\": \"Tekst\",\n      \"input_type_checkbox\": \"Selectievakje\",\n      \"content_settings\": \"Contentinstellingen\",\n      \"buyers_input\": \"Invoer van koper\",\n      \"checkbox_label\": \"Label selectievakje\",\n      \"default_checkbox_label\": \"Cadeauverpakking toevoegen\",\n      \"heading_preset\": \"Kop\",\n      \"description_preset\": \"Beschrijving\",\n      \"input_preset\": \"Invoer\",\n      \"checkbox_preset\": \"Label selectievakje\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Aantal posts\",\n    \"animation\": \"Animatie\",\n    \"top_level_size\": \"Grootte hoogste niveau\",\n    \"empty_cart_button_link\": \"Knoplink voor lege winkelwagen\",\n    \"auto_load_products\": \"Producten automatisch laden bij scrollen\",\n    \"products_per_page\": \"Producten per pagina\",\n    \"custom_mobile_media\": \"Andere media weergeven op mobiel\",\n    \"stack_media_on_mobile\": \"Media stapelen\",\n    \"media_type_1\": \"Mediatype\",\n    \"media_type_2\": \"Mediatype 2\",\n    \"full_frame_on_mobile\": \"Volledige breedte op mobiel\",\n    \"skus\": \"SKU's\",\n    \"variant_per_page\": \"Varianten per pagina\",\n    \"image_1\": \"Afbeelding 1\",\n    \"image_2\": \"Afbeelding 2\",\n    \"after_image\": \"Na-afbeelding\",\n    \"before_image\": \"Voor-afbeelding\",\n    \"cs_slider_style\": \"Sliderstijl\",\n    \"cs_slider_color\": \"Sliderkleur\",\n    \"cs_slider_inner_color\": \"Binnenkleur slider\",\n    \"text_on_images\": \"Tekst op afbeeldingen\",\n    \"card_height\": \"Kaarthoogte\",\n    \"submenu_size\": \"Grootte submenu\",\n    \"desktop_position\": \"Positie op desktop\",\n    \"desktop_pagination\": \"Paginering op desktop\",\n    \"bullseye_color\": \"Binnenste kleur\",\n    \"hotspot_color\": \"Hotspotkleur\",\n    \"product_price_typography\": \"Typografie productprijs\",\n    \"product_title_typography\": \"Typografie producttitel\",\n    \"x_position\": \"Horizontale positie\",\n    \"y_position\": \"Verticale positie\",\n    \"enable_sticky_add_to_cart\": \"Vaste 'Toevoegen aan winkelwagen'-balk\",\n    \"sticky_add_to_cart\": \"Vaste 'Toevoegen aan winkelwagen'-balk\",\n    \"actions_display_style\": \"Menustijl\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Pijl\",\n    \"banana\": \"Banaan\",\n    \"bottle\": \"Fles\",\n    \"box\": \"Vak\",\n    \"buttons\": \"Knoppen\",\n    \"carrot\": \"Wortel\",\n    \"center\": \"Midden\",\n    \"chat_bubble\": \"Tekstballon\",\n    \"clipboard\": \"Klembord\",\n    \"contain\": \"Passend maken\",\n    \"counter\": \"Teller\",\n    \"cover\": \"Vullend\",\n    \"custom\": \"Aangepast\",\n    \"dairy_free\": \"Zuivelvrij\",\n    \"dairy\": \"Zuivel\",\n    \"dropdowns\": \"Dropdowns\",\n    \"dots\": \"Stippen\",\n    \"dryer\": \"Droger\",\n    \"end\": \"Einde\",\n    \"eye\": \"Oog\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"Vuur\",\n    \"gluten_free\": \"Glutenvrij\",\n    \"heart\": \"Hart\",\n    \"horizontal\": \"Horizontaal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Strijkijzer\",\n    \"large\": \"Groot\",\n    \"leaf\": \"Blad\",\n    \"leather\": \"Leer\",\n    \"lightning_bolt\": \"Bliksemschicht\",\n    \"lipstick\": \"Lippenstift\",\n    \"lock\": \"Slot\",\n    \"map_pin\": \"Kaartspeld\",\n    \"medium\": \"Medium\",\n    \"none\": \"Geen\",\n    \"numbers\": \"Cijfers\",\n    \"nut_free\": \"Notenvrij\",\n    \"pants\": \"Broek\",\n    \"paw_print\": \"Pootafdruk\",\n    \"pepper\": \"Peper\",\n    \"perfume\": \"Parfum\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Vliegtuig\",\n    \"plant\": \"Plant\",\n    \"price_tag\": \"Prijskaartje\",\n    \"question_mark\": \"Vraagteken\",\n    \"recycle\": \"Recyclen\",\n    \"return\": \"Retour\",\n    \"ruler\": \"Liniaal\",\n    \"serving_dish\": \"Serveerschaal\",\n    \"shirt\": \"Shirt\",\n    \"shoe\": \"Schoen\",\n    \"silhouette\": \"Silhouet\",\n    \"small\": \"Klein\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Sneeuwvlok\",\n    \"star\": \"Ster\",\n    \"start\": \"Begin\",\n    \"stopwatch\": \"Stopwatch\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Vrachtwagen\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"vertical\": \"Verticaal\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Wassen\",\n    \"auto\": \"Automatisch\",\n    \"default\": \"Standaard\",\n    \"fill\": \"Vullen\",\n    \"fit\": \"Passend\",\n    \"full\": \"Volledig\",\n    \"full_and_page\": \"Volledige achtergrond, content op paginabreedte\",\n    \"heading\": \"Kop\",\n    \"landscape\": \"Liggend\",\n    \"lg\": \"LG\",\n    \"link\": \"Link\",\n    \"lowercase\": \"kleine letters\",\n    \"m\": \"M\",\n    \"outline\": \"Omtrek\",\n    \"page\": \"Pagina\",\n    \"portrait\": \"Staand\",\n    \"s\": \"S\",\n    \"sentence\": \"Zin\",\n    \"solid\": \"Effen\",\n    \"space_between\": \"Ruimte tussen\",\n    \"square\": \"Vierkant\",\n    \"uppercase\": \"Hoofdletters\",\n    \"circle\": \"Cirkel\",\n    \"swatches\": \"Stalen\",\n    \"full_and_page_offset_left\": \"Volledige achtergrond, content op paginabreedte, links verschoven\",\n    \"full_and_page_offset_right\": \"Volledige achtergrond, content op paginabreedte, rechts verschoven\",\n    \"offset_left\": \"Links verschoven\",\n    \"offset_right\": \"Rechts verschoven\",\n    \"page_center_aligned\": \"Pagina, gecentreerd\",\n    \"page_left_aligned\": \"Pagina, links uitgelijnd\",\n    \"page_right_aligned\": \"Pagina, rechts uitgelijnd\",\n    \"button\": \"Knop\",\n    \"caption\": \"Bijschrift\",\n    \"h1\": \"Kop 1\",\n    \"h2\": \"Kop 2\",\n    \"h3\": \"Kop 3\",\n    \"h4\": \"Kop 4\",\n    \"h5\": \"Kop 5\",\n    \"h6\": \"Kop 6\",\n    \"paragraph\": \"Paragraaf\",\n    \"primary\": \"Primair\",\n    \"secondary\": \"Secundair\",\n    \"tertiary\": \"Tertiair\",\n    \"chevron_left\": \"Chevron links\",\n    \"chevron_right\": \"Chevron rechts\",\n    \"diamond\": \"Ruit\",\n    \"grid\": \"Grid\",\n    \"parallelogram\": \"Parallellogram\",\n    \"rounded\": \"Afgerond\",\n    \"fit_content\": \"Passend\",\n    \"pills\": \"Pills\",\n    \"heavy\": \"Zwaar\",\n    \"thin\": \"Dun\",\n    \"drawer\": \"Lade\",\n    \"preview\": \"Voorbeeld\",\n    \"text\": \"Tekst\",\n    \"video_uploaded\": \"Geüpload\",\n    \"video_external_url\": \"Externe URL\",\n    \"up\": \"Omhoog\",\n    \"down\": \"Omlaag\",\n    \"gradient\": \"Verloop\",\n    \"fixed\": \"Vast\",\n    \"pixel\": \"Pixel\",\n    \"percent\": \"Procent\",\n    \"aspect_ratio\": \"Beeldverhouding\",\n    \"above_carousel\": \"Boven carrousel\",\n    \"all\": \"Alle\",\n    \"always\": \"Altijd\",\n    \"arrows_large\": \"Grote pijlen\",\n    \"arrows\": \"Pijlen\",\n    \"balance\": \"Balans\",\n    \"bento\": \"Bento\",\n    \"black\": \"Zwart\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Hoofdtekst (groot)\",\n    \"body_regular\": \"Hoofdtekst (normaal)\",\n    \"body_small\": \"Hoofdtekst (klein)\",\n    \"bold\": \"Vet\",\n    \"bottom_left\": \"Linksonder\",\n    \"bottom_right\": \"Rechtsonder\",\n    \"bottom\": \"Onder\",\n    \"capitalize\": \"Beginhoofdletter\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carrousel\",\n    \"check_box\": \"Selectievakje\",\n    \"chevron_large\": \"Grote chevrons\",\n    \"chevron\": \"Chevron\",\n    \"chevrons\": \"Chevrons\",\n    \"classic\": \"Klassiek\",\n    \"collection_images\": \"Collectieafbeeldingen\",\n    \"color\": \"Kleur\",\n    \"complementary\": \"Aanvullend\",\n    \"dissolve\": \"Oplossen\",\n    \"dotted\": \"Gestippeld\",\n    \"editorial\": \"Redactioneel\",\n    \"extra_large\": \"Extra groot\",\n    \"extra_small\": \"Extra klein\",\n    \"featured_collections\": \"Uitgelichte collecties\",\n    \"featured_products\": \"Uitgelichte producten\",\n    \"font_primary\": \"Primair\",\n    \"font_secondary\": \"Secundair\",\n    \"font_tertiary\": \"Tertiair\",\n    \"forward\": \"Vooruit\",\n    \"full_screen\": \"Volledig scherm\",\n    \"heading_extra_large\": \"Kop (extra groot)\",\n    \"heading_extra_small\": \"Kop (extra klein)\",\n    \"heading_large\": \"Kop (groot)\",\n    \"heading_regular\": \"Kop (normaal)\",\n    \"heading_small\": \"Kop (klein)\",\n    \"icon\": \"Pictogram\",\n    \"image\": \"Afbeelding\",\n    \"input\": \"Invoer\",\n    \"inside_carousel\": \"In carrousel\",\n    \"inverse_large\": \"Omgekeerd groot\",\n    \"inverse\": \"Omgekeerd\",\n    \"large_arrows\": \"Grote pijlen\",\n    \"large_chevrons\": \"Grote chevrons\",\n    \"left\": \"Links\",\n    \"light\": \"Licht\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Los\",\n    \"media_first\": \"Media eerst\",\n    \"media_second\": \"Media tweede\",\n    \"modal\": \"Modaal\",\n    \"narrow\": \"Smal\",\n    \"never\": \"Nooit\",\n    \"next_to_carousel\": \"Naast carrousel\",\n    \"normal\": \"Normaal\",\n    \"nowrap\": \"Niet laten teruglopen\",\n    \"off_media\": \"Buiten media\",\n    \"on_media\": \"Op media\",\n    \"on_scroll_up\": \"Bij omhoog scrollen\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pil\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Mooi\",\n    \"price\": \"Prijs\",\n    \"primary_style\": \"Primaire stijl\",\n    \"rectangle\": \"Rechthoek\",\n    \"regular\": \"Normaal\",\n    \"related\": \"Gerelateerd\",\n    \"reverse\": \"Omgekeerd\",\n    \"rich_text\": \"Tekst met opmaak\",\n    \"right\": \"Rechts\",\n    \"secondary_style\": \"Secundaire stijl\",\n    \"semibold\": \"Semibold\",\n    \"shaded\": \"Met schaduw\",\n    \"show_second_image\": \"Tweede afbeelding weergeven\",\n    \"single\": \"Enkel\",\n    \"slide_left\": \"Naar links schuiven\",\n    \"slide_up\": \"Omhoog schuiven\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stapelen\",\n    \"text_only\": \"Alleen tekst\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturen\",\n    \"tight\": \"Strak\",\n    \"top_left\": \"Linksboven\",\n    \"top_right\": \"Rechtsboven\",\n    \"top\": \"Boven\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Onderstreping\",\n    \"video\": \"Video\",\n    \"wide\": \"Breed\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"Accent\",\n    \"below_image\": \"Onder afbeelding\",\n    \"body\": \"Hoofdtekst\",\n    \"button_primary\": \"Primaire knop\",\n    \"button_secondary\": \"Secundaire knop\",\n    \"compact\": \"Compact\",\n    \"crop_to_fit\": \"Bijsnijden\",\n    \"hidden\": \"Verborgen\",\n    \"hint\": \"Hint\",\n    \"maintain_aspect_ratio\": \"Beeldverhouding behouden\",\n    \"off\": \"Uit\",\n    \"on_image\": \"Op afbeelding\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Standaard\",\n    \"subheading\": \"Subkop\",\n    \"blur\": \"Vervagen\",\n    \"lift\": \"Optillen\",\n    \"reveal\": \"Onthullen\",\n    \"scale\": \"Schaal\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Met hints\",\n    \"below_media\": \"Onder media\",\n    \"full_frame\": \"Volledig kader\",\n    \"icons\": \"Pictogrammen\"\n  },\n  \"content\": {\n    \"background_video\": \"Achtergrondvideo\",\n    \"describe_the_video_for\": \"Beschrijf de video voor klanten die schermlezers gebruiken. [Meer informatie](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"Breedte wordt automatisch geoptimaliseerd voor mobiel.\",\n    \"advanced\": \"Geavanceerd\",\n    \"background_image\": \"Achtergrondafbeelding\",\n    \"block_size\": \"Blokgrootte\",\n    \"borders\": \"Randen\",\n    \"section_size\": \"Sectiegrootte\",\n    \"slideshow_width\": \"Diabreedte\",\n    \"typography\": \"Typografie\",\n    \"complementary_products\": \"Aanvullende producten moeten worden ingesteld met de Search & Discovery-app. [Meer informatie](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Kolommen worden automatisch geoptimaliseerd voor mobiel\",\n    \"content_width\": \"Contentbreedte is alleen van toepassing als de sectiebreedte is ingesteld op volledige breedte.\",\n    \"responsive_font_sizes\": \"Grootten worden automatisch geschaald voor alle schermgrootten\",\n    \"buttons\": \"Knoppen\",\n    \"swatches\": \"Stalen\",\n    \"variant_settings\": \"Variantinstellingen\",\n    \"background\": \"Achtergrond\",\n    \"cards_layout\": \"Kaartopmaak\",\n    \"section_layout\": \"Sectieopmaak\",\n    \"mobile_size\": \"Mobiele grootte\",\n    \"appearance\": \"Weergave\",\n    \"arrows\": \"Pijlen\",\n    \"body_size\": \"Tekstgrootte\",\n    \"bottom_row_appearance\": \"Weergave onderste rij\",\n    \"carousel_navigation\": \"Carrouselnavigatie\",\n    \"carousel_pagination\": \"Carrouselpaginering\",\n    \"copyright\": \"Auteursrecht\",\n    \"edit_logo_in_theme_settings\": \"Logo bewerken in [thema-instellingen](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Prijsopmaak bewerken in [thema-instellingen](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Variantstijl bewerken in [thema-instellingen](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Aanmeldingen voegen [klantprofielen](https://help.shopify.com/manual/customers) toe\",\n    \"follow_on_shop_eligiblity\": \"De knop wordt alleen weergegeven als het Shop-kanaal is geïnstalleerd en Shop Pay is geactiveerd. [Meer informatie](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Lettertypen\",\n    \"grid\": \"Grid\",\n    \"heading_size\": \"Kopgrootte\",\n    \"image\": \"Afbeelding\",\n    \"input\": \"Invoer\",\n    \"layout\": \"Opmaak\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Link-padding\",\n    \"localization\": \"Lokalisatie\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Marge\",\n    \"media\": \"Media\",\n    \"media_1\": \"Media 1\",\n    \"media_2\": \"Media 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Mobiele opmaak\",\n    \"mobile_width\": \"Mobiele breedte\",\n    \"padding\": \"Padding\",\n    \"padding_desktop\": \"Desktop-padding\",\n    \"paragraph\": \"Paragraaf\",\n    \"policies\": \"Beleid\",\n    \"popup\": \"Pop-up\",\n    \"search\": \"Zoeken\",\n    \"size\": \"Grootte\",\n    \"social_media\": \"Social media\",\n    \"submit_button\": \"Verzendknop\",\n    \"text_presets\": \"Tekstvoorinstellingen\",\n    \"transparent_background\": \"Transparante achtergrond\",\n    \"typography_primary\": \"Primaire typografie\",\n    \"typography_secondary\": \"Secundaire typografie\",\n    \"typography_tertiary\": \"Tertiaire typografie\",\n    \"width\": \"Breedte\",\n    \"visibility\": \"Zichtbaarheid\",\n    \"visible_if_collection_has_more_products\": \"Zichtbaar als de collectie meer producten bevat dan er worden weergegeven\",\n    \"carousel\": \"Carrousel\",\n    \"colors\": \"Kleuren\",\n    \"collection_page\": \"Collectiepagina\",\n    \"customer_account\": \"Klantaccount\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Lege statuscollectie bewerken in [thema-instellingen](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Grid-indeling\",\n    \"home_page\": \"Homepage\",\n    \"images\": \"Afbeeldingen\",\n    \"inverse_logo_info\": \"Wordt gebruikt wanneer de transparante koptekstachtergrond is ingesteld op ‘Omgekeerd’\",\n    \"manage_customer_accounts\": \"[Zichtbaarheid beheren](/admin/settings/customer_accounts) in de instellingen voor klantaccounts. Verouderde accounts worden niet ondersteund.\",\n    \"manage_policies\": \"[Beleid beheren](/admin/settings/legal)\",\n    \"product_page\": \"Productpagina\",\n    \"text\": \"Tekst\",\n    \"thumbnails\": \"Miniaturen\",\n    \"app_required_for_ratings\": \"Een app is vereist voor productbeoordelingen. [Meer informatie](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Pictogram\",\n    \"manage_store_name\": \"[Winkelnaam beheren](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Geeft collectie weer uit bovenliggende sectie\",\n    \"resource_reference_collection_card_image\": \"Geeft afbeelding weer uit bovenliggende collectie\",\n    \"resource_reference_collection_title\": \"Geeft titel weer uit bovenliggende collectie\",\n    \"resource_reference_product\": \"Maakt automatisch verbinding met bovenliggend product\",\n    \"resource_reference_product_card\": \"Geeft product weer uit bovenliggende sectie\",\n    \"resource_reference_product_inventory\": \"Geeft voorraad weer van bovenliggend product\",\n    \"resource_reference_product_price\": \"Geeft prijs weer van bovenliggend product\",\n    \"resource_reference_product_recommendations\": \"Geeft aanbevelingen weer op basis van bovenliggend product\",\n    \"resource_reference_product_review\": \"Geeft beoordelingen weer van bovenliggend product\",\n    \"resource_reference_product_swatches\": \"Geeft stalen weer van bovenliggend product\",\n    \"resource_reference_product_title\": \"Geeft titel weer van bovenliggend product\",\n    \"resource_reference_product_variant_picker\": \"Geeft varianten weer van bovenliggend product\",\n    \"resource_reference_product_media\": \"Geeft media weer van bovenliggend product\",\n    \"product_media\": \"Productmedia\",\n    \"section_link\": \"Sectielink\",\n    \"gift_card_form_description\": \"Klanten kunnen cadeaubonnen naar het e-mailadres van een ontvanger sturen met een persoonlijk bericht. [Meer informatie](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Kop\",\n    \"resource_reference_product_custom_property\": \"Voeg aanpasbare invoervelden toe om aangepaste informatie te verzamelen die aan deze bestelregel wordt toegevoegd en later zichtbaar is in de bestelgegevens.\",\n    \"block_link\": \"Bloklink\",\n    \"submenu_feature\": \"Submenufunctie\",\n    \"cart_features\": \"Winkelwagenfuncties\",\n    \"email_signup\": \"E-mailaanmelding\",\n    \"mobile_media\": \"Media voor mobiel\",\n    \"mobile_media_2\": \"Media 2 voor mobiel\",\n    \"navigation\": \"Navigatie\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Popoverpositie\",\n    \"resource_reference_product_sku\": \"Toont de SKU van het bovenliggende product\",\n    \"content_layout\": \"Contentopmaak\",\n    \"mobile_media_1\": \"Mobiele media 1\",\n    \"utilities\": \"Hulpmiddelen\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Deel informatie over je merk met je klanten. Beschrijf een product, doe aankondigingen of heet klanten welkom in je winkel.</p>\",\n    \"bestseller_h2\": \"<h2>Bestsellers</h2>\",\n    \"bestseller_h3\": \"<h3>Bestsellers</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Wij geloven in beter bouwen</p>\",\n    \"contact_us\": \"<h2>Neem contact met ons op</h2>\",\n    \"discover_bestsellers\": \"<p>Ontdek de bestsellers die de harten van onze klanten hebben veroverd met hun perfecte mix van functionaliteit en stijl.</p>\",\n    \"everythings_starts_with_why\": \"<p>Alles wat we doen, begint met waarom</p>\",\n    \"explore_latest_products\": \"<p>Ontdek onze nieuwste producten.</p>\",\n    \"faq\": \"<h3>Veelgestelde vragen</h3>\",\n    \"first_to_know\": \"<p>Wees als eerste op de hoogte van nieuwe collecties en speciale aanbiedingen. </p>\",\n    \"free_returns\": \"<p>Gratis retourneren binnen 30 dagen</p>\",\n    \"free_shipping_over\": \"<p>Gratis verzending bij bestellingen boven de $ 50</p>\",\n    \"goal_for_every_customer\": \"<p>Ons doel is dat elke klant volledig tevreden is met zijn aankoop. Als dit niet het geval is, laat het ons dan weten. We doen ons best om samen met jou tot een goede oplossing te komen.</p>\",\n    \"home_to_shirts\": \"<p>Home → Shirts</p>\",\n    \"intentional_design\": \"<h2>Doordacht ontwerp</h2>\",\n    \"introducing_h2\": \"<h2><em>Introductie</em></h2>\",\n    \"latest_products\": \"<p>Introductie van onze nieuwste producten, speciaal gemaakt voor dit seizoen. Shop je favorieten voordat ze uitverkocht zijn!</p>\",\n    \"made_local_and_global\": \"<p>Onze producten worden zowel lokaal als wereldwijd geproduceerd. We selecteren onze productiepartners zorgvuldig om ervoor te zorgen dat onze producten van hoge kwaliteit zijn en een eerlijke prijs hebben.</p>\",\n    \"made_with_care_h2\": \"<h2>Met zorg gemaakt</h2>\",\n    \"made_with_care_extended\": \"<p>Met zorg gemaakt en onvoorwaardelijk geliefd bij onze klanten, overtreft deze bestseller alle verwachtingen.</p>\",\n    \"made_with_care\": \"<p>Met zorg gemaakt en onvoorwaardelijk geliefd bij onze klanten.</p>\",\n    \"make_things_better_extended\": \"<p>We maken dingen die beter werken en langer meegaan. Onze producten lossen echte problemen op met een strak ontwerp en eerlijke materialen.</p>\",\n    \"make_things_better\": \"<p>We maken dingen die beter werken en langer meegaan.</p>\",\n    \"may_also_like\": \"<h4>Misschien vind je dit ook leuk</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nieuw binnen</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nieuw binnen</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nieuw binnen</h3>\",\n    \"product_launch\": \"<p>Neem een kijkje achter de schermen bij de lancering van ons nieuwste product.</p>\",\n    \"product_story\": \"<p>De kern van elk product is een uniek verhaal, gedreven door onze passie voor kwaliteit en innovatie. Elk artikel verbetert je dagelijks leven en brengt vreugde.</p>\",\n    \"real_people\": \"<p>Echte mensen die geweldige producten maken</p>\",\n    \"related_product\": \"<h3>Gerelateerde producten</h3>\",\n    \"return_policy\": \"<h2>Wat is het retourbeleid?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 beoordelingen</p>\",\n    \"shipping_based_on_location\": \"<p>De verzendkosten worden berekend op basis van je locatie en de artikelen in je bestelling. Je weet altijd wat de verzendkosten zijn voordat je je aankoop voltooit.</p>\",\n    \"shop_by_collection\": \"<h3>Winkelen op collectie</h3>\",\n    \"signature_products\": \"<h2>Ons kenmerkende product</h2>\",\n    \"styled_with\": \"<h3>Gecombineerd met</h3>\",\n    \"subscribe\": \"<h2>Abonneer je op onze e-mails</h2>\",\n    \"team_with_goal\": \"<h2>Een team met een doel</h2>\",\n    \"unable_to_accept_returns\": \"<p>We kunnen bepaalde artikelen niet retour nemen. Dit wordt vóór de aankoop duidelijk aangegeven.</p>\",\n    \"work_quickly_to_ship\": \"<p>We zullen je bestelling zo snel mogelijk verzenden. Zodra je bestelling is verzonden, ontvang je een e-mail met meer informatie. De levertijden zijn afhankelijk van je locatie.</p>\",\n    \"join_our_email_list\": \"<h2>Meld je aan voor onze e-maillijst</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Ontvang exclusieve deals en vroege toegang tot nieuwe producten.</p>\",\n    \"artistry_in_action\": \"<p>Vakmanschap in actie</p>\",\n    \"authentic_materials\": \"<p>Authentieke materialen, zonder compromissen</p>\",\n    \"bold_style_recognizable\": \"<p>Een gedurfde stijl die overal herkenbaar is</p>\",\n    \"discover_elevated_design\": \"<p>Ontdek verfijnd design</p>\",\n    \"expert_construction_finish\": \"<p>Vakkundige constructie en een onberispelijke afwerking</p>\",\n    \"made_to_last\": \"<p>Gemaakt om lang mee te gaan</p>\",\n    \"pieces_better_with_time\": \"<p>Items die met de tijd alleen maar mooier worden</p>\",\n    \"quality_you_can_feel\": \"<h2>Kwaliteit die je voelt</h2>\",\n    \"uncompromising_standards\": \"<p>Compromisloze standaarden</p>\",\n    \"featured_collection_h2\": \"<h2>Uitgelichte collectie</h2>\",\n    \"shop_collection\": \"<p>Ontdek onze samengestelde collectie met zorgvuldig uitgekozen favorieten die stijl en kwaliteit combineren.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"Inklapbare rij\",\n    \"button_label\": \"Shop nu\",\n    \"heading\": \"Kop\",\n    \"email_signup_button_label\": \"Abonneren\",\n    \"accordion_heading\": \"Kop accordion\",\n    \"contact_form_button_label\": \"Indienen\",\n    \"popup_link\": \"Pop-uplink\",\n    \"sign_up\": \"Aanmelden\",\n    \"welcome_to_our_store\": \"Welkom in onze winkel\",\n    \"be_bold\": \"Wees gedurfd.\",\n    \"shop_our_latest_arrivals\": \"Shop onze nieuwste artikelen!\",\n    \"are_purchases_final_sale\": \"Zijn bepaalde aankopen definitief?\",\n    \"care_instructions\": \"Wasvoorschriften\",\n    \"cart\": \"Winkelwagen\",\n    \"discover_collection\": \"Ontdek de collectie\",\n    \"fit\": \"pasvorm\",\n    \"how_much_for_shipping\": \"Wat zijn de verzendkosten?\",\n    \"learn_more\": \"Meer informatie\",\n    \"manufacturing\": \"Productie\",\n    \"materials\": \"Materialen\",\n    \"return_policy\": \"Retourbeleid\",\n    \"shipping\": \"Verzending\",\n    \"shop_now_button_label\": \"Shop nu\",\n    \"sign_up_button_label\": \"Aanmelden\",\n    \"submit_button_label\": \"Indienen\",\n    \"up_the_ante\": \"Verhoog\\nde\\ninzet\",\n    \"view_all_button_label\": \"Alles bekijken\",\n    \"what_is_return_policy\": \"Wat is het retourbeleid?\",\n    \"when_will_order_arrive\": \"Wanneer ontvang ik mijn bestelling?\",\n    \"where_are_products_made\": \"Waar worden jullie producten gemaakt?\",\n    \"trending_now\": \"Trending nu\",\n    \"shop_the_look\": \"Shop de look\",\n    \"bestsellers\": \"Bestsellers\",\n    \"featured_collection\": \"Uitgelichte collectie\",\n    \"new_arrivals\": \"Nieuw binnen\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"Op mobiel wordt altijd een carrousel gebruikt\",\n    \"video_alt_text\": \"Beschrijf de video voor gebruikers van ondersteunende technologie\",\n    \"video_autoplay\": \"Video's worden standaard gedempt\",\n    \"video_external\": \"Gebruik een YouTube- of Vimeo-URL\",\n    \"carousel_hover_behavior_not_supported\": \"‘Carrousel’-hover wordt niet ondersteund wanneer het type ‘Carrousel’ is geselecteerd op sectieniveau\",\n    \"checkout_buttons\": \"Hiermee kunnen kopers sneller afrekenen, wat de conversie kan verbeteren. [Meer informatie](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Aangepaste kop\",\n    \"edit_presets_in_theme_settings\": \"Voorinstellingen bewerken in [thema-instellingen](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Filters aanpassen met de [Search & Discovery-app](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Grid-indeling wordt gebruikt voor mobiel\",\n    \"logo_font\": \"Alleen van toepassing als er geen logo is geselecteerd\",\n    \"manage_countries_regions\": \"[Landen/regio's beheren](/admin/settings/markets)\",\n    \"manage_languages\": \"[Talen beheren](/admin/settings/languages)\",\n    \"transparent_background\": \"Controleer elke template waarop een transparante achtergrond wordt toegepast op leesbaarheid\",\n    \"aspect_ratio_adjusted\": \"Aangepast in sommige opmaken\",\n    \"custom_liquid\": \"Voeg app-fragmenten of andere code toe om geavanceerde aanpassingen te maken. [Meer informatie](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Wordt gebruikt voor toegepaste filters, kortingscodes en zoeksuggesties\",\n    \"applies_on_image_only\": \"Alleen van toepassing op afbeeldingen\",\n    \"hover_effects\": \"Van toepassing op product- en collectiekaarten\",\n    \"hide_logo_on_home_page_help\": \"Logo blijft zichtbaar wanneer de vaste koptekst actief is\",\n    \"media_type_info\": \"Functies worden gevuld vanuit je menulinks\",\n    \"logo_height\": \"Alleen van invloed op het koptekstlogo\",\n    \"actions_display_style\": \"Op mobiel worden altijd pictogrammen gebruikt\"\n  },\n  \"categories\": {\n    \"product_list\": \"Uitgelichte collectie\",\n    \"basic\": \"Basis\",\n    \"collection\": \"Collectie\",\n    \"collection_list\": \"Collectielijst\",\n    \"footer\": \"Voettekst\",\n    \"forms\": \"Formulieren\",\n    \"header\": \"Koptekst\",\n    \"layout\": \"Opmaak\",\n    \"links\": \"Links\",\n    \"product\": \"Product\",\n    \"banners\": \"Banners\",\n    \"collections\": \"Collecties\",\n    \"custom\": \"Aangepast\",\n    \"decorative\": \"Decoratief\",\n    \"products\": \"Producten\",\n    \"other_sections\": \"Overig\",\n    \"storytelling\": \"Verhalend\",\n    \"text\": \"Tekst\"\n  }\n}\n"
  },
  {
    "path": "locales/pl.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Załaduj film: {{ description }}\",\n    \"sold_out\": \"Wyprzedane\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"Adres e-mail\",\n      \"success\": \"Dziękujemy za subskrypcję!\"\n    },\n    \"filter\": \"Filtr\",\n    \"payment_methods\": \"Metody płatności\",\n    \"contact_form\": {\n      \"name\": \"Nazwisko\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Komentarz\",\n      \"post_success\": \"Dziękujemy za skontaktowanie się z nami. Odpowiemy tak szybko, jak to możliwe.\",\n      \"error_heading\": \"Dostosuj następujące dane:\"\n    },\n    \"slider_label\": \"Suwak\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Odtwórz model 3D\",\n    \"play_video\": \"Odtwórz film\",\n    \"unit_price\": \"Cena jednostkowa\",\n    \"country_results_count\": \"Liczba wyników: {{ count }}\",\n    \"slideshow_pause\": \"Wstrzymaj pokaz slajdów\",\n    \"slideshow_play\": \"Odtwórz pokaz slajdów\",\n    \"remove_item\": \"Usuń {{ title}}\",\n    \"skip_to_text\": \"Przejdź do treści\",\n    \"skip_to_product_info\": \"Pomiń, aby przejść do informacji o produkcie\",\n    \"skip_to_results_list\": \"Przejdź do listy wyników\",\n    \"new_window\": \"Otwiera się w nowym oknie.\",\n    \"slideshow_next\": \"Następny slajd\",\n    \"slideshow_previous\": \"Poprzedni slajd\",\n    \"close_dialog\": \"Zamknij okno dialogowe\",\n    \"reset_search\": \"Resetuj wyszukiwanie\",\n    \"search_results_count\": \"Znaleziono wyniki wyszukiwania ({{ count }}) dla „{{ query }}”\",\n    \"search_results_no_results\": \"Nie znaleziono wyników dla „{{ query }}”\",\n    \"filters\": \"Filtry\",\n    \"account\": \"Konto\",\n    \"cart\": \"Koszyk\",\n    \"cart_count\": \"Łączna liczba pozycji w koszyku\",\n    \"filter_count\": {\n      \"one\": \"Zastosowano {{ count }} filtr\",\n      \"other\": \"Zastosowane filtry: {{ count }}\",\n      \"few\": \"Zastosowane filtry: {{ count }}\",\n      \"many\": \"Zastosowane filtry: {{ count }}\"\n    },\n    \"menu\": \"Menu\",\n    \"country_region\": \"Kraj/region\",\n    \"slide_status\": \"Slajd {{ index }} z {{ length }}\",\n    \"scroll_to\": \"Przewiń do {{ title }}\",\n    \"loading_product_recommendations\": \"Wczytywanie polecanych produktów\",\n    \"discount\": \"Zastosuj kod rabatowy\",\n    \"discount_menu\": \"Kody rabatowe\",\n    \"discount_applied\": \"Zastosowany kod rabatowy: {{ code }}\",\n    \"pause_video\": \"Zatrzymaj film\",\n    \"inventory_status\": \"Stan zapasów\",\n    \"find_country\": \"Znajdź kraj\",\n    \"localization_region_and_language\": \"Selektor regionu i języka\",\n    \"decrease_quantity\": \"Zmniejsz ilość\",\n    \"increase_quantity\": \"Zwiększ ilość\",\n    \"rating\": \"Ocena tego produktu to: {{ rating }} na 5\",\n    \"quantity\": \"Ilość\",\n    \"nested_product\": \"{{ product_title }}: {{ parent_title }}\",\n    \"remove\": \"Usuń\",\n    \"view_pricing_info\": \"Wyświetl informacje o cenach\",\n    \"open_hotspot\": \"Otwarty hotspot\",\n    \"slideshow\": \"Pokaz slajdów\",\n    \"header_navigation_label\": \"Główna\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Dodaj do koszyka\",\n    \"clear_all\": \"Wyczyść wszystko\",\n    \"remove\": \"Usuń\",\n    \"view_in_your_space\": \"Zobacz w swojej przestrzeni\",\n    \"show_filters\": \"Filtr\",\n    \"clear\": \"Wyczyść\",\n    \"continue_shopping\": \"Kontynuuj zakupy\",\n    \"log_in_html\": \"Masz już konto? <a href=\\\"{{ link }}\\\">Zaloguj się</a>, aby szybciej realizować zakupy.\",\n    \"see_items\": {\n      \"one\": \"Zobacz {{ count }} pozycję\",\n      \"other\": \"Zobacz {{ count }} pozycje(-i)\",\n      \"few\": \"Zobacz {{ count }} pozycje(-i)\",\n      \"many\": \"Zobacz {{ count }} pozycje(-i)\"\n    },\n    \"view_all\": \"Wyświetl wszystko\",\n    \"add\": \"Dodaj\",\n    \"choose\": \"Wybierz\",\n    \"added\": \"Dodano\",\n    \"show_less\": \"Pokaż mniej\",\n    \"show_more\": \"Pokaż więcej\",\n    \"close\": \"Zamknij\",\n    \"more\": \"Więcej\",\n    \"reset\": \"Zresetuj\",\n    \"zoom\": \"Powiększenie\",\n    \"close_dialog\": \"Zamknij okno dialogowe\",\n    \"back\": \"Powrót\",\n    \"log_in\": \"Zaloguj się\",\n    \"log_out\": \"Wyloguj się\",\n    \"remove_discount\": \"Usuń rabat {{ code }}\",\n    \"enter_using_password\": \"Wejdź, używając hasła\",\n    \"submit\": \"Prześlij\",\n    \"enter_password\": \"Wpisz hasło\",\n    \"view_store_information\": \"Wyświetl informacje o sklepie\",\n    \"apply\": \"Zastosuj\",\n    \"open_image_in_full_screen\": \"Otwórz obraz w trybie pełnoekranowym\",\n    \"sign_in_options\": \"Inne opcje logowania\",\n    \"sign_up\": \"Zarejestruj się\",\n    \"sort\": \"Sortuj\",\n    \"show_all_options\": \"Pokaż wszystkie opcje\",\n    \"open\": \"Otwórz\"\n  },\n  \"content\": {\n    \"reviews\": \"recenzje\",\n    \"language\": \"Język\",\n    \"localization_region_and_language\": \"Region i język\",\n    \"no_results_found\": \"Nie znaleziono wyników\",\n    \"cart_total\": \"Całkowita wartość koszyka\",\n    \"your_cart_is_empty\": \"Twój koszyk jest pusty\",\n    \"product_image\": \"Obraz produktu\",\n    \"product_information\": \"Informacje o produkcie\",\n    \"quantity\": \"Ilość\",\n    \"product_total\": \"Produkt łącznie\",\n    \"cart_estimated_total\": \"Przewidywana suma\",\n    \"seller_note\": \"Specjalne instrukcje\",\n    \"cart_subtotal\": \"Suma częściowa\",\n    \"discounts\": \"Rabaty\",\n    \"discount\": \"Rabat\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Z wliczonymi cłami i podatkami. Obliczenie rabatów i <a href=\\\"{{ link }}\\\">wysyłki</a> przy realizacji zakupu.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Z wliczonymi cłami i podatkami. Obliczenie rabatów i wysyłki przy realizacji zakupu.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Z wliczonymi podatkami. Obliczenie rabatów i <a href=\\\"{{ link }}\\\">wysyłki</a> przy realizacji zakupu.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Z wliczonymi podatkami. Obliczenie rabatów i wysyłki przy realizacji zakupu.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Z wliczonymi cłami. Obliczenie podatków, rabatów i <a href=\\\"{{ link }}\\\">wysyłki</a> przy realizacji zakupu.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Z wliczonymi cłami. Obliczenie podatków, rabatów i wysyłki przy realizacji zakupu.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Obliczenie podatków, rabatów i <a href=\\\"{{ link }}\\\">wysyłki</a> przy realizacji zakupu.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Obliczenie podatków, rabatów i wysyłki przy realizacji zakupu.\",\n    \"checkout\": \"Zrealizuj zakup\",\n    \"cart_title\": \"Koszyk\",\n    \"price\": \"Cena\",\n    \"price_regular\": \"Cena regularna\",\n    \"price_compare_at\": \"Cena do porównania\",\n    \"price_sale\": \"Cena promocyjna\",\n    \"duties_and_taxes_included\": \"Z wliczonymi cłami i podatkami.\",\n    \"duties_included\": \"Z wliczonymi cłami.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Koszt wysyłki</a> obliczony przy realizacji zakupu.\",\n    \"taxes_included\": \"Z wliczonymi podatkami.\",\n    \"product_badge_sold_out\": \"Wyprzedane\",\n    \"product_badge_sale\": \"W promocji\",\n    \"search_input_label\": \"Szukaj\",\n    \"search_input_placeholder\": \"Szukaj\",\n    \"search_results\": \"Wyniki wyszukiwania\",\n    \"search_results_label\": \"Wyniki wyszukiwania\",\n    \"search_results_no_results\": \"Nie znaleziono wyników dla „{{ terms }}”. Spróbuj innego wyszukiwania.\",\n    \"search_results_resource_articles\": \"Posty na blogu\",\n    \"search_results_resource_collections\": \"Kolekcje\",\n    \"search_results_resource_pages\": \"Strony\",\n    \"search_results_resource_products\": \"Produkty\",\n    \"search_results_resource_queries\": \"Podpowiedzi wyszukiwania\",\n    \"search_results_view_all\": \"Wyświetl wszystko\",\n    \"search_results_view_all_button\": \"Wyświetl wszystko\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} produktów\",\n      \"few\": \"{{ count }} produktów\",\n      \"many\": \"{{ count }} produktów\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Domyślne\",\n      \"grid_fieldset\": \"Siatka kolumn\",\n      \"single_item\": \"Pojedyncze\",\n      \"zoom_out\": \"Pomniejsz\"\n    },\n    \"unavailable\": \"Niedostępne\",\n    \"collection_placeholder\": \"Tytuł kolekcji\",\n    \"product_card_placeholder\": \"Tytuł produktu\",\n    \"recently_viewed_products\": \"Ostatnio wyświetlone\",\n    \"product_count\": \"Liczba produktów\",\n    \"item_count\": {\n      \"one\": \"{{ count }} pozycja\",\n      \"other\": \"Pozycje: {{ count }}\",\n      \"few\": \"Pozycje: {{ count }}\",\n      \"many\": \"Pozycje: {{ count }}\"\n    },\n    \"errors\": \"Błędy\",\n    \"search\": \"Wyszukiwanie\",\n    \"search_results_no_results_check_spelling\": \"Nie znaleziono wyników dla „{{ terms }}”. Sprawdź pisownię lub użyj innego słowa lub zwrotu.\",\n    \"featured_products\": \"Polecane produkty\",\n    \"price_from\": \"Od {{ price }}\",\n    \"filters\": \"Filtry\",\n    \"no_products_found\": \"Nie znaleziono produktów.\",\n    \"price_filter_html\": \"Najwyższa cena to {{ price }}\",\n    \"use_fewer_filters_html\": \"Spróbuj użyć mniej filtrów lub <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">wyczyść wszystkie filtry</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Dzień dobry, {{ first_name }}!\",\n    \"account_orders\": \"Zamówienia\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Kod rabatowy\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Z wliczonymi cłami i podatkami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Z wliczonymi cłami i podatkami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Z wliczonymi cłami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Z wliczonymi cłami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"pickup_available_at_html\": \"Odbiór możliwy w: <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Odbiór możliwy, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Odbiór jest obecnie niemożliwy\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Czytaj dalej...\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Podatki i koszty <a href=\\\"{{ link }}\\\">wysyłki</a> obliczane przy realizacji zakupu.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Podatki i koszty wysyłki obliczane przy realizacji zakupu.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Z wliczonymi podatkami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Z wliczonymi podatkami. Koszt wysyłki jest obliczany przy realizacji zakupu.\",\n    \"wrong_password\": \"Hasło nieprawidłowe\",\n    \"view_more_details\": \"Wyświetl więcej szczegółów\",\n    \"powered_by\": \"Ten sklep będzie obsługiwany przez\",\n    \"store_owner_link_html\": \"Czy jesteś właścicielem sklepu? <a href=\\\"{{ link }}\\\">Zaloguj się tutaj</a>\",\n    \"shipping_discount_error\": \"Rabaty na wysyłkę są widoczne przy realizacji zakupu, gdy dodany zostanie adres\",\n    \"discount_code_error\": \"Nie można dodać kodu rabatowego do Twojego koszyka\",\n    \"inventory_low_stock\": \"Niski poziom zapasu\",\n    \"inventory_in_stock\": \"W magazynie\",\n    \"inventory_out_of_stock\": \"Zapas wyczerpany\",\n    \"page_placeholder_title\": \"Tytuł strony\",\n    \"page_placeholder_content\": \"Wybierz stronę, aby wyświetlić jej zawartość.\",\n    \"placeholder_image\": \"Obraz symbolu zastępczego\",\n    \"shipping_policy\": \"Koszt wysyłki obliczany przy realizacji zakupu.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Pozostało: {{ count }}\",\n      \"other\": \"Pozostało: {{ count }}\",\n      \"few\": \"Pozostało: {{ count }}\",\n      \"many\": \"Pozostało: {{ count }}\"\n    },\n    \"recipient_form_send_to\": \"Wyślij do\",\n    \"recipient_form_email_label\": \"Adres e-mail odbiorcy\",\n    \"recipient_form_email_label_my_email\": \"Mój adres e-mail\",\n    \"recipient_form_email_address\": \"Adres e-mail odbiorcy\",\n    \"recipient_form_name_label\": \"Nazwa odbiorcy (opcjonalnie)\",\n    \"recipient_form_characters_used\": \"Użyte znaki: {{ used_chars }}/{{ max_chars }}\",\n    \"recipient_form_send_on\": \"RRRR-MM-DD\",\n    \"recipient_form_send_on_label\": \"Wyślij dnia (opcjonalnie)\",\n    \"recipient_form_message\": \"Wiadomość (opcjonalnie)\",\n    \"recipient_form_fields_visible\": \"Pola formularza odbiorcy są teraz widoczne\",\n    \"recipient_form_fields_hidden\": \"Pola formularza odbiorcy są teraz ukryte\",\n    \"recipient_form_error\": \"Wystąpił błąd podczas przesyłania formularza\",\n    \"product_custom_property_character_count\": \"Użyte znaki: {{ used_chars }}/{{ max_chars }}\",\n    \"terms_and_policies\": \"Warunki i polityki\",\n    \"pagination\": {\n      \"nav_label\": \"Nawigacja po paginacji\",\n      \"previous\": \"Wstecz\",\n      \"next\": \"Dalej\",\n      \"page\": \"Strona {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Ceny zależne od wolumenu są dostępne\",\n    \"volume_pricing\": \"Ceny zależne od wolumenu\",\n    \"at_price_each\": \"za {{ price }}/szt.\",\n    \"each\": \"{{ price }}/szt.\",\n    \"each_abbreviation\": \"szt.\",\n    \"price_at\": \"za\",\n    \"price_range\": \"Przedział cenowy\",\n    \"cancel\": \"Anuluj\",\n    \"product_subtotal\": \"Suma częściowa dla produktu\",\n    \"quantity_per_item\": \"/szt.\",\n    \"remove_all\": \"Usuń wszystko\",\n    \"remove_all_items_confirmation\": \"Usunąć z koszyka wszystkie pozycje ({{ count }})?\",\n    \"remove_one_item_confirmation\": \"Usunąć 1 pozycję z koszyka?\",\n    \"total_items\": \"Pozycje łącznie\",\n    \"variant\": \"Wariant\",\n    \"variant_total\": \"Suma wariantów\",\n    \"view_cart\": \"Wyświetl koszyk\",\n    \"your_cart\": \"Twój koszyk\",\n    \"items_added_to_cart\": {\n      \"one\": \"Dodano 1 pozycję do koszyka\",\n      \"other\": \"Dodano {{ count }} pozycje(-i) do koszyka\",\n      \"few\": \"Dodano {{ count }} pozycje(-i) do koszyka\",\n      \"many\": \"Dodano {{ count }} pozycje(-i) do koszyka\"\n    },\n    \"item_count_cutoff\": \"Więcej niż {{ count }} pozycje(-i)\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Użyj kodu karty prezentowej online lub kodu QR w sklepie\",\n      \"title\": \"Oto Twoja karta prezentowa o wartości {{ value }} do {{ shop }}!\",\n      \"subtext\": \"Twoja karta prezentowa\",\n      \"shop_link\": \"Odwiedź sklep online\",\n      \"add_to_apple_wallet\": \"Dodaj do Apple Wallet\",\n      \"qr_image_alt\": \"Kod QR – zeskanuj, aby wykorzystać kartę prezentową\",\n      \"copy_code\": \"Kopiuj kod karty prezentowej\",\n      \"expiration_date\": \"Wygasa {{ expires_on }}\",\n      \"copy_code_success\": \"Kod został skopiowany\",\n      \"expired\": \"Ważność wygasła\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentarz\",\n        \"other\": \"Komentarze: {{ count }}\",\n        \"few\": \"Komentarze: {{ count }}\",\n        \"many\": \"Komentarze: {{ count }}\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"Nie udało się opublikować komentarza, zwróć uwagę na:\",\n      \"heading\": \"Wprowadź komentarz\",\n      \"message\": \"Wiadomość\",\n      \"moderated\": \"Pamiętaj, że komentarze muszą zostać zatwierdzone przed opublikowaniem.\",\n      \"name\": \"Nazwa\",\n      \"post\": \"Opublikuj komentarz\",\n      \"success_moderated\": \"Komentarz został opublikowany i oczekuje na moderację\",\n      \"success\": \"Opublikowano komentarz\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"do\"\n  },\n  \"placeholders\": {\n    \"password\": \"Hasło\",\n    \"search\": \"Szukaj\",\n    \"product_title\": \"Tytuł produktu\",\n    \"collection_title\": \"Tytuł kolekcji\",\n    \"blog_posts\": \"Posty na blogu\",\n    \"blog_post_title\": \"Tytuł\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Fragment Twojego posta na blogu\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Dodaj do koszyka\",\n      \"adding_to_cart\": \"Trwa dodawanie...\",\n      \"added_to_cart\": \"Dodano do koszyka\",\n      \"add_to_cart_error\": \"Błąd podczas dodawania do koszyka\",\n      \"quantity_error_max\": \"Pozycja ma maksymalny limit {{ maximum }}\",\n      \"sold_out\": \"Wyprzedane\",\n      \"unavailable\": \"Niedostępny\",\n      \"quantity\": \"Ilość\",\n      \"quantity_increments\": \"Przyrost o {{ increment }}\",\n      \"quantity_minimum\": \"Minimum {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimum {{ maximum }}\",\n      \"in_cart\": \"w koszyku\",\n      \"default_title\": \"Tytuł domyślny\",\n      \"sticky_add_to_cart\": \"Pasek szybkiego dodawania do koszyka\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/pl.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Obramowania\",\n    \"collapsible_row\": \"Zwijany wiersz\",\n    \"custom_section\": \"Sekcja niestandardowa\",\n    \"icon\": \"Ikona\",\n    \"logo_and_favicon\": \"Logo i ikona Favicon\",\n    \"product_buy_buttons\": \"Przyciski zakupu\",\n    \"product_description\": \"Opis\",\n    \"product_price\": \"Cena\",\n    \"slideshow\": \"Pokaz slajdów\",\n    \"typography\": \"Typografia\",\n    \"video\": \"Wideo\",\n    \"colors\": \"Kolory\",\n    \"overlapping_blocks\": \"Nakładające się bloki\",\n    \"rich_text_section\": \"Tekst sformatowany\",\n    \"product_variant_picker\": \"Selektor wariantów\",\n    \"slideshow_controls\": \"Sterowanie pokazem slajdów\",\n    \"size\": \"Rozmiar\",\n    \"spacing\": \"Odstępy\",\n    \"product_recommendations\": \"Polecane produkty\",\n    \"product_media\": \"Multimedia produktu\",\n    \"featured_collection\": \"Polecana kolekcja\",\n    \"add_to_cart\": \"Dodaj do koszyka\",\n    \"email_signup\": \"Rejestracja w celu otrzymywania e-maili\",\n    \"submit_button\": \"Przycisk przesyłania\",\n    \"grid_layout_selector\": \"Selektor układu siatki\",\n    \"image\": \"Obraz\",\n    \"list_items\": \"Elementy listy\",\n    \"facets\": \"Aspekty\",\n    \"variants\": \"Warianty\",\n    \"styles\": \"Style\",\n    \"product_cards\": \"Karty produktów\",\n    \"buttons\": \"Przyciski\",\n    \"inputs\": \"Pola wprowadzania\",\n    \"primary_button\": \"Przycisk podstawowy\",\n    \"secondary_button\": \"Przycisk dodatkowy\",\n    \"popovers_and_modals\": \"Wyskakujące okienka i okna modalne\",\n    \"marquee\": \"Markiza\",\n    \"alternating_content_rows\": \"Naprzemienne wiersze\",\n    \"pull_quote\": \"Cytat\",\n    \"contact_form\": \"Formularz kontaktowy\",\n    \"featured_product\": \"Wyróżnienie produktu\",\n    \"icons_with_text\": \"Ikony z tekstem\",\n    \"product_list\": \"Polecana kolekcja\",\n    \"spacer\": \"Odstęp\",\n    \"products_carousel\": \"Polecana kolekcja: Karuzela\",\n    \"products_grid\": \"Polecana kolekcja: Siatka\",\n    \"accelerated_checkout\": \"Przyśpieszona realizacja zakupu\",\n    \"accordion\": \"Akordeon\",\n    \"accordion_row\": \"Wiersz akordeonu\",\n    \"animations\": \"Animacje\",\n    \"announcement\": \"Ogłoszenie\",\n    \"announcement_bar\": \"Pasek ogłoszeń\",\n    \"badges\": \"Identyfikatory\",\n    \"button\": \"Przycisk\",\n    \"cart\": \"Koszyk\",\n    \"cart_items\": \"Pozycje w koszyku\",\n    \"cart_products\": \"Produkty w koszyku\",\n    \"cart_title\": \"Koszyk\",\n    \"collection\": \"Kolekcja\",\n    \"collection_card\": \"Karta kolekcji\",\n    \"collection_columns\": \"Kolumny kolekcji\",\n    \"collection_container\": \"Kolekcja\",\n    \"collection_description\": \"Opis kolekcji\",\n    \"collection_image\": \"Obraz kolekcji\",\n    \"collection_info\": \"Informacje o kolekcji\",\n    \"collection_list\": \"Lista kolekcji\",\n    \"collections\": \"Kolekcje\",\n    \"content\": \"Treść\",\n    \"content_grid\": \"Siatka treści\",\n    \"details\": \"Szczegóły\",\n    \"divider\": \"Separator\",\n    \"filters\": \"Filtrowanie i sortowanie\",\n    \"follow_on_shop\": \"Obserwuj w Shop\",\n    \"footer\": \"Stopka\",\n    \"footer_utilities\": \"Narzędzia stopki\",\n    \"group\": \"Grupa\",\n    \"header\": \"Nagłówek\",\n    \"heading\": \"Nagłówek\",\n    \"icons\": \"Ikony\",\n    \"image_with_text\": \"Obraz z tekstem\",\n    \"input\": \"Pole wprowadzania\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Siatka magazynowa\",\n    \"media\": \"Multimedia\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Układ mobilny\",\n    \"payment_icons\": \"Ikony płatności\",\n    \"popup_link\": \"Link do wyskakującego okienka\",\n    \"predictive_search\": \"Wyskakujące okienko wyszukiwania\",\n    \"predictive_search_empty\": \"Puste wyszukiwanie predykcyjne\",\n    \"price\": \"Cena\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Karta produktu\",\n    \"product_card_media\": \"Multimedia\",\n    \"product_card_rendering\": \"Renderowanie karty produktu\",\n    \"product_grid\": \"Siatka\",\n    \"product_grid_main\": \"Siatka produktów\",\n    \"product_image\": \"Obraz produktu\",\n    \"product_information\": \"Informacje o produkcie\",\n    \"product_review_stars\": \"Gwiazdki recenzji\",\n    \"quantity\": \"Ilość\",\n    \"row\": \"Wiersz\",\n    \"search\": \"Wyszukiwanie\",\n    \"section\": \"Sekcja\",\n    \"selected_variants\": \"Wybrane warianty\",\n    \"slide\": \"Slajd\",\n    \"social_media_links\": \"Linki do mediów społecznościowych\",\n    \"steps\": \"Kroki\",\n    \"summary\": \"Podsumowanie\",\n    \"swatches\": \"Próbki\",\n    \"testimonials\": \"Opinie\",\n    \"text\": \"Tekst\",\n    \"title\": \"Tytuł\",\n    \"utilities\": \"Narzędzia\",\n    \"search_input\": \"Pole wyszukiwania\",\n    \"search_results\": \"Wyniki wyszukiwania\",\n    \"read_only\": \"Tylko do odczytu\",\n    \"collection_title\": \"Tytuł kolekcji\",\n    \"collections_bento\": \"Lista kolekcji: bento\",\n    \"faq_section\": \"Często zadawane pytania\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Tekst jumbo\",\n    \"view_all_button\": \"Wyświetl wszystko\",\n    \"video_section\": \"Wideo\",\n    \"custom_liquid\": \"Niestandardowy kod Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Post na blogu\",\n    \"blog_posts\": \"Posty na blogu\",\n    \"caption\": \"Podpis\",\n    \"collection_card_image\": \"Obraz\",\n    \"collection_links\": \"Linki do kolekcji\",\n    \"collection_links_spotlight\": \"Linki do kolekcji: Spotlight\",\n    \"collection_links_text\": \"Linki do kolekcji: Tekst\",\n    \"collections_carousel\": \"Lista kolekcji: Karuzela\",\n    \"collections_editorial\": \"Lista kolekcji: Edytorski\",\n    \"collections_grid\": \"Lista kolekcji: Siatka\",\n    \"copyright\": \"Prawo autorskie\",\n    \"count\": \"Licznik\",\n    \"divider_section\": \"Separator\",\n    \"drawers\": \"Szuflady\",\n    \"editorial\": \"Edytorski\",\n    \"editorial_jumbo_text\": \"Edytorski: Tekst jumbo\",\n    \"hero_marquee\": \"Hero: Markiza\",\n    \"input_fields\": \"Pola wprowadzania\",\n    \"local_pickup\": \"Odbiór lokalny\",\n    \"marquee_section\": \"Markiza\",\n    \"media_with_text\": \"Multimedia z tekstem\",\n    \"page\": \"Strona\",\n    \"page_content\": \"Treść\",\n    \"page_layout\": \"Układ strony\",\n    \"policy_list\": \"Linki do polityk\",\n    \"prices\": \"Ceny\",\n    \"products_editorial\": \"Polecana kolekcja: Edytorski\",\n    \"social_link\": \"Link do mediów społecznościowych\",\n    \"split_showcase\": \"Dzielona witryna\",\n    \"variant_pickers\": \"Selektory wariantów\",\n    \"product_title\": \"Tytuł produktu\",\n    \"large_logo\": \"Duże logo\",\n    \"product_list_button\": \"Przycisk „Wyświetl wszystko”\",\n    \"product_inventory\": \"Zapasy produktu\",\n    \"pills\": \"Pigułki\",\n    \"description\": \"Opis\",\n    \"featured_image\": \"Wyróżniony obraz\",\n    \"multicolumn\": \"Wiele kolumn\",\n    \"product_custom_property\": \"Instrukcje specjalne\",\n    \"hero_bottom_aligned\": \"Hero: Wyrównanie do dołu\",\n    \"blog_card\": \"Karta bloga\",\n    \"blog_posts_grid\": \"Posty na blogu: Siatka\",\n    \"blog_posts_carousel\": \"Posty na blogu: Karuzela\",\n    \"blog_posts_editorial\": \"Posty na blogu: Edytorski\",\n    \"excerpt\": \"Fragment\",\n    \"footer_password\": \"Stopka na stronie z hasłem\",\n    \"policies_and_links\": \"Polityki i linki\",\n    \"card\": \"Karta\",\n    \"carousel\": \"Karuzela\",\n    \"carousel_content\": \"Treść karuzeli\",\n    \"quick_order_list\": \"Lista do szybkiego zamawiania\",\n    \"column\": \"Kolumna\",\n    \"comparison_slider\": \"Suwak porównawczy\",\n    \"slideshow_full_frame\": \"Pokaz slajdów: Pełna klatka\",\n    \"slideshow_inset\": \"Pokaz slajdów: Wpasowany\",\n    \"image_compare\": \"Porównanie obrazów\",\n    \"subheading\": \"Podtytuł\",\n    \"featured_product_information\": \"Polecany produkt\",\n    \"product_hotspots\": \"Hotspoty produktowe\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Warstwowy pokaz slajdów\"\n  },\n  \"settings\": {\n    \"autoplay\": \"Autoodtwarzanie\",\n    \"background\": \"Tło\",\n    \"border_radius\": \"Promień narożnika\",\n    \"border_width\": \"Grubość obramowania\",\n    \"borders\": \"Obramowania\",\n    \"bottom_padding\": \"Wypełnienie dolne\",\n    \"color\": \"Kolor\",\n    \"content_direction\": \"Kierunek treści\",\n    \"content_position\": \"Pozycja treści\",\n    \"cover_image_size\": \"Rozmiar obrazu okładki\",\n    \"cover_image\": \"Obraz okładki\",\n    \"custom_width\": \"Niestandardowa szerokość\",\n    \"enable_video_looping\": \"Odtwarzanie wideo w pętli\",\n    \"favicon\": \"Ikona Favicon\",\n    \"heading\": \"Nagłówek\",\n    \"icon\": \"Ikona\",\n    \"image_icon\": \"Ikona obrazu\",\n    \"make_section_full_width\": \"Ustaw sekcję na pełną szerokość\",\n    \"overlay_opacity\": \"Krycie nakładki\",\n    \"padding\": \"Wypełnienie\",\n    \"product\": \"Produkt\",\n    \"text\": \"Tekst\",\n    \"top_padding\": \"Wypełnienie górne\",\n    \"video\": \"Wideo\",\n    \"video_alt_text\": \"Tekst alternatywny\",\n    \"video_loop\": \"Odtwarzaj wideo w pętli\",\n    \"video_position\": \"Pozycja wideo\",\n    \"width\": \"Szerokość\",\n    \"alignment\": \"Wyrównanie\",\n    \"button\": \"Przycisk\",\n    \"colors\": \"Kolory\",\n    \"content_alignment\": \"Wyrównanie treści\",\n    \"custom_minimum_height\": \"Niestandardowa minimalna wysokość\",\n    \"font_family\": \"Rodzina czcionek\",\n    \"gap\": \"Odstęp\",\n    \"geometric_translate_y\": \"Przesunięcie geometryczne Y\",\n    \"image\": \"Obraz\",\n    \"image_opacity\": \"Krycie obrazu\",\n    \"image_position\": \"Pozycja obrazu\",\n    \"image_ratio\": \"Współczynnik proporcji obrazu\",\n    \"label\": \"Etykieta\",\n    \"line_height\": \"Wysokość wiersza\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Odstęp w układzie\",\n    \"minimum_height\": \"Minimalna wysokość\",\n    \"opacity\": \"Krycie\",\n    \"primary_color\": \"Linki\",\n    \"section_width\": \"Szerokość sekcji\",\n    \"size\": \"Rozmiar\",\n    \"slide_spacing\": \"Odstęp między slajdami\",\n    \"slide_width\": \"Szerokość slajdu\",\n    \"slideshow_fullwidth\": \"Slajdy na pełną szerokość\",\n    \"style\": \"Styl\",\n    \"text_case\": \"Wielkość liter\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Ogranicz szerokość treści\",\n    \"color_scheme\": \"Schemat kolorów\",\n    \"inherit_color_scheme\": \"Odziedzicz schemat kolorów\",\n    \"product_count\": \"Liczba produktów\",\n    \"product_type\": \"Typ produktu\",\n    \"content_width\": \"Szerokość treści\",\n    \"collection\": \"Kolekcja\",\n    \"enable_sticky_content\": \"Przyklejona zawartość na komputerach\",\n    \"error_color\": \"Błąd\",\n    \"success_color\": \"Sukces\",\n    \"primary_font\": \"Czcionka podstawowa\",\n    \"secondary_font\": \"Czcionka pomocnicza\",\n    \"tertiary_font\": \"Trzecia czcionka\",\n    \"columns\": \"Kolumny\",\n    \"items_to_show\": \"Pozycje do wyświetlenia\",\n    \"layout\": \"Układ\",\n    \"layout_type\": \"Typ\",\n    \"show_grid_layout_selector\": \"Pokaż selektor układu siatki\",\n    \"view_more_show\": \"Pokaż przycisk „Wyświetl więcej”\",\n    \"image_gap\": \"Odstęp między obrazami\",\n    \"width_desktop\": \"Szerokość na komputerach\",\n    \"width_mobile\": \"Szerokość na urządzeniach mobilnych\",\n    \"border_style\": \"Styl obramowania\",\n    \"height\": \"Wysokość\",\n    \"thickness\": \"Grubość\",\n    \"stroke\": \"Grubość linii\",\n    \"filter_style\": \"Styl filtra\",\n    \"swatches\": \"Próbki\",\n    \"quick_add_colors\": \"Kolory szybkiego dodawania\",\n    \"divider_color\": \"Separator\",\n    \"border_opacity\": \"Krycie obramowania\",\n    \"hover_background\": \"Tło po najechaniu myszą\",\n    \"hover_borders\": \"Obramowania po najechaniu myszą\",\n    \"hover_text\": \"Tekst po najechaniu myszą\",\n    \"primary_hover_color\": \"Linki po najechaniu myszą\",\n    \"primary_button_text\": \"Tekst przycisku podstawowego\",\n    \"primary_button_background\": \"Tło przycisku podstawowego\",\n    \"primary_button_border\": \"Obramowanie przycisku podstawowego\",\n    \"secondary_button_text\": \"Tekst przycisku pomocniczego\",\n    \"secondary_button_background\": \"Tło przycisku pomocniczego\",\n    \"secondary_button_border\": \"Obramowanie przycisku pomocniczego\",\n    \"shadow_color\": \"Cień\",\n    \"video_autoplay\": \"Autoodtwarzanie\",\n    \"video_cover_image\": \"Obraz okładki\",\n    \"video_external_url\": \"Adres URL\",\n    \"video_source\": \"Źródło\",\n    \"background_color\": \"Kolor tła\",\n    \"first_row_media_position\": \"Pozycja multimediów w pierwszym wierszu\",\n    \"hide_padding\": \"Ukryj wypełnienie\",\n    \"size_mobile\": \"Rozmiar na urządzeniach mobilnych\",\n    \"pixel_size_mobile\": \"Rozmiar w pikselach\",\n    \"percent_size_mobile\": \"Rozmiar w procentach\",\n    \"unit\": \"Jednostka\",\n    \"custom_mobile_size\": \"Niestandardowy rozmiar na urządzeniach mobilnych\",\n    \"fixed_height\": \"Wysokość w pikselach\",\n    \"fixed_width\": \"Szerokość w pikselach\",\n    \"percent_height\": \"Wysokość w procentach\",\n    \"percent_width\": \"Szerokość w procentach\",\n    \"percent_size\": \"Rozmiar w procentach\",\n    \"pixel_size\": \"Rozmiar w pikselach\",\n    \"card_image_height\": \"Wysokość obrazu produktu\",\n    \"logo_font\": \"Czcionka logo\",\n    \"accordion\": \"Akordeon\",\n    \"aspect_ratio\": \"Współczynnik proporcji\",\n    \"auto_rotate_announcements\": \"Automatycznie obracaj ogłoszenia\",\n    \"auto_rotate_slides\": \"Automatycznie obracaj slajdy\",\n    \"badge_corner_radius\": \"Promień narożnika\",\n    \"badge_position\": \"Pozycja na kartach\",\n    \"badge_sale_color_scheme\": \"Wyprzedaż\",\n    \"badge_sold_out_color_scheme\": \"Wyprzedane\",\n    \"behavior\": \"Zachowanie\",\n    \"blur\": \"Rozmycie cienia\",\n    \"border\": \"Obramowanie\",\n    \"bottom\": \"Dół\",\n    \"carousel_on_mobile\": \"Karuzela na urządzeniach mobilnych\",\n    \"cart_count\": \"Liczba pozycji w koszyku\",\n    \"cart_items\": \"Pozycje w koszyku\",\n    \"cart_related_products\": \"Produkty powiązane\",\n    \"cart_title\": \"Koszyk\",\n    \"cart_total\": \"Suma w koszyku\",\n    \"cart_type\": \"Typ\",\n    \"case\": \"Wielkość liter\",\n    \"checkout_buttons\": \"Przyciski przyspieszonej realizacji zakupu\",\n    \"collection_list\": \"Kolekcje\",\n    \"collection_templates\": \"Szablony kolekcji\",\n    \"content\": \"Treść\",\n    \"corner_radius\": \"Promień narożnika\",\n    \"country_region\": \"Kraj/Region\",\n    \"currency_code\": \"Kod waluty\",\n    \"custom_height\": \"Niestandardowa wysokość\",\n    \"desktop_height\": \"Wysokość na komputerach\",\n    \"direction\": \"Kierunek\",\n    \"display\": \"Wyświetlanie\",\n    \"divider_thickness\": \"Grubość separatora\",\n    \"divider\": \"Separator\",\n    \"dividers\": \"Separatory\",\n    \"drop_shadow\": \"Cień\",\n    \"empty_state_collection_info\": \"Wyświetlane przed wprowadzeniem wyszukiwania\",\n    \"empty_state_collection\": \"Kolekcja dla stanu pustego\",\n    \"enable_filtering\": \"Filtry\",\n    \"enable_grid_density\": \"Kontrola układu siatki\",\n    \"enable_sorting\": \"Sortowanie\",\n    \"enable_zoom\": \"Włącz powiększenie\",\n    \"equal_columns\": \"Równe kolumny\",\n    \"expand_first_group\": \"Rozwiń pierwszą grupę\",\n    \"extend_media_to_screen_edge\": \"Rozciągnij multimedia do krawędzi ekranu\",\n    \"extend_summary\": \"Rozciągnij do krawędzi ekranu\",\n    \"extra_large\": \"Bardzo duży\",\n    \"extra_small\": \"Bardzo mały\",\n    \"flag\": \"Flaga\",\n    \"font_price\": \"Czcionka ceny\",\n    \"font_weight\": \"Grubość czcionki\",\n    \"font\": \"Czcionka\",\n    \"full_width_first_image\": \"Pierwszy obraz na pełną szerokość\",\n    \"full_width_on_mobile\": \"Pełna szerokość na urządzeniach mobilnych\",\n    \"heading_preset\": \"Ustawienie wstępne nagłówka\",\n    \"hide_unselected_variant_media\": \"Ukryj multimedia niewybranego wariantu\",\n    \"horizontal_gap\": \"Odstęp poziomy\",\n    \"horizontal_offset\": \"Poziome przesunięcie cienia\",\n    \"hover_behavior\": \"Zachowanie po najechaniu myszą\",\n    \"icon_background\": \"Tło ikony\",\n    \"icons\": \"Ikony\",\n    \"image_border_radius\": \"Promień narożnika obrazu\",\n    \"installments\": \"Raty\",\n    \"integrated_button\": \"Zintegrowany przycisk\",\n    \"language_selector\": \"Selektor języka\",\n    \"large\": \"Duży\",\n    \"left_padding\": \"Wypełnienie lewe\",\n    \"left\": \"Lewo\",\n    \"letter_spacing\": \"Odstępy między literami\",\n    \"limit_media_to_screen_height\": \"Dopasuj do wysokości ekranu\",\n    \"limit_product_details_width\": \"Ogranicz szerokość szczegółów produktu\",\n    \"link_preset\": \"Ustawienie wstępne linku\",\n    \"links\": \"Linki\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Pętla\",\n    \"make_details_sticky_desktop\": \"Przyklejony na komputerze\",\n    \"max_width\": \"Maks. szerokość\",\n    \"media_height\": \"Wysokość multimediów\",\n    \"media_overlay\": \"Nakładka na multimedia\",\n    \"media_position\": \"Pozycja multimediów\",\n    \"media_type\": \"Typ multimediów\",\n    \"media_width\": \"Szerokość multimediów\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Kolumny na urządzeniach mobilnych\",\n    \"mobile_height\": \"Wysokość na urządzeniach mobilnych\",\n    \"mobile_logo_image\": \"Logo na urządzenia mobilne\",\n    \"mobile_quick_add\": \"Szybkie dodawanie na urządzeniach mobilnych\",\n    \"motion_direction\": \"Kierunek ruchu\",\n    \"motion\": \"Ruch\",\n    \"movement_direction\": \"Kierunek ruchu\",\n    \"navigation_bar_color_scheme\": \"Schemat kolorów paska nawigacji\",\n    \"navigation_bar\": \"Pasek nawigacji\",\n    \"navigation\": \"Nawigacja\",\n    \"open_new_tab\": \"Otwórz link w nowej karcie\",\n    \"overlay_color\": \"Kolor nakładki\",\n    \"overlay\": \"Nakładka\",\n    \"padding_bottom\": \"Wypełnienie dolne\",\n    \"padding_horizontal\": \"Wypełnienie poziome\",\n    \"padding_top\": \"Wypełnienie górne\",\n    \"page_width\": \"Szerokość strony\",\n    \"pagination\": \"Paginacja\",\n    \"placement\": \"Położenie\",\n    \"position\": \"Pozycja\",\n    \"preset\": \"Ustawienie wstępne\",\n    \"product_cards\": \"Karty produktów\",\n    \"product_pages\": \"Strony produktów\",\n    \"product_templates\": \"Szablony produktów\",\n    \"products\": \"Produkty\",\n    \"quick_add\": \"Szybkie dodawanie\",\n    \"ratio\": \"Współczynnik\",\n    \"regular\": \"Zwykła\",\n    \"review_count\": \"Liczba opinii\",\n    \"right\": \"Prawo\",\n    \"row_height\": \"Wysokość wiersza\",\n    \"row\": \"Wiersz\",\n    \"seller_note\": \"Zezwalaj na notatkę dla sprzedawcy\",\n    \"shape\": \"Kształt\",\n    \"show_as_accordion\": \"Pokaż jako akordeon na urządzeniach mobilnych\",\n    \"show_sale_price_first\": \"Najpierw pokaż cenę promocyjną\",\n    \"show_tax_info\": \"Informacje o podatkach\",\n    \"show\": \"Pokaż\",\n    \"small\": \"Mały\",\n    \"speed\": \"Szybkość\",\n    \"statement\": \"Zestawienie\",\n    \"sticky_header\": \"Przyklejony nagłówek\",\n    \"text_hierarchy\": \"Hierarchia tekstu\",\n    \"text_presets\": \"Ustawienia wstępne tekstu\",\n    \"title\": \"Tytuł\",\n    \"top\": \"Góra\",\n    \"type\": \"Typ\",\n    \"type_preset\": \"Ustawienie wstępne tekstu\",\n    \"underline_thickness\": \"Grubość podkreślenia\",\n    \"variant_images\": \"Obrazy wariantów\",\n    \"vendor\": \"Dostawca\",\n    \"vertical_gap\": \"Odstęp pionowy\",\n    \"vertical_offset\": \"Pionowe przesunięcie cienia\",\n    \"vertical_on_mobile\": \"Pionowo na urządzeniach mobilnych\",\n    \"view_all_as_last_card\": \"„Wyświetl wszystko” jako ostatnia karta\",\n    \"weight\": \"Grubość\",\n    \"wrap\": \"Zawijaj\",\n    \"read_only\": \"Tylko do odczytu\",\n    \"always_stack_buttons\": \"Zawsze układaj przyciski w stos\",\n    \"custom_mobile_width\": \"Niestandardowa szerokość na urządzeniach mobilnych\",\n    \"gradient_direction\": \"Kierunek gradientu\",\n    \"overlay_style\": \"Styl nakładki\",\n    \"shadow_opacity\": \"Krycie cienia\",\n    \"show_filter_label\": \"Etykiety tekstowe dla zastosowanych filtrów\",\n    \"show_swatch_label\": \"Etykiety tekstowe dla próbek\",\n    \"transparent_background\": \"Przezroczyste tło\",\n    \"account\": \"Konto\",\n    \"align_baseline\": \"Wyrównanie do linii bazowej tekstu\",\n    \"add_discount_code\": \"Zezwalaj na rabaty w koszyku\",\n    \"background_overlay\": \"Nakładka tła\",\n    \"background_media\": \"Multimedia w tle\",\n    \"border_thickness\": \"Grubość obramowania\",\n    \"bottom_row\": \"Dolny wiersz\",\n    \"button_text_case\": \"Wielkość liter\",\n    \"auto_open_cart_drawer\": \"„Dodaj do koszyka” automatycznie otwiera szufladę\",\n    \"collection_count\": \"Liczba kolekcji\",\n    \"custom_liquid\": \"Kod Liquid\",\n    \"default\": \"Domyślny\",\n    \"default_logo\": \"Domyślne logo\",\n    \"divider_width\": \"Szerokość separatora\",\n    \"headings\": \"Nagłówki\",\n    \"hide_logo_on_home_page\": \"Ukryj logo na stronie głównej\",\n    \"horizontal_padding\": \"Wypełnienie poziome\",\n    \"inverse\": \"Odwrotny\",\n    \"inverse_logo\": \"Logo odwrotne\",\n    \"layout_style\": \"Styl\",\n    \"length\": \"Długość\",\n    \"mobile_pagination\": \"Paginacja na urządzeniach mobilnych\",\n    \"open_row_by_default\": \"Domyślnie otwieraj wiersz\",\n    \"page_transition_enabled\": \"Przejście strony\",\n    \"search\": \"Wyszukiwanie\",\n    \"search_icon\": \"Ikona wyszukiwania\",\n    \"search_position\": \"Pozycja\",\n    \"search_row\": \"Wiersz\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Pokaż wyrównanie\",\n    \"show_count\": \"Pokaż liczbę\",\n    \"show_date\": \"Data\",\n    \"show_pickup_availability\": \"Pokaż dostępność odbioru\",\n    \"show_search\": \"Pokaż wyszukiwanie\",\n    \"use_inverse_logo\": \"Użyj logo odwrotnego\",\n    \"vertical_padding\": \"Wypełnienie pionowe\",\n    \"visibility\": \"Widoczność\",\n    \"product_corner_radius\": \"Promień narożnika produktu\",\n    \"card_corner_radius\": \"Promień narożnika karty\",\n    \"alignment_mobile\": \"Wyrównanie na urządzeniach mobilnych\",\n    \"animation_repeat\": \"Powtarzanie animacji\",\n    \"blurred_reflection\": \"Rozmyte odbicie\",\n    \"card_hover_effect\": \"Efekt najechania na kartę\",\n    \"card_size\": \"Rozmiar karty\",\n    \"collection_title_case\": \"Wielkość liter w tytule kolekcji\",\n    \"inventory_threshold\": \"Próg niskiego stanu zapasów\",\n    \"mobile_card_size\": \"Rozmiar karty na urządzeniach mobilnych\",\n    \"page\": \"Strona\",\n    \"product_and_card_title_case\": \"Wielkość liter w tytule produktu i karty\",\n    \"product_title_case\": \"Wielkość liter w tytule produktu\",\n    \"reflection_opacity\": \"Krycie odbicia\",\n    \"right_padding\": \"Wypełnienie prawe\",\n    \"show_inventory_quantity\": \"Pokaż ilość przy niskim stanie zapasów\",\n    \"text_label_case\": \"Wielkość liter w etykiecie tekstowej\",\n    \"transition_to_main_product\": \"Przejście z karty produktu na stronę produktu\",\n    \"show_second_image_on_hover\": \"Pokaż drugi obraz po najechaniu myszą\",\n    \"media\": \"Multimedia\",\n    \"product_card_carousel\": \"Pokaż karuzelę\",\n    \"media_fit\": \"Dopasowanie multimediów\",\n    \"scroll_speed\": \"Czas do następnego ogłoszenia\",\n    \"show_powered_by_shopify\": \"Pokaż „Technologia Shopify”\",\n    \"gift_card_form\": \"Formularz karty prezentowej\",\n    \"seller_note_open_by_default\": \"Domyślnie otwieraj notatkę dla sprzedawcy\",\n    \"add_to_cart_animation\": \"Dodaj do koszyka\",\n    \"custom_link\": \"Własny link\",\n    \"product_custom_property\": {\n      \"heading\": \"Nagłówek\",\n      \"description\": \"Opis\",\n      \"key\": \"Nazwa właściwości\",\n      \"key_info\": \"Nie może być pusty i musi być unikatowy dla każdego bloku. Wyświetla się w koszyku, kasie i szczegółach zamówienia.\",\n      \"placeholder_text\": \"Tekst zastępczy\",\n      \"default_heading\": \"Dostosuj swój produkt\",\n      \"default_placeholder\": \"Wprowadź specjalne instrukcje\",\n      \"default_property_key\": \"Instrukcje specjalne\",\n      \"max_length\": \"Maks. liczba znaków\",\n      \"required\": \"Wprowadzenie danych jest wymagane, aby dodać pozycję do koszyka\",\n      \"input_type\": \"Typ danych wejściowych\",\n      \"input_type_text\": \"Tekst\",\n      \"input_type_checkbox\": \"Pole wyboru\",\n      \"content_settings\": \"Ustawienia treści\",\n      \"buyers_input\": \"Dane wejściowe kupującego\",\n      \"checkbox_label\": \"Etykieta pola wyboru\",\n      \"default_checkbox_label\": \"Uwzględnij opakowanie na prezent\",\n      \"heading_preset\": \"Nagłówek\",\n      \"description_preset\": \"Opis\",\n      \"input_preset\": \"Dane wejściowe\",\n      \"checkbox_preset\": \"Etykieta pola wyboru\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Liczba postów\",\n    \"animation\": \"Animacja\",\n    \"top_level_size\": \"Rozmiar pierwszego poziomu\",\n    \"empty_cart_button_link\": \"Link przycisku w pustym koszyku\",\n    \"auto_load_products\": \"Automatycznie ładuj produkty podczas przewijania\",\n    \"products_per_page\": \"Liczba produktów na stronie\",\n    \"custom_mobile_media\": \"Pokaż inne multimedia na urządzeniach mobilnych\",\n    \"stack_media_on_mobile\": \"Układaj multimedia w stos\",\n    \"full_frame_on_mobile\": \"Pełna szerokość na urządzeniach mobilnych\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"Warianty na stronę\",\n    \"image_1\": \"Obraz 1\",\n    \"image_2\": \"Obraz 2\",\n    \"media_type_1\": \"Typ multimediów\",\n    \"media_type_2\": \"Typ multimediów 2\",\n    \"after_image\": \"Obraz „po”\",\n    \"before_image\": \"Obraz „przed”\",\n    \"cs_slider_style\": \"Styl suwaka\",\n    \"cs_slider_color\": \"Kolor suwaka\",\n    \"cs_slider_inner_color\": \"Kolor wewnętrzny suwaka\",\n    \"text_on_images\": \"Tekst na obrazach\",\n    \"card_height\": \"Wysokość karty\",\n    \"submenu_size\": \"Rozmiar podmenu\",\n    \"desktop_position\": \"Pozycja na komputerach\",\n    \"desktop_pagination\": \"Paginacja na komputerach\",\n    \"bullseye_color\": \"Kolor wewnętrzny\",\n    \"hotspot_color\": \"Kolor hotspotu\",\n    \"product_price_typography\": \"Typografia ceny produktu\",\n    \"product_title_typography\": \"Typografia tytułu produktu\",\n    \"x_position\": \"Pozycja pozioma\",\n    \"y_position\": \"Pozycja pionowa\",\n    \"enable_sticky_add_to_cart\": \"Przypięty pasek dodawania do koszyka\",\n    \"sticky_add_to_cart\": \"Przypięte dodawanie do koszyka\",\n    \"actions_display_style\": \"Styl menu\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Strzałka\",\n    \"banana\": \"Banan\",\n    \"bottle\": \"Butelka\",\n    \"box\": \"Ramka\",\n    \"buttons\": \"Przyciski\",\n    \"carrot\": \"Marchewka\",\n    \"center\": \"Środek\",\n    \"chat_bubble\": \"Dymek czatu\",\n    \"clipboard\": \"Schowek\",\n    \"contain\": \"Dopasuj\",\n    \"counter\": \"Licznik\",\n    \"cover\": \"Wypełnij\",\n    \"custom\": \"Niestandardowy\",\n    \"dairy_free\": \"Bez nabiału\",\n    \"dairy\": \"Nabiał\",\n    \"dropdowns\": \"Listy rozwijane\",\n    \"dots\": \"Kropki\",\n    \"dryer\": \"Suszarka\",\n    \"end\": \"Koniec\",\n    \"eye\": \"Oko\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"Ogień\",\n    \"gluten_free\": \"Bezglutenowy\",\n    \"heart\": \"Serce\",\n    \"horizontal\": \"Poziomy\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Żelazko\",\n    \"large\": \"Duży\",\n    \"leaf\": \"Liść\",\n    \"leather\": \"Skóra\",\n    \"lightning_bolt\": \"Piorun\",\n    \"lipstick\": \"Szminka\",\n    \"lock\": \"Kłódka\",\n    \"map_pin\": \"Pinezka na mapie\",\n    \"medium\": \"Średni\",\n    \"none\": \"Brak\",\n    \"numbers\": \"Liczby\",\n    \"nut_free\": \"Bez orzechów\",\n    \"pants\": \"Spodnie\",\n    \"paw_print\": \"Odcisk łapy\",\n    \"pepper\": \"Papryka\",\n    \"perfume\": \"Perfumy\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Samolot\",\n    \"plant\": \"Roślina\",\n    \"price_tag\": \"Etykieta z ceną\",\n    \"question_mark\": \"Znak zapytania\",\n    \"recycle\": \"Recykling\",\n    \"return\": \"Zwrot\",\n    \"ruler\": \"Linijka\",\n    \"serving_dish\": \"Półmisek\",\n    \"shirt\": \"Koszula\",\n    \"shoe\": \"But\",\n    \"silhouette\": \"Sylwetka\",\n    \"small\": \"Mały\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Płatek śniegu\",\n    \"star\": \"Gwiazda\",\n    \"start\": \"Początek\",\n    \"stopwatch\": \"Stoper\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Ciężarówka\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"vertical\": \"Pionowy\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Pranie\",\n    \"auto\": \"Automatyczny\",\n    \"default\": \"Domyślny\",\n    \"fill\": \"Wypełnienie\",\n    \"fit\": \"Dopasuj\",\n    \"full\": \"Pełny\",\n    \"full_and_page\": \"Pełne tło, treść o szerokości strony\",\n    \"heading\": \"Nagłówek\",\n    \"landscape\": \"Poziomy\",\n    \"lg\": \"LG\",\n    \"link\": \"Link\",\n    \"lowercase\": \"małe litery\",\n    \"m\": \"M\",\n    \"outline\": \"Kontur\",\n    \"page\": \"Strona\",\n    \"portrait\": \"Pionowy\",\n    \"s\": \"S\",\n    \"sentence\": \"Zdanie\",\n    \"solid\": \"Jednolity\",\n    \"space_between\": \"Odstęp między\",\n    \"square\": \"Kwadrat\",\n    \"uppercase\": \"Wielkie litery\",\n    \"circle\": \"Okrąg\",\n    \"swatches\": \"Próbki\",\n    \"full_and_page_offset_left\": \"Pełne tło, treść o szerokości strony, przesunięcie w lewo\",\n    \"full_and_page_offset_right\": \"Pełne tło, treść o szerokości strony, przesunięcie w prawo\",\n    \"offset_left\": \"Przesunięcie w lewo\",\n    \"offset_right\": \"Przesunięcie w prawo\",\n    \"page_center_aligned\": \"Strona, wyrównanie do środka\",\n    \"page_left_aligned\": \"Strona, wyrównanie do lewej\",\n    \"page_right_aligned\": \"Strona, wyrównanie do prawej\",\n    \"button\": \"Przycisk\",\n    \"caption\": \"Podpis\",\n    \"h1\": \"Nagłówek 1\",\n    \"h2\": \"Nagłówek 2\",\n    \"h3\": \"Nagłówek 3\",\n    \"h4\": \"Nagłówek 4\",\n    \"h5\": \"Nagłówek 5\",\n    \"h6\": \"Nagłówek 6\",\n    \"paragraph\": \"Akapit\",\n    \"primary\": \"Podstawowy\",\n    \"secondary\": \"Dodatkowy\",\n    \"tertiary\": \"Trzeciorzędny\",\n    \"chevron_left\": \"Szewron w lewo\",\n    \"chevron_right\": \"Szewron w prawo\",\n    \"diamond\": \"Romb\",\n    \"grid\": \"Siatka\",\n    \"parallelogram\": \"Równoległobok\",\n    \"rounded\": \"Zaokrąglony\",\n    \"fit_content\": \"Dopasuj\",\n    \"pills\": \"Pigułki\",\n    \"heavy\": \"Gruby\",\n    \"thin\": \"Cienki\",\n    \"drawer\": \"Szuflada\",\n    \"preview\": \"Podgląd\",\n    \"text\": \"Tekst\",\n    \"video_uploaded\": \"Przesłane\",\n    \"video_external_url\": \"Zewnętrzny adres URL\",\n    \"up\": \"W górę\",\n    \"down\": \"W dół\",\n    \"gradient\": \"Gradient\",\n    \"fixed\": \"Stały\",\n    \"pixel\": \"Piksel\",\n    \"percent\": \"Procent\",\n    \"aspect_ratio\": \"Współczynnik proporcji\",\n    \"above_carousel\": \"Nad karuzelą\",\n    \"all\": \"Wszystkie\",\n    \"always\": \"Zawsze\",\n    \"arrows_large\": \"Duże strzałki\",\n    \"arrows\": \"Strzałki\",\n    \"balance\": \"Równowaga\",\n    \"bento\": \"bento\",\n    \"black\": \"Czarny\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Tekst podstawowy (duży)\",\n    \"body_regular\": \"Tekst podstawowy (zwykły)\",\n    \"body_small\": \"Tekst podstawowy (mały)\",\n    \"bold\": \"Pogrubiony\",\n    \"bottom_left\": \"Dół po lewej\",\n    \"bottom_right\": \"Dół po prawej\",\n    \"bottom\": \"Dół\",\n    \"capitalize\": \"Rozpoczynaj wielką literą\",\n    \"caret\": \"Daszek\",\n    \"carousel\": \"Karuzela\",\n    \"check_box\": \"Pole wyboru\",\n    \"chevron_large\": \"Duże szewrony\",\n    \"chevron\": \"Szewron\",\n    \"chevrons\": \"Szewrony\",\n    \"classic\": \"Klasyczny\",\n    \"collection_images\": \"Obrazy kolekcji\",\n    \"color\": \"Kolor\",\n    \"complementary\": \"Uzupełniający\",\n    \"dissolve\": \"Rozpuszczanie\",\n    \"dotted\": \"Kropkowany\",\n    \"editorial\": \"Edytorski\",\n    \"extra_large\": \"Bardzo duży\",\n    \"extra_small\": \"Bardzo mały\",\n    \"featured_collections\": \"Polecane kolekcje\",\n    \"featured_products\": \"Polecane produkty\",\n    \"font_primary\": \"Podstawowa\",\n    \"font_secondary\": \"Dodatkowa\",\n    \"font_tertiary\": \"Trzeciorzędna\",\n    \"forward\": \"Do przodu\",\n    \"full_screen\": \"Pełny ekran\",\n    \"heading_extra_large\": \"Nagłówek (bardzo duży)\",\n    \"heading_extra_small\": \"Nagłówek (bardzo mały)\",\n    \"heading_large\": \"Nagłówek (duży)\",\n    \"heading_regular\": \"Nagłówek (zwykły)\",\n    \"heading_small\": \"Nagłówek (mały)\",\n    \"icon\": \"Ikona\",\n    \"image\": \"Obraz\",\n    \"input\": \"Pole wprowadzania\",\n    \"inside_carousel\": \"Wewnątrz karuzeli\",\n    \"inverse_large\": \"Odwrotny duży\",\n    \"inverse\": \"Odwrotny\",\n    \"large_arrows\": \"Duże strzałki\",\n    \"large_chevrons\": \"Duże szewrony\",\n    \"left\": \"Lewo\",\n    \"light\": \"Lekki\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Luźny\",\n    \"media_first\": \"Multimedia jako pierwsze\",\n    \"media_second\": \"Multimedia jako drugie\",\n    \"modal\": \"Modalne\",\n    \"narrow\": \"Wąski\",\n    \"never\": \"Nigdy\",\n    \"next_to_carousel\": \"Obok karuzeli\",\n    \"normal\": \"Normalny\",\n    \"nowrap\": \"Bez zawijania\",\n    \"off_media\": \"Poza multimediami\",\n    \"on_media\": \"Na multimediach\",\n    \"on_scroll_up\": \"Przy przewijaniu w górę\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pigułka\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Ozdobny\",\n    \"price\": \"Cena\",\n    \"primary_style\": \"Styl podstawowy\",\n    \"rectangle\": \"Prostokąt\",\n    \"regular\": \"Zwykły\",\n    \"related\": \"Powiązane\",\n    \"reverse\": \"Odwrotnie\",\n    \"rich_text\": \"Tekst sformatowany\",\n    \"right\": \"Prawo\",\n    \"secondary_style\": \"Styl dodatkowy\",\n    \"semibold\": \"Półgruby\",\n    \"shaded\": \"Cieniowany\",\n    \"show_second_image\": \"Pokaż drugi obraz\",\n    \"single\": \"Pojedynczy\",\n    \"slide_left\": \"Przesuń w lewo\",\n    \"slide_up\": \"Przesuń w górę\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stos\",\n    \"text_only\": \"Tylko tekst\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniatury\",\n    \"tight\": \"Ciasny\",\n    \"top_left\": \"Góra po lewej\",\n    \"top_right\": \"Górny prawy\",\n    \"top\": \"Góra\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Podkreślenie\",\n    \"video\": \"Wideo\",\n    \"wide\": \"Szeroki\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"Akcent\",\n    \"below_image\": \"Pod obrazem\",\n    \"body\": \"Tekst podstawowy\",\n    \"button_primary\": \"Przycisk podstawowy\",\n    \"button_secondary\": \"Przycisk dodatkowy\",\n    \"compact\": \"Kompaktowy\",\n    \"crop_to_fit\": \"Przytnij, aby dopasować\",\n    \"hidden\": \"Ukryty\",\n    \"hint\": \"Wskazówka\",\n    \"maintain_aspect_ratio\": \"Zachowaj współczynnik proporcji\",\n    \"off\": \"Wyłączone\",\n    \"on_image\": \"Na obrazie\",\n    \"social_bluesky\": \"Społecznościowe: Bluesky\",\n    \"social_facebook\": \"Społecznościowe: Facebook\",\n    \"social_instagram\": \"Społecznościowe: Instagram\",\n    \"social_linkedin\": \"Społecznościowe: LinkedIn\",\n    \"social_pinterest\": \"Społecznościowe: Pinterest\",\n    \"social_snapchat\": \"Społecznościowe: Snapchat\",\n    \"social_spotify\": \"Społecznościowe: Spotify\",\n    \"social_threads\": \"Społecznościowe: Threads\",\n    \"social_tiktok\": \"Społecznościowe: TikTok\",\n    \"social_tumblr\": \"Społecznościowe: Tumblr\",\n    \"social_twitter\": \"Społecznościowe: X (Twitter)\",\n    \"social_whatsapp\": \"Społecznościowe: WhatsApp\",\n    \"social_vimeo\": \"Społecznościowe: Vimeo\",\n    \"social_youtube\": \"Społecznościowe: YouTube\",\n    \"spotlight\": \"Wyróżnienie\",\n    \"standard\": \"Standardowy\",\n    \"subheading\": \"Podtytuł\",\n    \"blur\": \"Rozmycie\",\n    \"lift\": \"Uniesienie\",\n    \"reveal\": \"Odsłonięcie\",\n    \"scale\": \"Skala\",\n    \"subtle_zoom\": \"Powiększenie\",\n    \"with_hints\": \"Z podpowiedziami\",\n    \"below_media\": \"Pod multimediami\",\n    \"full_frame\": \"Pełna klatka\",\n    \"icons\": \"Ikony\"\n  },\n  \"content\": {\n    \"background_video\": \"Wideo w tle\",\n    \"describe_the_video_for\": \"Opisz wideo dla klientów korzystających z czytników ekranu. [Dowiedz się więcej](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"Szerokość jest automatycznie optymalizowana pod kątem urządzeń mobilnych.\",\n    \"advanced\": \"Zaawansowane\",\n    \"background_image\": \"Zdjęcie tła\",\n    \"block_size\": \"Rozmiar bloku\",\n    \"borders\": \"Obramowania\",\n    \"section_size\": \"Rozmiar sekcji\",\n    \"slideshow_width\": \"Szerokość slajdu\",\n    \"typography\": \"Typografia\",\n    \"complementary_products\": \"Produkty uzupełniające należy skonfigurować za pomocą aplikacji Search & Discovery. [Dowiedz się więcej](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Kolumny zostaną automatycznie zoptymalizowane pod kątem urządzeń mobilnych.\",\n    \"content_width\": \"Szerokość treści ma zastosowanie tylko wtedy, gdy szerokość sekcji jest ustawiona na pełną szerokość.\",\n    \"responsive_font_sizes\": \"Rozmiary są automatycznie skalowane do wszystkich wielkości ekranu.\",\n    \"buttons\": \"Przyciski\",\n    \"swatches\": \"Próbki\",\n    \"variant_settings\": \"Ustawienia wariantów\",\n    \"background\": \"Tło\",\n    \"cards_layout\": \"Układ kart\",\n    \"section_layout\": \"Układ sekcji\",\n    \"mobile_size\": \"Rozmiar na urządzenia mobilne\",\n    \"appearance\": \"Wygląd\",\n    \"arrows\": \"Strzałki\",\n    \"body_size\": \"Rozmiar tekstu podstawowego\",\n    \"bottom_row_appearance\": \"Wygląd dolnego wiersza\",\n    \"carousel_navigation\": \"Nawigacja karuzeli\",\n    \"carousel_pagination\": \"Paginacja karuzeli\",\n    \"copyright\": \"Prawo autorskie\",\n    \"edit_logo_in_theme_settings\": \"Edytuj logo w [ustawieniach motywu](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Edytuj formatowanie cen w [ustawieniach motywu](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Edytuj styl wariantów w [ustawieniach motywu](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Rejestracje dodają [profile klientów](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Aby przycisk był widoczny, musi być zainstalowany kanał Shop i aktywowana usługa Shop Pay. [Dowiedz się więcej](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Czcionki\",\n    \"grid\": \"Siatka\",\n    \"heading_size\": \"Rozmiar nagłówka\",\n    \"image\": \"Obraz\",\n    \"input\": \"Pole wprowadzania\",\n    \"layout\": \"Układ\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Wypełnienie linku\",\n    \"localization\": \"Lokalizacja\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margines\",\n    \"media\": \"Multimedia\",\n    \"media_1\": \"Multimedia 1\",\n    \"media_2\": \"Multimedia 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Układ mobilny\",\n    \"padding\": \"Wypełnienie\",\n    \"padding_desktop\": \"Wypełnienie na komputery\",\n    \"paragraph\": \"Akapit\",\n    \"policies\": \"Polityki\",\n    \"popup\": \"Wyskakujące okienko\",\n    \"search\": \"Wyszukiwanie\",\n    \"size\": \"Rozmiar\",\n    \"social_media\": \"Media społecznościowe\",\n    \"submit_button\": \"Przycisk przesyłania\",\n    \"text_presets\": \"Ustawienia predefiniowane tekstu\",\n    \"transparent_background\": \"Przezroczyste tło\",\n    \"typography_primary\": \"Typografia podstawowa\",\n    \"typography_secondary\": \"Typografia dodatkowa\",\n    \"typography_tertiary\": \"Typografia trzeciorzędna\",\n    \"mobile_width\": \"Szerokość na urządzenia mobilne\",\n    \"width\": \"Szerokość\",\n    \"carousel\": \"Karuzela\",\n    \"colors\": \"Kolory\",\n    \"collection_page\": \"Strona kolekcji\",\n    \"customer_account\": \"Konto klienta\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Edytuj kolekcję pustego stanu w [ustawieniach motywu](/editor?context=theme&category=search)\",\n    \"home_page\": \"Strona główna\",\n    \"images\": \"Obrazy\",\n    \"inverse_logo_info\": \"Używane, gdy przezroczyste tło nagłówka jest ustawione na Odwrotne\",\n    \"manage_customer_accounts\": \"[Zarządzaj widocznością](/admin/settings/customer_accounts) w ustawieniach konta klienta. Starsze konta nie są obsługiwane.\",\n    \"manage_policies\": \"[Zarządzaj politykami](/admin/settings/legal)\",\n    \"product_page\": \"Strona produktu\",\n    \"text\": \"Tekst\",\n    \"thumbnails\": \"Miniatury\",\n    \"visibility\": \"Widoczność\",\n    \"visible_if_collection_has_more_products\": \"Widoczne, jeśli kolekcja ma więcej produktów niż jest wyświetlanych\",\n    \"grid_layout\": \"Układ siatki\",\n    \"app_required_for_ratings\": \"Do ocen produktów wymagana jest aplikacja. [Dowiedz się więcej](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ikona\",\n    \"manage_store_name\": \"[Zarządzaj nazwą sklepu](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Wyświetla kolekcję z sekcji nadrzędnej\",\n    \"resource_reference_collection_card_image\": \"Wyświetla obraz z kolekcji nadrzędnej\",\n    \"resource_reference_collection_title\": \"Wyświetla tytuł z kolekcji nadrzędnej\",\n    \"resource_reference_product\": \"Automatycznie łączy z produktem nadrzędnym\",\n    \"resource_reference_product_card\": \"Wyświetla produkt z sekcji nadrzędnej\",\n    \"resource_reference_product_inventory\": \"Wyświetla zapasy z produktu nadrzędnego\",\n    \"resource_reference_product_price\": \"Wyświetla cenę z produktu nadrzędnego\",\n    \"resource_reference_product_recommendations\": \"Wyświetla rekomendacje na podstawie produktu nadrzędnego\",\n    \"resource_reference_product_review\": \"Wyświetla recenzje z produktu nadrzędnego\",\n    \"resource_reference_product_swatches\": \"Wyświetla próbki z produktu nadrzędnego\",\n    \"resource_reference_product_title\": \"Wyświetla tytuł z produktu nadrzędnego\",\n    \"resource_reference_product_variant_picker\": \"Wyświetla warianty z produktu nadrzędnego\",\n    \"resource_reference_product_media\": \"Wyświetla multimedia z produktu nadrzędnego\",\n    \"product_media\": \"Multimedia produktu\",\n    \"section_link\": \"Link do sekcji\",\n    \"gift_card_form_description\": \"Klienci mogą wysyłać karty prezentowe na adres e-mail odbiorcy z osobistą wiadomością. [Dowiedz się więcej](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Nagłówek\",\n    \"resource_reference_product_custom_property\": \"Dodaj konfigurowalne pola wejściowe, aby zbierać niestandardowe informacje, które zostaną dodane do tej pozycji zamówienia i będą później widoczne w szczegółach zamówienia.\",\n    \"block_link\": \"Link do bloku\",\n    \"submenu_feature\": \"Funkcja podmenu\",\n    \"cart_features\": \"Funkcje koszyka\",\n    \"email_signup\": \"Subskrypcja e-mailowa\",\n    \"mobile_media\": \"Multimedia na urządzenia mobilne\",\n    \"mobile_media_2\": \"Multimedia 2 na urządzenia mobilne\",\n    \"navigation\": \"Nawigacja\",\n    \"popover\": \"Wyskakujące okienko\",\n    \"popover_position\": \"Pozycja wyskakującego okienka\",\n    \"resource_reference_product_sku\": \"Wyświetla SKU produktu nadrzędnego.\",\n    \"content_layout\": \"Układ treści\",\n    \"mobile_media_1\": \"Mobilne multimedia 1\",\n    \"utilities\": \"Narzędzia\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Podziel się informacjami o swojej marce z klientami. Opisz produkt, ogłaszaj nowości lub witaj klientów w swoim sklepie.</p>\",\n    \"bestseller_h2\": \"<h2>Bestsellery</h2>\",\n    \"bestseller_h3\": \"<h3>Bestsellery</h3>\",\n    \"bestseller\": \"<p>Bestseller</p>\",\n    \"build_better\": \"<p>Wierzymy w tworzenie lepszych rzeczy</p>\",\n    \"contact_us\": \"<h2>Skontaktuj się z nami</h2>\",\n    \"discover_bestsellers\": \"<p>Odkryj bestsellery, które podbiły serca naszych klientów dzięki doskonałemu połączeniu funkcjonalności i stylu.</p>\",\n    \"everythings_starts_with_why\": \"<p>Wszystko, co robimy, zaczyna się od pytania „dlaczego”</p>\",\n    \"explore_latest_products\": \"<p>Poznaj nasze najnowsze produkty.</p>\",\n    \"faq\": \"<h3>Często zadawane pytania</h3>\",\n    \"first_to_know\": \"<p>Bądź na bieżąco z nowymi kolekcjami i ofertami specjalnymi. </p>\",\n    \"free_returns\": \"<p>Bezpłatne zwroty w ciągu 30 dni</p>\",\n    \"free_shipping_over\": \"<p>Bezpłatna wysyłka powyżej 50 USD</p>\",\n    \"goal_for_every_customer\": \"<p>Naszym celem jest pełna satysfakcja każdego klienta z zakupu. Jeśli tak nie jest, daj nam znać, a my dołożymy wszelkich starań, aby to naprawić.</p>\",\n    \"home_to_shirts\": \"<p>Strona główna → Koszule</p>\",\n    \"intentional_design\": \"<h2>Przemyślany design</h2>\",\n    \"introducing_h2\": \"<h2><em>Przedstawiamy</em></h2>\",\n    \"latest_products\": \"<p>Przedstawiamy nasze najnowsze produkty, stworzone specjalnie na ten sezon. Kup swoje ulubione, zanim znikną!</p>\",\n    \"made_local_and_global\": \"<p>Nasze produkty są wytwarzane zarówno lokalnie, jak i globalnie. Starannie dobieramy naszych partnerów produkcyjnych, aby zapewnić wysoką jakość i uczciwą cenę naszych produktów.</p>\",\n    \"made_with_care_h2\": \"<h2>Wykonane z dbałością</h2>\",\n    \"made_with_care_extended\": \"<p>Wykonany z dbałością i bezwarunkowo uwielbiany przez naszych klientów, ten bestsellerowy produkt przekracza wszelkie oczekiwania.</p>\",\n    \"made_with_care\": \"<p>Wykonane z dbałością i bezwarunkowo uwielbiane przez naszych klientów.</p>\",\n    \"make_things_better_extended\": \"<p>Tworzymy rzeczy, które działają lepiej i służą dłużej. Nasze produkty rozwiązują realne problemy dzięki prostemu wzornictwu i uczciwym materiałom.</p>\",\n    \"make_things_better\": \"<p>Tworzymy rzeczy, które działają lepiej i służą dłużej.</p>\",\n    \"may_also_like\": \"<h4>Może Cię również zainteresować</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nowości</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nowości</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nowości</h3>\",\n    \"product_launch\": \"<p>Zobacz kulisy premiery naszego najnowszego produktu.</p>\",\n    \"product_story\": \"<p>U podstaw każdego produktu leży wyjątkowa historia, napędzana naszą pasją do jakości i innowacji. Każdy przedmiot wzbogaca Twoje codzienne życie i wywołuje radość.</p>\",\n    \"real_people\": \"<p>Prawdziwi ludzie tworzący wspaniałe produkty</p>\",\n    \"related_product\": \"<h3>Produkty powiązane</h3>\",\n    \"return_policy\": \"<h2>Jakie są zasady zwrotów?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 recenzji</p>\",\n    \"shipping_based_on_location\": \"<p>Wysyłka jest obliczana na podstawie Twojej lokalizacji i pozycji w zamówieniu. Zawsze poznasz cenę wysyłki przed dokonaniem zakupu.</p>\",\n    \"shop_by_collection\": \"<h3>Kupuj według kolekcji</h3>\",\n    \"signature_products\": \"<h2>Nasz sztandarowy produkt</h2>\",\n    \"styled_with\": \"<h3>Stylizowane z</h3>\",\n    \"subscribe\": \"<h2>Zasubskrybuj nasze e-maile</h2>\",\n    \"team_with_goal\": \"<h2>Zespół z celem</h2>\",\n    \"unable_to_accept_returns\": \"<p>Nie możemy przyjmować zwrotów niektórych produktów. Będą one starannie oznaczone przed zakupem.</p>\",\n    \"work_quickly_to_ship\": \"<p>Dołożymy wszelkich starań, aby jak najszybciej wysłać Twoje zamówienie. Po wysłaniu zamówienia otrzymasz e-mail z dalszymi informacjami. Czas dostawy zależy od Twojej lokalizacji.</p>\",\n    \"join_our_email_list\": \"<h2>Dołącz do naszej listy mailingowej</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Otrzymuj wyjątkowe oferty i wczesny dostęp do nowych produktów.</p>\",\n    \"artistry_in_action\": \"<p>Artyzm w akcji</p>\",\n    \"authentic_materials\": \"<p>Autentyczne materiały, bez kompromisów</p>\",\n    \"bold_style_recognizable\": \"<p>Odważny styl rozpoznawalny wszędzie</p>\",\n    \"discover_elevated_design\": \"<p>Odkryj wyjątkowe wzornictwo</p>\",\n    \"expert_construction_finish\": \"<p>Mistrzowska konstrukcja i nienaganne wykończenie</p>\",\n    \"made_to_last\": \"<p>Stworzone, by trwać</p>\",\n    \"pieces_better_with_time\": \"<p>Produkty, które zyskują z czasem i w trakcie użytkowania</p>\",\n    \"quality_you_can_feel\": \"<h2>Jakość, którą poczujesz</h2>\",\n    \"uncompromising_standards\": \"<p>Bezkompromisowe standardy</p>\",\n    \"featured_collection_h2\": \"<h2>Polecana kolekcja</h2>\",\n    \"shop_collection\": \"<p>Odkryj naszą kolekcję starannie wybranych produktów, które są połączeniem stylu i jakości.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"Wiersz zwijany\",\n    \"button_label\": \"Kup teraz\",\n    \"heading\": \"Nagłówek\",\n    \"email_signup_button_label\": \"Subskrybuj\",\n    \"accordion_heading\": \"Nagłówek akordeonu\",\n    \"contact_form_button_label\": \"Prześlij\",\n    \"popup_link\": \"Link w wyskakującym okienku\",\n    \"sign_up\": \"Zarejestruj się\",\n    \"welcome_to_our_store\": \"Witamy w naszym sklepie\",\n    \"be_bold\": \"Odwagi.\",\n    \"shop_our_latest_arrivals\": \"Kupuj nasze najnowsze produkty!\",\n    \"are_purchases_final_sale\": \"Czy którykolwiek z zakupów jest sprzedażą ostateczną?\",\n    \"care_instructions\": \"Instrukcje dotyczące pielęgnacji\",\n    \"cart\": \"Koszyk\",\n    \"discover_collection\": \"Odkryj kolekcję\",\n    \"fit\": \"dopasowanie\",\n    \"how_much_for_shipping\": \"Ile kosztuje wysyłka?\",\n    \"learn_more\": \"Dowiedz się więcej\",\n    \"manufacturing\": \"Produkcja\",\n    \"materials\": \"Materiały\",\n    \"return_policy\": \"Polityka zwrotów\",\n    \"shipping\": \"Wysyłka\",\n    \"shop_now_button_label\": \"Kup teraz\",\n    \"sign_up_button_label\": \"Zarejestruj się\",\n    \"submit_button_label\": \"Prześlij\",\n    \"up_the_ante\": \"Podbij\\nStawkę\",\n    \"view_all_button_label\": \"Wyświetl wszystko\",\n    \"what_is_return_policy\": \"Jaka jest polityka zwrotów?\",\n    \"when_will_order_arrive\": \"Kiedy otrzymam moje zamówienie?\",\n    \"where_are_products_made\": \"Gdzie są produkowane wasze produkty?\",\n    \"trending_now\": \"Popularne teraz\",\n    \"shop_the_look\": \"Kompletny look\",\n    \"bestsellers\": \"Bestsellery\",\n    \"featured_collection\": \"Polecana kolekcja\",\n    \"new_arrivals\": \"Nowości\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Opisz wideo dla użytkowników technologii wspomagających\",\n    \"video_autoplay\": \"Domyślnie filmy będą wyciszone\",\n    \"video_external\": \"Użyj adresu URL z YouTube lub Vimeo\",\n    \"carousel_layout_on_mobile\": \"Na urządzeniach mobilnych jest zawsze używana karuzela\",\n    \"carousel_hover_behavior_not_supported\": \"Efekt najechania myszą „Karuzela” nie jest obsługiwany, gdy na poziomie sekcji wybrano typ „Karuzela”\",\n    \"checkout_buttons\": \"Pozwala kupującym szybciej realizować zakupy i może poprawić konwersję. [Dowiedz się więcej](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Niestandardowy nagłówek\",\n    \"edit_presets_in_theme_settings\": \"Edytuj ustawienia predefiniowane w [ustawieniach motywu](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Dostosuj filtry za pomocą [aplikacji Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Na urządzeniach mobilnych używany jest układ siatki\",\n    \"logo_font\": \"Ma zastosowanie tylko wtedy, gdy nie wybrano logo\",\n    \"manage_countries_regions\": \"[Zarządzaj krajami/regionami](/admin/settings/markets)\",\n    \"manage_languages\": \"[Zarządzaj językami](/admin/settings/languages)\",\n    \"transparent_background\": \"Sprawdź każdy szablon, w którym zastosowano przezroczyste tło, pod kątem czytelności\",\n    \"aspect_ratio_adjusted\": \"Dostosowywane w niektórych układach\",\n    \"custom_liquid\": \"Dodaj fragmenty kodu aplikacji lub inny kod, aby tworzyć zaawansowane dostosowania. [Dowiedz się więcej](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"Dotyczy tylko obrazów\",\n    \"hover_effects\": \"Dotyczy kart produktów i kolekcji\",\n    \"pills_usage\": \"Używane w przypadku zastosowanych filtrów, kodów rabatowych i sugestii wyszukiwania\",\n    \"hide_logo_on_home_page_help\": \"Logo pozostanie widoczne, gdy aktywny jest lepki nagłówek\",\n    \"media_type_info\": \"Funkcje są pobierane z linków menu\",\n    \"logo_height\": \"Dotyczy tylko logo w nagłówku\",\n    \"actions_display_style\": \"Na urządzeniach mobilnych zawsze używane są ikony\"\n  },\n  \"categories\": {\n    \"product_list\": \"Polecana kolekcja\",\n    \"basic\": \"Podstawowe\",\n    \"collection\": \"Kolekcja\",\n    \"collection_list\": \"Lista kolekcji\",\n    \"footer\": \"Stopka\",\n    \"forms\": \"Formularze\",\n    \"header\": \"Nagłówek\",\n    \"layout\": \"Układ\",\n    \"links\": \"Linki\",\n    \"product\": \"Produkt\",\n    \"banners\": \"Banery\",\n    \"collections\": \"Kolekcje\",\n    \"custom\": \"Niestandardowe\",\n    \"decorative\": \"Dekoracyjne\",\n    \"products\": \"Produkty\",\n    \"other_sections\": \"Inne\",\n    \"storytelling\": \"Narracja\",\n    \"text\": \"Tekst\"\n  }\n}\n"
  },
  {
    "path": "locales/pt-BR.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Carregar vídeo: {{ description }}\",\n    \"sold_out\": \"Esgotado\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"E-mail\",\n      \"success\": \"Obrigado por se inscrever!\"\n    },\n    \"filter\": \"Filtrar\",\n    \"payment_methods\": \"Formas de pagamento\",\n    \"contact_form\": {\n      \"name\": \"Nome\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefone\",\n      \"comment\": \"Comentário\",\n      \"post_success\": \"Agradecemos seu contato. Retornaremos o mais rápido possível.\",\n      \"error_heading\": \"Ajuste o seguinte:\"\n    },\n    \"slider_label\": \"Controle deslizante\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Reproduzir modelo 3D\",\n    \"play_video\": \"Reproduzir vídeo\",\n    \"unit_price\": \"Preço unitário\",\n    \"country_results_count\": \"{{ count }} resultados\",\n    \"slideshow_pause\": \"Pausar apresentação de slides\",\n    \"slideshow_play\": \"Reproduzir apresentação de slides\",\n    \"remove_item\": \"Remover {{ title}}\",\n    \"skip_to_text\": \"Pular para o conteúdo\",\n    \"skip_to_product_info\": \"Pular para as informações do produto\",\n    \"skip_to_results_list\": \"Ir para a lista de resultados\",\n    \"new_window\": \"Abre em uma nova janela.\",\n    \"close_dialog\": \"Fechar caixa de diálogo\",\n    \"reset_search\": \"Reinicializar pesquisa\",\n    \"search_results_count\": \"{{ count }} resultados de pesquisa encontrados para \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Não encontramos resultados para \\\"{{ query }}\\\"\",\n    \"slideshow_next\": \"Próximo slide\",\n    \"slideshow_previous\": \"Slide anterior\",\n    \"filters\": \"Filtros\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtro aplicado\",\n      \"other\": \"{{ count }} filtros aplicados\",\n      \"many\": \"{{ count }} filtros aplicados\"\n    },\n    \"account\": \"Conta\",\n    \"cart\": \"Carrinho\",\n    \"cart_count\": \"Total de itens no carrinho\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"País/Região\",\n    \"slide_status\": \"Slide {{ index }} de {{ length }}\",\n    \"scroll_to\": \"Rolar até {{ title }}\",\n    \"loading_product_recommendations\": \"Carregando recomendações de produtos\",\n    \"discount\": \"Aplicar um código de desconto\",\n    \"discount_menu\": \"Códigos de desconto\",\n    \"discount_applied\": \"Código de desconto aplicado: {{ code }}\",\n    \"inventory_status\": \"Status do estoque\",\n    \"pause_video\": \"Pausar o vídeo\",\n    \"find_country\": \"Localizar o país\",\n    \"localization_region_and_language\": \"Seletor de região e idioma\",\n    \"decrease_quantity\": \"Diminuir a quantidade\",\n    \"increase_quantity\": \"Aumentar a quantidade\",\n    \"rating\": \"A classificação deste produto é {{ rating }} de 5\",\n    \"quantity\": \"Quantidade\",\n    \"nested_product\": \"{{ product_title }} para {{ parent_title }}\",\n    \"remove\": \"Remover\",\n    \"view_pricing_info\": \"Ver informações sobre preços\",\n    \"open_hotspot\": \"Abrir hotspot\",\n    \"slideshow\": \"Apresentação de slides\",\n    \"header_navigation_label\": \"Principal\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Adicionar ao carrinho\",\n    \"clear_all\": \"Limpar tudo\",\n    \"remove\": \"Remover\",\n    \"view_in_your_space\": \"Ver em seu espaço\",\n    \"show_filters\": \"Filtrar\",\n    \"clear\": \"Limpar\",\n    \"continue_shopping\": \"Voltar à loja\",\n    \"log_in_html\": \"Já tem conta? <a href=\\\"{{ link }}\\\">Faça login</a> para finalizar a compra mais rápido.\",\n    \"see_items\": {\n      \"one\": \"Ver {{ count }} item\",\n      \"other\": \"Ver {{ count }} itens\",\n      \"many\": \"Ver {{ count }} itens\"\n    },\n    \"view_all\": \"Ver tudo\",\n    \"add\": \"Adicionar\",\n    \"choose\": \"Escolher\",\n    \"added\": \"Adicionado\",\n    \"show_less\": \"Exibir menos\",\n    \"show_more\": \"Exibir mais\",\n    \"close\": \"Fechar\",\n    \"more\": \"Mais\",\n    \"reset\": \"Restaurar\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Fechar caixa de diálogo\",\n    \"back\": \"Voltar\",\n    \"log_in\": \"Fazer login\",\n    \"log_out\": \"Sair\",\n    \"remove_discount\": \"Remover desconto {{ code }}\",\n    \"enter_using_password\": \"Entrar usando a senha\",\n    \"submit\": \"Enviar\",\n    \"enter_password\": \"Insira a senha\",\n    \"view_store_information\": \"Ver as informações da loja\",\n    \"apply\": \"Aplicar\",\n    \"sign_in_options\": \"Outras opções de login\",\n    \"sign_up\": \"Criar conta\",\n    \"open_image_in_full_screen\": \"Abrir imagem em tela cheia\",\n    \"sort\": \"Classificar\",\n    \"show_all_options\": \"Mostrar todas as opções\",\n    \"open\": \"Abrir\"\n  },\n  \"content\": {\n    \"reviews\": \"avaliações\",\n    \"language\": \"Idioma\",\n    \"localization_region_and_language\": \"Região e idioma\",\n    \"no_results_found\": \"Nenhum resultado encontrado\",\n    \"cart_total\": \"Total do carrinho\",\n    \"your_cart_is_empty\": \"O carrinho está vazio\",\n    \"cart_estimated_total\": \"Total estimado\",\n    \"seller_note\": \"Instruções especiais\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Descontos\",\n    \"discount\": \"Desconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Tributos de importação e outros tributos incluídos. Descontos e <a href=\\\"{{ link }}\\\">frete</a> calculados no checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Tributos de importação e outros tributos incluídos. Descontos e frete calculados no checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Tributos incluídos. Descontos e <a href=\\\"{{ link }}\\\">frete</a> calculados no checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Tributos incluídos. Descontos e frete calculados no checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Tributos de importação incluídos. Tributos, descontos e <a href=\\\"{{ link }}\\\">frete</a> calculados no checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Tributos de importação incluídos. Tributos, descontos e frete calculados no checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Tributos, descontos e <a href=\\\"{{ link }}\\\">frete</a> calculados no checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Tributos, descontos e frete calculados no checkout.\",\n    \"checkout\": \"Finalizar a compra\",\n    \"cart_title\": \"Cart\",\n    \"product_image\": \"Imagem do produto\",\n    \"product_information\": \"Informações do produto\",\n    \"product_total\": \"Total de produtos\",\n    \"quantity\": \"Quantidade\",\n    \"price\": \"Preço\",\n    \"price_regular\": \"Preço normal\",\n    \"price_compare_at\": \"Comparação de preços\",\n    \"price_sale\": \"Preço promocional\",\n    \"duties_and_taxes_included\": \"Tributos de importação e outros tributos incluídos.\",\n    \"duties_included\": \"Tributos de importação incluídos.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Frete</a> calculado no checkout.\",\n    \"taxes_included\": \"Tributos incluídos.\",\n    \"product_badge_sold_out\": \"Esgotado\",\n    \"product_badge_sale\": \"Promoção\",\n    \"search_input_label\": \"Pesquisa\",\n    \"search_input_placeholder\": \"Pesquisa\",\n    \"search_results\": \"Resultados da pesquisa\",\n    \"search_results_label\": \"Resultados da pesquisa\",\n    \"search_results_no_results\": \"Sem resultado para \\\"{{ terms }}\\\". Tente outra pesquisa.\",\n    \"search_results_resource_articles\": \"Posts do blog\",\n    \"search_results_resource_collections\": \"Coleções\",\n    \"search_results_resource_pages\": \"Páginas\",\n    \"search_results_resource_products\": \"Produtos\",\n    \"search_results_resource_queries\": \"Sugestões de pesquisa\",\n    \"search_results_view_all\": \"Ver tudo\",\n    \"search_results_view_all_button\": \"Ver tudo\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produto\",\n      \"other\": \"{{ count }} produtos\",\n      \"many\": \"{{ count }} produtos\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Padrão\",\n      \"grid_fieldset\": \"Grade da coluna\",\n      \"single_item\": \"Único\",\n      \"zoom_out\": \"Menos zoom\"\n    },\n    \"unavailable\": \"Indisponível\",\n    \"collection_placeholder\": \"Título da coleção\",\n    \"product_card_placeholder\": \"Título do produto\",\n    \"recently_viewed_products\": \"Visto recentemente\",\n    \"product_count\": \"Contagem de produtos\",\n    \"item_count\": {\n      \"one\": \"{{ count }} item\",\n      \"other\": \"{{ count }} itens\",\n      \"many\": \"{{ count }} itens\"\n    },\n    \"errors\": \"Erros\",\n    \"search\": \"Pesquisa\",\n    \"search_results_no_results_check_spelling\": \"Sem resultado para \\\"{{ terms }}\\\". Verifique a ortografia ou use uma palavra ou frase diferente.\",\n    \"featured_products\": \"Produtos em destaque\",\n    \"no_products_found\": \"Nenhum produto encontrado.\",\n    \"price_from\": \"A partir de {{ price }}\",\n    \"use_fewer_filters_html\": \"Tente usar menos filtros ou <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">limpar tudo</a>.\",\n    \"filters\": \"Filtros\",\n    \"price_filter_html\": \"O maior preço é {{ price }}\",\n    \"read_more\": \"Leia mais...\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Conta\",\n    \"account_title_personalized\": \"Olá, {{ first_name }}\",\n    \"account_orders\": \"Pedidos\",\n    \"account_profile\": \"Perfil\",\n    \"discount_code\": \"Código de desconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Tributos de importação e outros tributos incluídos. Frete calculado no checkout.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Tributos de importação e outros tributos incluídos. Frete calculado no checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Tributos de importação incluídos. Frete calculado no checkout.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Tributos de importação incluídos. Frete calculado no checkout.\",\n    \"pickup_available_at_html\": \"Retirada disponível em <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Retirada disponível às {{ pickup_time }}\",\n    \"pickup_not_available\": \"Retirada indisponível no momento\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Tributos e <a href=\\\"{{ link }}\\\">frete</a> calculados no checkout.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Tributos e frete calculados no checkout.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Tributos incluídos. Frete calculado no checkout.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Tributos incluídos. Frete calculado no checkout.\",\n    \"wrong_password\": \"Senha incorreta\",\n    \"view_more_details\": \"Ver mais informações\",\n    \"page_placeholder_title\": \"Título da página\",\n    \"page_placeholder_content\": \"Selecione uma página para exibir o conteúdo.\",\n    \"placeholder_image\": \"Imagem do marcador de posição\",\n    \"inventory_low_stock\": \"Estoque baixo\",\n    \"inventory_in_stock\": \"Em estoque\",\n    \"inventory_out_of_stock\": \"Sem estoque\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Tempo restante: {{ count }}\",\n      \"other\": \"Tempo restante: {{ count }}\",\n      \"many\": \"Tempo restante: {{ count }}\"\n    },\n    \"powered_by\": \"Esta loja terá a tecnologia da\",\n    \"store_owner_link_html\": \"Você é titular da loja? <a href=\\\"{{ link }}\\\">Faça login aqui</a>\",\n    \"shipping_discount_error\": \"Os descontos no frete são exibidos no checkout após a adição de um endereço.\",\n    \"discount_code_error\": \"O código de desconto não pode ser aplicado ao seu carrinho.\",\n    \"shipping_policy\": \"Frete calculado no checkout.\",\n    \"recipient_form_send_to\": \"Enviar para\",\n    \"recipient_form_email_label\": \"E-mail do destinatário\",\n    \"recipient_form_email_label_my_email\": \"Meu e-mail\",\n    \"recipient_form_email_address\": \"Endereço de e-mail do destinatário\",\n    \"recipient_form_name_label\": \"Nome do destinatário (opcional)\",\n    \"recipient_form_message\": \"Mensagem (opcional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} caracteres usados\",\n    \"recipient_form_send_on\": \"DD/MM/AAAA\",\n    \"recipient_form_send_on_label\": \"Enviar em (opcional)\",\n    \"recipient_form_fields_visible\": \"Os campos do formulário do destinatário agora estão visíveis\",\n    \"recipient_form_fields_hidden\": \"Os campos do formulário do destinatário agora estão ocultos\",\n    \"recipient_form_error\": \"Houve um erro com o envio do formulário\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} caracteres usados\",\n    \"terms_and_policies\": \"Termos e políticas\",\n    \"pagination\": {\n      \"nav_label\": \"Navegação por paginação\",\n      \"previous\": \"Anterior\",\n      \"next\": \"Próxima\",\n      \"page\": \"Página {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Os preços por volume estão disponíveis\",\n    \"volume_pricing\": \"Preços por volume\",\n    \"at_price_each\": \"{{ price }}/cada\",\n    \"each\": \"{{ price }}/cada\",\n    \"each_abbreviation\": \"cada\",\n    \"price_at\": \"em\",\n    \"price_range\": \"Faixa de preço\",\n    \"item_count_cutoff\": \"Mais de {{ count }} itens\",\n    \"cancel\": \"Cancelar\",\n    \"product_subtotal\": \"Subtotal do produto\",\n    \"quantity_per_item\": \"/cada\",\n    \"remove_all\": \"Remover tudo\",\n    \"remove_all_items_confirmation\": \"Remover todos os {{ count }} itens do carrinho?\",\n    \"remove_one_item_confirmation\": \"Remover 1 item do carrinho?\",\n    \"total_items\": \"Total de itens\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Total das variantes\",\n    \"view_cart\": \"Ver carrinho\",\n    \"your_cart\": \"Seu carrinho\",\n    \"items_added_to_cart\": {\n      \"one\": \"Foi adicionado 1 item ao carrinho\",\n      \"other\": \"{{ count }} itens adicionados ao carrinho\",\n      \"many\": \"{{ count }} itens adicionados ao carrinho\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Use o código do cartão-presente online ou o código QR na loja\",\n      \"title\": \"O saldo no cartão-presente da loja {{ shop }} é de {{ value }}.\",\n      \"subtext\": \"Seu cartão-presente\",\n      \"shop_link\": \"Visitar loja virtual\",\n      \"add_to_apple_wallet\": \"Adicionar ao app Wallet da Apple\",\n      \"qr_image_alt\": \"Código QR (faça a leitura para resgatar o cartão-presente)\",\n      \"copy_code\": \"Copiar código do cartão-presente\",\n      \"expiration_date\": \"Expira em {{ expires_on }}\",\n      \"copy_code_success\": \"Código copiado\",\n      \"expired\": \"Vencido\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Senha\",\n    \"search\": \"Pesquisa\",\n    \"product_title\": \"Título do produto\",\n    \"collection_title\": \"Título da coleção\",\n    \"blog_posts\": \"Posts do blog\",\n    \"blog_post_title\": \"Título\",\n    \"blog_post_author\": \"Autoria\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Um resumo do conteúdo do seu post no blog\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Adicionar ao carrinho\",\n      \"added_to_cart\": \"Adicionado ao carrinho\",\n      \"adding_to_cart\": \"Adicionando...\",\n      \"add_to_cart_error\": \"Erro ao adicionar ao carrinho\",\n      \"sold_out\": \"Esgotado\",\n      \"unavailable\": \"Indisponível\",\n      \"quantity_error_max\": \"Este item apresenta um máximo de {{ maximum }}\",\n      \"quantity\": \"Quantidade\",\n      \"quantity_increments\": \"Incrementos de {{ increment }}\",\n      \"quantity_minimum\": \"Mínimo de {{ minimum }}\",\n      \"quantity_maximum\": \"Máximo de {{ maximum }}\",\n      \"in_cart\": \"no carrinho\",\n      \"default_title\": \"Título padrão\",\n      \"sticky_add_to_cart\": \"Barra de adição rápida ao carrinho\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"para\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} comentário\",\n        \"other\": \"{{ count }} comentários\",\n        \"many\": \"{{ count }} comentários\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"O comentário não foi publicado. Faça o seguinte:\",\n      \"heading\": \"Deixe um comentário\",\n      \"message\": \"Mensagem\",\n      \"moderated\": \"Os comentários precisam ser aprovados antes da publicação.\",\n      \"name\": \"Nome\",\n      \"post\": \"Publicar comentário\",\n      \"success_moderated\": \"O comentário foi publicado, aguardando moderação\",\n      \"success\": \"Comentário publicado\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/pt-BR.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Bordas\",\n    \"collapsible_row\": \"Linha recolhível\",\n    \"colors\": \"Cores\",\n    \"custom_section\": \"Seção personalizada\",\n    \"icon\": \"Ícone\",\n    \"logo_and_favicon\": \"Logo e favicon\",\n    \"overlapping_blocks\": \"Blocos sobrepostos\",\n    \"product_buy_buttons\": \"Botões de compra\",\n    \"product_description\": \"Descrição\",\n    \"product_price\": \"Preço\",\n    \"product_variant_picker\": \"Seletor de variantes\",\n    \"slideshow\": \"Apresentação de slides\",\n    \"typography\": \"Tipografia\",\n    \"video\": \"Vídeo\",\n    \"slideshow_controls\": \"Controles da apresentação de slides\",\n    \"size\": \"Tamanho\",\n    \"spacing\": \"Espaçamento\",\n    \"product_recommendations\": \"Produtos recomendados\",\n    \"product_media\": \"Mídia do produto\",\n    \"featured_collection\": \"Coleção em destaque\",\n    \"add_to_cart\": \"Adicionar ao carrinho\",\n    \"email_signup\": \"Inscrição por e-mail\",\n    \"submit_button\": \"Botão de envio\",\n    \"grid_layout_selector\": \"Seletor de layout em grade\",\n    \"image\": \"Imagem\",\n    \"list_items\": \"Itens da lista\",\n    \"facets\": \"Filtros\",\n    \"variants\": \"Variantes\",\n    \"product_cards\": \"Cartões de produto\",\n    \"styles\": \"Estilos\",\n    \"buttons\": \"Botões\",\n    \"inputs\": \"Campos\",\n    \"primary_button\": \"Botão primário\",\n    \"secondary_button\": \"Botão secundário\",\n    \"popovers_and_modals\": \"Pop-overs e janelas modais\",\n    \"marquee\": \"Marca de seleção\",\n    \"alternating_content_rows\": \"Linhas alternadas\",\n    \"pull_quote\": \"Citação em destaque\",\n    \"contact_form\": \"Formulário de contato\",\n    \"featured_product\": \"Destaque do produto\",\n    \"icons_with_text\": \"Ícones com texto\",\n    \"accelerated_checkout\": \"Checkout acelerado\",\n    \"accordion\": \"Seção expansível\",\n    \"accordion_row\": \"Linha da seção expansível\",\n    \"animations\": \"Animações\",\n    \"announcement\": \"Anúncio\",\n    \"announcement_bar\": \"Barra de anúncios\",\n    \"badges\": \"Selos\",\n    \"button\": \"Botão\",\n    \"cart\": \"Carrinho\",\n    \"cart_items\": \"Itens do carrinho\",\n    \"cart_products\": \"Produtos do carrinho\",\n    \"cart_title\": \"Carrinho\",\n    \"collection\": \"Coleção\",\n    \"collection_card\": \"Cartão da coleção\",\n    \"collection_columns\": \"Colunas da coleção\",\n    \"collection_container\": \"Coleção\",\n    \"collection_description\": \"Descrição da coleção\",\n    \"collection_image\": \"Imagem da coleção\",\n    \"collection_info\": \"Informações da coleção\",\n    \"collection_list\": \"Lista de coleções\",\n    \"collections\": \"Coleções\",\n    \"content\": \"Conteúdo\",\n    \"content_grid\": \"Grade de conteúdo\",\n    \"details\": \"Detalhes\",\n    \"divider\": \"Divisor\",\n    \"filters\": \"Filtragem e classificação\",\n    \"follow_on_shop\": \"Seguir no Shop\",\n    \"footer\": \"Rodapé\",\n    \"footer_utilities\": \"Utilitários do rodapé\",\n    \"group\": \"Grupo\",\n    \"header\": \"Cabeçalho\",\n    \"heading\": \"Título\",\n    \"icons\": \"Ícones\",\n    \"image_with_text\": \"Imagem com texto\",\n    \"input\": \"Campo\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Grade de revista\",\n    \"media\": \"Mídia\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout para celular\",\n    \"payment_icons\": \"Ícones de pagamento\",\n    \"popup_link\": \"Link de pop-up\",\n    \"predictive_search\": \"Pop-over de pesquisa\",\n    \"predictive_search_empty\": \"Pesquisa preditiva vazia\",\n    \"price\": \"Preço\",\n    \"product\": \"Produto\",\n    \"product_card\": \"Cartão do produto\",\n    \"product_card_media\": \"Mídia\",\n    \"product_card_rendering\": \"Renderização do cartão do produto\",\n    \"product_grid\": \"Grade\",\n    \"product_grid_main\": \"Grade de produtos\",\n    \"product_image\": \"Imagem do produto\",\n    \"product_information\": \"Informações do produto\",\n    \"product_list\": \"Coleção em destaque\",\n    \"product_review_stars\": \"Estrelas de avaliação\",\n    \"quantity\": \"Quantidade\",\n    \"row\": \"Linha\",\n    \"search\": \"Pesquisa\",\n    \"section\": \"Seção\",\n    \"selected_variants\": \"Variantes selecionadas\",\n    \"slide\": \"Slide\",\n    \"social_media_links\": \"Links de redes sociais\",\n    \"spacer\": \"Espaçador\",\n    \"steps\": \"Etapas\",\n    \"summary\": \"Resumo\",\n    \"swatches\": \"Swatches\",\n    \"testimonials\": \"Depoimentos\",\n    \"text\": \"Texto\",\n    \"title\": \"Título\",\n    \"utilities\": \"Utilitários\",\n    \"search_input\": \"Campo de pesquisa\",\n    \"search_results\": \"Resultados da pesquisa\",\n    \"read_only\": \"Somente leitura\",\n    \"collection_title\": \"Título da coleção\",\n    \"collections_bento\": \"Lista de coleções: Bento\",\n    \"faq_section\": \"Perguntas frequentes\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Texto jumbo\",\n    \"view_all_button\": \"Ver tudo\",\n    \"video_section\": \"Vídeo\",\n    \"blog\": \"Blog\",\n    \"blog_posts\": \"Posts do blog\",\n    \"custom_liquid\": \"Liquid personalizado\",\n    \"blog_post\": \"Post do blog\",\n    \"caption\": \"Legenda\",\n    \"collection_card_image\": \"Imagem\",\n    \"collection_links\": \"Links da coleção\",\n    \"collection_links_spotlight\": \"Links da coleção: Destaque\",\n    \"collection_links_text\": \"Links da coleção: Texto\",\n    \"collections_carousel\": \"Lista de coleções: Carrossel\",\n    \"collections_editorial\": \"Lista de coleções: Editorial\",\n    \"collections_grid\": \"Lista de coleções: Grade\",\n    \"copyright\": \"Direitos autorais\",\n    \"count\": \"Contagem\",\n    \"divider_section\": \"Divisor\",\n    \"drawers\": \"Gavetas\",\n    \"editorial\": \"Editorial\",\n    \"editorial_jumbo_text\": \"Editorial: Texto jumbo\",\n    \"hero_marquee\": \"Hero: Marca de seleção\",\n    \"input_fields\": \"Campos de entrada\",\n    \"local_pickup\": \"Retirada no local\",\n    \"marquee_section\": \"Marca de seleção\",\n    \"media_with_text\": \"Mídia com texto\",\n    \"page\": \"Página\",\n    \"page_content\": \"Conteúdo\",\n    \"page_layout\": \"Layout da página\",\n    \"policy_list\": \"Links de políticas\",\n    \"prices\": \"Preços\",\n    \"products_carousel\": \"Coleção em destaque: Carrossel\",\n    \"products_editorial\": \"Coleção em destaque: Editorial\",\n    \"products_grid\": \"Coleção em destaque: Grade\",\n    \"social_link\": \"Link de rede social\",\n    \"split_showcase\": \"Vitrine dividida\",\n    \"variant_pickers\": \"Seletores de variantes\",\n    \"pills\": \"Pílulas\",\n    \"product_title\": \"Título do produto\",\n    \"large_logo\": \"Logo grande\",\n    \"product_list_button\": \"Botão Ver tudo\",\n    \"product_inventory\": \"Estoque do produto\",\n    \"description\": \"Descrição\",\n    \"featured_image\": \"Imagem em destaque\",\n    \"multicolumn\": \"Várias colunas\",\n    \"rich_text_section\": \"Rich text\",\n    \"product_custom_property\": \"Instruções especiais\",\n    \"hero_bottom_aligned\": \"Hero: Alinhado na parte inferior\",\n    \"blog_card\": \"Cartão do blog\",\n    \"blog_posts_grid\": \"Posts do blog: Grade\",\n    \"blog_posts_carousel\": \"Posts do blog: Carrossel\",\n    \"blog_posts_editorial\": \"Posts do blog: Editorial\",\n    \"excerpt\": \"Trecho\",\n    \"footer_password\": \"Rodapé da senha\",\n    \"policies_and_links\": \"Políticas e links\",\n    \"card\": \"Cartão\",\n    \"carousel\": \"Carrossel\",\n    \"carousel_content\": \"Conteúdo do carrossel\",\n    \"quick_order_list\": \"Lista de pedidos rápidos\",\n    \"column\": \"Coluna\",\n    \"comparison_slider\": \"Slider de comparação\",\n    \"slideshow_full_frame\": \"Apresentação de slides: Tela cheia\",\n    \"slideshow_inset\": \"Apresentação de slides: Recuado\",\n    \"image_compare\": \"Comparação de imagem\",\n    \"subheading\": \"Subtítulo\",\n    \"featured_product_information\": \"Produto em destaque\",\n    \"product_hotspots\": \"Hotspots do produto\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Apresentação de slides em camadas\"\n  },\n  \"settings\": {\n    \"alignment\": \"Alinhamento\",\n    \"autoplay\": \"Reprodução automática\",\n    \"background\": \"Plano de fundo\",\n    \"border_radius\": \"Raio do canto\",\n    \"border_width\": \"Espessura da borda\",\n    \"borders\": \"Bordas\",\n    \"bottom_padding\": \"Preenchimento inferior\",\n    \"button\": \"Botão\",\n    \"color\": \"Cor\",\n    \"colors\": \"Cores\",\n    \"content_alignment\": \"Alinhamento do conteúdo\",\n    \"content_direction\": \"Direção do conteúdo\",\n    \"content_position\": \"Posição do conteúdo\",\n    \"cover_image_size\": \"Tamanho da imagem de capa\",\n    \"cover_image\": \"Imagem de capa\",\n    \"custom_minimum_height\": \"Altura mínima personalizada\",\n    \"custom_width\": \"Largura personalizada\",\n    \"enable_video_looping\": \"Loop do vídeo\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"Família de fontes\",\n    \"gap\": \"Espaçamento\",\n    \"geometric_translate_y\": \"Translação geométrica Y\",\n    \"heading\": \"Título\",\n    \"icon\": \"Ícone\",\n    \"image\": \"Imagem\",\n    \"image_icon\": \"Ícone de imagem\",\n    \"image_opacity\": \"Opacidade da imagem\",\n    \"image_position\": \"Posição da imagem\",\n    \"image_ratio\": \"Proporção da imagem\",\n    \"label\": \"Etiqueta\",\n    \"line_height\": \"Altura da linha\",\n    \"link\": \"Link\",\n    \"layout_gap\": \"Espaçamento do layout\",\n    \"make_section_full_width\": \"Deixar a seção com largura total\",\n    \"minimum_height\": \"Altura mínima\",\n    \"opacity\": \"Opacidade\",\n    \"overlay_opacity\": \"Opacidade da sobreposição\",\n    \"padding\": \"Preenchimento\",\n    \"primary_color\": \"Links\",\n    \"product\": \"Produto\",\n    \"section_width\": \"Largura da seção\",\n    \"size\": \"Tamanho\",\n    \"slide_spacing\": \"Espaçamento do slide\",\n    \"slide_width\": \"Largura do slide\",\n    \"slideshow_fullwidth\": \"Slides em largura total\",\n    \"style\": \"Estilo\",\n    \"text\": \"Texto\",\n    \"text_case\": \"Caixa\",\n    \"top_padding\": \"Preenchimento superior\",\n    \"video\": \"Vídeo\",\n    \"video_alt_text\": \"Texto alternativo\",\n    \"video_loop\": \"Repetir vídeo em loop\",\n    \"video_position\": \"Posição do vídeo\",\n    \"width\": \"Largura\",\n    \"z_index\": \"Índice Z\",\n    \"limit_content_width\": \"Limitar largura do conteúdo\",\n    \"color_scheme\": \"Esquema de cores\",\n    \"inherit_color_scheme\": \"Herdar esquema de cores\",\n    \"product_count\": \"Contagem de produtos\",\n    \"product_type\": \"Tipo de produto\",\n    \"content_width\": \"Largura do conteúdo\",\n    \"collection\": \"Coleção\",\n    \"enable_sticky_content\": \"Conteúdo fixo no desktop\",\n    \"error_color\": \"Erro\",\n    \"success_color\": \"Sucesso\",\n    \"primary_font\": \"Fonte primária\",\n    \"secondary_font\": \"Fonte secundária\",\n    \"tertiary_font\": \"Fonte terciária\",\n    \"columns\": \"Colunas\",\n    \"items_to_show\": \"Itens a serem exibidos\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Tipo\",\n    \"show_grid_layout_selector\": \"Exibir seletor de layout de grade\",\n    \"view_more_show\": \"Exibir botão Ver mais\",\n    \"image_gap\": \"Espaçamento da imagem\",\n    \"width_desktop\": \"Largura no desktop\",\n    \"width_mobile\": \"Largura no celular\",\n    \"border_style\": \"Estilo da borda\",\n    \"height\": \"Altura\",\n    \"thickness\": \"Espessura\",\n    \"stroke\": \"Traço\",\n    \"filter_style\": \"Estilo do filtro\",\n    \"swatches\": \"Amostras\",\n    \"quick_add_colors\": \"Cores da adição rápida\",\n    \"divider_color\": \"Divisor\",\n    \"border_opacity\": \"Opacidade da borda\",\n    \"hover_background\": \"Plano de fundo ao passar o mouse\",\n    \"hover_borders\": \"Bordas ao passar o mouse\",\n    \"hover_text\": \"Texto ao passar o mouse\",\n    \"primary_hover_color\": \"Links ao passar o mouse\",\n    \"primary_button_text\": \"Texto do botão primário\",\n    \"primary_button_background\": \"Plano de fundo do botão primário\",\n    \"primary_button_border\": \"Borda do botão primário\",\n    \"secondary_button_text\": \"Texto do botão secundário\",\n    \"secondary_button_background\": \"Plano de fundo do botão secundário\",\n    \"secondary_button_border\": \"Borda do botão secundário\",\n    \"shadow_color\": \"Sombra\",\n    \"limit_media_to_screen_height\": \"Restringir à altura da tela\",\n    \"video_autoplay\": \"Reprodução automática\",\n    \"video_cover_image\": \"Imagem de capa\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Fonte\",\n    \"first_row_media_position\": \"Posição da mídia na primeira linha\",\n    \"accordion\": \"Seção expansível\",\n    \"aspect_ratio\": \"Proporção\",\n    \"auto_rotate_announcements\": \"Girar anúncios automaticamente\",\n    \"auto_rotate_slides\": \"Girar slides automaticamente\",\n    \"background_color\": \"Cor do plano de fundo\",\n    \"badge_corner_radius\": \"Raio do canto\",\n    \"badge_position\": \"Posição nos cartões\",\n    \"badge_sale_color_scheme\": \"Promoção\",\n    \"badge_sold_out_color_scheme\": \"Esgotado\",\n    \"behavior\": \"Comportamento\",\n    \"blur\": \"Desfoque da sombra\",\n    \"border\": \"Borda\",\n    \"bottom\": \"Inferior\",\n    \"card_image_height\": \"Altura da imagem do produto\",\n    \"carousel_on_mobile\": \"Carrossel no celular\",\n    \"cart_count\": \"Contagem do carrinho\",\n    \"cart_items\": \"Itens do carrinho\",\n    \"cart_related_products\": \"Produtos relacionados\",\n    \"cart_title\": \"Carrinho\",\n    \"cart_total\": \"Total do carrinho\",\n    \"cart_type\": \"Tipo\",\n    \"case\": \"Caixa\",\n    \"checkout_buttons\": \"Botões de checkout acelerado\",\n    \"collection_list\": \"Coleções\",\n    \"collection_templates\": \"Modelos de coleção\",\n    \"content\": \"Conteúdo\",\n    \"corner_radius\": \"Raio do canto\",\n    \"country_region\": \"País/região\",\n    \"currency_code\": \"Código da moeda\",\n    \"custom_height\": \"Altura personalizada\",\n    \"custom_mobile_size\": \"Tamanho personalizado para celular\",\n    \"desktop_height\": \"Altura no desktop\",\n    \"direction\": \"Direção\",\n    \"display\": \"Exibição\",\n    \"divider_thickness\": \"Espessura do divisor\",\n    \"divider\": \"Divisor\",\n    \"dividers\": \"Divisores\",\n    \"drop_shadow\": \"Sombra projetada\",\n    \"empty_state_collection_info\": \"Exibida antes de uma busca ser inserida\",\n    \"empty_state_collection\": \"Coleção de estado vazio\",\n    \"enable_filtering\": \"Filtros\",\n    \"enable_grid_density\": \"Controle de layout de grade\",\n    \"enable_sorting\": \"Classificação\",\n    \"enable_zoom\": \"Habilitar zoom\",\n    \"equal_columns\": \"Colunas iguais\",\n    \"expand_first_group\": \"Expandir primeiro grupo\",\n    \"extend_media_to_screen_edge\": \"Estender mídia até a borda da tela\",\n    \"extend_summary\": \"Estender até a borda da tela\",\n    \"extra_large\": \"Extragrande\",\n    \"extra_small\": \"Extrapequeno\",\n    \"fixed_height\": \"Altura em pixels\",\n    \"fixed_width\": \"Largura em pixels\",\n    \"flag\": \"Bandeira\",\n    \"font_price\": \"Fonte do preço\",\n    \"font_weight\": \"Peso da fonte\",\n    \"font\": \"Fonte\",\n    \"full_width_first_image\": \"Primeira imagem em largura total\",\n    \"full_width_on_mobile\": \"Largura total no celular\",\n    \"heading_preset\": \"Predefinição de título\",\n    \"hide_padding\": \"Ocultar preenchimento\",\n    \"hide_unselected_variant_media\": \"Ocultar mídia de variante não selecionada\",\n    \"horizontal_gap\": \"Espaçamento horizontal\",\n    \"horizontal_offset\": \"Deslocamento horizontal da sombra\",\n    \"hover_behavior\": \"Comportamento ao passar o mouse\",\n    \"icon_background\": \"Plano de fundo do ícone\",\n    \"icons\": \"Ícones\",\n    \"image_border_radius\": \"Raio do canto da imagem\",\n    \"installments\": \"Parcelas\",\n    \"integrated_button\": \"Botão integrado\",\n    \"language_selector\": \"Seletor de idiomas\",\n    \"large\": \"Grande\",\n    \"left_padding\": \"Preenchimento à esquerda\",\n    \"left\": \"Esquerda\",\n    \"letter_spacing\": \"Espaçamento entre letras\",\n    \"limit_product_details_width\": \"Limitar largura dos detalhes do produto\",\n    \"link_preset\": \"Predefinição de link\",\n    \"links\": \"Links\",\n    \"logo_font\": \"Fonte do logo\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Loop\",\n    \"make_details_sticky_desktop\": \"Fixo no desktop\",\n    \"max_width\": \"Largura máxima\",\n    \"media_height\": \"Altura da mídia\",\n    \"media_overlay\": \"Sobreposição de mídia\",\n    \"media_position\": \"Posição da mídia\",\n    \"media_type\": \"Tipo de mídia\",\n    \"media_width\": \"Largura da mídia\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Colunas no celular\",\n    \"mobile_height\": \"Altura no celular\",\n    \"mobile_logo_image\": \"Logo para celular\",\n    \"mobile_quick_add\": \"Adição rápida no celular\",\n    \"motion_direction\": \"Direção do movimento\",\n    \"motion\": \"Movimento\",\n    \"movement_direction\": \"Direção do movimento\",\n    \"navigation_bar_color_scheme\": \"Esquema de cores da barra de navegação\",\n    \"navigation_bar\": \"Barra de navegação\",\n    \"navigation\": \"Navegação\",\n    \"open_new_tab\": \"Abrir link em nova aba\",\n    \"overlay_color\": \"Cor da sobreposição\",\n    \"overlay\": \"Sobreposição\",\n    \"padding_bottom\": \"Preenchimento inferior\",\n    \"padding_horizontal\": \"Preenchimento horizontal\",\n    \"padding_top\": \"Preenchimento superior\",\n    \"page_width\": \"Largura da página\",\n    \"pagination\": \"Paginação\",\n    \"percent_height\": \"Altura em porcentagem\",\n    \"percent_size_mobile\": \"Tamanho em porcentagem\",\n    \"percent_size\": \"Tamanho em porcentagem\",\n    \"percent_width\": \"Largura em porcentagem\",\n    \"pixel_size_mobile\": \"Tamanho em pixels\",\n    \"pixel_size\": \"Tamanho em pixels\",\n    \"placement\": \"Posicionamento\",\n    \"position\": \"Posição\",\n    \"preset\": \"Predefinição\",\n    \"product_cards\": \"Cartões de produto\",\n    \"product_pages\": \"Páginas de produto\",\n    \"product_templates\": \"Modelos de produto\",\n    \"products\": \"Produtos\",\n    \"quick_add\": \"Adição rápida\",\n    \"ratio\": \"Proporção\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Contagem de avaliações\",\n    \"right\": \"Direita\",\n    \"row_height\": \"Altura da linha\",\n    \"row\": \"Linha\",\n    \"seller_note\": \"Permitir observação para o vendedor\",\n    \"shape\": \"Formato\",\n    \"show_as_accordion\": \"Exibir como seção expansível no celular\",\n    \"show_sale_price_first\": \"Exibir preço promocional primeiro\",\n    \"show_tax_info\": \"Informações de tributos\",\n    \"show\": \"Exibir\",\n    \"size_mobile\": \"Tamanho no celular\",\n    \"small\": \"Pequeno\",\n    \"speed\": \"Velocidade\",\n    \"statement\": \"Extrato\",\n    \"sticky_header\": \"Cabeçalho fixo\",\n    \"text_hierarchy\": \"Hierarquia do texto\",\n    \"text_presets\": \"Predefinições de texto\",\n    \"title\": \"Título\",\n    \"top\": \"Superior\",\n    \"type\": \"Tipo\",\n    \"type_preset\": \"Predefinição de texto\",\n    \"underline_thickness\": \"Espessura do sublinhado\",\n    \"unit\": \"Unidade\",\n    \"variant_images\": \"Imagens de variantes\",\n    \"vendor\": \"Fabricante\",\n    \"vertical_gap\": \"Espaçamento vertical\",\n    \"vertical_offset\": \"Deslocamento vertical da sombra\",\n    \"vertical_on_mobile\": \"Vertical no celular\",\n    \"view_all_as_last_card\": \"\\\"Ver tudo\\\" como último cartão\",\n    \"weight\": \"Peso\",\n    \"wrap\": \"Quebra de linha\",\n    \"read_only\": \"Somente leitura\",\n    \"always_stack_buttons\": \"Sempre empilhar botões\",\n    \"custom_mobile_width\": \"Largura personalizada para celular\",\n    \"gradient_direction\": \"Direção do gradiente\",\n    \"headings\": \"Títulos\",\n    \"overlay_style\": \"Estilo da sobreposição\",\n    \"shadow_opacity\": \"Opacidade da sombra\",\n    \"show_filter_label\": \"Etiquetas de texto para filtros aplicados\",\n    \"show_swatch_label\": \"Etiquetas de texto para amostras\",\n    \"transparent_background\": \"Plano de fundo transparente\",\n    \"hide_logo_on_home_page\": \"Ocultar logo na página inicial\",\n    \"account\": \"Conta\",\n    \"align_baseline\": \"Alinhar linha de base do texto\",\n    \"add_discount_code\": \"Permitir descontos no carrinho\",\n    \"background_overlay\": \"Sobreposição do plano de fundo\",\n    \"background_media\": \"Mídia de plano de fundo\",\n    \"border_thickness\": \"Espessura da borda\",\n    \"bottom_row\": \"Linha inferior\",\n    \"button_text_case\": \"Caixa do texto\",\n    \"card_size\": \"Tamanho do cartão\",\n    \"auto_open_cart_drawer\": \"A gaveta abre automaticamente ao \\\"Adicionar ao carrinho\\\"\",\n    \"collection_count\": \"Contagem da coleção\",\n    \"collection_title_case\": \"Caixa do título da coleção\",\n    \"custom_liquid\": \"Código Liquid\",\n    \"default\": \"Padrão\",\n    \"default_logo\": \"Logo padrão\",\n    \"divider_width\": \"Largura do divisor\",\n    \"horizontal_padding\": \"Preenchimento horizontal\",\n    \"inverse\": \"Inverso\",\n    \"inverse_logo\": \"Logo inverso\",\n    \"layout_style\": \"Estilo\",\n    \"length\": \"Comprimento\",\n    \"mobile_card_size\": \"Tamanho do cartão no celular\",\n    \"mobile_pagination\": \"Paginação no celular\",\n    \"open_row_by_default\": \"Abrir linha por padrão\",\n    \"page\": \"Página\",\n    \"page_transition_enabled\": \"Transição de página\",\n    \"product_and_card_title_case\": \"Caixa do título do produto e do cartão\",\n    \"product_title_case\": \"Caixa do título do produto\",\n    \"right_padding\": \"Preenchimento à direita\",\n    \"search\": \"Busca\",\n    \"search_icon\": \"Ícone de busca\",\n    \"search_position\": \"Posição\",\n    \"search_row\": \"Linha\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Exibir alinhamento\",\n    \"show_count\": \"Exibir contagem\",\n    \"show_date\": \"Data\",\n    \"show_pickup_availability\": \"Exibir disponibilidade para retirada\",\n    \"show_search\": \"Exibir busca\",\n    \"text_label_case\": \"Caixa da etiqueta de texto\",\n    \"use_inverse_logo\": \"Usar logo inverso\",\n    \"vertical_padding\": \"Preenchimento vertical\",\n    \"visibility\": \"Visibilidade\",\n    \"product_corner_radius\": \"Raio do canto do produto\",\n    \"card_corner_radius\": \"Raio do canto do cartão\",\n    \"alignment_mobile\": \"Alinhamento no celular\",\n    \"animation_repeat\": \"Repetir animação\",\n    \"blurred_reflection\": \"Reflexo desfocado\",\n    \"card_hover_effect\": \"Efeito de foco do cartão\",\n    \"inventory_threshold\": \"Limite de estoque baixo\",\n    \"reflection_opacity\": \"Opacidade do reflexo\",\n    \"show_inventory_quantity\": \"Exibir quantidade de estoque baixo\",\n    \"transition_to_main_product\": \"Transição do cartão de produto para a página do produto\",\n    \"show_second_image_on_hover\": \"Exibir segunda imagem ao passar o mouse\",\n    \"media\": \"Mídia\",\n    \"product_card_carousel\": \"Exibir carrossel\",\n    \"media_fit\": \"Ajuste da mídia\",\n    \"scroll_speed\": \"Tempo até o próximo anúncio\",\n    \"show_powered_by_shopify\": \"Exibir \\\"Com tecnologia da Shopify\\\"\",\n    \"gift_card_form\": \"Formulário de cartão-presente\",\n    \"seller_note_open_by_default\": \"Abrir observação para o vendedor por padrão\",\n    \"add_to_cart_animation\": \"Adicionar ao carrinho\",\n    \"custom_link\": \"Link personalizado\",\n    \"product_custom_property\": {\n      \"heading\": \"Título\",\n      \"description\": \"Descrição\",\n      \"key\": \"Nome da propriedade\",\n      \"key_info\": \"Não pode ficar em branco e deve ser exclusivo para cada bloco. Aparece no carrinho, no checkout e nos detalhes do pedido.\",\n      \"placeholder_text\": \"Texto do marcador de posição\",\n      \"default_heading\": \"Personalize seu produto\",\n      \"default_placeholder\": \"Insira suas instruções especiais\",\n      \"default_property_key\": \"Instruções especiais\",\n      \"max_length\": \"Máximo de caracteres\",\n      \"required\": \"Entrada obrigatória para adicionar o item ao carrinho\",\n      \"input_type\": \"Tipo de entrada\",\n      \"input_type_text\": \"Texto\",\n      \"input_type_checkbox\": \"Caixa de seleção\",\n      \"content_settings\": \"Configurações de conteúdo\",\n      \"buyers_input\": \"Entrada do comprador\",\n      \"checkbox_label\": \"Etiqueta da caixa de seleção\",\n      \"default_checkbox_label\": \"Incluir embrulho para presente\",\n      \"heading_preset\": \"Título\",\n      \"description_preset\": \"Descrição\",\n      \"input_preset\": \"Entrada\",\n      \"checkbox_preset\": \"Etiqueta da caixa de seleção\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Contagem de posts\",\n    \"animation\": \"Animação\",\n    \"top_level_size\": \"Tamanho do nível superior\",\n    \"empty_cart_button_link\": \"Link do botão do carrinho vazio\",\n    \"auto_load_products\": \"Carregar produtos automaticamente na rolagem\",\n    \"products_per_page\": \"Produtos por página\",\n    \"custom_mobile_media\": \"Mostrar mídia diferente no celular\",\n    \"stack_media_on_mobile\": \"Empilhar mídia\",\n    \"media_type_1\": \"Tipo de mídia\",\n    \"media_type_2\": \"Tipo de mídia 2\",\n    \"full_frame_on_mobile\": \"Largura total no celular\",\n    \"skus\": \"SKUs\",\n    \"variant_per_page\": \"Variantes por página\",\n    \"image_1\": \"Imagem 1\",\n    \"image_2\": \"Imagem 2\",\n    \"after_image\": \"Imagem 'depois'\",\n    \"before_image\": \"Imagem 'antes'\",\n    \"cs_slider_style\": \"Estilo do slider\",\n    \"cs_slider_color\": \"Cor do slider\",\n    \"cs_slider_inner_color\": \"Cor interna do slider\",\n    \"text_on_images\": \"Texto nas imagens\",\n    \"card_height\": \"Altura do cartão\",\n    \"submenu_size\": \"Tamanho do submenu\",\n    \"desktop_position\": \"Posição no desktop\",\n    \"desktop_pagination\": \"Paginação no desktop\",\n    \"bullseye_color\": \"Cor interna\",\n    \"hotspot_color\": \"Cor do hotspot\",\n    \"product_price_typography\": \"Tipografia do preço do produto\",\n    \"product_title_typography\": \"Tipografia do título do produto\",\n    \"x_position\": \"Posição horizontal\",\n    \"y_position\": \"Posição vertical\",\n    \"enable_sticky_add_to_cart\": \"Barra fixa de adicionar ao carrinho\",\n    \"sticky_add_to_cart\": \"Adicionar ao carrinho fixo\",\n    \"actions_display_style\": \"Estilo de menu\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Seta\",\n    \"auto\": \"Automático\",\n    \"banana\": \"Banana\",\n    \"bottle\": \"Garrafa\",\n    \"box\": \"Caixa\",\n    \"buttons\": \"Botões\",\n    \"carrot\": \"Cenoura\",\n    \"center\": \"Centralizado\",\n    \"chat_bubble\": \"Balão de chat\",\n    \"clipboard\": \"Área de transferência\",\n    \"contain\": \"Conter\",\n    \"counter\": \"Contador\",\n    \"cover\": \"Cobrir\",\n    \"custom\": \"Personalizado\",\n    \"dairy_free\": \"Sem laticínios\",\n    \"dairy\": \"Laticínios\",\n    \"default\": \"Padrão\",\n    \"dropdowns\": \"Menus suspensos\",\n    \"dots\": \"Pontos\",\n    \"dryer\": \"Secadora\",\n    \"end\": \"Final\",\n    \"eye\": \"Olho\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Preencher\",\n    \"fire\": \"Fogo\",\n    \"fit\": \"Ajustar\",\n    \"full\": \"Total\",\n    \"full_and_page\": \"Plano de fundo total, conteúdo com largura da página\",\n    \"gluten_free\": \"Sem glúten\",\n    \"heading\": \"Título\",\n    \"heart\": \"Coração\",\n    \"horizontal\": \"Horizontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Ferro de passar\",\n    \"landscape\": \"Paisagem\",\n    \"large\": \"Grande\",\n    \"leaf\": \"Folha\",\n    \"leather\": \"Couro\",\n    \"lg\": \"G\",\n    \"lightning_bolt\": \"Raio\",\n    \"link\": \"Link\",\n    \"lipstick\": \"Batom\",\n    \"lock\": \"Cadeado\",\n    \"lowercase\": \"minúsculas\",\n    \"m\": \"M\",\n    \"map_pin\": \"Alfinete de mapa\",\n    \"medium\": \"Médio\",\n    \"none\": \"Nenhum\",\n    \"numbers\": \"Números\",\n    \"nut_free\": \"Sem nozes\",\n    \"outline\": \"Contorno\",\n    \"page\": \"Página\",\n    \"pants\": \"Calças\",\n    \"paw_print\": \"Patada\",\n    \"pepper\": \"Pimenta\",\n    \"perfume\": \"Perfume\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Avião\",\n    \"plant\": \"Planta\",\n    \"portrait\": \"Retrato\",\n    \"price_tag\": \"Etiqueta de preço\",\n    \"question_mark\": \"Ponto de interrogação\",\n    \"recycle\": \"Reciclar\",\n    \"return\": \"Devolução\",\n    \"ruler\": \"Régua\",\n    \"s\": \"P\",\n    \"sentence\": \"Frase\",\n    \"serving_dish\": \"Travessa\",\n    \"shirt\": \"Camisa\",\n    \"shoe\": \"Sapato\",\n    \"silhouette\": \"Silhueta\",\n    \"small\": \"Pequeno\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Floco de neve\",\n    \"solid\": \"Sólido\",\n    \"space_between\": \"Espaço entre\",\n    \"square\": \"Quadrado\",\n    \"star\": \"Estrela\",\n    \"start\": \"Início\",\n    \"stopwatch\": \"Cronômetro\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Caminhão\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Maiúsculas\",\n    \"vertical\": \"Vertical\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Lavagem\",\n    \"circle\": \"Círculo\",\n    \"swatches\": \"Swatches\",\n    \"full_and_page_offset_left\": \"Plano de fundo total, conteúdo com largura da página, deslocado para a esquerda\",\n    \"full_and_page_offset_right\": \"Plano de fundo total, conteúdo com largura da página, deslocado para a direita\",\n    \"offset_left\": \"Deslocado para a esquerda\",\n    \"offset_right\": \"Deslocado para a direita\",\n    \"page_center_aligned\": \"Página, alinhado ao centro\",\n    \"page_left_aligned\": \"Página, alinhado à esquerda\",\n    \"page_right_aligned\": \"Página, alinhado à direita\",\n    \"button\": \"Botão\",\n    \"caption\": \"Legenda\",\n    \"h1\": \"Título 1\",\n    \"h2\": \"Título 2\",\n    \"h3\": \"Título 3\",\n    \"h4\": \"Título 4\",\n    \"h5\": \"Título 5\",\n    \"h6\": \"Título 6\",\n    \"paragraph\": \"Parágrafo\",\n    \"primary\": \"Primário\",\n    \"secondary\": \"Secundário\",\n    \"tertiary\": \"Terciário\",\n    \"chevron_left\": \"Divisa para a esquerda\",\n    \"chevron_right\": \"Divisa para a direita\",\n    \"diamond\": \"Diamante\",\n    \"grid\": \"Grade\",\n    \"parallelogram\": \"Paralelogramo\",\n    \"rounded\": \"Arredondado\",\n    \"fit_content\": \"Ajustar\",\n    \"pills\": \"Pílulas\",\n    \"heavy\": \"Pesado\",\n    \"thin\": \"Fino\",\n    \"drawer\": \"Gaveta\",\n    \"preview\": \"Pré-visualização\",\n    \"text\": \"Texto\",\n    \"video_uploaded\": \"Enviado\",\n    \"video_external_url\": \"URL externo\",\n    \"aspect_ratio\": \"Proporção\",\n    \"fixed\": \"Fixo\",\n    \"pixel\": \"Pixel\",\n    \"percent\": \"Porcentagem\",\n    \"above_carousel\": \"Acima do carrossel\",\n    \"all\": \"Todos\",\n    \"up\": \"Para cima\",\n    \"down\": \"Para baixo\",\n    \"always\": \"Sempre\",\n    \"arrows_large\": \"Setas grandes\",\n    \"arrows\": \"Setas\",\n    \"balance\": \"Equilíbrio\",\n    \"bento\": \"Bento\",\n    \"black\": \"Preto\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Corpo do texto (grande)\",\n    \"body_regular\": \"Corpo do texto (normal)\",\n    \"body_small\": \"Corpo do texto (pequeno)\",\n    \"bold\": \"Negrito\",\n    \"bottom_left\": \"Inferior esquerdo\",\n    \"bottom_right\": \"Inferior direito\",\n    \"bottom\": \"Inferior\",\n    \"capitalize\": \"Primeira letra maiúscula\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carrossel\",\n    \"check_box\": \"Caixa de seleção\",\n    \"chevron_large\": \"Divisas grandes\",\n    \"chevron\": \"Divisa\",\n    \"chevrons\": \"Divisas\",\n    \"classic\": \"Clássico\",\n    \"collection_images\": \"Imagens da coleção\",\n    \"color\": \"Cor\",\n    \"complementary\": \"Complementar\",\n    \"dissolve\": \"Dissolver\",\n    \"dotted\": \"Pontilhado\",\n    \"editorial\": \"Editorial\",\n    \"extra_large\": \"Extragrande\",\n    \"extra_small\": \"Extrapequeno\",\n    \"featured_collections\": \"Coleções em destaque\",\n    \"featured_products\": \"Produtos em destaque\",\n    \"font_primary\": \"Primária\",\n    \"font_secondary\": \"Secundária\",\n    \"font_tertiary\": \"Terciária\",\n    \"forward\": \"Para a frente\",\n    \"full_screen\": \"Tela cheia\",\n    \"gradient\": \"Gradiente\",\n    \"heading_extra_large\": \"Título (extragrande)\",\n    \"heading_extra_small\": \"Título (extrapequeno)\",\n    \"heading_large\": \"Título (grande)\",\n    \"heading_regular\": \"Título (normal)\",\n    \"heading_small\": \"Título (pequeno)\",\n    \"icon\": \"Ícone\",\n    \"image\": \"Imagem\",\n    \"input\": \"Campo\",\n    \"inside_carousel\": \"Dentro do carrossel\",\n    \"inverse_large\": \"Inverso grande\",\n    \"inverse\": \"Inverso\",\n    \"large_arrows\": \"Setas grandes\",\n    \"large_chevrons\": \"Divisas grandes\",\n    \"left\": \"Esquerda\",\n    \"light\": \"Leve\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Solto\",\n    \"media_first\": \"Mídia primeiro\",\n    \"media_second\": \"Mídia em segundo\",\n    \"modal\": \"Janela modal\",\n    \"narrow\": \"Estreito\",\n    \"never\": \"Nunca\",\n    \"next_to_carousel\": \"Ao lado do carrossel\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Sem quebra de linha\",\n    \"off_media\": \"Fora da mídia\",\n    \"on_media\": \"Na mídia\",\n    \"on_scroll_up\": \"Ao rolar para cima\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pílula\",\n    \"plus\": \"Mais\",\n    \"pretty\": \"Bonito\",\n    \"price\": \"Preço\",\n    \"primary_style\": \"Estilo primário\",\n    \"rectangle\": \"Retângulo\",\n    \"regular\": \"Normal\",\n    \"related\": \"Relacionados\",\n    \"reverse\": \"Inverter\",\n    \"rich_text\": \"Rich text\",\n    \"right\": \"Direita\",\n    \"secondary_style\": \"Estilo secundário\",\n    \"semibold\": \"Seminegrito\",\n    \"shaded\": \"Sombreado\",\n    \"show_second_image\": \"Mostrar segunda imagem\",\n    \"single\": \"Único\",\n    \"slide_left\": \"Deslizar para a esquerda\",\n    \"slide_up\": \"Deslizar para cima\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Empilhar\",\n    \"text_only\": \"Apenas texto\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturas\",\n    \"tight\": \"Justo\",\n    \"top_left\": \"Superior esquerdo\",\n    \"top_right\": \"Superior direito\",\n    \"top\": \"Superior\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Sublinhado\",\n    \"video\": \"Vídeo\",\n    \"wide\": \"Largo\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"Destaque\",\n    \"below_image\": \"Abaixo da imagem\",\n    \"body\": \"Corpo do texto\",\n    \"button_primary\": \"Botão primário\",\n    \"button_secondary\": \"Botão secundário\",\n    \"compact\": \"Compacto\",\n    \"crop_to_fit\": \"Cortar para ajustar\",\n    \"hidden\": \"Oculto\",\n    \"hint\": \"Dica\",\n    \"maintain_aspect_ratio\": \"Manter proporção\",\n    \"off\": \"Desativado\",\n    \"on_image\": \"Na imagem\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"spotlight\": \"Destaque\",\n    \"standard\": \"Padrão\",\n    \"subheading\": \"Subtítulo\",\n    \"blur\": \"Desfoque\",\n    \"lift\": \"Elevar\",\n    \"reveal\": \"Revelar\",\n    \"scale\": \"Escala\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Com dicas\",\n    \"below_media\": \"Abaixo da mídia\",\n    \"full_frame\": \"Tela cheia\",\n    \"icons\": \"Ícones\"\n  },\n  \"content\": {\n    \"advanced\": \"Avançado\",\n    \"background_image\": \"Imagem de fundo\",\n    \"background_video\": \"Vídeo de fundo\",\n    \"block_size\": \"Tamanho do bloco\",\n    \"borders\": \"Bordas\",\n    \"describe_the_video_for\": \"Descreva o vídeo para clientes que usam leitores de tela. [Saiba mais](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Tamanho da seção\",\n    \"slideshow_width\": \"Largura do slide\",\n    \"typography\": \"Tipografia\",\n    \"width_is_automatically_optimized\": \"A largura é otimizada automaticamente para celular.\",\n    \"complementary_products\": \"Os produtos complementares devem ser configurados com o app Search & Discovery. [Saiba mais](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"As colunas serão otimizadas automaticamente para celular\",\n    \"content_width\": \"A largura do conteúdo só se aplica quando a largura da seção é definida como largura total.\",\n    \"responsive_font_sizes\": \"Os tamanhos são dimensionados automaticamente para todos os tamanhos de tela\",\n    \"buttons\": \"Botões\",\n    \"swatches\": \"Swatches\",\n    \"variant_settings\": \"Configurações de variantes\",\n    \"background\": \"Plano de fundo\",\n    \"appearance\": \"Aparência\",\n    \"arrows\": \"Setas\",\n    \"body_size\": \"Tamanho do corpo do texto\",\n    \"mobile_size\": \"Tamanho para celular\",\n    \"bottom_row_appearance\": \"Aparência da linha inferior\",\n    \"cards_layout\": \"Layout dos cartões\",\n    \"carousel_navigation\": \"Navegação do carrossel\",\n    \"carousel_pagination\": \"Paginação do carrossel\",\n    \"copyright\": \"Direitos autorais\",\n    \"edit_logo_in_theme_settings\": \"Edite o logo nas [configurações do tema](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Edite a formatação de preço nas [configurações do tema](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Edite o estilo da variante nas [configurações do tema](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"As inscrições adicionam [perfis de cliente](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Para que o botão seja exibido, o canal de vendas Shop precisa estar instalado e o Shop Pay ativado. [Saiba mais](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Fontes\",\n    \"grid\": \"Grade\",\n    \"heading_size\": \"Tamanho do título\",\n    \"image\": \"Imagem\",\n    \"input\": \"Campo\",\n    \"layout\": \"Layout\",\n    \"link\": \"Link\",\n    \"link_padding\": \"Preenchimento do link\",\n    \"localization\": \"Localização\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Margem\",\n    \"media\": \"Mídia\",\n    \"media_1\": \"Mídia 1\",\n    \"media_2\": \"Mídia 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Layout para celular\",\n    \"padding\": \"Preenchimento\",\n    \"padding_desktop\": \"Preenchimento para desktop\",\n    \"paragraph\": \"Parágrafo\",\n    \"policies\": \"Políticas\",\n    \"popup\": \"Pop-up\",\n    \"search\": \"Pesquisa\",\n    \"section_layout\": \"Layout da seção\",\n    \"size\": \"Tamanho\",\n    \"social_media\": \"Redes sociais\",\n    \"submit_button\": \"Botão de envio\",\n    \"text_presets\": \"Predefinições de texto\",\n    \"transparent_background\": \"Plano de fundo transparente\",\n    \"typography_primary\": \"Tipografia primária\",\n    \"typography_secondary\": \"Tipografia secundária\",\n    \"typography_tertiary\": \"Tipografia terciária\",\n    \"mobile_width\": \"Largura para celular\",\n    \"width\": \"Largura\",\n    \"images\": \"Imagens\",\n    \"visibility\": \"Visibilidade\",\n    \"carousel\": \"Carrossel\",\n    \"colors\": \"Cores\",\n    \"collection_page\": \"Página da coleção\",\n    \"customer_account\": \"Conta de cliente\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Edite a coleção de estado vazio nas [configurações do tema](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Layout em grade\",\n    \"home_page\": \"Página inicial\",\n    \"inverse_logo_info\": \"Usado quando o plano de fundo transparente do cabeçalho é definido como Inverso\",\n    \"manage_customer_accounts\": \"[Gerencie a visibilidade](/admin/settings/customer_accounts) nas configurações da conta de cliente. Contas legadas não são compatíveis.\",\n    \"manage_policies\": \"[Gerenciar políticas](/admin/settings/legal)\",\n    \"product_page\": \"Página do produto\",\n    \"text\": \"Texto\",\n    \"thumbnails\": \"Miniaturas\",\n    \"visible_if_collection_has_more_products\": \"Visível se a coleção tiver mais produtos do que o exibido\",\n    \"app_required_for_ratings\": \"É necessário um app para classificações de produtos. [Saiba mais](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ícone\",\n    \"manage_store_name\": \"[Gerenciar nome da loja](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Exibe a coleção da seção principal\",\n    \"resource_reference_collection_card_image\": \"Exibe a imagem da coleção principal\",\n    \"resource_reference_collection_title\": \"Exibe o título da coleção principal\",\n    \"resource_reference_product\": \"Conecta-se automaticamente ao produto principal\",\n    \"resource_reference_product_card\": \"Exibe o produto da seção principal\",\n    \"resource_reference_product_inventory\": \"Exibe o estoque do produto principal\",\n    \"resource_reference_product_price\": \"Exibe o preço do produto principal\",\n    \"resource_reference_product_recommendations\": \"Exibe recomendações com base no produto principal\",\n    \"resource_reference_product_review\": \"Exibe as avaliações do produto principal\",\n    \"resource_reference_product_swatches\": \"Exibe os swatches do produto principal\",\n    \"resource_reference_product_title\": \"Exibe o título do produto principal\",\n    \"resource_reference_product_variant_picker\": \"Exibe as variantes do produto principal\",\n    \"resource_reference_product_media\": \"Exibe a mídia do produto principal\",\n    \"product_media\": \"Mídia do produto\",\n    \"section_link\": \"Link da seção\",\n    \"gift_card_form_description\": \"Os clientes podem enviar cartões-presente para o e-mail de um destinatário com uma mensagem pessoal. [Saiba mais](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Título\",\n    \"resource_reference_product_custom_property\": \"Adicione campos de entrada personalizáveis para coletar informações personalizadas que serão adicionadas a este item de linha do pedido e ficarão visíveis nos detalhes do pedido.\",\n    \"block_link\": \"Link do bloco\",\n    \"submenu_feature\": \"Recurso de submenu\",\n    \"cart_features\": \"Recursos do carrinho\",\n    \"email_signup\": \"Inscrição de e-mail\",\n    \"mobile_media\": \"Mídia para celular\",\n    \"mobile_media_2\": \"Mídia para celular 2\",\n    \"navigation\": \"Navegação\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Posição do popover\",\n    \"resource_reference_product_sku\": \"Exibe o SKU do produto principal\",\n    \"content_layout\": \"Layout do conteúdo\",\n    \"mobile_media_1\": \"Mídia para celular 1\",\n    \"utilities\": \"Utilitários\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Compartilhe informações sobre sua marca com seus clientes. Descreva um produto, faça anúncios ou dê as boas-vindas aos clientes em sua loja.</p>\",\n    \"bestseller_h2\": \"<h2>Mais vendidos</h2>\",\n    \"bestseller_h3\": \"<h3>Mais vendidos</h3>\",\n    \"bestseller\": \"<p>Mais vendido</p>\",\n    \"build_better\": \"<p>Acreditamos em construir melhor</p>\",\n    \"contact_us\": \"<h2>Fale conosco</h2>\",\n    \"discover_bestsellers\": \"<p>Descubra os mais vendidos que conquistaram o coração de nossos clientes com a combinação perfeita de funcionalidade e estilo.</p>\",\n    \"everythings_starts_with_why\": \"<p>Tudo o que fazemos começa com o porquê</p>\",\n    \"explore_latest_products\": \"<p>Explore nossos produtos mais recentes.</p>\",\n    \"faq\": \"<h3>Perguntas frequentes</h3>\",\n    \"first_to_know\": \"<p>Seja o primeiro a saber sobre novas coleções e ofertas especiais. </p>\",\n    \"free_returns\": \"<p>Devoluções grátis em 30 dias</p>\",\n    \"free_shipping_over\": \"<p>Frete grátis para compras acima de US$ 50</p>\",\n    \"goal_for_every_customer\": \"<p>Nosso objetivo é que cada cliente fique totalmente satisfeito com a compra. Se não for o caso, avise-nos e faremos o nosso melhor para resolver a situação com você.</p>\",\n    \"home_to_shirts\": \"<p>Início → Camisas</p>\",\n    \"intentional_design\": \"<h2>Design intencional</h2>\",\n    \"introducing_h2\": \"<h2><em>Apresentamos</em></h2>\",\n    \"latest_products\": \"<p>Apresentamos nossos produtos mais recentes, feitos especialmente para a estação. Compre seus favoritos antes que acabem!</p>\",\n    \"made_local_and_global\": \"<p>Nossos produtos são fabricados local e globalmente. Selecionamos cuidadosamente nossos parceiros de fabricação para garantir que nossos produtos tenham alta qualidade e um valor justo.</p>\",\n    \"made_with_care_h2\": \"<h2>Feito com cuidado</h2>\",\n    \"made_with_care_extended\": \"<p>Feito com cuidado e incondicionalmente amado por nossos clientes, este campeão de vendas exclusivo supera todas as expectativas.</p>\",\n    \"made_with_care\": \"<p>Feito com cuidado e incondicionalmente amado por nossos clientes.</p>\",\n    \"make_things_better_extended\": \"<p>Fazemos coisas que funcionam melhor e duram mais. Nossos produtos resolvem problemas reais com design clean e materiais honestos.</p>\",\n    \"make_things_better\": \"<p>Fazemos coisas que funcionam melhor e duram mais.</p>\",\n    \"may_also_like\": \"<h4>Você também pode gostar</h4>\",\n    \"new_arrivals_h1\": \"<h1>Novidades</h1>\",\n    \"new_arrivals_h2\": \"<h2>Novidades</h2>\",\n    \"new_arrivals_h3\": \"<h3>Novidades</h3>\",\n    \"product_launch\": \"<p>Dê uma olhada nos bastidores do nosso mais recente lançamento de produto.</p>\",\n    \"product_story\": \"<p>No coração de cada produto existe uma história única, impulsionada por nossa paixão por qualidade e inovação. Cada item aprimora sua vida diária e desperta alegria.</p>\",\n    \"real_people\": \"<p>Pessoas reais fazendo ótimos produtos</p>\",\n    \"related_product\": \"<h3>Produtos relacionados</h3>\",\n    \"return_policy\": \"<h2>Qual é a política de devolução?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 avaliações</p>\",\n    \"shipping_based_on_location\": \"<p>O frete é calculado com base na sua localização e nos itens do seu pedido. Você sempre saberá o preço do frete antes de comprar.</p>\",\n    \"shop_by_collection\": \"<h3>Compre por coleção</h3>\",\n    \"signature_products\": \"<h2>Nosso produto exclusivo</h2>\",\n    \"styled_with\": \"<h3>Combinado com</h3>\",\n    \"subscribe\": \"<h2>Assine nossos e-mails</h2>\",\n    \"team_with_goal\": \"<h2>Uma equipe com um objetivo</h2>\",\n    \"unable_to_accept_returns\": \"<p>Não podemos aceitar devoluções de determinados itens. Eles serão cuidadosamente marcados antes da compra.</p>\",\n    \"work_quickly_to_ship\": \"<p>Trabalharemos rapidamente para enviar seu pedido o mais rápido possível. Assim que seu pedido for enviado, você receberá um e-mail com mais informações. Os prazos de entrega variam dependendo da sua localização.</p>\",\n    \"join_our_email_list\": \"<h2>Faça parte da nossa lista de e-mails</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Receba ofertas exclusivas e acesso antecipado a novos produtos.</p>\",\n    \"artistry_in_action\": \"<p>Arte em ação </p>\",\n    \"authentic_materials\": \"<p>Materiais autênticos, sem concessões </p>\",\n    \"bold_style_recognizable\": \"<p>Estilo arrojado e reconhecível em qualquer lugar</p>\",\n    \"discover_elevated_design\": \"<p>Descubra o design sofisticado </p>\",\n    \"expert_construction_finish\": \"<p>Fabricação primorosa e acabamento impecável</p>\",\n    \"made_to_last\": \"<p>Feito para durar </p>\",\n    \"pieces_better_with_time\": \"<p>Peças que só melhoram com o tempo e o uso </p>\",\n    \"quality_you_can_feel\": \"<h2>Qualidade que se sente</h2>\",\n    \"uncompromising_standards\": \"<p>Padrões rigorosos </p>\",\n    \"featured_collection_h2\": \"<h2>Coleção em destaque</h2>\",\n    \"shop_collection\": \"<p>Descubra nossa coleção selecionada, com os favoritos escolhidos a dedo que unem estilo e qualidade.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Compre agora\",\n    \"collapsible_row\": \"Linha expansível\",\n    \"heading\": \"Título\",\n    \"email_signup_button_label\": \"Inscrever-se\",\n    \"accordion_heading\": \"Título da seção expansível\",\n    \"contact_form_button_label\": \"Enviar\",\n    \"popup_link\": \"Link do pop-up\",\n    \"sign_up\": \"Inscreva-se\",\n    \"welcome_to_our_store\": \"Boas-vindas à nossa loja\",\n    \"be_bold\": \"Seja ousado.\",\n    \"shop_our_latest_arrivals\": \"Compre nossos últimos lançamentos!\",\n    \"are_purchases_final_sale\": \"Alguma compra é de liquidação?\",\n    \"care_instructions\": \"Instruções de cuidados\",\n    \"cart\": \"Carrinho\",\n    \"discover_collection\": \"Descubra a coleção\",\n    \"fit\": \"caimento\",\n    \"how_much_for_shipping\": \"Qual é o custo do frete?\",\n    \"learn_more\": \"Saiba mais\",\n    \"manufacturing\": \"Fabricação\",\n    \"materials\": \"Materiais\",\n    \"return_policy\": \"Política de devolução\",\n    \"shipping\": \"Frete\",\n    \"shop_now_button_label\": \"Compre agora\",\n    \"sign_up_button_label\": \"Inscrever-se\",\n    \"submit_button_label\": \"Enviar\",\n    \"up_the_ante\": \"Aumente\\na\\naposta\",\n    \"view_all_button_label\": \"Ver tudo\",\n    \"what_is_return_policy\": \"Qual é a política de devolução?\",\n    \"when_will_order_arrive\": \"Quando receberei meu pedido?\",\n    \"where_are_products_made\": \"Onde seus produtos são fabricados?\",\n    \"trending_now\": \"Tendências\",\n    \"shop_the_look\": \"Comprar o look\",\n    \"bestsellers\": \"Mais vendidos\",\n    \"featured_collection\": \"Coleção em destaque\",\n    \"new_arrivals\": \"Novidades\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Descreva o vídeo para usuários de tecnologia assistiva\",\n    \"video_autoplay\": \"Os vídeos ficarão sem som por padrão\",\n    \"video_external\": \"Use um URL do YouTube ou do Vimeo\",\n    \"carousel_layout_on_mobile\": \"O carrossel é sempre usado no celular\",\n    \"carousel_hover_behavior_not_supported\": \"O efeito hover de \\\"Carrossel\\\" não é compatível quando o tipo \\\"Carrossel\\\" é selecionado no nível da seção\",\n    \"checkout_buttons\": \"Permite que os compradores finalizem a compra mais rapidamente e pode melhorar a conversão. [Saiba mais](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Título personalizado\",\n    \"edit_presets_in_theme_settings\": \"Edite as predefinições nas [configurações do tema](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Personalize os filtros com o [app Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"O layout em grade é usado para celular\",\n    \"logo_font\": \"Aplica-se apenas quando um logo não está selecionado\",\n    \"manage_countries_regions\": \"[Gerenciar países/regiões](/admin/settings/markets)\",\n    \"manage_languages\": \"[Gerenciar idiomas](/admin/settings/languages)\",\n    \"transparent_background\": \"Revise cada modelo em que o plano de fundo transparente é aplicado para garantir a legibilidade\",\n    \"aspect_ratio_adjusted\": \"Ajustado em alguns layouts\",\n    \"custom_liquid\": \"Adicione snippets de app ou outro código para criar personalizações avançadas. [Saiba mais](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Usado para filtros aplicados, códigos de desconto e sugestões de pesquisa\",\n    \"applies_on_image_only\": \"Aplica-se apenas a imagens\",\n    \"hover_effects\": \"Aplica-se a cartões de produto e de coleção\",\n    \"hide_logo_on_home_page_help\": \"O logo permanecerá visível quando o cabeçalho fixo estiver ativo\",\n    \"media_type_info\": \"Os recursos são preenchidos com base nos links do menu\",\n    \"logo_height\": \"Afeta apenas o logo do cabeçalho\",\n    \"actions_display_style\": \"Os ícones são sempre usados em dispositivos móveis\"\n  },\n  \"categories\": {\n    \"basic\": \"Básico\",\n    \"collection\": \"Coleção\",\n    \"collection_list\": \"Lista de coleções\",\n    \"footer\": \"Rodapé\",\n    \"forms\": \"Formulários\",\n    \"header\": \"Cabeçalho\",\n    \"layout\": \"Layout\",\n    \"links\": \"Links\",\n    \"product\": \"Produto\",\n    \"product_list\": \"Coleção em destaque\",\n    \"banners\": \"Banners\",\n    \"collections\": \"Coleções\",\n    \"custom\": \"Personalizado\",\n    \"decorative\": \"Decorativo\",\n    \"products\": \"Produtos\",\n    \"other_sections\": \"Outros\",\n    \"storytelling\": \"Narrativa\",\n    \"text\": \"Texto\"\n  }\n}\n"
  },
  {
    "path": "locales/pt-PT.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Carregar vídeo: {{ description }}\",\n    \"sold_out\": \"Esgotado\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"Endereço de e-mail\",\n      \"success\": \"Agradecemos a sua subscrição!\"\n    },\n    \"filter\": \"Filtrar\",\n    \"payment_methods\": \"Métodos de pagamento\",\n    \"contact_form\": {\n      \"name\": \"Nome\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefone\",\n      \"comment\": \"Comentário\",\n      \"post_success\": \"Agradecemos o seu contacto. Responder-lhe-emos logo que possível.\",\n      \"error_heading\": \"Ajuste o seguinte:\"\n    },\n    \"slider_label\": \"Slider\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Reproduzir modelo 3D\",\n    \"play_video\": \"Reproduzir o vídeo\",\n    \"unit_price\": \"Preço unitário\",\n    \"country_results_count\": \"{{ count }} resultados\",\n    \"slideshow_pause\": \"Pausar apresentação de diapositivos\",\n    \"slideshow_play\": \"Reproduzir apresentação de diapositivos\",\n    \"remove_item\": \"Remover {{ title}}\",\n    \"skip_to_text\": \"Saltar para o conteúdo\",\n    \"skip_to_product_info\": \"Saltar para a informação do produto\",\n    \"skip_to_results_list\": \"Saltar para lista de resultados\",\n    \"new_window\": \"Abrirá numa nova janela.\",\n    \"close_dialog\": \"Fechar caixa de diálogo\",\n    \"reset_search\": \"Repor pesquisa\",\n    \"search_results_count\": \"{{ count }} resultados de pesquisa encontrados para \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Não foram encontrados resultados para \\\"{{ query }}\\\"\",\n    \"slideshow_next\": \"Diapositivo seguinte\",\n    \"slideshow_previous\": \"Diapositivo anterior\",\n    \"filters\": \"Filtros\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtro aplicado\",\n      \"other\": \"{{ count }} filtros aplicados\",\n      \"many\": \"{{ count }} filtros aplicados\"\n    },\n    \"account\": \"Conta\",\n    \"cart\": \"Carrinho\",\n    \"cart_count\": \"Total de itens no carrinho\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"País/região\",\n    \"slide_status\": \"Diapositivo {{ index }} de {{ length }}\",\n    \"scroll_to\": \"Percorrer até {{ title }}\",\n    \"loading_product_recommendations\": \"A carregar recomendações de produto\",\n    \"discount\": \"Aplicar um código de desconto\",\n    \"discount_menu\": \"Códigos de desconto\",\n    \"discount_applied\": \"Código de desconto aplicado: {{ code }}\",\n    \"pause_video\": \"Colocar vídeo em pausa\",\n    \"inventory_status\": \"Estado do inventário\",\n    \"localization_region_and_language\": \"Seletor de região e idioma\",\n    \"find_country\": \"Localizar país\",\n    \"decrease_quantity\": \"Diminuir quantidade\",\n    \"increase_quantity\": \"Aumentar quantidade\",\n    \"rating\": \"A classificação deste produto é de {{ rating }}/5\",\n    \"quantity\": \"Quantidade\",\n    \"nested_product\": \"{{ product_title }} para {{ parent_title }}\",\n    \"remove\": \"Remover\",\n    \"view_pricing_info\": \"Ver informações sobre preços\",\n    \"open_hotspot\": \"Hotspot aberto\",\n    \"slideshow\": \"Apresentação de diapositivos\",\n    \"header_navigation_label\": \"Principal\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Adicionar ao carrinho\",\n    \"clear_all\": \"Limpar tudo\",\n    \"remove\": \"Remover\",\n    \"view_in_your_space\": \"Ver no seu espaço\",\n    \"show_filters\": \"Filtrar\",\n    \"clear\": \"Limpar\",\n    \"continue_shopping\": \"Continuar a comprar\",\n    \"log_in_html\": \"Tem uma conta? <a href=\\\"{{ link }}\\\">Inicie sessão</a> para finalizar a compra mais rápido.\",\n    \"see_items\": {\n      \"one\": \"Ver {{ count }} item\",\n      \"other\": \"Ver {{ count }} itens\",\n      \"many\": \"Ver {{ count }} itens\"\n    },\n    \"view_all\": \"Ver tudo\",\n    \"add\": \"Adicionar\",\n    \"choose\": \"Escolher\",\n    \"added\": \"Adicionado\",\n    \"show_less\": \"Mostrar menos\",\n    \"show_more\": \"Mostrar mais\",\n    \"close\": \"Fechar\",\n    \"more\": \"Mais\",\n    \"reset\": \"Repor\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Fechar caixa de diálogo\",\n    \"back\": \"Voltar\",\n    \"log_in\": \"Iniciar sessão\",\n    \"log_out\": \"Terminar sessão\",\n    \"remove_discount\": \"Remover desconto {{ code }}\",\n    \"enter_using_password\": \"Entrar com palavra-passe\",\n    \"submit\": \"Submeter\",\n    \"enter_password\": \"Introduzir palavra-passe\",\n    \"view_store_information\": \"Ver as informações da loja\",\n    \"apply\": \"Aplicar\",\n    \"open_image_in_full_screen\": \"Abrir imagem em ecrã inteiro\",\n    \"sign_in_options\": \"Outras opções de início de sessão\",\n    \"sign_up\": \"Registar-se\",\n    \"sort\": \"Ordenar\",\n    \"show_all_options\": \"Mostrar todas as opções\",\n    \"open\": \"Abrir\"\n  },\n  \"content\": {\n    \"reviews\": \"avaliações\",\n    \"language\": \"Idioma\",\n    \"localization_region_and_language\": \"Região e idioma\",\n    \"no_results_found\": \"Não foram encontrados resultados\",\n    \"cart_total\": \"Total do carrinho\",\n    \"your_cart_is_empty\": \"O seu carrinho está vazio\",\n    \"product_image\": \"Imagem de produto\",\n    \"product_information\": \"Informações de produto\",\n    \"quantity\": \"Quantidade\",\n    \"product_total\": \"Total de produto\",\n    \"cart_estimated_total\": \"Total estimado\",\n    \"seller_note\": \"Instruções especiais\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Descontos\",\n    \"discount\": \"Desconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Encargos e impostos incluídos. Descontos e <a href=\\\"{{ link }}\\\">envio</a> calculados na finalização da compra.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Encargos e impostos incluídos. Descontos e envio calculados na finalização da compra.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Impostos incluídos. Descontos e <a href=\\\"{{ link }}\\\">envio</a> calculados na finalização da compra.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Impostos incluídos. Descontos e envio calculados na finalização da compra.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Encargos incluídos. Impostos, descontos e <a href=\\\"{{ link }}\\\">envio</a> calculados na finalização da compra.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Encargos incluídos. Impostos, descontos e envio calculados na finalização da compra.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Impostos, descontos e <a href=\\\"{{ link }}\\\">envio</a> calculados na finalização da compra.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Impostos, descontos e envio calculados na finalização da compra.\",\n    \"checkout\": \"Finalizar a compra\",\n    \"cart_title\": \"Carrinho\",\n    \"price\": \"Preço\",\n    \"price_regular\": \"Preço normal\",\n    \"price_compare_at\": \"Preço comparado\",\n    \"price_sale\": \"Preço de saldo\",\n    \"duties_and_taxes_included\": \"Encargos e impostos incluídos.\",\n    \"duties_included\": \"Encargos incluídos.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Envio</a> calculado na finalização da compra.\",\n    \"taxes_included\": \"Impostos incluídos.\",\n    \"product_badge_sold_out\": \"Esgotado\",\n    \"product_badge_sale\": \"Saldo\",\n    \"search_input_label\": \"Pesquisar\",\n    \"search_input_placeholder\": \"Pesquisar\",\n    \"search_results\": \"Resultados da pesquisa\",\n    \"search_results_label\": \"Resultados da pesquisa\",\n    \"search_results_no_results\": \"Nenhum resultado encontrado para \\\"{{ terms }}\\\". Experimente outra pesquisa.\",\n    \"search_results_resource_articles\": \"Publicações no blogue\",\n    \"search_results_resource_collections\": \"Coleções\",\n    \"search_results_resource_pages\": \"Páginas\",\n    \"search_results_resource_products\": \"Produtos\",\n    \"search_results_resource_queries\": \"Sugestões de pesquisa\",\n    \"search_results_view_all\": \"Ver tudo\",\n    \"search_results_view_all_button\": \"Ver tudo\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produto\",\n      \"other\": \"{{ count }} produtos\",\n      \"many\": \"{{ count }} produtos\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Predefinição\",\n      \"grid_fieldset\": \"Grelha de coluna\",\n      \"single_item\": \"Único\",\n      \"zoom_out\": \"Menos zoom\"\n    },\n    \"unavailable\": \"Indisponível\",\n    \"collection_placeholder\": \"Título da coleção\",\n    \"product_card_placeholder\": \"Título do produto\",\n    \"recently_viewed_products\": \"Vistos recentemente\",\n    \"product_count\": \"Número de produtos\",\n    \"item_count\": {\n      \"one\": \"{{ count }} item\",\n      \"other\": \"{{ count }} itens\",\n      \"many\": \"{{ count }} itens\"\n    },\n    \"errors\": \"Erros\",\n    \"search\": \"Pesquisar\",\n    \"search_results_no_results_check_spelling\": \"Nenhum resultado encontrado para \\\"{{ terms }}\\\". Verifique a ortografia ou utilize outra palavra ou expressão.\",\n    \"featured_products\": \"Produtos em destaque\",\n    \"price_from\": \"Desde {{ price }}\",\n    \"filters\": \"Filtros\",\n    \"no_products_found\": \"Nenhum produto encontrado.\",\n    \"price_filter_html\": \"O preço mais alto é {{ price }}\",\n    \"use_fewer_filters_html\": \"Experimente utilizar menos filtros ou <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">limpar todos os filtros</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Conta\",\n    \"account_title_personalized\": \"Olá, {{ first_name }}\",\n    \"account_orders\": \"Encomendas\",\n    \"account_profile\": \"Perfil\",\n    \"discount_code\": \"Código de desconto\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Encargos e impostos incluídos. Os portes são calculados na finalização da compra.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Encargos e impostos incluídos. Os portes são calculados na finalização da compra.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Encargos incluídos. Os portes são calculados na finalização da compra.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Encargos incluídos. Os portes são calculados na finalização da compra.\",\n    \"pickup_available_at_html\": \"Recolha disponível em <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Recolha disponível, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Recolha atualmente indisponível\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Ler mais...\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Impostos e <a href=\\\"{{ link }}\\\">portes</a> calculados na finalização da compra.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Impostos e portes calculados na finalização da compra.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Impostos incluídos. Os portes são calculados na finalização da compra.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Impostos incluídos. Os portes são calculados na finalização da compra.\",\n    \"wrong_password\": \"Palavra-passe incorreta\",\n    \"view_more_details\": \"Ver mais informações\",\n    \"page_placeholder_title\": \"Título da página\",\n    \"page_placeholder_content\": \"Selecione uma página para apresentar o conteúdo.\",\n    \"powered_by\": \"Esta loja terá tecnologia\",\n    \"store_owner_link_html\": \"É o proprietário da loja? <a href=\\\"{{ link }}\\\">Inicie sessão aqui</a>\",\n    \"shipping_discount_error\": \"Os descontos de envio são apresentados na finalização da compra após adicionar um endereço\",\n    \"discount_code_error\": \"O código de desconto não pode ser aplicado ao seu carrinho\",\n    \"inventory_low_stock\": \"Stock reduzido\",\n    \"inventory_in_stock\": \"Em stock\",\n    \"inventory_out_of_stock\": \"Esgotado\",\n    \"placeholder_image\": \"Imagem de marcador de posição\",\n    \"shipping_policy\": \"Portes calculados na finalização da compra.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} restante(s)\",\n      \"other\": \"{{ count }} restante(s)\",\n      \"many\": \"{{ count }} restante(s)\"\n    },\n    \"recipient_form_send_to\": \"Enviar para\",\n    \"recipient_form_email_label\": \"E-mail do destinatário\",\n    \"recipient_form_email_label_my_email\": \"O meu e-mail\",\n    \"recipient_form_email_address\": \"Endereço de e-mail do destinatário\",\n    \"recipient_form_name_label\": \"Nome do destinatário (opcional)\",\n    \"recipient_form_message\": \"Mensagem (opcional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} caracteres usados\",\n    \"recipient_form_send_on\": \"AAAA-MM-DD\",\n    \"recipient_form_send_on_label\": \"Enviar em (opcional)\",\n    \"recipient_form_fields_visible\": \"Os campos do formulário de destinatário estão agora visíveis\",\n    \"recipient_form_fields_hidden\": \"Os campos do formulário de destinatário estão agora ocultos\",\n    \"recipient_form_error\": \"Ocorreu um erro na submissão do formulário\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} caracteres utilizados\",\n    \"terms_and_policies\": \"Termos e políticas\",\n    \"pagination\": {\n      \"nav_label\": \"Navegação por paginação\",\n      \"previous\": \"Anterior\",\n      \"next\": \"Seguinte\",\n      \"page\": \"Página {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Preços baseados em volume disponíveis\",\n    \"volume_pricing\": \"Preços baseados em volume\",\n    \"at_price_each\": \"a {{ price }}/cada\",\n    \"each\": \"{{ price }}/cada\",\n    \"each_abbreviation\": \"cada\",\n    \"price_at\": \"a\",\n    \"price_range\": \"Intervalo de preços\",\n    \"item_count_cutoff\": \"Mais de {{ count }} itens\",\n    \"cancel\": \"Cancelar\",\n    \"product_subtotal\": \"Subtotal dos produtos\",\n    \"quantity_per_item\": \"/cada\",\n    \"remove_all\": \"Remover tudo\",\n    \"remove_all_items_confirmation\": \"Remover todos os {{ count }} itens do seu carrinho?\",\n    \"remove_one_item_confirmation\": \"Remover 1 item do seu carrinho?\",\n    \"total_items\": \"Total de itens\",\n    \"variant\": \"Variante\",\n    \"variant_total\": \"Variante total\",\n    \"view_cart\": \"Ver carrinho\",\n    \"your_cart\": \"O seu carrinho\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 item adicionado ao carrinho\",\n      \"other\": \"{{ count }} itens adicionados ao carrinho\",\n      \"many\": \"{{ count }} itens adicionados ao carrinho\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Utilize o código do cartão de oferta online ou o código QR na loja\",\n      \"title\": \"Aqui está o seu saldo do cartão de oferta de {{ value }} para {{ shop }}!\",\n      \"subtext\": \"O seu cartão de oferta\",\n      \"shop_link\": \"Visite a loja online\",\n      \"add_to_apple_wallet\": \"Adicionar a Apple Wallet\",\n      \"qr_image_alt\": \"Código QR — digitalizar para resgatar cartão de oferta\",\n      \"copy_code\": \"Copiar código de cartão-de oferta\",\n      \"expiration_date\": \"Expira em {{ expires_on }}\",\n      \"copy_code_success\": \"Código copiado com sucesso\",\n      \"expired\": \"Expirado\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Palavra-passe\",\n    \"search\": \"Pesquisar\",\n    \"product_title\": \"Título do produto\",\n    \"collection_title\": \"Título da coleção\",\n    \"blog_posts\": \"Publicações no blogue\",\n    \"blog_post_title\": \"Título\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Um excerto do conteúdo da sua publicação no blogue\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Adicionar ao carrinho\",\n      \"added_to_cart\": \"Adicionado ao carrinho\",\n      \"adding_to_cart\": \"A adicionar...\",\n      \"add_to_cart_error\": \"Erro ao adicionar ao carrinho\",\n      \"sold_out\": \"Esgotado\",\n      \"unavailable\": \"Indisponível\",\n      \"quantity_error_max\": \"Este item tem um máximo de {{ maximum }}\",\n      \"quantity\": \"Quantidade\",\n      \"quantity_increments\": \"Incrementos de {{ increment }}\",\n      \"quantity_minimum\": \"Mínimo de {{ minimum }}\",\n      \"quantity_maximum\": \"Máximo de {{ maximum }}\",\n      \"in_cart\": \"no carrinho\",\n      \"default_title\": \"Título predefinido\",\n      \"sticky_add_to_cart\": \"Barra de adição rápida ao carrinho\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"a\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} comentário\",\n        \"other\": \"{{ count }} comentários\",\n        \"many\": \"{{ count }} comentários\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"Falha ao publicar comentário, resolva o seguinte:\",\n      \"heading\": \"Deixe um comentário\",\n      \"message\": \"Mensagem\",\n      \"moderated\": \"Tenha em atenção que os comentários necessitam de ser aprovados antes de serem publicados.\",\n      \"name\": \"Nome\",\n      \"post\": \"Publicar comentário\",\n      \"success_moderated\": \"Comentário publicado, a aguardar moderação\",\n      \"success\": \"Comentário publicado\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/pt-PT.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Contornos\",\n    \"collapsible_row\": \"Linha recolhível\",\n    \"colors\": \"Cores\",\n    \"custom_section\": \"Secção personalizada\",\n    \"icon\": \"Ícone\",\n    \"logo_and_favicon\": \"Logótipo e favicon\",\n    \"overlapping_blocks\": \"Blocos sobrepostos\",\n    \"rich_text_section\": \"Texto formatado\",\n    \"product_buy_buttons\": \"Botões de compra\",\n    \"product_description\": \"Descrição\",\n    \"product_price\": \"Preço\",\n    \"product_variant_picker\": \"Seletor de variante\",\n    \"slideshow\": \"Apresentação de diapositivos\",\n    \"typography\": \"Tipografia\",\n    \"video\": \"Vídeo\",\n    \"slideshow_controls\": \"Controlos da apresentação de diapositivos\",\n    \"size\": \"Tamanho\",\n    \"spacing\": \"Espaçamento\",\n    \"product_recommendations\": \"Produtos recomendados\",\n    \"product_media\": \"Conteúdo multimédia do produto\",\n    \"featured_collection\": \"Coleção em destaque\",\n    \"add_to_cart\": \"Adicionar ao carrinho\",\n    \"email_signup\": \"Registo de e-mail\",\n    \"submit_button\": \"Botão Submeter\",\n    \"grid_layout_selector\": \"Seletor de esquema de grelha\",\n    \"image\": \"Imagem\",\n    \"list_items\": \"Itens da lista\",\n    \"facets\": \"Facetas\",\n    \"variants\": \"Variantes\",\n    \"styles\": \"Estilos\",\n    \"product_cards\": \"Cartões de produto\",\n    \"buttons\": \"Botões\",\n    \"inputs\": \"Campos de introdução\",\n    \"primary_button\": \"Botão principal\",\n    \"secondary_button\": \"Botão secundário\",\n    \"popovers_and_modals\": \"Popovers e modais\",\n    \"marquee\": \"Painel rolante\",\n    \"pull_quote\": \"Citação em destaque\",\n    \"contact_form\": \"Formulário de contacto\",\n    \"featured_product\": \"Destaque de produto\",\n    \"icons_with_text\": \"Ícones com texto\",\n    \"alternating_content_rows\": \"Linhas alternadas\",\n    \"product_list\": \"Coleção em destaque\",\n    \"spacer\": \"Espaçador\",\n    \"accelerated_checkout\": \"Finalização da compra acelerada\",\n    \"accordion\": \"Acordeão\",\n    \"accordion_row\": \"Linha de acordeão\",\n    \"animations\": \"Animações\",\n    \"announcement\": \"Anúncio\",\n    \"announcement_bar\": \"Barra de anúncios\",\n    \"badges\": \"Selos\",\n    \"button\": \"Botão\",\n    \"cart\": \"Carrinho\",\n    \"cart_items\": \"Itens do carrinho\",\n    \"cart_products\": \"Produtos do carrinho\",\n    \"cart_title\": \"Carrinho\",\n    \"collection\": \"Coleção\",\n    \"collection_card\": \"Cartão de coleção\",\n    \"collection_columns\": \"Colunas da coleção\",\n    \"collection_container\": \"Coleção\",\n    \"collection_description\": \"Descrição da coleção\",\n    \"collection_image\": \"Imagem da coleção\",\n    \"collection_info\": \"Informações da coleção\",\n    \"collection_list\": \"Lista de coleções\",\n    \"collections\": \"Coleções\",\n    \"content\": \"Conteúdo\",\n    \"content_grid\": \"Grelha de conteúdo\",\n    \"details\": \"Detalhes\",\n    \"divider\": \"Divisor\",\n    \"filters\": \"Filtragem e ordenação\",\n    \"follow_on_shop\": \"Seguir na Shop\",\n    \"footer\": \"Rodapé\",\n    \"footer_utilities\": \"Utilitários do rodapé\",\n    \"group\": \"Grupo\",\n    \"header\": \"Cabeçalho\",\n    \"heading\": \"Título\",\n    \"icons\": \"Ícones\",\n    \"image_with_text\": \"Imagem com texto\",\n    \"input\": \"Campo de introdução\",\n    \"logo\": \"Logótipo\",\n    \"magazine_grid\": \"Grelha de revista\",\n    \"media\": \"Conteúdo multimédia\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Esquema para telemóvel\",\n    \"payment_icons\": \"Ícones de pagamento\",\n    \"popup_link\": \"Ligação de pop-up\",\n    \"predictive_search\": \"Popover de pesquisa\",\n    \"predictive_search_empty\": \"Pesquisa preditiva vazia\",\n    \"price\": \"Preço\",\n    \"product\": \"Produto\",\n    \"product_card\": \"Cartão de produto\",\n    \"product_card_media\": \"Conteúdo multimédia\",\n    \"product_card_rendering\": \"Renderização do cartão de produto\",\n    \"product_grid\": \"Grelha\",\n    \"product_grid_main\": \"Grelha de produtos\",\n    \"product_image\": \"Imagem de produto\",\n    \"product_information\": \"Informações do produto\",\n    \"product_review_stars\": \"Estrelas de avaliação\",\n    \"quantity\": \"Quantidade\",\n    \"row\": \"Linha\",\n    \"search\": \"Pesquisa\",\n    \"section\": \"Secção\",\n    \"selected_variants\": \"Variantes selecionadas\",\n    \"slide\": \"Diapositivo\",\n    \"social_media_links\": \"Ligações de redes sociais\",\n    \"steps\": \"Passos\",\n    \"summary\": \"Resumo\",\n    \"swatches\": \"Paletas\",\n    \"testimonials\": \"Testemunhos\",\n    \"text\": \"Texto\",\n    \"title\": \"Título\",\n    \"utilities\": \"Utilitários\",\n    \"search_input\": \"Campo de introdução da pesquisa\",\n    \"search_results\": \"Resultados da pesquisa\",\n    \"read_only\": \"Só de leitura\",\n    \"collection_title\": \"Título da coleção\",\n    \"collections_bento\": \"Lista de coleções: Bento\",\n    \"faq_section\": \"FAQ\",\n    \"hero\": \"Hero\",\n    \"jumbo_text\": \"Texto gigante\",\n    \"view_all_button\": \"Ver tudo\",\n    \"video_section\": \"Vídeo\",\n    \"custom_liquid\": \"Liquid personalizado\",\n    \"blog\": \"Blogue\",\n    \"blog_post\": \"Publicação no blogue\",\n    \"blog_posts\": \"Publicações no blogue\",\n    \"caption\": \"Legenda\",\n    \"collection_card_image\": \"Imagem\",\n    \"collection_links\": \"Ligações de coleção\",\n    \"collection_links_spotlight\": \"Ligações de coleção: Spotlight\",\n    \"collection_links_text\": \"Ligações de coleção: texto\",\n    \"collections_carousel\": \"Lista de coleções: carrossel\",\n    \"collections_editorial\": \"Lista de coleções: editorial\",\n    \"collections_grid\": \"Lista de coleções: grelha\",\n    \"copyright\": \"Direitos de autor\",\n    \"count\": \"Contagem\",\n    \"divider_section\": \"Divisor\",\n    \"drawers\": \"Gavetas\",\n    \"editorial\": \"Editorial\",\n    \"editorial_jumbo_text\": \"Editorial: texto gigante\",\n    \"hero_marquee\": \"Hero: painel rolante\",\n    \"input_fields\": \"Campos de introdução\",\n    \"local_pickup\": \"Recolha local\",\n    \"marquee_section\": \"Painel rolante\",\n    \"media_with_text\": \"Conteúdo multimédia com texto\",\n    \"page\": \"Página\",\n    \"page_content\": \"Conteúdo\",\n    \"page_layout\": \"Esquema da página\",\n    \"policy_list\": \"Ligações de políticas\",\n    \"prices\": \"Preços\",\n    \"products_carousel\": \"Coleção em destaque: carrossel\",\n    \"products_editorial\": \"Coleção em destaque: editorial\",\n    \"products_grid\": \"Coleção em destaque: grelha\",\n    \"social_link\": \"Ligação de rede social\",\n    \"split_showcase\": \"Mostruário dividido\",\n    \"variant_pickers\": \"Seletores de variantes\",\n    \"pills\": \"Pílulas\",\n    \"product_title\": \"Título do produto\",\n    \"large_logo\": \"Logótipo grande\",\n    \"product_list_button\": \"Botão Ver tudo\",\n    \"product_inventory\": \"Inventário de produto\",\n    \"description\": \"Descrição\",\n    \"featured_image\": \"Imagem em destaque\",\n    \"multicolumn\": \"Várias colunas\",\n    \"product_custom_property\": \"Instruções especiais\",\n    \"hero_bottom_aligned\": \"Hero: alinhado na parte inferior\",\n    \"blog_card\": \"Cartão de blogue\",\n    \"blog_posts_grid\": \"Publicações no blogue: grelha\",\n    \"blog_posts_carousel\": \"Publicações no blogue: carrossel\",\n    \"blog_posts_editorial\": \"Publicações no blogue: editorial\",\n    \"excerpt\": \"Excerto\",\n    \"footer_password\": \"Rodapé da palavra-passe\",\n    \"policies_and_links\": \"Políticas e ligações\",\n    \"card\": \"Cartão\",\n    \"carousel\": \"Carrossel\",\n    \"carousel_content\": \"Conteúdo do carrossel\",\n    \"quick_order_list\": \"Lista de encomendas rápidas\",\n    \"column\": \"Coluna\",\n    \"comparison_slider\": \"Controlo de deslize de comparação\",\n    \"slideshow_full_frame\": \"Apresentação de diapositivos: ecrã inteiro\",\n    \"slideshow_inset\": \"Apresentação de diapositivos: recuado\",\n    \"image_compare\": \"Comparação de imagens\",\n    \"subheading\": \"Subtítulo\",\n    \"featured_product_information\": \"Produto em destaque\",\n    \"product_hotspots\": \"Pontos de interesse do produto\",\n    \"hotspot_product\": \"Ponto de interesse\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Apresentação em camadas\"\n  },\n  \"settings\": {\n    \"alignment\": \"Alinhamento\",\n    \"autoplay\": \"Reprodução automática\",\n    \"background\": \"Fundo\",\n    \"border_radius\": \"Raio do canto\",\n    \"border_width\": \"Espessura do contorno\",\n    \"borders\": \"Contornos\",\n    \"bottom_padding\": \"Preenchimento inferior\",\n    \"button\": \"Botão\",\n    \"color\": \"Cor\",\n    \"colors\": \"Cores\",\n    \"content_alignment\": \"Alinhamento do conteúdo\",\n    \"content_direction\": \"Direção do conteúdo\",\n    \"content_position\": \"Posição do conteúdo\",\n    \"cover_image_size\": \"Tamanho da imagem de capa\",\n    \"cover_image\": \"Imagem de capa\",\n    \"custom_minimum_height\": \"Altura mínima personalizada\",\n    \"custom_width\": \"Largura personalizada\",\n    \"enable_video_looping\": \"Repetição de vídeo\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"Família de tipos de letra\",\n    \"gap\": \"Espaçamento\",\n    \"geometric_translate_y\": \"Translação geométrica Y\",\n    \"heading\": \"Título\",\n    \"icon\": \"Ícone\",\n    \"image\": \"Imagem\",\n    \"image_icon\": \"Ícone de imagem\",\n    \"image_opacity\": \"Opacidade da imagem\",\n    \"image_position\": \"Posição da imagem\",\n    \"image_ratio\": \"Proporção da imagem\",\n    \"label\": \"Etiqueta\",\n    \"line_height\": \"Altura da linha\",\n    \"link\": \"Ligação\",\n    \"layout_gap\": \"Espaçamento do esquema\",\n    \"make_section_full_width\": \"Tornar a secção de largura total\",\n    \"minimum_height\": \"Altura mínima\",\n    \"opacity\": \"Opacidade\",\n    \"overlay_opacity\": \"Opacidade da sobreposição\",\n    \"padding\": \"Preenchimento\",\n    \"primary_color\": \"Ligações\",\n    \"product\": \"Produto\",\n    \"section_width\": \"Largura da secção\",\n    \"size\": \"Tamanho\",\n    \"slide_spacing\": \"Espaçamento do diapositivo\",\n    \"slide_width\": \"Largura do diapositivo\",\n    \"slideshow_fullwidth\": \"Diapositivos de largura total\",\n    \"style\": \"Estilo\",\n    \"text\": \"Texto\",\n    \"text_case\": \"Caixa\",\n    \"top_padding\": \"Preenchimento superior\",\n    \"video\": \"Vídeo\",\n    \"video_alt_text\": \"Texto alternativo\",\n    \"video_loop\": \"Repetir vídeo\",\n    \"video_position\": \"Posição do vídeo\",\n    \"width\": \"Largura\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Limitar largura do conteúdo\",\n    \"color_scheme\": \"Esquema de cores\",\n    \"inherit_color_scheme\": \"Herdar esquema de cores\",\n    \"product_count\": \"Contagem de produtos\",\n    \"product_type\": \"Tipo de produto\",\n    \"content_width\": \"Largura do conteúdo\",\n    \"collection\": \"Coleção\",\n    \"enable_sticky_content\": \"Conteúdo fixo no computador\",\n    \"error_color\": \"Erro\",\n    \"success_color\": \"Sucesso\",\n    \"primary_font\": \"Tipo de letra principal\",\n    \"secondary_font\": \"Tipo de letra secundário\",\n    \"tertiary_font\": \"Tipo de letra terciário\",\n    \"columns\": \"Colunas\",\n    \"items_to_show\": \"Itens a apresentar\",\n    \"layout\": \"Esquema\",\n    \"layout_type\": \"Tipo\",\n    \"show_grid_layout_selector\": \"Apresentar seletor de esquema de grelha\",\n    \"view_more_show\": \"Apresentar o botão \\\"Ver mais\\\"\",\n    \"image_gap\": \"Espaçamento da imagem\",\n    \"width_desktop\": \"Largura no computador\",\n    \"width_mobile\": \"Largura em telemóvel\",\n    \"border_style\": \"Estilo do contorno\",\n    \"height\": \"Altura\",\n    \"thickness\": \"Espessura\",\n    \"stroke\": \"Traço\",\n    \"filter_style\": \"Estilo do filtro\",\n    \"swatches\": \"Paletas\",\n    \"quick_add_colors\": \"Cores da adição rápida\",\n    \"divider_color\": \"Divisor\",\n    \"border_opacity\": \"Opacidade do contorno\",\n    \"hover_background\": \"Fundo ao pairar\",\n    \"hover_borders\": \"Contornos ao pairar\",\n    \"hover_text\": \"Texto ao pairar\",\n    \"primary_hover_color\": \"Ligações ao pairar\",\n    \"primary_button_text\": \"Texto do botão principal\",\n    \"primary_button_background\": \"Fundo do botão principal\",\n    \"primary_button_border\": \"Contorno do botão principal\",\n    \"secondary_button_text\": \"Texto do botão secundário\",\n    \"secondary_button_background\": \"Fundo do botão secundário\",\n    \"secondary_button_border\": \"Contorno do botão secundário\",\n    \"shadow_color\": \"Sombra\",\n    \"limit_media_to_screen_height\": \"Limitar à altura do ecrã\",\n    \"mobile_logo_image\": \"Logótipo para telemóvel\",\n    \"video_autoplay\": \"Reprodução automática\",\n    \"video_cover_image\": \"Imagem de capa\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Origem\",\n    \"first_row_media_position\": \"Posição do conteúdo multimédia da primeira linha\",\n    \"background_color\": \"Cor de fundo\",\n    \"hide_padding\": \"Ocultar preenchimento\",\n    \"logo_font\": \"Tipo de letra do logótipo\",\n    \"size_mobile\": \"Tamanho em telemóvel\",\n    \"pixel_size_mobile\": \"Tamanho em píxeis\",\n    \"percent_size_mobile\": \"Tamanho em percentagem\",\n    \"unit\": \"Unidade\",\n    \"custom_mobile_size\": \"Tamanho personalizado para telemóvel\",\n    \"fixed_height\": \"Altura em píxeis\",\n    \"fixed_width\": \"Largura em píxeis\",\n    \"percent_height\": \"Altura em percentagem\",\n    \"percent_width\": \"Largura em percentagem\",\n    \"percent_size\": \"Tamanho em percentagem\",\n    \"pixel_size\": \"Tamanho em píxeis\",\n    \"accordion\": \"Acordeão\",\n    \"aspect_ratio\": \"Proporção\",\n    \"auto_rotate_announcements\": \"Rodar anúncios automaticamente\",\n    \"auto_rotate_slides\": \"Rodar diapositivos automaticamente\",\n    \"badge_corner_radius\": \"Raio do canto\",\n    \"badge_position\": \"Posição nos cartões\",\n    \"badge_sale_color_scheme\": \"Saldo\",\n    \"badge_sold_out_color_scheme\": \"Esgotado\",\n    \"behavior\": \"Comportamento\",\n    \"blur\": \"Desfoque da sombra\",\n    \"border\": \"Contorno\",\n    \"bottom\": \"Inferior\",\n    \"card_image_height\": \"Altura da imagem de produto\",\n    \"carousel_on_mobile\": \"Carrossel em telemóvel\",\n    \"cart_count\": \"Contagem do carrinho\",\n    \"cart_items\": \"Itens do carrinho\",\n    \"cart_related_products\": \"Produtos relacionados\",\n    \"cart_title\": \"Carrinho\",\n    \"cart_total\": \"Total do carrinho\",\n    \"cart_type\": \"Tipo\",\n    \"case\": \"Caixa\",\n    \"checkout_buttons\": \"Botões de finalização da compra acelerada\",\n    \"collection_list\": \"Coleções\",\n    \"collection_templates\": \"Modelos de coleção\",\n    \"content\": \"Conteúdo\",\n    \"corner_radius\": \"Raio do canto\",\n    \"country_region\": \"País/Região\",\n    \"currency_code\": \"Código da moeda\",\n    \"custom_height\": \"Altura personalizada\",\n    \"desktop_height\": \"Altura no computador\",\n    \"direction\": \"Direção\",\n    \"display\": \"Apresentação\",\n    \"divider_thickness\": \"Espessura do divisor\",\n    \"divider\": \"Divisor\",\n    \"dividers\": \"Divisores\",\n    \"drop_shadow\": \"Sombra projetada\",\n    \"empty_state_collection_info\": \"Apresentado antes de ser introduzida uma pesquisa\",\n    \"empty_state_collection\": \"Coleção de estado vazio\",\n    \"enable_filtering\": \"Filtros\",\n    \"enable_grid_density\": \"Controlo do esquema de grelha\",\n    \"enable_sorting\": \"Ordenação\",\n    \"enable_zoom\": \"Ativar zoom\",\n    \"equal_columns\": \"Colunas iguais\",\n    \"expand_first_group\": \"Expandir primeiro grupo\",\n    \"extend_media_to_screen_edge\": \"Expandir conteúdo multimédia até à margem do ecrã\",\n    \"extend_summary\": \"Expandir até à margem do ecrã\",\n    \"extra_large\": \"Extra grande\",\n    \"extra_small\": \"Extra pequeno\",\n    \"flag\": \"Bandeira\",\n    \"font_price\": \"Tipo de letra do preço\",\n    \"font_weight\": \"Peso do tipo de letra\",\n    \"font\": \"Tipo de letra\",\n    \"full_width_first_image\": \"Primeira imagem em largura total\",\n    \"full_width_on_mobile\": \"Largura total em telemóvel\",\n    \"heading_preset\": \"Predefinição de título\",\n    \"hide_unselected_variant_media\": \"Ocultar conteúdo multimédia de variantes não selecionadas\",\n    \"horizontal_gap\": \"Espaçamento horizontal\",\n    \"horizontal_offset\": \"Deslocamento horizontal da sombra\",\n    \"hover_behavior\": \"Comportamento ao pairar\",\n    \"icon_background\": \"Fundo do ícone\",\n    \"icons\": \"Ícones\",\n    \"image_border_radius\": \"Raio do canto da imagem\",\n    \"installments\": \"Prestações\",\n    \"integrated_button\": \"Botão integrado\",\n    \"language_selector\": \"Seletor de idioma\",\n    \"large\": \"Grande\",\n    \"left_padding\": \"Preenchimento à esquerda\",\n    \"left\": \"Esquerda\",\n    \"letter_spacing\": \"Espaçamento entre letras\",\n    \"limit_product_details_width\": \"Limitar largura dos detalhes do produto\",\n    \"link_preset\": \"Predefinição de ligação\",\n    \"links\": \"Ligações\",\n    \"logo\": \"Logótipo\",\n    \"loop\": \"Repetição\",\n    \"make_details_sticky_desktop\": \"Fixo no computador\",\n    \"max_width\": \"Largura máxima\",\n    \"media_height\": \"Altura do conteúdo multimédia\",\n    \"media_overlay\": \"Sobreposição do conteúdo multimédia\",\n    \"media_position\": \"Posição do conteúdo multimédia\",\n    \"media_type\": \"Tipo de conteúdo multimédia\",\n    \"media_width\": \"Largura do conteúdo multimédia\",\n    \"menu\": \"Menu\",\n    \"mobile_columns\": \"Colunas em telemóvel\",\n    \"mobile_height\": \"Altura em telemóvel\",\n    \"mobile_quick_add\": \"Adição rápida em telemóvel\",\n    \"motion_direction\": \"Direção do movimento\",\n    \"motion\": \"Movimento\",\n    \"movement_direction\": \"Direção do movimento\",\n    \"navigation_bar_color_scheme\": \"Esquema de cores da barra de navegação\",\n    \"navigation_bar\": \"Barra de navegação\",\n    \"navigation\": \"Navegação\",\n    \"open_new_tab\": \"Abrir ligação num novo separador\",\n    \"overlay_color\": \"Cor da sobreposição\",\n    \"overlay\": \"Sobreposição\",\n    \"padding_bottom\": \"Preenchimento inferior\",\n    \"padding_horizontal\": \"Preenchimento horizontal\",\n    \"padding_top\": \"Preenchimento superior\",\n    \"page_width\": \"Largura da página\",\n    \"pagination\": \"Paginação\",\n    \"placement\": \"Ponto de apresentação\",\n    \"position\": \"Posição\",\n    \"preset\": \"Predefinição\",\n    \"product_cards\": \"Cartões de produto\",\n    \"product_pages\": \"Páginas de produto\",\n    \"product_templates\": \"Modelos de produto\",\n    \"products\": \"Produtos\",\n    \"quick_add\": \"Adição rápida\",\n    \"ratio\": \"Proporção\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Contagem de avaliações\",\n    \"right\": \"Direita\",\n    \"row_height\": \"Altura da linha\",\n    \"row\": \"Linha\",\n    \"seller_note\": \"Permitir nota ao vendedor\",\n    \"shape\": \"Forma\",\n    \"show_as_accordion\": \"Apresentar como acordeão em telemóvel\",\n    \"show_sale_price_first\": \"Apresentar primeiro o preço de saldo\",\n    \"show_tax_info\": \"Informações fiscais\",\n    \"show\": \"Apresentar\",\n    \"small\": \"Pequeno\",\n    \"speed\": \"Velocidade\",\n    \"statement\": \"Extrato\",\n    \"sticky_header\": \"Cabeçalho fixo\",\n    \"text_hierarchy\": \"Hierarquia do texto\",\n    \"text_presets\": \"Predefinições de texto\",\n    \"title\": \"Título\",\n    \"top\": \"Superior\",\n    \"type\": \"Tipo\",\n    \"type_preset\": \"Predefinição de texto\",\n    \"underline_thickness\": \"Espessura do sublinhado\",\n    \"variant_images\": \"Imagens da variante\",\n    \"vendor\": \"Fornecedor\",\n    \"vertical_gap\": \"Espaçamento vertical\",\n    \"vertical_offset\": \"Deslocamento vertical da sombra\",\n    \"vertical_on_mobile\": \"Vertical em telemóvel\",\n    \"view_all_as_last_card\": \"\\\"Ver tudo\\\" como último cartão\",\n    \"weight\": \"Peso\",\n    \"wrap\": \"Moldar\",\n    \"read_only\": \"Só de leitura\",\n    \"always_stack_buttons\": \"Empilhar sempre os botões\",\n    \"custom_mobile_width\": \"Largura personalizada para telemóvel\",\n    \"gradient_direction\": \"Direção do gradiente\",\n    \"overlay_style\": \"Estilo da sobreposição\",\n    \"shadow_opacity\": \"Opacidade da sombra\",\n    \"show_filter_label\": \"Etiquetas de texto para filtros aplicados\",\n    \"show_swatch_label\": \"Etiquetas de texto para paletas\",\n    \"transparent_background\": \"Fundo transparente\",\n    \"account\": \"Conta\",\n    \"align_baseline\": \"Alinhar linha de base do texto\",\n    \"add_discount_code\": \"Permitir descontos no carrinho\",\n    \"background_overlay\": \"Sobreposição de fundo\",\n    \"background_media\": \"Conteúdo multimédia de fundo\",\n    \"border_thickness\": \"Espessura do contorno\",\n    \"bottom_row\": \"Linha inferior\",\n    \"button_text_case\": \"Caixa do texto\",\n    \"card_size\": \"Tamanho do cartão\",\n    \"auto_open_cart_drawer\": \"\\\"Adicionar ao carrinho\\\" abre a gaveta automaticamente\",\n    \"collection_count\": \"Contagem da coleção\",\n    \"custom_liquid\": \"Código Liquid\",\n    \"default\": \"Predefinido\",\n    \"default_logo\": \"Logótipo predefinido\",\n    \"divider_width\": \"Largura do divisor\",\n    \"headings\": \"Títulos\",\n    \"hide_logo_on_home_page\": \"Ocultar logótipo na página inicial\",\n    \"horizontal_padding\": \"Preenchimento horizontal\",\n    \"inverse\": \"Inverso\",\n    \"inverse_logo\": \"Logótipo inverso\",\n    \"layout_style\": \"Estilo\",\n    \"length\": \"Comprimento\",\n    \"mobile_card_size\": \"Tamanho do cartão em telemóvel\",\n    \"mobile_pagination\": \"Paginação em telemóvel\",\n    \"open_row_by_default\": \"Abrir linha por predefinição\",\n    \"page\": \"Página\",\n    \"page_transition_enabled\": \"Transição de página\",\n    \"right_padding\": \"Preenchimento à direita\",\n    \"search\": \"Pesquisa\",\n    \"search_icon\": \"Ícone de pesquisa\",\n    \"search_position\": \"Posição\",\n    \"search_row\": \"Linha\",\n    \"show_author\": \"Autor\",\n    \"show_alignment\": \"Apresentar alinhamento\",\n    \"show_count\": \"Apresentar contagem\",\n    \"show_date\": \"Data\",\n    \"show_pickup_availability\": \"Apresentar disponibilidade para recolha\",\n    \"show_search\": \"Apresentar pesquisa\",\n    \"use_inverse_logo\": \"Utilizar logótipo inverso\",\n    \"vertical_padding\": \"Preenchimento vertical\",\n    \"visibility\": \"Visibilidade\",\n    \"product_corner_radius\": \"Raio do canto do produto\",\n    \"card_corner_radius\": \"Raio do canto do cartão\",\n    \"alignment_mobile\": \"Alinhamento em telemóvel\",\n    \"animation_repeat\": \"Repetir animação\",\n    \"blurred_reflection\": \"Reflexo desfocado\",\n    \"card_hover_effect\": \"Efeito de pairar no cartão\",\n    \"collection_title_case\": \"Caixa do título da coleção\",\n    \"inventory_threshold\": \"Limite de stock baixo\",\n    \"product_and_card_title_case\": \"Caixa do título do produto e do cartão\",\n    \"product_title_case\": \"Caixa do título do produto\",\n    \"reflection_opacity\": \"Opacidade do reflexo\",\n    \"show_inventory_quantity\": \"Apresentar quantidade de stock baixo\",\n    \"text_label_case\": \"Caixa da etiqueta de texto\",\n    \"transition_to_main_product\": \"Transição do cartão de produto para a página de produto\",\n    \"show_second_image_on_hover\": \"Apresentar segunda imagem ao pairar\",\n    \"media\": \"Conteúdo multimédia\",\n    \"product_card_carousel\": \"Apresentar carrossel\",\n    \"media_fit\": \"Ajuste do conteúdo multimédia\",\n    \"scroll_speed\": \"Tempo até ao próximo anúncio\",\n    \"show_powered_by_shopify\": \"Apresentar \\\"Com tecnologia Shopify\\\"\",\n    \"gift_card_form\": \"Formulário de cartão de oferta\",\n    \"seller_note_open_by_default\": \"Abrir nota ao vendedor por predefinição\",\n    \"add_to_cart_animation\": \"Adicionar ao carrinho\",\n    \"custom_link\": \"Ligação personalizada\",\n    \"product_custom_property\": {\n      \"heading\": \"Título\",\n      \"description\": \"Descrição\",\n      \"key\": \"Nome da propriedade\",\n      \"key_info\": \"Não pode ficar em branco e tem de ser único para cada bloco. É apresentado no carrinho, na finalização da compra e nos detalhes da encomenda.\",\n      \"placeholder_text\": \"Texto do marcador de posição\",\n      \"default_heading\": \"Personalize o seu produto\",\n      \"default_placeholder\": \"Introduza as suas instruções especiais\",\n      \"default_property_key\": \"Instruções especiais\",\n      \"max_length\": \"Máximo de carateres\",\n      \"required\": \"Introdução obrigatória para adicionar o item ao carrinho\",\n      \"input_type\": \"Tipo de introdução\",\n      \"input_type_text\": \"Texto\",\n      \"input_type_checkbox\": \"Caixa de verificação\",\n      \"content_settings\": \"Definições de conteúdo\",\n      \"buyers_input\": \"Introdução do comprador\",\n      \"checkbox_label\": \"Etiqueta da caixa de verificação\",\n      \"default_checkbox_label\": \"Incluir embrulho para oferta\",\n      \"heading_preset\": \"Título\",\n      \"description_preset\": \"Descrição\",\n      \"input_preset\": \"Introdução\",\n      \"checkbox_preset\": \"Etiqueta da caixa de verificação\"\n    },\n    \"blog\": \"Blogue\",\n    \"post_count\": \"Contagem de publicações\",\n    \"animation\": \"Animação\",\n    \"top_level_size\": \"Tamanho do nível superior\",\n    \"empty_cart_button_link\": \"Ligação do botão para o carrinho vazio\",\n    \"auto_load_products\": \"Carregar produtos automaticamente ao navegar\",\n    \"products_per_page\": \"Produtos por página\",\n    \"custom_mobile_media\": \"Mostrar conteúdo multimédia diferente no telemóvel\",\n    \"stack_media_on_mobile\": \"Empilhar conteúdo multimédia\",\n    \"media_type_1\": \"Tipo de conteúdo multimédia\",\n    \"media_type_2\": \"Tipo de conteúdo multimédia 2\",\n    \"full_frame_on_mobile\": \"Largura total no telemóvel\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"Variantes por página\",\n    \"image_1\": \"Imagem 1\",\n    \"image_2\": \"Imagem 2\",\n    \"after_image\": \"Imagem posterior\",\n    \"before_image\": \"Imagem anterior\",\n    \"cs_slider_style\": \"Estilo do controlo de deslize\",\n    \"cs_slider_color\": \"Cor do controlo de deslize\",\n    \"cs_slider_inner_color\": \"Cor interior do controlo de deslize\",\n    \"text_on_images\": \"Texto nas imagens\",\n    \"card_height\": \"Altura do cartão\",\n    \"submenu_size\": \"Tamanho do submenu\",\n    \"desktop_position\": \"Posição no computador\",\n    \"desktop_pagination\": \"Paginação no computador\",\n    \"bullseye_color\": \"Cor interior\",\n    \"hotspot_color\": \"Cor do ponto de interesse\",\n    \"product_price_typography\": \"Tipografia do preço do produto\",\n    \"product_title_typography\": \"Tipografia do título do produto\",\n    \"x_position\": \"Posição horizontal\",\n    \"y_position\": \"Posição vertical\",\n    \"enable_sticky_add_to_cart\": \"Barra fixa de adicionar ao carrinho\",\n    \"sticky_add_to_cart\": \"Barra fixa de adicionar ao carrinho\",\n    \"actions_display_style\": \"Estilo do menu\"\n  },\n  \"options\": {\n    \"apple\": \"Maçã\",\n    \"arrow\": \"Seta\",\n    \"auto\": \"Automático\",\n    \"banana\": \"Banana\",\n    \"bottle\": \"Garrafa\",\n    \"box\": \"Caixa\",\n    \"buttons\": \"Botões\",\n    \"carrot\": \"Cenoura\",\n    \"center\": \"Centro\",\n    \"chat_bubble\": \"Balão de conversa\",\n    \"clipboard\": \"Área de transferência\",\n    \"contain\": \"Conter\",\n    \"counter\": \"Contador\",\n    \"cover\": \"Cobrir\",\n    \"custom\": \"Personalizado\",\n    \"dairy_free\": \"Sem laticínios\",\n    \"dairy\": \"Laticínios\",\n    \"default\": \"Predefinido\",\n    \"dropdowns\": \"Menus pendentes\",\n    \"dots\": \"Pontos\",\n    \"dryer\": \"Secador\",\n    \"end\": \"Fim\",\n    \"eye\": \"Olho\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Preencher\",\n    \"fire\": \"Fogo\",\n    \"fit\": \"Ajustar\",\n    \"full\": \"Total\",\n    \"full_and_page\": \"Fundo total, conteúdo com largura da página\",\n    \"gluten_free\": \"Sem glúten\",\n    \"heading\": \"Título\",\n    \"heart\": \"Coração\",\n    \"horizontal\": \"Horizontal\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Ferro de engomar\",\n    \"landscape\": \"Paisagem\",\n    \"large\": \"Grande\",\n    \"leaf\": \"Folha\",\n    \"leather\": \"Pele\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"Raio\",\n    \"link\": \"Ligação\",\n    \"lipstick\": \"Batom\",\n    \"lock\": \"Cadeado\",\n    \"lowercase\": \"minúsculas\",\n    \"m\": \"M\",\n    \"map_pin\": \"Pino de mapa\",\n    \"medium\": \"Médio\",\n    \"none\": \"Nenhum\",\n    \"numbers\": \"Números\",\n    \"nut_free\": \"Sem frutos secos\",\n    \"outline\": \"Contorno\",\n    \"page\": \"Página\",\n    \"pants\": \"Calças\",\n    \"paw_print\": \"Pegada\",\n    \"pepper\": \"Pimenta\",\n    \"perfume\": \"Perfume\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Avião\",\n    \"plant\": \"Planta\",\n    \"portrait\": \"Retrato\",\n    \"price_tag\": \"Etiqueta de preço\",\n    \"question_mark\": \"Ponto de interrogação\",\n    \"recycle\": \"Reciclar\",\n    \"return\": \"Devolução\",\n    \"ruler\": \"Régua\",\n    \"s\": \"S\",\n    \"sentence\": \"Frase\",\n    \"serving_dish\": \"Travessa\",\n    \"shirt\": \"Camisa\",\n    \"shoe\": \"Sapato\",\n    \"silhouette\": \"Silhueta\",\n    \"small\": \"Pequeno\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Floco de neve\",\n    \"solid\": \"Sólido\",\n    \"space_between\": \"Espaço entre\",\n    \"square\": \"Quadrado\",\n    \"star\": \"Estrela\",\n    \"start\": \"Início\",\n    \"stopwatch\": \"Cronómetro\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Camião\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Maiúsculas\",\n    \"vertical\": \"Vertical\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Lavagem\",\n    \"circle\": \"Círculo\",\n    \"swatches\": \"Paletas\",\n    \"full_and_page_offset_left\": \"Fundo total, conteúdo com largura da página, deslocado para a esquerda\",\n    \"full_and_page_offset_right\": \"Fundo total, conteúdo com largura da página, deslocado para a direita\",\n    \"offset_left\": \"Deslocado para a esquerda\",\n    \"offset_right\": \"Deslocado para a direita\",\n    \"page_center_aligned\": \"Página, alinhado ao centro\",\n    \"page_left_aligned\": \"Página, alinhado à esquerda\",\n    \"page_right_aligned\": \"Página, alinhado à direita\",\n    \"button\": \"Botão\",\n    \"caption\": \"Legenda\",\n    \"h1\": \"Título 1\",\n    \"h2\": \"Título 2\",\n    \"h3\": \"Título 3\",\n    \"h4\": \"Título 4\",\n    \"h5\": \"Título 5\",\n    \"h6\": \"Título 6\",\n    \"paragraph\": \"Parágrafo\",\n    \"primary\": \"Principal\",\n    \"secondary\": \"Secundário\",\n    \"tertiary\": \"Terciário\",\n    \"chevron_left\": \"Divisa para a esquerda\",\n    \"chevron_right\": \"Divisa para a direita\",\n    \"diamond\": \"Diamante\",\n    \"grid\": \"Grelha\",\n    \"parallelogram\": \"Paralelogramo\",\n    \"rounded\": \"Arredondado\",\n    \"fit_content\": \"Ajustar\",\n    \"pills\": \"Pílulas\",\n    \"heavy\": \"Pesado\",\n    \"thin\": \"Fino\",\n    \"drawer\": \"Gaveta\",\n    \"preview\": \"Pré-visualização\",\n    \"text\": \"Texto\",\n    \"video_uploaded\": \"Carregado\",\n    \"video_external_url\": \"URL externo\",\n    \"up\": \"Para cima\",\n    \"down\": \"Para baixo\",\n    \"gradient\": \"Gradiente\",\n    \"aspect_ratio\": \"Proporção\",\n    \"fixed\": \"Fixo\",\n    \"pixel\": \"Píxel\",\n    \"percent\": \"Percentagem\",\n    \"above_carousel\": \"Acima do carrossel\",\n    \"all\": \"Tudo\",\n    \"always\": \"Sempre\",\n    \"arrows_large\": \"Setas grandes\",\n    \"arrows\": \"Setas\",\n    \"balance\": \"Equilíbrio\",\n    \"bento\": \"Bento\",\n    \"black\": \"Preto\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Corpo do texto (grande)\",\n    \"body_regular\": \"Corpo do texto (normal)\",\n    \"body_small\": \"Corpo do texto (pequeno)\",\n    \"bold\": \"Negrito\",\n    \"bottom_left\": \"Inferior esquerdo\",\n    \"bottom_right\": \"Inferior direito\",\n    \"bottom\": \"Inferior\",\n    \"capitalize\": \"Maiúsculas iniciais\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Carrossel\",\n    \"check_box\": \"Caixa de verificação\",\n    \"chevron_large\": \"Divisas grandes\",\n    \"chevron\": \"Divisa\",\n    \"chevrons\": \"Divisas\",\n    \"classic\": \"Clássico\",\n    \"collection_images\": \"Imagens da coleção\",\n    \"color\": \"Cor\",\n    \"complementary\": \"Complementar\",\n    \"dissolve\": \"Dissolver\",\n    \"dotted\": \"Pontilhado\",\n    \"editorial\": \"Editorial\",\n    \"extra_large\": \"Extra grande\",\n    \"extra_small\": \"Extra pequeno\",\n    \"featured_collections\": \"Coleções em destaque\",\n    \"featured_products\": \"Produtos em destaque\",\n    \"font_primary\": \"Principal\",\n    \"font_secondary\": \"Secundário\",\n    \"font_tertiary\": \"Terciário\",\n    \"forward\": \"Para a frente\",\n    \"full_screen\": \"Ecrã inteiro\",\n    \"heading_extra_large\": \"Título (extra grande)\",\n    \"heading_extra_small\": \"Título (extra pequeno)\",\n    \"heading_large\": \"Título (grande)\",\n    \"heading_regular\": \"Título (normal)\",\n    \"heading_small\": \"Título (pequeno)\",\n    \"icon\": \"Ícone\",\n    \"image\": \"Imagem\",\n    \"input\": \"Campo de introdução\",\n    \"inside_carousel\": \"Dentro do carrossel\",\n    \"inverse_large\": \"Inverso grande\",\n    \"inverse\": \"Inverso\",\n    \"large_arrows\": \"Setas grandes\",\n    \"large_chevrons\": \"Divisas grandes\",\n    \"left\": \"Esquerda\",\n    \"light\": \"Claro\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Largo\",\n    \"media_first\": \"Conteúdo multimédia primeiro\",\n    \"media_second\": \"Conteúdo multimédia em segundo\",\n    \"modal\": \"Modal\",\n    \"narrow\": \"Estreito\",\n    \"never\": \"Nunca\",\n    \"next_to_carousel\": \"Ao lado do carrossel\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Sem quebra de linha\",\n    \"off_media\": \"Fora do conteúdo multimédia\",\n    \"on_media\": \"No conteúdo multimédia\",\n    \"on_scroll_up\": \"Ao deslocar para cima\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Pílula\",\n    \"plus\": \"Mais\",\n    \"pretty\": \"Bonito\",\n    \"price\": \"Preço\",\n    \"primary_style\": \"Estilo principal\",\n    \"rectangle\": \"Retângulo\",\n    \"regular\": \"Normal\",\n    \"related\": \"Relacionado\",\n    \"reverse\": \"Inverter\",\n    \"rich_text\": \"Texto formatado\",\n    \"right\": \"Direita\",\n    \"secondary_style\": \"Estilo secundário\",\n    \"semibold\": \"Seminegrito\",\n    \"shaded\": \"Sombreado\",\n    \"show_second_image\": \"Mostrar segunda imagem\",\n    \"single\": \"Único\",\n    \"slide_left\": \"Deslizar para a esquerda\",\n    \"slide_up\": \"Deslizar para cima\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Empilhar\",\n    \"text_only\": \"Apenas texto\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniaturas\",\n    \"tight\": \"Apertado\",\n    \"top_left\": \"Superior esquerdo\",\n    \"top_right\": \"Canto superior direito\",\n    \"top\": \"Superior\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Sublinhado\",\n    \"video\": \"Vídeo\",\n    \"wide\": \"Largo\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"Destaque\",\n    \"below_image\": \"Abaixo da imagem\",\n    \"body\": \"Corpo do texto\",\n    \"button_primary\": \"Botão principal\",\n    \"button_secondary\": \"Botão secundário\",\n    \"compact\": \"Compacto\",\n    \"crop_to_fit\": \"Recortar para ajustar\",\n    \"hidden\": \"Oculto\",\n    \"hint\": \"Dica\",\n    \"maintain_aspect_ratio\": \"Manter proporção\",\n    \"off\": \"Desligado\",\n    \"on_image\": \"Na imagem\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"Padrão\",\n    \"subheading\": \"Subtítulo\",\n    \"blur\": \"Desfocar\",\n    \"lift\": \"Elevar\",\n    \"reveal\": \"Revelar\",\n    \"scale\": \"Escala\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Com dicas\",\n    \"below_media\": \"Abaixo do conteúdo multimédia\",\n    \"full_frame\": \"Ecrã inteiro\",\n    \"icons\": \"Ícones\"\n  },\n  \"content\": {\n    \"advanced\": \"Avançado\",\n    \"background_image\": \"Imagem de fundo\",\n    \"background_video\": \"Vídeo de fundo\",\n    \"block_size\": \"Tamanho do bloco\",\n    \"borders\": \"Contornos\",\n    \"describe_the_video_for\": \"Descreva o vídeo para os clientes que utilizam leitores de ecrã. [Saber mais](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Tamanho da secção\",\n    \"slideshow_width\": \"Largura do diapositivo\",\n    \"typography\": \"Tipografia\",\n    \"width_is_automatically_optimized\": \"A largura é otimizada automaticamente para telemóvel.\",\n    \"complementary_products\": \"Os produtos complementares têm de ser configurados com a aplicação Search & Discovery. [Saber mais](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"As colunas serão otimizadas automaticamente para telemóvel\",\n    \"content_width\": \"A largura do conteúdo aplica-se apenas quando a largura da secção está definida como largura total.\",\n    \"responsive_font_sizes\": \"Os tamanhos são ajustados automaticamente para todos os tamanhos de ecrã\",\n    \"buttons\": \"Botões\",\n    \"swatches\": \"Paletas\",\n    \"variant_settings\": \"Definições de variantes\",\n    \"background\": \"Fundo\",\n    \"cards_layout\": \"Esquema dos cartões\",\n    \"section_layout\": \"Esquema da secção\",\n    \"mobile_size\": \"Tamanho para telemóvel\",\n    \"appearance\": \"Aspeto\",\n    \"arrows\": \"Setas\",\n    \"body_size\": \"Tamanho do corpo do texto\",\n    \"bottom_row_appearance\": \"Aspeto da linha inferior\",\n    \"carousel_navigation\": \"Navegação do carrossel\",\n    \"carousel_pagination\": \"Paginação do carrossel\",\n    \"copyright\": \"Direitos de autor\",\n    \"edit_logo_in_theme_settings\": \"Edite o logótipo nas [definições do tema](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Edite a formatação do preço nas [definições do tema](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Edite o estilo das variantes nas [definições do tema](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Os registos adicionam [perfis de cliente](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"Para que o botão seja apresentado, o canal Shop tem de estar instalado e o Shop Pay ativado. [Saber mais](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Tipos de letra\",\n    \"grid\": \"Grelha\",\n    \"heading_size\": \"Tamanho do título\",\n    \"image\": \"Imagem\",\n    \"input\": \"Campo de introdução\",\n    \"layout\": \"Esquema\",\n    \"link\": \"Ligação\",\n    \"link_padding\": \"Preenchimento da ligação\",\n    \"localization\": \"Localização\",\n    \"logo\": \"Logótipo\",\n    \"margin\": \"Margem\",\n    \"media\": \"Conteúdo multimédia\",\n    \"media_1\": \"Conteúdo multimédia 1\",\n    \"media_2\": \"Conteúdo multimédia 2\",\n    \"menu\": \"Menu\",\n    \"mobile_layout\": \"Esquema para telemóvel\",\n    \"padding\": \"Preenchimento\",\n    \"padding_desktop\": \"Preenchimento para computador\",\n    \"paragraph\": \"Parágrafo\",\n    \"policies\": \"Políticas\",\n    \"popup\": \"Pop-up\",\n    \"search\": \"Pesquisa\",\n    \"size\": \"Tamanho\",\n    \"social_media\": \"Redes sociais\",\n    \"submit_button\": \"Botão Submeter\",\n    \"text_presets\": \"Predefinições de texto\",\n    \"transparent_background\": \"Fundo transparente\",\n    \"typography_primary\": \"Tipografia principal\",\n    \"typography_secondary\": \"Tipografia secundária\",\n    \"typography_tertiary\": \"Tipografia terciária\",\n    \"mobile_width\": \"Largura para telemóvel\",\n    \"width\": \"Largura\",\n    \"carousel\": \"Carrossel\",\n    \"colors\": \"Cores\",\n    \"collection_page\": \"Página de coleção\",\n    \"customer_account\": \"Conta de cliente\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Edite a coleção de estado vazio nas [definições do tema](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Esquema de grelha\",\n    \"home_page\": \"Página inicial\",\n    \"images\": \"Imagens\",\n    \"inverse_logo_info\": \"Utilizado quando o fundo do cabeçalho transparente está definido como Inverso\",\n    \"manage_customer_accounts\": \"[Gerir visibilidade](/admin/settings/customer_accounts) nas definições da conta de cliente. As contas legadas não são suportadas.\",\n    \"manage_policies\": \"[Gerir políticas](/admin/settings/legal)\",\n    \"product_page\": \"Página de produto\",\n    \"text\": \"Texto\",\n    \"thumbnails\": \"Miniaturas\",\n    \"visibility\": \"Visibilidade\",\n    \"visible_if_collection_has_more_products\": \"Visível se a coleção tiver mais produtos do que os apresentados\",\n    \"app_required_for_ratings\": \"É necessária uma aplicação para as classificações de produto. [Saber mais](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ícone\",\n    \"resource_reference_collection_card\": \"Apresenta a coleção da secção principal\",\n    \"resource_reference_collection_card_image\": \"Apresenta a imagem da coleção principal\",\n    \"resource_reference_collection_title\": \"Apresenta o título da coleção principal\",\n    \"resource_reference_product\": \"Liga-se automaticamente ao produto principal\",\n    \"resource_reference_product_card\": \"Apresenta o produto da secção principal\",\n    \"resource_reference_product_inventory\": \"Apresenta o inventário do produto principal\",\n    \"resource_reference_product_price\": \"Apresenta o preço do produto principal\",\n    \"resource_reference_product_recommendations\": \"Apresenta recomendações com base no produto principal\",\n    \"resource_reference_product_review\": \"Apresenta as avaliações do produto principal\",\n    \"resource_reference_product_swatches\": \"Apresenta as paletas do produto principal\",\n    \"resource_reference_product_title\": \"Apresenta o título do produto principal\",\n    \"resource_reference_product_variant_picker\": \"Apresenta as variantes do produto principal\",\n    \"resource_reference_product_media\": \"Apresenta o conteúdo multimédia do produto principal\",\n    \"product_media\": \"Conteúdo multimédia do produto\",\n    \"manage_store_name\": \"[Gerir nome da loja](/admin/settings/general?edit=storeName)\",\n    \"section_link\": \"Ligação da secção\",\n    \"gift_card_form_description\": \"Os clientes podem enviar cartões de oferta para o e-mail de um destinatário com uma mensagem pessoal. [Saber mais](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Título\",\n    \"resource_reference_product_custom_property\": \"Adicione campos de introdução personalizáveis para recolher informações personalizadas que serão adicionadas a este item de linha da encomenda, ficando visíveis posteriormente nos detalhes da encomenda.\",\n    \"block_link\": \"Ligação do bloco\",\n    \"submenu_feature\": \"Funcionalidade de submenu\",\n    \"cart_features\": \"Funcionalidades do carrinho\",\n    \"email_signup\": \"Registo de e-mail\",\n    \"mobile_media\": \"Conteúdo multimédia para telemóvel\",\n    \"mobile_media_2\": \"Conteúdo multimédia para telemóvel 2\",\n    \"navigation\": \"Navegação\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Posição do popover\",\n    \"resource_reference_product_sku\": \"Apresenta o SKU do produto principal\",\n    \"content_layout\": \"Esquema do conteúdo\",\n    \"mobile_media_1\": \"Conteúdo multimédia para telemóvel 1\",\n    \"utilities\": \"Utilitários\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Partilhe informações sobre a sua marca com os seus clientes. Descreva um produto, faça anúncios ou dê as boas-vindas aos clientes na sua loja.</p>\",\n    \"bestseller_h2\": \"<h2>Mais vendidos</h2>\",\n    \"bestseller_h3\": \"<h3>Mais vendidos</h3>\",\n    \"bestseller\": \"<p>Mais vendido</p>\",\n    \"build_better\": \"<p>Acreditamos na construção de algo melhor</p>\",\n    \"contact_us\": \"<h2>Contacte-nos</h2>\",\n    \"discover_bestsellers\": \"<p>Descubra os mais vendidos que conquistaram os nossos clientes com a sua combinação perfeita de funcionalidade e estilo.</p>\",\n    \"everythings_starts_with_why\": \"<p>Tudo o que fazemos começa com um porquê</p>\",\n    \"explore_latest_products\": \"<p>Explore os nossos produtos mais recentes.</p>\",\n    \"faq\": \"<h3>Perguntas frequentes</h3>\",\n    \"first_to_know\": \"<p>Seja a primeira pessoa a saber sobre novas coleções e ofertas especiais. </p>\",\n    \"free_returns\": \"<p>Devoluções gratuitas durante 30 dias</p>\",\n    \"free_shipping_over\": \"<p>Envio gratuito para encomendas superiores a 50 $</p>\",\n    \"goal_for_every_customer\": \"<p>O nosso objetivo é que cada cliente fique totalmente satisfeito com a sua compra. Se não for o caso, informe-nos e faremos o nosso melhor para resolver a situação consigo.</p>\",\n    \"home_to_shirts\": \"<p>Início → Camisas</p>\",\n    \"intentional_design\": \"<h2>Design intencional</h2>\",\n    \"introducing_h2\": \"<h2><em>Apresentamos</em></h2>\",\n    \"latest_products\": \"<p>Apresentamos os nossos produtos mais recentes, criados especialmente para esta estação. Compre os seus favoritos antes que esgotem!</p>\",\n    \"made_local_and_global\": \"<p>Os nossos produtos são fabricados local e globalmente. Selecionamos cuidadosamente os nossos parceiros de fabrico para garantir que os nossos produtos têm alta qualidade e um preço justo.</p>\",\n    \"made_with_care_h2\": \"<h2>Feito com cuidado</h2>\",\n    \"made_with_care_extended\": \"<p>Feito com cuidado e incondicionalmente adorado pelos nossos clientes, este bestseller de assinatura excede todas as expectativas.</p>\",\n    \"made_with_care\": \"<p>Feito com cuidado e incondicionalmente adorado pelos nossos clientes.</p>\",\n    \"make_things_better_extended\": \"<p>Criamos artigos que funcionam melhor e duram mais tempo. Os nossos produtos resolvem problemas reais com um design simples e materiais honestos.</p>\",\n    \"make_things_better\": \"<p>Criamos artigos que funcionam melhor e duram mais tempo.</p>\",\n    \"may_also_like\": \"<h4>Também poderá gostar de</h4>\",\n    \"new_arrivals_h1\": \"<h1>Novidades</h1>\",\n    \"new_arrivals_h2\": \"<h2>Novidades</h2>\",\n    \"new_arrivals_h3\": \"<h3>Novidades</h3>\",\n    \"product_launch\": \"<p>Espreite os bastidores do nosso mais recente lançamento de produto.</p>\",\n    \"product_story\": \"<p>No coração de cada produto existe uma história única, impulsionada pela nossa paixão pela qualidade e inovação. Cada item melhora o seu dia a dia e desperta alegria.</p>\",\n    \"real_people\": \"<p>Pessoas reais a criar produtos fantásticos</p>\",\n    \"related_product\": \"<h3>Produtos relacionados</h3>\",\n    \"return_policy\": \"<h2>Qual é a política de devoluções?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 avaliações</p>\",\n    \"shipping_based_on_location\": \"<p>O envio é calculado com base na sua localização e nos itens da sua encomenda. Saberá sempre o preço do envio antes de efetuar a compra.</p>\",\n    \"shop_by_collection\": \"<h3>Comprar por coleção</h3>\",\n    \"signature_products\": \"<h2>O nosso produto de assinatura</h2>\",\n    \"styled_with\": \"<h3>Combinado com</h3>\",\n    \"subscribe\": \"<h2>Subscreva os nossos e-mails</h2>\",\n    \"team_with_goal\": \"<h2>Uma equipa com um objetivo</h2>\",\n    \"unable_to_accept_returns\": \"<p>Não podemos aceitar devoluções de determinados artigos. Estes serão devidamente assinalados antes da compra.</p>\",\n    \"work_quickly_to_ship\": \"<p>Trabalharemos rapidamente para enviar a sua encomenda o mais depressa possível. Assim que a sua encomenda for enviada, receberá um e-mail com mais informações. Os tempos de entrega variam consoante a sua localização.</p>\",\n    \"join_our_email_list\": \"<h2>Junte-se à nossa lista de e-mails</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Receba ofertas exclusivas e acesso antecipado a novos produtos.</p>\",\n    \"artistry_in_action\": \"<p>Mestria em ação </p>\",\n    \"authentic_materials\": \"<p>Materiais autênticos, sem cedências </p>\",\n    \"bold_style_recognizable\": \"<p>Um estilo arrojado que se reconhece em qualquer lugar</p>\",\n    \"discover_elevated_design\": \"<p>Descubra um design sofisticado </p>\",\n    \"expert_construction_finish\": \"<p>Construção especializada e um acabamento impecável</p>\",\n    \"made_to_last\": \"<p>Feito para durar </p>\",\n    \"pieces_better_with_time\": \"<p>Peças que só melhoram com o tempo e o uso </p>\",\n    \"quality_you_can_feel\": \"<h2>Qualidade que se sente</h2>\",\n    \"uncompromising_standards\": \"<p>Padrões intransigentes </p>\",\n    \"featured_collection_h2\": \"<h2>Coleção em destaque</h2>\",\n    \"shop_collection\": \"<p>Descubra a nossa coleção selecionada, com favoritos escolhidos a dedo que aliam estilo e qualidade.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Comprar agora\",\n    \"collapsible_row\": \"Linha recolhível\",\n    \"heading\": \"Título\",\n    \"email_signup_button_label\": \"Subscrever\",\n    \"accordion_heading\": \"Título do acordeão\",\n    \"contact_form_button_label\": \"Submeter\",\n    \"popup_link\": \"Ligação do pop-up\",\n    \"sign_up\": \"Registo\",\n    \"welcome_to_our_store\": \"Damos-lhe as boas-vindas à nossa loja\",\n    \"be_bold\": \"Seja arrojado.\",\n    \"shop_our_latest_arrivals\": \"Compre as nossas novidades!\",\n    \"are_purchases_final_sale\": \"Alguma compra é de venda final?\",\n    \"care_instructions\": \"Instruções de manutenção\",\n    \"cart\": \"Carrinho\",\n    \"discover_collection\": \"Descubra a coleção\",\n    \"fit\": \"ajuste\",\n    \"how_much_for_shipping\": \"Qual é o custo de envio?\",\n    \"learn_more\": \"Saber mais\",\n    \"manufacturing\": \"Fabrico\",\n    \"materials\": \"Materiais\",\n    \"return_policy\": \"Política de devoluções\",\n    \"shipping\": \"Envio\",\n    \"shop_now_button_label\": \"Comprar agora\",\n    \"sign_up_button_label\": \"Registar\",\n    \"submit_button_label\": \"Submeter\",\n    \"up_the_ante\": \"Subir\\na\\naposta\",\n    \"view_all_button_label\": \"Ver tudo\",\n    \"what_is_return_policy\": \"Qual é a política de devoluções?\",\n    \"when_will_order_arrive\": \"Quando receberei a minha encomenda?\",\n    \"where_are_products_made\": \"Onde são fabricados os vossos produtos?\",\n    \"trending_now\": \"Tendências do momento\",\n    \"shop_the_look\": \"Comprar visual semelhante\",\n    \"bestsellers\": \"Mais vendidos\",\n    \"featured_collection\": \"Coleção em destaque\",\n    \"new_arrivals\": \"Novidades\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Descreva o vídeo para utilizadores de tecnologia de apoio\",\n    \"video_autoplay\": \"Os vídeos serão silenciados por predefinição\",\n    \"video_external\": \"Utilize um URL do YouTube ou do Vimeo\",\n    \"carousel_layout_on_mobile\": \"O carrossel é sempre utilizado no telemóvel\",\n    \"carousel_hover_behavior_not_supported\": \"O efeito de pairar \\\"Carrossel\\\" não é suportado quando o tipo \\\"Carrossel\\\" está selecionado ao nível da secção\",\n    \"grid_layout_on_mobile\": \"O esquema de grelha é utilizado para telemóvel\",\n    \"logo_font\": \"Aplica-se apenas quando não está selecionado um logótipo\",\n    \"checkout_buttons\": \"Permite que os compradores finalizem a compra mais rapidamente e pode melhorar a conversão. [Saber mais](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Título personalizado\",\n    \"edit_presets_in_theme_settings\": \"Edite as predefinições nas [definições do tema](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Personalize os filtros com a [aplicação Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"manage_countries_regions\": \"[Gerir países/regiões](/admin/settings/markets)\",\n    \"manage_languages\": \"[Gerir idiomas](/admin/settings/languages)\",\n    \"transparent_background\": \"Reveja cada modelo onde o fundo transparente é aplicado para garantir a legibilidade\",\n    \"aspect_ratio_adjusted\": \"Ajustado em alguns esquemas\",\n    \"custom_liquid\": \"Adicione fragmentos de aplicação ou outro código para criar personalizações avançadas. [Saber mais](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Utilizado para filtros aplicados, códigos de desconto e sugestões de pesquisa\",\n    \"applies_on_image_only\": \"Aplica-se apenas a imagens\",\n    \"hover_effects\": \"Aplica-se a cartões de produto e de coleção\",\n    \"hide_logo_on_home_page_help\": \"O logótipo permanecerá visível quando o cabeçalho fixo estiver ativo\",\n    \"media_type_info\": \"As funcionalidades são preenchidas a partir das ligações do menu\",\n    \"logo_height\": \"Afeta apenas o logótipo do cabeçalho\",\n    \"actions_display_style\": \"Os ícones são sempre utilizados em telemóvel\"\n  },\n  \"categories\": {\n    \"basic\": \"Básico\",\n    \"collection\": \"Coleção\",\n    \"collection_list\": \"Lista de coleções\",\n    \"footer\": \"Rodapé\",\n    \"forms\": \"Formulários\",\n    \"header\": \"Cabeçalho\",\n    \"layout\": \"Esquema\",\n    \"links\": \"Ligações\",\n    \"product\": \"Produto\",\n    \"product_list\": \"Coleção em destaque\",\n    \"banners\": \"Banners\",\n    \"collections\": \"Coleções\",\n    \"custom\": \"Personalizado\",\n    \"decorative\": \"Decorativo\",\n    \"products\": \"Produtos\",\n    \"other_sections\": \"Outras\",\n    \"storytelling\": \"Narrativa\",\n    \"text\": \"Texto\"\n  }\n}\n"
  },
  {
    "path": "locales/ro.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Încarcă clipul video: {{ description }}\",\n    \"sold_out\": \"Stoc epuizat\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"Adresă de e-mail\",\n      \"success\": \"Mulțumim pentru că te-ai abonat!\"\n    },\n    \"filter\": \"Filtrează\",\n    \"contact_form\": {\n      \"name\": \"Nume\",\n      \"email\": \"Adresă de e-mail\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Comentariu\",\n      \"post_success\": \"Îți mulțumim că ne-ai contactat. Vom reveni cât mai curând posibil.\",\n      \"error_heading\": \"Ajustează următoarele:\"\n    },\n    \"payment_methods\": \"Metode de plată\",\n    \"slider_label\": \"Cursor\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Redă modelul 3D\",\n    \"play_video\": \"Redă videoclipul\",\n    \"unit_price\": \"Preț unitar\",\n    \"country_results_count\": \"{{ count }} rezultate\",\n    \"slideshow_pause\": \"Întrerupe prezentarea de diapozitive\",\n    \"slideshow_play\": \"Redă prezentarea de diapozitive\",\n    \"remove_item\": \"Elimină {{ title}}\",\n    \"skip_to_text\": \"Salt la conținut\",\n    \"skip_to_product_info\": \"Salt la informațiile despre produs\",\n    \"skip_to_results_list\": \"Salt la lista de rezultate\",\n    \"new_window\": \"Se deschide într-o fereastră nouă.\",\n    \"slideshow_next\": \"Diapozitivul următor\",\n    \"slideshow_previous\": \"Diapozitivul anterior\",\n    \"close_dialog\": \"Închide dialogul\",\n    \"reset_search\": \"Resetează căutarea\",\n    \"search_results_count\": \"{{ count }} rezultate ale căutării găsite pentru „{{ query }}”\",\n    \"search_results_no_results\": \"Nu s-au găsit rezultate pentru „{{ query }}”\",\n    \"filters\": \"Filtre\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtru aplicat\",\n      \"other\": \"{{ count }} filtre aplicate\",\n      \"few\": \"{{ count }} filtre aplicate\"\n    },\n    \"account\": \"Cont\",\n    \"cart\": \"Coș\",\n    \"cart_count\": \"Total articole în coș\",\n    \"menu\": \"Meniu\",\n    \"country_region\": \"Țară/regiune\",\n    \"slide_status\": \"Diapozitivul {{ index }} din {{ length }}\",\n    \"scroll_to\": \"Derulează la {{ title }}\",\n    \"loading_product_recommendations\": \"Se încarcă recomandările de produse\",\n    \"discount\": \"Aplică un cod de reducere\",\n    \"discount_applied\": \"Cod de reducere aplicat: {{ code }}\",\n    \"pause_video\": \"Pune pe pauză videoclipul\",\n    \"inventory_status\": \"Stare inventar\",\n    \"find_country\": \"Găsește țara\",\n    \"localization_region_and_language\": \"Selectorul de regiune și de limbă\",\n    \"decrease_quantity\": \"Scade cantitatea\",\n    \"increase_quantity\": \"Crește cantitatea\",\n    \"quantity\": \"Cantitate\",\n    \"rating\": \"Evaluarea acestui produs este de {{ rating }} din 5\",\n    \"nested_product\": \"{{ product_title }} pentru {{ parent_title }}\",\n    \"discount_menu\": \"Coduri de reduceri\",\n    \"remove\": \"Elimină\",\n    \"view_pricing_info\": \"Vezi informațiile de tarifare\",\n    \"open_hotspot\": \"Pornește hotspot\",\n    \"slideshow\": \"Prezentare de diapozitive\",\n    \"header_navigation_label\": \"principală\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Adaugă în coș\",\n    \"clear_all\": \"Golește tot\",\n    \"remove\": \"Elimină\",\n    \"view_in_your_space\": \"Vezi în spațiul tău\",\n    \"show_filters\": \"Filtrează\",\n    \"clear\": \"Golește\",\n    \"continue_shopping\": \"Continuă cumpărăturile\",\n    \"log_in_html\": \"Ai un cont? <a href=\\\"{{ link }}\\\">Conectează-te</a> pentru a finaliza comanda mai rapid.\",\n    \"see_items\": {\n      \"one\": \"Vezi {{ count }} articol\",\n      \"other\": \"Vezi {{ count }} articole\",\n      \"few\": \"Vezi {{ count }} articole\"\n    },\n    \"view_all\": \"Afișează tot\",\n    \"add\": \"Adaugă\",\n    \"choose\": \"Alege\",\n    \"added\": \"Adăugat\",\n    \"show_less\": \"Afișează mai puțin\",\n    \"show_more\": \"Afișează mai mult\",\n    \"close\": \"Închide\",\n    \"more\": \"Mai multe\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Închide dialogul\",\n    \"reset\": \"Resetează\",\n    \"remove_discount\": \"Elimină codul de reducere {{ code }}\",\n    \"enter_using_password\": \"Accesează folosind parola\",\n    \"submit\": \"Trimite\",\n    \"enter_password\": \"Introdu parola\",\n    \"view_store_information\": \"Vezi informațiile despre magazin\",\n    \"apply\": \"Aplică\",\n    \"back\": \"Înapoi\",\n    \"log_in\": \"Conectează-te\",\n    \"log_out\": \"Deconectează-te\",\n    \"open_image_in_full_screen\": \"Deschide imaginea în modul ecran complet\",\n    \"sign_in_options\": \"Alte opțiuni de conectare\",\n    \"sign_up\": \"Înscrie-te\",\n    \"sort\": \"Sortează\",\n    \"show_all_options\": \"Afișează toate opțiunile\",\n    \"open\": \"Deschidere\"\n  },\n  \"content\": {\n    \"reviews\": \"recenzii\",\n    \"language\": \"Limba\",\n    \"localization_region_and_language\": \"Regiunea și limba\",\n    \"no_results_found\": \"Nu s-a găsit niciun rezultat\",\n    \"cart_total\": \"Total coș de cumpărături\",\n    \"your_cart_is_empty\": \"Coșul tău de cumpărături este gol\",\n    \"product_image\": \"Imagine produs\",\n    \"product_information\": \"Informații despre produs\",\n    \"quantity\": \"Cantitate\",\n    \"product_total\": \"Total produs\",\n    \"cart_estimated_total\": \"Total estimat\",\n    \"seller_note\": \"Instrucțiuni speciale\",\n    \"cart_subtotal\": \"Subtotal\",\n    \"discounts\": \"Reduceri\",\n    \"discount\": \"Reducere\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Taxe și taxe vamale incluse. Reducerile și <a href=\\\"{{ link }}\\\">transportul</a> sunt calculate la finalizarea comenzii.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Taxe și taxe vamale incluse. Reducerile și transportul sunt calculate la finalizarea comenzii.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Taxe incluse. Reducerile și <a href=\\\"{{ link }}\\\">transportul</a> sunt calculate la finalizarea comenzii.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Taxe incluse. Reducerile și transportul sunt calculate la finalizarea comenzii.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Taxe vamale incluse. Taxele, reducerile și <a href=\\\"{{ link }}\\\">transportul</a> sunt calculate la finalizarea comenzii.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Taxe vamale incluse. Taxele, reducerile și transportul sunt calculate la finalizarea comenzii.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Taxele, reducerile și <a href=\\\"{{ link }}\\\">transportul</a> sunt calculate la finalizarea comenzii.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Taxele, reducerile și transportul sunt calculate la finalizarea comenzii.\",\n    \"checkout\": \"Finalizează comanda\",\n    \"cart_title\": \"Coș\",\n    \"price\": \"Preț\",\n    \"price_regular\": \"Preț obișnuit\",\n    \"price_compare_at\": \"Compararea prețurilor\",\n    \"price_sale\": \"Preț la ofertă\",\n    \"duties_and_taxes_included\": \"Taxele vamale și impozitele sunt incluse.\",\n    \"duties_included\": \"Taxe vamale incluse.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Taxele de expediere</a> sunt calculate la finalizarea comenzii.\",\n    \"taxes_included\": \"Impozite incluse.\",\n    \"product_badge_sold_out\": \"Stoc epuizat\",\n    \"product_badge_sale\": \"Promoție\",\n    \"grid_view\": {\n      \"default_view\": \"Implicit\",\n      \"grid_fieldset\": \"Grilă de coloane\",\n      \"single_item\": \"Singur\",\n      \"zoom_out\": \"Micșorează\"\n    },\n    \"search_input_label\": \"Caută\",\n    \"search_input_placeholder\": \"Caută\",\n    \"search_results\": \"Rezultatele căutării\",\n    \"search_results_label\": \"Rezultatele căutării\",\n    \"search_results_no_results\": \"Nu s-au găsit rezultate pentru „{{ terms }}”. Încearcă o altă căutare.\",\n    \"search_results_resource_articles\": \"Postări pe blog\",\n    \"search_results_resource_collections\": \"Colecții\",\n    \"search_results_resource_pages\": \"Pagini\",\n    \"search_results_resource_products\": \"Produse\",\n    \"search_results_resource_queries\": \"Caută sugestii\",\n    \"search_results_view_all\": \"Vezi tot\",\n    \"search_results_view_all_button\": \"Vezi tot\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produs\",\n      \"other\": \"{{ count }} produse\",\n      \"few\": \"{{ count }} produse\"\n    },\n    \"unavailable\": \"Indisponibil\",\n    \"recently_viewed_products\": \"Vizualizate recent\",\n    \"collection_placeholder\": \"Titlul colecției\",\n    \"product_card_placeholder\": \"Titlul produsului\",\n    \"product_count\": \"Număr de produse\",\n    \"item_count\": {\n      \"one\": \"{{ count }} articol\",\n      \"other\": \"{{ count }} articole\",\n      \"few\": \"{{ count }} articole\"\n    },\n    \"errors\": \"Erori\",\n    \"price_from\": \"Începând de la {{ price }}\",\n    \"search\": \"Caută\",\n    \"search_results_no_results_check_spelling\": \"Nu s-au găsit rezultate pentru „{{ terms }}”. Verifică ortografia sau folosește un alt cuvânt sau o altă expresie.\",\n    \"featured_products\": \"Produse recomandate\",\n    \"no_products_found\": \"Nu s-au găsit produse.\",\n    \"use_fewer_filters_html\": \"Încearcă să folosești mai puține filtre sau <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">șterge toate filtrele</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"filters\": \"Filtre\",\n    \"price_filter_html\": \"Cel mai mare preț este {{ price }}\",\n    \"discount_code\": \"Cod de reducere\",\n    \"pickup_available_at_html\": \"Ridicare disponibilă la <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Ridicare disponibilă, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Ridicarea nu este disponibilă momentan\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Citește mai mult...\",\n    \"wrong_password\": \"Parolă incorectă\",\n    \"account_title\": \"Cont\",\n    \"account_title_personalized\": \"Salut, {{ first_name }}\",\n    \"account_orders\": \"Comenzi\",\n    \"account_profile\": \"Profil\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxele și taxele vamale sunt incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Taxele și taxele vamale sunt incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxe vamale incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Taxe vamale incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxele și <a href=\\\"{{ link }}\\\">costul transportului</a> sunt calculate la momentul efectuării plății.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Taxele și costul transportului sunt calculate la momentul efectuării plății.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Taxe incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Taxe incluse. Transportul este calculat la momentul efectuării plății.\",\n    \"view_more_details\": \"Vezi mai multe detalii\",\n    \"page_placeholder_title\": \"Titlul paginii\",\n    \"page_placeholder_content\": \"Selectează o pagină pentru a afișa conținutul acesteia.\",\n    \"placeholder_image\": \"Imagine substituent\",\n    \"powered_by\": \"Acest magazin va fi oferit de\",\n    \"store_owner_link_html\": \"Ești proprietarul magazinului? <a href=\\\"{{ link }}\\\">Conectează-te aici</a>\",\n    \"shipping_discount_error\": \"Reducerile pentru transport sunt afișate pe pagina de efectuare a plății, după ce ai adăugat adresa\",\n    \"discount_code_error\": \"Codul de reducere nu poate fi aplicat coșului tău de cumpărături\",\n    \"inventory_low_stock\": \"Stoc redus\",\n    \"inventory_in_stock\": \"În stoc\",\n    \"inventory_out_of_stock\": \"Stoc epuizat\",\n    \"shipping_policy\": \"Transportul este calculat la momentul efectuării plății.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} rămas\",\n      \"other\": \"{{ count }} rămas\",\n      \"few\": \"{{ count }} rămas\"\n    },\n    \"recipient_form_send_to\": \"Destinatar\",\n    \"recipient_form_email_label\": \"Adresa de e-mail a destinatarului\",\n    \"recipient_form_email_label_my_email\": \"Adresa mea de e-mail\",\n    \"recipient_form_email_address\": \"Adresa de e-mail a destinatarului\",\n    \"recipient_form_name_label\": \"Numele destinatarului (opțional)\",\n    \"recipient_form_message\": \"Mesaj (opțional)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} caractere folosite\",\n    \"recipient_form_send_on\": \"AAAA-LL-ZZ\",\n    \"recipient_form_send_on_label\": \"Data trimiterii (opțional)\",\n    \"recipient_form_fields_visible\": \"Câmpurile formularului pentru destinatar sunt acum vizibile\",\n    \"recipient_form_fields_hidden\": \"Câmpurile formularului pentru destinatar sunt acum ascunse\",\n    \"recipient_form_error\": \"A apărut o eroare la trimiterea formularului\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} caractere folosite\",\n    \"terms_and_policies\": \"Termeni și politici\",\n    \"pagination\": {\n      \"nav_label\": \"Navigare în paginare\",\n      \"previous\": \"Anteriorul\",\n      \"next\": \"Următorul\",\n      \"page\": \"Pagina {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Tarifarea în funcție de volum este disponibilă\",\n    \"volume_pricing\": \"Tarifare în funcție de volum\",\n    \"at_price_each\": \"la {{ price }}/buc.\",\n    \"each\": \"{{ price }}/buc.\",\n    \"each_abbreviation\": \"buc.\",\n    \"price_at\": \"la\",\n    \"price_range\": \"Intervalul de prețuri\",\n    \"cancel\": \"Anulează\",\n    \"product_subtotal\": \"Subtotal produs\",\n    \"quantity_per_item\": \"/buc\",\n    \"remove_all\": \"Elimină tot\",\n    \"remove_all_items_confirmation\": \"Elimini toate cele {{ count }} articole din coș?\",\n    \"remove_one_item_confirmation\": \"Elimini 1 articol din coș?\",\n    \"total_items\": \"Total articole\",\n    \"variant\": \"Variantă\",\n    \"variant_total\": \"Total variantă\",\n    \"view_cart\": \"Vizualizează coșul\",\n    \"your_cart\": \"Coșul tău\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 articol a fost adăugat în coș\",\n      \"other\": \"{{ count }} articole au fost adăugate în coș\",\n      \"few\": \"{{ count }} articole au fost adăugate în coș\"\n    },\n    \"item_count_cutoff\": \"Peste {{ count }} articole\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Folosește codul cardului cadou online sau codul QR în magazin\",\n      \"title\": \"Iată soldul aferent cardurilor cadou, în valoare de {{ value }}, pentru {{ shop }}!\",\n      \"subtext\": \"Cardul tău cadou\",\n      \"shop_link\": \"Vizitează magazinul online\",\n      \"add_to_apple_wallet\": \"Adaugă la Apple Wallet\",\n      \"qr_image_alt\": \"Cod QR – scanează pentru valorificarea cardului cadou\",\n      \"copy_code\": \"Copiază codul cardului cadou\",\n      \"expiration_date\": \"Expiră pe {{ expires_on }}\",\n      \"copy_code_success\": \"Codul a fost copiat cu succes\",\n      \"expired\": \"Expirat\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} comentariu\",\n        \"other\": \"{{ count }} comentarii\",\n        \"few\": \"{{ count }} comentarii\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Adresă de e-mail\",\n      \"error\": \"Comentariul nu s-a putut publica, remediază următoarele probleme:\",\n      \"heading\": \"Lasă un comentariu\",\n      \"message\": \"Mesaj\",\n      \"moderated\": \"Nu uita: comentariile trebuie aprobate înainte de publicare.\",\n      \"name\": \"Nume\",\n      \"post\": \"Postează comentariul\",\n      \"success_moderated\": \"Comentariul a fost postat, se așteaptă moderarea\",\n      \"success\": \"Comentariu postat\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"la\"\n  },\n  \"placeholders\": {\n    \"password\": \"Parolă\",\n    \"search\": \"Caută\",\n    \"product_title\": \"Titlul produsului\",\n    \"collection_title\": \"Titlul colecției\",\n    \"blog_posts\": \"Postări pe blog\",\n    \"blog_post_title\": \"Titlu\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Data\",\n    \"blog_post_description\": \"Un fragment din postarea pe blog\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Adaugă în coș\",\n      \"adding_to_cart\": \"Se adaugă...\",\n      \"added_to_cart\": \"Adăugat în coș\",\n      \"add_to_cart_error\": \"Eroare la adăugarea în coș\",\n      \"quantity_error_max\": \"Acest articol are maxim {{ maximum }}\",\n      \"sold_out\": \"Stoc epuizat\",\n      \"unavailable\": \"Indisponibil\",\n      \"quantity\": \"Cantitate\",\n      \"quantity_increments\": \"Creșteri de {{ increment }}\",\n      \"quantity_minimum\": \"Minim {{ minimum }}\",\n      \"quantity_maximum\": \"Maxim {{ maximum }}\",\n      \"in_cart\": \"în coș\",\n      \"default_title\": \"Titlu implicit\",\n      \"sticky_add_to_cart\": \"Bara de adăugare rapidă în coș\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/ru.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Загрузить видео: {{ description }}\",\n    \"sold_out\": \"Продано\",\n    \"email_signup\": {\n      \"label\": \"Электронный адрес\",\n      \"placeholder\": \"Адрес электронной почты\",\n      \"success\": \"Спасибо, что подписались!\"\n    },\n    \"filter\": \"Фильтровать\",\n    \"payment_methods\": \"Способы оплаты\",\n    \"contact_form\": {\n      \"name\": \"Имя\",\n      \"email\": \"Электронный адрес\",\n      \"phone\": \"Телефон\",\n      \"comment\": \"Комментарий\",\n      \"post_success\": \"Спасибо за обращение. Мы свяжемся с вами как можно скорее.\",\n      \"error_heading\": \"Измените следующие элементы:\"\n    },\n    \"slider_label\": \"Ползунок\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Открыть объемную модель\",\n    \"play_video\": \"Воспроизвести видео\",\n    \"unit_price\": \"Цена за единицу\",\n    \"country_results_count\": \"Результаты: {{ count }}\",\n    \"slideshow_pause\": \"Приостановить показ слайд-шоу\",\n    \"slideshow_play\": \"Воспроизвести слайд-шоу\",\n    \"remove_item\": \"Удалить «{{ title}}»\",\n    \"skip_to_text\": \"Перейти к контенту\",\n    \"skip_to_product_info\": \"Перейти к информации о продукте\",\n    \"skip_to_results_list\": \"Перейти к списку результатов\",\n    \"new_window\": \"Откроется в новом окне.\",\n    \"slideshow_next\": \"Следующий слайд\",\n    \"slideshow_previous\": \"Предыдущий слайд\",\n    \"close_dialog\": \"Закрыть диалоговое окно\",\n    \"reset_search\": \"Сбросить поиск\",\n    \"search_results_count\": \"Найдено {{ count }} результата(-ов) по запросу «{{ query }}»\",\n    \"search_results_no_results\": \"По запросу «{{ query }}» ничего не найдено\",\n    \"filters\": \"Фильтры\",\n    \"account\": \"Учетная запись\",\n    \"cart\": \"Корзина\",\n    \"cart_count\": \"Всего товаров в корзине\",\n    \"filter_count\": {\n      \"one\": \"Применен {{ count }} фильтр\",\n      \"other\": \"Применены {{ count }} фильтра(-ов)\",\n      \"few\": \"Применены {{ count }} фильтра(-ов)\",\n      \"many\": \"Применены {{ count }} фильтра(-ов)\"\n    },\n    \"menu\": \"Меню\",\n    \"country_region\": \"Страна/регион\",\n    \"slide_status\": \"Слайд {{ index }} из {{ length }}\",\n    \"scroll_to\": \"Прокрутить до {{ title }}\",\n    \"loading_product_recommendations\": \"Загрузка рекомендаций товаров\",\n    \"discount\": \"Применить промокод\",\n    \"discount_applied\": \"Примененный промокод : {{ code }}\",\n    \"inventory_status\": \"Статус ассортимента\",\n    \"pause_video\": \"Приостановить видео\",\n    \"find_country\": \"Найти страну\",\n    \"localization_region_and_language\": \"Выбор региона и языка\",\n    \"decrease_quantity\": \"Убрать позиции\",\n    \"increase_quantity\": \"Добавить позиции\",\n    \"quantity\": \"Количество\",\n    \"rating\": \"Рейтинг этого продукта {{ rating }} из 5\",\n    \"nested_product\": \"{{ product_title }} для товара \\\"{{ parent_title }}\\\"\",\n    \"discount_menu\": \"Коды скидок\",\n    \"remove\": \"Удалить\",\n    \"view_pricing_info\": \"Посмотреть информацию о ценах\",\n    \"open_hotspot\": \"Открыть точку наибольшей активности\",\n    \"slideshow\": \"Слайд-шоу\",\n    \"header_navigation_label\": \"Основная\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Добавить в корзину\",\n    \"clear_all\": \"Удалить все\",\n    \"remove\": \"Удалить\",\n    \"view_in_your_space\": \"Просматривайте в реальных условиях\",\n    \"show_filters\": \"Фильтровать\",\n    \"clear\": \"Очистить\",\n    \"continue_shopping\": \"Продолжить покупки\",\n    \"log_in_html\": \"Уже есть учетная запись? <a href=\\\"{{ link }}\\\">Войдите</a>, чтобы быстро оформить заказ.\",\n    \"see_items\": {\n      \"one\": \"Смотреть {{ count }} товар\",\n      \"other\": \"Смотреть {{ count }} товара(-ов)\",\n      \"few\": \"Смотреть {{ count }} товара(-ов)\",\n      \"many\": \"Смотреть {{ count }} товара(-ов)\"\n    },\n    \"view_all\": \"Посмотреть все\",\n    \"add\": \"Добавить\",\n    \"choose\": \"Выбрать\",\n    \"added\": \"Добавлено\",\n    \"show_less\": \"Показать меньше\",\n    \"show_more\": \"Показать больше\",\n    \"close\": \"Закрыть\",\n    \"more\": \"Еще\",\n    \"zoom\": \"Увеличить\",\n    \"close_dialog\": \"Закрыть диалоговое окно\",\n    \"reset\": \"Сбросить\",\n    \"enter_using_password\": \"Войти с помощью пароля\",\n    \"submit\": \"Отправить\",\n    \"enter_password\": \"Введите пароль\",\n    \"back\": \"Назад\",\n    \"log_in\": \"Войти в систему\",\n    \"log_out\": \"Выйти\",\n    \"remove_discount\": \"Удалить скидку {{ code }}\",\n    \"view_store_information\": \"Сведения о магазине\",\n    \"apply\": \"Применить\",\n    \"sign_in_options\": \"Другие способы входа\",\n    \"sign_up\": \"Регистрация\",\n    \"open_image_in_full_screen\": \"Открыть изображение во весь экран\",\n    \"sort\": \"Сортировать\",\n    \"show_all_options\": \"Показать все варианты\",\n    \"open\": \"Открыть\"\n  },\n  \"content\": {\n    \"reviews\": \"отз.\",\n    \"no_results_found\": \"Результатов не найдено\",\n    \"language\": \"Язык\",\n    \"localization_region_and_language\": \"Регион и язык\",\n    \"cart_total\": \"Итого по корзине\",\n    \"your_cart_is_empty\": \"Корзина пуста\",\n    \"product_image\": \"Изображение товара\",\n    \"product_information\": \"Информация о товаре\",\n    \"quantity\": \"Количество\",\n    \"product_total\": \"Итого\",\n    \"cart_estimated_total\": \"Ориентировочная общая сумма\",\n    \"seller_note\": \"Особые примечания\",\n    \"cart_subtotal\": \"Промежуточный итог\",\n    \"discounts\": \"Скидки\",\n    \"discount\": \"Скидка\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Пошлины и налоги включены. Скидки и <a href=\\\"{{ link }}\\\">стоимость доставки</a> рассчитываются при оформлении заказа.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Пошлины и налоги включены. Скидки и стоимость доставки рассчитываются при оформлении заказа.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Налоги включены. Скидки и <a href=\\\"{{ link }}\\\">стоимость доставки</a> рассчитываются при оформлении заказа.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Налоги включены. Скидки и стоимость доставки рассчитываются при оформлении заказа.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Пошлины включены. Налоги, скидки и <a href=\\\"{{ link }}\\\">стоимость доставки</a> рассчитываются при оформлении заказа.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Пошлины включены. Налоги, скидки и стоимость доставки рассчитываются при оформлении заказа.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Налоги, скидки и <a href=\\\"{{ link }}\\\">стоимость доставки</a> рассчитываются при оформлении заказа.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Налоги, скидки и стоимость доставки рассчитываются при оформлении заказа.\",\n    \"checkout\": \"Оформить заказ\",\n    \"cart_title\": \"Корзина\",\n    \"price\": \"Цена\",\n    \"price_regular\": \"Обычная цена\",\n    \"price_compare_at\": \"Сравнить по цене\",\n    \"price_sale\": \"Цена со скидкой\",\n    \"duties_and_taxes_included\": \"Пошлины и налоги включены.\",\n    \"duties_included\": \"Пошлины включены.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Стоимость доставки</a> рассчитывается при оформлении заказа.\",\n    \"taxes_included\": \"Налоги включены.\",\n    \"product_badge_sold_out\": \"Распродано\",\n    \"product_badge_sale\": \"Распродажа\",\n    \"search_input_label\": \"Поиск\",\n    \"search_input_placeholder\": \"Поиск\",\n    \"search_results\": \"Результаты поиска\",\n    \"search_results_label\": \"Результаты поиска\",\n    \"search_results_no_results\": \"По запросу «{{ terms }}» ничего не найдено. Попробуйте другой поисковый запрос.\",\n    \"search_results_resource_articles\": \"Статьи в блоге\",\n    \"search_results_resource_collections\": \"Коллекции\",\n    \"search_results_resource_pages\": \"Страницы\",\n    \"search_results_resource_products\": \"Товары\",\n    \"search_results_resource_queries\": \"Рекомендации по поиску\",\n    \"search_results_view_all\": \"Посмотреть все\",\n    \"search_results_view_all_button\": \"Посмотреть все\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} товар\",\n      \"other\": \"Товаров: {{ count }}\",\n      \"few\": \"Товаров: {{ count }}\",\n      \"many\": \"Товаров: {{ count }}\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"По умолчанию\",\n      \"grid_fieldset\": \"Сетка столбцов\",\n      \"single_item\": \"Одиночный\",\n      \"zoom_out\": \"Уменьшить\"\n    },\n    \"recently_viewed_products\": \"Недавно просмотренные\",\n    \"unavailable\": \"Недоступно\",\n    \"collection_placeholder\": \"Название коллекции\",\n    \"product_card_placeholder\": \"Название продукта\",\n    \"product_count\": \"Количество товаров\",\n    \"item_count\": {\n      \"one\": \"{{ count }} товар\",\n      \"other\": \"{{ count }} товаров\",\n      \"few\": \"{{ count }} товаров\",\n      \"many\": \"{{ count }} товаров\"\n    },\n    \"errors\": \"Ошибки\",\n    \"price_from\": \"От {{ price }}\",\n    \"featured_products\": \"Рекомендуемые продукты\",\n    \"filters\": \"Фильтры\",\n    \"no_products_found\": \"Продукты не найдены.\",\n    \"price_filter_html\": \"Максимальная цена: {{ price }}\",\n    \"use_fewer_filters_html\": \"Попробуйте использовать меньше фильтров или <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">сбросьте все фильтры</a>.\",\n    \"search\": \"Поиск\",\n    \"search_results_no_results_check_spelling\": \"По запросу «{{ terms }}» ничего не найдено. Проверьте правописание или выберите другие слова либо фразу.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Подробнее...\",\n    \"wrong_password\": \"Неправильный пароль\",\n    \"account_title\": \"Учетная запись\",\n    \"account_title_personalized\": \"Здравствуйте, {{ first_name }}!\",\n    \"account_orders\": \"Заказы\",\n    \"account_profile\": \"Профиль\",\n    \"discount_code\": \"Промокод\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Пошлины и налоги включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Пошлины и налоги включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Пошлины включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Пошлины включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"pickup_available_at_html\": \"Самовывоз доступен: <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Доступен самовывоз, {{ pickup_time }}\",\n    \"pickup_not_available\": \"В настоящее время самовывоз недоступен\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Налоги и <a href=\\\"{{ link }}\\\">стоимость доставки</a>, рассчитанные при оформлении заказа.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Налоги и стоимость доставки, рассчитанные при оформлении заказа.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Налоги включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Налоги включены. Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"view_more_details\": \"Подробнее\",\n    \"inventory_low_stock\": \"Заканчивается\",\n    \"inventory_in_stock\": \"В наличии\",\n    \"inventory_out_of_stock\": \"Нет в наличии\",\n    \"page_placeholder_title\": \"Заголовок страницы\",\n    \"page_placeholder_content\": \"Выберите страницу для отображения ее содержимого.\",\n    \"placeholder_image\": \"Изображение-заполнитель\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Осталось: {{ count }}\",\n      \"other\": \"Осталось: {{ count }}\",\n      \"few\": \"Осталось: {{ count }}\",\n      \"many\": \"Осталось: {{ count }}\"\n    },\n    \"powered_by\": \"Этот магазин работает на платформе\",\n    \"store_owner_link_html\": \"Вы владелец магазина? <a href=\\\"{{ link }}\\\">Войдите здесь</a>\",\n    \"shipping_discount_error\": \"Скидки на доставку отображаются при оформлении и оплате заказа после добавления адреса\",\n    \"discount_code_error\": \"Код скидки не может быть применен к вашей корзине\",\n    \"shipping_policy\": \"Стоимость доставки рассчитывается при оформлении заказа.\",\n    \"recipient_form_send_to\": \"Куда отправить\",\n    \"recipient_form_email_label\": \"Электронный адрес получателя\",\n    \"recipient_form_email_label_my_email\": \"Мой электронный адрес\",\n    \"recipient_form_email_address\": \"Адрес электронной почты получателя\",\n    \"recipient_form_name_label\": \"Имя получателя (необязательно)\",\n    \"recipient_form_message\": \"Сообщение (необязательно)\",\n    \"recipient_form_characters_used\": \"Использовано символов: {{ used_chars }}/{{ max_chars }}\",\n    \"recipient_form_send_on\": \"ГГГГ-ММ-ДД\",\n    \"recipient_form_send_on_label\": \"Дата отправки (необязательно)\",\n    \"recipient_form_fields_visible\": \"Поля формы получателя теперь отображаются\",\n    \"recipient_form_fields_hidden\": \"Поля формы получателя теперь скрыты\",\n    \"recipient_form_error\": \"При отправке формы возникла ошибка\",\n    \"product_custom_property_character_count\": \"Использовано символов: {{ used_chars }}/{{ max_chars }}\",\n    \"terms_and_policies\": \"Условия и политики\",\n    \"pagination\": {\n      \"nav_label\": \"Постраничная навигация\",\n      \"previous\": \"Назад\",\n      \"next\": \"Далее\",\n      \"page\": \"Страница {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Доступны установление цены в зависимости от объема операций\",\n    \"volume_pricing\": \"Установление цены в зависимости от объема операций\",\n    \"at_price_each\": \"по цене {{ price }} за шт.\",\n    \"each\": \"{{ price }} за шт.\",\n    \"each_abbreviation\": \"за шт.\",\n    \"price_at\": \"по цене\",\n    \"cancel\": \"Отмена\",\n    \"product_subtotal\": \"Итого за товары\",\n    \"quantity_per_item\": \"/шт.\",\n    \"remove_all\": \"Удалить все\",\n    \"remove_all_items_confirmation\": \"Удалить все товары ({{ count }}) из корзины?\",\n    \"remove_one_item_confirmation\": \"Удалить 1 предмет из корзины?\",\n    \"total_items\": \"Всего предметов\",\n    \"variant\": \"Вариант\",\n    \"variant_total\": \"Всего вариантов\",\n    \"view_cart\": \"Просмотреть корзину\",\n    \"your_cart\": \"Корзина\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 предмет добавлен в корзину\",\n      \"other\": \"{{ count }} предмета(-ов) добавлено в корзину\",\n      \"few\": \"{{ count }} предмета(-ов) добавлено в корзину\",\n      \"many\": \"{{ count }} предмета(-ов) добавлено в корзину\"\n    },\n    \"item_count_cutoff\": \"Более {{ count }} товаров\",\n    \"price_range\": \"Ценовой диапазон\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Используйте код подарочной карты онлайн или отсканируйте QR-код в магазине\",\n      \"title\": \"Вот ваша подарочная карта с номиналом {{ value }} для магазина {{ shop }}!\",\n      \"subtext\": \"Ваша подарочная карта\",\n      \"shop_link\": \"Посетить онлайн-магазин\",\n      \"add_to_apple_wallet\": \"Добавить в Apple Wallet\",\n      \"qr_image_alt\": \"Отсканируйте QR-код, чтобы использовать подарочную карту\",\n      \"copy_code\": \"Скопировать код подарочной карты\",\n      \"expiration_date\": \"Срок действия истекает {{ expires_on }}\",\n      \"copy_code_success\": \"Код скопирован\",\n      \"expired\": \"Срок действия истек\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"Комментариев: {{ count }}\",\n        \"other\": \"Комментариев: {{ count }}\",\n        \"few\": \"Комментариев: {{ count }}\",\n        \"many\": \"Комментариев: {{ count }}\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Электронный адрес\",\n      \"error\": \"Не удалось опубликовать комментарий, исправьте следующее:\",\n      \"heading\": \"Комментировать\",\n      \"message\": \"Сообщение\",\n      \"moderated\": \"Обратите внимание, что комментарии проходят проверку перед публикацией.\",\n      \"name\": \"Имя\",\n      \"post\": \"Добавить комментарий\",\n      \"success_moderated\": \"Комментарий отправлен на модерацию\",\n      \"success\": \"Комментарий опубликован\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"–\"\n  },\n  \"placeholders\": {\n    \"password\": \"Пароль\",\n    \"search\": \"Поиск\",\n    \"product_title\": \"Название продукта\",\n    \"collection_title\": \"Название коллекции\",\n    \"blog_posts\": \"Записи в блоге\",\n    \"blog_post_title\": \"Название\",\n    \"blog_post_author\": \"Автор\",\n    \"blog_post_date\": \"Дата\",\n    \"blog_post_description\": \"Фрагмент текста вашей записи в блоге\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Добавить в корзину\",\n      \"adding_to_cart\": \"Добавление...\",\n      \"added_to_cart\": \"Товар добавлен в корзину\",\n      \"add_to_cart_error\": \"Возникла ошибка при добавлении в корзину\",\n      \"quantity_error_max\": \"Максимальное количество этого товара — {{ maximum }}\",\n      \"sold_out\": \"Продано\",\n      \"unavailable\": \"Недоступно\",\n      \"quantity\": \"Количество\",\n      \"quantity_increments\": \"Прирост: {{ increment }}\",\n      \"quantity_minimum\": \"Минимум: {{ minimum }}\",\n      \"quantity_maximum\": \"Максимум: {{ maximum }}\",\n      \"in_cart\": \"в корзине\",\n      \"default_title\": \"Название по умолчанию\",\n      \"sticky_add_to_cart\": \"Быстрое добавление в корзину\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/sk.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Načítať video: {{ description }}\",\n    \"sold_out\": \"Vypredané\",\n    \"email_signup\": {\n      \"label\": \"E-mail\",\n      \"placeholder\": \"E-mailová adresa\",\n      \"success\": \"Ďakujeme, že ste sa prihlásili na odber správ.\"\n    },\n    \"filter\": \"Filtrovať\",\n    \"payment_methods\": \"Spôsoby platby\",\n    \"contact_form\": {\n      \"name\": \"Meno\",\n      \"email\": \"E-mail\",\n      \"phone\": \"Telefón\",\n      \"comment\": \"Komentár\",\n      \"post_success\": \"Ďakujeme, že ste nás kontaktovali. Budeme sa vám venovať čo najskôr.\",\n      \"error_heading\": \"Upravte tieto údaje:\"\n    },\n    \"slider_label\": \"Jazdec\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Prehrať 3D model\",\n    \"play_video\": \"Prehrať video\",\n    \"unit_price\": \"Jednotková cena\",\n    \"country_results_count\": \"Počet výsledkov: {{ count }}\",\n    \"slideshow_pause\": \"Pozastaviť prezentáciu\",\n    \"slideshow_play\": \"Prehrať prezentáciu\",\n    \"remove_item\": \"Odstrániť štítok {{ title}}\",\n    \"skip_to_text\": \"Prejsť na obsah\",\n    \"skip_to_product_info\": \"Prejsť na informácie o produkte\",\n    \"skip_to_results_list\": \"Prejsť na zoznam výsledkov\",\n    \"new_window\": \"Otvorí sa v novom okne.\",\n    \"slideshow_next\": \"Nasledujúca snímka\",\n    \"slideshow_previous\": \"Predchádzajúca snímka\",\n    \"close_dialog\": \"Zavrieť dialógové okno\",\n    \"reset_search\": \"Resetovať vyhľadávanie\",\n    \"search_results_count\": \"{{ count }} nájdené výsledky vyhľadávania pre „{{ query }}“\",\n    \"search_results_no_results\": \"Pre výraz „{{ query }}“ sa nenašli žiadne výsledky\",\n    \"filters\": \"Filtre\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} použitý filter\",\n      \"other\": \"Použité filtre: {{ count }}\",\n      \"few\": \"Použité filtre: {{ count }}\",\n      \"many\": \"Použité filtre: {{ count }}\"\n    },\n    \"account\": \"Konto\",\n    \"cart\": \"Košík\",\n    \"cart_count\": \"Celkový počet položiek v košíku\",\n    \"menu\": \"Ponuka\",\n    \"country_region\": \"Krajina/oblasť\",\n    \"slide_status\": \"Snímka {{ index }} z {{ length }}\",\n    \"scroll_to\": \"Posunúť sa na {{ title }}\",\n    \"loading_product_recommendations\": \"Načítavajú sa odporúčané produkty\",\n    \"discount\": \"Použiť zľavový kód\",\n    \"discount_applied\": \"Použitý zľavový kód: {{ code }}\",\n    \"inventory_status\": \"Stav zásob\",\n    \"pause_video\": \"Pozastaviť video\",\n    \"find_country\": \"Nájsť krajinu\",\n    \"localization_region_and_language\": \"Výber oblasti a jazyka\",\n    \"decrease_quantity\": \"Znížiť množstvo\",\n    \"increase_quantity\": \"Zvýšiť množstvo\",\n    \"rating\": \"Hodnotenie tohto produktu je {{ rating }} z 5\",\n    \"quantity\": \"Množstvo\",\n    \"nested_product\": \"{{ product_title }} pre {{ parent_title }}\",\n    \"discount_menu\": \"Zľavové kódy\",\n    \"remove\": \"Odstrániť\",\n    \"view_pricing_info\": \"Zobraziť informácie o cenách\",\n    \"open_hotspot\": \"Otvoriť hotspot\",\n    \"slideshow\": \"Prezentácia\",\n    \"header_navigation_label\": \"Primárna\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Pridať do košíka\",\n    \"clear_all\": \"Vymazať všetko\",\n    \"remove\": \"Odstrániť\",\n    \"view_in_your_space\": \"Zobraziť vo vašom priestore\",\n    \"show_filters\": \"Filtrovať\",\n    \"clear\": \"Vymazať\",\n    \"continue_shopping\": \"Pokračovať v nákupe\",\n    \"log_in_html\": \"Máte konto? <a href=\\\"{{ link }}\\\">Prihláste</a> sa a prejdite pokladňou rýchlejšie.\",\n    \"see_items\": {\n      \"one\": \"Zobraziť {{ count }} položku\",\n      \"other\": \"Zobraziť {{ count }} položky/položiek\",\n      \"few\": \"Zobraziť {{ count }} položky/položiek\",\n      \"many\": \"Zobraziť {{ count }} položky/položiek\"\n    },\n    \"view_all\": \"Zobraziť všetko\",\n    \"add\": \"Pridať\",\n    \"choose\": \"Vybrať\",\n    \"added\": \"Pridané\",\n    \"show_less\": \"Zobraziť menej\",\n    \"show_more\": \"Zobraziť viac\",\n    \"close\": \"Zavrieť\",\n    \"more\": \"Viac\",\n    \"zoom\": \"Priblíženie\",\n    \"close_dialog\": \"Zavrieť dialógové okno\",\n    \"reset\": \"Resetovať\",\n    \"enter_using_password\": \"Zadajte s použitím hesla\",\n    \"submit\": \"Odoslať\",\n    \"enter_password\": \"Zadajte heslo\",\n    \"remove_discount\": \"Odobrať zľavový {{ code }}\",\n    \"view_store_information\": \"Zobraziť informácie o obchode\",\n    \"back\": \"Späť\",\n    \"log_in\": \"Prihlásiť sa\",\n    \"log_out\": \"Odhlásiť sa\",\n    \"apply\": \"Použiť\",\n    \"sign_in_options\": \"Ďalšie možnosti prihlásenia\",\n    \"sign_up\": \"Zaregistrovať sa\",\n    \"open_image_in_full_screen\": \"Otvoriť obrázok na celú obrazovku\",\n    \"sort\": \"Zoradiť\",\n    \"show_all_options\": \"Zobraziť všetky možnosti\",\n    \"open\": \"Otvoriť\"\n  },\n  \"content\": {\n    \"reviews\": \"recenz.\",\n    \"no_results_found\": \"Nenašli sa žiadne výsledky\",\n    \"language\": \"Jazyk\",\n    \"localization_region_and_language\": \"Oblasť a jazyk\",\n    \"cart_total\": \"Celková suma v košíku\",\n    \"your_cart_is_empty\": \"Váš košík je prázdny\",\n    \"product_image\": \"Obrázok produktu\",\n    \"product_information\": \"Informácie o produkte\",\n    \"quantity\": \"Množstvo\",\n    \"product_total\": \"Celková suma za tento produkt\",\n    \"cart_estimated_total\": \"Odhadovaná celková suma\",\n    \"seller_note\": \"Špeciálne pokyny\",\n    \"cart_subtotal\": \"Medzisúčet\",\n    \"discounts\": \"Zľavy\",\n    \"discount\": \"Zľava\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Vrátane ciel a daní. Zľavy a <a href=\\\"{{ link }}\\\">doprava</a> sa vypočítajú pri platbe.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Vrátane ciel a daní. Zľavy a doprava sa vypočítajú pri platbe.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Vrátane daní. Zľavy a <a href=\\\"{{ link }}\\\">doprava</a> sa vypočítajú pri platbe.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Vrátane daní. Zľavy a doprava sa vypočítajú pri platbe.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Vrátane ciel. Dane, zľavy a <a href=\\\"{{ link }}\\\">doprava</a> sa vypočítajú pri platbe.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Vrátane ciel. Dane, zľavy a doprava sa vypočítajú pri platbe.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Dane, zľavy a <a href=\\\"{{ link }}\\\">doprava</a> sa vypočítajú pri platbe.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Dane, zľavy a doprava sa vypočítajú pri platbe.\",\n    \"cart_title\": \"Košík\",\n    \"price\": \"Cena\",\n    \"price_regular\": \"Normálna cena\",\n    \"price_compare_at\": \"Porovnať podľa ceny\",\n    \"price_sale\": \"Cena po zľave\",\n    \"checkout\": \"Platba\",\n    \"duties_and_taxes_included\": \"Vrátane ciel a daní.\",\n    \"duties_included\": \"Vrátane ciel.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Doprava</a> sa vypočíta v pokladni.\",\n    \"taxes_included\": \"Vrátane daní.\",\n    \"product_badge_sold_out\": \"Vypredané\",\n    \"product_badge_sale\": \"Zľava\",\n    \"search_input_label\": \"Vyhľadať\",\n    \"search_input_placeholder\": \"Vyhľadať\",\n    \"search_results\": \"Výsledky vyhľadávania\",\n    \"search_results_label\": \"Výsledky vyhľadávania\",\n    \"search_results_no_results\": \"Pre „{{ terms }}“ sa nenašli žiadne výsledky. Vyskúšať iné hľadanie.\",\n    \"search_results_resource_articles\": \"Blogový príspevok\",\n    \"search_results_resource_collections\": \"Kolekcie\",\n    \"search_results_resource_pages\": \"Stránky\",\n    \"search_results_resource_products\": \"Produkty\",\n    \"search_results_resource_queries\": \"Návrhy na vyhľadávanie\",\n    \"search_results_view_all\": \"Zobraziť všetko\",\n    \"search_results_view_all_button\": \"Zobraziť všetko\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} produkty\",\n      \"few\": \"{{ count }} produkty\",\n      \"many\": \"{{ count }} produkty\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Predvolený\",\n      \"grid_fieldset\": \"Stĺpcová mriežka\",\n      \"single_item\": \"Jeden\",\n      \"zoom_out\": \"Oddialiť\"\n    },\n    \"recently_viewed_products\": \"Nedávno zobrazené\",\n    \"unavailable\": \"Nedostupné\",\n    \"collection_placeholder\": \"Názov kolekcie\",\n    \"product_card_placeholder\": \"Názov produktu\",\n    \"product_count\": \"Počet produktov\",\n    \"item_count\": {\n      \"one\": \"{{ count }} položka\",\n      \"other\": \"Položky: {{ count }}\",\n      \"few\": \"Položky: {{ count }}\",\n      \"many\": \"Položky: {{ count }}\"\n    },\n    \"errors\": \"Chyby\",\n    \"price_from\": \"Od {{ price }}\",\n    \"search\": \"Hľadať\",\n    \"search_results_no_results_check_spelling\": \"Pre výraz „{{ terms }}“ sa nenašli žiadne výsledky. Skontrolujte pravopis alebo použite iné slovo či slovné spojenie.\",\n    \"featured_products\": \"Odporúčané produkty\",\n    \"no_products_found\": \"Nenašli sa žiadne produkty.\",\n    \"use_fewer_filters_html\": \"Skúste použiť menej filtrov alebo <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">vymazať všetky filtre</a>.\",\n    \"filters\": \"Filtre\",\n    \"price_filter_html\": \"Najvyššia cena je {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Prečítať si viac...\",\n    \"wrong_password\": \"Heslo je nesprávne\",\n    \"discount_code\": \"Zľavový kód\",\n    \"pickup_available_at_html\": \"K dispozícii na vyzdvihnutie na adrese <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"K dispozícii na vyzdvihnutie o {{ pickup_time }}\",\n    \"pickup_not_available\": \"Aktuálne nedostupné na vyzdvihnutie\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Dobrý deň, {{ first_name }},\",\n    \"account_orders\": \"Objednávky\",\n    \"account_profile\": \"Profil\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Vrátane ciel a daní. Doprava sa vypočíta pri platbe.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Vrátane ciel a daní. Doprava sa vypočíta pri platbe.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Vrátane ciel. Doprava sa vypočíta pri platbe.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Vrátane ciel. Doprava sa vypočíta pri platbe.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Dane a <a href=\\\"{{ link }}\\\">doprava</a> sa vypočítajú pri platbe.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Dane a doprava sa vypočítajú pri platbe.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Vrátane daní. Doprava sa vypočíta pri platbe.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Vrátane daní. Doprava sa vypočíta pri platbe.\",\n    \"view_more_details\": \"Zobraziť viac podrobností\",\n    \"inventory_low_stock\": \"Nízky stav zásob\",\n    \"inventory_in_stock\": \"Skladom\",\n    \"inventory_out_of_stock\": \"Vypredané\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Zostáva {{ count }}\",\n      \"other\": \"Zostáva {{ count }}\",\n      \"few\": \"Zostáva {{ count }}\",\n      \"many\": \"Zostáva {{ count }}\"\n    },\n    \"powered_by\": \"Tento obchod bude prevádzkovať\",\n    \"store_owner_link_html\": \"Ste vlastníkom obchodu? <a href=\\\"{{ link }}\\\">Prihláste sa tu</a>\",\n    \"shipping_discount_error\": \"Zľavy na dopravu sa zobrazia pri platbe po pridaní adresy\",\n    \"discount_code_error\": \"Zľavový kód nie je vo vašom košíku možné použiť\",\n    \"page_placeholder_title\": \"Názov stránky\",\n    \"page_placeholder_content\": \"Výberom stránky zobrazíte jej obsah.\",\n    \"placeholder_image\": \"Obrázok zástupného objektu\",\n    \"shipping_policy\": \"Doprava sa vypočíta v pokladni.\",\n    \"recipient_form_send_to\": \"Odoslať na\",\n    \"recipient_form_email_label\": \"E-mail príjemcu\",\n    \"recipient_form_email_label_my_email\": \"Môj e-mail\",\n    \"recipient_form_email_address\": \"E-mailová adresa príjemcu\",\n    \"recipient_form_name_label\": \"Meno príjemcu (voliteľné)\",\n    \"recipient_form_message\": \"Správa (voliteľné)\",\n    \"recipient_form_characters_used\": \"Použitých {{ used_chars }} znakov z {{ max_chars }}\",\n    \"recipient_form_send_on\": \"RRRR-MM-DD\",\n    \"recipient_form_send_on_label\": \"Dátum odoslania (voliteľné)\",\n    \"recipient_form_fields_visible\": \"Polia formulára príjemcu sú teraz viditeľné\",\n    \"recipient_form_fields_hidden\": \"Polia formulára príjemcu sú teraz skryté\",\n    \"recipient_form_error\": \"There was an error with the form submission\",\n    \"product_custom_property_character_count\": \"Počet použitých znakov: {{ used_chars }} z {{ max_chars }}\",\n    \"terms_and_policies\": \"Pravidlá a podmienky\",\n    \"pagination\": {\n      \"nav_label\": \"Navigácia po stránkach\",\n      \"previous\": \"Predchádzajúce\",\n      \"next\": \"Nasledujúce\",\n      \"page\": \"Stránka {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Dostupné objemové ceny\",\n    \"volume_pricing\": \"Objemové ceny\",\n    \"at_price_each\": \"{{ price }}/kus\",\n    \"each\": \"{{ price }}/kus\",\n    \"each_abbreviation\": \"kus\",\n    \"price_at\": \"za\",\n    \"price_range\": \"Rozsah cien\",\n    \"cancel\": \"Zrušiť\",\n    \"product_subtotal\": \"Medzisúčet produktov\",\n    \"quantity_per_item\": \"/kus\",\n    \"remove_all\": \"Odstrániť všetko\",\n    \"remove_all_items_confirmation\": \"Chcete z košíka odobrať všetky položky ({{ count }})?\",\n    \"remove_one_item_confirmation\": \"Chcete z košíka odobrať 1 položku?\",\n    \"total_items\": \"Celkový počet položiek\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Celková suma variantov\",\n    \"view_cart\": \"Zobraziť košík\",\n    \"your_cart\": \"Váš košík\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 položka sa pridala do košíka\",\n      \"other\": \"Počet položiek pridaných do košíka: {{ count }}\",\n      \"few\": \"Počet položiek pridaných do košíka: {{ count }}\",\n      \"many\": \"Počet položiek pridaných do košíka: {{ count }}\"\n    },\n    \"item_count_cutoff\": \"Viac ako {{ count }} položky/položiek\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Použite online kód darčekového poukazu alebo QR kód v obchode\",\n      \"title\": \"Váš darčekový poukaz v hodnote {{ value }} do obchodu {{ shop }}!\",\n      \"subtext\": \"Váš darčekový poukaz\",\n      \"shop_link\": \"Navštíviť online obchod\",\n      \"add_to_apple_wallet\": \"Pridať do aplikácie Apple Wallet\",\n      \"qr_image_alt\": \"QR kód – naskenujte ho a uplatnite si darčekový poukaz\",\n      \"copy_code\": \"Kopírovať kód darčekového poukazu\",\n      \"expiration_date\": \"Platnosť skončí {{ expires_on }}\",\n      \"copy_code_success\": \"Kód sa úspešne skopíroval\",\n      \"expired\": \"Platnosť uplynula\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentár\",\n        \"other\": \"{{ count }} komentárov\",\n        \"few\": \"{{ count }} komentárov\",\n        \"many\": \"{{ count }} komentárov\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-mail\",\n      \"error\": \"Komentár sa nepodarilo uverejniť, opravte nasledujúce chyby:\",\n      \"heading\": \"Pridať komentár\",\n      \"message\": \"Správa\",\n      \"moderated\": \"Upozorňujeme, že komentáre musia byť pred publikovaním schválené.\",\n      \"name\": \"Meno\",\n      \"post\": \"Uverejniť komentár\",\n      \"success_moderated\": \"Komentár zverejnený, čaká na schválenie\",\n      \"success\": \"Komentár zverejnený\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"k\"\n  },\n  \"placeholders\": {\n    \"password\": \"Heslo\",\n    \"search\": \"Vyhľadať\",\n    \"product_title\": \"Názov produktu\",\n    \"collection_title\": \"Názov kolekcie\",\n    \"blog_posts\": \"Blogové príspevky\",\n    \"blog_post_title\": \"Názov\",\n    \"blog_post_author\": \"Autor\",\n    \"blog_post_date\": \"Dátum\",\n    \"blog_post_description\": \"Úryvok obsahu vášho blogového príspevku\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Pridať do košíka\",\n      \"adding_to_cart\": \"Pridávanie...\",\n      \"added_to_cart\": \"Pridané do košíka\",\n      \"add_to_cart_error\": \"Chyba pri pridávaní do košíka\",\n      \"quantity_error_max\": \"Maximálne množstvo tejto položky je {{ maximum }}\",\n      \"sold_out\": \"Vypredané\",\n      \"unavailable\": \"Nedostupné\",\n      \"quantity\": \"Množstvo\",\n      \"quantity_increments\": \"Prírastky po {{ increment }}\",\n      \"quantity_minimum\": \"Minimálne {{ minimum }} ks\",\n      \"quantity_maximum\": \"Maximálne {{ maximum }} ks\",\n      \"in_cart\": \"v košíku\",\n      \"default_title\": \"Predvolený názov\",\n      \"sticky_add_to_cart\": \"Panel rýchleho pridania do košíka\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/sl.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Naloži videoposnetek: {{ description }}\",\n    \"sold_out\": \"Razprodano\",\n    \"email_signup\": {\n      \"label\": \"E-pošta\",\n      \"placeholder\": \"E-poštni naslov\",\n      \"success\": \"Hvala za prijavo!\"\n    },\n    \"filter\": \"Filter\",\n    \"payment_methods\": \"Načini plačila\",\n    \"contact_form\": {\n      \"name\": \"Ime\",\n      \"email\": \"E-poštni naslov\",\n      \"phone\": \"Telefonska številka\",\n      \"comment\": \"Komentar\",\n      \"post_success\": \"Hvala za vaše sporočilo. Z vami bomo v stiku takoj, ko bo mogoče.\",\n      \"error_heading\": \"Prilagodite naslednje:\"\n    },\n    \"slider_label\": \"Drsnik\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Predvajaj 3D-model\",\n    \"play_video\": \"Predvajaj videoposnetek\",\n    \"unit_price\": \"Cena na enoto\",\n    \"country_results_count\": \"Št. rezultatov: {{ count }}\",\n    \"slideshow_pause\": \"Zaustavi diaprojekcijo\",\n    \"slideshow_play\": \"Predvajaj diaprojekcijo\",\n    \"remove_item\": \"Odstrani: {{ title}}\",\n    \"skip_to_text\": \"Preskoči na vsebino\",\n    \"skip_to_product_info\": \"Preskoči na informacije o izdelku\",\n    \"skip_to_results_list\": \"Preskoči na seznam rezultatov\",\n    \"new_window\": \"Odpre se v novem oknu.\",\n    \"slideshow_next\": \"Naslednji diapozitiv\",\n    \"slideshow_previous\": \"Prejšnji diapozitiv\",\n    \"close_dialog\": \"Zapri pogovorno okno\",\n    \"reset_search\": \"Ponastavi iskanje\",\n    \"search_results_count\": \"Št. najdenih rezultatov za poizvedbo »{{ query }}«: {{ count }}\",\n    \"search_results_no_results\": \"Za »{{ query }}« ni bilo mogoče najti nobenega rezultata\",\n    \"filters\": \"Filtri\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter je uporabljen\",\n      \"other\": \"Št. uporabljenih filtrov: {{ count }}\",\n      \"few\": \"Št. uporabljenih filtrov: {{ count }}\",\n      \"two\": \"Št. uporabljenih filtrov: {{ count }}\"\n    },\n    \"account\": \"Račun\",\n    \"cart\": \"Košarica\",\n    \"cart_count\": \"Skupno število izdelkov v košarici\",\n    \"menu\": \"Meni\",\n    \"country_region\": \"Država/regija\",\n    \"slide_status\": \"Diapozitiv {{ index }} od {{ length }}\",\n    \"scroll_to\": \"Pomaknite se na {{ title }}\",\n    \"loading_product_recommendations\": \"Nalaganje priporočil za izdelke\",\n    \"discount\": \"Uporabi kodo za popust\",\n    \"discount_applied\": \"Uporabljena koda za popust: {{ code }}\",\n    \"inventory_status\": \"Status zaloge\",\n    \"pause_video\": \"Zaustavi videoposnetek\",\n    \"find_country\": \"Poišči državo\",\n    \"localization_region_and_language\": \"Izbirnik za regijo in jezik\",\n    \"decrease_quantity\": \"Zmanjšaj količino\",\n    \"increase_quantity\": \"Povečaj količino\",\n    \"quantity\": \"Količina\",\n    \"rating\": \"Ocena tega izdelka je {{ rating }} od 5\",\n    \"nested_product\": \"{{ product_title }} za {{ parent_title }}\",\n    \"discount_menu\": \"Kode za popust\",\n    \"remove\": \"Odstrani\",\n    \"view_pricing_info\": \"Prikaži podatke o cenah\",\n    \"open_hotspot\": \"Odpri hotspot\",\n    \"slideshow\": \"Slikovni prikaz\",\n    \"header_navigation_label\": \"Primarno\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Dodaj v košarico\",\n    \"clear_all\": \"Počisti vse\",\n    \"remove\": \"Odstrani\",\n    \"view_in_your_space\": \"Prikaži v prostoru\",\n    \"show_filters\": \"Filter\",\n    \"clear\": \"Počisti\",\n    \"continue_shopping\": \"Nadaljuj nakup\",\n    \"log_in_html\": \"Imate račun? Za hitrejši zaključek nakupa se <a href=\\\"{{ link }}\\\">prijavite</a>.\",\n    \"see_items\": {\n      \"one\": \"Prikaži {{ count }} artikel\",\n      \"other\": \"Prikaži {{ count }} artiklov\",\n      \"few\": \"Prikaži {{ count }} artiklov\",\n      \"two\": \"Prikaži {{ count }} artiklov\"\n    },\n    \"view_all\": \"Prikaži vse\",\n    \"add\": \"Dodaj\",\n    \"choose\": \"Izberi\",\n    \"added\": \"Dodano\",\n    \"show_less\": \"Prikaži manj\",\n    \"show_more\": \"Prikaži več\",\n    \"close\": \"Zapri\",\n    \"more\": \"Več\",\n    \"zoom\": \"Povečava\",\n    \"close_dialog\": \"Zapri pogovorno okno\",\n    \"reset\": \"Ponastavi\",\n    \"back\": \"Nazaj\",\n    \"log_in\": \"Vpis\",\n    \"log_out\": \"Odjava\",\n    \"remove_discount\": \"Odstrani popust {{ code }}\",\n    \"enter_using_password\": \"Vstop z geslom\",\n    \"submit\": \"Pošlji\",\n    \"enter_password\": \"Vnesite geslo\",\n    \"view_store_information\": \"Prikaži podatke o trgovini\",\n    \"apply\": \"Uporabi\",\n    \"sign_in_options\": \"Druge možnosti za vpis\",\n    \"sign_up\": \"Prijava\",\n    \"open_image_in_full_screen\": \"Odpri sliko v celozaslonskem načinu\",\n    \"sort\": \"Razvrsti\",\n    \"show_all_options\": \"Prikaži vse možnosti\",\n    \"open\": \"Odpri\"\n  },\n  \"content\": {\n    \"reviews\": \"ocen.\",\n    \"no_results_found\": \"Nobenega rezultata ni bilo mogoče najti\",\n    \"language\": \"Jezik\",\n    \"localization_region_and_language\": \"Regija in jezik\",\n    \"cart_total\": \"Skupni znesek košarice\",\n    \"your_cart_is_empty\": \"Vaša košarica je prazna\",\n    \"product_image\": \"Slika izdelka\",\n    \"product_information\": \"Informacije o izdelku\",\n    \"quantity\": \"Količina\",\n    \"product_total\": \"Skupno za izdelek\",\n    \"cart_estimated_total\": \"Predvideni skupni znesek\",\n    \"seller_note\": \"Posebna navodila\",\n    \"cart_subtotal\": \"Vmesna vsota\",\n    \"discounts\": \"Popusti\",\n    \"discount\": \"Popust\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Dajatve in davki so vključeni. Popusti in <a href=\\\"{{ link }}\\\">strošek dostave</a> se obračunajo ob zaključku nakupa.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Dajatve in davki so vključeni. Popusti in strošek dostave se obračunajo ob zaključku nakupa.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Davki so vključeni. Popusti in <a href=\\\"{{ link }}\\\">strošek dostave</a> se obračunajo ob zaključku nakupa.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Davki so vključeni. Popusti in strošek dostave se obračunajo ob zaključku nakupa.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Dajatve so vključene. Davki, popusti in <a href=\\\"{{ link }}\\\">strošek dostave</a> se obračunajo ob zaključku nakupa.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Dajatve so vključene. Davki, popusti in strošek dostave se obračunajo ob zaključku nakupa.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Davki, popusti in <a href=\\\"{{ link }}\\\">strošek dostave</a> se obračunajo ob zaključku nakupa.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Davki, popusti in strošek dostave se obračunajo ob zaključku nakupa.\",\n    \"checkout\": \"Zaključi nakup\",\n    \"cart_title\": \"Košarica\",\n    \"price\": \"Cena\",\n    \"price_regular\": \"Redna cena\",\n    \"price_compare_at\": \"Primerjava cene\",\n    \"price_sale\": \"Znižana cena\",\n    \"duties_and_taxes_included\": \"Dajatve in davki vključeni.\",\n    \"duties_included\": \"Dajatve vključene.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Dostava</a> se obračuna ob zaključku nakupa.\",\n    \"taxes_included\": \"Davki vključeni.\",\n    \"product_badge_sold_out\": \"Razprodano\",\n    \"product_badge_sale\": \"Znižanje\",\n    \"search_input_label\": \"Išči\",\n    \"search_input_placeholder\": \"Išči\",\n    \"search_results\": \"Rezultati iskanja\",\n    \"search_results_label\": \"Rezultati iskanja\",\n    \"search_results_no_results\": \"Za »{{ terms }}« ni bilo mogoče najti nobenega rezultata. Poskusite z novim iskanjem.\",\n    \"search_results_resource_articles\": \"Objave v spletnem dnevniku\",\n    \"search_results_resource_collections\": \"Zbirke\",\n    \"search_results_resource_pages\": \"Strani\",\n    \"search_results_resource_products\": \"Izdelki\",\n    \"search_results_resource_queries\": \"Predlogi za iskanje\",\n    \"search_results_view_all\": \"Prikaži vse\",\n    \"search_results_view_all_button\": \"Prikaži vse\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} izdelek\",\n      \"other\": \"Št. izdelkov: {{ count }}\",\n      \"few\": \"Št. izdelkov: {{ count }}\",\n      \"two\": \"Št. izdelkov: {{ count }}\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Privzeto\",\n      \"grid_fieldset\": \"Mreža v stolpcih\",\n      \"single_item\": \"Enojno\",\n      \"zoom_out\": \"Pomanjšaj\"\n    },\n    \"recently_viewed_products\": \"Nedavno ogledano\",\n    \"unavailable\": \"Ni na voljo\",\n    \"collection_placeholder\": \"Naslov zbirke\",\n    \"product_card_placeholder\": \"Naslov izdelka\",\n    \"product_count\": \"Število izdelkov\",\n    \"item_count\": {\n      \"one\": \"{{ count }} artikel\",\n      \"other\": \"Št. artiklov: {{ count }}\",\n      \"few\": \"Št. artiklov: {{ count }}\",\n      \"two\": \"Št. artiklov: {{ count }}\"\n    },\n    \"errors\": \"Napake\",\n    \"price_from\": \"Od {{ price }}\",\n    \"featured_products\": \"Izpostavljeni izdelki\",\n    \"search\": \"Išči\",\n    \"search_results_no_results_check_spelling\": \"Za »{{ terms }}« ni bilo mogoče najti nobenega rezultata. Preverite črkovanje ali uporabite drugo besedo ali frazo.\",\n    \"filters\": \"Filtri\",\n    \"no_products_found\": \"Nobenega izdelka ni bilo mogoče najti.\",\n    \"price_filter_html\": \"Najvišja cena je {{ price }}\",\n    \"use_fewer_filters_html\": \"Poskusite uporabiti manj filtrov ali <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">počistite vse filtre</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Več o tem\",\n    \"account_title\": \"Račun\",\n    \"account_title_personalized\": \"Pozdravljeni, {{ first_name }}\",\n    \"account_orders\": \"Naročila\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"Koda za popust\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Dajatve in davki so vključeni. Dostava se obračuna ob zaključku nakupa.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Dajatve in davki so vključeni. Dostava se obračuna ob zaključku nakupa.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Dajatve so vključene. Dostava se obračuna ob zaključku nakupa.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Dajatve so vključene. Dostava se obračuna ob zaključku nakupa.\",\n    \"pickup_available_at_html\": \"Prevzem je mogoč na prevzemnem mestu <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Prevzem je mogoč, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Prevzem trenutno ni mogoč\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Davki in <a href=\\\"{{ link }}\\\">dostava</a> se obračunajo ob zaključku nakupa.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Davki in dostava se obračunajo ob zaključku nakupa.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Davki so vključeni. Dostava se obračuna ob zaključku nakupa.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Davki so vključeni. Dostava se obračuna ob zaključku nakupa.\",\n    \"wrong_password\": \"Geslo ni pravilno\",\n    \"view_more_details\": \"Prikaži več podrobnosti\",\n    \"inventory_low_stock\": \"Majhna zaloga\",\n    \"inventory_in_stock\": \"Na zalogi\",\n    \"inventory_out_of_stock\": \"Ni na zalogi\",\n    \"page_placeholder_title\": \"Naslov strani\",\n    \"page_placeholder_content\": \"Izberite stran za prikaz njene vsebine.\",\n    \"placeholder_image\": \"Začasna slika\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Preostalo: {{ count }}\",\n      \"other\": \"Preostalo: {{ count }}\",\n      \"few\": \"Preostalo: {{ count }}\",\n      \"two\": \"Preostalo: {{ count }}\"\n    },\n    \"discount_code_error\": \"Kode popusta ni mogoče uporabiti za vašo košarico\",\n    \"shipping_policy\": \"Dostava se obračuna ob zaključku nakupa.\",\n    \"powered_by\": \"To trgovino bo omogočala platforma\",\n    \"store_owner_link_html\": \"Ali ste lastnik te trgovine? <a href=\\\"{{ link }}\\\">Prijavite se tukaj</a>\",\n    \"shipping_discount_error\": \"Popusti za dostavo so prikazani ob zaključku nakupa po dodajanju naslova\",\n    \"recipient_form_send_to\": \"Pošlji na\",\n    \"recipient_form_email_label\": \"E-poštni naslov prejemnika\",\n    \"recipient_form_email_label_my_email\": \"Moj e-poštni naslov\",\n    \"recipient_form_email_address\": \"E-poštni naslov prejemnika\",\n    \"recipient_form_name_label\": \"Ime prejemnika (izbirno)\",\n    \"recipient_form_message\": \"Sporočilo (izbirno)\",\n    \"recipient_form_characters_used\": \"Uporabljeno št. znakov: {{ used_chars }}/{{ max_chars }}\",\n    \"recipient_form_send_on\": \"LLLL-MM-DD\",\n    \"recipient_form_send_on_label\": \"Pošlji na datum (izbirno)\",\n    \"recipient_form_fields_visible\": \"Polja obrazca prejemnika so zdaj vidna\",\n    \"recipient_form_fields_hidden\": \"Polja obrazca prejemnika so zdaj skrita\",\n    \"recipient_form_error\": \"Pri pošiljanju obrazca je prišlo do napake\",\n    \"product_custom_property_character_count\": \"Uporabljeno št. znakov: {{ used_chars }}/{{ max_chars }}\",\n    \"terms_and_policies\": \"Pogoji in pravilniki\",\n    \"pagination\": {\n      \"nav_label\": \"Krmarjenje po straneh\",\n      \"previous\": \"Nazaj\",\n      \"next\": \"Naprej\",\n      \"page\": \"Stran {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Na voljo je količinski popust\",\n    \"volume_pricing\": \"Količinski popust\",\n    \"at_price_each\": \"po ceni {{ price }}/kos\",\n    \"each\": \"{{ price }}/kos\",\n    \"each_abbreviation\": \"kos\",\n    \"price_at\": \"po\",\n    \"price_range\": \"Cenovni razpon\",\n    \"item_count_cutoff\": \"več kot {{ count }} artiklov\",\n    \"cancel\": \"Prekliči\",\n    \"product_subtotal\": \"Vmesna vsota\",\n    \"quantity_per_item\": \"/kos\",\n    \"remove_all\": \"Odstrani vse\",\n    \"remove_all_items_confirmation\": \"Ali želite iz košarice odstraniti vse izdelke ({{ count }})?\",\n    \"remove_one_item_confirmation\": \"Ali želite iz košarice odstraniti 1 izdelek?\",\n    \"total_items\": \"Skupno število izdelkov\",\n    \"variant\": \"Različica\",\n    \"variant_total\": \"Skupna cena različice\",\n    \"view_cart\": \"Prikaži košarico\",\n    \"your_cart\": \"Vaša košarica\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 izdelek je dodan v košarico\",\n      \"other\": \"Toliko izdelkov je dodanih v košarico: {{ count }}\",\n      \"few\": \"Toliko izdelkov je dodanih v košarico: {{ count }}\",\n      \"two\": \"Toliko izdelkov je dodanih v košarico: {{ count }}\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Uporabite kodo darilnega bona v spletu ali kodo QR v trgovini\",\n      \"title\": \"To je darilni bon v vrednosti {{ value }} za trgovino {{ shop }}!\",\n      \"subtext\": \"Vaš darilni bon\",\n      \"shop_link\": \"Obišči spletno trgovino\",\n      \"add_to_apple_wallet\": \"Dodaj v Apple Wallet\",\n      \"qr_image_alt\": \"Koda QR – optično jo preberite za unovčenje darilnega bona\",\n      \"copy_code\": \"Kopiraj kodo darilnega bona\",\n      \"expiration_date\": \"Poteče {{ expires_on }}\",\n      \"copy_code_success\": \"Koda je uspešno kopirana\",\n      \"expired\": \"Poteklo\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"Geslo\",\n    \"search\": \"Išči\",\n    \"product_title\": \"Naslov izdelka\",\n    \"collection_title\": \"Naslov zbirke\",\n    \"blog_posts\": \"Objave v spletnem dnevniku\",\n    \"blog_post_title\": \"Naslov\",\n    \"blog_post_author\": \"Avtor\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Odlomek vsebine vaše objave v spletnem dnevniku\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Dodaj v košarico\",\n      \"added_to_cart\": \"Dodano v košarico\",\n      \"adding_to_cart\": \"Dodajanje ...\",\n      \"add_to_cart_error\": \"Pri dodajanju v košarico je prišlo do napake\",\n      \"sold_out\": \"Razprodano\",\n      \"unavailable\": \"Ni na voljo\",\n      \"quantity_error_max\": \"Ta artikel ima največ {{ maximum }}\",\n      \"quantity\": \"Količina\",\n      \"quantity_increments\": \"V korakih po {{ increment }}\",\n      \"quantity_minimum\": \"Najmanj od {{ minimum }}\",\n      \"quantity_maximum\": \"Največ od {{ maximum }}\",\n      \"in_cart\": \"v košarici\",\n      \"default_title\": \"Privzeti naslov\",\n      \"sticky_add_to_cart\": \"Vrstica »Hitro dodajanje v košarico«\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"do\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} komentar\",\n        \"other\": \"Št. komentarjev: {{ count }}\",\n        \"few\": \"Št. komentarjev: {{ count }}\",\n        \"two\": \"Št. komentarjev: {{ count }}\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-poštni naslov\",\n      \"error\": \"Objava komentarja ni uspela, preverite naslednje:\",\n      \"heading\": \"Napišite komentar\",\n      \"message\": \"Sporočilo\",\n      \"moderated\": \"Upoštevajte, da morajo biti komentarji pred objavo odobreni.\",\n      \"name\": \"Ime\",\n      \"post\": \"Objavi komentar\",\n      \"success_moderated\": \"Komentar je bil objavljen, čakanje na odobritev\",\n      \"success\": \"Komentar je bil objavljen\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/sv.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Ladda video: {{ description }}\",\n    \"sold_out\": \"Slutsåld\",\n    \"email_signup\": {\n      \"label\": \"E-post\",\n      \"placeholder\": \"E-postadress\",\n      \"success\": \"Tack för att du prenumererar!\"\n    },\n    \"filter\": \"Filter\",\n    \"payment_methods\": \"Betalningsmetoder\",\n    \"contact_form\": {\n      \"name\": \"Namn\",\n      \"email\": \"E-post\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Kommentar\",\n      \"post_success\": \"Tack för att du kontaktar oss. Vi återkommer till dig så snart som möjligt.\",\n      \"error_heading\": \"Justera följande:\"\n    },\n    \"slider_label\": \"Bild\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Spela 3D-modell\",\n    \"play_video\": \"Spela video\",\n    \"unit_price\": \"Enhetspris\",\n    \"country_results_count\": \"{{ count }} resultat\",\n    \"slideshow_pause\": \"Pausa bildspelet\",\n    \"slideshow_play\": \"Spela bildspel\",\n    \"remove_item\": \"Ta bort {{ title}}\",\n    \"skip_to_text\": \"Gå vidare till innehåll\",\n    \"skip_to_product_info\": \"Hoppa till produktinformation\",\n    \"skip_to_results_list\": \"Gå vidare till resultatlista\",\n    \"new_window\": \"Öppnas i ett nytt fönster.\",\n    \"slideshow_next\": \"Nästa bild\",\n    \"slideshow_previous\": \"Föregående bild\",\n    \"close_dialog\": \"Stäng dialogruta\",\n    \"reset_search\": \"Återställ sökning\",\n    \"search_results_count\": \"{{ count }} sökresultat hittades för ”{{ query }}”\",\n    \"search_results_no_results\": \"Inga resultat hittades för ”{{ query }}”\",\n    \"filters\": \"Filter\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filter tillämpas\",\n      \"other\": \"{{ count }} filter tillämpas\"\n    },\n    \"account\": \"Konto\",\n    \"cart\": \"Varukorg\",\n    \"cart_count\": \"Totalt antal artiklar i varukorgen\",\n    \"menu\": \"Meny\",\n    \"country_region\": \"Land/region\",\n    \"slide_status\": \"Bild {{ index }} av {{ length }}\",\n    \"scroll_to\": \"Rulla till {{ title }}\",\n    \"loading_product_recommendations\": \"Läser in produktrekommendationer\",\n    \"discount\": \"Använd rabattkod\",\n    \"discount_menu\": \"Rabattkoder\",\n    \"discount_applied\": \"Tillämpad rabattkod: {{ code }}\",\n    \"pause_video\": \"Pausa video\",\n    \"inventory_status\": \"Lagerstatus\",\n    \"find_country\": \"Hitta land\",\n    \"localization_region_and_language\": \"Region- och språkväljare\",\n    \"decrease_quantity\": \"Minska kvantitet\",\n    \"increase_quantity\": \"Öka kvantitet\",\n    \"quantity\": \"Kvantitet\",\n    \"rating\": \"Betyget för den här produkten är {{ rating }} av 5\",\n    \"nested_product\": \"{{ product_title }} för {{ parent_title }}\",\n    \"remove\": \"Ta bort\",\n    \"view_pricing_info\": \"Visa prissättningsinformation\",\n    \"open_hotspot\": \"Öppna hotspot\",\n    \"slideshow\": \"Bildspel\",\n    \"header_navigation_label\": \"Primär\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Lägg till i varukorgen\",\n    \"clear_all\": \"Rensa alla\",\n    \"remove\": \"Ta bort\",\n    \"view_in_your_space\": \"Visa i ditt utrymme\",\n    \"show_filters\": \"Filter\",\n    \"clear\": \"Rensa\",\n    \"continue_shopping\": \"Fortsätt handla\",\n    \"log_in_html\": \"Har du ett konto? <a href=\\\"{{ link }}\\\">Logga in</a> för att betala snabbare.\",\n    \"see_items\": {\n      \"one\": \"Se {{ count }} artikel\",\n      \"other\": \"Se {{ count }} artiklar\"\n    },\n    \"view_all\": \"Visa alla\",\n    \"add\": \"Lägg till\",\n    \"choose\": \"Välj\",\n    \"added\": \"Tillagd\",\n    \"show_less\": \"Visa färre\",\n    \"show_more\": \"Visa fler\",\n    \"close\": \"Stäng\",\n    \"more\": \"Mer\",\n    \"reset\": \"Återställ\",\n    \"zoom\": \"Zoom\",\n    \"close_dialog\": \"Stäng dialogruta\",\n    \"submit\": \"Skicka\",\n    \"remove_discount\": \"Ta bort rabatt {{ code }}\",\n    \"enter_using_password\": \"Ange lösenord för att komma in\",\n    \"enter_password\": \"Ange lösenord\",\n    \"view_store_information\": \"Visa butiksinformation\",\n    \"back\": \"Backa\",\n    \"log_in\": \"Logga in\",\n    \"log_out\": \"Logga ut\",\n    \"apply\": \"Tillämpa\",\n    \"open_image_in_full_screen\": \"Öppna bilden i helskärm\",\n    \"sign_in_options\": \"Andra inloggningsalternativ\",\n    \"sign_up\": \"Registrera dig\",\n    \"sort\": \"Sortera\",\n    \"show_all_options\": \"Visa alla alternativ\",\n    \"open\": \"Öppna\"\n  },\n  \"content\": {\n    \"reviews\": \"recensioner\",\n    \"language\": \"Språk\",\n    \"localization_region_and_language\": \"Region och språk\",\n    \"no_results_found\": \"Inga resultat hittades\",\n    \"cart_total\": \"Summa varukorg\",\n    \"your_cart_is_empty\": \"Din varukorg är tom\",\n    \"product_image\": \"Produktbild\",\n    \"product_information\": \"Produktinformation\",\n    \"quantity\": \"Kvantitet\",\n    \"product_total\": \"Produkter totalt\",\n    \"cart_estimated_total\": \"Beräknad totalsumma\",\n    \"seller_note\": \"Särskilda instruktioner\",\n    \"cart_subtotal\": \"Delsumma\",\n    \"discounts\": \"Rabatter\",\n    \"discount\": \"Rabatt\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Tullavgifter och skatter ingår. Rabatter och <a href=\\\"{{ link }}\\\">fraktkostnad</a> beräknas i kassan.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Tullavgifter och skatter ingår. Rabatter och fraktkostnad beräknas i kassan.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Skatter ingår. Rabatter och <a href=\\\"{{ link }}\\\">fraktkostnad</a> beräknas i kassan.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Skatter ingår. Rabatter och fraktkostnad beräknas i kassan.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Tullavgifter ingår. Skatter, rabatter och <a href=\\\"{{ link }}\\\">fraktkostnad</a> beräknas i kassan.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Tullavgifter ingår. Skatter, rabatter och fraktkostnad beräknas i kassan.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Skatter, rabatter och <a href=\\\"{{ link }}\\\">fraktkostnad</a> beräknas i kassan.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Skatter, rabatter och fraktkostnad beräknas i kassan.\",\n    \"checkout\": \"Betala\",\n    \"cart_title\": \"Varukorg\",\n    \"price\": \"Pris\",\n    \"price_regular\": \"Ordinarie pris\",\n    \"price_compare_at\": \"Jämförpris\",\n    \"price_sale\": \"Reapris\",\n    \"duties_and_taxes_included\": \"Tullavgifter och skatter ingår.\",\n    \"duties_included\": \"Tullavgifter ingår.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Frakt</a> beräknas i kassan.\",\n    \"taxes_included\": \"Skatter ingår.\",\n    \"product_badge_sold_out\": \"Slutsåld\",\n    \"product_badge_sale\": \"Rea\",\n    \"search_input_label\": \"Sökning\",\n    \"search_input_placeholder\": \"Sök\",\n    \"search_results\": \"Sökresultat\",\n    \"search_results_label\": \"Sökresultat\",\n    \"search_results_no_results\": \"Inga resultat hittades för ”{{ terms }}”. Försök med en annan sökning.\",\n    \"search_results_resource_articles\": \"Bloggposter\",\n    \"search_results_resource_collections\": \"Produktserier\",\n    \"search_results_resource_pages\": \"Sidor\",\n    \"search_results_resource_products\": \"Produkter\",\n    \"search_results_resource_queries\": \"Sökförslag\",\n    \"search_results_view_all\": \"Visa alla\",\n    \"search_results_view_all_button\": \"Visa alla\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} produkt\",\n      \"other\": \"{{ count }} produkter\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Standard\",\n      \"grid_fieldset\": \"Kolumnrutnät\",\n      \"single_item\": \"Enkel\",\n      \"zoom_out\": \"Zooma ut\"\n    },\n    \"unavailable\": \"Inte tillgängligt\",\n    \"collection_placeholder\": \"Produktseriens namn\",\n    \"product_card_placeholder\": \"Produktnamn\",\n    \"recently_viewed_products\": \"Nyligen visade\",\n    \"product_count\": \"Produktantal\",\n    \"item_count\": {\n      \"one\": \"{{ count }} artikel\",\n      \"other\": \"{{ count }} artiklar\"\n    },\n    \"errors\": \"Fel\",\n    \"price_from\": \"Från {{ price }}\",\n    \"search\": \"Sökning\",\n    \"search_results_no_results_check_spelling\": \"Inga resultat hittades för \\\"{{ terms }}\\\". Kontrollera stavningen eller använd ett annat ord eller fras.\",\n    \"featured_products\": \"Utvalda produkter\",\n    \"filters\": \"Filter\",\n    \"no_products_found\": \"Inga produkter hittades\",\n    \"price_filter_html\": \"Det högsta priset är {{ price }}\",\n    \"use_fewer_filters_html\": \"Prova att använda färre filter eller <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">rensa alla filter</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Läs mer ...\",\n    \"discount_code\": \"Rabattkod\",\n    \"pickup_available_at_html\": \"Hämtning tillgänglig på <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Hämtning tillgänglig, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Hämtning är inte tillgänglig just nu\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"wrong_password\": \"Fel lösenord\",\n    \"account_title\": \"Konto\",\n    \"account_title_personalized\": \"Hej {{ first_name }}!\",\n    \"account_orders\": \"Ordrar\",\n    \"account_profile\": \"Profil\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Tullavgifter och skatter ingår. Frakt beräknas i kassan.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Tullavgifter och skatter ingår. Frakt beräknas i kassan.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Tullavgifter ingår. Frakt beräknas i kassan.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Tullavgifter ingår. Frakt beräknas i kassan.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Moms och <a href=\\\"{{ link }}\\\">frakt</a> beräknas i kassan.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Skatt och frakt beräknas i kassan.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Skatter ingår. Frakt beräknas i kassan.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Skatter ingår. Frakt beräknas i kassan.\",\n    \"view_more_details\": \"Visa fler uppgifter\",\n    \"page_placeholder_title\": \"Sidrubrik\",\n    \"page_placeholder_content\": \"Välj en sida om du vill visa dess innehåll.\",\n    \"placeholder_image\": \"Platshållarbild\",\n    \"powered_by\": \"Denna butik kommer att drivas av\",\n    \"store_owner_link_html\": \"Är du butiksägaren? <a href=\\\"{{ link }}\\\">Logga in här</a>\",\n    \"shipping_discount_error\": \"Leveransrabatter visas i kassan när du lägger till en adress\",\n    \"discount_code_error\": \"Rabattkoden kan inte tillämpas på din varukorg\",\n    \"inventory_low_stock\": \"Låg lagernivå\",\n    \"inventory_in_stock\": \"I lager\",\n    \"inventory_out_of_stock\": \"Slut i lager\",\n    \"shipping_policy\": \"Fraktkostnad beräknas i kassan.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} kvar\",\n      \"other\": \"{{ count }} kvar\"\n    },\n    \"recipient_form_send_to\": \"Skicka till\",\n    \"recipient_form_email_label\": \"Mottagarens e-postadress\",\n    \"recipient_form_email_label_my_email\": \"Min e-postadress\",\n    \"recipient_form_email_address\": \"Mottagarens e-postadress\",\n    \"recipient_form_name_label\": \"Mottagarens namn (valfritt)\",\n    \"recipient_form_message\": \"Meddelande (valfritt)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} tecken har använts\",\n    \"recipient_form_send_on\": \"ÅÅÅÅ-MM-DD\",\n    \"recipient_form_send_on_label\": \"Skicka den (valfritt)\",\n    \"recipient_form_fields_visible\": \"Formulärfälten för mottagare är nu synliga\",\n    \"recipient_form_fields_hidden\": \"Formulärfälten för mottagare är nu dolda\",\n    \"recipient_form_error\": \"Ett fel uppstod när formuläret skulle skickas in\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} tecken har använts\",\n    \"terms_and_policies\": \"Villkor och policyer\",\n    \"pagination\": {\n      \"nav_label\": \"Navigering av paginering\",\n      \"previous\": \"Föregående\",\n      \"next\": \"Nästa\",\n      \"page\": \"Sidan {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Volymprissättning är tillgängligt\",\n    \"volume_pricing\": \"Volymprissättning\",\n    \"at_price_each\": \"för {{ price }}/st\",\n    \"each\": \"{{ price }}/st.\",\n    \"each_abbreviation\": \"st\",\n    \"price_at\": \"för\",\n    \"price_range\": \"Prisklass\",\n    \"cancel\": \"Avbryt\",\n    \"product_subtotal\": \"Delsumma för produkt\",\n    \"quantity_per_item\": \"/st\",\n    \"remove_all\": \"Ta bort alla\",\n    \"remove_all_items_confirmation\": \"Ta bort alla {{ count }} artiklar från din varukorg?\",\n    \"remove_one_item_confirmation\": \"Vill du ta bort 1 artikel från varukorgen?\",\n    \"total_items\": \"Totalt antal artiklar\",\n    \"variant\": \"Variant\",\n    \"variant_total\": \"Totalbelopp för variant\",\n    \"view_cart\": \"Visa varukorg\",\n    \"your_cart\": \"Din varukorg\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 artikel har lagts till i varukorgen\",\n      \"other\": \"{{ count }} artiklar har lagts till i varukorgen\"\n    },\n    \"item_count_cutoff\": \"Fler än {{ count }} artiklar\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Använd presentkortskoden online eller QR-koden i butik\",\n      \"title\": \"Här är ditt presentkort värt {{ value }} för {{ shop }}!\",\n      \"subtext\": \"Ditt presentkort\",\n      \"shop_link\": \"Besök webbshop\",\n      \"add_to_apple_wallet\": \"Lägg till i Apple Wallet\",\n      \"qr_image_alt\": \"QR-kod – skanna för att lösa in presentkort\",\n      \"copy_code\": \"Kopiera presentkortskod\",\n      \"expiration_date\": \"Går ut {{ expires_on }}\",\n      \"copy_code_success\": \"Koden kopierades\",\n      \"expired\": \"Har utgått\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} kommentar\",\n        \"other\": \"{{ count }} kommentarer\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-postadress\",\n      \"error\": \"Kommentaren publicerades inte. Åtgärda följande:\",\n      \"heading\": \"Lämna en kommentar\",\n      \"message\": \"Meddelande\",\n      \"moderated\": \"Notera att kommentarer behöver godkännas innan de publiceras.\",\n      \"name\": \"Namn\",\n      \"post\": \"Publicera kommentar\",\n      \"success_moderated\": \"Kommentaren har publicerats, väntar på moderering\",\n      \"success\": \"Kommentaren har publicerats\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"till\"\n  },\n  \"placeholders\": {\n    \"password\": \"Lösenord\",\n    \"search\": \"Sök\",\n    \"product_title\": \"Produktnamn\",\n    \"collection_title\": \"Produktseriens namn\",\n    \"blog_posts\": \"Bloggposter\",\n    \"blog_post_title\": \"Titel\",\n    \"blog_post_author\": \"Författare\",\n    \"blog_post_date\": \"Datum\",\n    \"blog_post_description\": \"Ett utdrag ur bloggpostens innehåll\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Lägg till i varukorgen\",\n      \"adding_to_cart\": \"Lägger till ...\",\n      \"added_to_cart\": \"Tillagd i varukorgen\",\n      \"add_to_cart_error\": \"Det uppstod ett fel när artikeln skulle läggas till i varukorgen\",\n      \"quantity_error_max\": \"Den här artikeln har max {{ maximum }}\",\n      \"sold_out\": \"Slutsåld\",\n      \"unavailable\": \"Inte tillgängliga\",\n      \"quantity\": \"Kvantitet\",\n      \"quantity_increments\": \"Ökningar i steg om {{ increment }}\",\n      \"quantity_minimum\": \"Minimum {{ minimum }}\",\n      \"quantity_maximum\": \"Maximum {{ maximum }}\",\n      \"in_cart\": \"i varukorg\",\n      \"default_title\": \"Standardtitel\",\n      \"sticky_add_to_cart\": \"Fält för att lägga till snabbt i varukorgen\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/sv.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Kantlinjer\",\n    \"collapsible_row\": \"Hopfällbar rad\",\n    \"colors\": \"Färger\",\n    \"custom_section\": \"Anpassad sektion\",\n    \"icon\": \"Ikon\",\n    \"logo_and_favicon\": \"Logotyp och favoritikon\",\n    \"overlapping_blocks\": \"Överlappande block\",\n    \"product_buy_buttons\": \"Köpknappar\",\n    \"product_description\": \"Beskrivning\",\n    \"product_price\": \"Pris\",\n    \"product_variant_picker\": \"Variantväljare\",\n    \"slideshow\": \"Bildspel\",\n    \"typography\": \"Typografi\",\n    \"video\": \"Video\",\n    \"slideshow_controls\": \"Bildspelskontroller\",\n    \"size\": \"Storlek\",\n    \"spacing\": \"Avstånd\",\n    \"product_recommendations\": \"Rekommenderade produkter\",\n    \"product_media\": \"Produktmedia\",\n    \"featured_collection\": \"Utvald produktserie\",\n    \"add_to_cart\": \"Lägg i varukorg\",\n    \"email_signup\": \"E-postregistrering\",\n    \"submit_button\": \"Skicka-knapp\",\n    \"grid_layout_selector\": \"Rutnätslayoutväljare\",\n    \"image\": \"Bild\",\n    \"list_items\": \"Listobjekt\",\n    \"facets\": \"Aspekter\",\n    \"variants\": \"Varianter\",\n    \"styles\": \"Stilar\",\n    \"product_cards\": \"Produktkort\",\n    \"primary_button\": \"Primär knapp\",\n    \"secondary_button\": \"Sekundär knapp\",\n    \"buttons\": \"Knappar\",\n    \"inputs\": \"Inmatningsfält\",\n    \"popovers_and_modals\": \"Popovers och spärrande fönster\",\n    \"marquee\": \"Remsa\",\n    \"pull_quote\": \"Citat\",\n    \"contact_form\": \"Kontaktformulär\",\n    \"featured_product\": \"Produktfokus\",\n    \"icons_with_text\": \"Ikoner med text\",\n    \"alternating_content_rows\": \"Alternerande rader\",\n    \"jumbo_text\": \"Jumbotext\",\n    \"accelerated_checkout\": \"Snabbkassa\",\n    \"accordion\": \"Dragspel\",\n    \"accordion_row\": \"Dragspelsrad\",\n    \"animations\": \"Animationer\",\n    \"announcement\": \"Tillkännagivande\",\n    \"announcement_bar\": \"Meddelandefält\",\n    \"badges\": \"Brickor\",\n    \"button\": \"Knapp\",\n    \"cart\": \"Varukorg\",\n    \"cart_items\": \"Varukorgsartiklar\",\n    \"cart_products\": \"Varukorgsprodukter\",\n    \"cart_title\": \"Varukorg\",\n    \"collection\": \"Produktserie\",\n    \"collection_card\": \"Produktseriekort\",\n    \"collection_columns\": \"Produktseriekolumner\",\n    \"collection_container\": \"Produktserie\",\n    \"collection_description\": \"Produktseriebeskrivning\",\n    \"collection_image\": \"Produktseriebild\",\n    \"collection_info\": \"Produktserieinformation\",\n    \"collection_list\": \"Produktserielista\",\n    \"collections\": \"Produktserier\",\n    \"content\": \"Innehåll\",\n    \"content_grid\": \"Innehållsrutnät\",\n    \"details\": \"Detaljer\",\n    \"divider\": \"Avgränsare\",\n    \"filters\": \"Filtrering och sortering\",\n    \"follow_on_shop\": \"Följ på Shop\",\n    \"footer\": \"Sidfot\",\n    \"footer_utilities\": \"Sidfotsverktyg\",\n    \"group\": \"Grupp\",\n    \"header\": \"Sidhuvud\",\n    \"heading\": \"Rubrik\",\n    \"icons\": \"Ikoner\",\n    \"image_with_text\": \"Bild med text\",\n    \"input\": \"Inmatningsfält\",\n    \"logo\": \"Logotyp\",\n    \"magazine_grid\": \"Tidskriftsrutnät\",\n    \"media\": \"Media\",\n    \"menu\": \"Meny\",\n    \"mobile_layout\": \"Mobillayout\",\n    \"payment_icons\": \"Betalningsikoner\",\n    \"popup_link\": \"Popup-länk\",\n    \"predictive_search\": \"Sök-popover\",\n    \"predictive_search_empty\": \"Tom prediktiv sökning\",\n    \"price\": \"Pris\",\n    \"product\": \"Produkt\",\n    \"product_card\": \"Produktkort\",\n    \"product_card_media\": \"Media\",\n    \"product_card_rendering\": \"Rendering av produktkort\",\n    \"product_grid\": \"Rutnät\",\n    \"product_grid_main\": \"Produktrutnät\",\n    \"product_image\": \"Produktbild\",\n    \"product_information\": \"Produktinformation\",\n    \"product_list\": \"Utvald produktserie\",\n    \"product_review_stars\": \"Recensionsstjärnor\",\n    \"quantity\": \"Antal\",\n    \"row\": \"Rad\",\n    \"search\": \"Sök\",\n    \"section\": \"Sektion\",\n    \"selected_variants\": \"Valda varianter\",\n    \"slide\": \"Bild\",\n    \"social_media_links\": \"Länkar till sociala medier\",\n    \"spacer\": \"Avstånd\",\n    \"steps\": \"Steg\",\n    \"summary\": \"Sammanfattning\",\n    \"swatches\": \"Provkartor\",\n    \"testimonials\": \"Kundomdömen\",\n    \"text\": \"Text\",\n    \"title\": \"Rubrik\",\n    \"utilities\": \"Verktyg\",\n    \"search_input\": \"Sökinmatning\",\n    \"search_results\": \"Sökresultat\",\n    \"read_only\": \"Skrivskyddad\",\n    \"collection_title\": \"Produktserienamn\",\n    \"collections_bento\": \"Produktserielista: Bento\",\n    \"collection_links\": \"Produktserielänkar\",\n    \"count\": \"Antal\",\n    \"faq_section\": \"Vanliga frågor\",\n    \"hero\": \"Huvudbild\",\n    \"view_all_button\": \"Visa alla\",\n    \"video_section\": \"Video\",\n    \"product_title\": \"Produktnamn\",\n    \"custom_liquid\": \"Anpassad Liquid\",\n    \"blog\": \"Blogg\",\n    \"blog_post\": \"Bloggpost\",\n    \"blog_posts\": \"Bloggposter\",\n    \"caption\": \"Bildtext\",\n    \"collection_card_image\": \"Bild\",\n    \"collection_links_spotlight\": \"Produktserielänkar: Spotlight\",\n    \"collection_links_text\": \"Produktserielänkar: Text\",\n    \"collections_carousel\": \"Produktserielista: Karusell\",\n    \"collections_editorial\": \"Produktserielista: Redaktionellt\",\n    \"collections_grid\": \"Produktserielista: Rutnät\",\n    \"copyright\": \"Upphovsrätt\",\n    \"divider_section\": \"Avgränsare\",\n    \"drawers\": \"Utfällbara lådor\",\n    \"editorial\": \"Redaktionellt\",\n    \"editorial_jumbo_text\": \"Redaktionellt: Jumbotext\",\n    \"hero_marquee\": \"Huvudbild: Remsa\",\n    \"input_fields\": \"Inmatningsfält\",\n    \"local_pickup\": \"Lokal upphämtning\",\n    \"marquee_section\": \"Remsa\",\n    \"media_with_text\": \"Media med text\",\n    \"page\": \"Sida\",\n    \"page_content\": \"Innehåll\",\n    \"page_layout\": \"Sidlayout\",\n    \"policy_list\": \"Policylänkar\",\n    \"prices\": \"Priser\",\n    \"product_list_button\": \"Visa alla-knapp\",\n    \"products_carousel\": \"Utvald produktserie: Karusell\",\n    \"products_editorial\": \"Utvald produktserie: Redaktionellt\",\n    \"products_grid\": \"Utvald produktserie: Rutnät\",\n    \"social_link\": \"Social länk\",\n    \"split_showcase\": \"Delad visning\",\n    \"variant_pickers\": \"Variantväljare\",\n    \"pills\": \"Etiketter\",\n    \"large_logo\": \"Stor logotyp\",\n    \"product_inventory\": \"Produktlager\",\n    \"description\": \"Beskrivning\",\n    \"featured_image\": \"Utvald bild\",\n    \"multicolumn\": \"Flerkolumn\",\n    \"rich_text_section\": \"RTF\",\n    \"product_custom_property\": \"Särskilda instruktioner\",\n    \"hero_bottom_aligned\": \"Huvudbild: Bottenjusterad\",\n    \"blog_card\": \"Bloggkort\",\n    \"blog_posts_grid\": \"Bloggposter: Rutnät\",\n    \"blog_posts_carousel\": \"Bloggposter: Karusell\",\n    \"blog_posts_editorial\": \"Bloggposter: Redaktionellt\",\n    \"excerpt\": \"Utdrag\",\n    \"footer_password\": \"Lösenordssidfot\",\n    \"policies_and_links\": \"Policyer och länkar\",\n    \"card\": \"Kort\",\n    \"carousel\": \"Karusell\",\n    \"carousel_content\": \"Karusellinnehåll\",\n    \"quick_order_list\": \"Snabborderlista\",\n    \"column\": \"Kolumn\",\n    \"comparison_slider\": \"Jämförelsereglage\",\n    \"slideshow_full_frame\": \"Bildspel: Helskärm\",\n    \"slideshow_inset\": \"Bildspel: Infällt\",\n    \"image_compare\": \"Bildjämförelse\",\n    \"subheading\": \"Underrubrik\",\n    \"featured_product_information\": \"Utvald produkt\",\n    \"product_hotspots\": \"Produkthotspots\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"Lagerhållningsenhet\",\n    \"layered_slideshow\": \"Bildspel med lager\"\n  },\n  \"settings\": {\n    \"alignment\": \"Justering\",\n    \"autoplay\": \"Autouppspelning\",\n    \"background\": \"Bakgrund\",\n    \"border_radius\": \"Hörnradie\",\n    \"border_width\": \"Kantlinjetjocklek\",\n    \"borders\": \"Kantlinjer\",\n    \"bottom_padding\": \"Utfyllnad i nederkant\",\n    \"button\": \"Knapp\",\n    \"color\": \"Färg\",\n    \"colors\": \"Färger\",\n    \"content_alignment\": \"Innehållsjustering\",\n    \"content_direction\": \"Innehållsriktning\",\n    \"content_position\": \"Innehållsposition\",\n    \"cover_image_size\": \"Omslagsbildens storlek\",\n    \"cover_image\": \"Omslagsbild\",\n    \"custom_minimum_height\": \"Anpassad minimihöjd\",\n    \"custom_width\": \"Anpassad bredd\",\n    \"enable_video_looping\": \"Loopa video\",\n    \"favicon\": \"Favoritikon\",\n    \"font_family\": \"Teckensnittsfamilj\",\n    \"gap\": \"Mellanrum\",\n    \"geometric_translate_y\": \"Geometrisk translate Y\",\n    \"heading\": \"Rubrik\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Bild\",\n    \"image_icon\": \"Bildikon\",\n    \"image_opacity\": \"Bildopacitet\",\n    \"image_position\": \"Bildposition\",\n    \"image_ratio\": \"Bildförhållande\",\n    \"label\": \"Etikett\",\n    \"line_height\": \"Radavstånd\",\n    \"link\": \"Länk\",\n    \"layout_gap\": \"Layoutmellanrum\",\n    \"make_section_full_width\": \"Gör avsnittet till full bredd\",\n    \"minimum_height\": \"Minimihöjd\",\n    \"opacity\": \"Opacitet\",\n    \"overlay_opacity\": \"Överlagringsopacitet\",\n    \"padding\": \"Utfyllnad\",\n    \"primary_color\": \"Länkar\",\n    \"product\": \"Produkt\",\n    \"section_width\": \"Avsnittsbredd\",\n    \"size\": \"Storlek\",\n    \"slide_spacing\": \"Mellanrum mellan bilder\",\n    \"slide_width\": \"Bildbredd\",\n    \"slideshow_fullwidth\": \"Bilder i full bredd\",\n    \"style\": \"Stil\",\n    \"text\": \"Text\",\n    \"text_case\": \"Skiftläge\",\n    \"top_padding\": \"Utfyllnad i överkant\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alternativtext\",\n    \"video_loop\": \"Loopa video\",\n    \"video_position\": \"Videoposition\",\n    \"width\": \"Bredd\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"Begränsa innehållsbredd\",\n    \"color_scheme\": \"Färgschema\",\n    \"inherit_color_scheme\": \"Ärv färgschema\",\n    \"product_count\": \"Produktantal\",\n    \"product_type\": \"Produkttyp\",\n    \"content_width\": \"Innehållsbredd\",\n    \"collection\": \"Produktserie\",\n    \"enable_sticky_content\": \"Fäst innehåll på dator\",\n    \"error_color\": \"Fel\",\n    \"success_color\": \"Klart\",\n    \"primary_font\": \"Primärt teckensnitt\",\n    \"secondary_font\": \"Sekundärt teckensnitt\",\n    \"tertiary_font\": \"Tertiärt teckensnitt\",\n    \"columns\": \"Kolumner\",\n    \"items_to_show\": \"Artiklar att visa\",\n    \"layout\": \"Layout\",\n    \"layout_type\": \"Typ\",\n    \"show_grid_layout_selector\": \"Visa väljare för rutnätslayout\",\n    \"view_more_show\": \"Visa ”Visa mer”-knappen\",\n    \"image_gap\": \"Bildmellanrum\",\n    \"width_desktop\": \"Bredd för dator\",\n    \"width_mobile\": \"Bredd för mobil\",\n    \"border_style\": \"Kantlinjestil\",\n    \"height\": \"Höjd\",\n    \"thickness\": \"Tjocklek\",\n    \"stroke\": \"Linje\",\n    \"filter_style\": \"Filterstil\",\n    \"swatches\": \"Provkartor\",\n    \"quick_add_colors\": \"Färger för snabbtillägg\",\n    \"divider_color\": \"Avgränsare\",\n    \"border_opacity\": \"Kantlinjeopacitet\",\n    \"hover_background\": \"Hovringsbakgrund\",\n    \"hover_borders\": \"Kantlinjer vid hovring\",\n    \"hover_text\": \"Hovringstext\",\n    \"primary_hover_color\": \"Hovringslänkar\",\n    \"primary_button_text\": \"Text för primär knapp\",\n    \"primary_button_background\": \"Bakgrund för primär knapp\",\n    \"primary_button_border\": \"Kantlinje för primär knapp\",\n    \"secondary_button_text\": \"Text för sekundär knapp\",\n    \"secondary_button_background\": \"Bakgrund för sekundär knapp\",\n    \"secondary_button_border\": \"Kantlinje för sekundär knapp\",\n    \"shadow_color\": \"Skugga\",\n    \"mobile_logo_image\": \"Mobillogotyp\",\n    \"video_autoplay\": \"Autouppspelning\",\n    \"video_cover_image\": \"Omslagsbild\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Källa\",\n    \"shadow_opacity\": \"Skuggopacitet\",\n    \"show_filter_label\": \"Textetiketter för tillämpade filter\",\n    \"show_swatch_label\": \"Textetiketter för provkartor\",\n    \"first_row_media_position\": \"Mediaposition på första raden\",\n    \"accordion\": \"Dragspel\",\n    \"aspect_ratio\": \"Bildförhållande\",\n    \"auto_rotate_announcements\": \"Autorotera meddelanden\",\n    \"auto_rotate_slides\": \"Autorotera bilder\",\n    \"background_color\": \"Bakgrundsfärg\",\n    \"badge_corner_radius\": \"Hörnradie\",\n    \"badge_position\": \"Position på kort\",\n    \"badge_sale_color_scheme\": \"Rea\",\n    \"badge_sold_out_color_scheme\": \"Slutsåld\",\n    \"behavior\": \"Beteende\",\n    \"blur\": \"Skugguskärpa\",\n    \"border\": \"Kantlinje\",\n    \"bottom\": \"Nederkant\",\n    \"card_image_height\": \"Produktbildshöjd\",\n    \"carousel_on_mobile\": \"Karusell på mobila enheter\",\n    \"cart_count\": \"Antal i varukorg\",\n    \"cart_items\": \"Artiklar i varukorg\",\n    \"cart_related_products\": \"Relaterade produkter\",\n    \"cart_title\": \"Varukorg\",\n    \"cart_total\": \"Varukorgens totalsumma\",\n    \"cart_type\": \"Typ\",\n    \"case\": \"Skiftläge\",\n    \"checkout_buttons\": \"Knappar för snabbkassa\",\n    \"collection_list\": \"Produktserier\",\n    \"collection_templates\": \"Produktseriemallar\",\n    \"content\": \"Innehåll\",\n    \"corner_radius\": \"Hörnradie\",\n    \"country_region\": \"Land/region\",\n    \"currency_code\": \"Valutakod\",\n    \"custom_height\": \"Anpassad höjd\",\n    \"custom_mobile_size\": \"Anpassad storlek för mobil\",\n    \"desktop_height\": \"Höjd för dator\",\n    \"direction\": \"Riktning\",\n    \"display\": \"Visning\",\n    \"divider_thickness\": \"Avgränsarens tjocklek\",\n    \"divider\": \"Avgränsare\",\n    \"dividers\": \"Avgränsare\",\n    \"drop_shadow\": \"Skugga\",\n    \"empty_state_collection_info\": \"Visas innan en sökning har angetts\",\n    \"empty_state_collection\": \"Produktserie för tomt läge\",\n    \"enable_filtering\": \"Filter\",\n    \"enable_grid_density\": \"Kontroll för rutnätslayout\",\n    \"enable_sorting\": \"Sortering\",\n    \"enable_zoom\": \"Aktivera zoom\",\n    \"equal_columns\": \"Lika kolumner\",\n    \"expand_first_group\": \"Öppna första gruppen\",\n    \"extend_media_to_screen_edge\": \"Utöka media till skärmkant\",\n    \"extend_summary\": \"Utöka till skärmkant\",\n    \"extra_large\": \"Extra stor\",\n    \"extra_small\": \"Extra liten\",\n    \"fixed_height\": \"Höjd i pixlar\",\n    \"fixed_width\": \"Bredd i pixlar\",\n    \"flag\": \"Flagga\",\n    \"font_price\": \"Teckensnitt för pris\",\n    \"font_weight\": \"Teckensnittsvikt\",\n    \"font\": \"Teckensnitt\",\n    \"full_width_first_image\": \"Första bilden i full bredd\",\n    \"full_width_on_mobile\": \"Full bredd på mobila enheter\",\n    \"heading_preset\": \"Förinställning för rubrik\",\n    \"hide_padding\": \"Dölj utfyllnad\",\n    \"hide_unselected_variant_media\": \"Dölj media för ej valda varianter\",\n    \"horizontal_gap\": \"Horisontellt mellanrum\",\n    \"horizontal_offset\": \"Skuggans horisontella förskjutning\",\n    \"hover_behavior\": \"Hovringsbeteende\",\n    \"icon_background\": \"Ikonbakgrund\",\n    \"icons\": \"Ikoner\",\n    \"image_border_radius\": \"Bildens hörnradie\",\n    \"installments\": \"Avbetalningar\",\n    \"integrated_button\": \"Integrerad knapp\",\n    \"language_selector\": \"Språkväljare\",\n    \"large\": \"Stor\",\n    \"left_padding\": \"Utfyllnad till vänster\",\n    \"left\": \"Vänster\",\n    \"letter_spacing\": \"Teckenavstånd\",\n    \"limit_media_to_screen_height\": \"Begränsa till skärmhöjd\",\n    \"limit_product_details_width\": \"Begränsa produktinformationsbredd\",\n    \"link_preset\": \"Förinställning för länk\",\n    \"links\": \"Länkar\",\n    \"logo_font\": \"Teckensnitt för logotyp\",\n    \"logo\": \"Logotyp\",\n    \"loop\": \"Loopa\",\n    \"make_details_sticky_desktop\": \"Fäst på dator\",\n    \"max_width\": \"Maxbredd\",\n    \"media_height\": \"Mediehöjd\",\n    \"media_overlay\": \"Medieöverlagring\",\n    \"media_position\": \"Medieposition\",\n    \"media_type\": \"Medietyp\",\n    \"media_width\": \"Mediebredd\",\n    \"menu\": \"Meny\",\n    \"mobile_columns\": \"Kolumner för mobil\",\n    \"mobile_height\": \"Höjd för mobil\",\n    \"mobile_quick_add\": \"Snabbtillägg för mobil\",\n    \"motion_direction\": \"Rörelseriktning\",\n    \"motion\": \"Rörelse\",\n    \"movement_direction\": \"Rörelseriktning\",\n    \"navigation_bar_color_scheme\": \"Färgschema för navigeringsfält\",\n    \"navigation_bar\": \"Navigeringsfält\",\n    \"navigation\": \"Navigering\",\n    \"open_new_tab\": \"Öppna länk i ny flik\",\n    \"overlay_color\": \"Överlagringsfärg\",\n    \"overlay\": \"Överlagring\",\n    \"padding_bottom\": \"Utfyllnad i nederkant\",\n    \"padding_horizontal\": \"Horisontell utfyllnad\",\n    \"padding_top\": \"Utfyllnad i överkant\",\n    \"page_width\": \"Sidbredd\",\n    \"pagination\": \"Paginering\",\n    \"percent_height\": \"Höjd i procent\",\n    \"percent_size_mobile\": \"Storlek i procent\",\n    \"percent_size\": \"Storlek i procent\",\n    \"percent_width\": \"Bredd i procent\",\n    \"pixel_size_mobile\": \"Storlek i pixlar\",\n    \"pixel_size\": \"Storlek i pixlar\",\n    \"placement\": \"Placering\",\n    \"position\": \"Position\",\n    \"preset\": \"Förinställning\",\n    \"product_cards\": \"Produktkort\",\n    \"product_pages\": \"Produktsidor\",\n    \"product_templates\": \"Produktmallar\",\n    \"products\": \"Produkter\",\n    \"quick_add\": \"Snabbtillägg\",\n    \"ratio\": \"Förhållande\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Antal recensioner\",\n    \"right\": \"Höger\",\n    \"row_height\": \"Radhöjd\",\n    \"row\": \"Rad\",\n    \"seller_note\": \"Tillåt meddelande till säljaren\",\n    \"shape\": \"Form\",\n    \"show_as_accordion\": \"Visa som dragspel på mobila enheter\",\n    \"show_sale_price_first\": \"Visa reapris först\",\n    \"show_tax_info\": \"Skatteinformation\",\n    \"show\": \"Visa\",\n    \"size_mobile\": \"Storlek för mobil\",\n    \"small\": \"Liten\",\n    \"speed\": \"Hastighet\",\n    \"statement\": \"Utdrag\",\n    \"sticky_header\": \"Fäst sidhuvud\",\n    \"text_hierarchy\": \"Texthierarki\",\n    \"text_presets\": \"Förinställningar för text\",\n    \"title\": \"Rubrik\",\n    \"top\": \"Överkant\",\n    \"type\": \"Typ\",\n    \"type_preset\": \"Förinställning för text\",\n    \"underline_thickness\": \"Understrykningens tjocklek\",\n    \"unit\": \"Enhet\",\n    \"variant_images\": \"Variantbilder\",\n    \"vendor\": \"Säljare\",\n    \"vertical_gap\": \"Vertikalt mellanrum\",\n    \"vertical_offset\": \"Skuggans vertikala förskjutning\",\n    \"vertical_on_mobile\": \"Vertikal på mobila enheter\",\n    \"view_all_as_last_card\": \"”Visa alla” som sista kort\",\n    \"weight\": \"Vikt\",\n    \"wrap\": \"Radbryt\",\n    \"read_only\": \"Skrivskyddad\",\n    \"always_stack_buttons\": \"Stapla alltid knappar\",\n    \"custom_mobile_width\": \"Anpassad bredd för mobil\",\n    \"gradient_direction\": \"Toningsriktning\",\n    \"horizontal_padding\": \"Horisontell utfyllnad\",\n    \"overlay_style\": \"Överlagringsstil\",\n    \"show_count\": \"Visa antal\",\n    \"transparent_background\": \"Transparent bakgrund\",\n    \"vertical_padding\": \"Vertikal utfyllnad\",\n    \"visibility\": \"Synlighet\",\n    \"account\": \"Konto\",\n    \"align_baseline\": \"Justera textens baslinje\",\n    \"add_discount_code\": \"Tillåt rabatter i varukorgen\",\n    \"background_overlay\": \"Bakgrundsöverlagring\",\n    \"background_media\": \"Bakgrundsmedia\",\n    \"border_thickness\": \"Kantlinjetjocklek\",\n    \"bottom_row\": \"Nedre raden\",\n    \"button_text_case\": \"Skiftläge\",\n    \"card_size\": \"Kortstorlek\",\n    \"auto_open_cart_drawer\": \"”Lägg till i varukorgen” öppnar lådan automatiskt\",\n    \"collection_count\": \"Antal produktserier\",\n    \"collection_title_case\": \"Skiftläge för produktserienamn\",\n    \"custom_liquid\": \"Liquid-kod\",\n    \"default\": \"Standard\",\n    \"default_logo\": \"Standardlogotyp\",\n    \"divider_width\": \"Avgränsarens bredd\",\n    \"headings\": \"Rubriker\",\n    \"hide_logo_on_home_page\": \"Dölj logotypen på startsidan\",\n    \"inverse\": \"Inverterad\",\n    \"inverse_logo\": \"Inverterad logotyp\",\n    \"layout_style\": \"Stil\",\n    \"length\": \"Längd\",\n    \"mobile_card_size\": \"Kortstorlek för mobil\",\n    \"mobile_pagination\": \"Paginering för mobil\",\n    \"open_row_by_default\": \"Öppna rad som standard\",\n    \"page\": \"Sida\",\n    \"page_transition_enabled\": \"Sidövergång\",\n    \"product_and_card_title_case\": \"Skiftläge för produkt- och kortnamn\",\n    \"product_title_case\": \"Skiftläge för produktnamn\",\n    \"right_padding\": \"Utfyllnad till höger\",\n    \"search\": \"Sök\",\n    \"search_icon\": \"Sökikon\",\n    \"search_position\": \"Position\",\n    \"search_row\": \"Rad\",\n    \"show_author\": \"Författare\",\n    \"show_alignment\": \"Visa justering\",\n    \"show_date\": \"Datum\",\n    \"show_pickup_availability\": \"Visa tillgänglighet för hämtning\",\n    \"show_search\": \"Visa sökning\",\n    \"text_label_case\": \"Skiftläge för textetikett\",\n    \"use_inverse_logo\": \"Använd inverterad logotyp\",\n    \"product_corner_radius\": \"Produktens hörnradie\",\n    \"card_corner_radius\": \"Kortets hörnradie\",\n    \"alignment_mobile\": \"Mobiljustering\",\n    \"animation_repeat\": \"Upprepa animering\",\n    \"blurred_reflection\": \"Suddig reflektion\",\n    \"card_hover_effect\": \"Hovringseffekt för kort\",\n    \"inventory_threshold\": \"Tröskelvärde för lågt lagersaldo\",\n    \"reflection_opacity\": \"Reflektionsopacitet\",\n    \"show_inventory_quantity\": \"Visa antal vid lågt lagersaldo\",\n    \"transition_to_main_product\": \"Övergång från produktkort till produktsida\",\n    \"show_second_image_on_hover\": \"Visa andra bilden vid hovring\",\n    \"media\": \"Media\",\n    \"product_card_carousel\": \"Visa karusell\",\n    \"media_fit\": \"Medieanpassning\",\n    \"scroll_speed\": \"Tid till nästa meddelande\",\n    \"show_powered_by_shopify\": \"Visa ”Drivs av Shopify”\",\n    \"seller_note_open_by_default\": \"Öppna meddelande till säljaren som standard\",\n    \"gift_card_form\": \"Formulär för presentkort\",\n    \"add_to_cart_animation\": \"Lägg till i varukorgen\",\n    \"custom_link\": \"Anpassad länk\",\n    \"product_custom_property\": {\n      \"heading\": \"Rubrik\",\n      \"description\": \"Beskrivning\",\n      \"key\": \"Egenskapsnamn\",\n      \"key_info\": \"Får inte vara tomt och måste vara unikt för varje block. Visas i varukorgen, kassan och orderuppgifterna.\",\n      \"placeholder_text\": \"Platshållartext\",\n      \"default_heading\": \"Anpassa din produkt\",\n      \"default_placeholder\": \"Ange dina särskilda anvisningar\",\n      \"default_property_key\": \"Särskilda anvisningar\",\n      \"max_length\": \"Max antal tecken\",\n      \"required\": \"Inmatning krävs för att lägga till artikeln i varukorgen\",\n      \"input_type\": \"Inmatningstyp\",\n      \"input_type_text\": \"Text\",\n      \"input_type_checkbox\": \"Kryssruta\",\n      \"content_settings\": \"Innehållsinställningar\",\n      \"buyers_input\": \"Köparens inmatning\",\n      \"checkbox_label\": \"Etikett för kryssruta\",\n      \"default_checkbox_label\": \"Inkludera presentinslagning\",\n      \"heading_preset\": \"Rubrik\",\n      \"description_preset\": \"Beskrivning\",\n      \"input_preset\": \"Inmatning\",\n      \"checkbox_preset\": \"Etikett för kryssruta\"\n    },\n    \"blog\": \"Blogg\",\n    \"post_count\": \"Antal inlägg\",\n    \"animation\": \"Animering\",\n    \"top_level_size\": \"Storlek för högsta nivån\",\n    \"empty_cart_button_link\": \"Knapplänk för tom varukorg\",\n    \"auto_load_products\": \"Läs in produkter automatiskt vid rullning\",\n    \"products_per_page\": \"Produkter per sida\",\n    \"custom_mobile_media\": \"Visa separat media på mobilen\",\n    \"stack_media_on_mobile\": \"Stapla media\",\n    \"full_frame_on_mobile\": \"Full bredd på mobila enheter\",\n    \"skus\": \"Lagerhållningsenheter\",\n    \"variant_per_page\": \"Varianter per sida\",\n    \"image_1\": \"Bild 1\",\n    \"image_2\": \"Bild 2\",\n    \"media_type_1\": \"Medietyp\",\n    \"media_type_2\": \"Medietyp 2\",\n    \"after_image\": \"Efterbild\",\n    \"before_image\": \"Bild före\",\n    \"cs_slider_style\": \"Stil för reglage\",\n    \"cs_slider_color\": \"Färg på reglage\",\n    \"cs_slider_inner_color\": \"Inre färg på reglage\",\n    \"text_on_images\": \"Text på bilder\",\n    \"card_height\": \"Korthöjd\",\n    \"submenu_size\": \"Storlek på undermeny\",\n    \"desktop_position\": \"Position för dator\",\n    \"desktop_pagination\": \"Paginering för dator\",\n    \"bullseye_color\": \"Inre färg\",\n    \"hotspot_color\": \"Hotspot-färg\",\n    \"product_price_typography\": \"Typografi för produktpris\",\n    \"product_title_typography\": \"Typografi för produktnamn\",\n    \"x_position\": \"Horisontell position\",\n    \"y_position\": \"Vertikal position\",\n    \"enable_sticky_add_to_cart\": \"Fast fält för ”Lägg till i varukorgen”\",\n    \"sticky_add_to_cart\": \"Fast ”Lägg till i varukorgen”\",\n    \"actions_display_style\": \"Menystil\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Pil\",\n    \"auto\": \"Auto\",\n    \"banana\": \"Banan\",\n    \"bottle\": \"Flaska\",\n    \"box\": \"Ruta\",\n    \"buttons\": \"Knappar\",\n    \"carrot\": \"Morot\",\n    \"center\": \"Centrerad\",\n    \"chat_bubble\": \"Pratbubbla\",\n    \"clipboard\": \"Urklipp\",\n    \"contain\": \"Inneslut\",\n    \"counter\": \"Räknare\",\n    \"cover\": \"Täck\",\n    \"custom\": \"Anpassad\",\n    \"dairy_free\": \"Mejerifri\",\n    \"dairy\": \"Mejeri\",\n    \"default\": \"Standard\",\n    \"dropdowns\": \"Rullgardinsmenyer\",\n    \"dots\": \"Prickar\",\n    \"dryer\": \"Torktumlare\",\n    \"end\": \"Slut\",\n    \"eye\": \"Öga\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"Fyll\",\n    \"fire\": \"Eld\",\n    \"fit\": \"Anpassa\",\n    \"full\": \"Full\",\n    \"full_and_page\": \"Full bakgrund, sidbreddsinnehåll\",\n    \"gluten_free\": \"Glutenfri\",\n    \"heading\": \"Rubrik\",\n    \"heart\": \"Hjärta\",\n    \"horizontal\": \"Horisontell\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Strykjärn\",\n    \"landscape\": \"Liggande\",\n    \"large\": \"Stor\",\n    \"leaf\": \"Löv\",\n    \"leather\": \"Läder\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"Blixt\",\n    \"link\": \"Länk\",\n    \"lipstick\": \"Läppstift\",\n    \"lock\": \"Lås\",\n    \"lowercase\": \"gemener\",\n    \"m\": \"M\",\n    \"map_pin\": \"Kartnål\",\n    \"medium\": \"Medium\",\n    \"none\": \"Ingen\",\n    \"numbers\": \"Siffror\",\n    \"nut_free\": \"Nötfri\",\n    \"outline\": \"Kontur\",\n    \"page\": \"Sida\",\n    \"pants\": \"Byxor\",\n    \"paw_print\": \"Tassavtryck\",\n    \"pepper\": \"Peppar\",\n    \"perfume\": \"Parfym\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Flygplan\",\n    \"plant\": \"Växt\",\n    \"portrait\": \"Stående\",\n    \"price_tag\": \"Prislapp\",\n    \"question_mark\": \"Frågetecken\",\n    \"recycle\": \"Återvinn\",\n    \"return\": \"Retur\",\n    \"ruler\": \"Linjal\",\n    \"s\": \"S\",\n    \"sentence\": \"Mening\",\n    \"serving_dish\": \"Serveringsfat\",\n    \"shirt\": \"Skjorta\",\n    \"shoe\": \"Sko\",\n    \"silhouette\": \"Silhuett\",\n    \"small\": \"Liten\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Snöflinga\",\n    \"solid\": \"Solid\",\n    \"space_between\": \"Mellanrum\",\n    \"square\": \"Kvadrat\",\n    \"star\": \"Stjärna\",\n    \"start\": \"Start\",\n    \"stopwatch\": \"Stoppur\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Lastbil\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"Versaler\",\n    \"vertical\": \"Vertikal\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Tvätt\",\n    \"circle\": \"Cirkel\",\n    \"swatches\": \"Provkartor\",\n    \"full_and_page_offset_left\": \"Full bakgrund, sidbreddsinnehåll, förskjutet åt vänster\",\n    \"full_and_page_offset_right\": \"Full bakgrund, sidbreddsinnehåll, förskjutet åt höger\",\n    \"offset_left\": \"Förskjutning vänster\",\n    \"offset_right\": \"Förskjutning höger\",\n    \"page_center_aligned\": \"Sida, centrerad\",\n    \"page_left_aligned\": \"Sida, vänsterjusterad\",\n    \"page_right_aligned\": \"Sida, högerjusterad\",\n    \"button\": \"Knapp\",\n    \"caption\": \"Bildtext\",\n    \"h1\": \"Rubrik 1\",\n    \"h2\": \"Rubrik 2\",\n    \"h3\": \"Rubrik 3\",\n    \"h4\": \"Rubrik 4\",\n    \"h5\": \"Rubrik 5\",\n    \"h6\": \"Rubrik 6\",\n    \"paragraph\": \"Stycke\",\n    \"primary\": \"Primär\",\n    \"secondary\": \"Sekundär\",\n    \"tertiary\": \"Tertiär\",\n    \"chevron_left\": \"Vinkel vänster\",\n    \"chevron_right\": \"Vinkel höger\",\n    \"diamond\": \"Diamant\",\n    \"grid\": \"Rutnät\",\n    \"parallelogram\": \"Parallellogram\",\n    \"rounded\": \"Rundad\",\n    \"fit_content\": \"Anpassa\",\n    \"pills\": \"Piller\",\n    \"heavy\": \"Tjock\",\n    \"thin\": \"Tunn\",\n    \"drawer\": \"Utfällbar låda\",\n    \"preview\": \"Förhandsgranska\",\n    \"text\": \"Text\",\n    \"video_uploaded\": \"Uppladdad\",\n    \"video_external_url\": \"Extern URL\",\n    \"aspect_ratio\": \"Bildförhållande\",\n    \"fixed\": \"Fast\",\n    \"pixel\": \"Pixel\",\n    \"percent\": \"Procent\",\n    \"above_carousel\": \"Ovanför karusell\",\n    \"all\": \"Alla\",\n    \"up\": \"Uppåt\",\n    \"down\": \"Ner\",\n    \"always\": \"Alltid\",\n    \"arrows_large\": \"Stora pilar\",\n    \"arrows\": \"Pilar\",\n    \"balance\": \"Balans\",\n    \"bento\": \"Bento\",\n    \"black\": \"Svart\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Brödtext (Stor)\",\n    \"body_regular\": \"Brödtext (Normal)\",\n    \"body_small\": \"Brödtext (Liten)\",\n    \"bold\": \"Fet\",\n    \"bottom_left\": \"Längst ner till vänster\",\n    \"bottom_right\": \"Längst ner till höger\",\n    \"bottom\": \"Nederkant\",\n    \"capitalize\": \"Inledande versal\",\n    \"caret\": \"Caret\",\n    \"carousel\": \"Karusell\",\n    \"check_box\": \"Kryssruta\",\n    \"chevron_large\": \"Stora vinklar\",\n    \"chevron\": \"Vinkel\",\n    \"chevrons\": \"Vinklar\",\n    \"classic\": \"Klassisk\",\n    \"collection_images\": \"Produktseriebilder\",\n    \"color\": \"Färg\",\n    \"complementary\": \"Kompletterande\",\n    \"dissolve\": \"Tona\",\n    \"dotted\": \"Prickig\",\n    \"editorial\": \"Redaktionell\",\n    \"extra_large\": \"Extra stor\",\n    \"extra_small\": \"Extra liten\",\n    \"featured_collections\": \"Utvalda produktserier\",\n    \"featured_products\": \"Utvalda produkter\",\n    \"font_primary\": \"Primär\",\n    \"font_secondary\": \"Sekundär\",\n    \"font_tertiary\": \"Tertiär\",\n    \"forward\": \"Framåt\",\n    \"full_screen\": \"Helskärm\",\n    \"gradient\": \"Toning\",\n    \"heading_extra_large\": \"Rubrik (Extra stor)\",\n    \"heading_extra_small\": \"Rubrik (Extra liten)\",\n    \"heading_large\": \"Rubrik (Stor)\",\n    \"heading_regular\": \"Rubrik (Normal)\",\n    \"heading_small\": \"Rubrik (Liten)\",\n    \"icon\": \"Ikon\",\n    \"image\": \"Bild\",\n    \"input\": \"Inmatningsfält\",\n    \"inside_carousel\": \"Inuti karusell\",\n    \"inverse_large\": \"Inverterad stor\",\n    \"inverse\": \"Inverterad\",\n    \"large_arrows\": \"Stora pilar\",\n    \"large_chevrons\": \"Stora vinklar\",\n    \"left\": \"Vänster\",\n    \"light\": \"Lätt\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Lös\",\n    \"media_first\": \"Media först\",\n    \"media_second\": \"Media andra\",\n    \"modal\": \"Spärrande fönster\",\n    \"narrow\": \"Smal\",\n    \"never\": \"Aldrig\",\n    \"next_to_carousel\": \"Bredvid karusell\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Ingen radbrytning\",\n    \"off_media\": \"Utanför media\",\n    \"on_media\": \"På media\",\n    \"on_scroll_up\": \"Vid rullning uppåt\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Piller\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"Snygg\",\n    \"price\": \"Pris\",\n    \"primary_style\": \"Primär stil\",\n    \"rectangle\": \"Rektangel\",\n    \"regular\": \"Normal\",\n    \"related\": \"Relaterad\",\n    \"reverse\": \"Omvänd\",\n    \"rich_text\": \"RTF\",\n    \"right\": \"Höger\",\n    \"secondary_style\": \"Sekundär stil\",\n    \"semibold\": \"Halvfet\",\n    \"shaded\": \"Skuggad\",\n    \"show_second_image\": \"Visa andra bilden\",\n    \"single\": \"Enkel\",\n    \"slide_left\": \"Dra åt vänster\",\n    \"slide_up\": \"Dra uppåt\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Stapla\",\n    \"text_only\": \"Endast text\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Miniatyrbilder\",\n    \"tight\": \"Tät\",\n    \"top_left\": \"Överst till vänster\",\n    \"top_right\": \"Överst till höger\",\n    \"top\": \"Överkant\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Understrykning\",\n    \"video\": \"Video\",\n    \"wide\": \"Bred\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"Under bild\",\n    \"hidden\": \"Dold\",\n    \"on_image\": \"På bild\",\n    \"spotlight\": \"Spotlight\",\n    \"accent\": \"Accent\",\n    \"body\": \"Brödtext\",\n    \"button_primary\": \"Primär knapp\",\n    \"button_secondary\": \"Sekundär knapp\",\n    \"compact\": \"Kompakt\",\n    \"crop_to_fit\": \"Beskär för att passa\",\n    \"hint\": \"Tips\",\n    \"maintain_aspect_ratio\": \"Behåll bildförhållande\",\n    \"off\": \"Av\",\n    \"social_bluesky\": \"Social: Bluesky\",\n    \"social_facebook\": \"Social: Facebook\",\n    \"social_instagram\": \"Social: Instagram\",\n    \"social_linkedin\": \"Social: LinkedIn\",\n    \"social_pinterest\": \"Social: Pinterest\",\n    \"social_snapchat\": \"Social: Snapchat\",\n    \"social_spotify\": \"Social: Spotify\",\n    \"social_threads\": \"Social: Threads\",\n    \"social_tiktok\": \"Social: TikTok\",\n    \"social_tumblr\": \"Social: Tumblr\",\n    \"social_twitter\": \"Social: X (Twitter)\",\n    \"social_whatsapp\": \"Social: WhatsApp\",\n    \"social_vimeo\": \"Social: Vimeo\",\n    \"social_youtube\": \"Social: YouTube\",\n    \"standard\": \"Standard\",\n    \"subheading\": \"Underrubrik\",\n    \"blur\": \"Oskärpa\",\n    \"lift\": \"Lyft\",\n    \"reveal\": \"Avslöja\",\n    \"scale\": \"Skala\",\n    \"subtle_zoom\": \"Zoom\",\n    \"with_hints\": \"Med tips\",\n    \"below_media\": \"Under media\",\n    \"full_frame\": \"Helskärm\",\n    \"icons\": \"Ikoner\"\n  },\n  \"content\": {\n    \"advanced\": \"Avancerat\",\n    \"background_image\": \"Bakgrundsbild\",\n    \"background_video\": \"Bakgrundsvideo\",\n    \"block_size\": \"Blockstorlek\",\n    \"borders\": \"Kantlinjer\",\n    \"describe_the_video_for\": \"Beskriv videon för kunder som använder skärmläsare. [Läs mer](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"Sektionsstorlek\",\n    \"slideshow_width\": \"Bildbredd\",\n    \"typography\": \"Typografi\",\n    \"width_is_automatically_optimized\": \"Bredden optimeras automatiskt för mobil.\",\n    \"complementary_products\": \"Kompletterande produkter måste konfigureras med appen Search & Discovery. [Läs mer](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Kolumnerna optimeras automatiskt för mobil\",\n    \"content_width\": \"Innehållsbredden tillämpas endast när sektionens bredd är inställd på fullbredd.\",\n    \"responsive_font_sizes\": \"Storlekarna skalas automatiskt för alla skärmstorlekar\",\n    \"buttons\": \"Knappar\",\n    \"swatches\": \"Provkartor\",\n    \"variant_settings\": \"Variantinställningar\",\n    \"background\": \"Bakgrund\",\n    \"appearance\": \"Utseende\",\n    \"arrows\": \"Pilar\",\n    \"body_size\": \"Brödtextstorlek\",\n    \"mobile_size\": \"Mobil storlek\",\n    \"bottom_row_appearance\": \"Utseende för nedersta raden\",\n    \"cards_layout\": \"Kortlayout\",\n    \"carousel_navigation\": \"Karusellnavigering\",\n    \"carousel_pagination\": \"Karusellpaginering\",\n    \"copyright\": \"Upphovsrätt\",\n    \"edit_logo_in_theme_settings\": \"Redigera logotyp i [temainställningar](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"Redigera prisformatering i [temainställningar](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"Redigera variantutformning i [temainställningar](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"Registreringar lägger till [kundprofiler](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"För att knappen ska visas måste Shop-kanalen vara installerad och Shop Pay aktiverat. [Läs mer](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Teckensnitt\",\n    \"grid\": \"Rutnät\",\n    \"heading_size\": \"Rubrikstorlek\",\n    \"image\": \"Bild\",\n    \"input\": \"Inmatningsfält\",\n    \"layout\": \"Layout\",\n    \"link\": \"Länk\",\n    \"link_padding\": \"Länkutfyllnad\",\n    \"localization\": \"Lokalisering\",\n    \"logo\": \"Logotyp\",\n    \"margin\": \"Marginal\",\n    \"media\": \"Media\",\n    \"media_1\": \"Media 1\",\n    \"media_2\": \"Media 2\",\n    \"menu\": \"Meny\",\n    \"mobile_layout\": \"Mobillayout\",\n    \"padding\": \"Utfyllnad\",\n    \"padding_desktop\": \"Utfyllnad för dator\",\n    \"paragraph\": \"Stycke\",\n    \"policies\": \"Policyer\",\n    \"popup\": \"Popup\",\n    \"search\": \"Sök\",\n    \"section_layout\": \"Sektionslayout\",\n    \"size\": \"Storlek\",\n    \"social_media\": \"Sociala medier\",\n    \"submit_button\": \"Skicka-knapp\",\n    \"text_presets\": \"Textförinställningar\",\n    \"transparent_background\": \"Transparent bakgrund\",\n    \"typography_primary\": \"Primär typografi\",\n    \"typography_secondary\": \"Sekundär typografi\",\n    \"typography_tertiary\": \"Tertiär typografi\",\n    \"mobile_width\": \"Mobil bredd\",\n    \"width\": \"Bredd\",\n    \"visible_if_collection_has_more_products\": \"Synlig om produktserien har fler produkter än de som visas\",\n    \"carousel\": \"Karusell\",\n    \"colors\": \"Färger\",\n    \"collection_page\": \"Produktseriesida\",\n    \"customer_account\": \"Kundkonto\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Redigera produktserie för tomt läge i [temainställningar](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"Rutnätslayout\",\n    \"home_page\": \"Startsida\",\n    \"images\": \"Bilder\",\n    \"inverse_logo_info\": \"Används när transparent sidhuvudsbakgrund är inställd på Inverterad\",\n    \"manage_customer_accounts\": \"[Hantera synlighet](/admin/settings/customer_accounts) i inställningar för kundkonton. Äldre konton stöds inte.\",\n    \"manage_policies\": \"[Hantera policyer](/admin/settings/legal)\",\n    \"product_page\": \"Produktsida\",\n    \"text\": \"Text\",\n    \"thumbnails\": \"Miniatyrbilder\",\n    \"visibility\": \"Synlighet\",\n    \"app_required_for_ratings\": \"En app krävs för produktbetyg. [Läs mer](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Ikon\",\n    \"manage_store_name\": \"[Hantera butiksnamn](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Visar produktserie från överordnad sektion\",\n    \"resource_reference_collection_card_image\": \"Visar bild från överordnad produktserie\",\n    \"resource_reference_collection_title\": \"Visar namn från överordnad produktserie\",\n    \"resource_reference_product\": \"Ansluter automatiskt till överordnad produkt\",\n    \"resource_reference_product_card\": \"Visar produkt från överordnad sektion\",\n    \"resource_reference_product_inventory\": \"Visar lager från överordnad produkt\",\n    \"resource_reference_product_price\": \"Visar pris från överordnad produkt\",\n    \"resource_reference_product_recommendations\": \"Visar rekommendationer baserade på överordnad produkt\",\n    \"resource_reference_product_review\": \"Visar recensioner från överordnad produkt\",\n    \"resource_reference_product_swatches\": \"Visar provkartor från överordnad produkt\",\n    \"resource_reference_product_title\": \"Visar namn från överordnad produkt\",\n    \"resource_reference_product_variant_picker\": \"Visar varianter från överordnad produkt\",\n    \"resource_reference_product_media\": \"Visar media från överordnad produkt\",\n    \"product_media\": \"Produktmedia\",\n    \"section_link\": \"Sektionslänk\",\n    \"gift_card_form_description\": \"Kunder kan skicka presentkort till en mottagares e-postadress med ett personligt meddelande. [Läs mer](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Rubrik\",\n    \"resource_reference_product_custom_property\": \"Lägg till anpassningsbara inmatningsfält för att samla in anpassad information som läggs till i den här orderposten och som senare visas i orderinformationen.\",\n    \"block_link\": \"Blocklänk\",\n    \"submenu_feature\": \"Undermenyfunktion\",\n    \"cart_features\": \"Varukorgsfunktioner\",\n    \"email_signup\": \"E-postregistrering\",\n    \"mobile_media\": \"Mobilmedia\",\n    \"mobile_media_2\": \"Mobilmedia 2\",\n    \"navigation\": \"Navigering\",\n    \"popover\": \"Popover\",\n    \"popover_position\": \"Popover-position\",\n    \"resource_reference_product_sku\": \"Visar lagerhållningsenhet från överordnad produkt\",\n    \"content_layout\": \"Innehållslayout\",\n    \"mobile_media_1\": \"Mobilmedia 1\",\n    \"utilities\": \"Verktyg\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Dela information om ditt varumärke med dina kunder. Beskriv en produkt, gör tillkännagivanden eller välkomna kunder till din butik.</p>\",\n    \"bestseller_h2\": \"<h2>Bästsäljare</h2>\",\n    \"bestseller_h3\": \"<h3>Bästsäljare</h3>\",\n    \"bestseller\": \"<p>Bästsäljare</p>\",\n    \"build_better\": \"<p>Vi tror på att bygga bättre</p>\",\n    \"contact_us\": \"<h2>Kontakta oss</h2>\",\n    \"discover_bestsellers\": \"<p>Upptäck bästsäljarna som har fångat våra kunders hjärtan med sin perfekta blandning av funktion och stil.</p>\",\n    \"everythings_starts_with_why\": \"<p>Allt vi gör börjar med varför</p>\",\n    \"explore_latest_products\": \"<p>Utforska våra senaste produkter.</p>\",\n    \"faq\": \"<h3>Vanliga frågor</h3>\",\n    \"first_to_know\": \"<p>Bli först med att få veta om nya produktserier och specialerbjudanden. </p>\",\n    \"free_returns\": \"<p>Gratis 30-dagars returer</p>\",\n    \"free_shipping_over\": \"<p>Fri frakt över 50 USD</p>\",\n    \"goal_for_every_customer\": \"<p>Vårt mål är att varje kund ska vara helt nöjd med sitt köp. Om så inte är fallet, meddela oss så gör vi vårt bästa för att lösa det tillsammans med dig.</p>\",\n    \"home_to_shirts\": \"<p>Startsida → Skjortor</p>\",\n    \"intentional_design\": \"<h2>Avsiktlig design</h2>\",\n    \"introducing_h2\": \"<h2><em>Vi presenterar</em></h2>\",\n    \"latest_products\": \"<p>Vi presenterar våra senaste produkter, särskilt framtagna för säsongen. Shoppa dina favoriter innan de tar slut!</p>\",\n    \"made_local_and_global\": \"<p>Våra produkter tillverkas både lokalt och globalt. Vi väljer noggrant ut våra tillverkningspartners för att säkerställa att våra produkter är av hög kvalitet och prisvärda.</p>\",\n    \"made_with_care_h2\": \"<h2>Tillverkad med omsorg</h2>\",\n    \"made_with_care_extended\": \"<p>Denna bästsäljare är tillverkad med omsorg och villkorslöst älskad av våra kunder och överträffar alla förväntningar.</p>\",\n    \"made_with_care\": \"<p>Tillverkad med omsorg och villkorslöst älskad av våra kunder.</p>\",\n    \"make_things_better_extended\": \"<p>Vi tillverkar saker som fungerar bättre och håller längre. Våra produkter löser verkliga problem med ren design och ärliga material.</p>\",\n    \"make_things_better\": \"<p>Vi tillverkar saker som fungerar bättre och håller längre.</p>\",\n    \"may_also_like\": \"<h4>Du kanske också gillar</h4>\",\n    \"new_arrivals_h1\": \"<h1>Nyheter</h1>\",\n    \"new_arrivals_h2\": \"<h2>Nyheter</h2>\",\n    \"new_arrivals_h3\": \"<h3>Nyheter</h3>\",\n    \"product_launch\": \"<p>Ta en titt bakom kulisserna på vår senaste produktlansering.</p>\",\n    \"product_story\": \"<p>I hjärtat av varje produkt finns en unik berättelse, driven av vår passion för kvalitet och innovation. Varje artikel förgyller din vardag och skapar glädje.</p>\",\n    \"real_people\": \"<p>Verkliga människor som tillverkar fantastiska produkter</p>\",\n    \"related_product\": \"<h3>Relaterade produkter</h3>\",\n    \"return_policy\": \"<h2>Vad är returpolicyn?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 recensioner</p>\",\n    \"shipping_based_on_location\": \"<p>Frakten beräknas baserat på din plats och artiklarna i din order. Du kommer alltid att veta fraktpriset innan du köper.</p>\",\n    \"shop_by_collection\": \"<h3>Handla efter produktserie</h3>\",\n    \"signature_products\": \"<h2>Vår signaturprodukt</h2>\",\n    \"styled_with\": \"<h3>Stajlad med</h3>\",\n    \"subscribe\": \"<h2>Prenumerera på våra e-postmeddelanden</h2>\",\n    \"team_with_goal\": \"<h2>Ett team med ett mål</h2>\",\n    \"unable_to_accept_returns\": \"<p>Vi kan inte ta emot returer på vissa artiklar. Dessa kommer att vara noggrant märkta före köp.</p>\",\n    \"work_quickly_to_ship\": \"<p>Vi kommer att arbeta snabbt för att leverera din order så snart som möjligt. När din order har skickats får du ett e-postmeddelande med ytterligare information. Leveranstiderna varierar beroende på var du befinner dig.</p>\",\n    \"join_our_email_list\": \"<h2>Gå med i vår e-postlista</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Få exklusiva erbjudanden och tidig åtkomst till nya produkter.</p>\",\n    \"artistry_in_action\": \"<p>Konstnärlighet i praktiken </p>\",\n    \"authentic_materials\": \"<p>Äkta material, inga kompromisser </p>\",\n    \"bold_style_recognizable\": \"<p>En vågad stil som känns igen överallt</p>\",\n    \"discover_elevated_design\": \"<p>Upptäck förfinad design </p>\",\n    \"expert_construction_finish\": \"<p>Hantverksmässig konstruktion och en oklanderlig finish</p>\",\n    \"made_to_last\": \"<p>Gjord för att hålla </p>\",\n    \"pieces_better_with_time\": \"<p>Produkter som bara blir bättre med tiden och av användning </p>\",\n    \"quality_you_can_feel\": \"<h2>Kvalitet du kan känna</h2>\",\n    \"uncompromising_standards\": \"<p>Kompromisslösa standarder </p>\",\n    \"featured_collection_h2\": \"<h2>Utvald produktserie</h2>\",\n    \"shop_collection\": \"<p>Upptäck vår utvalda produktserie med handplockade favoriter som förenar stil och kvalitet.</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"Handla nu\",\n    \"collapsible_row\": \"Komprimerbar rad\",\n    \"heading\": \"Rubrik\",\n    \"email_signup_button_label\": \"Prenumerera\",\n    \"be_bold\": \"Var djärv.\",\n    \"accordion_heading\": \"Dragspelsrubrik\",\n    \"contact_form_button_label\": \"Skicka\",\n    \"popup_link\": \"Popup-länk\",\n    \"sign_up\": \"Registrera dig\",\n    \"welcome_to_our_store\": \"Välkommen till vår butik\",\n    \"shop_our_latest_arrivals\": \"Handla våra senaste nyheter!\",\n    \"are_purchases_final_sale\": \"Är några köp utan returrätt?\",\n    \"care_instructions\": \"Skötselråd\",\n    \"cart\": \"Varukorg\",\n    \"discover_collection\": \"Upptäck produktserien\",\n    \"fit\": \"passform\",\n    \"how_much_for_shipping\": \"Hur mycket kostar frakten?\",\n    \"learn_more\": \"Mer information\",\n    \"manufacturing\": \"Tillverkning\",\n    \"materials\": \"Material\",\n    \"return_policy\": \"Returpolicy\",\n    \"shipping\": \"Frakt\",\n    \"shop_now_button_label\": \"Handla nu\",\n    \"sign_up_button_label\": \"Registrera dig\",\n    \"submit_button_label\": \"Skicka\",\n    \"up_the_ante\": \"Höj\\ninsatsen\",\n    \"view_all_button_label\": \"Visa alla\",\n    \"what_is_return_policy\": \"Vilken returpolicy gäller?\",\n    \"when_will_order_arrive\": \"När får jag min order?\",\n    \"where_are_products_made\": \"Var tillverkas era produkter?\",\n    \"trending_now\": \"Populärt just nu\",\n    \"shop_the_look\": \"Shoppa stilen\",\n    \"bestsellers\": \"Bästsäljare\",\n    \"featured_collection\": \"Utvald produktserie\",\n    \"new_arrivals\": \"Nyheter\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Beskriv videon för användare av hjälpmedelsteknik\",\n    \"video_autoplay\": \"Videor kommer att vara tystade som standard\",\n    \"video_external\": \"Använd en URL från YouTube eller Vimeo\",\n    \"carousel_layout_on_mobile\": \"Karusell används alltid på mobilen\",\n    \"carousel_hover_behavior_not_supported\": \"\\\"Karusell\\\"-hovring stöds inte när \\\"Karusell\\\"-typ är vald på sektionsnivå\",\n    \"checkout_buttons\": \"Gör det möjligt för köpare att betala snabbare och kan förbättra konverteringen. [Läs mer](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Anpassad rubrik\",\n    \"edit_presets_in_theme_settings\": \"Redigera förinställningar i [temainställningar](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"Anpassa filter med [appen Sök och upptäck](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"grid_layout_on_mobile\": \"Rutnätslayout används för mobil\",\n    \"logo_font\": \"Gäller endast när en logotyp inte är vald\",\n    \"manage_countries_regions\": \"[Hantera länder/regioner](/admin/settings/markets)\",\n    \"manage_languages\": \"[Hantera språk](/admin/settings/languages)\",\n    \"transparent_background\": \"Granska varje mall där transparent bakgrund används för läsbarhet\",\n    \"aspect_ratio_adjusted\": \"Justeras i vissa layouter\",\n    \"custom_liquid\": \"Lägg till appfragment eller annan kod för att skapa avancerade anpassningar. [Läs mer](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"Används för tillämpade filter, rabattkoder och sökförslag\",\n    \"applies_on_image_only\": \"Gäller endast bilder\",\n    \"hover_effects\": \"Gäller produkt- och produktseriekort\",\n    \"hide_logo_on_home_page_help\": \"Logotypen förblir synlig när klistrigt sidhuvud är aktivt\",\n    \"media_type_info\": \"Funktionerna hämtas från menylänkarna\",\n    \"logo_height\": \"Påverkar endast sidhuvudslogotypen\",\n    \"actions_display_style\": \"Ikoner används alltid på mobilen\"\n  },\n  \"categories\": {\n    \"basic\": \"Grundläggande\",\n    \"collection\": \"Produktserie\",\n    \"collection_list\": \"Produktserielista\",\n    \"footer\": \"Sidfot\",\n    \"forms\": \"Formulär\",\n    \"header\": \"Sidhuvud\",\n    \"layout\": \"Layout\",\n    \"links\": \"Länkar\",\n    \"product\": \"Produkt\",\n    \"product_list\": \"Utvald produktserie\",\n    \"banners\": \"Banderoller\",\n    \"collections\": \"Produktserier\",\n    \"custom\": \"Anpassat\",\n    \"decorative\": \"Dekorativt\",\n    \"products\": \"Produkter\",\n    \"other_sections\": \"Övrigt\",\n    \"storytelling\": \"Storytelling\",\n    \"text\": \"Text\"\n  }\n}\n"
  },
  {
    "path": "locales/th.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"โหลดวิดีโอ: {{ description }}\",\n    \"sold_out\": \"ขายหมดแล้ว\",\n    \"email_signup\": {\n      \"label\": \"อีเมล\",\n      \"placeholder\": \"อีเมล\",\n      \"success\": \"ขอขอบคุณที่สมัครรับข้อมูล\"\n    },\n    \"filter\": \"ตัวกรอง\",\n    \"payment_methods\": \"วิธีการชำระเงิน\",\n    \"contact_form\": {\n      \"name\": \"ชื่อ\",\n      \"email\": \"อีเมล\",\n      \"phone\": \"โทรศัพท์\",\n      \"comment\": \"ความคิดเห็น\",\n      \"post_success\": \"ขอบคุณที่ติดต่อเรา เราจะติดต่อกลับหาคุณโดยเร็วที่สุด\",\n      \"error_heading\": \"โปรดแก้ไขข้อมูลดังต่อไปนี้\"\n    },\n    \"slider_label\": \"แถบเลื่อน\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"เล่นโมเดล 3 มิติ\",\n    \"play_video\": \"เล่นวิดีโอ\",\n    \"unit_price\": \"ราคาต่อหน่วย\",\n    \"country_results_count\": \"ผลลัพธ์ {{ count }} รายการ\",\n    \"slideshow_pause\": \"หยุดสไลด์โชว์ชั่วคราว\",\n    \"slideshow_play\": \"เล่นสไลด์โชว์\",\n    \"remove_item\": \"ลบ {{ title}}\",\n    \"skip_to_text\": \"ข้ามไปยังเนื้อหา\",\n    \"skip_to_product_info\": \"ข้ามไปยังข้อมูลสินค้า\",\n    \"skip_to_results_list\": \"ข้ามไปที่รายการผลลัพธ์\",\n    \"new_window\": \"เปิดในหน้าต่างใหม่\",\n    \"slideshow_next\": \"สไลด์ถัดไป\",\n    \"slideshow_previous\": \"สไลด์ก่อนหน้า\",\n    \"close_dialog\": \"ปิดกล่องโต้ตอบ\",\n    \"reset_search\": \"รีเซ็ตการค้นหา\",\n    \"search_results_count\": \"พบผลลัพธ์การค้นหาจำนวน {{ count }} รายการสำหรับ \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"ไม่พบผลลัพธ์สำหรับ “{{ query }}”\",\n    \"filters\": \"ตัวกรอง\",\n    \"filter_count\": {\n      \"one\": \"ใช้ตัวกรอง {{ count }} ตัวกรองแล้ว\",\n      \"other\": \"ใช้ตัวกรอง {{ count }} ตัวกรองแล้ว\"\n    },\n    \"account\": \"บัญชีผู้ใช้\",\n    \"cart\": \"ตะกร้าสินค้า\",\n    \"cart_count\": \"สินค้าทั้งหมดในตะกร้าสินค้า\",\n    \"menu\": \"เมนู\",\n    \"country_region\": \"ประเทศ/ภูมิภาค\",\n    \"slide_status\": \"สไลด์ที่ {{ index }} จาก {{ length }}\",\n    \"scroll_to\": \"เลื่อนไปที่ {{ title }}\",\n    \"loading_product_recommendations\": \"กำลังโหลดการแนะนำสินค้า\",\n    \"discount\": \"ใช้รหัสส่วนลด\",\n    \"discount_menu\": \"รหัสส่วนลด\",\n    \"discount_applied\": \"ใช้รหัสส่วนลดแล้ว: {{ code }}\",\n    \"inventory_status\": \"สถานะสินค้าคงคลัง\",\n    \"pause_video\": \"หยุดวิดีโอชั่วคราว\",\n    \"find_country\": \"ค้นหาประเทศ\",\n    \"localization_region_and_language\": \"ตัวเลือกภูมิภาคและภาษา\",\n    \"decrease_quantity\": \"ลดจำนวน\",\n    \"increase_quantity\": \"เพิ่มจำนวน\",\n    \"quantity\": \"จำนวน\",\n    \"rating\": \"คะแนนสำหรับสินค้านี้คือ {{ rating }} จาก 5\",\n    \"nested_product\": \"{{ product_title }} สำหรับ {{ parent_title }}\",\n    \"remove\": \"ลบ\",\n    \"view_pricing_info\": \"ดูข้อมูลการกำหนดราคา\",\n    \"open_hotspot\": \"เปิดฮอตสปอต\",\n    \"slideshow\": \"สไลด์โชว์\",\n    \"header_navigation_label\": \"หลัก\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"เพิ่มลงในตะกร้าสินค้า\",\n    \"clear_all\": \"ล้างทั้งหมด\",\n    \"remove\": \"ลบออก\",\n    \"view_in_your_space\": \"ดูในพื้นที่ของคุณ\",\n    \"show_filters\": \"ตัวกรอง\",\n    \"clear\": \"ล้าง\",\n    \"continue_shopping\": \"เลือกซื้อต่อ\",\n    \"log_in_html\": \"หากมีบัญชีผู้ใช้อยู่แล้ว <a href=\\\"{{ link }}\\\">เข้าสู่ระบบ</a>เพื่อชำระเงินได้รวดเร็วขึ้น\",\n    \"see_items\": {\n      \"one\": \"ดูสินค้า {{ count }} รายการ\",\n      \"other\": \"ดูสินค้า {{ count }} รายการ\"\n    },\n    \"view_all\": \"ดูทั้งหมด\",\n    \"add\": \"เพิ่ม\",\n    \"choose\": \"เลือก\",\n    \"added\": \"เพิ่มแล้ว\",\n    \"show_less\": \"แสดงน้อยลง\",\n    \"show_more\": \"แสดงมากขึ้น\",\n    \"close\": \"ปิด\",\n    \"more\": \"เพิ่มเติม\",\n    \"reset\": \"รีเซ็ต\",\n    \"zoom\": \"ซูม\",\n    \"close_dialog\": \"ปิดกล่องโต้ตอบ\",\n    \"remove_discount\": \"ลบ {{ code }} ส่วนลด\",\n    \"enter_using_password\": \"ป้อนโดยใช้รหัสผ่าน\",\n    \"submit\": \"ส่ง\",\n    \"enter_password\": \"ป้อนรหัสผ่าน\",\n    \"view_store_information\": \"ดูข้อมูลร้านค้า\",\n    \"back\": \"ย้อนกลับ\",\n    \"log_in\": \"ลงชื่อเข้าใช้\",\n    \"log_out\": \"ออกจากระบบ\",\n    \"apply\": \"ใช้\",\n    \"sign_in_options\": \"ตัวเลือกอื่นๆ ในการลงชื่อเข้าใช้\",\n    \"sign_up\": \"ลงทะเบียน\",\n    \"open_image_in_full_screen\": \"เปิดรูปภาพแบบเต็มหน้าจอ\",\n    \"sort\": \"จัดเรียง\",\n    \"show_all_options\": \"แสดงตัวเลือกทั้งหมด\",\n    \"open\": \"เปิด\"\n  },\n  \"content\": {\n    \"reviews\": \"รีวิว\",\n    \"language\": \"ภาษา\",\n    \"localization_region_and_language\": \"ภูมิภาคและภาษา\",\n    \"no_results_found\": \"ไม่พบผลลัพธ์\",\n    \"cart_total\": \"ยอดรวมของตะกร้า\",\n    \"your_cart_is_empty\": \"ตะกร้าสินค้าของคุณว่างอยู่\",\n    \"product_image\": \"รูปภาพสินค้า\",\n    \"product_information\": \"ข้อมูลสินค้า\",\n    \"quantity\": \"จำนวน\",\n    \"product_total\": \"สินค้าทั้งหมด\",\n    \"cart_estimated_total\": \"ยอดรวมโดยประมาณ\",\n    \"seller_note\": \"คำแนะนำพิเศษ\",\n    \"cart_subtotal\": \"ยอดรวมย่อย\",\n    \"discounts\": \"ส่วนลด\",\n    \"discount\": \"ส่วนลด\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"รวมภาษีและอากรแล้ว ระบบจะคำนวณส่วนลดและ<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ในขั้นตอนการชำระเงิน\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"รวมภาษีและอากรแล้ว ระบบจะคำนวณส่วนลดและค่าจัดส่งในขั้นตอนการชำระเงิน\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"รวมภาษีแล้ว ระบบจะคำนวณส่วนลดและ<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ในขั้นตอนการชำระเงิน\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"รวมภาษีแล้ว ระบบจะคำนวณส่วนลดและค่าจัดส่งในขั้นตอนการชำระเงิน\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"รวมอากรแล้ว ระบบจะคำนวณภาษี ส่วนลด และ<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ในขั้นตอนการชำระเงิน\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"รวมอากรแล้ว ระบบจะคำนวณภาษี ส่วนลด และค่าจัดส่งในขั้นตอนการชำระเงิน\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"ระบบจะคำนวณภาษี ส่วนลด และ<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ในขั้นตอนการชำระเงิน\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"ระบบจะคำนวณภาษี ส่วนลด และค่าจัดส่งในขั้นตอนการชำระเงิน\",\n    \"checkout\": \"ชำระเงิน\",\n    \"cart_title\": \"ตะกร้าสินค้า\",\n    \"price\": \"ราคา\",\n    \"price_regular\": \"ราคาปกติ\",\n    \"price_compare_at\": \"ราคาเปรียบเทียบ\",\n    \"price_sale\": \"ราคาโปรโมชัน\",\n    \"duties_and_taxes_included\": \"รวมภาษีและอากรแล้ว\",\n    \"duties_included\": \"รวมอากรแล้ว\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ที่คำนวณในขั้นตอนชำระเงิน\",\n    \"taxes_included\": \"รวมภาษีแล้ว\",\n    \"product_badge_sold_out\": \"ขายหมดแล้ว\",\n    \"product_badge_sale\": \"ลดราคา\",\n    \"search_input_label\": \"การค้นหา\",\n    \"search_input_placeholder\": \"ค้นหา\",\n    \"search_results\": \"ผลลัพธ์การค้นหา\",\n    \"search_results_label\": \"ผลลัพธ์การค้นหา\",\n    \"search_results_no_results\": \"ไม่พบผลการค้นหาสำหรับ \\\"{{ terms }}\\\" ลองใช้คำค้นหาอื่น\",\n    \"search_results_resource_articles\": \"โพสต์บล็อก\",\n    \"search_results_resource_collections\": \"คอลเลกชัน\",\n    \"search_results_resource_pages\": \"หน้า\",\n    \"search_results_resource_products\": \"สินค้า\",\n    \"search_results_resource_queries\": \"คำแนะนำการค้นหา\",\n    \"search_results_view_all\": \"ดูทั้งหมด\",\n    \"search_results_view_all_button\": \"ดูทั้งหมด\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"สินค้า {{ count }} รายการ\",\n      \"other\": \"สินค้า {{ count }} รายการ\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"ค่าเริ่มต้น\",\n      \"grid_fieldset\": \"คอลัมน์กริด\",\n      \"single_item\": \"แบบเดี่ยว\",\n      \"zoom_out\": \"ซูมออก\"\n    },\n    \"recently_viewed_products\": \"ที่ดูครั้งล่าสุด\",\n    \"unavailable\": \"ไม่พร้อมใช้งาน\",\n    \"collection_placeholder\": \"ชื่อคอลเลกชัน\",\n    \"product_card_placeholder\": \"ชื่อสินค้า\",\n    \"product_count\": \"จำนวนสินค้า\",\n    \"item_count\": {\n      \"one\": \"{{ count }} รายการ\",\n      \"other\": \"{{ count }} รายการ\"\n    },\n    \"errors\": \"ข้อผิดพลาด\",\n    \"price_from\": \"จาก {{ price }}\",\n    \"featured_products\": \"สินค้าที่แนะนำ\",\n    \"no_products_found\": \"ไม่พบสินค้า\",\n    \"use_fewer_filters_html\": \"ลองใช้ตัวกรองน้อยลง หรือ<a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">ล้างตัวกรองทั้งหมด</a>\",\n    \"search\": \"การค้นหา\",\n    \"search_results_no_results_check_spelling\": \"ไม่พบผลลัพธ์สำหรับ “{{ terms }}” ตรวจสอบการสะกดคำหรือลองค้นหาคำหรือประโยคอื่น\",\n    \"filters\": \"ตัวกรอง\",\n    \"price_filter_html\": \"ราคาสูงสุดคือ {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"discount_code\": \"รหัสส่วนลด\",\n    \"pickup_available_at_html\": \"รับสินค้าได้ที่ <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"รับสินค้าได้เวลา {{ pickup_time }}\",\n    \"pickup_not_available\": \"ไม่สามารถรับสินค้าในขณะนี้\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"อ่านเพิ่มเติม...\",\n    \"wrong_password\": \"รหัสผ่านไม่ถูกต้อง\",\n    \"account_title\": \"บัญชีผู้ใช้\",\n    \"account_title_personalized\": \"สวัสดี {{ first_name }}\",\n    \"account_orders\": \"คำสั่งซื้อ\",\n    \"account_profile\": \"โปรไฟล์\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"รวมภาษีและอากรแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"รวมภาษีและอากรแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"รวมอากรแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"รวมอากรแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"ภาษีและ<a href=\\\"{{ link }}\\\">ค่าจัดส่ง</a>ที่คำนวณในขั้นตอนการชำระเงิน\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"ภาษีและค่าจัดส่งที่คิดคำนวณในระหว่างขั้นตอนการชำระเงิน\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"รวมภาษีแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"รวมภาษีแล้ว ค่าจัดส่งจะคำนวณในขั้นตอนชำระเงิน\",\n    \"view_more_details\": \"ดูรายละเอียดเพิ่มเติม\",\n    \"inventory_low_stock\": \"สต็อกสินค้าเหลือน้อย\",\n    \"inventory_in_stock\": \"มีในสต็อก\",\n    \"inventory_out_of_stock\": \"หมดสต็อก\",\n    \"page_placeholder_title\": \"ชื่อหน้า\",\n    \"page_placeholder_content\": \"เลือกหน้าที่ต้องการแสดงเนื้อหา\",\n    \"placeholder_image\": \"รูปภาพตัวยึดตำแหน่ง\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"เหลือ {{ count }} รายการ\",\n      \"other\": \"เหลือ {{ count }} รายการ\"\n    },\n    \"shipping_discount_error\": \"ส่วนลดค่าจัดส่งจะปรากฏในขั้นตอนชำระเงินหลังจากเพิ่มที่อยู่\",\n    \"discount_code_error\": \"ไม่สามารถใช้รหัสส่วนลดกับตะกร้าสินค้าของคุณได้\",\n    \"shipping_policy\": \"คำนวณค่าจัดส่งในขั้นตอนการชำระเงิน\",\n    \"powered_by\": \"ร้านค้านี้จะได้รับการสนับสนุนจาก\",\n    \"store_owner_link_html\": \"หากคุณเป็นเจ้าของร้าน <a href=\\\"{{ link }}\\\">เข้าสู่ระบบที่นี่</a>\",\n    \"recipient_form_send_to\": \"ส่งถึง\",\n    \"recipient_form_email_label\": \"อีเมลผู้รับ\",\n    \"recipient_form_email_label_my_email\": \"อีเมลของฉัน\",\n    \"recipient_form_email_address\": \"ที่อยู่อีเมลผู้รับ\",\n    \"recipient_form_name_label\": \"ชื่อผู้รับ (ไม่บังคับ)\",\n    \"recipient_form_message\": \"ข้อความ (ไม่บังคับ)\",\n    \"recipient_form_characters_used\": \"ใช้ไปแล้ว {{ used_chars }}/{{ max_chars }} อักขระ\",\n    \"recipient_form_send_on\": \"ปปปป-ดด-วว\",\n    \"recipient_form_send_on_label\": \"ส่งเมื่อ (ไม่บังคับ)\",\n    \"recipient_form_fields_visible\": \"แสดงช่องข้อมูลผู้รับในแบบฟอร์มแล้ว\",\n    \"recipient_form_fields_hidden\": \"ซ่อนช่องข้อมูลผู้รับในแบบฟอร์มแล้ว\",\n    \"recipient_form_error\": \"เกิดข้อผิดพลาดในการส่งแบบฟอร์ม\",\n    \"product_custom_property_character_count\": \"ใช้ไปแล้ว {{ used_chars }}/{{ max_chars }} อักขระ\",\n    \"terms_and_policies\": \"ข้อกำหนดและนโยบาย\",\n    \"pagination\": {\n      \"nav_label\": \"การนำทางไปที่การแบ่งหน้า\",\n      \"previous\": \"ก่อนหน้า\",\n      \"next\": \"ถัดไป\",\n      \"page\": \"หน้า {{ page }}\"\n    },\n    \"volume_pricing_available\": \"การกำหนดราคาตามปริมาณพร้อมใช้งาน\",\n    \"volume_pricing\": \"การกำหนดราคาตามปริมาณ\",\n    \"at_price_each\": \"ในราคา {{ price }}/หน่วย\",\n    \"each\": \"{{ price }}/หน่วย\",\n    \"each_abbreviation\": \"หน่วย\",\n    \"price_at\": \"ในราคา\",\n    \"price_range\": \"ช่วงราคา\",\n    \"item_count_cutoff\": \"มากกว่า {{ count }} รายการ\",\n    \"cancel\": \"ยกเลิก\",\n    \"product_subtotal\": \"ยอดรวมย่อยสินค้า\",\n    \"quantity_per_item\": \"/หน่วย\",\n    \"remove_all\": \"ลบทั้งหมด\",\n    \"remove_all_items_confirmation\": \"ลบสินค้าทั้งหมด {{ count }} รายการออกจากตะกร้าหรือไม่\",\n    \"remove_one_item_confirmation\": \"ลบ 1 รายการออกจากตะกร้าสินค้าหรือไม่\",\n    \"total_items\": \"รายการสินค้าทั้งหมด\",\n    \"variant\": \"ตัวเลือกสินค้า\",\n    \"variant_total\": \"ยอดรวมของตัวเลือกสินค้า\",\n    \"view_cart\": \"ดูตะกร้าสินค้า\",\n    \"your_cart\": \"ตะกร้าสินค้าของคุณ\",\n    \"items_added_to_cart\": {\n      \"one\": \"เพิ่มสินค้า 1 รายการลงในตะกร้าแล้ว\",\n      \"other\": \"เพิ่มสินค้า {{ count }} รายการลงในตะกร้า\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"ใช้รหัสบัตรของขวัญทางออนไลน์หรือใช้คิวอาร์โค้ดในร้านค้า\",\n      \"title\": \"นี่คือยอดคงเหลือในบัตรของขวัญมูลค่า {{ value }} สำหรับใช้ที่ {{ shop }}!\",\n      \"subtext\": \"บัตรของขวัญของคุณ\",\n      \"shop_link\": \"เยี่ยมชมร้านค้าออนไลน์\",\n      \"add_to_apple_wallet\": \"เพิ่มลงใน Apple Wallet\",\n      \"qr_image_alt\": \"สแกนคิวอาร์โค้ดเพื่อแลกใช้บัตรของขวัญ\",\n      \"copy_code\": \"คัดลอกรหัสบัตรของขวัญ\",\n      \"expiration_date\": \"หมดอายุเมื่อ {{ expires_on }}\",\n      \"copy_code_success\": \"คัดลอกรหัสสำเร็จ\",\n      \"expired\": \"หมดอายุแล้ว\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"รหัสผ่าน\",\n    \"search\": \"การค้นหา\",\n    \"product_title\": \"ชื่อสินค้า\",\n    \"collection_title\": \"ชื่อคอลเลกชัน\",\n    \"blog_posts\": \"บล็อกโพสต์\",\n    \"blog_post_title\": \"ชื่อ\",\n    \"blog_post_author\": \"ผู้เขียน\",\n    \"blog_post_date\": \"วันที่\",\n    \"blog_post_description\": \"เนื้อหาบางส่วนจากเนื้อหาของบล็อกโพสต์\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"เพิ่มลงในตะกร้าสินค้า\",\n      \"added_to_cart\": \"เพิ่มลงในตะกร้าสินค้าแล้ว\",\n      \"adding_to_cart\": \"กำลังเพิ่ม...\",\n      \"add_to_cart_error\": \"เกิดข้อผิดพลาดขณะเพิ่มสินค้าในตะกร้า\",\n      \"sold_out\": \"ขายหมดแล้ว\",\n      \"unavailable\": \"ไม่พร้อมจำหน่าย\",\n      \"quantity_error_max\": \"สินค้านี้มีจำนวนสูงสุดที่ {{ maximum }} รายการ\",\n      \"quantity\": \"จำนวน\",\n      \"quantity_increments\": \"เพิ่มขึ้นได้ทีละ {{ increment }}\",\n      \"quantity_minimum\": \"จำนวนต่ำสุดคือ {{ minimum }}\",\n      \"quantity_maximum\": \"จำนวนสูงสุดคือ {{ maximum }}\",\n      \"in_cart\": \"ในตะกร้าสินค้า\",\n      \"default_title\": \"ชื่อเริ่มต้น\",\n      \"sticky_add_to_cart\": \"แถบเพิ่มลงในตะกร้าสินค้าแบบด่วน\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"ถึง\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} ความคิดเห็น\",\n        \"other\": \"{{ count }} ความคิดเห็น\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"อีเมล\",\n      \"error\": \"ไม่สามารถโพสต์ความคิดเห็นได้ กรุณาแก้ไขสิ่งต่อไปนี้\",\n      \"heading\": \"แสดงความคิดเห็น\",\n      \"message\": \"ข้อความ\",\n      \"moderated\": \"โปรดทราบว่าความคิดเห็นจะต้องได้รับการอนุมัติก่อนที่จะได้รับการเผยแพร่\",\n      \"name\": \"ชื่อ\",\n      \"post\": \"โพสต์ความคิดเห็น\",\n      \"success_moderated\": \"ความคิดเห็นถูกโพสต์แล้ว กำลังรอการตรวจสอบ\",\n      \"success\": \"ความคิดเห็นถูกโพสต์แล้ว\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/th.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"เส้นขอบ\",\n    \"collapsible_row\": \"แถวที่พับเก็บได้\",\n    \"colors\": \"สี\",\n    \"custom_section\": \"ส่วนที่กำหนดเอง\",\n    \"icon\": \"ไอคอน\",\n    \"logo_and_favicon\": \"โลโก้และ Favicon\",\n    \"overlapping_blocks\": \"บล็อกที่ซ้อนกัน\",\n    \"product_buy_buttons\": \"ปุ่มซื้อ\",\n    \"product_description\": \"คำอธิบาย\",\n    \"product_price\": \"ราคา\",\n    \"product_variant_picker\": \"รายการตัวเลือกสินค้า\",\n    \"slideshow\": \"สไลด์โชว์\",\n    \"typography\": \"การพิมพ์\",\n    \"video\": \"วิดีโอ\",\n    \"slideshow_controls\": \"ส่วนควบคุมสไลด์โชว์\",\n    \"size\": \"ขนาด\",\n    \"spacing\": \"การเว้นวรรค\",\n    \"product_recommendations\": \"สินค้าแนะนำ\",\n    \"product_media\": \"สื่อของสินค้า\",\n    \"featured_collection\": \"คอลเลกชันเด่น\",\n    \"add_to_cart\": \"เพิ่มลงในตะกร้าสินค้า\",\n    \"email_signup\": \"การลงทะเบียนอีเมล\",\n    \"submit_button\": \"ปุ่มส่ง\",\n    \"grid_layout_selector\": \"เครื่องมือเลือกเลย์เอาต์แบบกริด\",\n    \"image\": \"รูปภาพ\",\n    \"list_items\": \"รายการ\",\n    \"facets\": \"หมวดหมู่ตัวกรอง\",\n    \"variants\": \"ตัวเลือกสินค้า\",\n    \"styles\": \"สไตล์\",\n    \"product_cards\": \"การ์ดสินค้า\",\n    \"buttons\": \"ปุ่ม\",\n    \"inputs\": \"ช่องข้อมูล\",\n    \"primary_button\": \"ปุ่มหลัก\",\n    \"secondary_button\": \"ปุ่มรอง\",\n    \"popovers_and_modals\": \"ป๊อปโอเวอร์และโมดอล\",\n    \"pull_quote\": \"ข้อความดึงดูด\",\n    \"contact_form\": \"แบบฟอร์มสำหรับติดต่อ\",\n    \"featured_product\": \"ไฮไลท์สินค้า\",\n    \"icons_with_text\": \"ไอคอนพร้อมข้อความ\",\n    \"marquee\": \"ข้อความเลื่อน\",\n    \"accelerated_checkout\": \"การชำระเงินแบบเร่งด่วน\",\n    \"accordion\": \"รูปแบบพับเก็บได้\",\n    \"accordion_row\": \"แถวรูปแบบพับเก็บได้\",\n    \"animations\": \"ภาพเคลื่อนไหว\",\n    \"announcement\": \"ประกาศ\",\n    \"announcement_bar\": \"แถบประกาศ\",\n    \"badges\": \"เครื่องหมาย\",\n    \"button\": \"ปุ่ม\",\n    \"cart\": \"ตะกร้าสินค้า\",\n    \"cart_items\": \"รายการในตะกร้าสินค้า\",\n    \"cart_products\": \"สินค้าในตะกร้า\",\n    \"cart_title\": \"ตะกร้าสินค้า\",\n    \"collection\": \"คอลเลกชัน\",\n    \"collection_card\": \"การ์ดคอลเลกชัน\",\n    \"collection_columns\": \"คอลัมน์คอลเลกชัน\",\n    \"collection_container\": \"คอลเลกชัน\",\n    \"collection_description\": \"คำอธิบายคอลเลกชัน\",\n    \"collection_image\": \"รูปภาพคอลเลกชัน\",\n    \"collection_info\": \"ข้อมูลคอลเลกชัน\",\n    \"collection_list\": \"รายการคอลเลกชัน\",\n    \"collections\": \"คอลเลกชัน\",\n    \"collections_bento\": \"รายการคอลเลกชัน: Bento\",\n    \"collections_carousel\": \"รายการคอลเลกชัน: แครูเซล\",\n    \"collections_grid\": \"รายการคอลเลกชัน: กริด\",\n    \"content\": \"เนื้อหา\",\n    \"content_grid\": \"กริดเนื้อหา\",\n    \"details\": \"รายละเอียด\",\n    \"divider\": \"ตัวแบ่ง\",\n    \"divider_section\": \"ตัวแบ่ง\",\n    \"faq_section\": \"คำถามที่พบบ่อย\",\n    \"filters\": \"การกรองและการเรียงลำดับ\",\n    \"follow_on_shop\": \"ติดตามบน Shop\",\n    \"footer\": \"ส่วนท้าย\",\n    \"footer_utilities\": \"ยูทิลิตี้ส่วนท้าย\",\n    \"group\": \"กลุ่ม\",\n    \"header\": \"ส่วนหัว\",\n    \"heading\": \"ส่วนหัวเรื่อง\",\n    \"hero\": \"ฮีโร่\",\n    \"icons\": \"ไอคอน\",\n    \"image_with_text\": \"รูปภาพพร้อมข้อความ\",\n    \"input\": \"ช่องข้อมูล\",\n    \"logo\": \"โลโก้\",\n    \"magazine_grid\": \"กริดแบบนิตยสาร\",\n    \"media\": \"สื่อ\",\n    \"menu\": \"เมนู\",\n    \"mobile_layout\": \"เลย์เอาต์สำหรับมือถือ\",\n    \"payment_icons\": \"ไอคอนการชำระเงิน\",\n    \"popup_link\": \"ลิงก์ป๊อปอัพ\",\n    \"predictive_search\": \"ป๊อปโอเวอร์การค้นหา\",\n    \"predictive_search_empty\": \"การค้นหาเชิงคาดการณ์ว่างเปล่า\",\n    \"price\": \"ราคา\",\n    \"product\": \"สินค้า\",\n    \"product_card\": \"การ์ดสินค้า\",\n    \"product_card_media\": \"สื่อ\",\n    \"product_card_rendering\": \"การแสดงผลการ์ดสินค้า\",\n    \"product_grid\": \"กริด\",\n    \"product_grid_main\": \"กริดสินค้า\",\n    \"product_image\": \"รูปภาพสินค้า\",\n    \"product_information\": \"ข้อมูลสินค้า\",\n    \"product_review_stars\": \"ดาวรีวิว\",\n    \"quantity\": \"จำนวน\",\n    \"row\": \"แถว\",\n    \"search\": \"การค้นหา\",\n    \"section\": \"ส่วน\",\n    \"selected_variants\": \"ตัวเลือกสินค้าที่เลือก\",\n    \"slide\": \"สไลด์\",\n    \"social_media_links\": \"ลิงก์โซเชียลมีเดีย\",\n    \"steps\": \"ขั้นตอน\",\n    \"summary\": \"ข้อมูลสรุป\",\n    \"swatches\": \"ภาพตัวอย่าง\",\n    \"testimonials\": \"คำรับรองจากลูกค้า\",\n    \"text\": \"ข้อความ\",\n    \"title\": \"ชื่อเรื่อง\",\n    \"utilities\": \"ยูทิลิตี้\",\n    \"video_section\": \"วิดีโอ\",\n    \"alternating_content_rows\": \"แถวสลับ\",\n    \"products_carousel\": \"คอลเลกชันเด่น: แครูเซล\",\n    \"products_grid\": \"คอลเลกชันเด่น: กริด\",\n    \"spacer\": \"ตัวเว้นวรรค\",\n    \"jumbo_text\": \"ข้อความขนาดใหญ่พิเศษ\",\n    \"product_list\": \"คอลเลกชันเด่น\",\n    \"search_input\": \"ช่องค้นหา\",\n    \"search_results\": \"ผลการค้นหา\",\n    \"read_only\": \"อ่านอย่างเดียว\",\n    \"collection_title\": \"ชื่อคอลเลกชัน\",\n    \"view_all_button\": \"ดูทั้งหมด\",\n    \"page_layout\": \"เลย์เอาต์ของหน้า\",\n    \"product_title\": \"ชื่อสินค้า\",\n    \"custom_liquid\": \"Liquid ที่กำหนดเอง\",\n    \"blog\": \"บล็อก\",\n    \"blog_post\": \"บล็อกโพสต์\",\n    \"blog_posts\": \"บล็อกโพสต์\",\n    \"caption\": \"คำบรรยายภาพ\",\n    \"collection_card_image\": \"รูปภาพ\",\n    \"collection_links\": \"ลิงก์คอลเลกชัน\",\n    \"collection_links_spotlight\": \"ลิงก์คอลเลกชัน: Spotlight\",\n    \"collection_links_text\": \"ลิงก์คอลเลกชัน: ข้อความ\",\n    \"collections_editorial\": \"รายการคอลเลกชัน: บทบรรณาธิการ\",\n    \"copyright\": \"ลิขสิทธิ์\",\n    \"count\": \"จำนวน\",\n    \"drawers\": \"ลิ้นชัก\",\n    \"editorial\": \"บทบรรณาธิการ\",\n    \"editorial_jumbo_text\": \"บทบรรณาธิการ: ข้อความขนาดใหญ่พิเศษ\",\n    \"hero_marquee\": \"ฮีโร่: ข้อความเลื่อน\",\n    \"input_fields\": \"ช่องกรอกข้อมูล\",\n    \"local_pickup\": \"การรับสินค้าที่ร้าน\",\n    \"marquee_section\": \"ข้อความเลื่อน\",\n    \"media_with_text\": \"สื่อพร้อมข้อความ\",\n    \"page\": \"หน้า\",\n    \"page_content\": \"เนื้อหา\",\n    \"policy_list\": \"ลิงก์นโยบาย\",\n    \"prices\": \"ราคา\",\n    \"product_list_button\": \"ปุ่มดูทั้งหมด\",\n    \"products_editorial\": \"คอลเลกชันเด่น: บทบรรณาธิการ\",\n    \"product_inventory\": \"สินค้าคงคลัง\",\n    \"social_link\": \"ลิงก์โซเชียล\",\n    \"split_showcase\": \"การจัดแสดงแบบแบ่งส่วน\",\n    \"variant_pickers\": \"เครื่องมือเลือกตัวเลือกสินค้า\",\n    \"pills\": \"ป้าย\",\n    \"large_logo\": \"โลโก้ขนาดใหญ่\",\n    \"description\": \"คำอธิบาย\",\n    \"featured_image\": \"รูปภาพที่แสดง\",\n    \"rich_text_section\": \"Rich Text\",\n    \"product_custom_property\": \"คำแนะนำพิเศษ\",\n    \"multicolumn\": \"หลายคอลัมน์\",\n    \"hero_bottom_aligned\": \"ฮีโร่: จัดชิดด้านล่าง\",\n    \"blog_card\": \"การ์ดบล็อก\",\n    \"blog_posts_grid\": \"บล็อกโพสต์: กริด\",\n    \"blog_posts_carousel\": \"บล็อกโพสต์: แครูเซล\",\n    \"blog_posts_editorial\": \"บล็อกโพสต์: บทบรรณาธิการ\",\n    \"excerpt\": \"ข้อความที่ตัดตอนมา\",\n    \"footer_password\": \"ส่วนท้ายของหน้ารหัสผ่าน\",\n    \"policies_and_links\": \"นโยบายและลิงก์\",\n    \"card\": \"การ์ด\",\n    \"carousel\": \"แครูเซล\",\n    \"carousel_content\": \"เนื้อหาแครูเซล\",\n    \"quick_order_list\": \"รายการสั่งซื้อด่วน\",\n    \"column\": \"คอลัมน์\",\n    \"comparison_slider\": \"แถบเลื่อนเปรียบเทียบ\",\n    \"slideshow_full_frame\": \"สไลด์โชว์: เต็มเฟรม\",\n    \"slideshow_inset\": \"สไลด์โชว์: แบบฝัง\",\n    \"image_compare\": \"เปรียบเทียบรูปภาพ\",\n    \"subheading\": \"หัวเรื่องย่อย\",\n    \"featured_product_information\": \"สินค้าเด่น\",\n    \"product_hotspots\": \"ฮอตสปอตสินค้า\",\n    \"hotspot_product\": \"ฮอตสปอต\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"สไลด์โชว์แบบซ้อน\"\n  },\n  \"settings\": {\n    \"alignment\": \"การจัดตำแหน่ง\",\n    \"autoplay\": \"เล่นอัตโนมัติ\",\n    \"background\": \"พื้นหลัง\",\n    \"border_radius\": \"รัศมีมุม\",\n    \"border_width\": \"ความหนาของเส้นขอบ\",\n    \"borders\": \"เส้นขอบ\",\n    \"bottom_padding\": \"การเว้นขอบด้านในส่วนล่าง\",\n    \"button\": \"ปุ่ม\",\n    \"color\": \"สี\",\n    \"colors\": \"สีต่างๆ\",\n    \"content_alignment\": \"การจัดตำแหน่งเนื้อหา\",\n    \"content_direction\": \"ทิศทางของเนื้อหา\",\n    \"content_position\": \"ตำแหน่งของเนื้อหา\",\n    \"cover_image_size\": \"ขนาดรูปภาพหน้าปก\",\n    \"cover_image\": \"รูปภาพหน้าปก\",\n    \"custom_minimum_height\": \"ความสูงขั้นต่ำที่กำหนดเอง\",\n    \"custom_width\": \"ความกว้างที่กำหนดเอง\",\n    \"enable_video_looping\": \"การเล่นวิดีโอวนซ้ำ\",\n    \"favicon\": \"Favicon\",\n    \"font_family\": \"ชุดแบบอักษร\",\n    \"gap\": \"ช่องว่าง\",\n    \"geometric_translate_y\": \"การแปลงตำแหน่งแกน Y เชิงเรขาคณิต\",\n    \"heading\": \"หัวเรื่อง\",\n    \"icon\": \"ไอคอน\",\n    \"image\": \"รูปภาพ\",\n    \"image_icon\": \"ไอคอนรูปภาพ\",\n    \"image_opacity\": \"ความทึบของรูปภาพ\",\n    \"image_position\": \"ตำแหน่งรูปภาพ\",\n    \"image_ratio\": \"อัตราส่วนรูปภาพ\",\n    \"label\": \"ป้ายกำกับ\",\n    \"line_height\": \"ความสูงของบรรทัด\",\n    \"link\": \"ลิงก์\",\n    \"layout_gap\": \"ช่องว่างของเลย์เอาต์\",\n    \"make_section_full_width\": \"ทำให้ส่วนเต็มความกว้าง\",\n    \"minimum_height\": \"ความสูงขั้นต่ำ\",\n    \"opacity\": \"ความทึบ\",\n    \"overlay_opacity\": \"ความทึบของการวางซ้อน\",\n    \"padding\": \"การเว้นขอบด้านใน\",\n    \"primary_color\": \"ลิงก์\",\n    \"product\": \"สินค้า\",\n    \"section_width\": \"ความกว้างของส่วน\",\n    \"size\": \"ขนาด\",\n    \"slide_spacing\": \"ช่องว่างระหว่างสไลด์\",\n    \"slide_width\": \"ความกว้างของสไลด์\",\n    \"slideshow_fullwidth\": \"สไลด์เต็มความกว้าง\",\n    \"style\": \"สไตล์\",\n    \"text\": \"ข้อความ\",\n    \"text_case\": \"รูปแบบตัวอักษร\",\n    \"top_padding\": \"การเว้นขอบด้านในส่วนบน\",\n    \"video\": \"วิดีโอ\",\n    \"video_alt_text\": \"ข้อความแสดงแทน\",\n    \"video_loop\": \"เล่นวิดีโอวนซ้ำ\",\n    \"video_position\": \"ตำแหน่งวิดีโอ\",\n    \"width\": \"ความกว้าง\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"จำกัดความกว้างของเนื้อหา\",\n    \"color_scheme\": \"ชุดสี\",\n    \"inherit_color_scheme\": \"ใช้ชุดสีเดียวกัน\",\n    \"product_count\": \"จำนวนสินค้า\",\n    \"product_type\": \"ประเภทสินค้า\",\n    \"content_width\": \"ความกว้างของเนื้อหา\",\n    \"collection\": \"คอลเลกชัน\",\n    \"enable_sticky_content\": \"เนื้อหาแบบติดหนึบบนเดสก์ท็อป\",\n    \"error_color\": \"ข้อผิดพลาด\",\n    \"success_color\": \"สำเร็จ\",\n    \"primary_font\": \"แบบอักษรหลัก\",\n    \"secondary_font\": \"แบบอักษรรอง\",\n    \"tertiary_font\": \"แบบอักษรลำดับที่สาม\",\n    \"columns\": \"คอลัมน์\",\n    \"items_to_show\": \"รายการที่จะแสดง\",\n    \"layout\": \"เลย์เอาต์\",\n    \"layout_type\": \"ประเภท\",\n    \"show_grid_layout_selector\": \"แสดงตัวเลือกเลย์เอาต์แบบกริด\",\n    \"view_more_show\": \"แสดงปุ่มดูเพิ่มเติม\",\n    \"image_gap\": \"ช่องว่างระหว่างรูปภาพ\",\n    \"width_desktop\": \"ความกว้างบนเดสก์ท็อป\",\n    \"width_mobile\": \"ความกว้างบนมือถือ\",\n    \"border_style\": \"สไตล์เส้นขอบ\",\n    \"height\": \"ความสูง\",\n    \"thickness\": \"ความหนา\",\n    \"stroke\": \"ความหนาของเส้น\",\n    \"filter_style\": \"สไตล์ตัวกรอง\",\n    \"swatches\": \"ภาพตัวอย่าง\",\n    \"quick_add_colors\": \"สีของปุ่มเพิ่มด่วน\",\n    \"divider_color\": \"เส้นแบ่ง\",\n    \"border_opacity\": \"ความทึบของเส้นขอบ\",\n    \"hover_background\": \"พื้นหลังเมื่อวางเมาส์เหนือ\",\n    \"hover_borders\": \"เส้นขอบเมื่อวางเมาส์เหนือ\",\n    \"hover_text\": \"ข้อความเมื่อวางเมาส์เหนือ\",\n    \"primary_hover_color\": \"ลิงก์เมื่อวางเมาส์เหนือ\",\n    \"primary_button_text\": \"ข้อความปุ่มหลัก\",\n    \"primary_button_background\": \"พื้นหลังปุ่มหลัก\",\n    \"primary_button_border\": \"เส้นขอบปุ่มหลัก\",\n    \"secondary_button_text\": \"ข้อความปุ่มรอง\",\n    \"secondary_button_background\": \"พื้นหลังปุ่มรอง\",\n    \"secondary_button_border\": \"เส้นขอบปุ่มรอง\",\n    \"shadow_color\": \"เงา\",\n    \"video_autoplay\": \"เล่นอัตโนมัติ\",\n    \"video_cover_image\": \"รูปภาพหน้าปก\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"แหล่งที่มา\",\n    \"accordion\": \"รูปแบบพับเก็บได้\",\n    \"aspect_ratio\": \"อัตราส่วนภาพ\",\n    \"auto_rotate_announcements\": \"หมุนประกาศอัตโนมัติ\",\n    \"auto_rotate_slides\": \"หมุนสไลด์อัตโนมัติ\",\n    \"badge_corner_radius\": \"รัศมีมุม\",\n    \"badge_position\": \"ตำแหน่งบนการ์ด\",\n    \"badge_sale_color_scheme\": \"การลดราคา\",\n    \"badge_sold_out_color_scheme\": \"สินค้าหมด\",\n    \"behavior\": \"ลักษณะการทำงาน\",\n    \"blur\": \"ความเบลอของเงา\",\n    \"border\": \"เส้นขอบ\",\n    \"bottom\": \"ด้านล่าง\",\n    \"carousel_on_mobile\": \"แครูเซลบนมือถือ\",\n    \"cart_count\": \"จำนวนสินค้าในตะกร้า\",\n    \"cart_items\": \"รายการในตะกร้าสินค้า\",\n    \"cart_related_products\": \"สินค้าที่เกี่ยวข้อง\",\n    \"cart_title\": \"ตะกร้าสินค้า\",\n    \"cart_total\": \"ยอดรวมในตะกร้าสินค้า\",\n    \"cart_type\": \"ประเภท\",\n    \"case\": \"รูปแบบตัวอักษร\",\n    \"checkout_buttons\": \"ปุ่มชำระเงินแบบเร่งด่วน\",\n    \"collection_list\": \"คอลเลคชัน\",\n    \"collection_templates\": \"เทมเพลตคอลเลกชัน\",\n    \"content\": \"เนื้อหา\",\n    \"corner_radius\": \"รัศมีมุม\",\n    \"country_region\": \"ประเทศ/ภูมิภาค\",\n    \"currency_code\": \"รหัสสกุลเงิน\",\n    \"custom_height\": \"ความสูงที่กำหนดเอง\",\n    \"desktop_height\": \"ความสูงบนเดสก์ท็อป\",\n    \"direction\": \"ทิศทาง\",\n    \"display\": \"การแสดงผล\",\n    \"divider\": \"เส้นแบ่ง\",\n    \"divider_thickness\": \"ความหนาของเส้นแบ่ง\",\n    \"dividers\": \"เส้นแบ่ง\",\n    \"drop_shadow\": \"เงาตกกระทบ\",\n    \"empty_state_collection\": \"คอลเลกชันในสถานะว่าง\",\n    \"empty_state_collection_info\": \"แสดงก่อนที่จะป้อนการค้นหา\",\n    \"enable_filtering\": \"ตัวกรอง\",\n    \"enable_grid_density\": \"ส่วนควบคุมเลย์เอาต์แบบกริด\",\n    \"enable_sorting\": \"การเรียงลำดับ\",\n    \"enable_zoom\": \"เปิดใช้การซูม\",\n    \"equal_columns\": \"คอลัมน์เท่ากัน\",\n    \"expand_first_group\": \"ขยายกลุ่มแรก\",\n    \"extend_media_to_screen_edge\": \"ขยายสื่อไปจนสุดขอบหน้าจอ\",\n    \"extend_summary\": \"ขยายไปจนสุดขอบหน้าจอ\",\n    \"extra_large\": \"ใหญ่พิเศษ\",\n    \"extra_small\": \"เล็กพิเศษ\",\n    \"flag\": \"ธง\",\n    \"font\": \"แบบอักษร\",\n    \"font_price\": \"แบบอักษรของราคา\",\n    \"font_weight\": \"น้ำหนักแบบอักษร\",\n    \"full_width_first_image\": \"รูปภาพแรกเต็มความกว้าง\",\n    \"full_width_on_mobile\": \"เต็มความกว้างบนมือถือ\",\n    \"heading_preset\": \"ค่าที่ตั้งไว้ล่วงหน้าสำหรับหัวเรื่อง\",\n    \"hide_unselected_variant_media\": \"ซ่อนสื่อของตัวเลือกสินค้าที่ไม่ได้เลือก\",\n    \"horizontal_gap\": \"ช่องว่างแนวนอน\",\n    \"horizontal_offset\": \"ระยะห่างแนวนอนของเงา\",\n    \"hover_behavior\": \"ลักษณะการทำงานเมื่อวางเมาส์เหนือ\",\n    \"icon_background\": \"พื้นหลังไอคอน\",\n    \"icons\": \"ไอคอน\",\n    \"image_border_radius\": \"รัศมีมุมของรูปภาพ\",\n    \"installments\": \"การผ่อนชำระ\",\n    \"integrated_button\": \"ปุ่มในตัว\",\n    \"language_selector\": \"ตัวเลือกภาษา\",\n    \"large\": \"ใหญ่\",\n    \"left\": \"ซ้าย\",\n    \"left_padding\": \"การเว้นขอบด้านในฝั่งซ้าย\",\n    \"letter_spacing\": \"ระยะห่างระหว่างตัวอักษร\",\n    \"limit_media_to_screen_height\": \"จำกัดความสูงตามหน้าจอ\",\n    \"limit_product_details_width\": \"จำกัดความกว้างของรายละเอียดสินค้า\",\n    \"link_preset\": \"ค่าที่ตั้งไว้ล่วงหน้าสำหรับลิงก์\",\n    \"links\": \"ลิงก์\",\n    \"logo\": \"โลโก้\",\n    \"loop\": \"วนซ้ำ\",\n    \"make_details_sticky_desktop\": \"ติดหนึบบนเดสก์ท็อป\",\n    \"max_width\": \"ความกว้างสูงสุด\",\n    \"media_height\": \"ความสูงของสื่อ\",\n    \"media_overlay\": \"การวางซ้อนบนสื่อ\",\n    \"media_position\": \"ตำแหน่งสื่อ\",\n    \"media_type\": \"ประเภทสื่อ\",\n    \"media_width\": \"ความกว้างของสื่อ\",\n    \"menu\": \"เมนู\",\n    \"mobile_columns\": \"คอลัมน์บนมือถือ\",\n    \"mobile_height\": \"ความสูงบนมือถือ\",\n    \"mobile_logo_image\": \"โลโก้สำหรับมือถือ\",\n    \"mobile_quick_add\": \"การเพิ่มด่วนบนมือถือ\",\n    \"motion\": \"Motion\",\n    \"motion_direction\": \"ทิศทางการเคลื่อนไหว\",\n    \"movement_direction\": \"ทิศทางการเคลื่อนที่\",\n    \"navigation\": \"การนำทาง\",\n    \"navigation_bar\": \"แถบการนำทาง\",\n    \"navigation_bar_color_scheme\": \"ชุดสีของแถบการนำทาง\",\n    \"open_new_tab\": \"เปิดลิงก์ในแท็บใหม่\",\n    \"overlay\": \"การวางซ้อน\",\n    \"overlay_color\": \"สีที่วางซ้อน\",\n    \"padding_bottom\": \"การเว้นขอบด้านในส่วนล่าง\",\n    \"padding_horizontal\": \"การเว้นขอบด้านในแนวนอน\",\n    \"padding_top\": \"การเว้นขอบด้านในส่วนบน\",\n    \"page_width\": \"ความกว้างของหน้า\",\n    \"pagination\": \"การแบ่งหน้า\",\n    \"placement\": \"ตำแหน่งการจัดวาง\",\n    \"position\": \"ตำแหน่ง\",\n    \"preset\": \"ค่าที่ตั้งไว้ล่วงหน้า\",\n    \"product_cards\": \"การ์ดสินค้า\",\n    \"product_pages\": \"หน้าสินค้า\",\n    \"product_templates\": \"เทมเพลตสินค้า\",\n    \"products\": \"สินค้า\",\n    \"quick_add\": \"เพิ่มด่วน\",\n    \"ratio\": \"อัตราส่วน\",\n    \"regular\": \"ปกติ\",\n    \"review_count\": \"จำนวนรีวิว\",\n    \"right\": \"ขวา\",\n    \"row\": \"แถว\",\n    \"row_height\": \"ความสูงของแถว\",\n    \"seller_note\": \"อนุญาตให้เพิ่มหมายเหตุถึงผู้ขาย\",\n    \"shape\": \"รูปทรง\",\n    \"show\": \"แสดง\",\n    \"show_as_accordion\": \"แสดงเป็นรูปแบบพับเก็บได้บนมือถือ\",\n    \"show_filter_label\": \"ป้ายกำกับข้อความสำหรับตัวกรองที่ใช้\",\n    \"show_sale_price_first\": \"แสดงราคาโปรโมชันก่อน\",\n    \"show_swatch_label\": \"ป้ายกำกับข้อความสำหรับภาพตัวอย่าง\",\n    \"show_tax_info\": \"ข้อมูลภาษี\",\n    \"small\": \"เล็ก\",\n    \"speed\": \"ความเร็ว\",\n    \"statement\": \"ใบแจ้งยอด\",\n    \"sticky_header\": \"ส่วนหัวแบบติดหนึบ\",\n    \"text_hierarchy\": \"ลำดับชั้นของข้อความ\",\n    \"text_presets\": \"ค่าที่ตั้งไว้ล่วงหน้าสำหรับข้อความ\",\n    \"title\": \"ชื่อเรื่อง\",\n    \"top\": \"ด้านบน\",\n    \"type\": \"ประเภท\",\n    \"type_preset\": \"ค่าที่ตั้งไว้ล่วงหน้าสำหรับข้อความ\",\n    \"underline_thickness\": \"ความหนาของเส้นใต้\",\n    \"variant_images\": \"รูปภาพตัวเลือกสินค้า\",\n    \"vendor\": \"ผู้ขาย\",\n    \"vertical_gap\": \"ช่องว่างแนวตั้ง\",\n    \"vertical_offset\": \"ระยะห่างแนวตั้งของเงา\",\n    \"vertical_on_mobile\": \"แนวตั้งบนมือถือ\",\n    \"view_all_as_last_card\": \"ให้ดูทั้งหมดเป็นการ์ดสุดท้าย\",\n    \"weight\": \"น้ำหนัก\",\n    \"wrap\": \"ตัดข้อความ\",\n    \"first_row_media_position\": \"ตำแหน่งสื่อในแถวแรก\",\n    \"card_image_height\": \"ความสูงของรูปภาพสินค้า\",\n    \"background_color\": \"สีพื้นหลัง\",\n    \"size_mobile\": \"ขนาดบนมือถือ\",\n    \"pixel_size_mobile\": \"ขนาด (พิกเซล)\",\n    \"percent_size_mobile\": \"ขนาด (เปอร์เซ็นต์)\",\n    \"unit\": \"หน่วย\",\n    \"custom_mobile_size\": \"ขนาดสำหรับมือถือที่กำหนดเอง\",\n    \"fixed_height\": \"ความสูง (พิกเซล)\",\n    \"fixed_width\": \"ความกว้าง (พิกเซล)\",\n    \"percent_height\": \"ความสูง (เปอร์เซ็นต์)\",\n    \"percent_width\": \"ความกว้าง (เปอร์เซ็นต์)\",\n    \"percent_size\": \"ขนาด (เปอร์เซ็นต์)\",\n    \"pixel_size\": \"ขนาด (พิกเซล)\",\n    \"always_stack_buttons\": \"ซ้อนปุ่มเสมอ\",\n    \"custom_mobile_width\": \"ความกว้างสำหรับมือถือที่กำหนดเอง\",\n    \"shadow_opacity\": \"ความทึบของเงา\",\n    \"hide_padding\": \"ซ่อนการเว้นขอบด้านใน\",\n    \"logo_font\": \"แบบอักษรของโลโก้\",\n    \"read_only\": \"อ่านอย่างเดียว\",\n    \"gradient_direction\": \"ทิศทางของสีที่ไล่ระดับ\",\n    \"headings\": \"หัวเรื่อง\",\n    \"overlay_style\": \"สไตล์การวางซ้อน\",\n    \"transparent_background\": \"พื้นหลังโปร่งใส\",\n    \"account\": \"บัญชี\",\n    \"alignment_mobile\": \"การจัดตำแหน่งสำหรับมือถือ\",\n    \"align_baseline\": \"จัดแนวเส้นฐานข้อความ\",\n    \"add_discount_code\": \"อนุญาตให้ใช้ส่วนลดในตะกร้าสินค้า\",\n    \"background_overlay\": \"การวางซ้อนบนพื้นหลัง\",\n    \"background_media\": \"สื่อพื้นหลัง\",\n    \"border_thickness\": \"ความหนาของเส้นขอบ\",\n    \"bottom_row\": \"แถวด้านล่าง\",\n    \"button_text_case\": \"รูปแบบตัวอักษร\",\n    \"card_size\": \"ขนาดการ์ด\",\n    \"auto_open_cart_drawer\": \"เปิดลิ้นชักอัตโนมัติเมื่อเพิ่มลงในตะกร้าสินค้า\",\n    \"collection_count\": \"จำนวนคอลเลกชัน\",\n    \"custom_liquid\": \"โค้ด Liquid\",\n    \"default\": \"ค่าเริ่มต้น\",\n    \"default_logo\": \"โลโก้เริ่มต้น\",\n    \"divider_width\": \"ความกว้างของเส้นแบ่ง\",\n    \"hide_logo_on_home_page\": \"ซ่อนโลโก้บนหน้าแรก\",\n    \"horizontal_padding\": \"การเว้นขอบด้านในแนวนอน\",\n    \"inventory_threshold\": \"เกณฑ์แจ้งเตือนสต็อกสินค้าเหลือน้อย\",\n    \"inverse\": \"ผกผัน\",\n    \"inverse_logo\": \"โลโก้แบบผกผัน\",\n    \"layout_style\": \"สไตล์\",\n    \"length\": \"ความยาว\",\n    \"mobile_card_size\": \"ขนาดการ์ดบนมือถือ\",\n    \"mobile_pagination\": \"การแบ่งหน้าบนมือถือ\",\n    \"open_row_by_default\": \"เปิดแถวเป็นค่าเริ่มต้น\",\n    \"page\": \"หน้า\",\n    \"page_transition_enabled\": \"การเปลี่ยนหน้า\",\n    \"right_padding\": \"การเว้นขอบด้านในฝั่งขวา\",\n    \"search\": \"ค้นหา\",\n    \"search_icon\": \"ไอคอนค้นหา\",\n    \"search_position\": \"ตำแหน่ง\",\n    \"search_row\": \"แถว\",\n    \"show_author\": \"ผู้เขียน\",\n    \"show_alignment\": \"แสดงการจัดตำแหน่ง\",\n    \"show_count\": \"แสดงจำนวน\",\n    \"show_date\": \"วันที่\",\n    \"show_inventory_quantity\": \"แสดงจำนวนสต็อกสินค้าที่เหลือน้อย\",\n    \"show_pickup_availability\": \"แสดงความพร้อมในการรับสินค้า\",\n    \"show_search\": \"แสดงการค้นหา\",\n    \"use_inverse_logo\": \"ใช้โลโก้แบบผกผัน\",\n    \"vertical_padding\": \"การเว้นขอบด้านในแนวตั้ง\",\n    \"visibility\": \"การมองเห็น\",\n    \"product_corner_radius\": \"รัศมีมุมของสินค้า\",\n    \"card_corner_radius\": \"รัศมีมุมของการ์ด\",\n    \"animation_repeat\": \"เล่นแอนิเมชันซ้ำ\",\n    \"blurred_reflection\": \"ภาพสะท้อนแบบเบลอ\",\n    \"card_hover_effect\": \"เอฟเฟกต์เมื่อวางเมาส์เหนือการ์ด\",\n    \"collection_title_case\": \"รูปแบบตัวอักษรของชื่อคอลเลกชัน\",\n    \"product_and_card_title_case\": \"รูปแบบตัวอักษรของชื่อสินค้าและการ์ด\",\n    \"product_title_case\": \"รูปแบบตัวอักษรของชื่อสินค้า\",\n    \"reflection_opacity\": \"ความทึบของภาพสะท้อน\",\n    \"text_label_case\": \"รูปแบบตัวอักษรของป้ายกำกับข้อความ\",\n    \"transition_to_main_product\": \"การเปลี่ยนจากการ์ดสินค้าไปยังหน้าสินค้า\",\n    \"show_second_image_on_hover\": \"แสดงรูปภาพที่สองเมื่อวางเมาส์เหนือ\",\n    \"media\": \"สื่อ\",\n    \"product_card_carousel\": \"แสดงแครูเซล\",\n    \"media_fit\": \"การปรับขนาดสื่อ\",\n    \"scroll_speed\": \"เวลาก่อนถึงประกาศถัดไป\",\n    \"show_powered_by_shopify\": \"แสดงขับเคลื่อนโดย Shopify\",\n    \"seller_note_open_by_default\": \"เปิดหมายเหตุถึงผู้ขายเป็นค่าเริ่มต้น\",\n    \"gift_card_form\": \"ฟอร์มบัตรของขวัญ\",\n    \"add_to_cart_animation\": \"เพิ่มลงในตะกร้าสินค้า\",\n    \"custom_link\": \"ลิงก์ที่กำหนดเอง\",\n    \"product_custom_property\": {\n      \"heading\": \"หัวเรื่อง\",\n      \"description\": \"คำอธิบาย\",\n      \"key\": \"ชื่อคุณสมบัติ\",\n      \"key_info\": \"ต้องไม่เว้นว่างและต้องไม่ซ้ำกันในแต่ละบล็อก จะแสดงในตะกร้าสินค้า การชำระเงิน และรายละเอียดคำสั่งซื้อ\",\n      \"placeholder_text\": \"ข้อความตัวยึดตำแหน่ง\",\n      \"default_heading\": \"ปรับแต่งสินค้าของคุณ\",\n      \"required\": \"ต้องป้อนข้อมูลเพื่อเพิ่มรายการลงในตะกร้าสินค้า\",\n      \"input_type\": \"ประเภทการป้อนข้อมูล\",\n      \"input_type_text\": \"ข้อความ\",\n      \"input_type_checkbox\": \"ช่องทำเครื่องหมาย\",\n      \"content_settings\": \"การตั้งค่าเนื้อหา\",\n      \"checkbox_label\": \"ป้ายกำกับช่องทำเครื่องหมาย\",\n      \"heading_preset\": \"หัวเรื่อง\",\n      \"description_preset\": \"คำอธิบาย\",\n      \"input_preset\": \"ข้อมูลที่ป้อน\",\n      \"checkbox_preset\": \"ป้ายกำกับช่องทำเครื่องหมาย\",\n      \"default_placeholder\": \"ป้อนคำแนะนำพิเศษของคุณ\",\n      \"default_property_key\": \"คำแนะนำพิเศษ\",\n      \"max_length\": \"จำนวนอักขระสูงสุด\",\n      \"buyers_input\": \"ข้อมูลที่ผู้ซื้อป้อน\",\n      \"default_checkbox_label\": \"รวมการห่อของขวัญ\"\n    },\n    \"blog\": \"บล็อก\",\n    \"post_count\": \"จำนวนโพสต์\",\n    \"animation\": \"แอนิเมชัน\",\n    \"top_level_size\": \"ขนาดระดับบนสุด\",\n    \"empty_cart_button_link\": \"ลิงก์ปุ่มของตะกร้าสินค้าว่าง\",\n    \"auto_load_products\": \"โหลดสินค้าอัตโนมัติเมื่อเลื่อน\",\n    \"products_per_page\": \"สินค้าต่อหน้า\",\n    \"custom_mobile_media\": \"แสดงสื่อที่แตกต่างกันบนมือถือ\",\n    \"stack_media_on_mobile\": \"ซ้อนสื่อ\",\n    \"media_type_1\": \"ประเภทสื่อ\",\n    \"media_type_2\": \"ประเภทสื่อ 2\",\n    \"full_frame_on_mobile\": \"เต็มความกว้างบนมือถือ\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"จำนวนตัวเลือกสินค้าต่อหน้า\",\n    \"image_1\": \"รูปภาพที่ 1\",\n    \"image_2\": \"รูปภาพที่ 2\",\n    \"after_image\": \"รูปภาพ 'หลัง'\",\n    \"before_image\": \"รูปภาพ 'ก่อน'\",\n    \"cs_slider_style\": \"สไตล์แถบเลื่อน\",\n    \"cs_slider_color\": \"สีแถบเลื่อน\",\n    \"cs_slider_inner_color\": \"สีด้านในของแถบเลื่อน\",\n    \"text_on_images\": \"ข้อความบนรูปภาพ\",\n    \"card_height\": \"ความสูงของการ์ด\",\n    \"submenu_size\": \"ขนาดเมนูย่อย\",\n    \"desktop_position\": \"ตำแหน่งบนเดสก์ท็อป\",\n    \"desktop_pagination\": \"การแบ่งหน้าสำหรับเดสก์ท็อป\",\n    \"bullseye_color\": \"สีด้านใน\",\n    \"hotspot_color\": \"สีฮอตสปอต\",\n    \"product_price_typography\": \"รูปแบบตัวอักษรของราคาสินค้า\",\n    \"product_title_typography\": \"รูปแบบตัวอักษรของชื่อสินค้า\",\n    \"x_position\": \"ตำแหน่งแนวนอน\",\n    \"y_position\": \"ตำแหน่งแนวตั้ง\",\n    \"enable_sticky_add_to_cart\": \"แถบเพิ่มลงในตะกร้าสินค้าแบบตรึง\",\n    \"sticky_add_to_cart\": \"เพิ่มลงในตะกร้าสินค้าแบบตรึง\",\n    \"actions_display_style\": \"รูปแบบเมนู\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"ลูกศร\",\n    \"auto\": \"อัตโนมัติ\",\n    \"banana\": \"กล้วย\",\n    \"bottle\": \"ขวด\",\n    \"box\": \"กล่อง\",\n    \"buttons\": \"ปุ่ม\",\n    \"carrot\": \"แคร์รอต\",\n    \"center\": \"ตรงกลาง\",\n    \"chat_bubble\": \"ฟองคำพูด\",\n    \"clipboard\": \"คลิปบอร์ด\",\n    \"contain\": \"พอดี\",\n    \"counter\": \"ตัวนับ\",\n    \"cover\": \"เต็มพื้นที่\",\n    \"custom\": \"กำหนดเอง\",\n    \"dairy_free\": \"ไม่มีส่วนผสมของนม\",\n    \"dairy\": \"ผลิตภัณฑ์นม\",\n    \"default\": \"ค่าเริ่มต้น\",\n    \"dropdowns\": \"ดรอปดาวน์\",\n    \"dots\": \"จุด\",\n    \"dryer\": \"เครื่องอบผ้า\",\n    \"end\": \"ท้าย\",\n    \"eye\": \"ตา\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"เติม\",\n    \"fire\": \"ไฟ\",\n    \"fit\": \"พอดี\",\n    \"full\": \"เต็ม\",\n    \"full_and_page\": \"พื้นหลังเต็มหน้า เนื้อหากว้างเท่าหน้ากระดาษ\",\n    \"gluten_free\": \"ไม่มีกลูเตน\",\n    \"heading\": \"ส่วนหัวเรื่อง\",\n    \"heart\": \"หัวใจ\",\n    \"horizontal\": \"แนวนอน\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"เตารีด\",\n    \"landscape\": \"แนวนอน\",\n    \"large\": \"ใหญ่\",\n    \"leaf\": \"ใบไม้\",\n    \"leather\": \"หนัง\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"สายฟ้า\",\n    \"link\": \"ลิงก์\",\n    \"lipstick\": \"ลิปสติก\",\n    \"lock\": \"ล็อก\",\n    \"lowercase\": \"ตัวพิมพ์เล็ก\",\n    \"m\": \"M\",\n    \"map_pin\": \"หมุดแผนที่\",\n    \"medium\": \"ปานกลาง\",\n    \"none\": \"ไม่มี\",\n    \"numbers\": \"ตัวเลข\",\n    \"nut_free\": \"ไม่มีส่วนผสมของถั่ว\",\n    \"outline\": \"เส้นขอบ\",\n    \"page\": \"หน้า\",\n    \"pants\": \"กางเกง\",\n    \"paw_print\": \"รอยเท้าสัตว์\",\n    \"pepper\": \"พริกไทย\",\n    \"perfume\": \"น้ำหอม\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"เครื่องบิน\",\n    \"plant\": \"ต้นไม้\",\n    \"portrait\": \"แนวตั้ง\",\n    \"price_tag\": \"ป้ายราคา\",\n    \"question_mark\": \"เครื่องหมายคำถาม\",\n    \"recycle\": \"รีไซเคิล\",\n    \"return\": \"การคืนสินค้า\",\n    \"ruler\": \"ไม้บรรทัด\",\n    \"s\": \"S\",\n    \"sentence\": \"ประโยค\",\n    \"serving_dish\": \"จานเสิร์ฟ\",\n    \"shirt\": \"เสื้อเชิ้ต\",\n    \"shoe\": \"รองเท้า\",\n    \"silhouette\": \"ภาพเงา\",\n    \"small\": \"เล็ก\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"เกล็ดหิมะ\",\n    \"solid\": \"ทึบ\",\n    \"space_between\": \"เว้นวรรคระหว่าง\",\n    \"square\": \"สี่เหลี่ยมจัตุรัส\",\n    \"star\": \"ดาว\",\n    \"start\": \"เริ่มต้น\",\n    \"stopwatch\": \"นาฬิกาจับเวลา\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"รถบรรทุก\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"ตัวพิมพ์ใหญ่\",\n    \"vertical\": \"แนวตั้ง\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"การซักผ้า\",\n    \"circle\": \"วงกลม\",\n    \"swatches\": \"ภาพตัวอย่าง\",\n    \"full_and_page_offset_left\": \"พื้นหลังเต็มหน้า เนื้อหากว้างเท่าหน้ากระดาษ เยื้องซ้าย\",\n    \"full_and_page_offset_right\": \"พื้นหลังเต็มหน้า เนื้อหากว้างเท่าหน้ากระดาษ เยื้องขวา\",\n    \"offset_left\": \"เยื้องซ้าย\",\n    \"offset_right\": \"เยื้องขวา\",\n    \"page_center_aligned\": \"หน้า จัดกึ่งกลาง\",\n    \"page_left_aligned\": \"หน้า จัดชิดซ้าย\",\n    \"page_right_aligned\": \"หน้า จัดชิดขวา\",\n    \"button\": \"ปุ่ม\",\n    \"caption\": \"คำบรรยายภาพ\",\n    \"h1\": \"ส่วนหัวเรื่อง 1\",\n    \"h2\": \"ส่วนหัวเรื่อง 2\",\n    \"h3\": \"ส่วนหัวเรื่อง 3\",\n    \"h4\": \"ส่วนหัวเรื่อง 4\",\n    \"h5\": \"ส่วนหัวเรื่อง 5\",\n    \"h6\": \"ส่วนหัวเรื่อง 6\",\n    \"paragraph\": \"ย่อหน้า\",\n    \"primary\": \"หลัก\",\n    \"secondary\": \"รอง\",\n    \"tertiary\": \"ระดับที่สาม\",\n    \"chevron_left\": \"เชฟรอนซ้าย\",\n    \"chevron_right\": \"เชฟรอนขวา\",\n    \"diamond\": \"เพชร\",\n    \"grid\": \"กริด\",\n    \"parallelogram\": \"สี่เหลี่ยมด้านขนาน\",\n    \"rounded\": \"โค้งมน\",\n    \"fit_content\": \"พอดี\",\n    \"pills\": \"ป้าย\",\n    \"heavy\": \"หนา\",\n    \"thin\": \"บาง\",\n    \"drawer\": \"ลิ้นชัก\",\n    \"preview\": \"แสดงตัวอย่าง\",\n    \"text\": \"ข้อความ\",\n    \"video_uploaded\": \"อัปโหลดแล้ว\",\n    \"video_external_url\": \"URL ภายนอก\",\n    \"above_carousel\": \"เหนือแครูเซล\",\n    \"all\": \"ทั้งหมด\",\n    \"always\": \"เสมอ\",\n    \"arrows\": \"ลูกศร\",\n    \"arrows_large\": \"ลูกศรขนาดใหญ่\",\n    \"balance\": \"สมดุล\",\n    \"bento\": \"Bento\",\n    \"black\": \"สีดำ\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"เนื้อหา (ใหญ่)\",\n    \"body_regular\": \"เนื้อหา (ปกติ)\",\n    \"body_small\": \"เนื้อหา (เล็ก)\",\n    \"bold\": \"ตัวหนา\",\n    \"bottom\": \"ด้านล่าง\",\n    \"bottom_left\": \"ล่างซ้าย\",\n    \"bottom_right\": \"ล่างขวา\",\n    \"capitalize\": \"ตัวพิมพ์ใหญ่ขึ้นต้น\",\n    \"caret\": \"แคเร็ต\",\n    \"carousel\": \"แครูเซล\",\n    \"check_box\": \"ช่องทำเครื่องหมาย\",\n    \"chevron\": \"เชฟรอน\",\n    \"chevron_large\": \"เชฟรอนขนาดใหญ่\",\n    \"chevrons\": \"เชฟรอน\",\n    \"classic\": \"คลาสสิก\",\n    \"collection_images\": \"รูปภาพคอลเลกชัน\",\n    \"color\": \"สี\",\n    \"complementary\": \"ที่เสริมกัน\",\n    \"dissolve\": \"เลือนหาย\",\n    \"dotted\": \"แบบจุด\",\n    \"editorial\": \"บทบรรณาธิการ\",\n    \"extra_large\": \"ใหญ่พิเศษ\",\n    \"extra_small\": \"เล็กพิเศษ\",\n    \"featured_collections\": \"คอลเลกชันเด่น\",\n    \"featured_products\": \"สินค้าเด่น\",\n    \"font_primary\": \"หลัก\",\n    \"font_secondary\": \"รอง\",\n    \"font_tertiary\": \"ระดับที่สาม\",\n    \"forward\": \"ไปข้างหน้า\",\n    \"full_screen\": \"เต็มหน้าจอ\",\n    \"heading_extra_large\": \"ส่วนหัวเรื่อง (ใหญ่พิเศษ)\",\n    \"heading_extra_small\": \"ส่วนหัวเรื่อง (เล็กพิเศษ)\",\n    \"heading_large\": \"ส่วนหัวเรื่อง (ใหญ่)\",\n    \"heading_regular\": \"ส่วนหัวเรื่อง (ปกติ)\",\n    \"heading_small\": \"ส่วนหัวเรื่อง (เล็ก)\",\n    \"icon\": \"ไอคอน\",\n    \"image\": \"รูปภาพ\",\n    \"input\": \"ช่องข้อมูล\",\n    \"inside_carousel\": \"ภายในแครูเซล\",\n    \"inverse\": \"สีตรงข้าม\",\n    \"inverse_large\": \"สีตรงข้ามขนาดใหญ่\",\n    \"large_arrows\": \"ลูกศรขนาดใหญ่\",\n    \"large_chevrons\": \"เชฟรอนขนาดใหญ่\",\n    \"left\": \"ซ้าย\",\n    \"light\": \"บาง\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"หลวม\",\n    \"media_first\": \"สื่อก่อน\",\n    \"media_second\": \"สื่อทีหลัง\",\n    \"modal\": \"โมดอล\",\n    \"narrow\": \"แคบ\",\n    \"never\": \"ไม่เลย\",\n    \"next_to_carousel\": \"ถัดจากแครูเซล\",\n    \"normal\": \"ปกติ\",\n    \"nowrap\": \"ไม่ตัดคำ\",\n    \"off_media\": \"นอกสื่อ\",\n    \"on_media\": \"บนสื่อ\",\n    \"on_scroll_up\": \"เมื่อเลื่อนขึ้น\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"ป้าย\",\n    \"plus\": \"บวก\",\n    \"pretty\": \"สวยงาม\",\n    \"price\": \"ราคา\",\n    \"primary_style\": \"สไตล์หลัก\",\n    \"rectangle\": \"สี่เหลี่ยมผืนผ้า\",\n    \"regular\": \"ปกติ\",\n    \"related\": \"ที่เกี่ยวข้อง\",\n    \"reverse\": \"ย้อนกลับ\",\n    \"rich_text\": \"Rich Text\",\n    \"right\": \"ขวา\",\n    \"secondary_style\": \"สไตล์รอง\",\n    \"semibold\": \"กึ่งตัวหนา\",\n    \"shaded\": \"แรเงา\",\n    \"show_second_image\": \"แสดงรูปภาพที่สอง\",\n    \"single\": \"เดี่ยว\",\n    \"slide_left\": \"เลื่อนไปทางซ้าย\",\n    \"slide_up\": \"เลื่อนขึ้น\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"ซ้อนกัน\",\n    \"text_only\": \"ข้อความเท่านั้น\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"ภาพขนาดย่อ\",\n    \"tight\": \"ชิด\",\n    \"top\": \"ด้านบน\",\n    \"top_left\": \"บนซ้าย\",\n    \"top_right\": \"มุมขวาบน\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"ขีดเส้นใต้\",\n    \"video\": \"วิดีโอ\",\n    \"wide\": \"กว้าง\",\n    \"youtube\": \"YouTube\",\n    \"aspect_ratio\": \"อัตราส่วนภาพ\",\n    \"up\": \"ขึ้นด้านบน\",\n    \"down\": \"ลง\",\n    \"gradient\": \"ไล่ระดับสี\",\n    \"fixed\": \"คงที่\",\n    \"pixel\": \"พิกเซล\",\n    \"percent\": \"เปอร์เซ็นต์\",\n    \"below_image\": \"ใต้รูปภาพ\",\n    \"on_image\": \"บนรูปภาพ\",\n    \"accent\": \"สีที่เน้น\",\n    \"body\": \"เนื้อหา\",\n    \"button_primary\": \"ปุ่มหลัก\",\n    \"button_secondary\": \"ปุ่มรอง\",\n    \"compact\": \"กะทัดรัด\",\n    \"crop_to_fit\": \"ครอบตัดให้พอดี\",\n    \"hidden\": \"ซ่อน\",\n    \"hint\": \"คำใบ้\",\n    \"maintain_aspect_ratio\": \"คงอัตราส่วนภาพ\",\n    \"off\": \"ปิด\",\n    \"social_bluesky\": \"โซเชียล: Bluesky\",\n    \"social_facebook\": \"โซเชียล: Facebook\",\n    \"social_instagram\": \"โซเชียล: Instagram\",\n    \"social_linkedin\": \"โซเชียล: LinkedIn\",\n    \"social_pinterest\": \"โซเชียล: Pinterest\",\n    \"social_snapchat\": \"โซเชียล: Snapchat\",\n    \"social_spotify\": \"โซเชียล: Spotify\",\n    \"social_threads\": \"โซเชียล: Threads\",\n    \"social_tiktok\": \"โซเชียล: TikTok\",\n    \"social_tumblr\": \"โซเชียล: Tumblr\",\n    \"social_twitter\": \"โซเชียล: X (Twitter)\",\n    \"social_whatsapp\": \"โซเชียล: WhatsApp\",\n    \"social_vimeo\": \"โซเชียล: Vimeo\",\n    \"social_youtube\": \"โซเชียล: YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"มาตรฐาน\",\n    \"subheading\": \"หัวเรื่องย่อย\",\n    \"blur\": \"เบลอ\",\n    \"lift\": \"ยกขึ้น\",\n    \"reveal\": \"เปิดเผย\",\n    \"scale\": \"ขยายสเกล\",\n    \"subtle_zoom\": \"ซูม\",\n    \"with_hints\": \"พร้อมคำใบ้\",\n    \"below_media\": \"ใต้สื่อ\",\n    \"full_frame\": \"เต็มเฟรม\",\n    \"icons\": \"ไอคอน\"\n  },\n  \"content\": {\n    \"advanced\": \"ขั้นสูง\",\n    \"background_image\": \"รูปภาพพื้นหลัง\",\n    \"background_video\": \"วิดีโอพื้นหลัง\",\n    \"block_size\": \"ขนาดบล็อก\",\n    \"borders\": \"เส้นขอบ\",\n    \"describe_the_video_for\": \"โปรดอธิบายวิดีโอสำหรับลูกค้าที่ใช้โปรแกรมอ่านหน้าจอ [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"ขนาดของส่วน\",\n    \"slideshow_width\": \"ความกว้างของสไลด์\",\n    \"typography\": \"การพิมพ์\",\n    \"width_is_automatically_optimized\": \"ความกว้างจะปรับให้เหมาะสมสำหรับมือถือโดยอัตโนมัติ\",\n    \"complementary_products\": \"ต้องตั้งค่าสินค้าที่เสริมกันโดยใช้แอป Search & Discovery [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"คอลัมน์จะปรับให้เหมาะสมสำหรับมือถือโดยอัตโนมัติ\",\n    \"content_width\": \"ความกว้างของเนื้อหาจะใช้ได้ก็ต่อเมื่อตั้งค่าความกว้างของส่วนเป็นเต็มความกว้างเท่านั้น\",\n    \"responsive_font_sizes\": \"ขนาดจะปรับสเกลสำหรับหน้าจอทุกขนาดโดยอัตโนมัติ\",\n    \"buttons\": \"ปุ่ม\",\n    \"swatches\": \"ภาพตัวอย่าง\",\n    \"variant_settings\": \"การตั้งค่าตัวเลือกสินค้า\",\n    \"background\": \"พื้นหลัง\",\n    \"appearance\": \"ลักษณะที่ปรากฏ\",\n    \"arrows\": \"ลูกศร\",\n    \"body_size\": \"ขนาดเนื้อหา\",\n    \"bottom_row_appearance\": \"ลักษณะที่ปรากฏของแถวล่างสุด\",\n    \"carousel_navigation\": \"การนำทางแครูเซล\",\n    \"carousel_pagination\": \"การแบ่งหน้าแครูเซล\",\n    \"copyright\": \"ลิขสิทธิ์\",\n    \"edit_logo_in_theme_settings\": \"แก้ไขโลโก้ใน[การตั้งค่าธีม](/editor?context=theme&category=logo%20and%20favicon)\",\n    \"edit_price_in_theme_settings\": \"แก้ไขการจัดรูปแบบราคาใน[การตั้งค่าธีม](/editor?context=theme&category=currency%20code)\",\n    \"edit_variants_in_theme_settings\": \"แก้ไขสไตล์ตัวเลือกสินค้าใน[การตั้งค่าธีม](/editor?context=theme&category=variants)\",\n    \"email_signups_create_customer_profiles\": \"การสมัครใช้งานจะเพิ่ม[โปรไฟล์ลูกค้า](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"เพื่อให้ปุ่มแสดงผล จะต้องติดตั้งช่องทาง Shop และเปิดใช้งาน Shop Pay [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"แบบอักษร\",\n    \"grid\": \"กริด\",\n    \"heading_size\": \"ขนาดส่วนหัวเรื่อง\",\n    \"image\": \"รูปภาพ\",\n    \"input\": \"ช่องข้อมูล\",\n    \"layout\": \"เลย์เอาต์\",\n    \"link\": \"ลิงก์\",\n    \"link_padding\": \"การเว้นขอบด้านในของลิงก์\",\n    \"localization\": \"การปรับให้เข้ากับท้องถิ่น\",\n    \"logo\": \"โลโก้\",\n    \"margin\": \"ระยะขอบ\",\n    \"media\": \"สื่อ\",\n    \"media_1\": \"สื่อ 1\",\n    \"media_2\": \"สื่อ 2\",\n    \"menu\": \"เมนู\",\n    \"mobile_layout\": \"เลย์เอาต์สำหรับมือถือ\",\n    \"padding\": \"การเว้นขอบด้านใน\",\n    \"padding_desktop\": \"การเว้นขอบด้านในสำหรับเดสก์ท็อป\",\n    \"paragraph\": \"ย่อหน้า\",\n    \"policies\": \"นโยบาย\",\n    \"popup\": \"ป๊อปอัพ\",\n    \"search\": \"การค้นหา\",\n    \"size\": \"ขนาด\",\n    \"social_media\": \"โซเชียลมีเดีย\",\n    \"submit_button\": \"ปุ่มส่ง\",\n    \"text_presets\": \"ค่าที่ตั้งไว้ล่วงหน้าของข้อความ\",\n    \"transparent_background\": \"พื้นหลังโปร่งใส\",\n    \"typography_primary\": \"การพิมพ์หลัก\",\n    \"typography_secondary\": \"การพิมพ์รอง\",\n    \"typography_tertiary\": \"การพิมพ์ระดับที่สาม\",\n    \"mobile_size\": \"ขนาดสำหรับมือถือ\",\n    \"mobile_width\": \"ความกว้างสำหรับมือถือ\",\n    \"width\": \"ความกว้าง\",\n    \"cards_layout\": \"เลย์เอาต์การ์ด\",\n    \"section_layout\": \"เลย์เอาต์ของส่วน\",\n    \"visible_if_collection_has_more_products\": \"จะแสดงเมื่อคอลเลกชันมีสินค้ามากกว่าที่แสดง\",\n    \"carousel\": \"แครูเซล\",\n    \"colors\": \"สี\",\n    \"collection_page\": \"หน้าคอลเลกชัน\",\n    \"customer_account\": \"บัญชีผู้ใช้ของลูกค้า\",\n    \"edit_empty_state_collection_in_theme_settings\": \"แก้ไขคอลเลกชันสถานะว่างใน[การตั้งค่าธีม](/editor?context=theme&category=search)\",\n    \"grid_layout\": \"เลย์เอาต์แบบกริด\",\n    \"home_page\": \"หน้าแรก\",\n    \"images\": \"รูปภาพ\",\n    \"inverse_logo_info\": \"ใช้เมื่อพื้นหลังของส่วนหัวแบบโปร่งใสถูกตั้งค่าเป็นสีตรงข้าม\",\n    \"manage_customer_accounts\": \"[จัดการการแสดงผล](/admin/settings/customer_accounts)ในการตั้งค่าบัญชีผู้ใช้ของลูกค้า ไม่รองรับบัญชีรุ่นเก่า\",\n    \"manage_policies\": \"[จัดการนโยบาย](/admin/settings/legal)\",\n    \"product_page\": \"หน้าสินค้า\",\n    \"text\": \"ข้อความ\",\n    \"thumbnails\": \"ภาพขนาดย่อ\",\n    \"visibility\": \"การแสดงผล\",\n    \"app_required_for_ratings\": \"จำเป็นต้องมีแอปสำหรับรีวิวสินค้า [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"ไอคอน\",\n    \"manage_store_name\": \"[จัดการชื่อร้านค้า](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"แสดงคอลเลกชันจากส่วนหลัก\",\n    \"resource_reference_collection_card_image\": \"แสดงรูปภาพจากคอลเลกชันหลัก\",\n    \"resource_reference_collection_title\": \"แสดงชื่อจากคอลเลกชันหลัก\",\n    \"resource_reference_product\": \"เชื่อมต่อกับสินค้าหลักโดยอัตโนมัติ\",\n    \"resource_reference_product_card\": \"แสดงสินค้าจากส่วนหลัก\",\n    \"resource_reference_product_inventory\": \"แสดงสินค้าคงคลังจากสินค้าหลัก\",\n    \"resource_reference_product_price\": \"แสดงราคาจากสินค้าหลัก\",\n    \"resource_reference_product_recommendations\": \"แสดงสินค้าแนะนำตามสินค้าหลัก\",\n    \"resource_reference_product_review\": \"แสดงรีวิวจากสินค้าหลัก\",\n    \"resource_reference_product_swatches\": \"แสดงภาพตัวอย่างจากสินค้าหลัก\",\n    \"resource_reference_product_title\": \"แสดงชื่อจากสินค้าหลัก\",\n    \"resource_reference_product_variant_picker\": \"แสดงตัวเลือกสินค้าจากสินค้าหลัก\",\n    \"product_media\": \"สื่อของสินค้า\",\n    \"resource_reference_product_media\": \"แสดงสื่อจากสินค้าหลัก\",\n    \"section_link\": \"ลิงก์ของส่วน\",\n    \"gift_card_form_description\": \"ลูกค้าสามารถส่งบัตรของขวัญไปยังอีเมลของผู้รับพร้อมข้อความส่วนตัวได้ [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"ส่วนหัวเรื่อง\",\n    \"resource_reference_product_custom_property\": \"เพิ่มช่องข้อมูลที่ปรับแต่งได้เพื่อเก็บข้อมูลที่กำหนดเองซึ่งจะถูกเพิ่มไปยังสินค้าเฉพาะรายการของคำสั่งซื้อนี้ และจะแสดงในรายละเอียดคำสั่งซื้อในภายหลัง\",\n    \"block_link\": \"ลิงก์ของบล็อก\",\n    \"submenu_feature\": \"ฟีเจอร์เมนูย่อย\",\n    \"cart_features\": \"ฟีเจอร์ของตะกร้าสินค้า\",\n    \"email_signup\": \"การลงทะเบียนอีเมล\",\n    \"mobile_media\": \"สื่อสำหรับมือถือ\",\n    \"mobile_media_2\": \"สื่อสำหรับมือถือ 2\",\n    \"navigation\": \"การนำทาง\",\n    \"popover\": \"ป็อปโอเวอร์\",\n    \"popover_position\": \"ตำแหน่งป็อปโอเวอร์\",\n    \"resource_reference_product_sku\": \"แสดง SKU จากสินค้าหลัก\",\n    \"content_layout\": \"เลย์เอาต์เนื้อหา\",\n    \"mobile_media_1\": \"สื่อสำหรับมือถือ 1\",\n    \"utilities\": \"ยูทิลิตี\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>แชร์ข้อมูลเกี่ยวกับแบรนด์ของคุณกับลูกค้า อธิบายสินค้า ประกาศข่าวสาร หรือต้อนรับลูกค้าสู่ร้านค้าของคุณ</p>\",\n    \"bestseller_h2\": \"<h2>สินค้าขายดี</h2>\",\n    \"bestseller_h3\": \"<h3>สินค้าขายดี</h3>\",\n    \"bestseller\": \"<p>สินค้าขายดี</p>\",\n    \"build_better\": \"<p>เราเชื่อในการสร้างสรรค์สิ่งที่ดียิ่งขึ้น</p>\",\n    \"contact_us\": \"<h2>ติดต่อเรา</h2>\",\n    \"discover_bestsellers\": \"<p>ค้นพบสินค้าขายดีที่ครองใจลูกค้าของเราด้วยการผสมผสานที่ลงตัวระหว่างฟังก์ชันการใช้งานและสไตล์</p>\",\n    \"everythings_starts_with_why\": \"<p>ทุกสิ่งที่เราทำเริ่มต้นด้วยคำว่าทำไม</p>\",\n    \"explore_latest_products\": \"<p>สำรวจสินค้าล่าสุดของเรา</p>\",\n    \"faq\": \"<h3>คำถามที่พบบ่อย</h3>\",\n    \"first_to_know\": \"<p>รับทราบข้อมูลคอลเลกชันใหม่และข้อเสนอพิเศษก่อนใคร </p>\",\n    \"free_returns\": \"<p>คืนสินค้าฟรีภายใน 30 วัน</p>\",\n    \"free_shipping_over\": \"<p>จัดส่งฟรีเมื่อซื้อเกิน $50</p>\",\n    \"goal_for_every_customer\": \"<p>เป้าหมายของเราคือเพื่อให้ลูกค้าทุกคนพึงพอใจกับการซื้อสินค้าอย่างเต็มที่ หากไม่เป็นเช่นนั้น โปรดแจ้งให้เราทราบ แล้วเราจะพยายามอย่างเต็มที่เพื่อร่วมมือกับคุณในการแก้ไขปัญหา</p>\",\n    \"home_to_shirts\": \"<p>หน้าแรก → เสื้อเชิ้ต</p>\",\n    \"intentional_design\": \"<h2>การออกแบบอย่างตั้งใจ</h2>\",\n    \"introducing_h2\": \"<h2><em>ขอแนะนำ</em></h2>\",\n    \"latest_products\": \"<p>ขอแนะนำสินค้าล่าสุดของเราที่ผลิตขึ้นเป็นพิเศษสำหรับฤดูกาลนี้ เลือกซื้อสินค้าชิ้นโปรดของคุณก่อนจะหมด</p>\",\n    \"made_local_and_global\": \"<p>สินค้าของเราผลิตทั้งในประเทศและทั่วโลก เราคัดเลือกพาร์ทเนอร์การผลิตของเราอย่างพิถีพิถันเพื่อให้แน่ใจว่าสินค้าของเรามีคุณภาพสูงและราคายุติธรรม</p>\",\n    \"made_with_care_h2\": \"<h2>ผลิตด้วยความใส่ใจ</h2>\",\n    \"made_with_care_extended\": \"<p>ผลิตด้วยความใส่ใจและเป็นที่รักของลูกค้าอย่างไม่มีเงื่อนไข สินค้าขายดีอันเป็นเอกลักษณ์นี้เหนือความคาดหมายทุกประการ</p>\",\n    \"made_with_care\": \"<p>ผลิตด้วยความใส่ใจและเป็นที่รักของลูกค้าอย่างไม่มีเงื่อนไข</p>\",\n    \"make_things_better_extended\": \"<p>เราสร้างสรรค์สิ่งที่ใช้งานได้ดีขึ้นและทนทานยิ่งขึ้น สินค้าของเราแก้ปัญหาที่เกิดขึ้นจริงด้วยดีไซน์ที่สะอาดตาและวัสดุที่เชื่อถือได้</p>\",\n    \"make_things_better\": \"<p>เราสร้างสรรค์สิ่งที่ใช้งานได้ดีขึ้นและทนทานยิ่งขึ้น</p>\",\n    \"may_also_like\": \"<h4>คุณอาจจะชอบ</h4>\",\n    \"new_arrivals_h1\": \"<h1>สินค้ามาใหม่</h1>\",\n    \"new_arrivals_h2\": \"<h2>สินค้ามาใหม่</h2>\",\n    \"new_arrivals_h3\": \"<h3>สินค้ามาใหม่</h3>\",\n    \"product_launch\": \"<p>ชมเบื้องหลังการเปิดตัวสินค้าล่าสุดของเรา</p>\",\n    \"product_story\": \"<p>หัวใจของสินค้าทุกชิ้นคือเรื่องราวที่ไม่เหมือนใคร ซึ่งขับเคลื่อนด้วยความหลงใหลในคุณภาพและนวัตกรรมของเรา สินค้าแต่ละรายการจะช่วยยกระดับชีวิตประจำวันของคุณและจุดประกายความสุข</p>\",\n    \"real_people\": \"<p>คนจริงๆ ที่สร้างสรรค์ผลิตภัณฑ์ที่ยอดเยี่ยม</p>\",\n    \"related_product\": \"<h3>สินค้าที่เกี่ยวข้อง</h3>\",\n    \"return_policy\": \"<h2>นโยบายการคืนสินค้าคืออะไร</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 รีวิว</p>\",\n    \"shipping_based_on_location\": \"<p>การจัดส่งจะคำนวณตามตำแหน่งที่ตั้งของคุณและสินค้าในคำสั่งซื้อของคุณ คุณจะทราบราคาค่าจัดส่งก่อนตัดสินใจซื้อเสมอ</p>\",\n    \"shop_by_collection\": \"<h3>เลือกซื้อตามคอลเลกชัน</h3>\",\n    \"signature_products\": \"<h2>สินค้าอันเป็นเอกลักษณ์ของเรา</h2>\",\n    \"styled_with\": \"<h3>จัดสไตล์ด้วย</h3>\",\n    \"subscribe\": \"<h2>สมัครรับอีเมลของเรา</h2>\",\n    \"team_with_goal\": \"<h2>ทีมที่มีเป้าหมาย</h2>\",\n    \"unable_to_accept_returns\": \"<p>เราไม่สามารถรับคืนสินค้าบางรายการได้ สินค้าเหล่านี้จะมีการทำเครื่องหมายไว้อย่างชัดเจนก่อนการซื้อ</p>\",\n    \"work_quickly_to_ship\": \"<p>เราจะดำเนินการจัดส่งคำสั่งซื้อของคุณโดยเร็วที่สุด เมื่อคำสั่งซื้อของคุณถูกจัดส่งแล้ว คุณจะได้รับอีเมลพร้อมข้อมูลเพิ่มเติม ระยะเวลาในการจัดส่งจะแตกต่างกันไปขึ้นอยู่กับตำแหน่งที่ตั้งของคุณ</p>\",\n    \"join_our_email_list\": \"<h2>เข้าร่วมรายชื่ออีเมลของเรา</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>รับข้อเสนอสุดพิเศษและสิทธิ์เข้าถึงสินค้าใหม่ก่อนใคร</p>\",\n    \"artistry_in_action\": \"<p>ศิลปะที่นำมาใช้ได้จริง </p>\",\n    \"authentic_materials\": \"<p>วัสดุของแท้ ไม่ลดทอนคุณภาพ </p>\",\n    \"bold_style_recognizable\": \"<p>สไตล์ที่โดดเด่นและเป็นที่จดจำได้ในทุกที่</p>\",\n    \"discover_elevated_design\": \"<p>ค้นพบดีไซน์ที่เหนือระดับ </p>\",\n    \"expert_construction_finish\": \"<p>โครงสร้างที่เชี่ยวชาญและการเก็บรายละเอียดอย่างไร้ที่ติ</p>\",\n    \"made_to_last\": \"<p>ผลิตมาเพื่อความทนทาน </p>\",\n    \"pieces_better_with_time\": \"<p>ชิ้นงานที่ดูดีขึ้นตามกาลเวลาและการใช้งาน </p>\",\n    \"quality_you_can_feel\": \"<h2>คุณภาพที่คุณสัมผัสได้</h2>\",\n    \"uncompromising_standards\": \"<p>มาตรฐานที่ไม่ลดหย่อน </p>\",\n    \"featured_collection_h2\": \"<h2>คอลเลกชันเด่น</h2>\",\n    \"shop_collection\": \"<p>พบกับคอลเลกชันที่เราคัดสรรมาเป็นพิเศษซึ่งมีแต่สินค้ายอดนิยมที่ผสมผสานสไตล์และคุณภาพเข้าไว้ด้วยกัน</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"ช้อปเลย\",\n    \"collapsible_row\": \"แถวที่พับเก็บได้\",\n    \"heading\": \"หัวเรื่อง\",\n    \"email_signup_button_label\": \"ติดตาม\",\n    \"accordion_heading\": \"หัวเรื่องรูปแบบพับเก็บได้\",\n    \"contact_form_button_label\": \"ส่ง\",\n    \"popup_link\": \"ลิงก์ป๊อปอัพ\",\n    \"sign_up\": \"ลงทะเบียน\",\n    \"welcome_to_our_store\": \"ยินดีต้อนรับสู่ร้านค้าของเรา\",\n    \"be_bold\": \"จงโดดเด่น\",\n    \"shop_our_latest_arrivals\": \"เลือกซื้อสินค้ามาใหม่ล่าสุดของเรา\",\n    \"are_purchases_final_sale\": \"การซื้อใดๆ ถือเป็นการขายที่สิ้นสุดหรือไม่\",\n    \"care_instructions\": \"คำแนะนำในการดูแลรักษา\",\n    \"cart\": \"ตะกร้าสินค้า\",\n    \"discover_collection\": \"ค้นพบคอลเลกชัน\",\n    \"fit\": \"ความพอดี\",\n    \"how_much_for_shipping\": \"ค่าจัดส่งราคาเท่าไร\",\n    \"learn_more\": \"ดูข้อมูลเพิ่มเติม\",\n    \"manufacturing\": \"การผลิต\",\n    \"materials\": \"วัสดุ\",\n    \"return_policy\": \"นโยบายการคืนสินค้า\",\n    \"shipping\": \"การจัดส่ง\",\n    \"shop_now_button_label\": \"ช้อปเลย\",\n    \"sign_up_button_label\": \"ลงทะเบียน\",\n    \"submit_button_label\": \"ส่ง\",\n    \"up_the_ante\": \"ยกระดับ\\nไปอีกขั้น\",\n    \"view_all_button_label\": \"ดูทั้งหมด\",\n    \"what_is_return_policy\": \"นโยบายการคืนสินค้าคืออะไร\",\n    \"when_will_order_arrive\": \"ฉันจะได้รับคำสั่งซื้อเมื่อไร\",\n    \"where_are_products_made\": \"สินค้าของคุณผลิตที่ไหน\",\n    \"trending_now\": \"กำลังเป็นที่นิยม\",\n    \"shop_the_look\": \"Shop the Look\",\n    \"bestsellers\": \"สินค้าขายดี\",\n    \"featured_collection\": \"คอลเลกชันเด่น\",\n    \"new_arrivals\": \"สินค้ามาใหม่\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"โปรดอธิบายวิดีโอสำหรับผู้ใช้เทคโนโลยีความช่วยเหลือพิเศษ\",\n    \"video_autoplay\": \"วิดีโอจะถูกปิดเสียงตามค่าเริ่มต้น\",\n    \"video_external\": \"ใช้ URL ของ YouTube หรือ Vimeo\",\n    \"carousel_layout_on_mobile\": \"บนมือถือจะแสดงผลเป็นแคโรเซลเสมอ\",\n    \"checkout_buttons\": \"ช่วยให้ผู้ซื้อชำระเงินได้เร็วขึ้นและสามารถปรับปรุงคอนเวอร์ชันได้ [ดูข้อมูลเพิ่มเติม](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"ส่วนหัวเรื่องที่กำหนดเอง\",\n    \"edit_presets_in_theme_settings\": \"แก้ไขค่าที่ตั้งไว้ล่วงหน้าใน[การตั้งค่าธีม](/editor?context=theme&category=typography)\",\n    \"enable_filtering_info\": \"ปรับแต่งตัวกรองด้วย[แอป Search & Discovery](https://help.shopify.com/manual/online-store/search-and-discovery/filters)\",\n    \"manage_countries_regions\": \"[จัดการประเทศ/ภูมิภาค](/admin/settings/markets)\",\n    \"manage_languages\": \"[จัดการภาษา](/admin/settings/languages)\",\n    \"transparent_background\": \"โปรดตรวจสอบแต่ละเทมเพลตที่มีการใช้พื้นหลังโปร่งใสเพื่อให้อ่านง่าย\",\n    \"carousel_hover_behavior_not_supported\": \"ไม่รองรับการโฮเวอร์ \\\"แครูเซล\\\" เมื่อเลือกประเภท \\\"แครูเซล\\\" ที่ระดับส่วน\",\n    \"grid_layout_on_mobile\": \"ใช้เลย์เอาต์แบบกริดสำหรับมือถือ\",\n    \"logo_font\": \"ใช้ได้เฉพาะเมื่อไม่ได้เลือกโลโก้\",\n    \"aspect_ratio_adjusted\": \"ปรับเปลี่ยนในบางเลย์เอาต์\",\n    \"custom_liquid\": \"เพิ่มส่วนย่อยของแอปหรือโค้ดอื่นๆ เพื่อสร้างการปรับแต่งขั้นสูง [ดูข้อมูลเพิ่มเติม](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"ใช้สำหรับตัวกรองที่ใช้ รหัสส่วนลด และคำแนะนำในการค้นหา\",\n    \"applies_on_image_only\": \"ใช้กับรูปภาพเท่านั้น\",\n    \"hover_effects\": \"ใช้กับการ์ดสินค้าและคอลเลกชัน\",\n    \"hide_logo_on_home_page_help\": \"โลโก้จะยังคงแสดงอยู่เมื่อส่วนหัวแบบติดหนึบทำงาน\",\n    \"media_type_info\": \"ฟีเจอร์มาจากลิงก์ในเมนูของคุณ\",\n    \"logo_height\": \"มีผลกับโลโก้ส่วนหัวเท่านั้น\",\n    \"actions_display_style\": \"ใช้ไอคอนเสมอบนมือถือ\"\n  },\n  \"categories\": {\n    \"basic\": \"พื้นฐาน\",\n    \"collection\": \"คอลเลกชัน\",\n    \"collection_list\": \"รายการคอลเลกชัน\",\n    \"footer\": \"ส่วนท้าย\",\n    \"forms\": \"ฟอร์ม\",\n    \"header\": \"ส่วนหัว\",\n    \"layout\": \"เลย์เอาต์\",\n    \"links\": \"ลิงก์\",\n    \"product\": \"สินค้า\",\n    \"product_list\": \"คอลเลกชันเด่น\",\n    \"banners\": \"แบนเนอร์\",\n    \"collections\": \"คอลเลกชัน\",\n    \"custom\": \"กำหนดเอง\",\n    \"decorative\": \"ตกแต่ง\",\n    \"products\": \"สินค้า\",\n    \"other_sections\": \"อื่นๆ\",\n    \"storytelling\": \"การบอกเล่าเรื่องราว\",\n    \"text\": \"ข้อความ\"\n  }\n}\n"
  },
  {
    "path": "locales/tr.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Videoyu yükle: {{ description }}\",\n    \"sold_out\": \"Tükendi\",\n    \"email_signup\": {\n      \"label\": \"E-posta\",\n      \"placeholder\": \"E-posta adresi\",\n      \"success\": \"Abone olduğunuz için teşekkür ederiz!\"\n    },\n    \"filter\": \"Filtrele\",\n    \"payment_methods\": \"Ödeme yöntemleri\",\n    \"contact_form\": {\n      \"name\": \"Ad\",\n      \"email\": \"E-posta\",\n      \"phone\": \"Telefon\",\n      \"comment\": \"Yorum\",\n      \"post_success\": \"Bizimle iletişime geçtiğiniz için teşekkür ederiz. Mümkün olan en kısa sürede size dönüş yapacağız.\",\n      \"error_heading\": \"Lütfen aşağıdakileri düzenleyin:\"\n    },\n    \"slider_label\": \"Kaydırıcı\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"3B modeli oynat\",\n    \"play_video\": \"Videoyu oynat\",\n    \"unit_price\": \"Birim fiyatı\",\n    \"country_results_count\": \"{{ count }} sonuç\",\n    \"slideshow_pause\": \"Slayt gösterisini duraklat\",\n    \"slideshow_play\": \"Slayt gösterisini oynat\",\n    \"remove_item\": \"Şunu kaldır: {{ title}}\",\n    \"skip_to_text\": \"İçeriğe atla\",\n    \"skip_to_product_info\": \"Ürün bilgisine atla\",\n    \"skip_to_results_list\": \"Sonuçlar listesine geç\",\n    \"new_window\": \"Yeni bir pencerede açılır.\",\n    \"slideshow_next\": \"Sonraki slayt\",\n    \"slideshow_previous\": \"Önceki slayt\",\n    \"close_dialog\": \"İletişim kutusunu kapat\",\n    \"reset_search\": \"Aramayı sıfırla\",\n    \"search_results_count\": \"\\\"{{ query }}\\\" için {{ count }} arama sonucu bulundu\",\n    \"search_results_no_results\": \"\\\"{{ query }}\\\" için sonuç bulunamadı\",\n    \"filters\": \"Filtreler\",\n    \"account\": \"Hesap\",\n    \"cart\": \"Sepet\",\n    \"cart_count\": \"Sepetteki toplam ürün sayısı\",\n    \"filter_count\": {\n      \"one\": \"{{ count }} filtre uygulandı\",\n      \"other\": \"{{ count }} filtre uygulandı\"\n    },\n    \"menu\": \"Menü\",\n    \"country_region\": \"Ülke/Bölge\",\n    \"slide_status\": \"Slayt {{ index }}/{{ length }}\",\n    \"scroll_to\": \"{{ title }} bölümüne git\",\n    \"loading_product_recommendations\": \"Ürün önerileri yükleniyor\",\n    \"discount\": \"İndirim kodu uygula\",\n    \"discount_menu\": \"İndirim Kodları\",\n    \"discount_applied\": \"Uygulanan indirim kodu: {{ code }}\",\n    \"pause_video\": \"Videoyu duraklat\",\n    \"inventory_status\": \"Envanter durumu\",\n    \"find_country\": \"Ülke bul\",\n    \"localization_region_and_language\": \"Bölge ve dil seçici\",\n    \"decrease_quantity\": \"Adedi azalt\",\n    \"increase_quantity\": \"Adedi artır\",\n    \"quantity\": \"Adet\",\n    \"rating\": \"Bu ürünün puanı 5 üzerinden {{ rating }}\",\n    \"nested_product\": \"{{ parent_title }} için {{ product_title }}\",\n    \"remove\": \"Kaldır\",\n    \"view_pricing_info\": \"Fiyatlandırma bilgilerini görüntüle\",\n    \"open_hotspot\": \"Etkin noktayı aç\",\n    \"slideshow\": \"Slayt gösterisi\",\n    \"header_navigation_label\": \"Birincil\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Sepete ekle\",\n    \"clear_all\": \"Tümünü temizle\",\n    \"remove\": \"Kaldır\",\n    \"view_in_your_space\": \"Kendi alanınızda görüntüleyin\",\n    \"show_filters\": \"Filtrele\",\n    \"clear\": \"Temizle\",\n    \"continue_shopping\": \"Alışverişe devam et\",\n    \"log_in_html\": \"Hesabınız var mı? Daha hızlı ödeme yapmak için <a href=\\\"{{ link }}\\\">oturum açın</a>.\",\n    \"see_items\": {\n      \"one\": \"{{ count }} ürün görüntüle\",\n      \"other\": \"{{ count }} ürün görüntüle\"\n    },\n    \"view_all\": \"Tümünü görüntüle\",\n    \"add\": \"Ekle\",\n    \"choose\": \"Seç\",\n    \"added\": \"Eklendi\",\n    \"show_less\": \"Daha az göster\",\n    \"show_more\": \"Daha fazla göster\",\n    \"close\": \"Kapat\",\n    \"more\": \"Diğer\",\n    \"reset\": \"Sıfırla\",\n    \"zoom\": \"Yakınlaştırma\",\n    \"close_dialog\": \"İletişim kutusunu kapat\",\n    \"back\": \"Geri\",\n    \"log_in\": \"Giriş yapın\",\n    \"log_out\": \"Oturumu kapat\",\n    \"remove_discount\": \"{{ code }} indirimini kaldır\",\n    \"enter_using_password\": \"Parola kullanarak girin\",\n    \"submit\": \"Gönder\",\n    \"enter_password\": \"Parolayı girin\",\n    \"view_store_information\": \"Mağaza bilgilerini görüntüle\",\n    \"apply\": \"Uygula\",\n    \"open_image_in_full_screen\": \"Görseli tam ekranda aç\",\n    \"sign_in_options\": \"Diğer giriş yapma seçenekleri\",\n    \"sign_up\": \"Kaydol\",\n    \"sort\": \"Sırala\",\n    \"show_all_options\": \"Tüm seçenekleri göster\",\n    \"open\": \"Açık\"\n  },\n  \"content\": {\n    \"reviews\": \"değerlendirme\",\n    \"language\": \"Dil\",\n    \"localization_region_and_language\": \"Bölge ve dil\",\n    \"no_results_found\": \"Sonuç bulunamadı\",\n    \"cart_total\": \"Sepet toplamı\",\n    \"your_cart_is_empty\": \"Sepetiniz boş\",\n    \"product_image\": \"Ürün görseli\",\n    \"product_information\": \"Ürün bilgileri\",\n    \"quantity\": \"Adet\",\n    \"product_total\": \"Ürün toplamı\",\n    \"cart_estimated_total\": \"Tahmini toplam\",\n    \"seller_note\": \"Özel talimatlar\",\n    \"cart_subtotal\": \"Alt toplam\",\n    \"discounts\": \"İndirimler\",\n    \"discount\": \"İndirim\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Vergiler ve gümrük vergileri dahil. Ödeme sayfasında hesaplanan indirimler ve <a href=\\\"{{ link }}\\\">kargo</a>.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Vergiler ve gümrük vergileri dahil. Ödeme sayfasında hesaplanan indirimler ve kargo.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Vergiler dahil. Ödeme sayfasında hesaplanan indirimler ve <a href=\\\"{{ link }}\\\">kargo</a>.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Vergiler dahil. Ödeme sayfasında hesaplanan indirimler ve kargo.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Gümrük vergileri dahil. Ödeme sayfasında hesaplanan vergiler, indirimler ve <a href=\\\"{{ link }}\\\">kargo</a>.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Gümrük vergileri dahil. Ödeme sayfasında hesaplanan vergiler, indirimler ve kargo.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Ödeme sayfasında hesaplanan vergiler, indirimler ve <a href=\\\"{{ link }}\\\">kargo</a>.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Ödeme sayfasında hesaplanan vergiler, indirimler ve kargo.\",\n    \"checkout\": \"Ödeme\",\n    \"cart_title\": \"Sepet\",\n    \"price\": \"Fiyat\",\n    \"price_regular\": \"Normal fiyat\",\n    \"price_compare_at\": \"Karşılaştırma fiyatı\",\n    \"price_sale\": \"İndirimli fiyat\",\n    \"duties_and_taxes_included\": \"Vergiler ve gümrük vergileri dahildir.\",\n    \"duties_included\": \"Gümrük vergileri dahildir.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Kargo</a>, ödeme sayfasında hesaplanır.\",\n    \"taxes_included\": \"Vergiler dahildir.\",\n    \"product_badge_sold_out\": \"Tükendi\",\n    \"product_badge_sale\": \"İndirimde\",\n    \"search_input_label\": \"Ara\",\n    \"search_input_placeholder\": \"Ara\",\n    \"search_results\": \"Arama sonuçları\",\n    \"search_results_label\": \"Arama sonuçları\",\n    \"search_results_no_results\": \"\\\"{{ terms }}\\\" için sonuç bulunamadı. Başka bir arama deneyin\",\n    \"search_results_resource_articles\": \"Blog gönderileri\",\n    \"search_results_resource_collections\": \"Koleksiyonlar\",\n    \"search_results_resource_pages\": \"Sayfalar\",\n    \"search_results_resource_products\": \"Ürünler\",\n    \"search_results_resource_queries\": \"Arama önerileri\",\n    \"search_results_view_all\": \"Tümünü görüntüle\",\n    \"search_results_view_all_button\": \"Tümünü görüntüle\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} ürün\",\n      \"other\": \"{{ count }} ürün\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Varsayılan\",\n      \"grid_fieldset\": \"Sütun ızgarası\",\n      \"single_item\": \"Tek\",\n      \"zoom_out\": \"Uzaklaştır\"\n    },\n    \"recently_viewed_products\": \"Son görüntülenen\",\n    \"unavailable\": \"Mevcut değil\",\n    \"collection_placeholder\": \"Koleksiyon başlığı\",\n    \"product_card_placeholder\": \"Ürün başlığı\",\n    \"product_count\": \"Ürün sayısı\",\n    \"item_count\": {\n      \"one\": \"{{ count }} ürün\",\n      \"other\": \"{{ count }} ürün\"\n    },\n    \"errors\": \"Hatalar\",\n    \"price_from\": \"{{ price }} tutarından başlayan fiyatlarla\",\n    \"featured_products\": \"Öne çıkan ürünler\",\n    \"search\": \"Ara\",\n    \"search_results_no_results_check_spelling\": \"\\\"{{ terms }}\\\" için sonuç bulunamadı. Yazım hatası olmadığını doğrulayın veya farklı bir kelime ya da ifade kullanın.\",\n    \"filters\": \"Filtreler\",\n    \"no_products_found\": \"Ürün bulunamadı.\",\n    \"price_filter_html\": \"En yüksek fiyat: {{ price }}\",\n    \"use_fewer_filters_html\": \"Daha az filtre kullanmayı veya <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">tüm filtreleri kaldırmayı</a> deneyin.\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"Devamını oku...\",\n    \"account_title\": \"Hesap\",\n    \"account_title_personalized\": \"Merhaba {{ first_name }}\",\n    \"account_orders\": \"Siparişler\",\n    \"account_profile\": \"Profil\",\n    \"discount_code\": \"İndirim kodu\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Vergiler ve gümrük vergileri dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Vergiler ve gümrük vergileri dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Gümrük vergileri dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Gümrük vergileri dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"pickup_available_at_html\": \"<b>{{ location }}</b> konumunda teslim alım yapılabilir\",\n    \"pickup_available_in\": \"{{ pickup_time }} saatinde teslim alım yapılabilir\",\n    \"pickup_not_available\": \"Şu anda teslim alım yapılamıyor\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Vergiler ve <a href=\\\"{{ link }}\\\">kargo</a> ücreti, ödeme sayfasında hesaplanır.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Vergiler ve Kargo, ödeme sayfasında hesaplanır.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Vergiler dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Vergiler dahil. Kargo, ödeme sayfasında hesaplanır.\",\n    \"wrong_password\": \"Yanlış parola\",\n    \"view_more_details\": \"Daha fazla ayrıntı görüntüle\",\n    \"powered_by\": \"Bu mağaza için destek sağlayan:\",\n    \"store_owner_link_html\": \"Mağaza sahibi misiniz? <a href=\\\"{{ link }}\\\">Buradan oturum açın</a>\",\n    \"shipping_discount_error\": \"Kargo indirimleri, adres eklendikten sonra ödeme sayfasında gösterilir\",\n    \"discount_code_error\": \"Sepetinize indirim kodu uygulanamıyor\",\n    \"inventory_low_stock\": \"Stok düzeyi düşük\",\n    \"inventory_in_stock\": \"Stokta\",\n    \"inventory_out_of_stock\": \"Stokta yok\",\n    \"page_placeholder_title\": \"Sayfa başlığı\",\n    \"page_placeholder_content\": \"İçeriğini görüntülemek istediğiniz sayfayı seçin.\",\n    \"placeholder_image\": \"Yer tutucu görseli\",\n    \"shipping_policy\": \"Kargo, ödeme sayfasında hesaplanır.\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"{{ count }} kaldı\",\n      \"other\": \"{{ count }} kaldı\"\n    },\n    \"recipient_form_send_to\": \"Şuraya gönder:\",\n    \"recipient_form_email_label\": \"Alıcının e-posta adresi\",\n    \"recipient_form_email_label_my_email\": \"E-posta adresim\",\n    \"recipient_form_email_address\": \"Alıcı e-posta adresi\",\n    \"recipient_form_name_label\": \"Alıcı adı (isteğe bağlı)\",\n    \"recipient_form_characters_used\": \"{{ used_chars }}/{{ max_chars }} karakter kullanıldı\",\n    \"recipient_form_send_on\": \"GG.AA.YYYY\",\n    \"recipient_form_send_on_label\": \"Şu tarihte gönder (isteğe bağlı)\",\n    \"recipient_form_message\": \"Mesaj (isteğe bağlı)\",\n    \"recipient_form_fields_visible\": \"Alıcı form alanları artık görünür\",\n    \"recipient_form_fields_hidden\": \"Alıcı form alanları artık gizli\",\n    \"recipient_form_error\": \"Form gönderimi ile ilgili bir hata oluştu\",\n    \"product_custom_property_character_count\": \"{{ used_chars }}/{{ max_chars }} karakter kullanıldı\",\n    \"terms_and_policies\": \"Şartlar ve Politikalar\",\n    \"pagination\": {\n      \"nav_label\": \"Sayfalara ayırma için gezinme\",\n      \"previous\": \"Önceki\",\n      \"next\": \"Sonraki\",\n      \"page\": \"Sayfa {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Hacim bazlı fiyatlandırma kullanılabilir\",\n    \"volume_pricing\": \"Hacim bazlı fiyatlandırma\",\n    \"at_price_each\": \"{{ price }}/adet üzerinden\",\n    \"each\": \"{{ price }}/adet\",\n    \"each_abbreviation\": \"adet\",\n    \"price_at\": \"üzerinden\",\n    \"price_range\": \"Fiyat aralığı\",\n    \"cancel\": \"İptal\",\n    \"product_subtotal\": \"Ürün alt toplamı\",\n    \"quantity_per_item\": \"ürün başına\",\n    \"remove_all\": \"Tümünü kaldır\",\n    \"remove_all_items_confirmation\": \"{{ count }} ürünün tamamı sepetten kaldırılsın mı?\",\n    \"remove_one_item_confirmation\": \"1 ürün sepetten kaldırılsın mı?\",\n    \"total_items\": \"Toplam ürün sayısı\",\n    \"variant\": \"Varyasyon\",\n    \"variant_total\": \"Varyasyon toplamı\",\n    \"view_cart\": \"Sepeti görüntüle\",\n    \"your_cart\": \"Sepetiniz\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 ürün sepete eklendi\",\n      \"other\": \"{{ count }} ürün sepete eklendi\"\n    },\n    \"item_count_cutoff\": \"{{ count }} adetten fazla ürün\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Hediye kartı kodunu online olarak veya QR kodunu mağazada kullanın\",\n      \"title\": \"İşte {{ shop }} için {{ value }} tutarındaki hediye kartı bakiyeniz!\",\n      \"subtext\": \"Hediye kartınız\",\n      \"shop_link\": \"Online mağazayı ziyaret edin\",\n      \"add_to_apple_wallet\": \"Apple Wallet'a ekle\",\n      \"qr_image_alt\": \"QR kodu: Hediye kartını kullanmak için tarayın\",\n      \"copy_code\": \"Hediye kartı kodunu kopyala\",\n      \"expiration_date\": \"Sona erme tarihi: {{ expires_on }}\",\n      \"copy_code_success\": \"Kod başarıyla kopyalandı\",\n      \"expired\": \"Son kullanma tarihi dolmuş\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} yorum\",\n        \"other\": \"{{ count }} yorum\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"E-posta\",\n      \"error\": \"Yorum gönderilemedi, lütfen şunları kontrol edin:\",\n      \"heading\": \"Yorum bırakın\",\n      \"message\": \"Mesaj\",\n      \"moderated\": \"Yorumların yayınlanabilmesi için onaylanması gerektiğini lütfen unutmayın.\",\n      \"name\": \"Ad\",\n      \"post\": \"Yorumu gönder\",\n      \"success_moderated\": \"Yorum gönderildi, onay bekliyor\",\n      \"success\": \"Yorum gönderildi\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"-\"\n  },\n  \"placeholders\": {\n    \"password\": \"Parola\",\n    \"search\": \"Ara\",\n    \"product_title\": \"Ürün başlığı\",\n    \"collection_title\": \"Koleksiyon başlığı\",\n    \"blog_posts\": \"Blog gönderileri\",\n    \"blog_post_title\": \"Başlık\",\n    \"blog_post_author\": \"Yazar\",\n    \"blog_post_date\": \"Tarih\",\n    \"blog_post_description\": \"Blog gönderinizin içeriğinden bir alıntı\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Sepete ekle\",\n      \"adding_to_cart\": \"Ekleniyor...\",\n      \"added_to_cart\": \"Sepete eklendi\",\n      \"add_to_cart_error\": \"Sepete eklenirken hata oluştu\",\n      \"quantity_error_max\": \"Bu ürün için maksimum değer: {{ maximum }}\",\n      \"sold_out\": \"Tükendi\",\n      \"unavailable\": \"Kullanılamıyor\",\n      \"quantity\": \"Adet\",\n      \"quantity_increments\": \"Artış değeri: {{ increment }}\",\n      \"quantity_minimum\": \"Minimum: {{ minimum }}\",\n      \"quantity_maximum\": \"Maksimum: {{ maximum }}\",\n      \"in_cart\": \"sepette\",\n      \"default_title\": \"Varsayılan Başlık\",\n      \"sticky_add_to_cart\": \"Sepete hızlı ekle çubuğu\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/tr.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"Kenarlıklar\",\n    \"collapsible_row\": \"Daraltılabilir satır\",\n    \"custom_section\": \"Özel bölüm\",\n    \"icon\": \"Simge\",\n    \"logo_and_favicon\": \"Logo ve favicon\",\n    \"product_buy_buttons\": \"Satın al düğmeleri\",\n    \"product_description\": \"Açıklama\",\n    \"product_price\": \"Fiyat\",\n    \"slideshow\": \"Slayt gösterisi\",\n    \"typography\": \"Tipografi\",\n    \"video\": \"Video\",\n    \"colors\": \"Renkler\",\n    \"overlapping_blocks\": \"Üst üste binen bloklar\",\n    \"rich_text_section\": \"Zengin metin\",\n    \"product_variant_picker\": \"Varyasyon seçici\",\n    \"slideshow_controls\": \"Slayt gösterisi kontrolleri\",\n    \"size\": \"Boyut\",\n    \"spacing\": \"Boşluk\",\n    \"product_recommendations\": \"Önerilen ürünler\",\n    \"product_media\": \"Ürün medyası\",\n    \"featured_collection\": \"Öne çıkan koleksiyon\",\n    \"add_to_cart\": \"Sepete ekle\",\n    \"email_signup\": \"E-posta kaydı\",\n    \"submit_button\": \"Gönder düğmesi\",\n    \"grid_layout_selector\": \"Izgara düzeni seçici\",\n    \"image\": \"Görsel\",\n    \"list_items\": \"Liste öğeleri\",\n    \"facets\": \"Özellikler\",\n    \"variants\": \"Varyasyonlar\",\n    \"product_cards\": \"Ürün kartları\",\n    \"styles\": \"Stiller\",\n    \"buttons\": \"Düğmeler\",\n    \"inputs\": \"Girişler\",\n    \"primary_button\": \"Birincil düğme\",\n    \"secondary_button\": \"İkincil düğme\",\n    \"popovers_and_modals\": \"Açılır pencereler ve modlar\",\n    \"pull_quote\": \"Alıntı\",\n    \"contact_form\": \"İletişim formu\",\n    \"featured_product\": \"Ürün vurgusu\",\n    \"icons_with_text\": \"Metinli simgeler\",\n    \"marquee\": \"Kayan yazı\",\n    \"products_carousel\": \"Öne çıkan koleksiyon: Dönen ekran\",\n    \"products_grid\": \"Öne çıkan koleksiyon: Izgara\",\n    \"alternating_content_rows\": \"Sıralı satırlar\",\n    \"product_list\": \"Öne çıkan koleksiyon\",\n    \"spacer\": \"Boşluk\",\n    \"accelerated_checkout\": \"Hızlı ödeme\",\n    \"accordion\": \"Akordeon\",\n    \"accordion_row\": \"Akordeon satırı\",\n    \"animations\": \"Animasyonlar\",\n    \"announcement\": \"Duyuru\",\n    \"announcement_bar\": \"Duyuru çubuğu\",\n    \"badges\": \"Rozetler\",\n    \"button\": \"Düğme\",\n    \"cart\": \"Sepet\",\n    \"cart_items\": \"Sepetteki ürünler\",\n    \"cart_products\": \"Sepet ürünleri\",\n    \"cart_title\": \"Sepet\",\n    \"collection\": \"Koleksiyon\",\n    \"collection_card\": \"Koleksiyon kartı\",\n    \"collection_columns\": \"Koleksiyon sütunları\",\n    \"collection_container\": \"Koleksiyon\",\n    \"collection_description\": \"Koleksiyon açıklaması\",\n    \"collection_image\": \"Koleksiyon görseli\",\n    \"collection_info\": \"Koleksiyon bilgileri\",\n    \"collection_list\": \"Koleksiyon listesi\",\n    \"collections\": \"Koleksiyonlar\",\n    \"collections_bento\": \"Koleksiyon listesi: Bento\",\n    \"collections_carousel\": \"Koleksiyon listesi: Dönen ekran\",\n    \"collections_grid\": \"Koleksiyon listesi: Izgara\",\n    \"content\": \"İçerik\",\n    \"content_grid\": \"İçerik ızgarası\",\n    \"details\": \"Ayrıntılar\",\n    \"divider\": \"Ayırıcı\",\n    \"divider_section\": \"Ayırıcı\",\n    \"faq_section\": \"SSS\",\n    \"filters\": \"Filtreleme ve sıralama\",\n    \"follow_on_shop\": \"Shop'ta takip et\",\n    \"footer\": \"Altbilgi\",\n    \"footer_utilities\": \"Altbilgi yardımcı programları\",\n    \"group\": \"Grup\",\n    \"header\": \"Üstbilgi\",\n    \"heading\": \"Başlık\",\n    \"hero\": \"Hero\",\n    \"icons\": \"Simgeler\",\n    \"image_with_text\": \"Metinli görsel\",\n    \"input\": \"Giriş\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"Dergi ızgarası\",\n    \"media\": \"Medya\",\n    \"menu\": \"Menü\",\n    \"mobile_layout\": \"Mobil düzen\",\n    \"payment_icons\": \"Ödeme simgeleri\",\n    \"popup_link\": \"Açılır pencere bağlantısı\",\n    \"predictive_search\": \"Arama açılır penceresi\",\n    \"predictive_search_empty\": \"Tahmini arama boş\",\n    \"price\": \"Fiyat\",\n    \"product\": \"Ürün\",\n    \"product_card\": \"Ürün kartı\",\n    \"product_card_media\": \"Medya\",\n    \"product_card_rendering\": \"Ürün kartı oluşturma\",\n    \"product_grid\": \"Izgara\",\n    \"product_grid_main\": \"Ürün ızgarası\",\n    \"product_image\": \"Ürün görseli\",\n    \"product_information\": \"Ürün bilgileri\",\n    \"product_review_stars\": \"Değerlendirme yıldızları\",\n    \"quantity\": \"Miktar\",\n    \"row\": \"Satır\",\n    \"search\": \"Arama\",\n    \"section\": \"Bölüm\",\n    \"selected_variants\": \"Seçili varyasyonlar\",\n    \"slide\": \"Slayt\",\n    \"social_media_links\": \"Sosyal medya bağlantıları\",\n    \"steps\": \"Adımlar\",\n    \"summary\": \"Özet\",\n    \"swatches\": \"Numune parçalar\",\n    \"testimonials\": \"Müşteri yorumları\",\n    \"text\": \"Metin\",\n    \"title\": \"Başlık\",\n    \"utilities\": \"Yardımcı programlar\",\n    \"video_section\": \"Video\",\n    \"jumbo_text\": \"Jumbo metin\",\n    \"collection_title\": \"Koleksiyon başlığı\",\n    \"view_all_button\": \"Tümünü görüntüle\",\n    \"search_input\": \"Arama girişi\",\n    \"search_results\": \"Arama sonuçları\",\n    \"read_only\": \"Salt okunur\",\n    \"collection_links\": \"Koleksiyon bağlantıları\",\n    \"count\": \"Sayı\",\n    \"custom_liquid\": \"Özel Liquid\",\n    \"blog\": \"Blog\",\n    \"blog_post\": \"Blog gönderisi\",\n    \"blog_posts\": \"Blog gönderileri\",\n    \"caption\": \"Altyazı\",\n    \"collection_card_image\": \"Görsel\",\n    \"collection_links_spotlight\": \"Koleksiyon bağlantıları: Vurgu\",\n    \"collection_links_text\": \"Koleksiyon bağlantıları: Metin\",\n    \"collections_editorial\": \"Koleksiyon listesi: Editoryal\",\n    \"copyright\": \"Telif hakkı\",\n    \"drawers\": \"Çekmeceler\",\n    \"editorial\": \"Editoryal\",\n    \"editorial_jumbo_text\": \"Editoryal: Jumbo metin\",\n    \"hero_marquee\": \"Hero: Kayan yazı\",\n    \"input_fields\": \"Giriş alanları\",\n    \"local_pickup\": \"Mağazadan teslim alım\",\n    \"marquee_section\": \"Kayan yazı\",\n    \"media_with_text\": \"Medyalı metin\",\n    \"page\": \"Sayfa\",\n    \"page_content\": \"İçerik\",\n    \"page_layout\": \"Sayfa düzeni\",\n    \"policy_list\": \"Politika bağlantıları\",\n    \"prices\": \"Fiyatlar\",\n    \"products_editorial\": \"Öne çıkan koleksiyon: Editoryal\",\n    \"social_link\": \"Sosyal medya bağlantısı\",\n    \"split_showcase\": \"Bölünmüş vitrin\",\n    \"variant_pickers\": \"Varyasyon seçiciler\",\n    \"product_title\": \"Ürün başlığı\",\n    \"large_logo\": \"Büyük logo\",\n    \"product_list_button\": \"Tümünü görüntüle düğmesi\",\n    \"product_inventory\": \"Ürün envanteri\",\n    \"pills\": \"Haplar\",\n    \"description\": \"Açıklama\",\n    \"featured_image\": \"Öne çıkan görsel\",\n    \"multicolumn\": \"Çok sütunlu\",\n    \"product_custom_property\": \"Özel talimatlar\",\n    \"hero_bottom_aligned\": \"Hero: Alta hizalı\",\n    \"blog_card\": \"Blog kartı\",\n    \"blog_posts_grid\": \"Blog gönderileri: Izgara\",\n    \"blog_posts_carousel\": \"Blog gönderileri: Dönen ekran\",\n    \"blog_posts_editorial\": \"Blog gönderileri: Editoryal\",\n    \"excerpt\": \"Alıntı\",\n    \"footer_password\": \"Parola altbilgisi\",\n    \"policies_and_links\": \"Politikalar ve bağlantılar\",\n    \"card\": \"Kart\",\n    \"carousel\": \"Karusel\",\n    \"carousel_content\": \"Karusel içeriği\",\n    \"quick_order_list\": \"Hızlı sipariş listesi\",\n    \"column\": \"Sütun\",\n    \"comparison_slider\": \"Karşılaştırma kaydırıcısı\",\n    \"slideshow_full_frame\": \"Slayt gösterisi: Tam çerçeve\",\n    \"slideshow_inset\": \"Slayt gösterisi: İçe yerleşik\",\n    \"image_compare\": \"Görsel karşılaştırma\",\n    \"subheading\": \"Alt başlık\",\n    \"featured_product_information\": \"Öne çıkan ürün\",\n    \"product_hotspots\": \"Ürün hotspot'ları\",\n    \"hotspot_product\": \"Hotspot\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"Katmanlı slayt gösterisi\"\n  },\n  \"settings\": {\n    \"autoplay\": \"Otomatik oynatma\",\n    \"background\": \"Arka plan\",\n    \"border_radius\": \"Köşe yarıçapı\",\n    \"border_width\": \"Kenarlık kalınlığı\",\n    \"borders\": \"Kenarlıklar\",\n    \"bottom_padding\": \"Alt iç boşluk\",\n    \"color\": \"Renk\",\n    \"content_direction\": \"İçerik yönü\",\n    \"content_position\": \"İçerik konumu\",\n    \"cover_image_size\": \"Kapak görseli boyutu\",\n    \"cover_image\": \"Kapak görseli\",\n    \"custom_width\": \"Özel genişlik\",\n    \"enable_video_looping\": \"Video döngüsü\",\n    \"favicon\": \"Favicon\",\n    \"heading\": \"Başlık\",\n    \"icon\": \"Simge\",\n    \"image_icon\": \"Görsel simge\",\n    \"make_section_full_width\": \"Bölümü tam genişlik yap\",\n    \"overlay_opacity\": \"Kaplama opaklığı\",\n    \"padding\": \"İç boşluk\",\n    \"product\": \"Ürün\",\n    \"text\": \"Metin\",\n    \"top_padding\": \"Üst iç boşluk\",\n    \"video\": \"Video\",\n    \"video_alt_text\": \"Alternatif metin\",\n    \"video_loop\": \"Videoyu döngüye al\",\n    \"video_position\": \"Video konumu\",\n    \"width\": \"Genişlik\",\n    \"alignment\": \"Hizalama\",\n    \"button\": \"Düğme\",\n    \"colors\": \"Renkler\",\n    \"content_alignment\": \"İçerik hizalaması\",\n    \"custom_minimum_height\": \"Özel minimum yükseklik\",\n    \"font_family\": \"Yazı tipi ailesi\",\n    \"gap\": \"Boşluk\",\n    \"geometric_translate_y\": \"Geometrik çeviri Y\",\n    \"image\": \"Görsel\",\n    \"image_opacity\": \"Görsel opaklığı\",\n    \"image_position\": \"Görsel konumu\",\n    \"image_ratio\": \"Görsel oranı\",\n    \"label\": \"Etiket\",\n    \"line_height\": \"Satır yüksekliği\",\n    \"link\": \"Bağlantı\",\n    \"layout_gap\": \"Düzen boşluğu\",\n    \"minimum_height\": \"Minimum yükseklik\",\n    \"opacity\": \"Opaklık\",\n    \"primary_color\": \"Bağlantılar\",\n    \"section_width\": \"Bölüm genişliği\",\n    \"size\": \"Boyut\",\n    \"slide_spacing\": \"Slayt boşluğu\",\n    \"slide_width\": \"Slayt genişliği\",\n    \"slideshow_fullwidth\": \"Tam genişlikte slaytlar\",\n    \"style\": \"Stil\",\n    \"text_case\": \"Büyük/küçük harf\",\n    \"z_index\": \"Z-endeksi\",\n    \"limit_content_width\": \"İçerik genişliğini sınırla\",\n    \"color_scheme\": \"Renk şeması\",\n    \"inherit_color_scheme\": \"Renk şemasını devral\",\n    \"product_count\": \"Ürün sayısı\",\n    \"product_type\": \"Ürün türü\",\n    \"content_width\": \"İçerik genişliği\",\n    \"collection\": \"Koleksiyon\",\n    \"enable_sticky_content\": \"Masaüstünde sabit içerik\",\n    \"error_color\": \"Hata\",\n    \"success_color\": \"Başarılı\",\n    \"primary_font\": \"Birincil yazı tipi\",\n    \"secondary_font\": \"İkincil yazı tipi\",\n    \"tertiary_font\": \"Üçüncül yazı tipi\",\n    \"columns\": \"Sütunlar\",\n    \"items_to_show\": \"Gösterilecek öge sayısı\",\n    \"layout\": \"Düzen\",\n    \"layout_type\": \"Tür\",\n    \"show_grid_layout_selector\": \"Izgara düzeni seçiciyi göster\",\n    \"view_more_show\": \"\\\"Daha fazla görüntüle\\\" düğmesini göster\",\n    \"image_gap\": \"Görsel boşluğu\",\n    \"width_desktop\": \"Masaüstü genişliği\",\n    \"width_mobile\": \"Mobil genişliği\",\n    \"border_style\": \"Kenarlık stili\",\n    \"height\": \"Yükseklik\",\n    \"thickness\": \"Kalınlık\",\n    \"stroke\": \"Çizgi kalınlığı\",\n    \"filter_style\": \"Filtre stili\",\n    \"swatches\": \"Numune parçalar\",\n    \"quick_add_colors\": \"Hızlı ekleme renkleri\",\n    \"divider_color\": \"Ayırıcı\",\n    \"border_opacity\": \"Kenarlık opaklığı\",\n    \"hover_background\": \"Üzerine gelindiğindeki arka plan\",\n    \"hover_borders\": \"Üzerine gelindiğindeki kenarlıklar\",\n    \"hover_text\": \"Üzerine gelindiğindeki metin\",\n    \"primary_hover_color\": \"Üzerine gelinen bağlantılar\",\n    \"primary_button_text\": \"Birincil düğme metni\",\n    \"primary_button_background\": \"Birincil düğme arka planı\",\n    \"primary_button_border\": \"Birincil düğme kenarlığı\",\n    \"secondary_button_text\": \"İkincil düğme metni\",\n    \"secondary_button_background\": \"İkincil düğme arka planı\",\n    \"secondary_button_border\": \"İkincil düğme kenarlığı\",\n    \"shadow_color\": \"Gölge\",\n    \"video_autoplay\": \"Otomatik oynatma\",\n    \"video_cover_image\": \"Kapak görseli\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"Kaynak\",\n    \"card_image_height\": \"Ürün görseli yüksekliği\",\n    \"background_color\": \"Arka plan rengi\",\n    \"first_row_media_position\": \"İlk satır medya konumu\",\n    \"hide_padding\": \"İç boşluğu gizle\",\n    \"size_mobile\": \"Mobil boyutu\",\n    \"pixel_size_mobile\": \"Piksel cinsinden boyut\",\n    \"percent_size_mobile\": \"Yüzde cinsinden boyut\",\n    \"unit\": \"Birim\",\n    \"custom_mobile_size\": \"Özel mobil boyutu\",\n    \"fixed_height\": \"Piksel cinsinden yükseklik\",\n    \"fixed_width\": \"Piksel cinsinden genişlik\",\n    \"percent_height\": \"Yüzde cinsinden yükseklik\",\n    \"percent_width\": \"Yüzde cinsinden genişlik\",\n    \"percent_size\": \"Yüzde cinsinden boyut\",\n    \"pixel_size\": \"Piksel cinsinden boyut\",\n    \"logo_font\": \"Logo yazı tipi\",\n    \"accordion\": \"Akordeon\",\n    \"aspect_ratio\": \"En boy oranı\",\n    \"auto_rotate_announcements\": \"Duyuruları otomatik döndür\",\n    \"auto_rotate_slides\": \"Slaytları otomatik döndür\",\n    \"badge_corner_radius\": \"Köşe yarıçapı\",\n    \"badge_position\": \"Kartlardaki konum\",\n    \"badge_sale_color_scheme\": \"İndirim\",\n    \"badge_sold_out_color_scheme\": \"Tükendi\",\n    \"behavior\": \"Görüntüleme türü\",\n    \"blur\": \"Gölge bulanıklığı\",\n    \"border\": \"Kenarlık\",\n    \"bottom\": \"Alt\",\n    \"carousel_on_mobile\": \"Mobilde atlıkarınca\",\n    \"cart_count\": \"Sepetteki ürün sayısı\",\n    \"cart_items\": \"Sepetteki ürünler\",\n    \"cart_related_products\": \"İlgili ürünler\",\n    \"cart_title\": \"Sepet\",\n    \"cart_total\": \"Sepet toplamı\",\n    \"cart_type\": \"Tür\",\n    \"case\": \"Büyük/küçük harf\",\n    \"checkout_buttons\": \"Hızlı ödeme düğmeleri\",\n    \"collection_list\": \"Koleksiyonlar\",\n    \"collection_templates\": \"Koleksiyon şablonları\",\n    \"content\": \"İçerik\",\n    \"corner_radius\": \"Köşe yarıçapı\",\n    \"country_region\": \"Ülke/Bölge\",\n    \"currency_code\": \"Para birimi kodu\",\n    \"custom_height\": \"Özel yükseklik\",\n    \"desktop_height\": \"Masaüstü yüksekliği\",\n    \"direction\": \"Yön\",\n    \"display\": \"Görünüm\",\n    \"divider_thickness\": \"Ayırıcı kalınlığı\",\n    \"divider\": \"Ayırıcı\",\n    \"dividers\": \"Ayırıcılar\",\n    \"drop_shadow\": \"Gölge\",\n    \"empty_state_collection_info\": \"Arama yapılmadan önce gösterilir\",\n    \"empty_state_collection\": \"Boş durum koleksiyonu\",\n    \"enable_filtering\": \"Filtreler\",\n    \"enable_grid_density\": \"Izgara düzeni denetimi\",\n    \"enable_sorting\": \"Sıralama\",\n    \"enable_zoom\": \"Yakınlaştırmayı etkinleştir\",\n    \"equal_columns\": \"Eşit sütunlar\",\n    \"expand_first_group\": \"İlk grubu genişlet\",\n    \"extend_media_to_screen_edge\": \"Medyayı ekran kenarına kadar genişlet\",\n    \"extend_summary\": \"Ekran kenarına kadar genişlet\",\n    \"extra_large\": \"Çok büyük\",\n    \"extra_small\": \"Çok küçük\",\n    \"flag\": \"Bayrak\",\n    \"font_price\": \"Fiyat yazı tipi\",\n    \"font_weight\": \"Yazı tipi kalınlığı\",\n    \"font\": \"Yazı tipi\",\n    \"full_width_first_image\": \"Tam genişlikte ilk görsel\",\n    \"full_width_on_mobile\": \"Mobilde tam genişlik\",\n    \"heading_preset\": \"Başlık ön ayarı\",\n    \"hide_unselected_variant_media\": \"Seçili olmayan varyasyon medyasını gizle\",\n    \"horizontal_gap\": \"Yatay boşluk\",\n    \"horizontal_offset\": \"Gölge yatay ofseti\",\n    \"hover_behavior\": \"Üzerine gelme davranışı\",\n    \"icon_background\": \"Simge arka planı\",\n    \"icons\": \"Simgeler\",\n    \"image_border_radius\": \"Görsel köşe yarıçapı\",\n    \"installments\": \"Taksitler\",\n    \"integrated_button\": \"Entegre düğme\",\n    \"language_selector\": \"Dil seçici\",\n    \"large\": \"Büyük\",\n    \"left_padding\": \"Sol iç boşluk\",\n    \"left\": \"Sol\",\n    \"letter_spacing\": \"Harf aralığı\",\n    \"limit_media_to_screen_height\": \"Ekran yüksekliğiyle sınırla\",\n    \"limit_product_details_width\": \"Ürün ayrıntıları genişliğini sınırla\",\n    \"link_preset\": \"Bağlantı ön ayarı\",\n    \"links\": \"Bağlantılar\",\n    \"logo\": \"Logo\",\n    \"loop\": \"Döngü\",\n    \"make_details_sticky_desktop\": \"Masaüstünde sabitleme\",\n    \"max_width\": \"Maks. genişlik\",\n    \"media_height\": \"Medya yüksekliği\",\n    \"media_overlay\": \"Medya kaplaması\",\n    \"media_position\": \"Medya konumu\",\n    \"media_type\": \"Medya türü\",\n    \"media_width\": \"Medya genişliği\",\n    \"menu\": \"Menü\",\n    \"mobile_columns\": \"Mobil sütunlar\",\n    \"mobile_height\": \"Mobil yüksekliği\",\n    \"mobile_logo_image\": \"Mobil logosu\",\n    \"mobile_quick_add\": \"Mobilde hızlı ekleme\",\n    \"motion_direction\": \"Hareket yönü\",\n    \"motion\": \"Hareket\",\n    \"movement_direction\": \"Hareket yönü\",\n    \"navigation_bar_color_scheme\": \"Gezinme çubuğu renk şeması\",\n    \"navigation_bar\": \"Gezinme çubuğu\",\n    \"navigation\": \"Gezinme\",\n    \"open_new_tab\": \"Bağlantıyı yeni sekmede aç\",\n    \"overlay_color\": \"Kaplama rengi\",\n    \"overlay\": \"Kaplama\",\n    \"padding_bottom\": \"Alt iç boşluk\",\n    \"padding_horizontal\": \"Yatay iç boşluk\",\n    \"padding_top\": \"Üst iç boşluk\",\n    \"page_width\": \"Sayfa genişliği\",\n    \"pagination\": \"Sayfalara ayırma\",\n    \"placement\": \"Yerleşim\",\n    \"position\": \"Konum\",\n    \"preset\": \"Ön ayar\",\n    \"product_cards\": \"Ürün kartları\",\n    \"product_pages\": \"Ürün sayfaları\",\n    \"product_templates\": \"Ürün şablonları\",\n    \"products\": \"Ürünler\",\n    \"quick_add\": \"Hızlı ekleme\",\n    \"ratio\": \"Oran\",\n    \"regular\": \"Normal\",\n    \"review_count\": \"Değerlendirme sayısı\",\n    \"right\": \"Sağ\",\n    \"row_height\": \"Satır yüksekliği\",\n    \"row\": \"Satır\",\n    \"seller_note\": \"Satıcıya not bırakmaya izin ver\",\n    \"shape\": \"Şekil\",\n    \"show_as_accordion\": \"Mobilde akordeon olarak göster\",\n    \"show_sale_price_first\": \"Önce indirimli fiyatı göster\",\n    \"show_tax_info\": \"Vergi bilgileri\",\n    \"show\": \"Göster\",\n    \"small\": \"Küçük\",\n    \"speed\": \"Hız\",\n    \"statement\": \"Ekstre\",\n    \"sticky_header\": \"Sabit üstbilgi\",\n    \"text_hierarchy\": \"Metin hiyerarşisi\",\n    \"text_presets\": \"Metin ön ayarları\",\n    \"title\": \"Başlık\",\n    \"top\": \"Üst\",\n    \"type_preset\": \"Metin ön ayarı\",\n    \"type\": \"Tür\",\n    \"underline_thickness\": \"Alt çizgi kalınlığı\",\n    \"variant_images\": \"Varyasyon görselleri\",\n    \"vendor\": \"Satıcı\",\n    \"vertical_gap\": \"Dikey boşluk\",\n    \"vertical_offset\": \"Gölge dikey ofseti\",\n    \"vertical_on_mobile\": \"Mobilde dikey\",\n    \"view_all_as_last_card\": \"Son kart olarak \\\"Tümünü görüntüle\\\"\",\n    \"weight\": \"Kalınlık\",\n    \"wrap\": \"Kaydır\",\n    \"shadow_opacity\": \"Gölge opaklığı\",\n    \"show_filter_label\": \"Uygulanan filtreler için metin etiketleri\",\n    \"show_swatch_label\": \"Numune parçalar için metin etiketleri\",\n    \"always_stack_buttons\": \"Düğmeleri her zaman alt alta göster\",\n    \"transparent_background\": \"Şeffaf arka plan\",\n    \"gradient_direction\": \"Gradyan yönü\",\n    \"overlay_style\": \"Kaplama stili\",\n    \"custom_mobile_width\": \"Özel mobil genişliği\",\n    \"read_only\": \"Salt okunur\",\n    \"headings\": \"Başlıklar\",\n    \"horizontal_padding\": \"Yatay iç boşluk\",\n    \"show_count\": \"Sayımı göster\",\n    \"vertical_padding\": \"Dikey iç boşluk\",\n    \"visibility\": \"Görünürlük\",\n    \"account\": \"Hesap\",\n    \"align_baseline\": \"Metin taban çizgisini hizala\",\n    \"add_discount_code\": \"Sepette indirimlere izin ver\",\n    \"background_overlay\": \"Arka plan kaplaması\",\n    \"background_media\": \"Arka plan medyası\",\n    \"border_thickness\": \"Kenarlık kalınlığı\",\n    \"bottom_row\": \"Alt satır\",\n    \"button_text_case\": \"Büyük/küçük harf\",\n    \"auto_open_cart_drawer\": \"\\\"Sepete ekle\\\" çekmeceyi otomatik açar\",\n    \"collection_count\": \"Koleksiyon sayısı\",\n    \"custom_liquid\": \"Liquid kodu\",\n    \"default\": \"Varsayılan\",\n    \"default_logo\": \"Varsayılan logo\",\n    \"divider_width\": \"Ayırıcı genişliği\",\n    \"hide_logo_on_home_page\": \"Logoyu ana sayfada gizle\",\n    \"inverse\": \"Ters\",\n    \"inverse_logo\": \"Ters logo\",\n    \"layout_style\": \"Stil\",\n    \"length\": \"Uzunluk\",\n    \"mobile_pagination\": \"Mobil sayfalara ayırma\",\n    \"open_row_by_default\": \"Satırı varsayılan olarak açık tut\",\n    \"page_transition_enabled\": \"Sayfa geçişi\",\n    \"search\": \"Arama\",\n    \"search_icon\": \"Arama simgesi\",\n    \"search_position\": \"Konum\",\n    \"search_row\": \"Satır\",\n    \"show_author\": \"Yazar\",\n    \"show_alignment\": \"Hizalamayı göster\",\n    \"show_date\": \"Tarih\",\n    \"show_pickup_availability\": \"Mağazadan teslim alım durumunu göster\",\n    \"show_search\": \"Aramayı göster\",\n    \"use_inverse_logo\": \"Ters logoyu kullan\",\n    \"product_corner_radius\": \"Ürün köşe yarıçapı\",\n    \"card_corner_radius\": \"Kart köşe yarıçapı\",\n    \"alignment_mobile\": \"Mobil hizalama\",\n    \"animation_repeat\": \"Animasyonu tekrarla\",\n    \"blurred_reflection\": \"Bulanık yansıma\",\n    \"card_hover_effect\": \"Kartın üzerine gelme efekti\",\n    \"card_size\": \"Kart boyutu\",\n    \"collection_title_case\": \"Koleksiyon başlığı büyük/küçük harf\",\n    \"inventory_threshold\": \"Düşük stok eşiği\",\n    \"mobile_card_size\": \"Mobil kart boyutu\",\n    \"page\": \"Sayfa\",\n    \"product_and_card_title_case\": \"Ürün ve kart başlığı büyük/küçük harf\",\n    \"product_title_case\": \"Ürün başlığı büyük/küçük harf\",\n    \"reflection_opacity\": \"Yansıma opaklığı\",\n    \"right_padding\": \"Sağ iç boşluk\",\n    \"show_inventory_quantity\": \"Düşük stok miktarını göster\",\n    \"text_label_case\": \"Metin etiketi büyük/küçük harf\",\n    \"transition_to_main_product\": \"Ürün kartından ürün sayfasına geçiş\",\n    \"media\": \"Medya\",\n    \"product_card_carousel\": \"Atlıkarıncayı göster\",\n    \"show_second_image_on_hover\": \"Üzerine gelindiğinde ikinci görseli göster\",\n    \"media_fit\": \"Medya sığdırma\",\n    \"scroll_speed\": \"Sonraki duyuruya geçme süresi\",\n    \"show_powered_by_shopify\": \"\\\"Shopify tarafından desteklenmektedir\\\" ifadesini göster\",\n    \"seller_note_open_by_default\": \"Satıcıya not alanını varsayılan olarak açık tut\",\n    \"gift_card_form\": \"Hediye kartı formu\",\n    \"add_to_cart_animation\": \"Sepete ekle\",\n    \"custom_link\": \"Özel bağlantı\",\n    \"product_custom_property\": {\n      \"heading\": \"Başlık\",\n      \"description\": \"Açıklama\",\n      \"key\": \"Özellik adı\",\n      \"key_info\": \"Boş bırakılamaz ve her blok için benzersiz olmalıdır. Sepette, ödeme sayfasında ve sipariş bilgilerinde gösterilir.\",\n      \"placeholder_text\": \"Yer tutucu metin\",\n      \"default_heading\": \"Ürününüzü özelleştirin\",\n      \"default_placeholder\": \"Özel talimatlarınızı girin\",\n      \"default_property_key\": \"Özel talimatlar\",\n      \"max_length\": \"Maks. karakter sayısı\",\n      \"required\": \"Sepete eklemek için bu alan zorunludur\",\n      \"input_type\": \"Giriş türü\",\n      \"input_type_text\": \"Metin\",\n      \"input_type_checkbox\": \"Onay kutusu\",\n      \"content_settings\": \"İçerik ayarları\",\n      \"buyers_input\": \"Alıcı girişi\",\n      \"checkbox_label\": \"Onay kutusu etiketi\",\n      \"default_checkbox_label\": \"Hediye paketi eklensin\",\n      \"heading_preset\": \"Başlık\",\n      \"description_preset\": \"Açıklama\",\n      \"input_preset\": \"Giriş\",\n      \"checkbox_preset\": \"Onay kutusu etiketi\"\n    },\n    \"blog\": \"Blog\",\n    \"post_count\": \"Gönderi sayısı\",\n    \"animation\": \"Animasyon\",\n    \"top_level_size\": \"Üst düzey boyutu\",\n    \"empty_cart_button_link\": \"Boş sepet düğmesi bağlantısı\",\n    \"auto_load_products\": \"Kaydırıldığında ürünleri otomatik yükle\",\n    \"products_per_page\": \"Sayfa başına ürün sayısı\",\n    \"custom_mobile_media\": \"Mobilde farklı medya göster\",\n    \"stack_media_on_mobile\": \"Medyayı alt alta göster\",\n    \"media_type_1\": \"Medya türü\",\n    \"media_type_2\": \"Medya 2 türü\",\n    \"full_frame_on_mobile\": \"Mobilde tam genişlik\",\n    \"skus\": \"SKU'lar\",\n    \"variant_per_page\": \"Sayfa başına varyasyon sayısı\",\n    \"image_1\": \"Görsel 1\",\n    \"image_2\": \"Görsel 2\",\n    \"after_image\": \"Sonraki görsel\",\n    \"before_image\": \"Önceki görsel\",\n    \"cs_slider_style\": \"Kaydırıcı stili\",\n    \"cs_slider_color\": \"Kaydırıcı rengi\",\n    \"cs_slider_inner_color\": \"Kaydırıcı iç rengi\",\n    \"text_on_images\": \"Görsel üstü metin\",\n    \"card_height\": \"Kart yüksekliği\",\n    \"submenu_size\": \"Alt menü boyutu\",\n    \"desktop_position\": \"Masaüstü konumu\",\n    \"desktop_pagination\": \"Masaüstü sayfalama\",\n    \"bullseye_color\": \"İç renk\",\n    \"hotspot_color\": \"Hotspot rengi\",\n    \"product_price_typography\": \"Ürün fiyatı tipografisi\",\n    \"product_title_typography\": \"Ürün başlığı tipografisi\",\n    \"x_position\": \"Yatay konum\",\n    \"y_position\": \"Dikey konum\",\n    \"enable_sticky_add_to_cart\": \"Sabit sepete ekle çubuğu\",\n    \"sticky_add_to_cart\": \"Sabit sepete ekle\",\n    \"actions_display_style\": \"Menü stili\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"Ok\",\n    \"banana\": \"Muz\",\n    \"bottle\": \"Şişe\",\n    \"box\": \"Kutu\",\n    \"buttons\": \"Düğmeler\",\n    \"carrot\": \"Havuç\",\n    \"center\": \"Orta\",\n    \"chat_bubble\": \"Sohbet balonu\",\n    \"clipboard\": \"Pano\",\n    \"contain\": \"Sığdır\",\n    \"counter\": \"Sayaç\",\n    \"cover\": \"Kapla\",\n    \"custom\": \"Özel\",\n    \"dairy_free\": \"Süt ürünü içermez\",\n    \"dairy\": \"Süt ürünü\",\n    \"dropdowns\": \"Açılır listeler\",\n    \"dots\": \"Noktalar\",\n    \"dryer\": \"Kurutucu\",\n    \"end\": \"Son\",\n    \"eye\": \"Göz\",\n    \"facebook\": \"Facebook\",\n    \"fire\": \"Ateş\",\n    \"gluten_free\": \"Glutensiz\",\n    \"heart\": \"Kalp\",\n    \"horizontal\": \"Yatay\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"Ütü\",\n    \"large\": \"Büyük\",\n    \"leaf\": \"Yaprak\",\n    \"leather\": \"Deri\",\n    \"lightning_bolt\": \"Şimşek\",\n    \"lipstick\": \"Ruj\",\n    \"lock\": \"Kilit\",\n    \"map_pin\": \"Harita pini\",\n    \"medium\": \"Orta\",\n    \"none\": \"Hiçbiri\",\n    \"numbers\": \"Sayılar\",\n    \"nut_free\": \"Kuruyemiş içermez\",\n    \"pants\": \"Pantolon\",\n    \"paw_print\": \"Pati izi\",\n    \"pepper\": \"Biber\",\n    \"perfume\": \"Parfüm\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"Uçak\",\n    \"plant\": \"Bitki\",\n    \"price_tag\": \"Fiyat etiketi\",\n    \"question_mark\": \"Soru işareti\",\n    \"recycle\": \"Geri dönüşüm\",\n    \"return\": \"İade\",\n    \"ruler\": \"Cetvel\",\n    \"serving_dish\": \"Servis tabağı\",\n    \"shirt\": \"Gömlek\",\n    \"shoe\": \"Ayakkabı\",\n    \"silhouette\": \"Silüet\",\n    \"small\": \"Küçük\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"Kar tanesi\",\n    \"star\": \"Yıldız\",\n    \"start\": \"Başlangıç\",\n    \"stopwatch\": \"Kronometre\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"Kamyon\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"vertical\": \"Dikey\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"Yıkama\",\n    \"auto\": \"Otomatik\",\n    \"default\": \"Varsayılan\",\n    \"fill\": \"Doldur\",\n    \"fit\": \"Sığdır\",\n    \"full\": \"Tam\",\n    \"full_and_page\": \"Tam arka plan, sayfa genişliğinde içerik\",\n    \"heading\": \"Başlık\",\n    \"landscape\": \"Yatay\",\n    \"lg\": \"L\",\n    \"link\": \"Bağlantı\",\n    \"lowercase\": \"küçük harf\",\n    \"m\": \"M\",\n    \"outline\": \"Dış çizgi\",\n    \"page\": \"Sayfa\",\n    \"portrait\": \"Dikey\",\n    \"s\": \"S\",\n    \"sentence\": \"Cümle\",\n    \"solid\": \"Düz\",\n    \"space_between\": \"Aralarında boşluk\",\n    \"square\": \"Kare\",\n    \"uppercase\": \"Büyük harf\",\n    \"circle\": \"Daire\",\n    \"swatches\": \"Numune parçalar\",\n    \"full_and_page_offset_left\": \"Tam arka plan, sayfa genişliğinde içerik, sola kaydırılmış\",\n    \"full_and_page_offset_right\": \"Tam arka plan, sayfa genişliğinde içerik, sağa kaydırılmış\",\n    \"offset_left\": \"Sola kaydır\",\n    \"offset_right\": \"Sağa kaydır\",\n    \"page_center_aligned\": \"Sayfa, ortaya hizalı\",\n    \"page_left_aligned\": \"Sayfa, sola hizalı\",\n    \"page_right_aligned\": \"Sayfa, sağa hizalı\",\n    \"button\": \"Düğme\",\n    \"caption\": \"Altyazı\",\n    \"h1\": \"Başlık 1\",\n    \"h2\": \"Başlık 2\",\n    \"h3\": \"Başlık 3\",\n    \"h4\": \"Başlık 4\",\n    \"h5\": \"Başlık 5\",\n    \"h6\": \"Başlık 6\",\n    \"paragraph\": \"Paragraf\",\n    \"primary\": \"Birincil\",\n    \"secondary\": \"İkincil\",\n    \"tertiary\": \"Üçüncül\",\n    \"chevron_left\": \"Sola bakan şevron\",\n    \"chevron_right\": \"Sağa bakan şevron\",\n    \"diamond\": \"Elmas\",\n    \"grid\": \"Izgara\",\n    \"parallelogram\": \"Paralelkenar\",\n    \"rounded\": \"Yuvarlatılmış\",\n    \"fit_content\": \"Sığdır\",\n    \"pills\": \"Haplar\",\n    \"heavy\": \"Kalın\",\n    \"thin\": \"İnce\",\n    \"drawer\": \"Çekmece\",\n    \"preview\": \"Önizleme\",\n    \"text\": \"Metin\",\n    \"video_uploaded\": \"Yüklenen\",\n    \"video_external_url\": \"Harici URL\",\n    \"up\": \"Yukarı\",\n    \"down\": \"Aşağı\",\n    \"gradient\": \"Gradyan\",\n    \"fixed\": \"Sabit\",\n    \"pixel\": \"Piksel\",\n    \"percent\": \"Yüzde\",\n    \"aspect_ratio\": \"En boy oranı\",\n    \"above_carousel\": \"Dönen ekranın üstünde\",\n    \"all\": \"Tümü\",\n    \"always\": \"Her zaman\",\n    \"arrows_large\": \"Büyük oklar\",\n    \"arrows\": \"Oklar\",\n    \"balance\": \"Denge\",\n    \"bento\": \"Bento\",\n    \"black\": \"Siyah\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"Gövde (Büyük)\",\n    \"body_regular\": \"Gövde (Normal)\",\n    \"body_small\": \"Gövde (Küçük)\",\n    \"bold\": \"Kalın\",\n    \"bottom_left\": \"Sol alt\",\n    \"bottom_right\": \"Sağ alt\",\n    \"bottom\": \"Alt\",\n    \"capitalize\": \"İlk harf büyük\",\n    \"caret\": \"İşaret\",\n    \"carousel\": \"Dönen ekran\",\n    \"check_box\": \"Onay kutusu\",\n    \"chevron_large\": \"Büyük şevronlar\",\n    \"chevron\": \"Şevron\",\n    \"chevrons\": \"Şevronlar\",\n    \"classic\": \"Klasik\",\n    \"collection_images\": \"Koleksiyon görselleri\",\n    \"color\": \"Renk\",\n    \"complementary\": \"Tamamlayıcı\",\n    \"dissolve\": \"Çözünme\",\n    \"dotted\": \"Noktalı\",\n    \"editorial\": \"Editoryal\",\n    \"extra_large\": \"Çok büyük\",\n    \"extra_small\": \"Çok küçük\",\n    \"featured_collections\": \"Öne çıkan koleksiyonlar\",\n    \"featured_products\": \"Öne çıkan ürünler\",\n    \"font_primary\": \"Birincil\",\n    \"font_secondary\": \"İkincil\",\n    \"font_tertiary\": \"Üçüncül\",\n    \"forward\": \"İleri\",\n    \"full_screen\": \"Tam ekran\",\n    \"heading_extra_large\": \"Başlık (Çok büyük)\",\n    \"heading_extra_small\": \"Başlık (Çok küçük)\",\n    \"heading_large\": \"Başlık (Büyük)\",\n    \"heading_regular\": \"Başlık (Normal)\",\n    \"heading_small\": \"Başlık (Küçük)\",\n    \"icon\": \"Simge\",\n    \"image\": \"Görsel\",\n    \"input\": \"Giriş\",\n    \"inside_carousel\": \"Dönen ekranın içinde\",\n    \"inverse_large\": \"Ters büyük\",\n    \"inverse\": \"Ters\",\n    \"large_arrows\": \"Büyük oklar\",\n    \"large_chevrons\": \"Büyük şevronlar\",\n    \"left\": \"Sol\",\n    \"light\": \"İnce\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"Bol\",\n    \"media_first\": \"Önce medya\",\n    \"media_second\": \"İkinci medya\",\n    \"modal\": \"Mod\",\n    \"narrow\": \"Dar\",\n    \"never\": \"Asla\",\n    \"next_to_carousel\": \"Dönen ekranın yanında\",\n    \"normal\": \"Normal\",\n    \"nowrap\": \"Kaydırmasız\",\n    \"off_media\": \"Medya dışında\",\n    \"on_media\": \"Medyanın üstünde\",\n    \"on_scroll_up\": \"Yukarı kaydırıldığında\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"Hap\",\n    \"plus\": \"Artı\",\n    \"pretty\": \"Hoş\",\n    \"price\": \"Fiyat\",\n    \"primary_style\": \"Birincil stil\",\n    \"rectangle\": \"Dikdörtgen\",\n    \"regular\": \"Normal\",\n    \"related\": \"İlgili\",\n    \"reverse\": \"Ters\",\n    \"rich_text\": \"Zengin metin\",\n    \"right\": \"Sağ\",\n    \"secondary_style\": \"İkincil stil\",\n    \"semibold\": \"Yarı kalın\",\n    \"shaded\": \"Gölgeli\",\n    \"show_second_image\": \"İkinci görseli göster\",\n    \"single\": \"Tek\",\n    \"slide_left\": \"Sola kaydır\",\n    \"slide_up\": \"Yukarı kaydır\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"Yığın\",\n    \"text_only\": \"Yalnızca metin\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"Küçük resimler\",\n    \"tight\": \"Dar\",\n    \"top_left\": \"Sol üst\",\n    \"top_right\": \"Sağ üst\",\n    \"top\": \"Üst\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"Altı çizili\",\n    \"video\": \"Video\",\n    \"wide\": \"Geniş\",\n    \"youtube\": \"YouTube\",\n    \"below_image\": \"Görselin altında\",\n    \"hidden\": \"Gizli\",\n    \"on_image\": \"Görselin üstünde\",\n    \"spotlight\": \"Spotlight\",\n    \"accent\": \"Vurgu\",\n    \"body\": \"Gövde\",\n    \"button_primary\": \"Birincil düğme\",\n    \"button_secondary\": \"İkincil düğme\",\n    \"compact\": \"Kompakt\",\n    \"crop_to_fit\": \"Sığdırmak için kırp\",\n    \"hint\": \"İpucu\",\n    \"maintain_aspect_ratio\": \"En boy oranını koru\",\n    \"off\": \"Kapalı\",\n    \"social_bluesky\": \"Sosyal: Bluesky\",\n    \"social_facebook\": \"Sosyal: Facebook\",\n    \"social_instagram\": \"Sosyal: Instagram\",\n    \"social_linkedin\": \"Sosyal: LinkedIn\",\n    \"social_pinterest\": \"Sosyal: Pinterest\",\n    \"social_snapchat\": \"Sosyal: Snapchat\",\n    \"social_spotify\": \"Sosyal: Spotify\",\n    \"social_threads\": \"Sosyal: Threads\",\n    \"social_tiktok\": \"Sosyal: TikTok\",\n    \"social_tumblr\": \"Sosyal: Tumblr\",\n    \"social_twitter\": \"Sosyal: X (Twitter)\",\n    \"social_whatsapp\": \"Sosyal: WhatsApp\",\n    \"social_vimeo\": \"Sosyal: Vimeo\",\n    \"social_youtube\": \"Sosyal: YouTube\",\n    \"standard\": \"Standart\",\n    \"subheading\": \"Alt başlık\",\n    \"blur\": \"Bulanıklaştır\",\n    \"lift\": \"Yükselt\",\n    \"reveal\": \"Ortaya çıkar\",\n    \"scale\": \"Ölçek\",\n    \"subtle_zoom\": \"Yakınlaştırma\",\n    \"with_hints\": \"İpuçlu\",\n    \"below_media\": \"Medyanın altında\",\n    \"full_frame\": \"Tam çerçeve\",\n    \"icons\": \"Simgeler\"\n  },\n  \"content\": {\n    \"background_video\": \"Arka plan videosu\",\n    \"describe_the_video_for\": \"Ekran okuyucu kullanan müşteriler için videoyu açıklayın. [Daha fazla bilgi edinin](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"width_is_automatically_optimized\": \"Genişlik, mobil cihazlar için otomatik olarak optimize edilir.\",\n    \"advanced\": \"Gelişmiş\",\n    \"background_image\": \"Arka plan resmi\",\n    \"block_size\": \"Blok boyutu\",\n    \"borders\": \"Kenarlıklar\",\n    \"section_size\": \"Bölüm boyutu\",\n    \"slideshow_width\": \"Slayt genişliği\",\n    \"typography\": \"Tipografi\",\n    \"complementary_products\": \"Tamamlayıcı ürünlerin, Arama ve Keşfet uygulaması kullanılarak ayarlanması gerekir. [Daha fazla bilgi edinin](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"Sütunlar mobil cihazlar için otomatik olarak optimize edilir\",\n    \"content_width\": \"İçerik genişliği yalnızca bölüm genişliği tam genişlik olarak ayarlandığında geçerlidir.\",\n    \"responsive_font_sizes\": \"Boyutlar tüm ekran boyutları için otomatik olarak ölçeklenir\",\n    \"buttons\": \"Düğmeler\",\n    \"swatches\": \"Numune parçalar\",\n    \"variant_settings\": \"Varyasyon ayarları\",\n    \"background\": \"Arka plan\",\n    \"cards_layout\": \"Kart düzeni\",\n    \"section_layout\": \"Bölüm düzeni\",\n    \"mobile_size\": \"Mobil boyutu\",\n    \"appearance\": \"Görünüm\",\n    \"arrows\": \"Oklar\",\n    \"body_size\": \"Gövde metni boyutu\",\n    \"bottom_row_appearance\": \"Alt satır görünümü\",\n    \"carousel_navigation\": \"Dönen ekran gezinmesi\",\n    \"carousel_pagination\": \"Dönen ekran sayfalara ayırma\",\n    \"copyright\": \"Telif hakkı\",\n    \"edit_logo_in_theme_settings\": \"Logoyu [tema ayarlarından](/editor?context=theme&category=logo%20and%20favicon) düzenleyin\",\n    \"edit_price_in_theme_settings\": \"Fiyat biçimlendirmesini [tema ayarlarından](/editor?context=theme&category=currency%20code) düzenleyin\",\n    \"edit_variants_in_theme_settings\": \"Varyasyon stilini [tema ayarlarından](/editor?context=theme&category=variants) düzenleyin\",\n    \"email_signups_create_customer_profiles\": \"Kaydolanlar [müşteri profillerine](https://help.shopify.com/manual/customers) eklenir\",\n    \"follow_on_shop_eligiblity\": \"Düğmenin gösterilmesi için Shop kanalının yüklü ve Shop Pay'in etkinleştirilmiş olması gerekir. [Daha fazla bilgi edinin](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"Yazı Tipleri\",\n    \"grid\": \"Izgara\",\n    \"heading_size\": \"Başlık boyutu\",\n    \"image\": \"Görsel\",\n    \"input\": \"Giriş\",\n    \"layout\": \"Düzen\",\n    \"link\": \"Bağlantı\",\n    \"link_padding\": \"Bağlantı iç boşluğu\",\n    \"localization\": \"Yerelleştirme\",\n    \"logo\": \"Logo\",\n    \"margin\": \"Dış boşluk\",\n    \"media\": \"Medya\",\n    \"media_1\": \"Medya 1\",\n    \"media_2\": \"Medya 2\",\n    \"menu\": \"Menü\",\n    \"mobile_layout\": \"Mobil düzen\",\n    \"padding\": \"İç boşluk\",\n    \"padding_desktop\": \"Masaüstü iç boşluğu\",\n    \"paragraph\": \"Paragraf\",\n    \"policies\": \"Politikalar\",\n    \"popup\": \"Açılır pencere\",\n    \"search\": \"Arama\",\n    \"size\": \"Boyut\",\n    \"social_media\": \"Sosyal medya\",\n    \"submit_button\": \"Gönder düğmesi\",\n    \"text_presets\": \"Metin ön ayarları\",\n    \"transparent_background\": \"Şeffaf arka plan\",\n    \"typography_primary\": \"Birincil tipografi\",\n    \"typography_secondary\": \"İkincil tipografi\",\n    \"typography_tertiary\": \"Üçüncül tipografi\",\n    \"mobile_width\": \"Mobil genişliği\",\n    \"width\": \"Genişlik\",\n    \"carousel\": \"Dönen ekran\",\n    \"colors\": \"Renkler\",\n    \"collection_page\": \"Koleksiyon sayfası\",\n    \"customer_account\": \"Müşteri hesabı\",\n    \"edit_empty_state_collection_in_theme_settings\": \"Boş durum koleksiyonunu [tema ayarlarından](/editor?context=theme&category=search) düzenleyin\",\n    \"home_page\": \"Ana sayfa\",\n    \"images\": \"Görseller\",\n    \"inverse_logo_info\": \"Şeffaf üstbilgi arka planı Ters olarak ayarlandığında kullanılır\",\n    \"manage_customer_accounts\": \"Müşteri hesabı ayarlarından [görünürlüğü yönetin](/admin/settings/customer_accounts). Eski hesaplar desteklenmez.\",\n    \"manage_policies\": \"[Politikaları yönetin](/admin/settings/legal)\",\n    \"product_page\": \"Ürün sayfası\",\n    \"text\": \"Metin\",\n    \"thumbnails\": \"Küçük resimler\",\n    \"visibility\": \"Görünürlük\",\n    \"visible_if_collection_has_more_products\": \"Koleksiyonda gösterilenden daha fazla ürün varsa görünür\",\n    \"grid_layout\": \"Izgara düzeni\",\n    \"app_required_for_ratings\": \"Ürün derecelendirmeleri için bir uygulama gerekir. [Daha fazla bilgi edinin](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"Simge\",\n    \"manage_store_name\": \"[Mağaza adını yönetin](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"Üst bölümdeki koleksiyonu görüntüler\",\n    \"resource_reference_collection_card_image\": \"Üst koleksiyondaki görseli görüntüler\",\n    \"resource_reference_collection_title\": \"Üst koleksiyondaki başlığı görüntüler\",\n    \"resource_reference_product\": \"Üst ürüne otomatik olarak bağlanır\",\n    \"resource_reference_product_card\": \"Üst bölümdeki ürünü görüntüler\",\n    \"resource_reference_product_inventory\": \"Üst üründeki envanteri görüntüler\",\n    \"resource_reference_product_price\": \"Üst üründeki fiyatı görüntüler\",\n    \"resource_reference_product_recommendations\": \"Üst ürüne göre önerileri görüntüler\",\n    \"resource_reference_product_review\": \"Üst üründeki değerlendirmeleri görüntüler\",\n    \"resource_reference_product_swatches\": \"Üst üründeki numune parçaları görüntüler\",\n    \"resource_reference_product_title\": \"Üst üründeki başlığı görüntüler\",\n    \"resource_reference_product_variant_picker\": \"Üst üründeki varyasyonları görüntüler\",\n    \"resource_reference_product_media\": \"Üst üründeki medyayı görüntüler\",\n    \"product_media\": \"Ürün medyası\",\n    \"section_link\": \"Bölüm bağlantısı\",\n    \"gift_card_form_description\": \"Müşteriler, kişisel bir mesajla alıcının e-posta adresine hediye kartları gönderebilir. [Daha fazla bilgi edinin](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"Başlık\",\n    \"resource_reference_product_custom_property\": \"Bu sipariş satır öğesine eklenecek ve daha sonra sipariş ayrıntılarında görünecek özel bilgileri toplamak için kişiselleştirilebilir giriş alanları ekleyin.\",\n    \"block_link\": \"Blok bağlantısı\",\n    \"submenu_feature\": \"Alt menü özelliği\",\n    \"cart_features\": \"Sepet özellikleri\",\n    \"email_signup\": \"E-posta kaydı\",\n    \"mobile_media\": \"Mobil medya\",\n    \"mobile_media_2\": \"Mobil medya 2\",\n    \"navigation\": \"Gezinme\",\n    \"popover\": \"Açılır pencere\",\n    \"popover_position\": \"Açılır pencere konumu\",\n    \"resource_reference_product_sku\": \"Ana üründeki SKU'yu görüntüler\",\n    \"content_layout\": \"İçerik düzeni\",\n    \"mobile_media_1\": \"Mobil medya 1\",\n    \"utilities\": \"Araçlar\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>Markanızla ilgili bilgileri müşterilerinizle paylaşın. Bir ürünü açıklayın, duyurular yapın veya mağazanıza gelen müşterileri karşılayın.</p>\",\n    \"bestseller_h2\": \"<h2>Çok satanlar</h2>\",\n    \"bestseller_h3\": \"<h3>Çok satanlar</h3>\",\n    \"bestseller\": \"<p>Çok satan</p>\",\n    \"build_better\": \"<p>Daha iyisini yapmaya inanıyoruz</p>\",\n    \"contact_us\": \"<h2>Bize ulaşın</h2>\",\n    \"discover_bestsellers\": \"<p>İşlevsellik ve stili mükemmel bir şekilde harmanlayarak müşterilerimizin kalbini fetheden çok satanları keşfedin.</p>\",\n    \"everythings_starts_with_why\": \"<p>Yaptığımız her şey &quot;neden&quot; sorusuyla başlar</p>\",\n    \"explore_latest_products\": \"<p>En yeni ürünlerimizi keşfedin.</p>\",\n    \"faq\": \"<h3>Sıkça sorulan sorular</h3>\",\n    \"first_to_know\": \"<p>Yeni koleksiyonlardan ve özel tekliflerden ilk siz haberdar olun. </p>\",\n    \"free_returns\": \"<p>30 gün içinde ücretsiz iade</p>\",\n    \"free_shipping_over\": \"<p>50 $ üzerindeki alışverişlerde ücretsiz kargo</p>\",\n    \"goal_for_every_customer\": \"<p>Amacımız, her müşterinin satın alımından tamamen memnun kalmasıdır. Durum böyle değilse bize bildirin. Sorunu çözmek için elimizden geleni yaparız.</p>\",\n    \"home_to_shirts\": \"<p>Ana Sayfa → Gömlekler</p>\",\n    \"intentional_design\": \"<h2>Amaca yönelik tasarım</h2>\",\n    \"introducing_h2\": \"<h2><em>Karşınızda</em></h2>\",\n    \"latest_products\": \"<p>Sezona özel olarak üretilen en yeni ürünlerimizle tanışın. Tükenmeden favorilerinizi satın alın!</p>\",\n    \"made_local_and_global\": \"<p>Ürünlerimiz hem yerel hem de küresel olarak üretilmektedir. Ürünlerimizin yüksek kaliteli ve uygun fiyatlı olmasını sağlamak için üretim ortaklarımızı özenle seçiyoruz.</p>\",\n    \"made_with_care_h2\": \"<h2>Özenle üretildi</h2>\",\n    \"made_with_care_extended\": \"<p>Özenle üretilen ve müşterilerimiz tarafından koşulsuzca sevilen bu özel çok satan ürün, tüm beklentileri aşıyor.</p>\",\n    \"made_with_care\": \"<p>Özenle üretildi ve müşterilerimiz tarafından koşulsuzca sevildi.</p>\",\n    \"make_things_better_extended\": \"<p>Daha iyi çalışan ve daha uzun ömürlü ürünler üretiyoruz. Ürünlerimiz, sade tasarımları ve kaliteli malzemeleriyle gerçek sorunları çözüyor.</p>\",\n    \"make_things_better\": \"<p>Daha iyi çalışan ve daha uzun ömürlü ürünler üretiyoruz.</p>\",\n    \"may_also_like\": \"<h4>Bunları da beğenebilirsiniz</h4>\",\n    \"new_arrivals_h1\": \"<h1>Yeni gelenler</h1>\",\n    \"new_arrivals_h2\": \"<h2>Yeni gelenler</h2>\",\n    \"new_arrivals_h3\": \"<h3>Yeni gelenler</h3>\",\n    \"product_launch\": \"<p>En son ürün lansmanımızın perde arkasına bir göz atın.</p>\",\n    \"product_story\": \"<p>Her ürünün temelinde, kalite ve yenilik tutkumuzla şekillenen benzersiz bir hikaye yatar. Her bir ürün, günlük yaşamınızı güzelleştirir ve keyif verir.</p>\",\n    \"real_people\": \"<p>Harika ürünler üreten gerçek insanlar</p>\",\n    \"related_product\": \"<h3>İlgili ürünler</h3>\",\n    \"return_policy\": \"<h2>İade politikası nedir?</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 Değerlendirme</p>\",\n    \"shipping_based_on_location\": \"<p>Kargo ücreti, konumunuza ve siparişinizdeki ürünlere göre hesaplanır. Kargo ücretini her zaman satın alımdan önce öğrenirsiniz.</p>\",\n    \"shop_by_collection\": \"<h3>Koleksiyona göre alışveriş yapın</h3>\",\n    \"signature_products\": \"<h2>İmza ürünümüz</h2>\",\n    \"styled_with\": \"<h3>Kombin önerileri</h3>\",\n    \"subscribe\": \"<h2>E-postalarımıza abone olun</h2>\",\n    \"team_with_goal\": \"<h2>Hedefi olan bir ekip</h2>\",\n    \"unable_to_accept_returns\": \"<p>Belirli ürünlerde iade kabul edemiyoruz. Bu ürünler, satın alımdan önce dikkatlice işaretlenir.</p>\",\n    \"work_quickly_to_ship\": \"<p>Siparişinizi en kısa sürede göndermek için hızla çalışacağız. Siparişiniz gönderildikten sonra daha fazla bilgi içeren bir e-posta alacaksınız. Teslimat süreleri bulunduğunuz yere göre değişiklik gösterir.</p>\",\n    \"join_our_email_list\": \"<h2>E-posta listemize katılın</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>Özel fırsatlardan ve yeni ürünlere erken erişimden yararlanın.</p>\",\n    \"artistry_in_action\": \"<p>İş başındaki ustalık </p>\",\n    \"authentic_materials\": \"<p>Özgün malzemelerden taviz yok </p>\",\n    \"bold_style_recognizable\": \"<p>Her yerde tanınan iddialı bir stil</p>\",\n    \"discover_elevated_design\": \"<p>Seçkin tasarımı keşfedin </p>\",\n    \"expert_construction_finish\": \"<p>Uzman işçilik ve kusursuz bir son dokunuş</p>\",\n    \"made_to_last\": \"<p>Uzun ömürlü </p>\",\n    \"pieces_better_with_time\": \"<p>Zamanla ve kullanıldıkça güzelleşen parçalar </p>\",\n    \"quality_you_can_feel\": \"<h2>Hissedebileceğiniz kalite</h2>\",\n    \"uncompromising_standards\": \"<p>Tavizsiz standartlar </p>\",\n    \"featured_collection_h2\": \"<h2>Öne çıkan koleksiyon</h2>\",\n    \"shop_collection\": \"<p>Stil ve kaliteyi bir araya getiren, özenle seçilmiş favorilerden oluşan koleksiyonumuzu keşfedin.</p>\"\n  },\n  \"text_defaults\": {\n    \"collapsible_row\": \"Daraltılabilir satır\",\n    \"button_label\": \"Hemen alışveriş yap\",\n    \"heading\": \"Başlık\",\n    \"email_signup_button_label\": \"Abone ol\",\n    \"accordion_heading\": \"Akordeon başlığı\",\n    \"contact_form_button_label\": \"Gönder\",\n    \"popup_link\": \"Açılır pencere bağlantısı\",\n    \"sign_up\": \"Kaydol\",\n    \"welcome_to_our_store\": \"Mağazamıza hoş geldiniz\",\n    \"be_bold\": \"Cesur ol.\",\n    \"shop_our_latest_arrivals\": \"En yeni ürünlerimizi inceleyin.\",\n    \"are_purchases_final_sale\": \"Satın alımlardan herhangi biri için kesin satış uygulanıyor mu?\",\n    \"care_instructions\": \"Bakım talimatları\",\n    \"cart\": \"Sepet\",\n    \"discover_collection\": \"Koleksiyonu keşfet\",\n    \"fit\": \"kalıp\",\n    \"how_much_for_shipping\": \"Kargo ücreti ne kadar?\",\n    \"learn_more\": \"Daha fazla bilgi edinin\",\n    \"manufacturing\": \"Üretim\",\n    \"materials\": \"Malzemeler\",\n    \"return_policy\": \"İade politikası\",\n    \"shipping\": \"Kargo\",\n    \"shop_now_button_label\": \"Hemen alışveriş yap\",\n    \"sign_up_button_label\": \"Kaydol\",\n    \"submit_button_label\": \"Gönder\",\n    \"up_the_ante\": \"Meydan\\nOku\",\n    \"view_all_button_label\": \"Tümünü görüntüle\",\n    \"what_is_return_policy\": \"İade politikası nedir?\",\n    \"when_will_order_arrive\": \"Siparişimi ne zaman teslim alırım?\",\n    \"where_are_products_made\": \"Ürünleriniz nerede üretiliyor?\",\n    \"trending_now\": \"Şu An Trend Olanlar\",\n    \"shop_the_look\": \"Görüntüleneni satın al\",\n    \"bestsellers\": \"Çok satanlar\",\n    \"featured_collection\": \"Öne çıkan koleksiyon\",\n    \"new_arrivals\": \"Yeni gelenler\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"Yardımcı teknoloji kullanıcıları için videoyu açıklayın\",\n    \"video_autoplay\": \"Videolar varsayılan olarak sessize alınır\",\n    \"video_external\": \"Bir YouTube veya Vimeo URL'si kullanın\",\n    \"carousel_layout_on_mobile\": \"Mobilde her zaman karusel kullanılır\",\n    \"carousel_hover_behavior_not_supported\": \"Bölüm düzeyinde \\\"Dönen Ekran\\\" türü seçildiğinde \\\"Dönen Ekran\\\" üzerine gelme efekti desteklenmez\",\n    \"grid_layout_on_mobile\": \"Mobil cihazlar için ızgara düzeni kullanılır\",\n    \"logo_font\": \"Yalnızca logo seçilmediğinde geçerlidir\",\n    \"checkout_buttons\": \"Alıcıların daha hızlı ödeme yapmasını sağlar ve dönüşümü artırabilir. [Daha fazla bilgi edinin](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"Özel başlık\",\n    \"edit_presets_in_theme_settings\": \"Ön ayarları [tema ayarlarından](/editor?context=theme&category=typography) düzenleyin\",\n    \"enable_filtering_info\": \"Filtreleri [Arama ve Keşfet uygulamasıyla](https://help.shopify.com/manual/online-store/search-and-discovery/filters) özelleştirin\",\n    \"manage_countries_regions\": \"[Ülkeleri/bölgeleri yönetin](/admin/settings/markets)\",\n    \"manage_languages\": \"[Dilleri yönetin](/admin/settings/languages)\",\n    \"transparent_background\": \"Okunabilirlik için şeffaf arka planın uygulandığı her şablonu inceleyin\",\n    \"aspect_ratio_adjusted\": \"Bazı düzenlerde ayarlanır\",\n    \"custom_liquid\": \"Gelişmiş kişiselleştirmeler oluşturmak için uygulama parçacıkları veya başka bir kod ekleyin. [Daha fazla bilgi edinin](https://shopify.dev/docs/api/liquid)\",\n    \"applies_on_image_only\": \"Yalnızca görseller için geçerlidir\",\n    \"hover_effects\": \"Ürün ve koleksiyon kartları için geçerlidir\",\n    \"pills_usage\": \"Uygulanan filtreler, indirim kodları ve arama önerileri için kullanılır\",\n    \"hide_logo_on_home_page_help\": \"Yapışkan üstbilgi etkinken logo görünür kalır\",\n    \"media_type_info\": \"Özellikler, menü bağlantılarınız kullanılarak oluşturulur\",\n    \"logo_height\": \"Yalnızca üstbilgi logosunu etkiler\",\n    \"actions_display_style\": \"Mobilde her zaman simgeler kullanılır\"\n  },\n  \"categories\": {\n    \"product_list\": \"Öne çıkan koleksiyon\",\n    \"basic\": \"Temel\",\n    \"collection\": \"Koleksiyon\",\n    \"collection_list\": \"Koleksiyon listesi\",\n    \"footer\": \"Altbilgi\",\n    \"forms\": \"Formlar\",\n    \"header\": \"Üstbilgi\",\n    \"layout\": \"Düzen\",\n    \"links\": \"Bağlantılar\",\n    \"product\": \"Ürün\",\n    \"banners\": \"Banner'lar\",\n    \"collections\": \"Koleksiyonlar\",\n    \"custom\": \"Özel\",\n    \"decorative\": \"Dekoratif\",\n    \"products\": \"Ürünler\",\n    \"other_sections\": \"Diğer\",\n    \"storytelling\": \"Hikaye anlatımı\",\n    \"text\": \"Metin\"\n  }\n}\n"
  },
  {
    "path": "locales/vi.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"Tải video: {{ description }}\",\n    \"sold_out\": \"Hết hàng\",\n    \"email_signup\": {\n      \"label\": \"Email\",\n      \"placeholder\": \"Địa chỉ email\",\n      \"success\": \"Cảm ơn bạn đã đăng ký!\"\n    },\n    \"filter\": \"Bộ lọc\",\n    \"payment_methods\": \"Phương thức thanh toán\",\n    \"contact_form\": {\n      \"name\": \"Tên\",\n      \"email\": \"Email\",\n      \"phone\": \"Điện thoại\",\n      \"comment\": \"Nhận xét\",\n      \"post_success\": \"Cảm ơn bạn đã liên hệ với chúng tôi. Chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.\",\n      \"error_heading\": \"Vui lòng điều chỉnh các mục sau:\"\n    },\n    \"slider_label\": \"Thanh trượt\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"Phát mô hình 3D\",\n    \"play_video\": \"Phát video\",\n    \"unit_price\": \"Đơn giá\",\n    \"country_results_count\": \"{{ count }} kết quả\",\n    \"slideshow_pause\": \"Tạm dừng bản trình chiếu\",\n    \"slideshow_play\": \"Phát bản trình chiếu\",\n    \"remove_item\": \"Xóa {{ title}}\",\n    \"skip_to_text\": \"Chuyển đến nội dung\",\n    \"skip_to_product_info\": \"Chuyển đến thông tin sản phẩm\",\n    \"skip_to_results_list\": \"Chuyển đến danh sách kết quả\",\n    \"new_window\": \"Mở trong cửa sổ mới.\",\n    \"close_dialog\": \"Đóng hộp thoại\",\n    \"reset_search\": \"Đặt lại tìm kiếm\",\n    \"search_results_count\": \"Đã tìm thấy {{ count }} kết quả cho \\\"{{ query }}\\\"\",\n    \"search_results_no_results\": \"Không tìm thấy kết quả cho \\\"{{ query }}\\\"\",\n    \"slideshow_next\": \"Trang chiếu sau\",\n    \"slideshow_previous\": \"Trang chiếu trước\",\n    \"filters\": \"Bộ lọc\",\n    \"filter_count\": {\n      \"one\": \"Đã áp dụng {{ count }} bộ lọc\",\n      \"other\": \"Đã áp dụng {{ count }} bộ lọc\"\n    },\n    \"account\": \"Tài khoản\",\n    \"cart\": \"Giỏ hàng\",\n    \"cart_count\": \"Tổng mặt hàng trong giỏ hàng\",\n    \"menu\": \"Menu\",\n    \"country_region\": \"Quốc gia/Khu vực\",\n    \"slide_status\": \"Trang chiếu {{ index }}/{{ length }}\",\n    \"scroll_to\": \"Cuộn đến {{ title }}\",\n    \"loading_product_recommendations\": \"Đang tải đề xuất sản phẩm\",\n    \"discount\": \"Áp dụng một mã giảm giá\",\n    \"discount_applied\": \"Đã áp dụng mã giảm giá: {{ code }}\",\n    \"inventory_status\": \"Trạng thái hàng trong kho\",\n    \"pause_video\": \"Tạm dừng video\",\n    \"find_country\": \"Tìm quốc gia\",\n    \"localization_region_and_language\": \"Bộ chọn vùng và ngôn ngữ\",\n    \"decrease_quantity\": \"Giảm số lượng\",\n    \"increase_quantity\": \"Tăng số lượng\",\n    \"rating\": \"Sản phẩm này được đánh giá {{ rating }}/5\",\n    \"quantity\": \"Số lượng\",\n    \"nested_product\": \"{{ product_title }} cho {{ parent_title }}\",\n    \"discount_menu\": \"Mã giảm giá\",\n    \"remove\": \"Xóa\",\n    \"view_pricing_info\": \"Xem thông tin về giá\",\n    \"open_hotspot\": \"Mở điểm phát sóng\",\n    \"slideshow\": \"Bản trình chiếu\",\n    \"header_navigation_label\": \"Chính\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"Thêm vào giỏ hàng\",\n    \"clear_all\": \"Xóa tất cả\",\n    \"remove\": \"Xóa\",\n    \"view_in_your_space\": \"Xem tại không gian của bạn\",\n    \"show_filters\": \"Bộ lọc\",\n    \"clear\": \"Xóa\",\n    \"continue_shopping\": \"Tiếp tục mua sắm\",\n    \"log_in_html\": \"Bạn đã có tài khoản? <a href=\\\"{{ link }}\\\">Đăng nhập</a> để thanh toán nhanh hơn.\",\n    \"see_items\": {\n      \"one\": \"Xem {{ count }} mặt hàng\",\n      \"other\": \"Xem {{ count }} mặt hàng\"\n    },\n    \"view_all\": \"Xem tất cả\",\n    \"add\": \"Thêm\",\n    \"choose\": \"Chọn\",\n    \"added\": \"Đã thêm\",\n    \"show_less\": \"Ẩn bớt\",\n    \"show_more\": \"Hiển thị thêm\",\n    \"close\": \"Đóng\",\n    \"more\": \"Thêm\",\n    \"reset\": \"Đặt lại\",\n    \"zoom\": \"Thu phóng\",\n    \"close_dialog\": \"Đóng hộp thoại\",\n    \"back\": \"Quay lại\",\n    \"log_in\": \"Đăng nhập\",\n    \"log_out\": \"Đăng xuất\",\n    \"remove_discount\": \"Xóa mã giảm giá {{ code }}\",\n    \"enter_using_password\": \"Vào bằng mật khẩu\",\n    \"submit\": \"Gửi\",\n    \"enter_password\": \"Nhập mật khẩu\",\n    \"view_store_information\": \"Xem thông tin cửa hàng\",\n    \"apply\": \"Áp dụng\",\n    \"sign_in_options\": \"Các tùy chọn đăng nhập khác\",\n    \"sign_up\": \"Đăng ký\",\n    \"open_image_in_full_screen\": \"Mở hình ảnh ở chế độ toàn màn hình\",\n    \"sort\": \"Sắp xếp\",\n    \"show_all_options\": \"Hiển thị tất cả tùy chọn\",\n    \"open\": \"Mở\"\n  },\n  \"content\": {\n    \"reviews\": \"đánh giá\",\n    \"language\": \"Ngôn ngữ\",\n    \"localization_region_and_language\": \"Khu vực và ngôn ngữ\",\n    \"no_results_found\": \"Không tìm thấy kết quả nào\",\n    \"cart_total\": \"Tổng số tiền trong giỏ hàng\",\n    \"your_cart_is_empty\": \"Giỏ hàng của bạn đang trống\",\n    \"product_image\": \"Hình ảnh sản phẩm\",\n    \"product_information\": \"Thông tin sản phẩm\",\n    \"quantity\": \"Số lượng\",\n    \"product_total\": \"Tổng sản phẩm\",\n    \"cart_estimated_total\": \"Tổng số tiền ước tính\",\n    \"seller_note\": \"Hướng dẫn đặc biệt\",\n    \"cart_subtotal\": \"Tổng phụ\",\n    \"discounts\": \"Giảm giá\",\n    \"discount\": \"Giảm giá\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"Đã bao gồm thuế và thuế nhập khẩu. Ưu đãi giảm giá và <a href=\\\"{{ link }}\\\">phí vận chuyển</a> được tính khi thanh toán.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"Đã bao gồm thuế và thuế nhập khẩu. Ưu đãi giảm giá và phí vận chuyển được tính khi thanh toán.\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"Đã bao gồm thuế. Ưu đãi giảm giá và <a href=\\\"{{ link }}\\\">phí vận chuyển</a> được tính khi thanh toán.\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"Đã bao gồm thuế. Ưu đãi giảm giá và phí vận chuyển được tính khi thanh toán.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Đã bao gồm thuế nhập khẩu. Thuế, ưu đãi giảm giá và <a href=\\\"{{ link }}\\\">phí vận chuyển</a> được tính khi thanh toán.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"Đã bao gồm thuế nhập khẩu. Thuế, ưu đãi giảm giá và phí vận chuyển được tính khi thanh toán.\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"Thuế, ưu đãi giảm giá và <a href=\\\"{{ link }}\\\">phí vận chuyển</a> được tính khi thanh toán.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"Thuế, ưu đãi giảm giá và phí vận chuyển được tính khi thanh toán.\",\n    \"checkout\": \"Thanh toán\",\n    \"cart_title\": \"Giỏ hàng\",\n    \"price\": \"Giá\",\n    \"price_regular\": \"Giá thông thường\",\n    \"price_compare_at\": \"Giá gốc\",\n    \"price_sale\": \"Giá ưu đãi\",\n    \"duties_and_taxes_included\": \"Đã bao gồm thuế và thuế nhập khẩu.\",\n    \"duties_included\": \"Đã bao gồm thuế nhập khẩu.\",\n    \"shipping_policy_html\": \"<a href=\\\"{{ link }}\\\">Phí vận chuyển</a> được tính khi thanh toán.\",\n    \"taxes_included\": \"Đã bao gồm thuế.\",\n    \"product_badge_sold_out\": \"Đã bán hết\",\n    \"product_badge_sale\": \"Giảm giá\",\n    \"search_input_label\": \"Tìm kiếm\",\n    \"search_input_placeholder\": \"Tìm kiếm\",\n    \"search_results\": \"Kết quả tìm kiếm\",\n    \"search_results_label\": \"Kết quả tìm kiếm\",\n    \"search_results_no_results\": \"Không tìm thấy kết quả cho \\\"{{ terms }}\\\". Hãy thử cụm từ tìm kiếm khác.\",\n    \"search_results_resource_articles\": \"Bài viết blog\",\n    \"search_results_resource_collections\": \"Bộ sưu tập\",\n    \"search_results_resource_pages\": \"Trang\",\n    \"search_results_resource_products\": \"Sản phẩm\",\n    \"search_results_resource_queries\": \"Gợi ý tìm kiếm\",\n    \"search_results_view_all\": \"Xem tất cả\",\n    \"search_results_view_all_button\": \"Xem tất cả\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} sản phẩm\",\n      \"other\": \"{{ count }} sản phẩm\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"Mặc định\",\n      \"grid_fieldset\": \"Lưới cột\",\n      \"single_item\": \"Đơn\",\n      \"zoom_out\": \"Thu nhỏ\"\n    },\n    \"recently_viewed_products\": \"Đã xem gần đây\",\n    \"unavailable\": \"Không có sẵn\",\n    \"collection_placeholder\": \"Tiêu đề bộ sưu tập\",\n    \"product_card_placeholder\": \"Tiêu đề sản phẩm\",\n    \"product_count\": \"Số lượng sản phẩm\",\n    \"item_count\": {\n      \"one\": \"{{ count }} mặt hàng\",\n      \"other\": \"{{ count }} mặt hàng\"\n    },\n    \"errors\": \"Lỗi\",\n    \"featured_products\": \"Sản phẩm nổi bật\",\n    \"price_from\": \"Từ {{ price }}\",\n    \"search\": \"Tìm kiếm\",\n    \"search_results_no_results_check_spelling\": \"Không tìm thấy kết quả cho \\\"{{ terms }}\\\". Hãy kiểm tra chính tả hoặc sử dụng một từ hoặc cụm từ khác.\",\n    \"filters\": \"Bộ lọc\",\n    \"no_products_found\": \"Không tìm thấy sản phẩm nào.\",\n    \"price_filter_html\": \"Giá cao nhất là {{ price }}\",\n    \"use_fewer_filters_html\": \"Hãy thử sử dụng ít bộ lọc hơn hoặc <a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">xóa tất cả bộ lọc</a>.\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"Tài khoản\",\n    \"account_title_personalized\": \"Xin chào {{ first_name }}\",\n    \"account_orders\": \"Đơn hàng\",\n    \"account_profile\": \"Hồ sơ\",\n    \"discount_code\": \"Mã giảm giá\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Đã bao gồm thuế và thuế nhập khẩu. Phí vận chuyển được tính khi thanh toán.\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Đã bao gồm thuế và thuế nhập khẩu. Phí vận chuyển được tính khi thanh toán.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Đã bao gồm thuế nhập khẩu. Phí vận chuyển được tính khi thanh toán.\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Đã bao gồm thuế nhập khẩu. Phí vận chuyển được tính khi thanh toán.\",\n    \"pickup_available_at_html\": \"Có thể nhận hàng tại <b>{{ location }}</b>\",\n    \"pickup_available_in\": \"Có thể nhận hàng tại chỗ, {{ pickup_time }}\",\n    \"pickup_not_available\": \"Hiện không có sẵn dịch vụ nhận hàng tại chỗ\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"Đọc thêm...\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"Thuế và <a href=\\\"{{ link }}\\\">phí vận chuyển</a> được tính khi thanh toán.\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"Thuế và phí vận chuyển được tính khi thanh toán.\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"Đã bao gồm thuế. Phí vận chuyển được tính khi thanh toán.\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"Đã bao gồm thuế. Phí vận chuyển được tính khi thanh toán.\",\n    \"wrong_password\": \"Sai mật khẩu!\",\n    \"view_more_details\": \"Xem thêm thông tin\",\n    \"inventory_low_stock\": \"Sắp hết hàng\",\n    \"inventory_in_stock\": \"Còn hàng\",\n    \"inventory_out_of_stock\": \"Hết hàng\",\n    \"page_placeholder_title\": \"Tiêu đề trang\",\n    \"page_placeholder_content\": \"Chọn một trang để hiển thị nội dung.\",\n    \"placeholder_image\": \"Hình ảnh phần giữ chỗ\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"Còn {{ count }}\",\n      \"other\": \"Còn {{ count }}\"\n    },\n    \"powered_by\": \"Cửa hàng này sẽ được cung cấp bởi\",\n    \"store_owner_link_html\": \"Bạn có phải chủ cửa hàng không? <a href=\\\"{{ link }}\\\">Đăng nhập tại đây</a>\",\n    \"shipping_discount_error\": \"Ưu đãi giảm giá vận chuyển được hiển thị tại trang thanh toán sau khi thêm địa chỉ\",\n    \"discount_code_error\": \"Không thể áp dụng mã giảm giá cho giỏ hàng của bạn\",\n    \"shipping_policy\": \"Phí vận chuyển được tính khi thanh toán.\",\n    \"recipient_form_send_to\": \"Gửi đến\",\n    \"recipient_form_email_label\": \"Email của người nhận\",\n    \"recipient_form_email_label_my_email\": \"Email của tôi\",\n    \"recipient_form_email_address\": \"Địa chỉ email người nhận\",\n    \"recipient_form_name_label\": \"Tên người nhận (không bắt buộc)\",\n    \"recipient_form_message\": \"Tin nhắn (không bắt buộc)\",\n    \"recipient_form_characters_used\": \"Đã sử dụng {{ used_chars }}/{{ max_chars }} ký tự\",\n    \"recipient_form_send_on\": \"DD-MM-YYYY\",\n    \"recipient_form_send_on_label\": \"Ngày gửi (tùy chọn)\",\n    \"recipient_form_fields_visible\": \"Các trường biểu mẫu cho người nhận hiện đã được hiển thị\",\n    \"recipient_form_fields_hidden\": \"Các trường biểu mẫu cho người nhận hiện đã được ẩn\",\n    \"recipient_form_error\": \"Đã xảy ra lỗi khi gửi biểu mẫu\",\n    \"product_custom_property_character_count\": \"Đã sử dụng {{ used_chars }}/{{ max_chars }} ký tự\",\n    \"terms_and_policies\": \"Điều khoản và chính sách\",\n    \"pagination\": {\n      \"nav_label\": \"Điều hướng phân trang\",\n      \"previous\": \"Trước\",\n      \"next\": \"Tiếp\",\n      \"page\": \"Trang {{ page }}\"\n    },\n    \"volume_pricing_available\": \"Có thể áp dụng giảm giá theo số lượng\",\n    \"volume_pricing\": \"Giảm giá theo số lượng\",\n    \"at_price_each\": \"với giá {{ price }}/sản phẩm\",\n    \"each\": \"{{ price }}/sản phẩm\",\n    \"each_abbreviation\": \"sản phẩm\",\n    \"price_at\": \"với giá\",\n    \"price_range\": \"Khoảng giá\",\n    \"cancel\": \"Hủy\",\n    \"product_subtotal\": \"Tổng phụ sản phẩm\",\n    \"quantity_per_item\": \"/sản phẩm\",\n    \"remove_all\": \"Xóa tất cả\",\n    \"remove_all_items_confirmation\": \"Xóa tất cả {{ count }} mặt hàng khỏi giỏ hàng của bạn?\",\n    \"remove_one_item_confirmation\": \"Xóa 1 mặt hàng khỏi giỏ hàng?\",\n    \"total_items\": \"Tổng số mặt hàng\",\n    \"variant\": \"Mẫu mã\",\n    \"variant_total\": \"Tổng số mẫu mã\",\n    \"view_cart\": \"Xem giỏ hàng\",\n    \"your_cart\": \"Giỏ hàng của bạn\",\n    \"items_added_to_cart\": {\n      \"one\": \"Đã thêm 1 mặt hàng vào giỏ hàng\",\n      \"other\": \"Đã thêm {{ count }} mặt hàng vào giỏ hàng\"\n    },\n    \"item_count_cutoff\": \"Hơn {{ count }} mặt hàng\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"Sử dụng mã thẻ quà tặng trực tuyến hoặc mã QR tại cửa hàng\",\n      \"title\": \"Đây là số dư thẻ quà tặng trị giá {{ value }} của bạn cho {{ shop }}!\",\n      \"subtext\": \"Thẻ quà tặng của bạn\",\n      \"shop_link\": \"Truy cập cửa hàng trực tuyến\",\n      \"add_to_apple_wallet\": \"Thêm vào Apple Wallet\",\n      \"qr_image_alt\": \"Mã QR — quét để đổi thẻ quà tặng\",\n      \"copy_code\": \"Sao chép mã thẻ quà tặng\",\n      \"expiration_date\": \"Hết hạn vào {{ expires_on }}\",\n      \"copy_code_success\": \"Đã sao chép mã thành công\",\n      \"expired\": \"Đã hết hạn\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} nhận xét\",\n        \"other\": \"{{ count }} nhận xét\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"Email\",\n      \"error\": \"Không thể đăng nhận xét, vui lòng xử lý các vấn đề sau:\",\n      \"heading\": \"Để lại nhận xét\",\n      \"message\": \"Thông báo\",\n      \"moderated\": \"Xin lưu ý, nhận xét cần được phê duyệt trước khi được đăng.\",\n      \"name\": \"Tên\",\n      \"post\": \"Gửi nhận xét\",\n      \"success_moderated\": \"Nhận xét đã được đăng, đang chờ kiểm duyệt\",\n      \"success\": \"Nhận xét đã được đăng\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"đến\"\n  },\n  \"placeholders\": {\n    \"password\": \"Mật khẩu\",\n    \"search\": \"Tìm kiếm\",\n    \"product_title\": \"Tiêu đề sản phẩm\",\n    \"collection_title\": \"Tiêu đề bộ sưu tập\",\n    \"blog_posts\": \"Bài viết blog\",\n    \"blog_post_title\": \"Tiêu đề\",\n    \"blog_post_author\": \"Tác giả\",\n    \"blog_post_date\": \"Ngày\",\n    \"blog_post_description\": \"Một đoạn trích nội dung bài viết blog của bạn\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"Thêm vào giỏ hàng\",\n      \"adding_to_cart\": \"Đang thêm...\",\n      \"added_to_cart\": \"Đã thêm vào giỏ hàng\",\n      \"add_to_cart_error\": \"Lỗi khi thêm vào giỏ hàng\",\n      \"quantity_error_max\": \"Mặt hàng này có tối đa {{ maximum }}\",\n      \"sold_out\": \"Hết hàng\",\n      \"unavailable\": \"Không khả dụng\",\n      \"quantity\": \"Số lượng\",\n      \"quantity_increments\": \"Mức gia tăng {{ increment }}\",\n      \"quantity_minimum\": \"Tối thiểu {{ minimum }}\",\n      \"quantity_maximum\": \"Tối đa {{ maximum }}\",\n      \"in_cart\": \"trong giỏ hàng\",\n      \"default_title\": \"Tiêu đề mặc định\",\n      \"sticky_add_to_cart\": \"Thanh thêm nhanh vào giỏ hàng\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/zh-CN.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"加载视频：{{ description }}\",\n    \"sold_out\": \"售罄\",\n    \"email_signup\": {\n      \"label\": \"电子邮件\",\n      \"placeholder\": \"电子邮件地址\",\n      \"success\": \"感谢您的订阅！\"\n    },\n    \"filter\": \"筛选条件\",\n    \"payment_methods\": \"付款方式\",\n    \"contact_form\": {\n      \"name\": \"名称\",\n      \"email\": \"电子邮件\",\n      \"phone\": \"电话\",\n      \"comment\": \"评论\",\n      \"post_success\": \"感谢您联系我们。我们会尽快回复您。\",\n      \"error_heading\": \"请调整以下内容：\"\n    },\n    \"slider_label\": \"滑块\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"演示 3D 模型\",\n    \"play_video\": \"播放视频\",\n    \"unit_price\": \"单价\",\n    \"country_results_count\": \"{{ count }} 个结果\",\n    \"slideshow_pause\": \"暂停幻灯片\",\n    \"slideshow_play\": \"播放幻灯片\",\n    \"remove_item\": \"删除 {{ title}}\",\n    \"skip_to_text\": \"跳到内容\",\n    \"skip_to_product_info\": \"跳至产品信息\",\n    \"skip_to_results_list\": \"跳到结果列表\",\n    \"new_window\": \"在新窗口中打开。\",\n    \"slideshow_next\": \"下一张幻灯片\",\n    \"slideshow_previous\": \"上一张幻灯片\",\n    \"close_dialog\": \"关闭对话框\",\n    \"reset_search\": \"重置搜索\",\n    \"search_results_count\": \"找到“{{ query }}”的 {{ count }} 条搜索结果\",\n    \"search_results_no_results\": \"未找到“{{ query }}”的相关结果\",\n    \"filters\": \"筛选条件\",\n    \"account\": \"账户\",\n    \"cart\": \"购物车\",\n    \"cart_count\": \"购物车中的商品总数\",\n    \"filter_count\": {\n      \"one\": \"已应用 {{ count }} 个筛选条件\",\n      \"other\": \"已应用 {{ count }} 个筛选条件\"\n    },\n    \"menu\": \"菜单\",\n    \"country_region\": \"国家/地区\",\n    \"slide_status\": \"第 {{ index }} 张幻灯片，共 {{ length }} 张\",\n    \"scroll_to\": \"滚动到 {{ title }}\",\n    \"loading_product_recommendations\": \"加载产品推荐\",\n    \"discount\": \"应用折扣码\",\n    \"discount_menu\": \"折扣码\",\n    \"discount_applied\": \"已应用折扣码：{{ code }}\",\n    \"inventory_status\": \"库存状态\",\n    \"pause_video\": \"暂停视频\",\n    \"localization_region_and_language\": \"区域和语言选择器\",\n    \"find_country\": \"查找国家/地区\",\n    \"decrease_quantity\": \"减少数量\",\n    \"increase_quantity\": \"增加数量\",\n    \"quantity\": \"数量\",\n    \"rating\": \"此产品的评分是 {{ rating }}/5\",\n    \"nested_product\": \"{{ product_title }}（{{ parent_title }}）\",\n    \"remove\": \"删除\",\n    \"view_pricing_info\": \"查看定价信息\",\n    \"open_hotspot\": \"打开热点\",\n    \"slideshow\": \"幻灯片\",\n    \"header_navigation_label\": \"主要\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"添加到购物车\",\n    \"clear_all\": \"全部清除\",\n    \"remove\": \"删除\",\n    \"view_in_your_space\": \"在您的空间中查看\",\n    \"show_filters\": \"筛选条件\",\n    \"clear\": \"清除\",\n    \"continue_shopping\": \"继续购物\",\n    \"log_in_html\": \"已有账户？<a href=\\\"{{ link }}\\\">登录</a>以快速结账。\",\n    \"see_items\": {\n      \"one\": \"查看 {{ count }} 件商品\",\n      \"other\": \"查看 {{ count }} 件商品\"\n    },\n    \"view_all\": \"查看全部\",\n    \"add\": \"添加\",\n    \"choose\": \"选择\",\n    \"added\": \"已添加\",\n    \"show_less\": \"显示部分\",\n    \"show_more\": \"显示更多\",\n    \"close\": \"关闭\",\n    \"more\": \"更多\",\n    \"reset\": \"重置\",\n    \"zoom\": \"缩放\",\n    \"close_dialog\": \"关闭对话框\",\n    \"back\": \"返回\",\n    \"log_in\": \"登录\",\n    \"log_out\": \"登出\",\n    \"remove_discount\": \"删除折扣 {{ code }}\",\n    \"enter_using_password\": \"使用密码进入\",\n    \"submit\": \"提交\",\n    \"enter_password\": \"输入密码\",\n    \"view_store_information\": \"查看商店信息\",\n    \"apply\": \"应用\",\n    \"sign_in_options\": \"其他登录选项\",\n    \"sign_up\": \"注册\",\n    \"open_image_in_full_screen\": \"全屏打开图片\",\n    \"sort\": \"排序\",\n    \"show_all_options\": \"显示所有选项\",\n    \"open\": \"打开\"\n  },\n  \"content\": {\n    \"reviews\": \"评价\",\n    \"no_results_found\": \"未找到结果\",\n    \"language\": \"语言\",\n    \"localization_region_and_language\": \"区域和语言\",\n    \"cart_total\": \"购物车总金额\",\n    \"your_cart_is_empty\": \"您的购物车为空\",\n    \"product_image\": \"产品图片\",\n    \"product_information\": \"产品信息\",\n    \"quantity\": \"数量\",\n    \"product_total\": \"产品总计\",\n    \"cart_estimated_total\": \"预计总额\",\n    \"seller_note\": \"特殊说明\",\n    \"cart_subtotal\": \"小计\",\n    \"discounts\": \"折扣\",\n    \"discount\": \"折扣\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"已含关税和税费。结账时计算折扣和<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"已含关税和税费。结账时计算折扣和运费。\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"已含税费。结账时计算折扣和<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"已含税费。结账时计算折扣和运费。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"已含关税。结账时计算税费、折扣和<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"已含关税。结账时计算税费、折扣和运费。\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"结账时计算税费、折扣和<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"结账时计算税费、折扣和运费。\",\n    \"checkout\": \"结账\",\n    \"cart_title\": \"购物车\",\n    \"price\": \"价格\",\n    \"price_regular\": \"常规价格\",\n    \"price_compare_at\": \"原价\",\n    \"price_sale\": \"促销价\",\n    \"duties_and_taxes_included\": \"已含关税和税费。\",\n    \"duties_included\": \"已含关税。\",\n    \"shipping_policy_html\": \"结账时计算的<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"taxes_included\": \"已含税费。\",\n    \"product_badge_sold_out\": \"售罄\",\n    \"product_badge_sale\": \"促销\",\n    \"grid_view\": {\n      \"default_view\": \"默认\",\n      \"grid_fieldset\": \"列网格\",\n      \"single_item\": \"单个\",\n      \"zoom_out\": \"缩小\"\n    },\n    \"search_input_label\": \"搜索\",\n    \"search_input_placeholder\": \"搜索\",\n    \"search_results\": \"搜索结果\",\n    \"search_results_label\": \"搜索结果\",\n    \"search_results_no_results\": \"未找到“{{ terms }}”的相关结果。尝试其他搜索词。\",\n    \"search_results_resource_articles\": \"博客文章\",\n    \"search_results_resource_collections\": \"产品系列\",\n    \"search_results_resource_pages\": \"页面\",\n    \"search_results_resource_products\": \"产品\",\n    \"search_results_resource_queries\": \"搜索建议\",\n    \"search_results_view_all\": \"查看全部\",\n    \"search_results_view_all_button\": \"查看全部\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} 件产品\",\n      \"other\": \"{{ count }} 件产品\"\n    },\n    \"recently_viewed_products\": \"最近的浏览记录\",\n    \"unavailable\": \"不可用\",\n    \"collection_placeholder\": \"产品系列标题\",\n    \"product_card_placeholder\": \"产品标题\",\n    \"product_count\": \"产品数量\",\n    \"item_count\": {\n      \"one\": \"{{ count }} 件商品\",\n      \"other\": \"{{ count }} 件商品\"\n    },\n    \"errors\": \"错误\",\n    \"search\": \"搜索\",\n    \"search_results_no_results_check_spelling\": \"未找到“{{ terms }}”的相关结果。请检查拼写或使用其他词或短语。\",\n    \"featured_products\": \"特色产品\",\n    \"no_products_found\": \"找不到产品。\",\n    \"price_from\": \"{{ price }} 起\",\n    \"use_fewer_filters_html\": \"尝试减少使用的筛选条件数量，或<a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">清除所有筛选条件</a>。\",\n    \"filters\": \"筛选条件\",\n    \"price_filter_html\": \"最高价格为 {{ price }}\",\n    \"blog_details_separator\": \"|\",\n    \"read_more\": \"阅读详细内容…\",\n    \"account_title\": \"账户\",\n    \"account_title_personalized\": \"您好，{{ first_name }}\",\n    \"account_orders\": \"订单\",\n    \"account_profile\": \"资料\",\n    \"discount_code\": \"折扣码\",\n    \"pickup_available_at_html\": \"<b>{{ location }}</b> 提供取货服务\",\n    \"pickup_available_in\": \"提供取货服务：{{ pickup_time }}\",\n    \"pickup_not_available\": \"目前无法提供取货服务\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"wrong_password\": \"密码错误\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"已含关税和税费。结账时计算运费。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"已含关税和税费。结账时计算运费。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"已含关税。结账时计算运费。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"已含关税。结账时计算运费。\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"结账时计算的税费和<a href=\\\"{{ link }}\\\">运费</a>。\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"结账时计算的税费和运费。\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"已含税费。结账时计算运费。\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"已含税费。结账时计算运费。\",\n    \"view_more_details\": \"查看更多详细信息\",\n    \"inventory_low_stock\": \"低库存\",\n    \"inventory_in_stock\": \"现货\",\n    \"inventory_out_of_stock\": \"缺货\",\n    \"page_placeholder_title\": \"页面标题\",\n    \"page_placeholder_content\": \"选择一个页面来显示其内容。\",\n    \"placeholder_image\": \"占位符图像\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"剩余 {{ count }}\",\n      \"other\": \"剩余 {{ count }}\"\n    },\n    \"shipping_discount_error\": \"添加地址后，结账时会显示运费折扣\",\n    \"discount_code_error\": \"折扣码无法应用于您的购物车\",\n    \"shipping_policy\": \"结账时计算运费。\",\n    \"powered_by\": \"此商店依托\",\n    \"store_owner_link_html\": \"您是否为店主？<a href=\\\"{{ link }}\\\">在此处登录</a>\",\n    \"recipient_form_send_to\": \"发送至\",\n    \"recipient_form_email_label\": \"收件人电子邮件\",\n    \"recipient_form_email_label_my_email\": \"我的电子邮件\",\n    \"recipient_form_email_address\": \"收件人电子邮件地址\",\n    \"recipient_form_name_label\": \"收件人姓名（可选）\",\n    \"recipient_form_message\": \"消息（可选）\",\n    \"recipient_form_characters_used\": \"已输入 {{ used_chars }} 个字符，最多 {{ max_chars }} 个\",\n    \"recipient_form_send_on\": \"年-月-日\",\n    \"recipient_form_send_on_label\": \"发送日期（可选）\",\n    \"recipient_form_fields_visible\": \"收件人表单字段现在可见\",\n    \"recipient_form_fields_hidden\": \"收件人表单字段现已隐藏\",\n    \"recipient_form_error\": \"提交表单时出现错误\",\n    \"product_custom_property_character_count\": \"已输入 {{ used_chars }} 个字符，最多 {{ max_chars }} 个\",\n    \"terms_and_policies\": \"条款和政策\",\n    \"pagination\": {\n      \"nav_label\": \"分页导航\",\n      \"previous\": \"上一页\",\n      \"next\": \"下一页\",\n      \"page\": \"第 {{ page }} 页\"\n    },\n    \"volume_pricing_available\": \"提供批量定价\",\n    \"volume_pricing\": \"批量定价\",\n    \"at_price_each\": \"{{ price }}/件\",\n    \"each\": \"{{ price }}/件\",\n    \"each_abbreviation\": \"单件\",\n    \"price_at\": \"价格\",\n    \"price_range\": \"价格范围\",\n    \"item_count_cutoff\": \"超过 {{ count }} 件商品\",\n    \"cancel\": \"取消\",\n    \"product_subtotal\": \"产品小计\",\n    \"quantity_per_item\": \"/件\",\n    \"remove_all\": \"全部删除\",\n    \"remove_all_items_confirmation\": \"删除您购物车中的全部 {{ count }} 件商品？\",\n    \"remove_one_item_confirmation\": \"从购物车中删除 1 件商品？\",\n    \"total_items\": \"商品总数\",\n    \"variant\": \"多属性\",\n    \"variant_total\": \"多属性总计\",\n    \"view_cart\": \"查看购物车\",\n    \"your_cart\": \"您的购物车\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 件商品已加入购物车\",\n      \"other\": \"{{ count }} 件商品已加入购物车\"\n    }\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"在线使用礼品卡代码或在店内使用二维码\",\n      \"title\": \"您的 {{ shop }} 的礼品卡余额为 {{ value }}！\",\n      \"subtext\": \"您的礼品卡\",\n      \"shop_link\": \"访问在线商店\",\n      \"add_to_apple_wallet\": \"添加到 Apple Wallet\",\n      \"qr_image_alt\": \"二维码 — 扫描兑换礼品卡\",\n      \"copy_code\": \"复制礼品卡代码\",\n      \"expiration_date\": \"过期日期：{{ expires_on }}\",\n      \"copy_code_success\": \"已成功复制代码\",\n      \"expired\": \"已过期\"\n    }\n  },\n  \"placeholders\": {\n    \"password\": \"密码\",\n    \"search\": \"搜索\",\n    \"product_title\": \"产品标题\",\n    \"collection_title\": \"产品系列标题\",\n    \"blog_posts\": \"博客文章\",\n    \"blog_post_title\": \"标题\",\n    \"blog_post_author\": \"作者\",\n    \"blog_post_date\": \"日期\",\n    \"blog_post_description\": \"博客文章内容摘录\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"添加到购物车\",\n      \"added_to_cart\": \"添加到购物车\",\n      \"adding_to_cart\": \"正在添加...\",\n      \"add_to_cart_error\": \"添加到购物车时出错\",\n      \"sold_out\": \"售罄\",\n      \"unavailable\": \"不可售\",\n      \"quantity_error_max\": \"此商品上限为 {{ maximum }}\",\n      \"quantity\": \"数量\",\n      \"quantity_increments\": \"增量为 {{ increment }}\",\n      \"quantity_minimum\": \"最少 {{ minimum }} 个\",\n      \"quantity_maximum\": \"最多 {{ maximum }} 个\",\n      \"in_cart\": \"在购物车中\",\n      \"default_title\": \"默认标题\",\n      \"sticky_add_to_cart\": \"快速添加到购物车栏\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"到\"\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} 条评论\",\n        \"other\": \"{{ count }} 条评论\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"电子邮件\",\n      \"error\": \"评论无法发布，请解决以下问题：\",\n      \"heading\": \"发表评论\",\n      \"message\": \"消息\",\n      \"moderated\": \"请注意，评论必须在发布之前获得批准。\",\n      \"name\": \"名称\",\n      \"post\": \"发布评论\",\n      \"success_moderated\": \"评论已发布，等待审核\",\n      \"success\": \"评论已发布\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/zh-CN.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"边框\",\n    \"collapsible_row\": \"可折叠行\",\n    \"colors\": \"颜色\",\n    \"custom_section\": \"自定义分区\",\n    \"icon\": \"图标\",\n    \"logo_and_favicon\": \"Logo 和网站图标\",\n    \"overlapping_blocks\": \"重叠区块\",\n    \"rich_text_section\": \"富文本\",\n    \"product_buy_buttons\": \"购买按钮\",\n    \"product_description\": \"描述\",\n    \"product_price\": \"价格\",\n    \"product_variant_picker\": \"多属性选择器\",\n    \"slideshow\": \"幻灯片\",\n    \"typography\": \"排版\",\n    \"video\": \"视频\",\n    \"slideshow_controls\": \"幻灯片控件\",\n    \"size\": \"尺寸\",\n    \"spacing\": \"间距\",\n    \"product_recommendations\": \"推荐产品\",\n    \"product_media\": \"产品媒体文件\",\n    \"featured_collection\": \"特色产品系列\",\n    \"add_to_cart\": \"添加到购物车\",\n    \"email_signup\": \"电子邮件注册\",\n    \"submit_button\": \"提交按钮\",\n    \"grid_layout_selector\": \"网格布局选择器\",\n    \"image\": \"图片\",\n    \"list_items\": \"列表项\",\n    \"facets\": \"分面\",\n    \"variants\": \"多属性\",\n    \"styles\": \"样式\",\n    \"product_cards\": \"产品卡\",\n    \"buttons\": \"按钮\",\n    \"inputs\": \"输入\",\n    \"primary_button\": \"主要按钮\",\n    \"secondary_button\": \"次要按钮\",\n    \"popovers_and_modals\": \"弹出框和模态窗口\",\n    \"marquee\": \"选取框\",\n    \"pull_quote\": \"引文\",\n    \"contact_form\": \"联系表单\",\n    \"featured_product\": \"产品亮点\",\n    \"icons_with_text\": \"带文本图标\",\n    \"product_list\": \"特色产品系列\",\n    \"spacer\": \"间距\",\n    \"alternating_content_rows\": \"交替行\",\n    \"accelerated_checkout\": \"快捷结账\",\n    \"accordion\": \"手风琴\",\n    \"accordion_row\": \"手风琴行\",\n    \"animations\": \"动画\",\n    \"announcement\": \"公告\",\n    \"announcement_bar\": \"公告栏\",\n    \"badges\": \"徽章\",\n    \"button\": \"按钮\",\n    \"cart\": \"购物车\",\n    \"cart_items\": \"购物车商品\",\n    \"cart_products\": \"购物车产品\",\n    \"cart_title\": \"购物车\",\n    \"collection\": \"产品系列\",\n    \"collection_card\": \"产品系列卡片\",\n    \"collection_columns\": \"产品系列列\",\n    \"collection_container\": \"产品系列\",\n    \"collection_description\": \"产品系列描述\",\n    \"collection_image\": \"产品系列图片\",\n    \"collection_info\": \"产品系列信息\",\n    \"collection_list\": \"产品系列列表\",\n    \"collections\": \"产品系列\",\n    \"content\": \"内容\",\n    \"content_grid\": \"内容网格\",\n    \"details\": \"详细信息\",\n    \"divider\": \"分隔符\",\n    \"filters\": \"筛选和排序\",\n    \"follow_on_shop\": \"在 Shop 中关注\",\n    \"footer\": \"页脚\",\n    \"footer_utilities\": \"页脚实用工具\",\n    \"group\": \"群组\",\n    \"header\": \"标头\",\n    \"heading\": \"标题\",\n    \"icons\": \"图标\",\n    \"image_with_text\": \"带文本图片\",\n    \"input\": \"输入\",\n    \"logo\": \"Logo\",\n    \"magazine_grid\": \"杂志网格\",\n    \"media\": \"媒体文件\",\n    \"menu\": \"菜单\",\n    \"mobile_layout\": \"移动布局\",\n    \"payment_icons\": \"支付图标\",\n    \"popup_link\": \"弹出窗口链接\",\n    \"predictive_search\": \"搜索弹出框\",\n    \"predictive_search_empty\": \"预测搜索为空\",\n    \"price\": \"价格\",\n    \"product\": \"产品\",\n    \"product_card\": \"产品卡\",\n    \"product_card_media\": \"媒体文件\",\n    \"product_card_rendering\": \"产品卡呈现\",\n    \"product_grid\": \"网格\",\n    \"product_grid_main\": \"产品网格\",\n    \"product_image\": \"产品图片\",\n    \"product_information\": \"产品信息\",\n    \"product_review_stars\": \"评论星级\",\n    \"quantity\": \"数量\",\n    \"row\": \"行\",\n    \"search\": \"搜索\",\n    \"section\": \"分区\",\n    \"selected_variants\": \"已选多属性\",\n    \"slide\": \"幻灯片\",\n    \"social_media_links\": \"社交媒体链接\",\n    \"steps\": \"步骤\",\n    \"summary\": \"摘要\",\n    \"swatches\": \"样本\",\n    \"testimonials\": \"客户评价\",\n    \"text\": \"文本\",\n    \"title\": \"标题\",\n    \"utilities\": \"实用工具\",\n    \"search_input\": \"搜索输入\",\n    \"search_results\": \"搜索结果\",\n    \"read_only\": \"只读\",\n    \"collection_title\": \"产品系列标题\",\n    \"collections_bento\": \"产品系列列表：Bento\",\n    \"faq_section\": \"常见问题解答\",\n    \"hero\": \"主推\",\n    \"hero_bottom_aligned\": \"主推：底部对齐\",\n    \"jumbo_text\": \"大号文本\",\n    \"view_all_button\": \"查看全部\",\n    \"video_section\": \"视频\",\n    \"page_layout\": \"页面布局\",\n    \"product_title\": \"产品标题\",\n    \"custom_liquid\": \"自定义 Liquid\",\n    \"blog\": \"博客\",\n    \"blog_post\": \"博客文章\",\n    \"blog_posts\": \"博客文章\",\n    \"caption\": \"字幕\",\n    \"collection_card_image\": \"图片\",\n    \"collection_links\": \"产品系列链接\",\n    \"collection_links_spotlight\": \"产品系列链接：聚焦\",\n    \"collection_links_text\": \"产品系列链接：文本\",\n    \"collections_carousel\": \"产品系列列表：轮播\",\n    \"collections_editorial\": \"产品系列列表：编辑样式\",\n    \"collections_grid\": \"产品系列列表：网格\",\n    \"copyright\": \"版权\",\n    \"count\": \"计数\",\n    \"divider_section\": \"分隔符\",\n    \"drawers\": \"抽屉式边栏\",\n    \"editorial\": \"编辑样式\",\n    \"editorial_jumbo_text\": \"编辑样式：大号文本\",\n    \"hero_marquee\": \"主推：选取框\",\n    \"input_fields\": \"输入字段\",\n    \"local_pickup\": \"到店取货\",\n    \"marquee_section\": \"选取框\",\n    \"media_with_text\": \"带文本媒体文件\",\n    \"page\": \"页面\",\n    \"page_content\": \"内容\",\n    \"policy_list\": \"政策链接\",\n    \"prices\": \"价格\",\n    \"product_list_button\": \"“查看全部”按钮\",\n    \"products_carousel\": \"特色产品系列：轮播\",\n    \"products_editorial\": \"特色产品系列：编辑样式\",\n    \"products_grid\": \"特色产品系列：网格\",\n    \"product_inventory\": \"产品库存\",\n    \"social_link\": \"社交链接\",\n    \"split_showcase\": \"拆分展示\",\n    \"variant_pickers\": \"多属性选择器\",\n    \"pills\": \"胶囊标签\",\n    \"large_logo\": \"大号 logo\",\n    \"description\": \"描述\",\n    \"featured_image\": \"配图\",\n    \"multicolumn\": \"多列\",\n    \"product_custom_property\": \"特殊说明\",\n    \"blog_card\": \"博客卡片\",\n    \"blog_posts_grid\": \"博客文章：网格\",\n    \"blog_posts_carousel\": \"博客文章：轮播\",\n    \"blog_posts_editorial\": \"博客文章：编辑样式\",\n    \"excerpt\": \"摘要\",\n    \"footer_password\": \"密码页脚\",\n    \"policies_and_links\": \"政策和链接\",\n    \"card\": \"卡片\",\n    \"carousel\": \"轮播\",\n    \"carousel_content\": \"轮播内容\",\n    \"quick_order_list\": \"快速订购列表\",\n    \"column\": \"列\",\n    \"comparison_slider\": \"对比滑块\",\n    \"slideshow_full_frame\": \"幻灯片：全画幅\",\n    \"slideshow_inset\": \"幻灯片：内嵌\",\n    \"image_compare\": \"图片对比\",\n    \"subheading\": \"副标题\",\n    \"featured_product_information\": \"特色产品\",\n    \"product_hotspots\": \"产品热点\",\n    \"hotspot_product\": \"热点\",\n    \"product_sku\": \"SKU\",\n    \"layered_slideshow\": \"分层幻灯片\"\n  },\n  \"settings\": {\n    \"alignment\": \"对齐方式\",\n    \"autoplay\": \"自动播放\",\n    \"background\": \"背景\",\n    \"border_radius\": \"角半径\",\n    \"border_width\": \"边框粗细\",\n    \"borders\": \"边框\",\n    \"bottom_padding\": \"底部内边距\",\n    \"button\": \"按钮\",\n    \"color\": \"颜色\",\n    \"colors\": \"颜色\",\n    \"content_alignment\": \"内容对齐方式\",\n    \"content_direction\": \"内容方向\",\n    \"content_position\": \"内容位置\",\n    \"cover_image_size\": \"封面图片尺寸\",\n    \"cover_image\": \"封面图片\",\n    \"custom_minimum_height\": \"自定义最小高度\",\n    \"custom_width\": \"自定义宽度\",\n    \"enable_video_looping\": \"视频循环\",\n    \"favicon\": \"网站图标\",\n    \"font_family\": \"字体系列\",\n    \"gap\": \"间距\",\n    \"geometric_translate_y\": \"几何 Y 轴平移\",\n    \"heading\": \"标题\",\n    \"icon\": \"图标\",\n    \"image\": \"图片\",\n    \"image_icon\": \"图片图标\",\n    \"image_opacity\": \"图片不透明度\",\n    \"image_position\": \"图片位置\",\n    \"image_ratio\": \"图片比例\",\n    \"label\": \"标签\",\n    \"line_height\": \"行高\",\n    \"link\": \"链接\",\n    \"layout_gap\": \"布局间距\",\n    \"make_section_full_width\": \"使分区全宽显示\",\n    \"minimum_height\": \"最小高度\",\n    \"opacity\": \"不透明度\",\n    \"overlay_opacity\": \"叠加不透明度\",\n    \"padding\": \"内边距\",\n    \"primary_color\": \"链接\",\n    \"product\": \"产品\",\n    \"section_width\": \"分区宽度\",\n    \"size\": \"尺寸\",\n    \"slide_spacing\": \"幻灯片间距\",\n    \"slide_width\": \"幻灯片宽度\",\n    \"slideshow_fullwidth\": \"全宽幻灯片\",\n    \"style\": \"样式\",\n    \"text\": \"文本\",\n    \"text_case\": \"大小写\",\n    \"top_padding\": \"顶部内边距\",\n    \"video\": \"视频\",\n    \"video_alt_text\": \"替代文本\",\n    \"video_loop\": \"循环播放视频\",\n    \"video_position\": \"视频位置\",\n    \"width\": \"宽度\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"限制内容宽度\",\n    \"color_scheme\": \"配色方案\",\n    \"inherit_color_scheme\": \"继承配色方案\",\n    \"product_count\": \"产品计数\",\n    \"product_type\": \"产品类型\",\n    \"content_width\": \"内容宽度\",\n    \"collection\": \"产品系列\",\n    \"enable_sticky_content\": \"在台式电脑上使用粘性内容\",\n    \"error_color\": \"错误\",\n    \"success_color\": \"成功\",\n    \"primary_font\": \"主字体\",\n    \"secondary_font\": \"次要字体\",\n    \"tertiary_font\": \"第三字体\",\n    \"columns\": \"列\",\n    \"items_to_show\": \"要显示的商品\",\n    \"layout\": \"布局\",\n    \"layout_type\": \"类型\",\n    \"show_grid_layout_selector\": \"显示网格布局选择器\",\n    \"view_more_show\": \"显示“查看更多”按钮\",\n    \"image_gap\": \"图片间距\",\n    \"width_desktop\": \"台式电脑宽度\",\n    \"width_mobile\": \"移动设备宽度\",\n    \"border_style\": \"边框样式\",\n    \"height\": \"高度\",\n    \"thickness\": \"粗细\",\n    \"stroke\": \"描边\",\n    \"filter_style\": \"筛选样式\",\n    \"swatches\": \"样本\",\n    \"quick_add_colors\": \"快速添加颜色\",\n    \"divider_color\": \"分隔线\",\n    \"border_opacity\": \"边框不透明度\",\n    \"hover_background\": \"悬停背景\",\n    \"hover_borders\": \"悬停边框\",\n    \"hover_text\": \"悬停文本\",\n    \"primary_hover_color\": \"悬停链接\",\n    \"primary_button_text\": \"主按钮文本\",\n    \"primary_button_background\": \"主按钮背景\",\n    \"primary_button_border\": \"主按钮边框\",\n    \"secondary_button_text\": \"次要按钮文本\",\n    \"secondary_button_background\": \"次要按钮背景\",\n    \"secondary_button_border\": \"次要按钮边框\",\n    \"shadow_color\": \"阴影\",\n    \"limit_media_to_screen_height\": \"限制在屏幕高度内\",\n    \"mobile_logo_image\": \"移动设备 logo\",\n    \"video_autoplay\": \"自动播放\",\n    \"video_cover_image\": \"封面图片\",\n    \"video_external_url\": \"URL\",\n    \"video_source\": \"来源\",\n    \"background_color\": \"背景颜色\",\n    \"hide_padding\": \"隐藏内边距\",\n    \"size_mobile\": \"移动设备尺寸\",\n    \"pixel_size_mobile\": \"像素尺寸\",\n    \"percent_size_mobile\": \"尺寸百分比\",\n    \"unit\": \"单位\",\n    \"custom_mobile_size\": \"自定义移动设备尺寸\",\n    \"fixed_height\": \"像素高度\",\n    \"fixed_width\": \"像素宽度\",\n    \"percent_height\": \"高度百分比\",\n    \"percent_width\": \"宽度百分比\",\n    \"percent_size\": \"尺寸百分比\",\n    \"pixel_size\": \"像素尺寸\",\n    \"first_row_media_position\": \"第一行媒体文件位置\",\n    \"accordion\": \"手风琴\",\n    \"aspect_ratio\": \"宽高比\",\n    \"auto_rotate_announcements\": \"自动轮播公告\",\n    \"auto_rotate_slides\": \"自动轮播幻灯片\",\n    \"badge_corner_radius\": \"角半径\",\n    \"badge_position\": \"在卡上的位置\",\n    \"badge_sale_color_scheme\": \"促销\",\n    \"badge_sold_out_color_scheme\": \"已售罄\",\n    \"behavior\": \"显示方式\",\n    \"blur\": \"阴影模糊\",\n    \"border\": \"边框\",\n    \"bottom\": \"底部\",\n    \"card_image_height\": \"产品图片高度\",\n    \"carousel_on_mobile\": \"在移动设备上使用轮播\",\n    \"cart_count\": \"购物车计数\",\n    \"cart_items\": \"购物车商品\",\n    \"cart_related_products\": \"相关产品\",\n    \"cart_title\": \"购物车\",\n    \"cart_total\": \"购物车总计\",\n    \"cart_type\": \"类型\",\n    \"case\": \"大小写\",\n    \"checkout_buttons\": \"快捷结账按钮\",\n    \"collection_list\": \"产品系列\",\n    \"collection_templates\": \"产品系列模板\",\n    \"content\": \"内容\",\n    \"corner_radius\": \"角半径\",\n    \"country_region\": \"国家/地区\",\n    \"currency_code\": \"货币代码\",\n    \"custom_height\": \"自定义高度\",\n    \"desktop_height\": \"台式电脑高度\",\n    \"direction\": \"方向\",\n    \"display\": \"显示方式\",\n    \"divider_thickness\": \"分隔线粗细\",\n    \"divider\": \"分隔线\",\n    \"dividers\": \"分隔线\",\n    \"drop_shadow\": \"投影\",\n    \"empty_state_collection_info\": \"在输入搜索词前显示\",\n    \"empty_state_collection\": \"空状态产品系列\",\n    \"enable_filtering\": \"筛选\",\n    \"enable_grid_density\": \"网格布局控件\",\n    \"enable_sorting\": \"排序\",\n    \"enable_zoom\": \"启用缩放\",\n    \"equal_columns\": \"等宽列\",\n    \"expand_first_group\": \"展开第一个群组\",\n    \"extend_media_to_screen_edge\": \"将媒体文件扩展到屏幕边缘\",\n    \"extend_summary\": \"扩展到屏幕边缘\",\n    \"extra_large\": \"超大\",\n    \"extra_small\": \"超小\",\n    \"flag\": \"国旗\",\n    \"font_price\": \"价格字体\",\n    \"font_weight\": \"字重\",\n    \"font\": \"字体\",\n    \"full_width_first_image\": \"第一张图片使用全宽\",\n    \"full_width_on_mobile\": \"在移动设备上使用全宽\",\n    \"heading_preset\": \"标题预设\",\n    \"hide_unselected_variant_media\": \"隐藏未选择的多属性媒体文件\",\n    \"horizontal_gap\": \"水平间距\",\n    \"horizontal_offset\": \"阴影水平偏移\",\n    \"hover_behavior\": \"悬停行为\",\n    \"icon_background\": \"图标背景\",\n    \"icons\": \"图标\",\n    \"image_border_radius\": \"图片角半径\",\n    \"installments\": \"分期付款\",\n    \"integrated_button\": \"集成式按钮\",\n    \"language_selector\": \"语言选择器\",\n    \"large\": \"大\",\n    \"left_padding\": \"左侧内边距\",\n    \"left\": \"左\",\n    \"letter_spacing\": \"字间距\",\n    \"limit_product_details_width\": \"限制产品详细信息宽度\",\n    \"link_preset\": \"链接预设\",\n    \"links\": \"链接\",\n    \"logo_font\": \"logo 字体\",\n    \"logo\": \"logo\",\n    \"loop\": \"循环\",\n    \"make_details_sticky_desktop\": \"在台式电脑上使用粘性\",\n    \"max_width\": \"最大宽度\",\n    \"media_height\": \"媒体文件高度\",\n    \"media_overlay\": \"媒体文件叠加\",\n    \"media_position\": \"媒体文件位置\",\n    \"media_type\": \"媒体文件类型\",\n    \"media_width\": \"媒体文件宽度\",\n    \"menu\": \"菜单\",\n    \"mobile_columns\": \"移动设备列数\",\n    \"mobile_height\": \"移动设备高度\",\n    \"mobile_quick_add\": \"移动设备快速添加\",\n    \"motion_direction\": \"动态方向\",\n    \"motion\": \"动态\",\n    \"movement_direction\": \"移动方向\",\n    \"navigation_bar_color_scheme\": \"导航栏配色方案\",\n    \"navigation_bar\": \"导航栏\",\n    \"navigation\": \"导航\",\n    \"open_new_tab\": \"在新标签页中打开链接\",\n    \"overlay_color\": \"叠加颜色\",\n    \"overlay\": \"叠加\",\n    \"padding_bottom\": \"底部内边距\",\n    \"padding_horizontal\": \"水平内边距\",\n    \"padding_top\": \"顶部内边距\",\n    \"page_width\": \"页面宽度\",\n    \"pagination\": \"分页\",\n    \"placement\": \"展示位置\",\n    \"position\": \"位置\",\n    \"preset\": \"预设\",\n    \"product_cards\": \"产品卡\",\n    \"product_pages\": \"产品页面\",\n    \"product_templates\": \"产品模板\",\n    \"products\": \"产品\",\n    \"quick_add\": \"快速添加\",\n    \"ratio\": \"比例\",\n    \"regular\": \"常规\",\n    \"review_count\": \"评论计数\",\n    \"right\": \"右\",\n    \"row_height\": \"行高\",\n    \"row\": \"行\",\n    \"seller_note\": \"允许给卖家留言\",\n    \"shape\": \"形状\",\n    \"show_as_accordion\": \"在移动设备上以手风琴样式显示\",\n    \"show_sale_price_first\": \"先显示促销价\",\n    \"show_tax_info\": \"税款信息\",\n    \"show\": \"显示\",\n    \"small\": \"小\",\n    \"speed\": \"速度\",\n    \"statement\": \"对账单\",\n    \"sticky_header\": \"粘性标头\",\n    \"text_hierarchy\": \"文本层次结构\",\n    \"text_presets\": \"文本预设\",\n    \"title\": \"标题\",\n    \"top\": \"顶部\",\n    \"type\": \"类型\",\n    \"type_preset\": \"文本预设\",\n    \"underline_thickness\": \"下划线粗细\",\n    \"variant_images\": \"多属性图片\",\n    \"vendor\": \"厂商\",\n    \"vertical_gap\": \"垂直间距\",\n    \"vertical_offset\": \"阴影垂直偏移\",\n    \"vertical_on_mobile\": \"在移动设备上垂直显示\",\n    \"view_all_as_last_card\": \"“查看全部”作为最后一张卡\",\n    \"weight\": \"粗细\",\n    \"wrap\": \"换行\",\n    \"read_only\": \"只读\",\n    \"always_stack_buttons\": \"始终堆叠按钮\",\n    \"custom_mobile_width\": \"自定义移动设备宽度\",\n    \"gradient_direction\": \"渐变方向\",\n    \"headings\": \"标题\",\n    \"overlay_style\": \"叠加样式\",\n    \"shadow_opacity\": \"阴影不透明度\",\n    \"show_filter_label\": \"已应用筛选的文本标签\",\n    \"show_swatch_label\": \"样本的文本标签\",\n    \"transparent_background\": \"透明背景\",\n    \"account\": \"账户\",\n    \"alignment_mobile\": \"移动设备对齐方式\",\n    \"align_baseline\": \"对齐文本基线\",\n    \"animation_repeat\": \"重复播放动画\",\n    \"add_discount_code\": \"允许在购物车中使用折扣\",\n    \"background_overlay\": \"背景叠加\",\n    \"background_media\": \"背景媒体文件\",\n    \"border_thickness\": \"边框粗细\",\n    \"bottom_row\": \"底行\",\n    \"button_text_case\": \"文本大小写\",\n    \"card_hover_effect\": \"卡悬停效果\",\n    \"card_size\": \"卡尺寸\",\n    \"auto_open_cart_drawer\": \"“添加到购物车”后自动打开抽屉式边栏\",\n    \"collection_count\": \"产品系列计数\",\n    \"collection_title_case\": \"产品系列标题大小写\",\n    \"custom_liquid\": \"Liquid 代码\",\n    \"default\": \"默认\",\n    \"default_logo\": \"默认 logo\",\n    \"divider_width\": \"分隔线宽度\",\n    \"hide_logo_on_home_page\": \"在主页上隐藏 logo\",\n    \"horizontal_padding\": \"水平内边距\",\n    \"inventory_threshold\": \"低库存阈值\",\n    \"inverse\": \"反色\",\n    \"inverse_logo\": \"反色 logo\",\n    \"layout_style\": \"样式\",\n    \"length\": \"长度\",\n    \"mobile_card_size\": \"移动设备卡尺寸\",\n    \"mobile_pagination\": \"移动设备分页\",\n    \"open_row_by_default\": \"默认打开行\",\n    \"page\": \"页面\",\n    \"page_transition_enabled\": \"页面过渡\",\n    \"product_and_card_title_case\": \"产品和卡标题大小写\",\n    \"product_title_case\": \"产品标题大小写\",\n    \"right_padding\": \"右侧内边距\",\n    \"search\": \"搜索\",\n    \"search_icon\": \"搜索图标\",\n    \"search_position\": \"位置\",\n    \"search_row\": \"行\",\n    \"show_author\": \"作者\",\n    \"show_alignment\": \"显示对齐方式\",\n    \"show_count\": \"显示计数\",\n    \"show_date\": \"日期\",\n    \"show_inventory_quantity\": \"显示低库存数量\",\n    \"show_pickup_availability\": \"显示取货服务信息\",\n    \"show_search\": \"显示搜索\",\n    \"text_label_case\": \"文本标签大小写\",\n    \"transition_to_main_product\": \"产品卡到产品页面的过渡\",\n    \"use_inverse_logo\": \"使用反色 logo\",\n    \"vertical_padding\": \"垂直内边距\",\n    \"visibility\": \"可见性\",\n    \"product_corner_radius\": \"产品角半径\",\n    \"card_corner_radius\": \"卡角半径\",\n    \"blurred_reflection\": \"模糊反射\",\n    \"reflection_opacity\": \"反射不透明度\",\n    \"show_second_image_on_hover\": \"悬停时显示第二张图片\",\n    \"media\": \"媒体文件\",\n    \"product_card_carousel\": \"显示轮播\",\n    \"media_fit\": \"媒体文件适应\",\n    \"scroll_speed\": \"显示下一条公告的时间\",\n    \"show_powered_by_shopify\": \"显示“由 Shopify 提供支持”\",\n    \"seller_note_open_by_default\": \"默认打开给卖家的留言\",\n    \"gift_card_form\": \"礼品卡表单\",\n    \"add_to_cart_animation\": \"添加到购物车\",\n    \"custom_link\": \"自定义链接\",\n    \"product_custom_property\": {\n      \"heading\": \"标题\",\n      \"description\": \"描述\",\n      \"key\": \"属性名称\",\n      \"key_info\": \"不能为空，且对于每个块都必须唯一。将显示在购物车、结账和订单详细信息中。\",\n      \"placeholder_text\": \"占位符文本\",\n      \"default_heading\": \"自定义您的产品\",\n      \"default_placeholder\": \"输入您的特殊说明\",\n      \"default_property_key\": \"特殊说明\",\n      \"max_length\": \"最大字符数\",\n      \"required\": \"需要输入内容才能将商品添加到购物车\",\n      \"input_type\": \"输入类型\",\n      \"input_type_text\": \"文本\",\n      \"input_type_checkbox\": \"复选框\",\n      \"content_settings\": \"内容设置\",\n      \"buyers_input\": \"客户输入\",\n      \"checkbox_label\": \"复选框标签\",\n      \"default_checkbox_label\": \"包含礼品包装\",\n      \"heading_preset\": \"标题\",\n      \"description_preset\": \"描述\",\n      \"input_preset\": \"输入\",\n      \"checkbox_preset\": \"复选框标签\"\n    },\n    \"blog\": \"博客\",\n    \"post_count\": \"文章计数\",\n    \"animation\": \"动画\",\n    \"top_level_size\": \"顶层尺寸\",\n    \"empty_cart_button_link\": \"空购物车按钮链接\",\n    \"auto_load_products\": \"滚动时自动加载产品\",\n    \"products_per_page\": \"每页产品数\",\n    \"custom_mobile_media\": \"在移动版上显示不同媒体文件\",\n    \"stack_media_on_mobile\": \"堆叠媒体文件\",\n    \"media_type_1\": \"媒体文件类型\",\n    \"media_type_2\": \"媒体文件 2 类型\",\n    \"full_frame_on_mobile\": \"在移动设备上全宽显示\",\n    \"skus\": \"SKU\",\n    \"variant_per_page\": \"每页多属性数量\",\n    \"image_1\": \"图片 1\",\n    \"image_2\": \"图片 2\",\n    \"after_image\": \"“之后”的图片\",\n    \"before_image\": \"“之前”的图片\",\n    \"cs_slider_style\": \"滑块样式\",\n    \"cs_slider_color\": \"滑块颜色\",\n    \"cs_slider_inner_color\": \"滑块内部颜色\",\n    \"text_on_images\": \"图片上的文本\",\n    \"card_height\": \"卡片高度\",\n    \"submenu_size\": \"子菜单大小\",\n    \"desktop_position\": \"桌面端位置\",\n    \"desktop_pagination\": \"桌面端分页\",\n    \"bullseye_color\": \"内部颜色\",\n    \"hotspot_color\": \"热点颜色\",\n    \"product_price_typography\": \"产品价格排版\",\n    \"product_title_typography\": \"产品标题排版\",\n    \"x_position\": \"水平位置\",\n    \"y_position\": \"垂直位置\",\n    \"enable_sticky_add_to_cart\": \"悬浮“添加到购物车”栏\",\n    \"sticky_add_to_cart\": \"悬浮“添加到购物车”\",\n    \"actions_display_style\": \"菜单样式\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"箭头\",\n    \"auto\": \"自动\",\n    \"banana\": \"香蕉\",\n    \"bottle\": \"瓶子\",\n    \"box\": \"方框\",\n    \"buttons\": \"按钮\",\n    \"carrot\": \"胡萝卜\",\n    \"center\": \"居中\",\n    \"chat_bubble\": \"聊天气泡\",\n    \"clipboard\": \"剪贴板\",\n    \"contain\": \"适应\",\n    \"counter\": \"计数器\",\n    \"cover\": \"填充\",\n    \"custom\": \"自定义\",\n    \"dairy_free\": \"不含乳制品\",\n    \"dairy\": \"乳制品\",\n    \"default\": \"默认\",\n    \"dropdowns\": \"下拉菜单\",\n    \"dots\": \"圆点\",\n    \"dryer\": \"烘干机\",\n    \"end\": \"末尾\",\n    \"eye\": \"眼睛\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"填充\",\n    \"fire\": \"火焰\",\n    \"fit\": \"适应\",\n    \"full\": \"全宽\",\n    \"full_and_page\": \"全宽背景，页面宽度内容\",\n    \"gluten_free\": \"不含麸质\",\n    \"heading\": \"标题\",\n    \"heart\": \"心形\",\n    \"horizontal\": \"水平\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"熨斗\",\n    \"landscape\": \"横向\",\n    \"large\": \"大\",\n    \"leaf\": \"叶子\",\n    \"leather\": \"皮革\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"闪电\",\n    \"link\": \"链接\",\n    \"lipstick\": \"口红\",\n    \"lock\": \"锁\",\n    \"lowercase\": \"小写\",\n    \"m\": \"M\",\n    \"map_pin\": \"地图图钉\",\n    \"medium\": \"中\",\n    \"none\": \"无\",\n    \"numbers\": \"数字\",\n    \"nut_free\": \"不含坚果\",\n    \"outline\": \"轮廓\",\n    \"page\": \"页面\",\n    \"pants\": \"裤子\",\n    \"paw_print\": \"爪印\",\n    \"pepper\": \"辣椒\",\n    \"perfume\": \"香水\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"飞机\",\n    \"plant\": \"植物\",\n    \"portrait\": \"纵向\",\n    \"price_tag\": \"价格标签\",\n    \"question_mark\": \"问号\",\n    \"recycle\": \"回收\",\n    \"return\": \"退货\",\n    \"ruler\": \"尺子\",\n    \"s\": \"S\",\n    \"sentence\": \"句首字母大写\",\n    \"serving_dish\": \"餐盘\",\n    \"shirt\": \"衬衫\",\n    \"shoe\": \"鞋子\",\n    \"silhouette\": \"轮廓\",\n    \"small\": \"小\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"雪花\",\n    \"solid\": \"实线\",\n    \"space_between\": \"两端对齐\",\n    \"square\": \"方形\",\n    \"star\": \"星形\",\n    \"start\": \"开头\",\n    \"stopwatch\": \"秒表\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"卡车\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X (Twitter)\",\n    \"uppercase\": \"大写\",\n    \"vertical\": \"垂直\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"洗涤\",\n    \"circle\": \"圆形\",\n    \"swatches\": \"样本\",\n    \"full_and_page_offset_left\": \"全宽背景，页面宽度内容，向左偏移\",\n    \"full_and_page_offset_right\": \"全宽背景，页面宽度内容，向右偏移\",\n    \"offset_left\": \"向左偏移\",\n    \"offset_right\": \"向右偏移\",\n    \"page_center_aligned\": \"页面，居中对齐\",\n    \"page_left_aligned\": \"页面，左对齐\",\n    \"page_right_aligned\": \"页面，右对齐\",\n    \"button\": \"按钮\",\n    \"caption\": \"字幕\",\n    \"h1\": \"标题 1\",\n    \"h2\": \"标题 2\",\n    \"h3\": \"标题 3\",\n    \"h4\": \"标题 4\",\n    \"h5\": \"标题 5\",\n    \"h6\": \"标题 6\",\n    \"paragraph\": \"段落\",\n    \"primary\": \"主要\",\n    \"secondary\": \"次要\",\n    \"tertiary\": \"第三\",\n    \"chevron_left\": \"向左 V 形\",\n    \"chevron_right\": \"向右 V 形\",\n    \"diamond\": \"菱形\",\n    \"grid\": \"网格\",\n    \"parallelogram\": \"平行四边形\",\n    \"rounded\": \"圆角\",\n    \"fit_content\": \"适应\",\n    \"pills\": \"胶囊标签\",\n    \"heavy\": \"粗\",\n    \"thin\": \"细\",\n    \"drawer\": \"抽屉式边栏\",\n    \"preview\": \"预览\",\n    \"text\": \"文本\",\n    \"video_uploaded\": \"已上传\",\n    \"video_external_url\": \"外部 URL\",\n    \"up\": \"向上\",\n    \"down\": \"向下\",\n    \"gradient\": \"渐变\",\n    \"fixed\": \"固定\",\n    \"pixel\": \"像素\",\n    \"percent\": \"百分比\",\n    \"above_carousel\": \"轮播上方\",\n    \"all\": \"全部\",\n    \"always\": \"始终\",\n    \"arrows_large\": \"大箭头\",\n    \"arrows\": \"箭头\",\n    \"aspect_ratio\": \"宽高比\",\n    \"balance\": \"平衡\",\n    \"bento\": \"Bento\",\n    \"black\": \"黑色\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"正文（大）\",\n    \"body_regular\": \"正文（常规）\",\n    \"body_small\": \"正文（小）\",\n    \"bold\": \"加粗\",\n    \"bottom_left\": \"左下角\",\n    \"bottom_right\": \"右下角\",\n    \"bottom\": \"底部\",\n    \"capitalize\": \"首字母大写\",\n    \"caret\": \"插入符号\",\n    \"carousel\": \"轮播\",\n    \"check_box\": \"复选框\",\n    \"chevron_large\": \"大 V 形\",\n    \"chevron\": \"V 形\",\n    \"chevrons\": \"V 形\",\n    \"classic\": \"经典\",\n    \"collection_images\": \"产品系列图片\",\n    \"color\": \"颜色\",\n    \"complementary\": \"互补\",\n    \"dissolve\": \"溶解\",\n    \"dotted\": \"点状\",\n    \"editorial\": \"编辑样式\",\n    \"extra_large\": \"特大\",\n    \"extra_small\": \"特小\",\n    \"featured_collections\": \"特色产品系列\",\n    \"featured_products\": \"特色产品\",\n    \"font_primary\": \"主要\",\n    \"font_secondary\": \"次要\",\n    \"font_tertiary\": \"第三\",\n    \"forward\": \"向前\",\n    \"full_screen\": \"全屏\",\n    \"heading_extra_large\": \"标题（特大）\",\n    \"heading_extra_small\": \"标题（特小）\",\n    \"heading_large\": \"标题（大）\",\n    \"heading_regular\": \"标题（常规）\",\n    \"heading_small\": \"标题（小）\",\n    \"icon\": \"图标\",\n    \"image\": \"图片\",\n    \"input\": \"输入\",\n    \"inside_carousel\": \"轮播内部\",\n    \"inverse_large\": \"反色大号\",\n    \"inverse\": \"反色\",\n    \"large_arrows\": \"大箭头\",\n    \"large_chevrons\": \"大 V 形\",\n    \"left\": \"左\",\n    \"light\": \"细\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"宽松\",\n    \"media_first\": \"媒体文件优先\",\n    \"media_second\": \"媒体文件第二\",\n    \"modal\": \"模态窗口\",\n    \"narrow\": \"窄\",\n    \"never\": \"从不\",\n    \"next_to_carousel\": \"轮播旁边\",\n    \"normal\": \"正常\",\n    \"nowrap\": \"不换行\",\n    \"off_media\": \"媒体文件外\",\n    \"on_media\": \"在媒体文件上\",\n    \"on_scroll_up\": \"向上滚动时\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"胶囊\",\n    \"plus\": \"Plus\",\n    \"pretty\": \"精美\",\n    \"price\": \"价格\",\n    \"primary_style\": \"主要样式\",\n    \"rectangle\": \"矩形\",\n    \"regular\": \"常规\",\n    \"related\": \"相关\",\n    \"reverse\": \"反向\",\n    \"rich_text\": \"富文本\",\n    \"right\": \"右\",\n    \"secondary_style\": \"次要样式\",\n    \"semibold\": \"半粗体\",\n    \"shaded\": \"阴影\",\n    \"show_second_image\": \"显示第二张图片\",\n    \"single\": \"单个\",\n    \"slide_left\": \"向左滑动\",\n    \"slide_up\": \"向上滑动\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"堆叠\",\n    \"text_only\": \"仅文本\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"缩略图\",\n    \"tight\": \"紧凑\",\n    \"top_left\": \"左上角\",\n    \"top_right\": \"右上角\",\n    \"top\": \"顶部\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"下划线\",\n    \"video\": \"视频\",\n    \"wide\": \"宽\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"强调色\",\n    \"below_image\": \"图片下方\",\n    \"blur\": \"模糊\",\n    \"body\": \"正文\",\n    \"button_primary\": \"主要按钮\",\n    \"button_secondary\": \"次要按钮\",\n    \"compact\": \"紧凑\",\n    \"crop_to_fit\": \"裁剪以适应\",\n    \"hidden\": \"隐藏\",\n    \"hint\": \"提示\",\n    \"lift\": \"提升\",\n    \"maintain_aspect_ratio\": \"保持宽高比\",\n    \"off\": \"关闭\",\n    \"on_image\": \"在图片上\",\n    \"reveal\": \"揭示\",\n    \"scale\": \"缩放\",\n    \"social_bluesky\": \"社交：Bluesky\",\n    \"social_facebook\": \"社交：Facebook\",\n    \"social_instagram\": \"社交：Instagram\",\n    \"social_linkedin\": \"社交：LinkedIn\",\n    \"social_pinterest\": \"社交：Pinterest\",\n    \"social_snapchat\": \"社交：Snapchat\",\n    \"social_spotify\": \"社交：Spotify\",\n    \"social_threads\": \"社交：Threads\",\n    \"social_tiktok\": \"社交：TikTok\",\n    \"social_tumblr\": \"社交：Tumblr\",\n    \"social_twitter\": \"社交：X (Twitter)\",\n    \"social_whatsapp\": \"社交：WhatsApp\",\n    \"social_vimeo\": \"社交：Vimeo\",\n    \"social_youtube\": \"社交：YouTube\",\n    \"spotlight\": \"聚焦\",\n    \"standard\": \"标准\",\n    \"subheading\": \"副标题\",\n    \"subtle_zoom\": \"缩放\",\n    \"with_hints\": \"带提示\",\n    \"below_media\": \"媒体文件下方\",\n    \"full_frame\": \"全画幅\",\n    \"icons\": \"图标\"\n  },\n  \"content\": {\n    \"advanced\": \"高级\",\n    \"background_image\": \"背景图片\",\n    \"background_video\": \"背景视频\",\n    \"block_size\": \"区块尺寸\",\n    \"borders\": \"边框\",\n    \"describe_the_video_for\": \"为使用屏幕阅读器的客户描述视频。[了解更多](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"分区尺寸\",\n    \"slideshow_width\": \"幻灯片宽度\",\n    \"typography\": \"排版\",\n    \"width_is_automatically_optimized\": \"宽度会自动针对移动设备进行优化。\",\n    \"complementary_products\": \"互补产品必须通过 Search & Discovery 应用进行设置。[了解更多](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"列将自动针对移动设备进行优化\",\n    \"content_width\": \"内容宽度仅在分区宽度设置为全宽时适用。\",\n    \"responsive_font_sizes\": \"尺寸会自动缩放以适应所有屏幕尺寸\",\n    \"buttons\": \"按钮\",\n    \"swatches\": \"样本\",\n    \"variant_settings\": \"多属性设置\",\n    \"background\": \"背景\",\n    \"cards_layout\": \"卡片布局\",\n    \"section_layout\": \"分区布局\",\n    \"mobile_size\": \"移动设备尺寸\",\n    \"appearance\": \"外观\",\n    \"arrows\": \"箭头\",\n    \"body_size\": \"正文大小\",\n    \"bottom_row_appearance\": \"底行外观\",\n    \"carousel_navigation\": \"轮播导航\",\n    \"carousel_pagination\": \"轮播分页\",\n    \"copyright\": \"版权\",\n    \"edit_logo_in_theme_settings\": \"在[模板设置](/editor?context=theme&category=logo%20and%20favicon)中编辑 logo\",\n    \"edit_price_in_theme_settings\": \"在[模板设置](/editor?context=theme&category=currency%20code)中编辑价格格式\",\n    \"edit_variants_in_theme_settings\": \"在[模板设置](/editor?context=theme&category=variants)中编辑多属性样式\",\n    \"email_signups_create_customer_profiles\": \"注册会添加[客户资料](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"若要显示该按钮，必须安装 Shop 渠道并激活 Shop Pay。[了解更多](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"字体\",\n    \"grid\": \"网格\",\n    \"heading_size\": \"标题大小\",\n    \"image\": \"图片\",\n    \"input\": \"输入\",\n    \"layout\": \"布局\",\n    \"link\": \"链接\",\n    \"link_padding\": \"链接内边距\",\n    \"localization\": \"本地化\",\n    \"logo\": \"Logo\",\n    \"margin\": \"外边距\",\n    \"media\": \"媒体文件\",\n    \"media_1\": \"媒体文件 1\",\n    \"media_2\": \"媒体文件 2\",\n    \"menu\": \"菜单\",\n    \"mobile_layout\": \"移动布局\",\n    \"padding\": \"内边距\",\n    \"padding_desktop\": \"桌面版内边距\",\n    \"paragraph\": \"段落\",\n    \"policies\": \"政策\",\n    \"popup\": \"弹出窗口\",\n    \"search\": \"搜索\",\n    \"size\": \"尺寸\",\n    \"social_media\": \"社交媒体\",\n    \"submit_button\": \"提交按钮\",\n    \"text_presets\": \"文本预设\",\n    \"transparent_background\": \"透明背景\",\n    \"typography_primary\": \"主要排版\",\n    \"typography_secondary\": \"次要排版\",\n    \"typography_tertiary\": \"第三排版\",\n    \"mobile_width\": \"移动设备宽度\",\n    \"width\": \"宽度\",\n    \"visible_if_collection_has_more_products\": \"当产品系列中的产品多于显示数量时可见\",\n    \"carousel\": \"轮播\",\n    \"colors\": \"颜色\",\n    \"collection_page\": \"产品系列页面\",\n    \"customer_account\": \"客户账户\",\n    \"edit_empty_state_collection_in_theme_settings\": \"在[模板设置](/editor?context=theme&category=search)中编辑空状态产品系列\",\n    \"grid_layout\": \"网格布局\",\n    \"home_page\": \"主页\",\n    \"images\": \"图片\",\n    \"inverse_logo_info\": \"在透明标头背景设置为“反色”时使用\",\n    \"manage_customer_accounts\": \"在客户账户设置中[管理可见性](/admin/settings/customer_accounts)。不支持旧版账户。\",\n    \"manage_policies\": \"[管理政策](/admin/settings/legal)\",\n    \"product_page\": \"产品页面\",\n    \"text\": \"文本\",\n    \"thumbnails\": \"缩略图\",\n    \"visibility\": \"可见性\",\n    \"app_required_for_ratings\": \"产品评分需要使用应用。[了解更多](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"图标\",\n    \"manage_store_name\": \"[管理商店名称](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"显示父分区中的产品系列\",\n    \"resource_reference_collection_card_image\": \"显示父产品系列中的图片\",\n    \"resource_reference_collection_title\": \"显示父产品系列中的标题\",\n    \"resource_reference_product\": \"自动连接到父产品\",\n    \"resource_reference_product_card\": \"显示父分区中的产品\",\n    \"resource_reference_product_inventory\": \"显示父产品中的库存\",\n    \"resource_reference_product_price\": \"显示父产品中的价格\",\n    \"resource_reference_product_recommendations\": \"根据父产品显示推荐\",\n    \"resource_reference_product_review\": \"显示父产品中的评论\",\n    \"resource_reference_product_swatches\": \"显示父产品中的样本\",\n    \"resource_reference_product_title\": \"显示父产品中的标题\",\n    \"resource_reference_product_variant_picker\": \"显示父产品中的多属性\",\n    \"resource_reference_product_media\": \"显示父产品中的媒体文件\",\n    \"product_media\": \"产品媒体文件\",\n    \"section_link\": \"分区链接\",\n    \"gift_card_form_description\": \"客户可以通过电子邮件将礼品卡发送给收件人，并附上个人留言。[了解更多](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"标题\",\n    \"resource_reference_product_custom_property\": \"添加可自定义的输入字段以收集自定义信息，这些信息将添加到此订单项目，稍后在订单详细信息中可见。\",\n    \"block_link\": \"区块链接\",\n    \"submenu_feature\": \"子菜单功能\",\n    \"cart_features\": \"购物车功能\",\n    \"email_signup\": \"电子邮件注册\",\n    \"mobile_media\": \"移动设备媒体文件\",\n    \"mobile_media_2\": \"移动设备媒体文件 2\",\n    \"navigation\": \"导航\",\n    \"popover\": \"弹出框\",\n    \"popover_position\": \"弹出框位置\",\n    \"resource_reference_product_sku\": \"显示主产品的 SKU\",\n    \"content_layout\": \"内容布局\",\n    \"mobile_media_1\": \"移动版媒体文件 1\",\n    \"utilities\": \"实用工具\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>与您的客户分享有关您品牌的信息。描述产品、发布公告或欢迎客户光临您的商店。</p>\",\n    \"bestseller_h2\": \"<h2>热销产品</h2>\",\n    \"bestseller_h3\": \"<h3>热销产品</h3>\",\n    \"bestseller\": \"<p>热销产品</p>\",\n    \"build_better\": \"<p>我们相信精益求精</p>\",\n    \"contact_us\": \"<h2>联系我们</h2>\",\n    \"discover_bestsellers\": \"<p>探索那些以其功能与风格的完美融合而俘获我们客户芳心的热销产品。</p>\",\n    \"everythings_starts_with_why\": \"<p>我们做的每件事都始于追问缘由</p>\",\n    \"explore_latest_products\": \"<p>探索我们的最新产品。</p>\",\n    \"faq\": \"<h3>常见问题解答</h3>\",\n    \"first_to_know\": \"<p>第一时间了解新产品系列和特别优惠。</p>\",\n    \"free_returns\": \"<p>30 天免费退货</p>\",\n    \"free_shipping_over\": \"<p>满 50 美元免运费</p>\",\n    \"goal_for_every_customer\": \"<p>我们的目标是让每位客户都对自己的购买感到完全满意。如果情况并非如此，请告知我们，我们将尽最大努力与您合作，妥善解决问题。</p>\",\n    \"home_to_shirts\": \"<p>主页 → 衬衫</p>\",\n    \"intentional_design\": \"<h2>精心设计</h2>\",\n    \"introducing_h2\": \"<h2><em>隆重推出</em></h2>\",\n    \"latest_products\": \"<p>隆重推出我们的最新产品，专为本季打造。在它们售罄前选购您的心仪产品吧！</p>\",\n    \"made_local_and_global\": \"<p>我们的产品在本地和全球都有生产。我们精心挑选制造合作伙伴，以确保我们的产品质优价廉。</p>\",\n    \"made_with_care_h2\": \"<h2>精心制作</h2>\",\n    \"made_with_care_extended\": \"<p>这款招牌热销产品制作精心，深受客户喜爱，超乎所有人的期望。</p>\",\n    \"made_with_care\": \"<p>制作精心，深受客户喜爱。</p>\",\n    \"make_things_better_extended\": \"<p>我们制造的产品性能更佳、使用寿命更长。我们的产品以简洁的设计和真材实料解决实际问题。</p>\",\n    \"make_things_better\": \"<p>我们制造的产品性能更佳、使用寿命更长。</p>\",\n    \"may_also_like\": \"<h4>您可能还喜欢</h4>\",\n    \"new_arrivals_h1\": \"<h1>新品上架</h1>\",\n    \"new_arrivals_h2\": \"<h2>新品上架</h2>\",\n    \"new_arrivals_h3\": \"<h3>新品上架</h3>\",\n    \"product_launch\": \"<p>了解我们最新产品发布背后的故事。</p>\",\n    \"product_story\": \"<p>每件产品的核心都有一个独特的故事，这源于我们对质量和创新的热情。每件商品都能提升您的日常生活品质并带来愉悦。</p>\",\n    \"real_people\": \"<p>真人真材，打造卓越产品</p>\",\n    \"related_product\": \"<h3>相关产品</h3>\",\n    \"return_policy\": \"<h2>退货政策是什么？</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 条评论</p>\",\n    \"shipping_based_on_location\": \"<p>运费根据您所在的地点和订单中的商品计算。您在购买前始终会知道运费价格。</p>\",\n    \"shop_by_collection\": \"<h3>按产品系列购物</h3>\",\n    \"signature_products\": \"<h2>我们的招牌产品</h2>\",\n    \"styled_with\": \"<h3>搭配造型</h3>\",\n    \"subscribe\": \"<h2>订阅我们的电子邮件</h2>\",\n    \"team_with_goal\": \"<h2>一个有目标的团队</h2>\",\n    \"unable_to_accept_returns\": \"<p>我们无法接受某些商品的退货。这些商品在购买前会仔细标记。</p>\",\n    \"work_quickly_to_ship\": \"<p>我们将尽快为您处理并发货。订单发货后，您将收到一封包含更多信息的电子邮件。配送时间因您所在的地点而异。</p>\",\n    \"join_our_email_list\": \"<h2>加入我们的电子邮件列表</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>获取独家优惠并抢先体验新产品。</p>\",\n    \"artistry_in_action\": \"<p>匠心巧运</p>\",\n    \"authentic_materials\": \"<p>真材实料，绝不妥协</p>\",\n    \"bold_style_recognizable\": \"<p>醒目风格，处处彰显</p>\",\n    \"discover_elevated_design\": \"<p>探索非凡设计</p>\",\n    \"expert_construction_finish\": \"<p>精湛构造，无瑕润饰</p>\",\n    \"made_to_last\": \"<p>经久耐用</p>\",\n    \"pieces_better_with_time\": \"<p>历久弥新，风韵更佳</p>\",\n    \"quality_you_can_feel\": \"<h2>卓越品质，触手可及</h2>\",\n    \"uncompromising_standards\": \"<p>严苛标准，绝不妥协</p>\",\n    \"featured_collection_h2\": \"<h2>特色产品系列</h2>\",\n    \"shop_collection\": \"<p>探索我们精心挑选的产品系列，这些热门商品兼具时尚风格与卓越品质。</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"立即购买\",\n    \"collapsible_row\": \"可折叠行\",\n    \"heading\": \"标题\",\n    \"email_signup_button_label\": \"订阅\",\n    \"accordion_heading\": \"手风琴标题\",\n    \"contact_form_button_label\": \"提交\",\n    \"popup_link\": \"弹出窗口链接\",\n    \"sign_up\": \"注册\",\n    \"welcome_to_our_store\": \"欢迎光临我们的商店\",\n    \"be_bold\": \"大胆出众。\",\n    \"shop_our_latest_arrivals\": \"购买我们的最新到货商品！\",\n    \"are_purchases_final_sale\": \"是否有商品属于最终促销，不可退货？\",\n    \"care_instructions\": \"保养说明\",\n    \"cart\": \"购物车\",\n    \"discover_collection\": \"探索该产品系列\",\n    \"fit\": \"尺码\",\n    \"how_much_for_shipping\": \"发货需要多少费用？\",\n    \"learn_more\": \"详细了解\",\n    \"manufacturing\": \"制造\",\n    \"materials\": \"材料\",\n    \"return_policy\": \"退货政策\",\n    \"shipping\": \"发货\",\n    \"shop_now_button_label\": \"立即购买\",\n    \"sign_up_button_label\": \"注册\",\n    \"submit_button_label\": \"提交\",\n    \"up_the_ante\": \"更\\n上\\n一\\n层\",\n    \"view_all_button_label\": \"查看全部\",\n    \"what_is_return_policy\": \"退货政策是什么？\",\n    \"when_will_order_arrive\": \"我什么时候能收到订单？\",\n    \"where_are_products_made\": \"您的产品在哪里制造？\",\n    \"trending_now\": \"时下热门\",\n    \"shop_the_look\": \"整套产品\",\n    \"bestsellers\": \"畅销商品\",\n    \"featured_collection\": \"特色产品系列\",\n    \"new_arrivals\": \"新品上架\"\n  },\n  \"info\": {\n    \"video_alt_text\": \"为使用辅助技术的用户描述视频\",\n    \"video_autoplay\": \"视频将默认静音\",\n    \"video_external\": \"使用 YouTube 或 Vimeo URL\",\n    \"carousel_layout_on_mobile\": \"移动版始终使用轮播布局\",\n    \"carousel_hover_behavior_not_supported\": \"在分区级别选择“轮播”类型时，不支持“轮播”悬停\",\n    \"checkout_buttons\": \"允许客户更快地结账，并可以提高转化率。[了解更多](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"自定义标题\",\n    \"edit_presets_in_theme_settings\": \"在[模板设置](/editor?context=theme&category=typography)中编辑预设\",\n    \"enable_filtering_info\": \"使用 [Search & Discovery 应用](https://help.shopify.com/manual/online-store/search-and-discovery/filters)自定义筛选器\",\n    \"grid_layout_on_mobile\": \"在移动设备上使用网格布局\",\n    \"logo_font\": \"仅在未选择 logo 时适用\",\n    \"manage_countries_regions\": \"[管理国家/地区](/admin/settings/markets)\",\n    \"manage_languages\": \"[管理语言](/admin/settings/languages)\",\n    \"transparent_background\": \"查看应用了透明背景的每个模板以确保可读性\",\n    \"aspect_ratio_adjusted\": \"在某些布局中会进行调整\",\n    \"custom_liquid\": \"添加应用代码片段或其他代码以创建高级自定义项。[了解更多](https://shopify.dev/docs/api/liquid)\",\n    \"hover_effects\": \"适用于产品和产品系列卡片\",\n    \"pills_usage\": \"用于已应用的筛选器、折扣码和搜索建议\",\n    \"applies_on_image_only\": \"仅适用于图片\",\n    \"hide_logo_on_home_page_help\": \"当粘性标头处于活动状态时，logo 将保持可见\",\n    \"media_type_info\": \"功能内容来自您的菜单链接\",\n    \"logo_height\": \"仅影响标头 logo\",\n    \"actions_display_style\": \"在移动设备上始终使用图标\"\n  },\n  \"categories\": {\n    \"basic\": \"基本\",\n    \"collection\": \"产品系列\",\n    \"collection_list\": \"产品系列列表\",\n    \"footer\": \"页脚\",\n    \"forms\": \"表单\",\n    \"header\": \"标头\",\n    \"layout\": \"布局\",\n    \"links\": \"链接\",\n    \"product\": \"产品\",\n    \"product_list\": \"特色产品系列\",\n    \"banners\": \"横幅\",\n    \"collections\": \"产品系列\",\n    \"custom\": \"自定义\",\n    \"decorative\": \"装饰\",\n    \"products\": \"产品\",\n    \"other_sections\": \"其他\",\n    \"storytelling\": \"品牌故事\",\n    \"text\": \"文本\"\n  }\n}\n"
  },
  {
    "path": "locales/zh-TW.json",
    "content": "{\n  \"blocks\": {\n    \"load_video\": \"載入影片：{{ description }}\",\n    \"sold_out\": \"售罄\",\n    \"email_signup\": {\n      \"label\": \"電子郵件\",\n      \"placeholder\": \"電子郵件地址\",\n      \"success\": \"感謝您的訂閱！\"\n    },\n    \"filter\": \"篩選條件\",\n    \"payment_methods\": \"付款方式\",\n    \"contact_form\": {\n      \"name\": \"名稱\",\n      \"email\": \"電子郵件\",\n      \"phone\": \"電話\",\n      \"comment\": \"留言\",\n      \"post_success\": \"感謝您聯絡我們。我們會盡快回覆您。\",\n      \"error_heading\": \"請調整以下內容：\"\n    },\n    \"slider_label\": \"投影播放器\"\n  },\n  \"accessibility\": {\n    \"play_model\": \"播放 3D 模型\",\n    \"play_video\": \"播放影片\",\n    \"unit_price\": \"單價\",\n    \"country_results_count\": \"{{ count }} 項結果\",\n    \"slideshow_pause\": \"暫停素材輪播\",\n    \"slideshow_play\": \"播放素材輪播\",\n    \"remove_item\": \"移除 {{ title}}\",\n    \"skip_to_text\": \"跳至內容\",\n    \"skip_to_product_info\": \"跳到商品資訊\",\n    \"skip_to_results_list\": \"跳到結果清單\",\n    \"new_window\": \"在新視窗中開啟。\",\n    \"slideshow_next\": \"下一張投影片\",\n    \"slideshow_previous\": \"上一張投影片\",\n    \"close_dialog\": \"關閉對話\",\n    \"reset_search\": \"重設搜尋條件\",\n    \"search_results_count\": \"找到 {{ count }} 筆「{{ query }}」的搜尋結果\",\n    \"search_results_no_results\": \"找不到「{{ query }}」的相關結果\",\n    \"filters\": \"篩選條件\",\n    \"account\": \"帳號\",\n    \"cart\": \"購物車\",\n    \"cart_count\": \"購物車內品項總數\",\n    \"filter_count\": {\n      \"one\": \"已套用 {{ count }} 個篩選條件\",\n      \"other\": \"已套用 {{ count }} 個篩選條件\"\n    },\n    \"menu\": \"選單\",\n    \"country_region\": \"國家/地區\",\n    \"slide_status\": \"第 {{ index }} 張投影片，共 {{ length }} 張\",\n    \"scroll_to\": \"捲動至 {{ title }}\",\n    \"loading_product_recommendations\": \"正在載入商品推薦\",\n    \"discount\": \"套用折扣代碼\",\n    \"discount_menu\": \"折扣代碼\",\n    \"discount_applied\": \"套用的折扣代碼：{{ code }}\",\n    \"inventory_status\": \"庫存狀態\",\n    \"pause_video\": \"暫停影片\",\n    \"find_country\": \"尋找國家/地區\",\n    \"localization_region_and_language\": \"地區和語言選擇器\",\n    \"decrease_quantity\": \"減少數量\",\n    \"increase_quantity\": \"增加數量\",\n    \"quantity\": \"數量\",\n    \"rating\": \"本商品的評分為 {{ rating }}/5\",\n    \"nested_product\": \"適用於 {{ parent_title }} 的 {{ product_title }}\",\n    \"remove\": \"移除\",\n    \"view_pricing_info\": \"檢視定價資訊\",\n    \"open_hotspot\": \"開啟熱點\",\n    \"slideshow\": \"素材輪播\",\n    \"header_navigation_label\": \"主要\"\n  },\n  \"actions\": {\n    \"add_to_cart\": \"加入購物車\",\n    \"clear_all\": \"全部清除\",\n    \"remove\": \"移除\",\n    \"view_in_your_space\": \"在您的空間中檢視\",\n    \"show_filters\": \"篩選條件\",\n    \"clear\": \"清除\",\n    \"continue_shopping\": \"繼續購物\",\n    \"log_in_html\": \"已有帳號？<a href=\\\"{{ link }}\\\">登入</a>以加速結帳。\",\n    \"see_items\": {\n      \"one\": \"查看 {{ count }} 個品項\",\n      \"other\": \"查看 {{ count }} 個品項\"\n    },\n    \"view_all\": \"檢視全部\",\n    \"add\": \"新增\",\n    \"choose\": \"選擇\",\n    \"added\": \"已新增\",\n    \"show_less\": \"顯示較少\",\n    \"show_more\": \"顯示更多\",\n    \"close\": \"關閉\",\n    \"more\": \"更多\",\n    \"reset\": \"重設\",\n    \"zoom\": \"縮放\",\n    \"close_dialog\": \"關閉對話\",\n    \"apply\": \"套用\",\n    \"back\": \"返回\",\n    \"log_in\": \"登入\",\n    \"log_out\": \"登出\",\n    \"remove_discount\": \"移除折扣 {{ code }}\",\n    \"enter_using_password\": \"使用密碼輸入\",\n    \"submit\": \"提交\",\n    \"enter_password\": \"輸入密碼\",\n    \"view_store_information\": \"檢視商店資訊\",\n    \"sign_in_options\": \"其他登入選項\",\n    \"open_image_in_full_screen\": \"全螢幕開啟圖片\",\n    \"sign_up\": \"註冊\",\n    \"sort\": \"排序\",\n    \"show_all_options\": \"顯示所有選項\",\n    \"open\": \"開啟\"\n  },\n  \"content\": {\n    \"reviews\": \"評論\",\n    \"no_results_found\": \"找不到結果\",\n    \"language\": \"語言\",\n    \"localization_region_and_language\": \"地區和語言\",\n    \"cart_total\": \"購物車總金額\",\n    \"your_cart_is_empty\": \"您的購物車是空的\",\n    \"cart_estimated_total\": \"估計總金額\",\n    \"seller_note\": \"特別指示\",\n    \"cart_subtotal\": \"小計\",\n    \"discounts\": \"折扣\",\n    \"discount\": \"折扣\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_html\": \"已包含關稅和稅額。結帳時計算折扣和<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy\": \"已包含關稅和稅額。結帳時計算折扣和運費。\",\n    \"taxes_included_shipping_at_checkout_with_policy_html\": \"已包含稅額。結帳時計算折扣和<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"taxes_included_shipping_at_checkout_without_policy\": \"已包含稅額。結帳時計算折扣和運費。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"已包含關稅。結帳時計算稅額、折扣和<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy\": \"已包含關稅。結帳時計算稅額、折扣和運費。\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_html\": \"結帳時計算稅額、折扣和<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy\": \"結帳時計算稅額、折扣和運費。\",\n    \"checkout\": \"結帳\",\n    \"cart_title\": \"購物車\",\n    \"product_image\": \"產品圖片\",\n    \"product_information\": \"產品資訊\",\n    \"product_total\": \"商品總數\",\n    \"quantity\": \"數量\",\n    \"price\": \"價格\",\n    \"price_regular\": \"定價\",\n    \"price_compare_at\": \"比較售價\",\n    \"price_sale\": \"促銷價\",\n    \"duties_and_taxes_included\": \"已包含關稅和稅額。\",\n    \"duties_included\": \"已包含關稅。\",\n    \"shipping_policy_html\": \"結帳時計算<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"taxes_included\": \"已包含稅額。\",\n    \"product_badge_sold_out\": \"售罄\",\n    \"product_badge_sale\": \"特賣\",\n    \"search_input_label\": \"搜尋\",\n    \"search_input_placeholder\": \"搜尋\",\n    \"search_results\": \"搜尋結果\",\n    \"search_results_label\": \"搜尋結果\",\n    \"search_results_no_results\": \"找不到「{{ terms }}」的相關結果。請試著搜尋其他內容。\",\n    \"search_results_resource_articles\": \"網誌文章\",\n    \"search_results_resource_collections\": \"商品系列\",\n    \"search_results_resource_pages\": \"頁面\",\n    \"search_results_resource_products\": \"商品\",\n    \"search_results_resource_queries\": \"搜尋建議\",\n    \"search_results_view_all\": \"檢視全部\",\n    \"search_results_view_all_button\": \"檢視全部\",\n    \"search_results_resource_products_count\": {\n      \"one\": \"{{ count }} 項商品\",\n      \"other\": \"{{ count }} 項商品\"\n    },\n    \"grid_view\": {\n      \"default_view\": \"預設\",\n      \"grid_fieldset\": \"欄網格\",\n      \"single_item\": \"單一\",\n      \"zoom_out\": \"縮小\"\n    },\n    \"unavailable\": \"不適用\",\n    \"collection_placeholder\": \"商品系列標題\",\n    \"product_card_placeholder\": \"產品名稱\",\n    \"recently_viewed_products\": \"最近檢視的項目\",\n    \"product_count\": \"商品數量\",\n    \"item_count\": {\n      \"one\": \"{{ count }} 個品項\",\n      \"other\": \"{{ count }} 個品項\"\n    },\n    \"errors\": \"錯誤\",\n    \"search\": \"搜尋\",\n    \"search_results_no_results_check_spelling\": \"找不到「{{ terms }}」的相關結果。請檢查拼字或使用其他字詞。\",\n    \"featured_products\": \"精選商品\",\n    \"price_from\": \"從 {{ price }} 起\",\n    \"filters\": \"篩選條件\",\n    \"no_products_found\": \"找不到任何商品。\",\n    \"price_filter_html\": \"最高價格為 {{ price }}\",\n    \"use_fewer_filters_html\": \"嘗試使用較少的篩選條件，或<a class=\\\"{{ class }}\\\" href=\\\"{{ link }}\\\">清除所有篩選條件</a>。\",\n    \"blog_details_separator\": \"|\",\n    \"account_title\": \"帳號\",\n    \"account_title_personalized\": \"{{ first_name }}，您好！\",\n    \"account_orders\": \"訂單\",\n    \"account_profile\": \"個人檔案\",\n    \"discount_code\": \"折扣代碼\",\n    \"duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"已包含關稅和稅額。結帳時計算運費。\",\n    \"duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"已包含關稅和稅額。結帳時計算運費。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"已包含關稅。結帳時計算運費。\",\n    \"duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"已包含關稅。結帳時計算運費。\",\n    \"pickup_available_at_html\": \"可提供取貨服務的地點：<b>{{ location }}</b>\",\n    \"pickup_available_in\": \"可提供取貨服務的時間：{{ pickup_time }}\",\n    \"pickup_not_available\": \"目前無法提供取貨服務\",\n    \"pickup_ready_in\": \"{{ pickup_time }}\",\n    \"read_more\": \"繼續閱讀…\",\n    \"taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html\": \"結帳時計算稅額和<a href=\\\"{{ link }}\\\">運費</a>。\",\n    \"taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts\": \"結帳時計算稅額和運費。\",\n    \"taxes_included_shipping_at_checkout_with_policy_without_discounts_html\": \"已包含稅額。結帳時計算運費。\",\n    \"taxes_included_shipping_at_checkout_without_policy_without_discounts\": \"已包含稅額。結帳時計算運費。\",\n    \"view_more_details\": \"檢視更多詳細資訊\",\n    \"wrong_password\": \"密碼錯誤\",\n    \"inventory_low_stock\": \"庫存不足\",\n    \"inventory_in_stock\": \"有庫存\",\n    \"inventory_out_of_stock\": \"無庫存\",\n    \"inventory_low_stock_show_count\": {\n      \"one\": \"尚餘 {{ count }}\",\n      \"other\": \"尚餘 {{ count }}\"\n    },\n    \"powered_by\": \"本商店技術支援來自\",\n    \"store_owner_link_html\": \"您是商店擁有人嗎？<a href=\\\"{{ link }}\\\">請在此登入</a>\",\n    \"shipping_discount_error\": \"新增地址後，結帳時將顯示運費折扣\",\n    \"discount_code_error\": \"折扣代碼無法套用至您的購物車\",\n    \"page_placeholder_title\": \"頁面標題\",\n    \"page_placeholder_content\": \"選取一個頁面，即可顯示其內容。\",\n    \"placeholder_image\": \"佔位符圖片\",\n    \"shipping_policy\": \"結帳時計算運費。\",\n    \"recipient_form_send_to\": \"傳送至\",\n    \"recipient_form_email_label\": \"收件者電子郵件\",\n    \"recipient_form_email_label_my_email\": \"我的電子郵件\",\n    \"recipient_form_email_address\": \"收件者電子郵件地址\",\n    \"recipient_form_name_label\": \"收件者姓名 (選填)\",\n    \"recipient_form_characters_used\": \"已使用 {{ used_chars }} 個字元/上限 {{ max_chars }} 個字元\",\n    \"recipient_form_send_on\": \"YYYY-MM-DD\",\n    \"recipient_form_send_on_label\": \"傳送時間 (選填)\",\n    \"recipient_form_message\": \"訊息 (選填)\",\n    \"recipient_form_fields_visible\": \"收件人表單欄位現已可見\",\n    \"recipient_form_fields_hidden\": \"收件人表單欄位現已隱藏\",\n    \"recipient_form_error\": \"提交表單時發生錯誤\",\n    \"product_custom_property_character_count\": \"已使用 {{ used_chars }} 個字元/上限 {{ max_chars }} 個字元\",\n    \"terms_and_policies\": \"條款及政策\",\n    \"pagination\": {\n      \"nav_label\": \"分頁導覽\",\n      \"previous\": \"上一頁\",\n      \"next\": \"下一頁\",\n      \"page\": \"第 {{ page }} 頁\"\n    },\n    \"volume_pricing_available\": \"提供批發價\",\n    \"volume_pricing\": \"批發價\",\n    \"at_price_each\": \"{{ price }}/每件\",\n    \"each\": \"({{ price }}/每件\",\n    \"each_abbreviation\": \"每件\",\n    \"price_at\": \"價格\",\n    \"price_range\": \"價格範圍\",\n    \"cancel\": \"取消\",\n    \"product_subtotal\": \"商品小計\",\n    \"quantity_per_item\": \"/件\",\n    \"remove_all\": \"全部移除\",\n    \"remove_all_items_confirmation\": \"是否要從購物車移除全部 {{ count }} 個品項？\",\n    \"remove_one_item_confirmation\": \"是否要從您的購物車移除 1 個品項？\",\n    \"total_items\": \"品項總數\",\n    \"variant\": \"子類\",\n    \"variant_total\": \"子類總計\",\n    \"view_cart\": \"檢視購物車\",\n    \"your_cart\": \"您的購物車\",\n    \"items_added_to_cart\": {\n      \"one\": \"1 個品項已加入購物車\",\n      \"other\": \"{{ count }} 個品項已加入購物車\"\n    },\n    \"item_count_cutoff\": \"超過 {{ count }} 個品項\"\n  },\n  \"gift_cards\": {\n    \"issued\": {\n      \"how_to_use_gift_card\": \"請在網路商店使用禮品卡代碼或在實體商店使用 QR 碼\",\n      \"title\": \"這是您在 {{ shop }} 餘額為 {{ value }} 的禮品卡！\",\n      \"subtext\": \"您的禮品卡\",\n      \"shop_link\": \"造訪網路商店\",\n      \"add_to_apple_wallet\": \"加入 Apple 錢包\",\n      \"qr_image_alt\": \"QR 碼：掃描以兌換禮品卡\",\n      \"copy_code\": \"複製禮品卡代碼\",\n      \"expiration_date\": \"於 {{ expires_on }}到期\",\n      \"copy_code_success\": \"已成功複製代碼\",\n      \"expired\": \"已到期\"\n    }\n  },\n  \"blogs\": {\n    \"article\": {\n      \"comment_author_separator\": \"•\",\n      \"comments_heading\": {\n        \"one\": \"{{ count }} 則留言\",\n        \"other\": \"{{ count }} 則留言\"\n      }\n    },\n    \"comment_form\": {\n      \"email\": \"電子郵件\",\n      \"error\": \"無法發布留言，請處理以下問題：\",\n      \"heading\": \"發表留言\",\n      \"message\": \"訊息\",\n      \"moderated\": \"請注意，留言須先通過審核才能發布。\",\n      \"name\": \"名稱\",\n      \"post\": \"發布留言\",\n      \"success_moderated\": \"已發布留言，正等待審核\",\n      \"success\": \"已發布留言\"\n    }\n  },\n  \"fields\": {\n    \"separator\": \"至\"\n  },\n  \"placeholders\": {\n    \"password\": \"密碼\",\n    \"search\": \"搜尋\",\n    \"product_title\": \"產品名稱\",\n    \"collection_title\": \"商品系列標題\",\n    \"blog_posts\": \"部落格貼文\",\n    \"blog_post_title\": \"標題\",\n    \"blog_post_author\": \"作者\",\n    \"blog_post_date\": \"日期\",\n    \"blog_post_description\": \"您部落格貼文的內容摘錄\"\n  },\n  \"products\": {\n    \"product\": {\n      \"add_to_cart\": \"加入購物車\",\n      \"adding_to_cart\": \"正在新增…\",\n      \"added_to_cart\": \"已放入購物車\",\n      \"add_to_cart_error\": \"加入購物車時發生錯誤\",\n      \"quantity_error_max\": \"此品項上限為 {{ maximum }}\",\n      \"sold_out\": \"售罄\",\n      \"unavailable\": \"無可用資料\",\n      \"quantity\": \"數量\",\n      \"quantity_increments\": \"{{ increment }} 的倍數\",\n      \"quantity_minimum\": \"最少 {{ minimum }} 個\",\n      \"quantity_maximum\": \"最多 {{ maximum }} 個\",\n      \"in_cart\": \"在購物車中\",\n      \"default_title\": \"預設標題\",\n      \"sticky_add_to_cart\": \"快速加入購物車列\"\n    }\n  }\n}\n"
  },
  {
    "path": "locales/zh-TW.schema.json",
    "content": "{\n  \"names\": {\n    \"404\": \"404\",\n    \"borders\": \"邊框\",\n    \"collapsible_row\": \"可摺疊列\",\n    \"colors\": \"顏色\",\n    \"custom_section\": \"自訂區段\",\n    \"icon\": \"圖示\",\n    \"logo_and_favicon\": \"標誌與 favicon\",\n    \"overlapping_blocks\": \"重疊區塊\",\n    \"product_buy_buttons\": \"購買按鈕\",\n    \"product_description\": \"說明\",\n    \"product_price\": \"價格\",\n    \"product_variant_picker\": \"子類選擇器\",\n    \"slideshow\": \"素材輪播\",\n    \"typography\": \"字型排版\",\n    \"video\": \"影片\",\n    \"slideshow_controls\": \"素材輪播控制項\",\n    \"size\": \"尺寸\",\n    \"spacing\": \"間距\",\n    \"product_recommendations\": \"推薦產品\",\n    \"product_media\": \"產品多媒體檔案\",\n    \"featured_collection\": \"精選商品系列\",\n    \"add_to_cart\": \"加入購物車\",\n    \"email_signup\": \"電子郵件訂閱\",\n    \"submit_button\": \"提交按鈕\",\n    \"grid_layout_selector\": \"網格版面配置選擇器\",\n    \"image\": \"圖片\",\n    \"list_items\": \"清單項目\",\n    \"facets\": \"多面向\",\n    \"variants\": \"子類\",\n    \"styles\": \"樣式\",\n    \"product_cards\": \"產品卡片\",\n    \"primary_button\": \"主要按鈕\",\n    \"secondary_button\": \"次要按鈕\",\n    \"popovers_and_modals\": \"快顯與互動視窗\",\n    \"buttons\": \"按鈕\",\n    \"inputs\": \"輸入項目\",\n    \"marquee\": \"跑馬燈\",\n    \"alternating_content_rows\": \"交錯列\",\n    \"pull_quote\": \"重點引言\",\n    \"contact_form\": \"聯絡表單\",\n    \"featured_product\": \"產品亮點\",\n    \"icons_with_text\": \"圖示加文字\",\n    \"accelerated_checkout\": \"加速結帳作業\",\n    \"accordion\": \"摺疊式\",\n    \"accordion_row\": \"摺疊式列\",\n    \"animations\": \"動畫\",\n    \"announcement\": \"公告\",\n    \"announcement_bar\": \"公告列\",\n    \"badges\": \"徽章\",\n    \"button\": \"按鈕\",\n    \"cart\": \"購物車\",\n    \"cart_items\": \"購物車商品項目\",\n    \"cart_products\": \"購物車商品\",\n    \"cart_title\": \"購物車\",\n    \"collection\": \"商品系列\",\n    \"collection_card\": \"商品系列卡片\",\n    \"collection_columns\": \"商品系列欄\",\n    \"collection_container\": \"商品系列\",\n    \"collection_description\": \"商品系列說明\",\n    \"collection_image\": \"商品系列圖片\",\n    \"collection_info\": \"商品系列資訊\",\n    \"collection_list\": \"商品系列清單\",\n    \"collections\": \"商品系列\",\n    \"content\": \"內容\",\n    \"content_grid\": \"內容網格\",\n    \"details\": \"詳細資訊\",\n    \"divider\": \"分隔線\",\n    \"filters\": \"篩選與排序\",\n    \"follow_on_shop\": \"在 Shop 上追蹤\",\n    \"footer\": \"頁尾\",\n    \"footer_utilities\": \"頁尾工具\",\n    \"group\": \"群組\",\n    \"header\": \"頁首\",\n    \"heading\": \"標題\",\n    \"icons\": \"圖示\",\n    \"image_with_text\": \"附文字圖像\",\n    \"input\": \"輸入\",\n    \"logo\": \"標誌\",\n    \"magazine_grid\": \"雜誌風格網格\",\n    \"media\": \"多媒體檔案\",\n    \"menu\": \"選單\",\n    \"mobile_layout\": \"行動版面配置\",\n    \"payment_icons\": \"付款圖示\",\n    \"popup_link\": \"彈出式視窗連結\",\n    \"predictive_search\": \"搜尋快顯\",\n    \"predictive_search_empty\": \"搜尋預測無結果\",\n    \"price\": \"價格\",\n    \"product\": \"產品\",\n    \"product_card\": \"產品卡片\",\n    \"product_card_media\": \"多媒體檔案\",\n    \"product_card_rendering\": \"產品卡片呈現方式\",\n    \"product_grid\": \"網格\",\n    \"product_grid_main\": \"產品網格\",\n    \"product_image\": \"產品圖片\",\n    \"product_information\": \"產品資訊\",\n    \"product_list\": \"精選商品系列\",\n    \"product_review_stars\": \"評分星等\",\n    \"quantity\": \"數量\",\n    \"row\": \"列\",\n    \"search\": \"搜尋\",\n    \"section\": \"區段\",\n    \"selected_variants\": \"已選子類\",\n    \"slide\": \"投影片\",\n    \"social_media_links\": \"社群媒體連結\",\n    \"spacer\": \"間隔\",\n    \"steps\": \"步驟\",\n    \"summary\": \"摘要\",\n    \"swatches\": \"色樣\",\n    \"testimonials\": \"顧客評語\",\n    \"text\": \"文字\",\n    \"title\": \"標題\",\n    \"utilities\": \"工具\",\n    \"search_input\": \"搜尋輸入\",\n    \"search_results\": \"搜尋結果\",\n    \"read_only\": \"唯讀\",\n    \"collection_title\": \"商品系列標題\",\n    \"collections_bento\": \"商品系列清單：便當分格\",\n    \"faq_section\": \"常見問題\",\n    \"hero\": \"主視覺\",\n    \"jumbo_text\": \"特大文字\",\n    \"view_all_button\": \"查看全部\",\n    \"video_section\": \"影片\",\n    \"custom_liquid\": \"自訂 Liquid\",\n    \"blog\": \"網誌\",\n    \"blog_post\": \"網誌文章\",\n    \"blog_posts\": \"網誌文章\",\n    \"caption\": \"圖說\",\n    \"collection_card_image\": \"圖片\",\n    \"collection_links\": \"商品系列連結\",\n    \"collection_links_spotlight\": \"商品系列連結：Spotlight\",\n    \"collection_links_text\": \"商品系列連結：文字\",\n    \"collections_carousel\": \"商品系列清單：輪播\",\n    \"collections_editorial\": \"商品系列清單：編輯風格\",\n    \"collections_grid\": \"商品系列清單：網格\",\n    \"copyright\": \"著作權\",\n    \"count\": \"計數\",\n    \"divider_section\": \"分隔線\",\n    \"drawers\": \"抽屜\",\n    \"editorial\": \"編輯風格\",\n    \"editorial_jumbo_text\": \"編輯風格：特大文字\",\n    \"hero_marquee\": \"主視覺：跑馬燈\",\n    \"input_fields\": \"輸入欄位\",\n    \"local_pickup\": \"店內取貨\",\n    \"marquee_section\": \"跑馬燈\",\n    \"media_with_text\": \"多媒體附文字\",\n    \"page\": \"頁面\",\n    \"page_content\": \"內容\",\n    \"page_layout\": \"頁面版面配置\",\n    \"policy_list\": \"政策連結\",\n    \"prices\": \"價格\",\n    \"products_carousel\": \"精選商品系列：輪播\",\n    \"products_editorial\": \"精選商品系列：編輯風格\",\n    \"products_grid\": \"精選商品系列：網格\",\n    \"social_link\": \"社群連結\",\n    \"split_showcase\": \"分割展示\",\n    \"variant_pickers\": \"子類選擇器\",\n    \"pills\": \"膠囊標籤\",\n    \"product_title\": \"產品名稱\",\n    \"large_logo\": \"大型標誌\",\n    \"product_list_button\": \"「查看全部」按鈕\",\n    \"product_inventory\": \"產品庫存\",\n    \"description\": \"說明\",\n    \"featured_image\": \"主要圖片\",\n    \"multicolumn\": \"多欄\",\n    \"rich_text_section\": \"富文本\",\n    \"product_custom_property\": \"特別指示\",\n    \"hero_bottom_aligned\": \"主視覺：底部對齊\",\n    \"blog_card\": \"網誌卡片\",\n    \"blog_posts_grid\": \"網誌文章：網格\",\n    \"blog_posts_carousel\": \"網誌文章：輪播\",\n    \"blog_posts_editorial\": \"網誌文章：編輯風格\",\n    \"excerpt\": \"摘要\",\n    \"footer_password\": \"密碼頁面頁尾\",\n    \"policies_and_links\": \"政策與連結\",\n    \"card\": \"卡片\",\n    \"carousel\": \"輪播\",\n    \"carousel_content\": \"輪播內容\",\n    \"quick_order_list\": \"快速訂購清單\",\n    \"column\": \"欄\",\n    \"comparison_slider\": \"比較滑桿\",\n    \"slideshow_full_frame\": \"素材輪播：滿版\",\n    \"slideshow_inset\": \"素材輪播：內嵌\",\n    \"image_compare\": \"圖片比較\",\n    \"subheading\": \"副標題\",\n    \"featured_product_information\": \"精選商品\",\n    \"product_hotspots\": \"商品熱點\",\n    \"hotspot_product\": \"熱點\",\n    \"product_sku\": \"存貨單位 (SKU)\",\n    \"layered_slideshow\": \"分層輪播\"\n  },\n  \"settings\": {\n    \"alignment\": \"對齊\",\n    \"autoplay\": \"自動播放\",\n    \"background\": \"背景\",\n    \"border_radius\": \"圓角半徑\",\n    \"border_width\": \"邊框粗細\",\n    \"borders\": \"邊框\",\n    \"bottom_padding\": \"下方內距\",\n    \"button\": \"按鈕\",\n    \"color\": \"顏色\",\n    \"colors\": \"顏色\",\n    \"content_alignment\": \"內容對齊\",\n    \"content_direction\": \"內容方向\",\n    \"content_position\": \"內容位置\",\n    \"cover_image_size\": \"封面圖片大小\",\n    \"cover_image\": \"封面圖片\",\n    \"custom_minimum_height\": \"自訂最小高度\",\n    \"custom_width\": \"自訂寬度\",\n    \"enable_video_looping\": \"影片循環播放\",\n    \"favicon\": \"favicon\",\n    \"font_family\": \"字型系列\",\n    \"gap\": \"間距\",\n    \"geometric_translate_y\": \"幾何平移 Y\",\n    \"heading\": \"標題\",\n    \"icon\": \"圖示\",\n    \"image\": \"圖片\",\n    \"image_icon\": \"圖片圖示\",\n    \"image_opacity\": \"圖片不透明度\",\n    \"image_position\": \"圖片位置\",\n    \"image_ratio\": \"圖片長寬比\",\n    \"label\": \"標籤\",\n    \"line_height\": \"行高\",\n    \"link\": \"連結\",\n    \"layout_gap\": \"版面配置間距\",\n    \"make_section_full_width\": \"將區段設為全寬\",\n    \"minimum_height\": \"最小高度\",\n    \"opacity\": \"不透明度\",\n    \"overlay_opacity\": \"疊加層不透明度\",\n    \"padding\": \"內距\",\n    \"primary_color\": \"連結顏色\",\n    \"product\": \"產品\",\n    \"section_width\": \"區段寬度\",\n    \"size\": \"大小\",\n    \"slide_spacing\": \"投影片間距\",\n    \"slide_width\": \"投影片寬度\",\n    \"slideshow_fullwidth\": \"投影片全寬\",\n    \"style\": \"樣式\",\n    \"text\": \"文字\",\n    \"text_case\": \"大小寫\",\n    \"top_padding\": \"上方內距\",\n    \"video\": \"影片\",\n    \"video_alt_text\": \"替代文字\",\n    \"video_loop\": \"重複播放影片\",\n    \"video_position\": \"影片位置\",\n    \"width\": \"寬度\",\n    \"z_index\": \"Z-index\",\n    \"limit_content_width\": \"限制內容寬度\",\n    \"color_scheme\": \"顏色配置\",\n    \"inherit_color_scheme\": \"繼承顏色配置\",\n    \"product_count\": \"產品數\",\n    \"product_type\": \"產品類型\",\n    \"content_width\": \"內容寬度\",\n    \"collection\": \"商品系列\",\n    \"enable_sticky_content\": \"電腦版固定內容\",\n    \"error_color\": \"錯誤顏色\",\n    \"success_color\": \"成功顏色\",\n    \"primary_font\": \"主要字型\",\n    \"secondary_font\": \"次要字型\",\n    \"tertiary_font\": \"第三字型\",\n    \"columns\": \"欄\",\n    \"items_to_show\": \"顯示項目數\",\n    \"layout\": \"版面配置\",\n    \"layout_type\": \"類型\",\n    \"show_grid_layout_selector\": \"顯示網格版面配置選擇器\",\n    \"view_more_show\": \"顯示「查看更多」按鈕\",\n    \"image_gap\": \"圖片間距\",\n    \"width_desktop\": \"電腦版寬度\",\n    \"width_mobile\": \"行動版寬度\",\n    \"border_style\": \"邊框樣式\",\n    \"height\": \"高度\",\n    \"thickness\": \"粗細\",\n    \"stroke\": \"線條粗細\",\n    \"filter_style\": \"篩選器樣式\",\n    \"swatches\": \"色樣\",\n    \"quick_add_colors\": \"快速加入按鈕顏色配置\",\n    \"divider_color\": \"分隔線顏色\",\n    \"border_opacity\": \"邊框不透明度\",\n    \"hover_background\": \"懸停背景\",\n    \"hover_borders\": \"懸停邊框\",\n    \"hover_text\": \"懸停文字\",\n    \"primary_hover_color\": \"懸停連結顏色\",\n    \"primary_button_text\": \"主要按鈕文字\",\n    \"primary_button_background\": \"主要按鈕背景\",\n    \"primary_button_border\": \"主要按鈕邊框\",\n    \"secondary_button_text\": \"次要按鈕文字\",\n    \"secondary_button_background\": \"次要按鈕背景\",\n    \"secondary_button_border\": \"次要按鈕邊框\",\n    \"shadow_color\": \"陰影顏色\",\n    \"mobile_logo_image\": \"行動版標誌\",\n    \"video_autoplay\": \"自動播放\",\n    \"video_cover_image\": \"封面圖片\",\n    \"video_external_url\": \"網址\",\n    \"video_source\": \"來源\",\n    \"first_row_media_position\": \"第一列多媒體檔案位置\",\n    \"accordion\": \"摺疊式\",\n    \"aspect_ratio\": \"長寬比\",\n    \"auto_rotate_announcements\": \"自動輪播公告\",\n    \"auto_rotate_slides\": \"自動輪播投影片\",\n    \"background_color\": \"背景顏色\",\n    \"badge_corner_radius\": \"圓角半徑\",\n    \"badge_position\": \"卡片上的位置\",\n    \"badge_sale_color_scheme\": \"特價\",\n    \"badge_sold_out_color_scheme\": \"售罄\",\n    \"behavior\": \"行為\",\n    \"blur\": \"陰影模糊\",\n    \"border\": \"邊框\",\n    \"bottom\": \"下方\",\n    \"card_image_height\": \"產品圖片高度\",\n    \"carousel_on_mobile\": \"行動版輪播\",\n    \"cart_count\": \"購物車品項數\",\n    \"cart_items\": \"購物車品項\",\n    \"cart_related_products\": \"相關產品\",\n    \"cart_title\": \"購物車\",\n    \"cart_total\": \"購物車總計\",\n    \"cart_type\": \"類型\",\n    \"case\": \"大小寫\",\n    \"checkout_buttons\": \"加速結帳作業按鈕\",\n    \"collection_list\": \"商品系列\",\n    \"collection_templates\": \"商品系列範本\",\n    \"content\": \"內容\",\n    \"corner_radius\": \"圓角半徑\",\n    \"country_region\": \"國家/地區\",\n    \"currency_code\": \"幣別代碼\",\n    \"custom_height\": \"自訂高度\",\n    \"custom_mobile_size\": \"自訂行動版大小\",\n    \"desktop_height\": \"電腦版高度\",\n    \"direction\": \"方向\",\n    \"display\": \"顯示\",\n    \"divider_thickness\": \"分隔線粗細\",\n    \"divider\": \"分隔線\",\n    \"dividers\": \"分隔線\",\n    \"drop_shadow\": \"投影\",\n    \"empty_state_collection_info\": \"在輸入搜尋前顯示\",\n    \"empty_state_collection\": \"空白狀態商品系列\",\n    \"enable_filtering\": \"篩選\",\n    \"enable_grid_density\": \"網格版面配置控制\",\n    \"enable_sorting\": \"排序\",\n    \"enable_zoom\": \"啟用縮放\",\n    \"equal_columns\": \"等寬欄\",\n    \"expand_first_group\": \"展開第一個群組\",\n    \"extend_media_to_screen_edge\": \"將多媒體檔案延伸至螢幕邊緣\",\n    \"extend_summary\": \"延伸至螢幕邊緣\",\n    \"extra_large\": \"特大\",\n    \"extra_small\": \"特小\",\n    \"fixed_height\": \"像素高度\",\n    \"fixed_width\": \"像素寬度\",\n    \"flag\": \"國旗圖示\",\n    \"font_price\": \"價格字型\",\n    \"font_weight\": \"字重\",\n    \"font\": \"字型\",\n    \"full_width_first_image\": \"第一張圖片全寬\",\n    \"full_width_on_mobile\": \"行動版全寬\",\n    \"heading_preset\": \"標題預設\",\n    \"hide_padding\": \"隱藏內距\",\n    \"hide_unselected_variant_media\": \"隱藏未選取子類的多媒體檔案\",\n    \"horizontal_gap\": \"水平間距\",\n    \"horizontal_offset\": \"陰影水平位移\",\n    \"hover_behavior\": \"懸停行為\",\n    \"icon_background\": \"圖示背景\",\n    \"icons\": \"圖示\",\n    \"image_border_radius\": \"圖片圓角半徑\",\n    \"installments\": \"分期付款\",\n    \"integrated_button\": \"內嵌按鈕\",\n    \"language_selector\": \"語言選擇器\",\n    \"large\": \"大\",\n    \"left_padding\": \"左側內距\",\n    \"left\": \"左側\",\n    \"letter_spacing\": \"字距\",\n    \"limit_media_to_screen_height\": \"限制為螢幕高度\",\n    \"limit_product_details_width\": \"限制產品詳細資訊寬度\",\n    \"link_preset\": \"連結預設\",\n    \"links\": \"連結\",\n    \"logo_font\": \"標誌字型\",\n    \"logo\": \"標誌\",\n    \"loop\": \"循環\",\n    \"make_details_sticky_desktop\": \"電腦版固定\",\n    \"max_width\": \"最大寬度\",\n    \"media_height\": \"多媒體檔案高度\",\n    \"media_overlay\": \"多媒體檔案疊加層\",\n    \"media_position\": \"多媒體檔案位置\",\n    \"media_type\": \"多媒體檔案類型\",\n    \"media_width\": \"多媒體檔案寬度\",\n    \"menu\": \"選單\",\n    \"mobile_columns\": \"行動版欄\",\n    \"mobile_height\": \"行動版高度\",\n    \"mobile_quick_add\": \"行動版快速加入\",\n    \"motion_direction\": \"動態方向\",\n    \"motion\": \"動態\",\n    \"movement_direction\": \"移動方向\",\n    \"navigation_bar_color_scheme\": \"導覽列顏色配置\",\n    \"navigation_bar\": \"導覽列\",\n    \"navigation\": \"導覽\",\n    \"open_new_tab\": \"在新分頁中開啟連結\",\n    \"overlay_color\": \"疊加層顏色\",\n    \"overlay\": \"疊加層\",\n    \"padding_bottom\": \"下方內距\",\n    \"padding_horizontal\": \"水平內距\",\n    \"padding_top\": \"上方內距\",\n    \"page_width\": \"頁面寬度\",\n    \"pagination\": \"分頁\",\n    \"percent_height\": \"百分比高度\",\n    \"percent_size_mobile\": \"百分比大小\",\n    \"percent_size\": \"百分比大小\",\n    \"percent_width\": \"百分比寬度\",\n    \"pixel_size_mobile\": \"像素大小\",\n    \"pixel_size\": \"像素大小\",\n    \"placement\": \"展示位置\",\n    \"position\": \"位置\",\n    \"preset\": \"預設\",\n    \"product_cards\": \"產品卡片\",\n    \"product_pages\": \"產品頁面\",\n    \"product_templates\": \"產品範本\",\n    \"products\": \"產品\",\n    \"quick_add\": \"快速加入\",\n    \"ratio\": \"比例\",\n    \"regular\": \"一般\",\n    \"review_count\": \"評論數\",\n    \"right\": \"右側\",\n    \"row_height\": \"列高度\",\n    \"row\": \"列\",\n    \"seller_note\": \"允許顧客留給賣家的備註\",\n    \"shape\": \"形狀\",\n    \"show_as_accordion\": \"行動版以摺疊式顯示\",\n    \"show_sale_price_first\": \"優先顯示促銷價\",\n    \"show_tax_info\": \"稅務資訊\",\n    \"show\": \"顯示\",\n    \"size_mobile\": \"行動版大小\",\n    \"small\": \"小\",\n    \"speed\": \"速度\",\n    \"statement\": \"對帳單\",\n    \"sticky_header\": \"固定頁首\",\n    \"text_hierarchy\": \"文字階層\",\n    \"text_presets\": \"文字預設\",\n    \"title\": \"標題\",\n    \"top\": \"上方\",\n    \"type\": \"類型\",\n    \"type_preset\": \"文字預設\",\n    \"underline_thickness\": \"底線粗細\",\n    \"unit\": \"單位\",\n    \"variant_images\": \"子類圖片\",\n    \"vendor\": \"廠商\",\n    \"vertical_gap\": \"垂直間距\",\n    \"vertical_offset\": \"陰影垂直位移\",\n    \"vertical_on_mobile\": \"行動版垂直排列\",\n    \"view_all_as_last_card\": \"將「查看全部」設為最後一張卡片\",\n    \"weight\": \"字重\",\n    \"wrap\": \"換行\",\n    \"read_only\": \"唯讀\",\n    \"always_stack_buttons\": \"一律將按鈕堆疊\",\n    \"custom_mobile_width\": \"自訂行動版寬度\",\n    \"gradient_direction\": \"漸層方向\",\n    \"overlay_style\": \"疊加層樣式\",\n    \"shadow_opacity\": \"陰影不透明度\",\n    \"show_filter_label\": \"為已套用的篩選器顯示文字標籤\",\n    \"show_swatch_label\": \"色樣的文字標籤\",\n    \"transparent_background\": \"透明背景\",\n    \"account\": \"帳號\",\n    \"align_baseline\": \"文字基線對齊\",\n    \"add_discount_code\": \"允許在購物車使用折扣碼\",\n    \"background_overlay\": \"背景疊加層\",\n    \"background_media\": \"背景多媒體檔案\",\n    \"border_thickness\": \"邊框粗細\",\n    \"bottom_row\": \"底部列\",\n    \"button_text_case\": \"文字大小寫\",\n    \"card_size\": \"卡片大小\",\n    \"auto_open_cart_drawer\": \"「加入購物車」時自動開啟抽屜式購物車\",\n    \"collection_count\": \"商品系列數\",\n    \"custom_liquid\": \"Liquid 程式碼\",\n    \"default\": \"預設\",\n    \"default_logo\": \"預設標誌\",\n    \"divider_width\": \"分隔線寬度\",\n    \"headings\": \"標題\",\n    \"hide_logo_on_home_page\": \"在首頁隱藏標誌\",\n    \"horizontal_padding\": \"水平內距\",\n    \"inverse\": \"反白\",\n    \"inverse_logo\": \"反白標誌\",\n    \"layout_style\": \"樣式\",\n    \"length\": \"長度\",\n    \"mobile_card_size\": \"行動版卡片大小\",\n    \"mobile_pagination\": \"行動版分頁\",\n    \"open_row_by_default\": \"預設展開列\",\n    \"page_transition_enabled\": \"頁面轉場\",\n    \"right_padding\": \"右側內距\",\n    \"search\": \"搜尋\",\n    \"search_icon\": \"搜尋圖示\",\n    \"search_position\": \"位置\",\n    \"search_row\": \"列\",\n    \"show_author\": \"作者\",\n    \"show_alignment\": \"顯示對齊方式\",\n    \"show_count\": \"顯示數量\",\n    \"show_date\": \"日期\",\n    \"show_pickup_availability\": \"顯示取貨供貨情況\",\n    \"show_search\": \"顯示搜尋\",\n    \"use_inverse_logo\": \"使用反白標誌\",\n    \"vertical_padding\": \"垂直內距\",\n    \"visibility\": \"可見度\",\n    \"product_corner_radius\": \"產品圓角半徑\",\n    \"card_corner_radius\": \"卡片圓角半徑\",\n    \"alignment_mobile\": \"行動版對齊\",\n    \"animation_repeat\": \"重複播放動畫\",\n    \"blurred_reflection\": \"模糊反射\",\n    \"card_hover_effect\": \"卡片游標懸停效果\",\n    \"collection_title_case\": \"商品系列標題大小寫\",\n    \"inventory_threshold\": \"低庫存臨界值\",\n    \"page\": \"頁面\",\n    \"product_and_card_title_case\": \"產品與卡片標題大小寫\",\n    \"product_title_case\": \"產品標題大小寫\",\n    \"reflection_opacity\": \"反射不透明度\",\n    \"show_inventory_quantity\": \"顯示低庫存數量\",\n    \"text_label_case\": \"文字標籤大小寫\",\n    \"transition_to_main_product\": \"產品卡片到產品頁面的轉場\",\n    \"show_second_image_on_hover\": \"游標懸停時顯示第二張圖片\",\n    \"media\": \"多媒體檔案\",\n    \"product_card_carousel\": \"顯示輪播\",\n    \"media_fit\": \"多媒體檔案適應方式\",\n    \"scroll_speed\": \"距離下一則公告的時間\",\n    \"show_powered_by_shopify\": \"顯示「Shopify 技術支援」\",\n    \"gift_card_form\": \"禮品卡表單\",\n    \"seller_note_open_by_default\": \"預設展開給賣家的備註\",\n    \"add_to_cart_animation\": \"加入購物車\",\n    \"custom_link\": \"自訂連結\",\n    \"product_custom_property\": {\n      \"heading\": \"標題\",\n      \"description\": \"說明\",\n      \"key\": \"屬性名稱\",\n      \"key_info\": \"不得留白，且不得在各區塊間重複。會顯示在購物車、結帳頁面與訂單詳情中。\",\n      \"placeholder_text\": \"預留文字\",\n      \"default_heading\": \"自訂您的產品\",\n      \"default_placeholder\": \"輸入您的特別指示\",\n      \"default_property_key\": \"特別指示\",\n      \"max_length\": \"最多字元數\",\n      \"required\": \"必須輸入才能將品項加入購物車\",\n      \"input_type\": \"輸入類型\",\n      \"input_type_text\": \"文字\",\n      \"input_type_checkbox\": \"核取方塊\",\n      \"content_settings\": \"內容設定\",\n      \"buyers_input\": \"買家輸入\",\n      \"checkbox_label\": \"核取方塊標籤\",\n      \"default_checkbox_label\": \"包含禮品包裝\",\n      \"heading_preset\": \"標題\",\n      \"description_preset\": \"說明\",\n      \"input_preset\": \"輸入欄位\",\n      \"checkbox_preset\": \"核取方塊標籤\"\n    },\n    \"blog\": \"網誌\",\n    \"post_count\": \"文章數\",\n    \"animation\": \"動畫\",\n    \"top_level_size\": \"最上層大小\",\n    \"empty_cart_button_link\": \"購物車為空時的按鈕連結\",\n    \"auto_load_products\": \"捲動時自動載入產品\",\n    \"products_per_page\": \"每頁產品數\",\n    \"custom_mobile_media\": \"在行動裝置上顯示不同的多媒體檔案\",\n    \"stack_media_on_mobile\": \"堆疊多媒體\",\n    \"full_frame_on_mobile\": \"行動版滿版寬度\",\n    \"skus\": \"存貨單位 (SKU)\",\n    \"variant_per_page\": \"每頁子類數量\",\n    \"image_1\": \"圖片 1\",\n    \"image_2\": \"圖片 2\",\n    \"media_type_1\": \"多媒體檔案類型\",\n    \"media_type_2\": \"多媒體檔案 2 類型\",\n    \"after_image\": \"比較後圖片\",\n    \"before_image\": \"比較前圖片\",\n    \"cs_slider_style\": \"滑桿樣式\",\n    \"cs_slider_color\": \"滑桿顏色\",\n    \"cs_slider_inner_color\": \"滑桿內部顏色\",\n    \"text_on_images\": \"圖片上的文字\",\n    \"card_height\": \"卡片高度\",\n    \"submenu_size\": \"子選單大小\",\n    \"desktop_position\": \"電腦版位置\",\n    \"desktop_pagination\": \"電腦版分頁\",\n    \"bullseye_color\": \"內部顏色\",\n    \"hotspot_color\": \"熱點顏色\",\n    \"product_price_typography\": \"商品價格文字樣式\",\n    \"product_title_typography\": \"產品名稱文字樣式\",\n    \"x_position\": \"水平位置\",\n    \"y_position\": \"垂直位置\",\n    \"enable_sticky_add_to_cart\": \"固定加入購物車列\",\n    \"sticky_add_to_cart\": \"固定加入購物車\",\n    \"actions_display_style\": \"選單樣式\"\n  },\n  \"options\": {\n    \"apple\": \"Apple\",\n    \"arrow\": \"箭頭\",\n    \"auto\": \"自動\",\n    \"banana\": \"香蕉\",\n    \"bottle\": \"瓶子\",\n    \"box\": \"方塊\",\n    \"buttons\": \"按鈕\",\n    \"carrot\": \"紅蘿蔔\",\n    \"center\": \"置中\",\n    \"chat_bubble\": \"聊天泡泡\",\n    \"clipboard\": \"剪貼簿\",\n    \"contain\": \"完整顯示\",\n    \"counter\": \"計數器\",\n    \"cover\": \"填滿\",\n    \"custom\": \"自訂\",\n    \"dairy_free\": \"無乳製\",\n    \"dairy\": \"乳製品\",\n    \"default\": \"預設\",\n    \"dropdowns\": \"下拉式選單\",\n    \"dots\": \"圓點\",\n    \"dryer\": \"烘衣機\",\n    \"end\": \"末端對齊\",\n    \"eye\": \"眼睛\",\n    \"facebook\": \"Facebook\",\n    \"fill\": \"填滿\",\n    \"fire\": \"火焰\",\n    \"fit\": \"貼齊\",\n    \"full\": \"全寬\",\n    \"full_and_page\": \"全幅背景，頁面寬度的內容\",\n    \"gluten_free\": \"無麩質\",\n    \"heading\": \"標題\",\n    \"heart\": \"愛心\",\n    \"horizontal\": \"水平\",\n    \"instagram\": \"Instagram\",\n    \"iron\": \"熨斗\",\n    \"landscape\": \"橫向\",\n    \"large\": \"大\",\n    \"leaf\": \"葉子\",\n    \"leather\": \"皮革\",\n    \"lg\": \"LG\",\n    \"lightning_bolt\": \"閃電\",\n    \"link\": \"連結\",\n    \"lipstick\": \"口紅\",\n    \"lock\": \"鎖頭\",\n    \"lowercase\": \"小寫\",\n    \"m\": \"M\",\n    \"map_pin\": \"地圖圖釘\",\n    \"medium\": \"中\",\n    \"none\": \"無\",\n    \"numbers\": \"數字\",\n    \"nut_free\": \"無堅果\",\n    \"outline\": \"外框\",\n    \"page\": \"頁面\",\n    \"pants\": \"長褲\",\n    \"paw_print\": \"腳印\",\n    \"pepper\": \"胡椒\",\n    \"perfume\": \"香水\",\n    \"pinterest\": \"Pinterest\",\n    \"plane\": \"飛機\",\n    \"plant\": \"植物\",\n    \"portrait\": \"直向\",\n    \"price_tag\": \"價格標籤\",\n    \"question_mark\": \"問號\",\n    \"recycle\": \"回收\",\n    \"return\": \"返回\",\n    \"ruler\": \"直尺\",\n    \"s\": \"S\",\n    \"sentence\": \"句首大寫\",\n    \"serving_dish\": \"餐盤\",\n    \"shirt\": \"襯衫\",\n    \"shoe\": \"鞋子\",\n    \"silhouette\": \"剪影\",\n    \"small\": \"小\",\n    \"snapchat\": \"Snapchat\",\n    \"snowflake\": \"雪花\",\n    \"solid\": \"實色\",\n    \"space_between\": \"兩端對齊\",\n    \"square\": \"正方形\",\n    \"star\": \"星形\",\n    \"start\": \"起始\",\n    \"stopwatch\": \"秒錶\",\n    \"tiktok\": \"TikTok\",\n    \"truck\": \"貨車\",\n    \"tumblr\": \"Tumblr\",\n    \"twitter\": \"X（Twitter）\",\n    \"uppercase\": \"全部大寫\",\n    \"vertical\": \"垂直\",\n    \"vimeo\": \"Vimeo\",\n    \"washing\": \"洗滌\",\n    \"circle\": \"圓形\",\n    \"swatches\": \"色樣\",\n    \"full_and_page_offset_left\": \"全幅背景，頁面寬度的內容，向左偏移\",\n    \"full_and_page_offset_right\": \"全幅背景，頁面寬度的內容，向右偏移\",\n    \"offset_left\": \"向左偏移\",\n    \"offset_right\": \"向右偏移\",\n    \"page_center_aligned\": \"頁面，置中對齊\",\n    \"page_left_aligned\": \"頁面，靠左對齊\",\n    \"page_right_aligned\": \"頁面，靠右對齊\",\n    \"button\": \"按鈕\",\n    \"caption\": \"圖說\",\n    \"h1\": \"標題 1\",\n    \"h2\": \"標題 2\",\n    \"h3\": \"標題 3\",\n    \"h4\": \"標題 4\",\n    \"h5\": \"標題 5\",\n    \"h6\": \"標題 6\",\n    \"paragraph\": \"段落\",\n    \"primary\": \"主要\",\n    \"secondary\": \"次要\",\n    \"tertiary\": \"第三級\",\n    \"chevron_left\": \"向左山形箭頭\",\n    \"chevron_right\": \"向右山形箭頭\",\n    \"diamond\": \"鑽石\",\n    \"grid\": \"網格\",\n    \"parallelogram\": \"平行四邊形\",\n    \"rounded\": \"圓角\",\n    \"fit_content\": \"貼齊\",\n    \"pills\": \"膠囊標籤\",\n    \"heavy\": \"粗線條\",\n    \"thin\": \"極細\",\n    \"drawer\": \"抽屜\",\n    \"preview\": \"預覽\",\n    \"text\": \"文字\",\n    \"video_uploaded\": \"已上傳\",\n    \"video_external_url\": \"外部網址\",\n    \"aspect_ratio\": \"寬高比\",\n    \"fixed\": \"固定\",\n    \"pixel\": \"像素\",\n    \"percent\": \"百分比\",\n    \"above_carousel\": \"輪播上方\",\n    \"all\": \"全部\",\n    \"up\": \"向上\",\n    \"down\": \"向下\",\n    \"always\": \"一律\",\n    \"arrows_large\": \"大型箭頭\",\n    \"arrows\": \"箭頭\",\n    \"balance\": \"平衡\",\n    \"bento\": \"便當分格\",\n    \"black\": \"黑色\",\n    \"bluesky\": \"Bluesky\",\n    \"body_large\": \"內文（大）\",\n    \"body_regular\": \"內文（一般）\",\n    \"body_small\": \"內文（小）\",\n    \"bold\": \"粗體\",\n    \"bottom_left\": \"左下\",\n    \"bottom_right\": \"右下\",\n    \"bottom\": \"底部\",\n    \"capitalize\": \"每字首大寫\",\n    \"caret\": \"插入符號\",\n    \"carousel\": \"輪播\",\n    \"check_box\": \"核取方塊\",\n    \"chevron_large\": \"大型山形箭頭\",\n    \"chevron\": \"山形箭頭\",\n    \"chevrons\": \"山形箭頭\",\n    \"classic\": \"經典\",\n    \"collection_images\": \"商品系列圖片\",\n    \"color\": \"顏色\",\n    \"complementary\": \"配套\",\n    \"dissolve\": \"淡入淡出\",\n    \"dotted\": \"點狀\",\n    \"editorial\": \"編輯風格\",\n    \"extra_large\": \"特大\",\n    \"extra_small\": \"特小\",\n    \"featured_collections\": \"精選商品系列\",\n    \"featured_products\": \"精選產品\",\n    \"font_primary\": \"主要\",\n    \"font_secondary\": \"次要\",\n    \"font_tertiary\": \"第三\",\n    \"forward\": \"向前\",\n    \"full_screen\": \"全螢幕\",\n    \"gradient\": \"漸層\",\n    \"heading_extra_large\": \"標題（特大）\",\n    \"heading_extra_small\": \"標題（特小）\",\n    \"heading_large\": \"標題（大）\",\n    \"heading_regular\": \"標題（一般）\",\n    \"heading_small\": \"標題（小）\",\n    \"icon\": \"圖示\",\n    \"image\": \"圖片\",\n    \"input\": \"輸入\",\n    \"inside_carousel\": \"輪播內部\",\n    \"inverse_large\": \"反白大型\",\n    \"inverse\": \"反白\",\n    \"large_arrows\": \"大型箭頭\",\n    \"large_chevrons\": \"大型山形箭頭\",\n    \"left\": \"左\",\n    \"light\": \"細\",\n    \"linkedin\": \"LinkedIn\",\n    \"loose\": \"寬鬆\",\n    \"media_first\": \"先顯示多媒體檔案\",\n    \"media_second\": \"後顯示多媒體檔案\",\n    \"modal\": \"互動視窗\",\n    \"narrow\": \"窄\",\n    \"never\": \"永不\",\n    \"next_to_carousel\": \"輪播旁邊\",\n    \"normal\": \"一般\",\n    \"nowrap\": \"不換行\",\n    \"off_media\": \"不在多媒體上\",\n    \"on_media\": \"於多媒體上\",\n    \"on_scroll_up\": \"向上捲動時\",\n    \"one_half\": \"1/2\",\n    \"one_number\": \"1\",\n    \"one_third\": \"1/3\",\n    \"pill\": \"膠囊\",\n    \"plus\": \"加號\",\n    \"pretty\": \"漂亮\",\n    \"price\": \"價格\",\n    \"primary_style\": \"主要樣式\",\n    \"rectangle\": \"矩形\",\n    \"regular\": \"一般\",\n    \"related\": \"相關\",\n    \"reverse\": \"反轉\",\n    \"rich_text\": \"富文本\",\n    \"right\": \"靠右\",\n    \"secondary_style\": \"次要樣式\",\n    \"semibold\": \"半粗體\",\n    \"shaded\": \"陰影\",\n    \"show_second_image\": \"顯示第二張圖片\",\n    \"single\": \"單一\",\n    \"slide_left\": \"向左滑入\",\n    \"slide_up\": \"向上滑入\",\n    \"spotify\": \"Spotify\",\n    \"stack\": \"堆疊\",\n    \"text_only\": \"僅文字\",\n    \"threads\": \"Threads\",\n    \"thumbnails\": \"縮圖\",\n    \"tight\": \"緊湊\",\n    \"top_left\": \"左上\",\n    \"top_right\": \"右上角\",\n    \"top\": \"靠上\",\n    \"two_number\": \"2\",\n    \"two_thirds\": \"2/3\",\n    \"underline\": \"底線\",\n    \"video\": \"影片\",\n    \"wide\": \"寬版\",\n    \"youtube\": \"YouTube\",\n    \"accent\": \"強調色\",\n    \"below_image\": \"圖片下方\",\n    \"body\": \"內文\",\n    \"button_primary\": \"主要按鈕\",\n    \"button_secondary\": \"次要按鈕\",\n    \"compact\": \"緊湊\",\n    \"crop_to_fit\": \"裁切以符合\",\n    \"hidden\": \"隱藏\",\n    \"hint\": \"提示\",\n    \"maintain_aspect_ratio\": \"維持寬高比\",\n    \"off\": \"關閉\",\n    \"on_image\": \"於圖片上\",\n    \"social_bluesky\": \"社群：Bluesky\",\n    \"social_facebook\": \"社群：Facebook\",\n    \"social_instagram\": \"社群：Instagram\",\n    \"social_linkedin\": \"社群：LinkedIn\",\n    \"social_pinterest\": \"社群：Pinterest\",\n    \"social_snapchat\": \"社群：Snapchat\",\n    \"social_spotify\": \"社群：Spotify\",\n    \"social_threads\": \"社群：Threads\",\n    \"social_tiktok\": \"社群：TikTok\",\n    \"social_tumblr\": \"社群：Tumblr\",\n    \"social_twitter\": \"社群：X (Twitter)\",\n    \"social_whatsapp\": \"社群：WhatsApp\",\n    \"social_vimeo\": \"社群：Vimeo\",\n    \"social_youtube\": \"社群：YouTube\",\n    \"spotlight\": \"Spotlight\",\n    \"standard\": \"標準\",\n    \"subheading\": \"副標題\",\n    \"blur\": \"模糊\",\n    \"lift\": \"抬升\",\n    \"reveal\": \"顯現\",\n    \"scale\": \"縮放\",\n    \"subtle_zoom\": \"縮放\",\n    \"with_hints\": \"附提示\",\n    \"below_media\": \"多媒體檔案下方\",\n    \"full_frame\": \"滿版\",\n    \"icons\": \"圖示\"\n  },\n  \"content\": {\n    \"advanced\": \"進階\",\n    \"background_image\": \"背景圖片\",\n    \"background_video\": \"背景影片\",\n    \"block_size\": \"區塊大小\",\n    \"borders\": \"邊框\",\n    \"describe_the_video_for\": \"請為使用螢幕閱讀器的顧客描述影片。[瞭解詳情](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video-block)\",\n    \"section_size\": \"區段尺寸\",\n    \"slideshow_width\": \"投影片寬度\",\n    \"typography\": \"字型排版\",\n    \"width_is_automatically_optimized\": \"寬度會自動針對行動裝置優化。\",\n    \"complementary_products\": \"配套商品必須透過 Search & Discovery app 設定。[瞭解詳情](https://help.shopify.com/manual/online-store/search-and-discovery)\",\n    \"mobile_column_optimization\": \"欄會自動針對行動裝置優化\",\n    \"content_width\": \"僅當區段寬度設為全寬時，內容寬度設定才會生效。\",\n    \"responsive_font_sizes\": \"文字尺寸會自動適配各種螢幕尺寸\",\n    \"buttons\": \"按鈕\",\n    \"swatches\": \"色樣\",\n    \"variant_settings\": \"子類設定\",\n    \"background\": \"背景\",\n    \"appearance\": \"外觀\",\n    \"arrows\": \"箭頭\",\n    \"body_size\": \"內文字尺寸\",\n    \"mobile_size\": \"行動尺寸\",\n    \"bottom_row_appearance\": \"底部列外觀\",\n    \"cards_layout\": \"卡片版面配置\",\n    \"carousel_navigation\": \"輪播導覽\",\n    \"carousel_pagination\": \"輪播分頁\",\n    \"copyright\": \"著作權\",\n    \"edit_logo_in_theme_settings\": \"在[主題設定](/editor?context=theme&category=logo%20and%20favicon)中編輯標誌\",\n    \"edit_price_in_theme_settings\": \"在[主題設定](/editor?context=theme&category=currency%20code)中調整價格格式\",\n    \"edit_variants_in_theme_settings\": \"在[主題設定](/editor?context=theme&category=variants)中編輯子類樣式\",\n    \"email_signups_create_customer_profiles\": \"註冊會新增[顧客資料](https://help.shopify.com/manual/customers)\",\n    \"follow_on_shop_eligiblity\": \"要顯示按鈕，必須安裝 Shop 管道並啟用 Shop Pay。[瞭解詳情](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-shop-buttons)\",\n    \"fonts\": \"字型\",\n    \"grid\": \"網格\",\n    \"heading_size\": \"標題尺寸\",\n    \"image\": \"圖片\",\n    \"input\": \"輸入\",\n    \"layout\": \"版面配置\",\n    \"link\": \"連結\",\n    \"link_padding\": \"連結內距\",\n    \"localization\": \"本地化\",\n    \"logo\": \"標誌\",\n    \"margin\": \"外距\",\n    \"media\": \"多媒體檔案\",\n    \"media_1\": \"多媒體檔案 1\",\n    \"media_2\": \"多媒體檔案 2\",\n    \"menu\": \"選單\",\n    \"mobile_layout\": \"行動版面配置\",\n    \"padding\": \"內距\",\n    \"padding_desktop\": \"電腦版內距\",\n    \"paragraph\": \"段落\",\n    \"policies\": \"政策\",\n    \"popup\": \"彈出式視窗\",\n    \"search\": \"搜尋\",\n    \"section_layout\": \"區段版面配置\",\n    \"size\": \"大小\",\n    \"social_media\": \"社群媒體\",\n    \"submit_button\": \"提交按鈕\",\n    \"text_presets\": \"文字預設\",\n    \"transparent_background\": \"透明背景\",\n    \"typography_primary\": \"主要字型\",\n    \"typography_secondary\": \"次要字型\",\n    \"typography_tertiary\": \"第三字型\",\n    \"mobile_width\": \"行動寬度\",\n    \"width\": \"寬度\",\n    \"carousel\": \"輪播\",\n    \"colors\": \"顏色\",\n    \"collection_page\": \"商品系列頁面\",\n    \"customer_account\": \"顧客帳號\",\n    \"edit_empty_state_collection_in_theme_settings\": \"在[主題設定](/editor?context=theme&category=search)中編輯空白商品系列\",\n    \"grid_layout\": \"網格版面配置\",\n    \"home_page\": \"首頁\",\n    \"images\": \"圖片\",\n    \"inverse_logo_info\": \"透明頁首背景設為「反白」時使用\",\n    \"manage_customer_accounts\": \"請在顧客帳號設定中[管理可見性](/admin/settings/customer_accounts)。不支援舊版帳號。\",\n    \"manage_policies\": \"[管理法律政策](/admin/settings/legal)\",\n    \"product_page\": \"產品頁面\",\n    \"text\": \"文字\",\n    \"thumbnails\": \"縮圖\",\n    \"visibility\": \"可見性\",\n    \"visible_if_collection_has_more_products\": \"當商品系列包含的產品多於目前顯示時才可見\",\n    \"app_required_for_ratings\": \"商品評價需要安裝 app。[瞭解詳情](https://help.shopify.com/manual/apps)\",\n    \"icon\": \"圖示\",\n    \"manage_store_name\": \"[管理商店名稱](/admin/settings/general?edit=storeName)\",\n    \"resource_reference_collection_card\": \"顯示父區段的商品系列\",\n    \"resource_reference_collection_card_image\": \"顯示父商品系列的圖片\",\n    \"resource_reference_collection_title\": \"顯示父商品系列的標題\",\n    \"resource_reference_product\": \"自動連結至父產品\",\n    \"resource_reference_product_card\": \"顯示父區段的產品\",\n    \"resource_reference_product_inventory\": \"顯示父產品的庫存\",\n    \"resource_reference_product_price\": \"顯示父產品的價格\",\n    \"resource_reference_product_recommendations\": \"顯示以父產品為基礎的推薦\",\n    \"resource_reference_product_review\": \"顯示父產品的評價\",\n    \"resource_reference_product_swatches\": \"顯示父產品的色樣\",\n    \"resource_reference_product_title\": \"顯示父產品的標題\",\n    \"resource_reference_product_variant_picker\": \"顯示父產品的子類\",\n    \"resource_reference_product_media\": \"顯示父產品的多媒體檔案\",\n    \"product_media\": \"產品多媒體檔案\",\n    \"section_link\": \"區段連結\",\n    \"gift_card_form_description\": \"顧客可以將禮品卡與個人訊息寄送至收件人的電子郵件。[瞭解詳情](https://help.shopify.com/manual/products/gift-card-products)\",\n    \"heading\": \"標題\",\n    \"resource_reference_product_custom_property\": \"新增可自訂輸入欄位，以收集自訂資訊。這些資訊會加入此訂單商品項目，並可在日後的訂單詳情中查看。\",\n    \"block_link\": \"區塊連結\",\n    \"submenu_feature\": \"子選單功能\",\n    \"cart_features\": \"購物車功能\",\n    \"email_signup\": \"電子郵件訂閱\",\n    \"mobile_media\": \"行動版多媒體檔案\",\n    \"mobile_media_2\": \"行動版多媒體檔案 2\",\n    \"navigation\": \"導覽\",\n    \"popover\": \"彈出式提示\",\n    \"popover_position\": \"彈出式提示位置\",\n    \"resource_reference_product_sku\": \"顯示父商品的存貨單位 (SKU)\",\n    \"content_layout\": \"內容版面配置\",\n    \"mobile_media_1\": \"行動裝置用多媒體檔案 1\",\n    \"utilities\": \"公用程式\"\n  },\n  \"html_defaults\": {\n    \"share_information_about_your\": \"<p>向顧客分享您的品牌故事。可用來敘述產品、發布公告，或歡迎顧客造訪您的商店。</p>\",\n    \"bestseller_h2\": \"<h2>熱銷商品</h2>\",\n    \"bestseller_h3\": \"<h3>熱銷商品</h3>\",\n    \"bestseller\": \"<p>熱銷商品</p>\",\n    \"build_better\": \"<p>我們相信打造更好的產品</p>\",\n    \"contact_us\": \"<h2>聯絡我們</h2>\",\n    \"discover_bestsellers\": \"<p>探索深受顧客喜愛的熱銷商品，兼具實用與美感。</p>\",\n    \"everythings_starts_with_why\": \"<p>我們做每一件事，先問「為什麼」。</p>\",\n    \"explore_latest_products\": \"<p>逛逛我們的最新產品。</p>\",\n    \"faq\": \"<h3>常見問題</h3>\",\n    \"first_to_know\": \"<p>搶先掌握新品系列與優惠活動。</p>\",\n    \"free_returns\": \"<p>30 天內免費退貨</p>\",\n    \"free_shipping_over\": \"<p>滿 $50 享免運費</p>\",\n    \"goal_for_every_customer\": \"<p>我們的目標是讓每位顧客對購買完全滿意。若未達成，請告知我們，我們會盡力協助您解決問題。</p>\",\n    \"home_to_shirts\": \"<p>首頁 → 襯衫</p>\",\n    \"intentional_design\": \"<h2>精心設計</h2>\",\n    \"introducing_h2\": \"<h2><em>全新上市</em></h2>\",\n    \"latest_products\": \"<p>全新季節商品登場。喜歡就先下手，以免錯過！</p>\",\n    \"made_local_and_global\": \"<p>我們的產品在本地與海外製造。我們嚴選製造合作夥伴，確保品質優良、價格合理。</p>\",\n    \"made_with_care_h2\": \"<h2>精心製作</h2>\",\n    \"made_with_care_extended\": \"<p>精心製作，深受顧客喜愛，這款指標性暢銷商品超乎期待。</p>\",\n    \"made_with_care\": \"<p>精心製作，深受顧客喜愛。</p>\",\n    \"make_things_better_extended\": \"<p>我們打造更耐用、好用的產品。以俐落設計與誠實素材，解決真實需求。</p>\",\n    \"make_things_better\": \"<p>我們打造好用又耐用的產品。</p>\",\n    \"may_also_like\": \"<h4>您可能也會喜歡</h4>\",\n    \"new_arrivals_h1\": \"<h1>新品上市</h1>\",\n    \"new_arrivals_h2\": \"<h2>新品上市</h2>\",\n    \"new_arrivals_h3\": \"<h3>新品上市</h3>\",\n    \"product_launch\": \"<p>帶您一探最新產品上市的幕後。</p>\",\n    \"product_story\": \"<p>每件產品背後都有我們對品質與創新的熱情，讓日常更便利，也帶來喜悅。</p>\",\n    \"real_people\": \"<p>真實團隊造就好產品</p>\",\n    \"related_product\": \"<h3>相關產品</h3>\",\n    \"return_policy\": \"<h2>退貨政策是什麼？</h2>\",\n    \"reviews\": \"<p>★★★★★ 368 則評價</p>\",\n    \"shipping_based_on_location\": \"<p>運費會依您的地點與訂單商品計算。購買前，您一定會先看到運費。</p>\",\n    \"shop_by_collection\": \"<h3>依商品系列選購</h3>\",\n    \"signature_products\": \"<h2>我們的招牌產品</h2>\",\n    \"styled_with\": \"<h3>搭配推薦</h3>\",\n    \"subscribe\": \"<h2>訂閱我們的電子報</h2>\",\n    \"team_with_goal\": \"<h2>有共同目標的團隊</h2>\",\n    \"unable_to_accept_returns\": \"<p>部分商品恕不提供退貨，購買前都會清楚標註。</p>\",\n    \"work_quickly_to_ship\": \"<p>我們會盡速出貨。出貨後會寄送電子郵件提供後續資訊。配送時間會依您的地點而有所不同。</p>\",\n    \"join_our_email_list\": \"<h2>加入我們的電子郵件清單</h2>\",\n    \"get_exclusive_deals_and_early_access_to_new_products\": \"<p>取得專屬優惠並搶先看新品。</p>\",\n    \"artistry_in_action\": \"<p>匠心工藝，生動呈現 </p>\",\n    \"authentic_materials\": \"<p>真材實料，毫不妥協 </p>\",\n    \"bold_style_recognizable\": \"<p>大膽風格，一眼辨識</p>\",\n    \"discover_elevated_design\": \"<p>探索精緻設計 </p>\",\n    \"expert_construction_finish\": \"<p>專業工法，細節無瑕</p>\",\n    \"made_to_last\": \"<p>經久耐用 </p>\",\n    \"pieces_better_with_time\": \"<p>經得起時間與穿戴，愈用愈迷人 </p>\",\n    \"quality_you_can_feel\": \"<h2>觸手可感的品質</h2>\",\n    \"uncompromising_standards\": \"<p>堅持最高標準 </p>\",\n    \"featured_collection_h2\": \"<h2>精選商品系列</h2>\",\n    \"shop_collection\": \"<p>探索我們精心策劃的商品系列，精選兼具風格與品質的人氣款。</p>\"\n  },\n  \"text_defaults\": {\n    \"button_label\": \"立即選購\",\n    \"collapsible_row\": \"可摺疊列\",\n    \"heading\": \"標題\",\n    \"email_signup_button_label\": \"訂閱\",\n    \"accordion_heading\": \"摺疊式標題\",\n    \"contact_form_button_label\": \"提交\",\n    \"popup_link\": \"彈出式視窗連結\",\n    \"sign_up\": \"註冊\",\n    \"welcome_to_our_store\": \"歡迎來到我們的商店\",\n    \"be_bold\": \"勇敢一點。\",\n    \"shop_our_latest_arrivals\": \"搶先選購最新商品！\",\n    \"are_purchases_final_sale\": \"是否有商品為最終出清，恕不退換？\",\n    \"care_instructions\": \"保養說明\",\n    \"cart\": \"購物車\",\n    \"discover_collection\": \"探索商品系列\",\n    \"fit\": \"合身\",\n    \"how_much_for_shipping\": \"運費是多少？\",\n    \"learn_more\": \"瞭解詳情\",\n    \"manufacturing\": \"製造\",\n    \"materials\": \"材質\",\n    \"return_policy\": \"退貨政策\",\n    \"shipping\": \"運送\",\n    \"shop_now_button_label\": \"立即選購\",\n    \"sign_up_button_label\": \"註冊\",\n    \"submit_button_label\": \"提交\",\n    \"up_the_ante\": \"加\\n碼\\n升級\",\n    \"view_all_button_label\": \"查看全部\",\n    \"what_is_return_policy\": \"退貨政策是什麼？\",\n    \"when_will_order_arrive\": \"我的訂單何時會送達？\",\n    \"where_are_products_made\": \"你們的產品在哪裡製造？\",\n    \"trending_now\": \"時下流行\",\n    \"shop_the_look\": \"購買整套\",\n    \"bestsellers\": \"熱銷商品\",\n    \"featured_collection\": \"精選商品系列\",\n    \"new_arrivals\": \"新品上市\"\n  },\n  \"info\": {\n    \"carousel_layout_on_mobile\": \"在行動裝置上一律使用輪播\",\n    \"video_alt_text\": \"為使用輔助技術的使用者描述影片\",\n    \"video_autoplay\": \"影片預設為靜音播放\",\n    \"video_external\": \"使用 YouTube 或 Vimeo 網址\",\n    \"carousel_hover_behavior_not_supported\": \"當區段類型設定為「輪播」時，不支援游標移過「輪播」的效果\",\n    \"checkout_buttons\": \"可讓買家更快結帳，有助提升轉換率。[瞭解詳情](https://help.shopify.com/manual/online-store/dynamic-checkout)\",\n    \"custom_heading\": \"自訂標題\",\n    \"edit_presets_in_theme_settings\": \"在[主題設定](/editor?context=theme&category=typography)中編輯預設值\",\n    \"enable_filtering_info\": \"使用[Search & Discovery app](https://help.shopify.com/manual/online-store/search-and-discovery/filters)自訂篩選器\",\n    \"grid_layout_on_mobile\": \"行動裝置會使用網格版面配置\",\n    \"logo_font\": \"僅在未選擇標誌時適用\",\n    \"manage_countries_regions\": \"[管理國家/地區](/admin/settings/markets)\",\n    \"manage_languages\": \"[管理語言](/admin/settings/languages)\",\n    \"transparent_background\": \"請檢查所有套用透明背景的範本，以確保可讀性\",\n    \"aspect_ratio_adjusted\": \"在部分版面中會調整寬高比\",\n    \"custom_liquid\": \"加入應用程式程式碼片段或其他程式碼，打造進階自訂功能。[瞭解詳情](https://shopify.dev/docs/api/liquid)\",\n    \"pills_usage\": \"用於已套用的篩選條件、折扣代碼與搜尋建議\",\n    \"applies_on_image_only\": \"僅適用於圖片\",\n    \"hover_effects\": \"適用於產品卡片與商品系列卡片\",\n    \"hide_logo_on_home_page_help\": \"啟用固定頁首時，標誌仍會顯示\",\n    \"media_type_info\": \"功能會根據您的選單連結自動帶入\",\n    \"logo_height\": \"僅影響頁首標誌\",\n    \"actions_display_style\": \"在行動裝置上一律使用圖示\"\n  },\n  \"categories\": {\n    \"basic\": \"基本\",\n    \"collection\": \"商品系列\",\n    \"collection_list\": \"商品系列清單\",\n    \"footer\": \"頁尾\",\n    \"forms\": \"表單\",\n    \"header\": \"頁首\",\n    \"layout\": \"版面配置\",\n    \"links\": \"連結\",\n    \"product\": \"產品\",\n    \"product_list\": \"精選商品系列\",\n    \"banners\": \"橫幅\",\n    \"collections\": \"商品系列\",\n    \"custom\": \"自訂\",\n    \"decorative\": \"裝飾\",\n    \"products\": \"產品\",\n    \"other_sections\": \"其他\",\n    \"storytelling\": \"故事敘述\",\n    \"text\": \"文字\"\n  }\n}\n"
  },
  {
    "path": "release-notes.md",
    "content": "# Release Notes - Version 3.4.0\n\nThis release adds a text option for header links as an alternative for the current icons as well as updates to customer accounts. It also includes UX and accessibility improvements, and bugfixes.\n\n## What's Changed\n\n### Added\n\n* [Header] Added text style for header links (Search, Account and Cart)\n* [Product card] Added width control settings for desktop and mobile\n\n### Changed\n\n* [Header] Changed existing account menu in favor of new web component version\n* [Accessibility] Marked the footer section as a semantic footer element\n* [Accessibility] Improved accessibility of the header menu with better aria roles\n* [Product] Allow product details column to expand on larger viewports\n* [Product] Display single-value variant options as text instead of dropdown\n\n### Fixes and improvements\n\n* [Product] Fixed flash of disabled buttons when changing a variant\n* [Cart] Fixed cart drawer spacing and line wrapping\n* [Page] Fixed inconsistent vertical spacing between heading presets and RTE headings\n"
  },
  {
    "path": "sections/_blocks.liquid",
    "content": "{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'section', section: section, children: children %}\n\n{% schema %}\n{\n  \"name\": \"t:names.section\",\n  \"class\": \"section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"full-screen\",\n          \"label\": \"t:options.full_screen\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"section_height_custom\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 50,\n      \"unit\": \"%\",\n      \"visible_if\": \"{{ section.settings.section_height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.background_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay and section.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.custom_section\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/carousel.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-carousel\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {% render 'spacing-style', settings: section.settings %}\n    {% render 'gap-style', value: 12 %}\n  \"\n  data-testid=\"carousel-section\"\n>\n  {% content_for 'block', type: 'group', id: 'static-header' %}\n\n  {% content_for 'block', type: '_carousel-content', id: 'static-carousel-content', closest.product: null %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.carousel\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 4\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.navigation\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.carousel\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"columns\": 3,\n        \"columns_gap\": 12,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 16,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.header\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.discover_elevated_design\",\n                \"type_preset\": \"h3\",\n                \"font\": \"var(--font-body--family)\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\"]\n        },\n        \"static-carousel-content\": {\n          \"type\": \"_carousel-content\",\n          \"name\": \"t:names.carousel_content\",\n          \"static\": true,\n          \"settings\": {\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"position\": \"top\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0,\n            \"height\": \"fit\"\n          },\n          \"blocks\": {\n            \"card_1\": {\n              \"type\": \"_card\",\n              \"name\": \"t:names.card\",\n              \"blocks\": {\n                \"image_1\": {\n                  \"type\": \"image\",\n                  \"name\": \"t:names.image\"\n                },\n                \"heading_1\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.artistry_in_action\",\n                    \"type_preset\": \"h5\"\n                  }\n                },\n                \"text_1\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.bold_style_recognizable\"\n                  }\n                }\n              },\n              \"block_order\": [\"image_1\", \"heading_1\", \"text_1\"]\n            },\n            \"card_2\": {\n              \"type\": \"_card\",\n              \"name\": \"t:names.card\",\n              \"blocks\": {\n                \"image_2\": {\n                  \"type\": \"image\",\n                  \"name\": \"t:names.image\"\n                },\n                \"heading_2\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.uncompromising_standards\",\n                    \"type_preset\": \"h5\"\n                  }\n                },\n                \"text_2\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.expert_construction_finish\"\n                  }\n                }\n              },\n              \"block_order\": [\"image_2\", \"heading_2\", \"text_2\"]\n            },\n            \"card_3\": {\n              \"type\": \"_card\",\n              \"name\": \"t:names.card\",\n              \"blocks\": {\n                \"image_3\": {\n                  \"type\": \"image\",\n                  \"name\": \"t:names.image\"\n                },\n                \"heading_3\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.made_to_last\",\n                    \"type_preset\": \"h5\"\n                  }\n                },\n                \"text_3\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.pieces_better_with_time\"\n                  }\n                }\n              },\n              \"block_order\": [\"image_3\", \"heading_3\", \"text_3\"]\n            },\n            \"card_4\": {\n              \"type\": \"_card\",\n              \"name\": \"t:names.card\",\n              \"blocks\": {\n                \"image_4\": {\n                  \"type\": \"image\",\n                  \"name\": \"t:names.image\"\n                },\n                \"heading_4\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.quality_you_can_feel\",\n                    \"type_preset\": \"h5\"\n                  }\n                },\n                \"text_4\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.authentic_materials\"\n                  }\n                }\n              },\n              \"block_order\": [\"image_4\", \"heading_4\", \"text_4\"]\n            }\n          },\n          \"block_order\": [\"card_1\", \"card_2\", \"card_3\", \"card_4\"]\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/collection-links.liquid",
    "content": "{% liquid\n  assign collection_list = section.settings.collection_list\n\n  if collection_list == blank\n    assign limit = 4\n\n    for i in (1..4)\n      assign collection_list = collection_list | append: ', '\n    endfor\n\n    assign collection_list = collection_list | split: ','\n  endif\n\n  assign active_collection = collection_list | find: 'id', collection.id | default: collection_list.first\n%}\n\n<script\n  src=\"{{ 'collection-links.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }} spacing-style\"\n  style=\"{% render 'spacing-style', settings: section.settings %}\"\n  data-testid=\"collection-links-{{ section.id }}\"\n>\n  <collection-links-component\n    layout=\"{{ section.settings.layout }}\"\n    alignment=\"{{ section.settings.alignment }}\"\n    {% if section.settings.image_position == 'left' %}\n      reverse\n    {% endif %}\n  >\n    <div\n      class=\"collection-links__container\"\n      ref=\"container\"\n    >\n      {% for collection in collection_list limit: limit %}\n        {% liquid\n          assign current = false\n\n          if collection.id == active_collection.id\n            assign current = true\n          endif\n        %}\n        {% content_for 'block',\n          type: '_collection-link',\n          id: 'link',\n          closest.collection: collection,\n          index: forloop.index0,\n          current: current\n        %}\n      {% endfor %}\n    </div>\n\n    {% case section.settings.layout %}\n      {% when 'spotlight' %}\n        {% capture slides %}\n          {% for collection in collection_list limit: limit %}\n          {% liquid\n            assign current = false\n\n            if collection.id == active_collection.id\n              assign current = true\n            endif\n          %}\n\n          {% capture slide %}\n            {% # theme-check-disable UniqueStaticBlockId %}\n            {% content_for 'block',\n              type: '_collection-link',\n              id: 'link',\n              closest.collection: collection,\n              index: forloop.index0,\n              current: current,\n              image_only: true\n            %}\n            {% # theme-check-enable UniqueStaticBlockId %}\n          {% endcapture %}\n\n          {% render 'slideshow-slide', children: slide, index: forloop.index0 %}\n        {% endfor %}\n      {% endcapture %}\n\n        {% render 'slideshow',\n          slides: slides,\n          slide_count: collection_list.size,\n          class: 'collection-links__images',\n          ref: 'slideshow'\n        %}\n    {% endcase %}\n  </collection-links-component>\n</div>\n\n{% # theme-check-disable ValidBlockTarget %}\n{% stylesheet %}\n  collection-links-component {\n    --alignment: flex-start;\n\n    display: grid;\n    align-items: center;\n    grid-gap: var(--gap-3xl);\n\n    &:has([ratio='portrait']) {\n      --template-column-ratio: 0.8fr;\n    }\n\n    &:has([ratio='square']) {\n      --template-column-ratio: 1fr;\n    }\n\n    &:has([ratio='landscape']) {\n      --template-column-ratio: 1.4fr;\n    }\n\n    &[alignment='center'] {\n      --alignment: center;\n\n      .text-block {\n        text-align: center;\n      }\n    }\n\n    &[alignment='right'] {\n      --alignment: flex-end;\n\n      .text-block {\n        text-align: right;\n      }\n    }\n\n    &[layout='spotlight'] {\n      position: relative;\n      grid-template-columns: 1fr var(--template-column-ratio);\n      grid-template-areas: 'text image';\n\n      @media screen and (min-width: 750px) {\n        &[reverse] {\n          grid-template-areas: 'image text';\n          grid-template-columns: var(--template-column-ratio) 1fr;\n        }\n      }\n\n      .collection-links__container {\n        align-items: var(--alignment);\n      }\n\n      @media screen and (max-width: 749px) {\n        grid-template-columns: 1fr;\n        grid-template-areas: 'text' 'image';\n        grid-gap: var(--gap-2xl);\n\n        .collection-links__container {\n          gap: clamp(var(--gap-xs), 1vw, var(--gap-xl)) var(--gap-2xl);\n          justify-content: var(--alignment);\n        }\n      }\n    }\n\n    &[layout='text'] {\n      grid-gap: 0;\n      grid-template-areas: 'text';\n\n      .collection-links__container {\n        gap: clamp(var(--gap-xs), 1vw, var(--gap-xl)) var(--gap-2xl);\n        flex-wrap: wrap;\n        flex-direction: row;\n        justify-content: var(--alignment);\n      }\n    }\n  }\n\n  .collection-links__container {\n    display: flex;\n    gap: var(--gap-md);\n    flex-direction: column;\n  }\n\n  .collection-links__images {\n    overflow: hidden;\n    grid-area: image;\n\n    @media screen and (max-width: 749px) {\n      image-block {\n        max-width: 100%;\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_links\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"collection_list\",\n      \"id\": \"collection_list\",\n      \"label\": \"t:settings.collection_list\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout\",\n      \"label\": \"t:settings.layout\",\n      \"options\": [\n        {\n          \"value\": \"spotlight\",\n          \"label\": \"t:options.spotlight\"\n        },\n        {\n          \"value\": \"text\",\n          \"label\": \"t:options.text\"\n        }\n      ],\n      \"default\": \"spotlight\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"right\",\n      \"visible_if\": \"{{ section.settings.layout == \\\"spotlight\\\" }}\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collection_links_spotlight\",\n      \"category\": \"t:categories.collections\",\n      \"blocks\": {\n        \"link\": {\n          \"type\": \"_collection-link\",\n          \"static\": true,\n          \"blocks\": {\n            \"title\": {\n              \"type\": \"_inline-collection-title\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"font\": \"var(--font-subheading--family)\"\n              }\n            },\n            \"image\": {\n              \"type\": \"_image\",\n              \"static\": true,\n              \"settings\": {\n                \"height\": \"large\",\n                \"ratio\": \"square\"\n              }\n            }\n          }\n        }\n      }\n    },\n    {\n      \"name\": \"t:names.collection_links_text\",\n      \"category\": \"t:categories.collections\",\n      \"settings\": {\n        \"layout\": \"text\",\n        \"alignment\": \"center\"\n      },\n      \"blocks\": {\n        \"link\": {\n          \"type\": \"_collection-link\",\n          \"static\": true,\n          \"blocks\": {\n            \"title\": {\n              \"type\": \"_inline-collection-title\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"font\": \"var(--font-subheading--family)\"\n              }\n            },\n            \"image\": {\n              \"type\": \"_image\",\n              \"static\": true,\n              \"settings\": {\n                \"height\": \"medium\"\n              }\n            }\n          }\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n{% # theme-check-enable ValidBlockTarget %}\n"
  },
  {
    "path": "sections/collection-list.liquid",
    "content": "{% liquid\n  if section.settings.collection_list != blank\n    assign section_collections = section.settings.collection_list\n    assign max_items = section.settings.collection_list.count\n  elsif section.settings.layout_type == 'editorial'\n    assign max_items = section.settings.max_collections\n  elsif section.settings.layout_type == 'bento'\n    assign max_items = 4\n  elsif section.settings.layout_type == 'carousel'\n    assign max_items = section.settings.columns | plus: 2\n  elsif section.settings.layout_type == 'grid'\n    assign max_items = section.settings.columns\n  endif\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-resource-list\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {% render 'spacing-style', settings: section.settings %}\n    {% render 'gap-style', value: section.settings.gap %}\n  \"\n  data-testid=\"collection-list\"\n>\n  <div class=\"section-resource-list__content\">\n    {%- content_for 'blocks' -%}\n  </div>\n\n  {% if section_collections == null %}\n    {% for i in (1..max_items) %}\n      {% assign section_collections = section_collections | append: ', ' %}\n    {% endfor %}\n\n    {% assign section_collections = section_collections | split: ',' %}\n  {% endif %}\n\n  {% capture list_items %}\n    {% for collection in section_collections limit: max_items %}\n      <div class=\"resource-list__item\">\n        {% content_for 'block', type: '_collection-card', id: 'static-collection-card', closest.collection: collection %}\n      </div>\n      {% unless forloop.last %}\n        <!--@list/split-->\n      {% endunless %}\n    {% endfor %}\n  {% endcapture %}\n\n  {% liquid\n    # Create an array from the list items to be used for different layout types\n    assign list_items_array = list_items | strip | split: '<!--@list/split-->'\n  %}\n\n  {% render 'resource-list',\n    list_items: list_items,\n    list_items_array: list_items_array,\n    settings: section.settings,\n    carousel_ref: 'collectionList',\n    slide_count: max_items,\n    content_type: 'collections',\n    test_id: 'collections-list-grid'\n  %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_list\",\n  \"class\": \"ui-test-collection-list\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"collection_list\",\n      \"id\": \"collection_list\",\n      \"label\": \"t:settings.collection_list\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.cards_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        },\n        {\n          \"value\": \"bento\",\n          \"label\": \"t:options.bento\"\n        },\n        {\n          \"value\": \"editorial\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.layout_type != 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"2\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' and section.settings.carousel_on_mobile == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_card_size\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"60cqw\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"44cqw\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"60cqw\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"bento_gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'bento' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid'}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_collections\",\n      \"label\": \"t:settings.collection_count\",\n      \"min\": 1,\n      \"max\": 16,\n      \"step\": 1,\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.layout_type == 'editorial' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' and section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.collections_bento\",\n      \"category\": \"t:categories.collections\",\n      \"settings\": {\n        \"layout_type\": \"bento\",\n        \"bento_gap\": 8,\n        \"section_width\": \"page-width\",\n        \"carousel_on_mobile\": false,\n        \"padding-block-start\": 24,\n        \"padding-block-end\": 24\n      },\n      \"blocks\": {\n        \"group_Lg9LkF\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 16,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_bc98Wh\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.shop_by_collection\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 16,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"text_bc98Wh\"]\n        },\n        \"static-collection-card\": {\n          \"type\": \"_collection-card\",\n          \"name\": \"t:names.collection_card\",\n          \"static\": true,\n          \"settings\": {\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"flex-end\",\n            \"placement\": \"on_image\",\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {\n            \"collection-card-image\": {\n              \"type\": \"_collection-card-image\",\n              \"name\": \"t:names.collection_card_image\",\n              \"static\": true,\n              \"settings\": {\n                \"image_ratio\": \"adapt\"\n              }\n            },\n            \"collection-title\": {\n              \"type\": \"collection-title\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"background\": true,\n                \"background_color\": \"#ffffff\",\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 4,\n                \"padding-inline-start\": 8,\n                \"padding-inline-end\": 8\n              }\n            }\n          },\n          \"block_order\": [\"collection-title\"]\n        }\n      },\n      \"block_order\": [\"group_Lg9LkF\"]\n    },\n    {\n      \"name\": \"t:names.collections_grid\",\n      \"category\": \"t:categories.collections\",\n      \"blocks\": {\n        \"group_Lg9LkF\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_bc98Wh\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.shop_by_collection\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 16,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"text_bc98Wh\"]\n        },\n        \"static-collection-card\": {\n          \"type\": \"_collection-card\",\n          \"name\": \"t:names.collection_card\",\n          \"static\": true,\n          \"settings\": {\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"flex-start\",\n            \"placement\": \"on_image\",\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {\n            \"collection-card-image\": {\n              \"type\": \"_collection-card-image\",\n              \"name\": \"t:names.collection_card_image\",\n              \"static\": true,\n              \"settings\": {\n                \"image_ratio\": \"adapt\"\n              }\n            },\n            \"collection-title\": {\n              \"type\": \"collection-title\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"background\": true,\n                \"background_color\": \"#ffffff\",\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 4,\n                \"padding-inline-start\": 8,\n                \"padding-inline-end\": 8\n              }\n            }\n          },\n          \"block_order\": [\"collection-title\"]\n        }\n      },\n      \"block_order\": [\"group_Lg9LkF\"],\n      \"settings\": {\n        \"collection_list\": [],\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 3,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 8,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 12,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.collections_carousel\",\n      \"category\": \"t:categories.collections\",\n      \"blocks\": {\n        \"group_EYUh3J\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fit\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fit\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_nQEaGV\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.shop_by_collection\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 16,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"text_nQEaGV\"]\n        },\n        \"static-collection-card\": {\n          \"type\": \"_collection-card\",\n          \"name\": \"t:names.collection_card\",\n          \"static\": true,\n          \"settings\": {\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"placement\": \"below_image\",\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {\n            \"collection-card-image\": {\n              \"type\": \"_collection-card-image\",\n              \"name\": \"t:names.collection_card_image\",\n              \"static\": true,\n              \"settings\": {\n                \"image_ratio\": \"adapt\"\n              }\n            },\n            \"collection-title\": {\n              \"type\": \"collection-title\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"collection-title\"]\n        }\n      },\n      \"block_order\": [\"group_EYUh3J\"],\n      \"settings\": {\n        \"collection_list\": [],\n        \"layout_type\": \"carousel\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 3,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 8,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"circle\",\n        \"section_width\": \"page-width\",\n        \"gap\": 12,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.collections_editorial\",\n      \"category\": \"t:categories.collections\",\n      \"blocks\": {\n        \"group\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"link\": \"\",\n            \"open_in_new_tab\": false,\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"align_baseline\": false,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"toggle_overlay\": false,\n            \"overlay_color\": \"#00000026\",\n            \"overlay_style\": \"solid\",\n            \"gradient_direction\": \"to top\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.shop_by_collection\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\"text\"]\n        },\n        \"static-collection-card\": {\n          \"type\": \"_collection-card\",\n          \"name\": \"t:names.collection_card\",\n          \"static\": true,\n          \"settings\": {\n            \"placement\": \"below_image\",\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"collection_card_gap\": 8,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {\n            \"collection-title\": {\n              \"type\": \"collection-title\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h5\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"collection-card-image\": {\n              \"type\": \"_collection-card-image\",\n              \"name\": \"t:names.collection_card_image\",\n              \"static\": true,\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"toggle_overlay\": false,\n                \"overlay_color\": \"#00000026\",\n                \"overlay_style\": \"solid\",\n                \"gradient_direction\": \"to top\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\"collection-title\"]\n        }\n      },\n      \"block_order\": [\"group\"],\n      \"settings\": {\n        \"collection_list\": [],\n        \"layout_type\": \"editorial\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 3,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"bento_gap\": 8,\n        \"rows_gap\": 8,\n        \"max_collections\": 4,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 64,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/custom-liquid.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} spacing-style {% if section.settings.color_scheme != blank %}color-{{ section.settings.color_scheme }}{% endif %}\"\n  style=\"{% render 'spacing-padding', settings: section.settings %}\"\n>\n  {{ section.settings.custom_liquid }}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.custom_liquid\",\n  \"settings\": [\n    {\n      \"type\": \"liquid\",\n      \"id\": \"custom_liquid\",\n      \"label\": \"t:settings.custom_liquid\",\n      \"info\": \"t:info.custom_liquid\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.custom_liquid\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/divider.liquid",
    "content": "{% assign full_width = false %}\n\n{% if section.settings.width_percent == 100 and section.settings.section_width == 'full-width' %}\n  {% assign full_width = true %}\n{% endif %}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n  data-testid=\"divider-{{ section.id }}\"\n>\n  {% render 'divider', id: section.id, settings: section.settings, attributes: true, full_width: full_width %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.divider\",\n  \"settings\": [\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"full-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"thickness\",\n      \"label\": \"t:settings.thickness\",\n      \"min\": 0.5,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 1\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"options\": [\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        },\n        {\n          \"value\": \"rounded\",\n          \"label\": \"t:options.rounded\"\n        }\n      ],\n      \"default\": \"square\",\n      \"visible_if\": \"{{ section.settings.thickness > 1 and section.settings.width_percent != 100 or section.settings.section_width == \\\"page-width\\\"}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"width_percent\",\n      \"label\": \"t:settings.length\",\n      \"min\": 5,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"alignment_horizontal\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.width_percent < 100 }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.divider_section\",\n      \"category\": \"t:categories.layout\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/featured-blog-posts.liquid",
    "content": "{% liquid\n  assign max_items = section.settings.post_limit\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-resource-list\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {%- render 'spacing-style', settings: section.settings -%}\n    {%- render 'gap-style', value: section.settings.gap -%}\n  \"\n>\n  {% content_for 'block', id: 'static-blog-title', type: '_featured-blog-posts-title' %}\n\n  {% if section.settings.blog != blank and section.settings.blog.articles_count > 0 %}\n    {% paginate section.settings.blog.articles by max_items %}\n      {% assign section_articles = section.settings.blog.articles %}\n    {% endpaginate %}\n  {% else %}\n    {% assign section_articles = '' %}\n    {% for i in (1..max_items) %}\n      {% assign section_articles = section_articles | append: ', ' %}\n    {% endfor %}\n    {% assign section_articles = section_articles | split: ',' %}\n  {% endif %}\n\n  {% capture list_items %}\n    {% for article in section_articles limit: max_items %}\n      <div class=\"resource-list__item\">\n        {% content_for 'block', id: 'static-blog-post-card', type: '_featured-blog-posts-card', article: article, closest.article: article %}\n      </div>\n      {% unless forloop.last %}\n        <!--@list/split-->\n      {% endunless %}\n    {% endfor %}\n  {% endcapture %}\n\n  {% liquid\n    assign list_items_array = list_items | strip | split: '<!--@list/split-->'\n  %}\n\n  {% render 'resource-list',\n    list_items: list_items,\n    list_items_array: list_items_array,\n    settings: section.settings,\n    carousel_ref: 'featuredBlog',\n    slide_count: max_items,\n    content_type: 'articles',\n    test_id: 'featured-blog-posts'\n  %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.blog_posts\",\n  \"tag\": \"section\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"class\": \"featured-blog-posts\",\n  \"blocks\": [\n    {\n      \"type\": \"_featured-blog-posts-title\"\n    },\n    {\n      \"type\": \"_featured-blog-posts-card\"\n    },\n    {\n      \"type\": \"_featured-blog-posts-image\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"blog\",\n      \"id\": \"blog\",\n      \"label\": \"t:settings.blog\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.cards_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        },\n        {\n          \"value\": \"editorial\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.layout_type != 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"post_limit\",\n      \"label\": \"t:settings.post_count\",\n      \"min\": 2,\n      \"max\": 10,\n      \"step\": 1,\n      \"default\": 3\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 3,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"2\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' and section.settings.carousel_on_mobile == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_card_size\",\n      \"label\": \"t:settings.mobile_card_size\",\n      \"options\": [\n        {\n          \"value\": \"60cqw\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"44cqw\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"60cqw\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' and section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.blog_posts_carousel\",\n      \"category\": \"t:categories.storytelling\",\n      \"blocks\": {\n        \"static-blog-title\": {\n          \"type\": \"_featured-blog-posts-title\",\n          \"name\": \"t:names.title\",\n          \"static\": true,\n          \"settings\": {\n            \"text\": \"<h3>{{ closest.blog.title }}</h3>\",\n            \"type_preset\": \"rte\"\n          }\n        },\n        \"static-blog-post-card\": {\n          \"type\": \"_featured-blog-posts-card\",\n          \"name\": \"t:names.blog_card\",\n          \"static\": true,\n          \"settings\": {},\n          \"blocks\": {\n            \"title\": {\n              \"type\": \"_heading\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"text\": \"<h4>{{ closest.article.title }}</h4>\",\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-info-text\": {\n              \"type\": \"_blog-post-info-text\",\n              \"name\": \"t:names.details\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-description\": {\n              \"type\": \"_blog-post-description\",\n              \"name\": \"t:names.excerpt\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 8,\n                \"padding-block-end\": 0\n              }\n            }\n          }\n        }\n      },\n      \"settings\": {\n        \"layout_type\": \"carousel\",\n        \"post_limit\": 5,\n        \"columns\": 3,\n        \"columns_gap\": 8,\n        \"mobile_card_size\": \"60cqw\",\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"circle\",\n        \"gap\": 12,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.blog_posts_grid\",\n      \"category\": \"t:categories.storytelling\",\n      \"blocks\": {\n        \"static-blog-title\": {\n          \"type\": \"_featured-blog-posts-title\",\n          \"name\": \"t:names.title\",\n          \"static\": true,\n          \"settings\": {\n            \"text\": \"<h3>{{ closest.blog.title }}</h3>\",\n            \"type_preset\": \"rte\"\n          }\n        },\n        \"static-blog-post-card\": {\n          \"type\": \"_featured-blog-posts-card\",\n          \"name\": \"t:names.blog_card\",\n          \"static\": true,\n          \"settings\": {},\n          \"blocks\": {\n            \"title\": {\n              \"type\": \"_heading\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"text\": \"<h4>{{ closest.article.title }}</h4>\",\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-info-text\": {\n              \"type\": \"_blog-post-info-text\",\n              \"name\": \"t:names.details\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-description\": {\n              \"type\": \"_blog-post-description\",\n              \"name\": \"t:names.excerpt\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 8,\n                \"padding-block-end\": 0\n              }\n            }\n          }\n        }\n      },\n      \"settings\": {\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 3,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 8,\n        \"gap\": 12,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.blog_posts_editorial\",\n      \"category\": \"t:categories.storytelling\",\n      \"blocks\": {\n        \"static-blog-title\": {\n          \"type\": \"_featured-blog-posts-title\",\n          \"name\": \"t:names.title\",\n          \"static\": true,\n          \"settings\": {\n            \"text\": \"<h3>{{ closest.blog.title }}</h3>\",\n            \"type_preset\": \"rte\"\n          }\n        },\n        \"static-blog-post-card\": {\n          \"type\": \"_featured-blog-posts-card\",\n          \"name\": \"t:names.blog_card\",\n          \"static\": true,\n          \"settings\": {},\n          \"blocks\": {\n            \"title\": {\n              \"type\": \"_heading\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"text\": \"<h4>{{ closest.article.title }}</h4>\",\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-info-text\": {\n              \"type\": \"_blog-post-info-text\",\n              \"name\": \"t:names.details\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"show_alignment\": false\n              }\n            },\n            \"blog-post-description\": {\n              \"type\": \"_blog-post-description\",\n              \"name\": \"t:names.excerpt\",\n              \"static\": true,\n              \"settings\": {\n                \"padding-block-start\": 8,\n                \"padding-block-end\": 0\n              }\n            }\n          }\n        }\n      },\n      \"settings\": {\n        \"layout_type\": \"editorial\",\n        \"carousel_on_mobile\": false,\n        \"gap\": 64,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/featured-product-information.liquid",
    "content": "<script type=\"application/ld+json\">\n  {{ section.settings.product | structured_data }}\n</script>\n\n{% capture media_gallery %}\n  {% content_for 'block',\n    type: '_featured-product-information-carousel',\n    id: 'media-gallery'\n  %}\n{% endcapture %}\n\n{% capture product_details %}\n  {% content_for 'block',\n    type: '_product-details',\n    id: 'product-details'\n  %}\n{% endcapture %}\n\n{% capture additional_blocks %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n<featured-product-information id=\"{{ section.id }}\">\n  {% render 'product-information-content',\n    product_media_size: section.settings.product.media.size,\n    section_id: section.id,\n    settings: section.settings,\n    media_gallery: media_gallery,\n    product_details: product_details,\n    additional_blocks: additional_blocks\n  %}\n</featured-product-information>\n\n{% schema %}\n{\n  \"name\": \"t:names.featured_product_information\",\n  \"blocks\": [\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"content-center-aligned\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"content-full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"content-center-aligned\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"desktop_media_position\",\n      \"label\": \"t:settings.media_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"equal_columns\",\n      \"label\": \"t:settings.equal_columns\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"limit_details_width\",\n      \"label\": \"t:settings.limit_product_details_width\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.equal_columns }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 48,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.featured_product_information\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"gap\": 48,\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40,\n        \"equal_columns\": true\n      },\n      \"blocks\": {\n        \"media-gallery\": {\n          \"type\": \"_featured-product-information-carousel\",\n          \"static\": true,\n          \"settings\": {\n            \"constrain_to_viewport\": true,\n            \"media_fit\": \"contain\",\n            \"media_radius\": 0,\n            \"extend_media\": false,\n            \"hide_variants\": true,\n            \"slideshow_controls_style\": \"counter\",\n            \"slideshow_mobile_controls_style\": \"dots\",\n            \"thumbnail_position\": \"bottom\",\n            \"thumbnail_width\": 44\n          }\n        },\n        \"product-details\": {\n          \"type\": \"_product-details\",\n          \"static\": true,\n          \"settings\": {\n            \"gap\": 28,\n            \"sticky_details_desktop\": true,\n            \"padding-block-start\": 24,\n            \"padding-block-end\": 24\n          },\n          \"blocks\": {\n            \"header\": {\n              \"type\": \"group\",\n              \"name\": \"t:names.header\",\n              \"settings\": {\n                \"gap\": 12\n              },\n              \"blocks\": {\n                \"title\": {\n                  \"type\": \"product-title\",\n                  \"name\": \"t:names.title\",\n                  \"settings\": {\n                    \"type_preset\": \"h3\"\n                  }\n                },\n                \"price\": {\n                  \"type\": \"price\",\n                  \"name\": \"t:names.product_price\"\n                }\n              },\n              \"block_order\": [\"title\", \"price\"]\n            },\n            \"review_stars\": {\n              \"type\": \"review\",\n              \"name\": \"t:names.product_review_stars\"\n            },\n            \"variant_picker\": {\n              \"type\": \"variant-picker\",\n              \"name\": \"t:names.product_variant_picker\"\n            },\n            \"buy_buttons\": {\n              \"type\": \"buy-buttons\",\n              \"name\": \"t:names.product_buy_buttons\",\n              \"blocks\": {\n                \"quantity\": {\n                  \"type\": \"quantity\",\n                  \"static\": true\n                },\n                \"add-to-cart\": {\n                  \"type\": \"add-to-cart\",\n                  \"static\": true\n                },\n                \"accelerated-checkout\": {\n                  \"type\": \"accelerated-checkout\",\n                  \"static\": true\n                }\n              }\n            }\n          },\n          \"block_order\": [\"header\", \"review_stars\", \"variant_picker\", \"buy_buttons\"]\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/featured-product.liquid",
    "content": "<script type=\"application/ld+json\">\n  {{ section.settings.product | structured_data }}\n</script>\n\n{%- liquid\n  assign product = section.settings.product\n  assign gallery_aspect_ratio = product.featured_media.preview_image.aspect_ratio | default: 1\n-%}\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"\n    featured-product-section\n    section\n    section--full-width\n    color-{{ section.settings.color_scheme }}\n  \"\n  style=\"--gallery-aspect-ratio: {{ gallery_aspect_ratio }};\"\n  data-testid=\"featured-product-{{ section.id }}\"\n>\n  <div\n    class=\"section-content-wrapper spacing-style size-style border-style\"\n    style=\"\n      {% render 'spacing-style', settings: section.settings %}\n      --media-height: 100%;\n      {% if request.visual_preview_mode %}\n        --visual-preview--height: 100%;\n      {% endif %}\n    \"\n  >\n    {% capture featured_product_media %}\n      {% content_for 'block', type: '_media-without-appearance', id: 'media', closest.product: section.settings.product %}\n    {% endcapture %}\n\n    {% capture featured_product_content %}\n      {% content_for 'block', type: '_featured-product', id: 'featured-product', closest.product: section.settings.product %}\n    {% endcapture %}\n\n    {% if section.settings.layout == 'media-left' %}\n      {{ featured_product_media }}\n      {{ featured_product_content }}\n    {% else %}\n      {{ featured_product_content }}\n      {{ featured_product_media }}\n    {% endif %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .featured-product-section .section-content-wrapper {\n    grid-template-columns: 1fr;\n    display: grid;\n    overflow: hidden;\n\n    @media screen and (min-width: 750px) {\n      grid-template-columns: 1fr 1fr;\n    }\n  }\n\n  .featured-product-section {\n    --viewport-offset: 400px;\n    --constrained-min-height: var(--visual-preview--height, 80dvh);\n    --constrained-height: max(var(--constrained-min-height), calc(100vh - var(--viewport-offset)));\n\n    @media screen and (min-width: 750px) {\n      --viewport-offset: 300px;\n    }\n  }\n\n  .featured-product-section .product-grid__card {\n    --padding-block: 20px;\n    --padding-inline: 20px;\n\n    @media screen and (min-width: 750px) {\n      --padding-block: 40px;\n      --padding-inline: 40px;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .featured-product-section .media-block {\n      order: -1;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .featured-product-section .product-card__content {\n      --hugged-width: calc(var(--constrained-height) * var(--gallery-aspect-ratio, var(--media-preview-ratio)));\n      width: min(100%, var(--hugged-width));\n      margin-left: auto;\n      margin-right: auto;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.featured_product\",\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout\",\n      \"label\": \"t:settings.media_position\",\n      \"options\": [\n        {\n          \"value\": \"media-left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"media-right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"media-left\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.featured_product\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"color_scheme\": \"scheme-3\"\n      },\n      \"blocks\": {\n        \"media\": {\n          \"type\": \"_media-without-appearance\",\n          \"static\": true,\n          \"name\": \"t:names.product_media\"\n        },\n        \"featured-product\": {\n          \"type\": \"_featured-product\",\n          \"static\": true,\n          \"name\": \"t:names.product\",\n          \"blocks\": {\n            \"featured-product-title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"type_preset\": \"h5\",\n                \"width\": \"100%\"\n              }\n            },\n            \"featured-product-price\": {\n              \"type\": \"_featured-product-price\",\n              \"name\": \"t:names.price\",\n              \"static\": true\n            },\n            \"featured-product-gallery\": {\n              \"type\": \"_featured-product-gallery\",\n              \"name\": \"t:names.image\",\n              \"static\": true\n            },\n            \"featured-product-swatches\": {\n              \"type\": \"swatches\",\n              \"name\": \"t:names.swatches\",\n              \"static\": true,\n              \"settings\": {\n                \"hide_padding\": true\n              }\n            }\n          }\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/footer-group.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"type\": \"footer\",\n  \"name\": \"t:names.footer\",\n  \"sections\": {\n    \"footer\": {\n      \"type\": \"footer\",\n      \"blocks\": {\n        \"group_wErUQf\": {\n          \"type\": \"group\",\n          \"name\": \"Join our email list\",\n          \"settings\": {\n            \"link\": \"\",\n            \"open_in_new_tab\": false,\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"align_baseline\": false,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 6,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"placeholder\": \"\",\n            \"toggle_overlay\": false,\n            \"overlay_color\": \"#00000026\",\n            \"overlay_style\": \"solid\",\n            \"gradient_direction\": \"to top\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_pF6rVi\": {\n              \"type\": \"text\",\n              \"name\": \"Heading\",\n              \"settings\": {\n                \"text\": \"<h2>Join our email list</h2>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h3\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"text_HafH7P\": {\n              \"type\": \"text\",\n              \"name\": \"Text\",\n              \"settings\": {\n                \"text\": \"<p>Get exclusive deals and early access to new products.</p>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"text_pF6rVi\",\n            \"text_HafH7P\"\n          ]\n        },\n        \"email-signup_HafH7P\": {\n          \"type\": \"email-signup\",\n          \"name\": \"Email Signup\",\n          \"settings\": {\n            \"width\": \"fill\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"group_wErUQf\",\n        \"email-signup_HafH7P\"\n      ],\n      \"name\": \"t:names.footer\",\n      \"settings\": {\n        \"section_width\": \"page-width\",\n        \"gap\": 20,\n        \"color_scheme\": \"scheme-5\",\n        \"padding-block-start\": 36,\n        \"padding-block-end\": 36\n      }\n    },\n    \"utilities\": {\n      \"type\": \"footer-utilities\",\n      \"settings\": {\n        \"section_width\": \"page-width\",\n        \"gap\": 24,\n        \"divider_thickness\": 1,\n        \"color_scheme\": \"scheme-5\",\n        \"padding-block-start\": 12,\n        \"padding-block-end\": 16\n      },\n      \"blocks\": {\n        \"copyright\": {\n          \"type\": \"footer-copyright\",\n          \"settings\": {\n            \"show_powered_by\": true,\n            \"font_size\": \"0.75rem\",\n            \"case\": \"none\"\n          }\n        },\n        \"policy_list\": {\n          \"type\": \"footer-policy-list\",\n          \"settings\": {\n            \"font_size\": \"0.75rem\",\n            \"case\": \"none\"\n          }\n        },\n        \"social_icons\": {\n          \"type\": \"social-links\",\n          \"settings\": {\n            \"facebook_url\": \"https://www.facebook.com\",\n            \"instagram_url\": \"https://www.instagram.com\",\n            \"tiktok_url\": \"https://www.tiktok.com\",\n            \"twitter_url\": \"https://www.twitter.com\",\n            \"youtube_url\": \"https://www.youtube.com\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"copyright\",\n        \"policy_list\",\n        \"social_icons\"\n      ]\n    }\n  },\n  \"order\": [\n    \"footer\",\n    \"utilities\"\n  ]\n}\n"
  },
  {
    "path": "sections/footer-utilities.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n  {{ section.shopify_attributes }}\n>\n  <div\n    class=\"utilities utilities--blocks-{{ section.blocks.size }} spacing-style\"\n    style=\"{% render 'spacing-style', settings: section.settings %} --border-width: {{ section.settings.divider_thickness }}px; --gap: {{ section.settings.gap }}px;\"\n    data-testid=\"footer-utilities\"\n  >\n    {% content_for 'blocks' %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .utilities {\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: var(--gap);\n    text-wrap: nowrap;\n    border-top: var(--border-width) solid var(--color-border);\n    color: var(--color-foreground-muted);\n\n    @media screen and (min-width: 750px) {\n      display: grid;\n      grid-template-columns: 1fr auto 1fr;\n      justify-content: center;\n      gap: var(--gap);\n      align-items: center;\n      text-align: left;\n    }\n  }\n\n  .utilities a {\n    color: var(--color-foreground-muted);\n  }\n\n  .utilities > * {\n    text-align: center;\n\n    @media screen and (min-width: 750px) {\n      text-align: left;\n      justify-self: start;\n    }\n  }\n\n  /* Dynamic positioning based on number of blocks */\n  @media screen and (min-width: 750px) {\n    /* 1 block: Single column, left aligned */\n    .utilities--blocks-1 {\n      grid-template-columns: 1fr;\n      justify-content: start;\n    }\n\n    .utilities--blocks-1 > * {\n      justify-self: start;\n      text-align: left;\n    }\n\n    /* 2 blocks: Two equal columns, start and end aligned */\n    .utilities--blocks-2 {\n      grid-template-columns: 1fr 1fr;\n    }\n\n    .utilities--blocks-2 > *:nth-child(2) {\n      justify-self: end;\n      text-align: right;\n    }\n\n    /* 3 blocks: Three columns (1fr auto 1fr), start/center/end aligned */\n    .utilities--blocks-3 {\n      grid-template-columns: 1fr auto 1fr;\n    }\n\n    .utilities--blocks-3 > *:nth-child(2) {\n      justify-self: center;\n      text-align: center;\n    }\n\n    .utilities--blocks-3 > *:nth-child(3) {\n      justify-self: end;\n      text-align: right;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.policies_and_links\",\n  \"tag\": \"div\",\n  \"class\": \"footer-utilities\",\n  \"max_blocks\": 3,\n  \"enabled_on\": {\n    \"groups\": [\"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"divider_thickness\",\n      \"label\": \"t:settings.divider_thickness\",\n      \"min\": 0,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 1\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 20\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 20\n    }\n  ],\n  \"blocks\": [\n    {\n      \"type\": \"footer-copyright\"\n    },\n    {\n      \"type\": \"footer-policy-list\"\n    },\n    {\n      \"type\": \"social-links\"\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.policies_and_links\",\n      \"category\": \"t:categories.footer\",\n      \"blocks\": {\n        \"copyright\": {\n          \"type\": \"footer-copyright\"\n        },\n        \"policy_list\": {\n          \"type\": \"footer-policy-list\"\n        },\n        \"social_icons\": {\n          \"type\": \"social-links\"\n        }\n      },\n      \"block_order\": [\"copyright\", \"policy_list\", \"social_icons\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/footer.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n>\n  {% liquid\n    assign total_blocks = section.blocks.size\n\n    # Grid layout calculations\n    assign grid_columns = total_blocks | at_most: 4\n\n    # Calculate last row counts using modulo arithmetic\n    # last_row_count = (total_blocks - 1) % N + 1\n    assign last_row_count = total_blocks | minus: 1 | modulo: 4 | plus: 1\n    assign tablet_last_row_count = total_blocks | minus: 1 | modulo: 2 | plus: 1\n\n    # Check if there are orphaned elements (single item in last row)\n    assign has_isolated_grid_item_desktop = false\n    assign has_isolated_grid_item_tablet = false\n\n    if total_blocks > 4 and last_row_count == 1\n      assign has_isolated_grid_item_desktop = true\n    endif\n\n    if total_blocks == 5\n      assign has_isolated_grid_item_tablet = true\n    endif\n  %}\n  <div\n    class=\"\n      footer-content\n      spacing-style\n      {% if has_isolated_grid_item_desktop %}footer-content--isolated-grid-item-desktop{% endif %}\n      {% if has_isolated_grid_item_tablet %}footer-content--isolated-grid-item-tablet{% endif %}\n    \"\n    style=\"\n      {%  render 'spacing-style', settings: section.settings %}\n      --footer-gap: {{ section.settings.gap }}px;\n      --grid-columns: {{ grid_columns }};\n      --last-row-count: {{ last_row_count }};\n      --tablet-last-row-count: {{ tablet_last_row_count }};\n    \"\n  >\n    {% content_for 'blocks' %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .footer-content {\n    contain: content;\n    content-visibility: auto;\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: var(--footer-gap);\n  }\n\n  @media screen and (min-width: 750px) and (max-width: 989px) {\n    .footer-content {\n      grid-template-columns: repeat(min(var(--grid-columns), 3), 1fr);\n      grid-auto-flow: row;\n    }\n\n    .footer-content[style*='--grid-columns: 4'] {\n      grid-template-columns: repeat(2, 1fr);\n    }\n\n    .footer-content--isolated-grid-item-tablet > :last-child {\n      grid-column: 1 / -1;\n    }\n  }\n\n  @media screen and (min-width: 990px) {\n    .footer-content {\n      grid-template-columns: repeat(var(--grid-columns), 1fr);\n    }\n\n    /* Single item centered */\n    .footer-content[style*='--grid-columns: 1'] {\n      justify-items: center;\n    }\n\n    .footer-content--isolated-grid-item-desktop > :last-child {\n      grid-column: 1 / -1;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.footer\",\n  \"class\": \"section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"_divider\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"follow-on-shop\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"menu\"\n    },\n    {\n      \"type\": \"payment-icons\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"logo\"\n    },\n    {\n      \"type\": \"jumbo-text\"\n    },\n    {\n      \"type\": \"social-links\"\n    },\n    {\n      \"type\": \"email-signup\"\n    }\n  ],\n  \"enabled_on\": {\n    \"groups\": [\"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 20\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 20\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.footer\",\n      \"category\": \"t:categories.footer\",\n      \"settings\": {\n        \"gap\": 20,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 36,\n        \"padding-block-end\": 36\n      },\n      \"blocks\": {\n        \"newsletter-group\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"gap\": 6,\n            \"width\": \"fill\",\n            \"inherit_color_scheme\": true\n          },\n          \"blocks\": {\n            \"newsletter-heading\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.join_our_email_list\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h3\"\n              }\n            },\n            \"newsletter-text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.get_exclusive_deals_and_early_access_to_new_products\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\"\n              }\n            }\n          },\n          \"block_order\": [\"newsletter-heading\", \"newsletter-text\"]\n        },\n        \"newsletter-form\": {\n          \"type\": \"email-signup\",\n          \"settings\": {\n            \"width\": \"fill\"\n          }\n        }\n      },\n      \"block_order\": [\"newsletter-group\", \"newsletter-form\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/header-announcements.liquid",
    "content": "{% if section.blocks.size > 1 %}\n  <script\n    src=\"{{ 'announcement-bar.js' | asset_url }}\"\n    type=\"module\"\n    fetchpriority=\"low\"\n  ></script>\n{% endif %}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<aside\n  class=\"announcement-bar spacing-style section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n  style=\"{% render 'spacing-padding', settings: section.settings %}; --border-bottom-width: {{ section.settings.divider_width }}px;\"\n>\n  {% liquid\n    assign autoplay = false\n    assign show_arrows = false\n    if section.blocks.size > 1\n      assign autoplay = true\n      assign show_arrows = true\n    endif\n  %}\n\n  <announcement-bar-component\n    class=\"announcement-bar__slider\"\n    {% if autoplay == true %}\n      autoplay=\"{{ section.settings.speed }}\" aria-live=\"polite\"\n    {% endif %}\n  >\n    {% if show_arrows %}\n      {% render 'slideshow-arrows', icon_style: 'chevron' %}\n    {% endif %}\n\n    <div class=\"announcement-bar__slides\">\n      {% content_for 'blocks' %}\n    </div>\n  </announcement-bar-component>\n</aside>\n\n{% stylesheet %}\n  .announcement-bar {\n    border-block-end: var(--border-bottom-width) solid var(--color-border);\n  }\n\n  .announcement-bar__slider {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    position: relative;\n\n    @media screen and (max-width: 749px) {\n      grid-column: 1 / -1;\n    }\n  }\n\n  .announcement-bar__slides {\n    display: grid;\n    grid: [stack] auto / [stack] auto;\n    width: calc(100% - var(--button-size) * 2);\n    max-width: 680px;\n    margin-inline: auto;\n  }\n\n  .announcement-bar__slides > * {\n    grid-area: stack;\n  }\n\n  .announcement-bar__slide {\n    transition: opacity 0.5s ease-in-out, visibility 0.5s ease-in-out;\n    content-visibility: visible;\n\n    &[aria-hidden='true'] {\n      opacity: 0;\n      visibility: hidden;\n    }\n  }\n\n  .announcement-bar__slider slideshow-arrows {\n    padding: 0;\n    mix-blend-mode: normal;\n  }\n\n  .announcement-bar__slider slideshow-arrows .slideshow-control {\n    color: var(--color-foreground);\n  }\n\n  .announcement-bar__slider .slideshow-control {\n    display: flex;\n    padding: 0;\n    width: var(--button-size);\n    height: var(--button-size);\n    align-items: center;\n    justify-content: center;\n    opacity: 1;\n    animation: none;\n\n    @media screen and (min-width: 750px) {\n      --slideshow-control-offset: calc((var(--button-size) - var(--icon-size-xs)) / 2);\n\n      .section--page-width &.slideshow-control--previous {\n        transform: translateX(var(--slideshow-control-offset));\n      }\n    }\n  }\n\n  .announcement-bar__slider .slideshow-control .svg-wrapper {\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .announcement-bar__slide {\n    place-content: center;\n  }\n\n  .announcement-bar__text:first-child {\n    margin: 0;\n  }\n\n  .announcement-bar__link {\n    position: absolute;\n    inset: 0;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.announcement_bar\",\n  \"blocks\": [\n    {\n      \"type\": \"_announcement\"\n    }\n  ],\n  \"enabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"speed\",\n      \"label\": \"t:settings.scroll_speed\",\n      \"min\": 2,\n      \"max\": 10,\n      \"default\": 5,\n      \"unit\": \"sec\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.section_width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"default\": \"scheme-4\",\n      \"label\": \"t:settings.color_scheme\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"divider_width\",\n      \"label\": \"t:settings.divider_thickness\",\n      \"min\": 0,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 15\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 15\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.announcement_bar\",\n      \"blocks\": {\n        \"announcement_1\": {\n          \"type\": \"_announcement\"\n        }\n      },\n      \"block_order\": [\"announcement_1\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/header-group.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n{\n  \"type\": \"header\",\n  \"name\": \"t:names.header\",\n  \"sections\": {\n    \"header_announcements_9jGBFp\": {\n      \"type\": \"header-announcements\",\n      \"blocks\": {\n        \"announcement_BxgCk9\": {\n          \"type\": \"_announcement\",\n          \"settings\": {\n            \"text\": \"Welcome to our store\",\n            \"link\": \"\",\n            \"font\": \"var(--font-subheading--family)\",\n            \"font_size\": \"0.75rem\",\n            \"weight\": \"\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\"\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\n        \"announcement_BxgCk9\"\n      ],\n      \"name\": \"t:names.announcement_bar\",\n      \"settings\": {\n        \"speed\": 5,\n        \"section_width\": \"page-width\",\n        \"color_scheme\": \"scheme-1\",\n        \"divider_width\": 1,\n        \"padding-block-start\": 15,\n        \"padding-block-end\": 15\n      }\n    },\n    \"header_section\": {\n      \"type\": \"header\",\n      \"blocks\": {\n        \"header-logo\": {\n          \"type\": \"_header-logo\",\n          \"static\": true,\n          \"settings\": {\n            \"hide_logo_on_home_page\": false,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"header-menu\": {\n          \"type\": \"_header-menu\",\n          \"static\": true,\n          \"settings\": {\n            \"menu\": \"main-menu\",\n            \"color_scheme\": \"\",\n            \"type_font_primary_size\": \"0.875rem\",\n            \"menu_font_style\": \"inverse\",\n            \"type_font_primary_link\": \"body\",\n            \"type_case_primary_link\": \"none\",\n            \"menu_style\": \"featured_products\",\n            \"featured_products_aspect_ratio\": \"4 / 5\",\n            \"featured_collections_aspect_ratio\": \"16 / 9\",\n            \"image_border_radius\": 0,\n            \"navigation_bar\": false,\n            \"color_scheme_navigation_bar\": \"\",\n            \"drawer_accordion\": false,\n            \"drawer_accordion_expand_first\": false,\n            \"drawer_dividers\": false\n          },\n          \"blocks\": {}\n        }\n      },\n      \"settings\": {\n        \"logo_position\": \"left\",\n        \"menu_position\": \"left\",\n        \"menu_row\": \"top\",\n        \"show_search\": true,\n        \"search_position\": \"right\",\n        \"search_row\": \"top\",\n        \"show_country\": true,\n        \"country_selector_style\": false,\n        \"show_language\": true,\n        \"localization_font\": \"heading\",\n        \"localization_font_size\": \"0.875rem\",\n        \"localization_position\": \"right\",\n        \"localization_row\": \"top\",\n        \"section_width\": \"page-width\",\n        \"section_height\": \"standard\",\n        \"enable_sticky_header\": \"always\",\n        \"divider_width\": 0,\n        \"divider_size\": \"page-width\",\n        \"border_width\": 0,\n        \"color_scheme_top\": \"scheme-1\",\n        \"color_scheme_bottom\": \"\",\n        \"color_scheme_transparent\": \"scheme-6\",\n        \"enable_transparent_header_home\": false,\n        \"home_color_scheme\": \"inverse\",\n        \"enable_transparent_header_product\": false,\n        \"product_color_scheme\": \"default\",\n        \"enable_transparent_header_collection\": false,\n        \"collection_color_scheme\": \"default\"\n      }\n    }\n  },\n  \"order\": [\n    \"header_announcements_9jGBFp\",\n    \"header_section\"\n  ]\n}\n"
  },
  {
    "path": "sections/header.liquid",
    "content": "{% liquid\n  assign order = 'logo,menu,localization,search,drawer_search,actions'\n\n  if shop.customer_accounts_enabled\n    assign order = 'drawer_search,logo,menu,localization,search,actions'\n  endif\n\n  assign rows = 'top,bottom' | split: ','\n  assign search_style = 'none'\n\n  if section.settings.show_search\n    assign search_style = 'modal'\n  endif\n\n  if section.settings.enable_transparent_header_home and template.name == 'index'\n    assign transparent = 'always'\n    assign transparent_color_scheme = section.settings.home_color_scheme\n  elsif section.settings.enable_transparent_header_product and template.name == 'product'\n    assign transparent = 'always'\n    assign transparent_color_scheme = section.settings.product_color_scheme\n  elsif section.settings.enable_transparent_header_collection and template.name == 'collection'\n    assign transparent = 'always'\n    assign transparent_color_scheme = section.settings.collection_color_scheme\n  endif\n\n  if section.settings.enable_sticky_header == 'always'\n    assign sticky = 'always'\n  elsif section.settings.enable_sticky_header == 'scroll-up'\n    assign sticky = 'scroll-up'\n  endif\n\n  if transparent and sticky\n    assign transparent = 'not-sticky'\n  endif\n\n  if transparent\n    if transparent_color_scheme == 'inverse'\n      assign transparent_color_scheme = 'color-' | append: section.settings.color_scheme_transparent\n    else\n      assign transparent_color_scheme = 'color-' | append: section.settings.color_scheme_top\n    endif\n  endif\n\n  capture logo\n    content_for 'block', type: '_header-logo', id: 'header-logo'\n  endcapture\n\n  capture menu\n    content_for 'block', type: '_header-menu', id: 'header-menu'\n  endcapture\n\n  capture drawer_menu\n    content_for 'block', type: '_header-menu', id: 'header-menu', variant: 'mobile'\n  endcapture\n\n  capture navigation_bar\n    content_for 'block', type: '_header-menu', id: 'header-menu', variant: 'navigation_bar', transparent: transparent\n  endcapture\n\n  capture actions\n    render 'header-actions', customer_account_menu: section.settings.customer_account_menu, display_style: section.settings.actions_display_style, section: section\n  endcapture\n\n  if shop.customer_accounts_enabled\n    assign search_class = 'search-action--hidden-on-drawer'\n  endif\n\n  # Handle localization positioning\n  if section.settings.localization_position == 'left'\n    if section.settings.search_position == 'left'\n      if shop.customer_accounts_enabled\n        assign order = 'drawer_search,logo,search,localization,menu,actions'\n      else\n        assign order = 'logo,search,localization,menu,drawer_search,actions'\n      endif\n    else\n      if shop.customer_accounts_enabled\n        assign order = 'drawer_search,logo,localization,menu,search,actions'\n      else\n        assign order = 'logo,localization,menu,search,drawer_search,actions'\n      endif\n    endif\n  else\n    if section.settings.search_position == 'left'\n      if shop.customer_accounts_enabled\n        assign order = 'drawer_search,logo,search,menu,localization,actions'\n      else\n        assign order = 'logo,search,menu,localization,drawer_search,actions'\n      endif\n    endif\n  endif\n  capture search\n    render 'search', style: search_style, class: search_class, display_style: section.settings.actions_display_style\n  endcapture\n\n  # Skip drawer search under specific conditions:\n  # Always render if search_row is bottom\n  # Don't render when shop.customer_accounts_enabled is false and search_position is left and search_style is not none\n  assign skip_drawer_search = false\n  if shop.customer_accounts_enabled == false and section.settings.search_position == 'left' and search_style != 'none'\n    assign skip_drawer_search = true\n  endif\n\n  if section.settings.search_row == 'bottom' or search_style != 'none' and skip_drawer_search == false\n    # Mobile search duplicate for when search is not in the right order for mobile layout\n    capture drawer_search\n      render 'search', class: 'search-action--hidden-on-menu', style: search_style, display_style: section.settings.actions_display_style\n    endcapture\n  endif\n\n  assign show_language = section.settings.show_language\n  if localization.available_languages.size <= 1\n    assign show_language = false\n  endif\n\n  assign show_country = section.settings.show_country\n  if localization.available_countries.size <= 1\n    assign show_country = false\n  endif\n\n  assign bottom_row_blocks = ''\n\n  if section.settings.menu_row == 'bottom'\n    assign bottom_row_blocks = bottom_row_blocks | append: 'menu,'\n  endif\n\n  if section.settings.search_style != 'none'\n    if section.settings.search_row == 'bottom'\n      assign bottom_row_blocks = bottom_row_blocks | append: 'search,'\n    endif\n  endif\n\n  if section.settings.show_country or section.settings.show_language\n    if section.settings.localization_row == 'bottom'\n      assign bottom_row_blocks = bottom_row_blocks | append: 'localization,'\n    endif\n  endif\n\n  assign bottom_row_blocks = bottom_row_blocks | split: ',' | compact\n\n  if section.settings.section_height == 'compact'\n    assign header_height_class = ' header--compact'\n  endif\n\n  if bottom_row_blocks.size > 0 and section.settings.color_scheme_top.settings.background.rgb == section.settings.color_scheme_bottom.settings.background.rgb and section.settings.divider_width == 0\n    assign collapse_header_paddings_class = 'header--collapse-row-paddings'\n  endif\n\n  assign class = 'header'\n\n  if transparent_color_scheme\n    assign class = class | append: ' ' | append: transparent_color_scheme\n  endif\n\n  if header_height_class\n    assign class = class | append: ' ' | append: header_height_class\n  endif\n\n  if collapse_header_paddings_class\n    assign class = class | append: ' ' | append: collapse_header_paddings_class\n  endif\n\n  # Determine transparent background value\n  assign top_transparent = false\n  assign bottom_transparent = false\n\n  if section.settings.color_scheme_top.settings.background.alpha != 1\n    assign top_transparent = true\n  endif\n\n  if section.settings.color_scheme_bottom.settings.background.alpha != 1\n    assign bottom_transparent = true\n  endif\n\n  if top_transparent and bottom_transparent\n    assign transparent_color_scheme_value = 'both'\n  elsif top_transparent\n    assign transparent_color_scheme_value = 'top'\n  elsif bottom_transparent\n    assign transparent_color_scheme_value = 'bottom'\n  endif\n%}\n\n{% capture localization_markup %}\n  {% liquid\n    assign localization_font = '--menu-localization-font: var(--font-[localization_font]--family); ' | replace: '[localization_font]', section.settings.localization_font\n    assign localization_font_size = '--menu-localization-font-size: [localization_font_size]; ' | replace: '[localization_font_size]', section.settings.localization_font_size\n    assign color_shadow = '--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));'\n    assign form_style = localization_font | append: localization_font_size | append: color_shadow\n  %}\n  {% if show_language and show_country == false %}\n    <div class=\"dropdown-localization mobile:hidden\">\n      {% render 'localization-form',\n        show_country: show_country,\n        show_language: show_language,\n        localization_style: 'dropdown',\n        form_style: form_style,\n        form_id: section.id\n      %}\n    </div>\n  {% elsif show_country %}\n    <dropdown-localization-component\n      class=\"dropdown-localization mobile:hidden\"\n    >\n      <button\n        type=\"button\"\n        class=\"button dropdown-localization__button localization-selector header-actions__action\"\n        aria-expanded=\"false\"\n        aria-controls=\"dropdown-localization-results\"\n        ref=\"button\"\n        on:click=\"/toggleSelector\"\n        style=\"{{ localization_font }} {{ localization_font_size }}\"\n      >\n        {% if show_country %}\n          {% if section.settings.country_selector_style == true %}\n            {% liquid\n              assign background_brightness = section.settings.color_scheme.settings.background | color_brightness\n              if background_brightness < 64\n                assign shadow_size = 4\n              else\n                assign shadow_size = 2\n              endif\n            %}\n            <span\n              class=\"icon-flag\"\n              style=\"\n                background-image: url({{- localization.country | image_url: width: 32 }});\n                --size-shadow: {{ shadow_size }}px;\n                --color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-30-60));\n              \"\n            ></span>\n          {% endif %}\n          <span\n            class=\"currency-code\"\n            data-testid=\"localization-currency-code\"\n          >\n            {{- localization.country.currency.iso_code -}}\n          </span>\n        {% endif %}\n        <span\n          class=\"visually-hidden\"\n          data-testid=\"localization-visually-hidden\"\n        >\n          {{- 'accessibility.localization_region_and_language' | t -}}\n        </span>\n\n        {%- if show_country and show_language -%}\n          <span>/</span>\n        {%- endif -%}\n\n        {%- if show_language -%}\n          <span>\n            {{ localization.language.iso_code | upcase }}\n          </span>\n        {%- endif -%}\n        <span class=\"svg-wrapper icon-caret\">\n          {{- 'icon-caret.svg' | inline_asset_content -}}\n        </span>\n      </button>\n\n      <div\n        class=\"localization-wrapper {{ section.settings.localization_position }}-bound color-{{ settings.popover_color_scheme }}\"\n        hidden\n        ref=\"panel\"\n      >\n        {% render 'localization-form',\n          show_country: show_country,\n          show_language: show_language,\n          localization_style: 'dropdown',\n          form_style: form_style,\n          form_id: section.id\n        %}\n      </div>\n    </dropdown-localization-component>\n  {% endif %}\n{% endcapture %}\n\n<script type=\"application/ld+json\">\n  {\n    \"@context\": \"http://schema.org\",\n    \"@type\": \"Organization\",\n    \"name\": {{ shop.name | json }},\n    {% if settings.logo %}\n      \"logo\": {{ settings.logo | image_url: width: 500 | prepend: \"https:\" | json }},\n    {% endif %}\n    \"url\": {{ request.origin | append: page.url | json }}\n  }\n</script>\n\n<header-component\n  id=\"header-component\"\n  class=\"{{ class }}\"\n  data-theme-color=\"rgb({{ section.settings.color_scheme_top.settings.background.rgb }})\"\n  {% if transparent %}\n    transparent=\"{{ transparent }}\"\n  {% endif %}\n  {% if sticky %}\n    sticky=\"{{ sticky }}\"\n  {% endif %}\n  data-skip-node-update\n  data-scroll-direction=\"none\"\n  {% if section.settings.menu_row == 'top' and bottom_row_blocks.size > 0 %}\n    data-submenu-overlap-bottom-row\n  {% endif %}\n  {% if transparent_color_scheme_value %}\n    data-transparent-color-scheme=\"{{ transparent_color_scheme_value }}\"\n  {% endif %}\n  style=\"\n    --color-scheme-top-row: rgba({{ section.settings.color_scheme_top.settings.background.rgba }});\n    --color-scheme-bottom-row: rgba({{ section.settings.color_scheme_bottom.settings.background.rgba }});\n    {% if section.settings.actions_display_style == 'text' %}\n      --header-actions-font-size: {{ section.settings.actions_font_size | default: '1rem' }};\n      --header-actions-font-family: var(--font-{{ section.settings.actions_font | default: 'heading' }}--family);\n      --header-actions-font-weight: var(--font-{{ section.settings.actions_font | default: 'heading' }}--weight);\n      --header-actions-text-case: {{ section.settings.actions_text_case | default: 'none' }};\n    {% endif %}\n  \"\n>\n  <div class=\"header__underlay header__underlay-closed\"></div>\n  <div\n    class=\"header__underlay header__underlay-open\"\n  ></div>\n  {%- if request.page_type == 'index' -%}\n    <h1 class=\"visually-hidden\">{{ shop.name }}</h1>\n  {%- endif -%}\n  {% for row in rows %}\n    {% liquid\n      assign scheme = 'color_scheme_' | append: row\n      assign class = 'header__row header__row--[row] color-[row_scheme] section section--full-width-margin section--[section-width]' | replace: '[row]', row | replace: '[row_scheme]', section.settings[scheme] | replace: '[section-width]', section.settings.section_width\n\n      case row\n        when 'top'\n          assign first = drawer_menu\n\n          if bottom_row_blocks.size > 0 and section.settings.divider_size == 'page-width'\n            assign class = class | append: ' divider--page-width'\n          endif\n\n          if bottom_row_blocks.size > 0\n            assign border_bottom_setting_id = 'divider_width'\n          else\n            assign border_bottom_setting_id = 'border_width'\n          endif\n        when 'bottom'\n          assign first = ''\n          assign class = class | append: ' mobile:hidden'\n\n          assign border_bottom_setting_id = 'border_width'\n      endcase\n\n      assign style = '--border-bottom-width: [width]px; ' | replace: '[width]', section.settings[border_bottom_setting_id]\n\n      if row == 'top'\n        assign style = style | append: '--border-bottom-width-mobile: [width]px; ' | replace: '[width]', section.settings.border_width\n      endif\n    %}\n\n    {% capture content %}\n      {% render 'header-row',\n        row: row,\n        order: order,\n        settings: section.settings,\n        first: first,\n        logo: logo,\n        menu: menu,\n        actions: actions,\n        localization: localization_markup,\n        search: search,\n        drawer_search: drawer_search\n      %}\n    {% endcapture %}\n\n    {% assign content = content | strip %}\n    {% if content != blank %}\n      <div\n        class=\"{{ class | strip }}\"\n        ref=\"headerRowTop\"\n        {%- if style != blank -%}\n          style=\"{{ style | strip }}\"\n        {%- endif -%}\n      >\n        <div class=\"header__columns spacing-style\">\n          {{ content }}\n        </div>\n      </div>\n    {% endif %}\n  {% endfor %}\n\n  {% if navigation_bar != blank %}\n    <div class=\"header__row header__navigation-bar-row color-{{ section.settings.color_scheme_bottom }}\">\n      {{ navigation_bar }}\n    </div>\n  {% endif %}\n</header-component>\n\n<script\n  src=\"{{ 'header.js' | asset_url }}\"\n  type=\"module\"\n></script>\n\n{% stylesheet %}\n  body {\n    --header-height: 60px;\n    --header-group-height: var(--header-height);\n    --transparent-header-offset-boolean: 0; /* stylelint-disable-line declaration-property-value-disallowed-list */\n  }\n\n  .header {\n    /* Set header paddings based on height setting */\n    --header-padding: var(--padding-sm);\n    --font-paragraph--line-height: 1;\n    --header-content-transition-timing: 0s;\n\n    display: block;\n    contain: layout style;\n    background: transparent;\n\n    a,\n    .button,\n    .button-secondary,\n    .header-actions__action {\n      /* reset style from base.css */\n      transition: color var(--header-content-transition-timing), border-color var(--header-content-transition-timing);\n    }\n  }\n\n  #header-component :is(.header-menu, .dropdown-localization) {\n    display: none;\n  }\n\n  @media screen and (min-width: 750px) {\n    #header-component[data-menu-style='menu'] :is(.header-menu, .dropdown-localization) {\n      display: flex;\n    }\n  }\n\n  #header-component[data-menu-style='drawer'] .header__column {\n    display: contents;\n  }\n\n  @media screen and (min-width: 750px) {\n    #header-component[data-menu-style='menu'] .header__navigation-bar-row {\n      display: none;\n    }\n  }\n\n  .header[transparent] {\n    --language-button-background-color: transparent;\n    --language-button-border-color: transparent;\n    --header-content-transition-timing: calc(var(--submenu-animation-speed) - var(--animation-speed-fast))\n      var(--animation-speed-fast) var(--ease-out-cubic);\n\n    --closed-underlay-height: 0px;\n\n    /* used to display the appropriate logo based on transparency state */\n    --header-logo-display: none;\n    --header-logo-inverse-display: block;\n\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n\n    z-index: var(--layer-overlay);\n\n    &[transparent='not-sticky'][data-sticky-state='active'],\n    &:has(.menu-list__link:not([aria-haspopup]):hover) {\n      --header-logo-display: unset;\n      --header-logo-inverse-display: unset;\n      --color-foreground: inherit;\n      --color-foreground-rgb: inherit;\n      --color-background: inherit;\n      --color-background-rgb: inherit;\n      --color-border: inherit;\n      --color-border-rgb: inherit;\n      --closed-underlay-height: 100%;\n    }\n\n    /** For transparent header, apply inherit to rows when menu is not hovered */\n    &:not([data-sticky-state='active']):not(:has(.menu-list__link:is(:hover, [aria-expanded='true']))) .header__row {\n      --color-foreground: inherit;\n      --color-foreground-rgb: inherit;\n      --color-border: inherit;\n      --color-border-rgb: inherit;\n      --color-primary-button-background: inherit;\n      --color-primary-button-text: inherit;\n    }\n\n    /* Multiple selectors for performance: each simple :has() check is faster than one complex selector with multiple conditions */\n    &:has(.mega-menu__list:hover),\n    &:has(.menu-list__link:is(:hover, [aria-expanded='true'])),\n    &:has(.menu-list__list-item[slot='overflow'] .menu-list__link:is(:hover, [aria-expanded='true'])) {\n      --header-logo-display: unset;\n      --header-logo-inverse-display: unset;\n      --color-foreground: inherit;\n      --color-foreground-rgb: inherit;\n      --color-background: inherit;\n      --color-background-rgb: inherit;\n      --color-border: inherit;\n      --color-border-rgb: inherit;\n      --header-content-transition-timing: var(--submenu-animation-speed) var(--ease-out-cubic);\n    }\n  }\n\n  /* When top row has transparent background, make it inherit colors from header component */\n  [data-transparent-color-scheme='top']:hover .header__row--top,\n  [data-transparent-color-scheme='top']:focus-within .header__row--top,\n  [data-transparent-color-scheme='both']:hover .header__row--top,\n  [data-transparent-color-scheme='both']:focus-within .header__row--top {\n    --color-foreground: inherit;\n    --color-foreground-rgb: inherit;\n    --color-border: inherit;\n    --color-border-rgb: inherit;\n    --color-primary-button-background: inherit;\n    --color-primary-button-text: inherit;\n  }\n\n  /* When bottom row has transparent background, make it inherit colors from header component */\n  [data-transparent-color-scheme='bottom']:hover .header__row--bottom,\n  [data-transparent-color-scheme='bottom']:focus-within .header__row--bottom,\n  [data-transparent-color-scheme='both']:hover .header__row--bottom,\n  [data-transparent-color-scheme='both']:focus-within .header__row--bottom {\n    --color-foreground: inherit;\n    --color-foreground-rgb: inherit;\n    --color-border: inherit;\n    --color-border-rgb: inherit;\n    --color-primary-button-background: inherit;\n    --color-primary-button-text: inherit;\n  }\n\n  .header-section {\n    position: relative;\n    z-index: var(--layer-heightened);\n  }\n\n  /* need default values for non-flash transitions on first overflow menu open */\n  #header-component {\n    --submenu-height: 0px;\n    --full-open-header-height: 0px;\n  }\n\n  #header-group:has(#header-component[sticky]) {\n    display: contents;\n  }\n\n  .header-section:has(> #header-component[sticky='always']),\n  .header-section:has(> #header-component[sticky='scroll-up'][data-sticky-state='active']) {\n    position: sticky;\n\n    /* Use -1 instead of 0 so intersection observer can track sticky state */\n    top: -1px;\n    z-index: var(--layer-sticky);\n  }\n\n  .header[data-sticky-state] {\n    transition: opacity var(--animation-speed) var(--animation-easing);\n    opacity: 1;\n  }\n\n  .header[data-sticky-state='active'] {\n    view-transition-name: sticky-header;\n  }\n\n  :active-view-transition-type(empty-cart-drawer) {\n    .header[data-sticky-state='active'] {\n      view-transition-name: none;\n    }\n  }\n\n  .header[data-sticky-state='idle'] {\n    opacity: 0;\n  }\n\n  /* ================================\n     * Underlays\n     * ================================ */\n  .header__underlay {\n    position: absolute;\n    inset: 0;\n  }\n\n  .header__underlay-closed {\n    height: var(--closed-underlay-height, 100%);\n    z-index: var(--layer-lowest);\n    background: linear-gradient(\n      var(--color-scheme-top-row) 0 var(--top-row-height),\n      var(--color-scheme-bottom-row) var(--top-row-height) var(--header-height)\n    );\n    transition: height var(--animation-speed-slow) var(--ease-out-cubic);\n  }\n\n  .header__underlay-open {\n    height: var(--full-open-header-height);\n    background: linear-gradient(\n      var(--color-scheme-top-row) 0 var(--top-row-height),\n      var(--color-scheme-bottom-row) var(--top-row-height) var(--header-height),\n      var(--color-submenu) var(--header-height) 100%\n    );\n    /* header-height is updated via js, the transition works automagically */\n    transition: height var(--submenu-animation-speed) var(--ease-out-cubic);\n  }\n\n  .header__underlay-open::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    box-shadow: var(--shadow-popover);\n    clip-path: inset(var(--header-height) 0 -100px 0); /* stylelint-disable-line */\n    transition: height var(--submenu-animation-speed) var(--ease-out-cubic);\n  }\n\n  /* When top row has transparent background, make underlay inherit colors from header component */\n  [data-transparent-color-scheme='top']:hover,\n  [data-transparent-color-scheme='top']:focus-within,\n  [data-transparent-color-scheme='both']:hover,\n  [data-transparent-color-scheme='both']:focus-within {\n    :is(.header__underlay-open, .header__underlay-closed) {\n      --color-scheme-top-row: var(--color-background);\n    }\n  }\n\n  /* When bottom row has transparent background, make underlay inherit colors from header component */\n  [data-transparent-color-scheme='bottom']:hover,\n  [data-transparent-color-scheme='bottom']:focus-within,\n  [data-transparent-color-scheme='both']:hover,\n  [data-transparent-color-scheme='both']:focus-within {\n    :is(.header__underlay-open, .header__underlay-closed) {\n      --color-scheme-bottom-row: var(--color-background);\n    }\n  }\n\n  [data-submenu-overlap-bottom-row] {\n    .header__underlay-open {\n      background: linear-gradient(\n        var(--color-scheme-top-row) 0 var(--top-row-height),\n        var(--color-submenu) var(--top-row-height) 100%\n      );\n    }\n\n    .header__row--bottom {\n      z-index: var(--layer-lowest);\n    }\n  }\n\n  /* End Underlays ================ */\n\n  .header__row {\n    /* The account component uses a different color scheme, but we need to override it to inherit the color of the header row */\n    --color-account-icon: var(--color-foreground);\n\n    position: relative;\n\n    /* Overwrite color from color scheme, background is controlled by the underlays */\n    background-color: transparent;\n\n    &:has(.mega-menu__list:hover),\n    &:has(.menu-list__link[aria-haspopup]:is(:hover, [aria-expanded='true'])),\n    &:has(.menu-list__list-item[slot='overflow'] .menu-list__link:is(:hover, [aria-expanded='true'])) {\n      /* Only elevate the row when the submenu is open to avoid overlapping other elevated content */\n      z-index: var(--layer-heightened);\n    }\n  }\n\n  .header__row--top:not(.divider--page-width),\n  .header__row--top.divider--page-width .header__columns,\n  .header__row--bottom {\n    border-bottom: var(--border-bottom-width) solid var(--color-border);\n  }\n\n  @media screen and (max-width: 749px) {\n    .header__row--top:not(.divider--page-width),\n    .header__row--top.divider--page-width .header__columns {\n      border-bottom-width: var(--border-bottom-width-mobile);\n    }\n  }\n\n  #header-component[data-menu-style='drawer'] .header__row--top:not(.divider--page-width),\n  #header-component[data-menu-style='drawer'] .header__row--top.divider--page-width .header__columns {\n    border-bottom-width: var(--border-bottom-width-mobile);\n  }\n\n  .header__row.divider--page-width:not(.section--page-width) .header__columns {\n    @media screen and (min-width: 750px) {\n      padding-inline-start: 0;\n      padding-inline-end: 0;\n      margin-inline-start: var(--page-margin);\n      margin-inline-end: var(--page-margin);\n    }\n  }\n\n  .header__column {\n    display: flex;\n    align-items: center;\n\n    /* on mobile, header__column nodes are ignored to create a new grid-template-area based on all visible content */\n    @media screen and (max-width: 749px) {\n      display: contents;\n    }\n  }\n\n  .header__column--left,\n  .header__column--center {\n    gap: var(--gap-xl);\n    grid-area: left;\n  }\n\n  .header__column--center {\n    justify-content: center;\n    grid-area: center;\n\n    header-menu:only-child .overflow-menu::part(list) {\n      justify-content: center;\n    }\n  }\n\n  .header__column--right {\n    gap: var(--gap-xl);\n    justify-content: flex-end;\n    grid-area: right;\n\n    .overflow-menu::part(list) {\n      justify-content: flex-end;\n    }\n  }\n\n  .header__columns {\n    /* Three column layout */\n    --header-left: 1fr;\n    --header-center: auto;\n    --header-right: 1fr;\n    --header-template-columns: var(--header-left) var(--header-center) var(--header-right);\n\n    /* Mobile layout */\n    --header-mobile-bookend: 44px;\n\n    display: grid;\n    grid-template-areas: 'left center right';\n    grid-gap: var(--gap-xl);\n    grid-template-columns: var(--header-template-columns);\n\n    /* If menu is in center column */\n    &:has(.header__column--center header-menu) {\n      --header-center: auto;\n      --header-left: minmax(max-content, 1fr);\n      --header-right: minmax(max-content, 1fr);\n    }\n\n    /* If there is no center column, make the column the menu is in grow eagerly */\n    &:where(:not(:has(.header__column--center))) {\n      @media screen and (min-width: 750px) {\n        --header-template-columns: var(--header-left) var(--header-right);\n\n        grid-template-areas: 'left right';\n      }\n\n      /* If the header-menu is in the right column */\n      &:has(.header__column--right header-menu) {\n        --header-right: auto;\n        --header-left: minmax(max-content, 1fr);\n      }\n\n      /* If the header-menu is in the left column */\n      &:has(.header__column--left header-menu) {\n        --header-left: auto;\n        --header-right: minmax(max-content, 1fr);\n      }\n    }\n\n    @media screen and (max-width: 749px) {\n      --header-template-columns: var(--header-mobile-bookend) var(--header-mobile-bookend) 1fr\n        var(--header-mobile-bookend) var(--header-mobile-bookend);\n\n      grid-template-areas: 'leftA leftB center rightA rightB';\n      grid-column: span 3;\n      column-gap: 0;\n      align-items: center;\n      padding-block: 0;\n      padding-inline: 0 var(--padding-3xs);\n\n      .header-logo {\n        grid-area: center;\n      }\n\n      &:not(:has(header-actions)) .search-action {\n        grid-area: leftB;\n      }\n\n      &:not(:has(shopify-account)) .search-action {\n        grid-area: rightA;\n      }\n\n      .search-action {\n        grid-area: leftB;\n      }\n\n      header-actions {\n        grid-area: rightB;\n      }\n    }\n  }\n\n  /* not ideal but we need to duplicate these styles for when touch comes into play\n    We could avoid the duplication using js to set the data-menu-style attribute on small screens instead of using @media queries */\n  #header-component[data-menu-style='drawer'] .header__columns {\n    --header-template-columns: var(--header-mobile-bookend) var(--header-mobile-bookend) 1fr\n      var(--header-mobile-bookend) var(--header-mobile-bookend);\n\n    grid-template-areas: 'leftA leftB center rightA rightB';\n    grid-column: span 3;\n    column-gap: 0;\n    align-items: center;\n    padding-block: 0;\n    padding-inline: 0 var(--padding-3xs);\n\n    .header-logo {\n      grid-area: center;\n    }\n\n    &:not(:has(header-actions)) .search-action {\n      grid-area: leftB;\n    }\n\n    &:not(:has(shopify-account)) .search-action {\n      grid-area: rightA;\n    }\n\n    .search-action {\n      grid-area: leftB;\n    }\n\n    header-actions {\n      grid-area: rightB;\n    }\n  }\n\n  /* Single column layout if there are no columns within */\n  .header__columns:not(:has(.header__column)) {\n    grid-template-columns: 1fr;\n  }\n\n  /* Check for hover support to avoid unnecessary expensive recalculations when tapping on mobile */\n  @media (hover: hover) {\n    /* Column-specific dimming effect when any interactive element is hovered\n        Multiple selectors for performance: each simple :has() check is faster than one complex selector with multiple conditions */\n    .header__column:has(header-menu:hover),\n    .header__column:has(.header-actions__action:hover),\n    .header__column:has(.header__icon--menu:hover) {\n      header-menu:not(:hover),\n      .header-actions__action:not(:hover),\n      .header__icon--menu:not(:hover) {\n        opacity: var(--opacity-subdued-text);\n        transition: opacity var(--animation-speed) var(--animation-easing);\n      }\n    }\n  }\n\n  /* Ensure smooth transitions for all interactive elements */\n  header-menu,\n  .header-actions__action,\n  .header__icon--menu {\n    transition: opacity var(--animation-speed) var(--animation-easing);\n  }\n\n  /* Header action button styles */\n  .header-actions__action {\n    --button-color: var(--color-foreground);\n    color: var(--button-color);\n    cursor: pointer;\n    display: flex;\n    justify-content: center;\n\n    &:hover {\n      --button-color: var(--color-foreground);\n    }\n  }\n\n  .header-actions__action:not(.account-button) .svg-wrapper {\n    height: var(--button-size);\n    width: var(--button-size);\n  }\n\n  .header-actions__action:not(.account-button) svg {\n    width: var(--icon-size-md);\n    height: var(--icon-size-md);\n  }\n\n  .header:has(#Details-menu-drawer-container[open]) {\n    contain: style;\n  }\n\n  .header.header--compact {\n    --header-padding: var(--padding-2xs);\n  }\n\n  .header__columns {\n    --padding-block-start: var(--header-padding);\n    --padding-block-end: var(--header-padding);\n  }\n\n  .header:not(.header--compact) .header__row--bottom {\n    --header-padding: var(--padding-xs);\n  }\n\n  .header--collapse-row-paddings {\n    .header__row--top .header__columns {\n      --padding-block-end: 0px;\n    }\n\n    .header__row--bottom .header__columns {\n      --padding-block-start: 0px;\n    }\n  }\n\n  /* When the header is transparent, add a margin to a potential header-section below it */\n  .header-section:has(.header[transparent]) + .shopify-section {\n    margin-top: var(--header-height);\n  }\n\n  /* When the header is transparent, and when there is no header-section below it, offset the first main-section with\n     * the height of the header\n     */\n\n  main > .shopify-section:first-child .section:not(.disable-section-top-offset) {\n    &.spacing-style,\n    .spacing-style {\n      --section-top-offset: calc(var(--header-height) * var(--transparent-header-offset-boolean));\n\n      /* Any nested sections should not be offset */\n      :is(.spacing-style, .inherit-spacing) {\n        --section-top-offset: 0px;\n      }\n    }\n\n    /* Make sticky content immediately stick to the top of the page */\n    .sticky-content {\n      margin-top: calc(var(--header-height) * var(--transparent-header-offset-boolean) * -1);\n    }\n  }\n\n  /* Optimize layout performance for hidden menus */\n  .header-menu .menu-list__submenu {\n    content-visibility: auto;\n    contain-intrinsic-size: 0px 500px;\n  }\n\n  /* Force visibility when open/animating and in overflow submenu to prevent layout issues */\n  .header-menu details[open] .menu-list__submenu,\n  .header-menu .menu-list__submenu[data-active],\n  .header-menu .menu-list__list-item[slot='overflow'] .menu-list__submenu {\n    content-visibility: visible;\n  }\n\n  /* Dropdown Localization Styles */\n  .dropdown-localization__button {\n    display: flex;\n    position: relative;\n    align-items: center;\n    gap: 4px;\n    font-family: var(--menu-localization-font);\n    font-size: var(--menu-localization-font-size);\n    font-weight: var(--menu-top-level-font-weight);\n    padding-inline: var(--padding-2xs);\n    margin-inline: calc(-1 * var(--padding-2xs));\n  }\n\n  .dropdown-localization__button .svg-wrapper.icon-caret {\n    height: var(--icon-size-xs);\n    width: var(--icon-size-xs);\n    right: var(--margin-xs);\n    top: calc(50% - var(--padding-2xs));\n    flex-shrink: 0;\n    transition: transform var(--animation-speed) var(--animation-easing);\n  }\n\n  .dropdown-localization__button .icon-flag {\n    width: var(--menu-localization-font-size, var(--icon-size-sm));\n    height: var(--menu-localization-font-size, var(--icon-size-sm));\n    clip-path: circle(50%); /* stylelint-disable-line */\n    background-position: center;\n    background-size: cover;\n    margin-inline-end: 4px;\n    position: relative;\n  }\n\n  .dropdown-localization__button .icon-flag::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    box-shadow: inset 0 0 var(--size-shadow) var(--color-shadow);\n    border-radius: 50%;\n  }\n\n  .dropdown-localization__button[aria-expanded='true'] .icon-caret svg {\n    transform: rotate(180deg);\n  }\n\n  .dropdown-localization__button,\n  .dropdown-localization__button:hover {\n    box-shadow: none;\n    background-color: transparent;\n    border-color: transparent;\n  }\n\n  dropdown-localization-component .localization-form__list {\n    max-height: 20.5rem;\n  }\n\n  .localization-wrapper {\n    position: fixed;\n    z-index: var(--layer-raised);\n    border-radius: var(--style-border-radius-popover);\n    transition-property: display, opacity, translate;\n    transition-duration: 0.3s;\n    transition-timing-function: var(--ease-out-quad);\n    transition-behavior: allow-discrete;\n    translate: 0 20px;\n    opacity: 0;\n  }\n\n  .localization-wrapper:not([hidden]) {\n    translate: 0 0;\n    opacity: 1;\n  }\n\n  @starting-style {\n    .localization-wrapper:not([hidden]) {\n      translate: 0 20px;\n      opacity: 0;\n    }\n  }\n\n  dropdown-localization-component {\n    position: relative;\n    background-color: transparent;\n  }\n\n  dropdown-localization-component .country-filter {\n    position: relative;\n    padding: 8px;\n  }\n\n  dropdown-localization-component .country-filter__input {\n    border: none;\n  }\n\n  dropdown-localization-component .localization-form__list-item {\n    margin-inline: 8px;\n  }\n\n  dropdown-localization-component .localization-wrapper {\n    box-shadow: var(--shadow-popover);\n    border: var(--style-border-popover);\n    background-color: var(--color-background);\n    max-height: 27.5rem;\n    position: absolute;\n    top: calc(100% + 10px);\n    z-index: calc(var(--layer-header-menu) + 1);\n  }\n\n  dropdown-localization-component .localization-wrapper.right-bound {\n    right: 0;\n    left: unset;\n  }\n\n  dropdown-localization-component .localization-wrapper.left-bound {\n    left: -8px;\n    right: unset;\n  }\n\n  /* Additional specificity due to dropdown-localization-component getting a low score */\n  dropdown-localization-component .language-selector.language-selector {\n    padding: 10px 8px 10px 16px;\n  }\n\n  dropdown-localization-component .localization-form__currency {\n    width: max-content;\n    opacity: 0;\n    visibility: hidden;\n    transition: none;\n  }\n\n  dropdown-localization-component .localization-form__select:hover {\n    background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8));\n  }\n\n  dropdown-localization-component\n    :is(\n      .localization-form__list-item:hover,\n      .localization-form__list-item[aria-selected='true'],\n      .localization-form__list-item[aria-current='true']\n    )\n    .localization-form__currency {\n    opacity: 1;\n    color: var(--color-foreground-muted);\n    transition: opacity var(--animation-speed-slow) var(--animation-easing);\n    visibility: visible;\n  }\n\n  .dropdown-localization .language-selector:where(:not(.top-shadow)) {\n    font-weight: var(--menu-top-level-font-weight);\n  }\n\n  .dropdown-localization:not(dropdown-localization-component) .language-selector {\n    font-family: var(--menu-localization-font);\n    font-size: var(--menu-localization-font-size);\n  }\n{% endstylesheet %}\n\n{% unless request.design_mode %}\n  <script type=\"module\">\n    import { hydrate } from '@theme/section-hydration';\n    const url = new URL(window.location.href);\n    url.searchParams.delete('page');\n    hydrate('{{ section.id }}', url);\n  </script>\n{% endunless %}\n\n{% schema %}\n{\n  \"name\": \"t:names.header\",\n  \"tag\": \"header\",\n  \"class\": \"header-section\",\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.logo\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"logo_position\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.menu\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"menu_position\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"menu_row\",\n      \"label\": \"t:settings.row\",\n      \"options\": [\n        {\n          \"value\": \"top\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"top\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.customer_account\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.manage_customer_accounts\"\n    },\n    {\n      \"type\": \"link_list\",\n      \"id\": \"customer_account_menu\",\n      \"label\": \"t:settings.menu\",\n      \"default\": \"customer-account-main-menu\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.search\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_search\",\n      \"label\": \"t:settings.search_icon\",\n      \"default\": true\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"search_position\",\n      \"label\": \"t:settings.search_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"right\",\n      \"visible_if\": \"{{ section.settings.show_search }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"search_row\",\n      \"label\": \"t:settings.search_row\",\n      \"options\": [\n        {\n          \"value\": \"top\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"top\",\n      \"visible_if\": \"{{ section.settings.show_search }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.localization\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_country\",\n      \"label\": \"t:settings.country_region\",\n      \"info\": \"t:info.manage_countries_regions\",\n      \"default\": true\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"country_selector_style\",\n      \"label\": \"t:settings.flag\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.show_country }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_language\",\n      \"label\": \"t:settings.language_selector\",\n      \"info\": \"t:info.manage_languages\",\n      \"default\": true\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"localization_font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"heading\",\n      \"visible_if\": \"{{ section.settings.show_country or section.settings.show_language }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"localization_font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"0.625rem\",\n          \"label\": \"10px\"\n        },\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        }\n      ],\n      \"default\": \"1rem\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"localization_position\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"right\",\n      \"visible_if\": \"{{ section.settings.show_country or section.settings.show_language }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"localization_row\",\n      \"label\": \"t:settings.row\",\n      \"options\": [\n        {\n          \"value\": \"top\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"bottom\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"top\",\n      \"visible_if\": \"{{ section.settings.show_country or section.settings.show_language }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ]\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"compact\",\n          \"label\": \"t:options.compact\"\n        },\n        {\n          \"value\": \"standard\",\n          \"label\": \"t:options.standard\"\n        }\n      ],\n      \"default\": \"standard\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"enable_sticky_header\",\n      \"label\": \"t:settings.sticky_header\",\n      \"options\": [\n        {\n          \"value\": \"always\",\n          \"label\": \"t:options.always\"\n        },\n        {\n          \"value\": \"scroll-up\",\n          \"label\": \"t:options.on_scroll_up\"\n        },\n        {\n          \"value\": \"never\",\n          \"label\": \"t:options.never\"\n        }\n      ],\n      \"default\": \"always\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"divider_width\",\n      \"label\": \"t:settings.divider_thickness\",\n      \"min\": 0,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ section.settings.menu_row == 'bottom' or section.settings.localization_row == 'bottom' or section.settings.search_row == 'bottom' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"divider_size\",\n      \"label\": \"t:settings.divider_width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"visible_if\": \"{{ section.settings.divider_width > 0 and section.settings.menu_row == 'bottom' or section.settings.localization_row == 'bottom' or section.settings.search_row == 'bottom' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"label\": \"t:settings.border_width\",\n      \"min\": 0,\n      \"max\": 5,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.utilities\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"actions_display_style\",\n      \"label\": \"t:settings.actions_display_style\",\n      \"info\": \"t:info.actions_display_style\",\n      \"options\": [\n        {\n          \"value\": \"icon\",\n          \"label\": \"t:options.icons\"\n        },\n        {\n          \"value\": \"text\",\n          \"label\": \"t:options.text\"\n        }\n      ],\n      \"default\": \"icon\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"actions_font_size\",\n      \"label\": \"t:settings.size\",\n      \"options\": [\n        {\n          \"value\": \"0.75rem\",\n          \"label\": \"12px\"\n        },\n        {\n          \"value\": \"0.875rem\",\n          \"label\": \"14px\"\n        },\n        {\n          \"value\": \"1rem\",\n          \"label\": \"16px\"\n        },\n        {\n          \"value\": \"1.125rem\",\n          \"label\": \"18px\"\n        }\n      ],\n      \"default\": \"0.875rem\",\n      \"visible_if\": \"{{ section.settings.actions_display_style == 'text' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"actions_font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"body\",\n      \"visible_if\": \"{{ section.settings.actions_display_style == 'text' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"actions_text_case\",\n      \"label\": \"t:settings.case\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"uppercase\",\n          \"label\": \"t:options.uppercase\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.actions_display_style == 'text' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.colors\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme_top\",\n      \"label\": \"t:settings.default\",\n      \"default\": \"primary\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme_bottom\",\n      \"label\": \"t:settings.bottom_row\",\n      \"default\": \"primary\",\n      \"visible_if\": \"{{ section.settings.menu_row == 'bottom' or section.settings.localization_row == 'bottom' or section.settings.search_row == 'bottom' }}\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme_transparent\",\n      \"label\": \"t:settings.inverse\",\n      \"default\": \"primary\",\n      \"visible_if\": \"{{ section.settings.enable_transparent_header_home or section.settings.enable_transparent_header_product or section.settings.enable_transparent_header_collection }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.home_page\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_transparent_header_home\",\n      \"label\": \"t:settings.transparent_background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"home_color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"options\": [\n        {\n          \"value\": \"default\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"inverse\",\n          \"label\": \"t:options.inverse\"\n        }\n      ],\n      \"default\": \"default\",\n      \"visible_if\": \"{{ section.settings.enable_transparent_header_home }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.product_page\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_transparent_header_product\",\n      \"label\": \"t:settings.transparent_background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"options\": [\n        {\n          \"value\": \"default\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"inverse\",\n          \"label\": \"t:options.inverse\"\n        }\n      ],\n      \"default\": \"default\",\n      \"visible_if\": \"{{ section.settings.enable_transparent_header_product }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.collection_page\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_transparent_header_collection\",\n      \"label\": \"t:settings.transparent_background\",\n      \"default\": false\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"collection_color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"options\": [\n        {\n          \"value\": \"default\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"inverse\",\n          \"label\": \"t:options.inverse\"\n        }\n      ],\n      \"default\": \"default\",\n      \"visible_if\": \"{{ section.settings.enable_transparent_header_collection }}\"\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/hero.liquid",
    "content": "{% liquid\n  assign media_count = 0\n  assign media_count_mobile = 0\n  assign fallback_to_desktop = false\n  assign media_1 = 'none'\n  assign media_2 = 'none'\n  assign media_1_mobile = 'none'\n  assign media_2_mobile = 'none'\n  assign has_only_video = false\n  assign has_only_video_mobile = false\n\n  # Desktop media checks\n  # For each media slot, check if the media is not blank and the media type matches the slot\n  # Need to check both (1) media picker is not blank AND (2) section.setting.media_type because user can toggle between different media types to display, but choosing \"Image\" doesn't clear a saved \"Video\" in the theme editor.\n  # The alternate setting (section.settings.image_1 when \"Video\" is selected) is only visually hidden in theme editor.\n  if section.settings.image_1 != blank and section.settings.media_type_1 == 'image'\n    assign media_1 = 'image'\n    assign media_count = media_count | plus: 1\n  endif\n  if section.settings.video_1 != blank and section.settings.media_type_1 == 'video'\n    assign media_1 = 'video'\n    assign media_count = media_count | plus: 1\n  endif\n  if section.settings.image_2 != blank and section.settings.media_type_2 == 'image'\n    assign media_2 = 'image'\n    assign media_count = media_count | plus: 1\n  endif\n  if section.settings.video_2 != blank and section.settings.media_type_2 == 'video'\n    assign media_2 = 'video'\n    assign media_count = media_count | plus: 1\n  endif\n\n  if section.settings.custom_mobile_media\n    # Mobile media checks\n    # For each media slot, check if the media is not blank and the media type matches the slot\n    if section.settings.image_1_mobile != blank and section.settings.media_type_1_mobile == 'image'\n      assign media_1_mobile = 'image'\n      assign media_count_mobile = media_count_mobile | plus: 1\n    endif\n    if section.settings.video_1_mobile != blank and section.settings.media_type_1_mobile == 'video'\n      assign media_1_mobile = 'video'\n      assign media_count_mobile = media_count_mobile | plus: 1\n    endif\n    if section.settings.image_2_mobile != blank and section.settings.media_type_2_mobile == 'image'\n      assign media_2_mobile = 'image'\n      assign media_count_mobile = media_count_mobile | plus: 1\n    endif\n    if section.settings.video_2_mobile != blank and section.settings.media_type_2_mobile == 'video'\n      assign media_2_mobile = 'video'\n      assign media_count_mobile = media_count_mobile | plus: 1\n    endif\n  endif\n  if media_count > 0 and media_1 != 'image' and media_2 != 'image'\n    assign has_only_video = true\n  endif\n  if media_count > 0 and media_count_mobile > 0 and media_1_mobile != 'image' and media_2_mobile != 'image'\n    assign has_only_video_mobile = true\n  endif\n\n  assign media_wrapper_desktop_class = 'hero__media-wrapper hero__media-wrapper--desktop'\n  assign media_wrapper_mobile_class = 'hero__media-wrapper hero__media-wrapper--mobile'\n  # If there is no custom mobile media to show, we add the mobile class to the desktop classes so content is always shown on mobile.\n  if section.settings.custom_mobile_media == false or section.settings.custom_mobile_media == true and media_count_mobile == 0\n    assign media_wrapper_desktop_class = media_wrapper_desktop_class | append: ' hero__media-wrapper--mobile'\n  endif\n\n  # Should we show the blurred reflection on mobile?\n  assign show_mobile_blurred_reflection = false\n  if section.settings.blurred_reflection\n    if section.settings.custom_mobile_media == true and media_count_mobile > 0 and has_only_video_mobile == false\n      # Custom mobile media is active and a mobile image is present\n      assign show_mobile_blurred_reflection = true\n    elsif section.settings.custom_mobile_media == true and media_count_mobile == 0 and media_count > 0 and has_only_video == false\n      # Custom mobile media is active, no mobile media is present, but a desktop image is present\n      assign show_mobile_blurred_reflection = true\n    elsif section.settings.custom_mobile_media == false and media_count > 0 and has_only_video == false\n      # Custom mobile media is inactive, but a desktop image is present\n      assign show_mobile_blurred_reflection = true\n    endif\n  endif\n\n  if media_1 == 'image' and media_2 == 'image'\n    assign media_width_desktop = '50vw'\n  else\n    assign media_width_desktop = '100vw'\n  endif\n\n  # If custom mobile media is disabled or no mobile media is present, we need to fallback to desktop media.\n  if section.settings.custom_mobile_media == false or media_count_mobile == 0 or media_count == 0\n    assign media_count_mobile = media_count\n    assign fallback_to_desktop = true\n  endif\n\n  if fallback_to_desktop\n    assign media_width_mobile = media_width_desktop\n  elsif section.settings.stack_media_on_mobile or media_1_mobile != 'image' or media_2_mobile != 'image'\n    assign media_width_mobile = '100vw'\n  else\n    assign media_width_mobile = '50vw'\n  endif\n\n  assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n  assign widths = '832, 1200, 1600, 1920, 2560, 3840'\n  assign sizes_mobile = media_width_mobile\n  assign mobile_widths = '416, 600, 800, 1200, 1600'\n  assign mobile_widths_array = mobile_widths | split: ', '\n\n  assign fetch_priority = 'auto'\n\n  if section.index == 1\n    assign fetch_priority = 'high'\n  endif\n%}\n\n{% capture media_slot_1 %}\n  {%- if media_1 == 'image' and media_1_mobile == 'image' -%}\n    {%- comment -%} Both desktop and mobile are images. Assume similar images, and this is art direction: use picture element. {%- endcomment -%}\n    <picture\n      data-testid=\"hero-picture-1\"\n      class=\"hero__media\"\n    >\n      <source\n        media=\"(max-width: 749px)\"\n        srcset=\"\n          {%-  for mobile_width in mobile_widths_array -%}\n            {{ section.settings.image_1_mobile | image_url: width: mobile_width }} {{ mobile_width }}w{% unless forloop.last %},{% endunless %}\n          {%- endfor -%}\n        \"\n        sizes=\"{{ sizes_mobile }}\"\n        width=\"{{ section.settings.image_1_mobile.width }}\"\n        height=\"{{ section.settings.image_1_mobile.height }}\"\n      >\n      {{\n        section.settings.image_1\n        | image_url: width: 3840\n        | image_tag:\n          width: section.settings.image_1.width,\n          widths: widths,\n          height: section.settings.image_1.height,\n          alt: section.settings.image_1.alt,\n          class: 'hero__media',\n          sizes: sizes,\n          fetchpriority: fetch_priority,\n          data-testid: 'hero-desktop-image-1'\n      }}\n    </picture>\n  {%- elsif media_1 == 'image' -%}\n    <div class=\"{{ media_wrapper_desktop_class }}\">\n      {{\n        section.settings.image_1\n        | image_url: width: 3840\n        | image_tag:\n          width: section.settings.image_1.width,\n          widths: widths,\n          height: section.settings.image_1.height,\n          alt: section.settings.image_1.alt,\n          class: 'hero__media',\n          sizes: sizes,\n          fetchpriority: fetch_priority,\n          data-testid: 'hero-desktop-image-1'\n      }}\n    </div>\n  {%- endif -%}\n\n  {%- if media_1 == 'video' -%}\n    <div class=\"{{ media_wrapper_desktop_class }}\">\n      {{\n        section.settings.video_1\n        | video_tag:\n          poster: nil,\n          autoplay: true,\n          loop: true,\n          controls: false,\n          muted: true,\n          class: 'hero__media',\n          data-testid: 'hero-desktop-video-1'\n      }}\n    </div>\n  {%- endif -%}\n\n  {%- comment -%} Mobile-only slot 1 media (when desktop is different type) {%- endcomment -%}\n  {%- if media_count > 0 and media_count_mobile > 0 -%}\n    {%- if media_1_mobile == 'image' and media_1 != 'image' -%}\n      <div class=\"{{ media_wrapper_mobile_class }}\">\n        {{\n          section.settings.image_1_mobile\n          | image_url: width: 1600\n          | image_tag:\n            width: section.settings.image_1_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_1_mobile.height,\n            alt: section.settings.image_1_mobile.alt,\n            class: 'hero__media',\n            sizes: sizes_mobile,\n            fetchpriority: fetch_priority,\n            data-testid: 'hero-mobile-image-1'\n        }}\n      </div>\n    {%- endif -%}\n\n    {%- if media_1_mobile == 'video' -%}\n      <div class=\"{{ media_wrapper_mobile_class }}\">\n        {{\n          section.settings.video_1_mobile\n          | video_tag:\n            poster: nil,\n            autoplay: true,\n            loop: true,\n            controls: false,\n            muted: true,\n            class: 'hero__media',\n            data-testid: 'hero-mobile-video-1'\n        }}\n      </div>\n    {%- endif -%}\n  {%- endif -%}\n{% endcapture %}\n\n{% capture media_slot_2 %}\n  {%- if media_2 == 'image' and media_2_mobile == 'image' -%}\n    {%- comment -%} Both desktop and mobile are images. Assume this is art direction: use picture element.  {%- endcomment -%}\n    <picture\n      class=\"hero__media\"\n      data-testid=\"hero-picture-2\"\n    >\n      <source\n        media=\"(max-width: 749px)\"\n        srcset=\"\n          {%-  for mobile_width in mobile_widths_array -%}\n            {{ section.settings.image_2_mobile | image_url: width: mobile_width }} {{ mobile_width }}w{% unless forloop.last%},{% endunless %}\n          {%- endfor -%}\n        \"\n        sizes=\"{{ sizes_mobile }}\"\n        width=\"{{ section.settings.image_2_mobile.width }}\"\n        height=\"{{ section.settings.image_2_mobile.height }}\"\n      >\n      {{\n        section.settings.image_2\n        | image_url: width: 3840\n        | image_tag:\n          width: section.settings.image_2.width,\n          widths: widths,\n          height: section.settings.image_2.height,\n          alt: section.settings.image_2.alt,\n          class: 'hero__media',\n          sizes: sizes,\n          fetchpriority: fetch_priority,\n          data-testid: 'hero-desktop-image-2'\n      }}\n    </picture>\n  {%- elsif media_2 == 'image' -%}\n    <div class=\"{{ media_wrapper_desktop_class }}\">\n      {{\n        section.settings.image_2\n        | image_url: width: 3840\n        | image_tag:\n          width: section.settings.image_2.width,\n          widths: widths,\n          height: section.settings.image_2.height,\n          alt: section.settings.image_2.alt,\n          class: 'hero__media',\n          sizes: sizes,\n          fetchpriority: fetch_priority,\n          data-testid: 'hero-desktop-image-2'\n      }}\n    </div>\n  {%- endif -%}\n\n  {%- if media_2 == 'video' -%}\n    <div class=\"{{ media_wrapper_desktop_class }}\">\n      {{\n        section.settings.video_2\n        | video_tag:\n          poster: nil,\n          autoplay: true,\n          loop: true,\n          controls: false,\n          muted: true,\n          class: 'hero__media',\n          data-testid: 'hero-desktop-video-2'\n      }}\n    </div>\n  {%- endif -%}\n\n  {%- comment -%} Mobile-only slot 2 media (when desktop is different type) {%- endcomment -%}\n  {%- if media_count > 0 and media_count_mobile > 0 -%}\n    {%- if media_2_mobile == 'image' and media_2 != 'image' -%}\n      <div class=\"{{ media_wrapper_mobile_class }}\">\n        {{\n          section.settings.image_2_mobile\n          | image_url: width: 1600\n          | image_tag:\n            width: section.settings.image_2_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_2_mobile.height,\n            alt: section.settings.image_2_mobile.alt,\n            class: 'hero__media',\n            sizes: sizes_mobile,\n            fetchpriority: fetch_priority,\n            data-testid: 'hero-mobile-image-2'\n        }}\n      </div>\n    {%- endif -%}\n\n    {%- if media_2_mobile == 'video' -%}\n      <div class=\"{{ media_wrapper_mobile_class }}\">\n        {{\n          section.settings.video_2_mobile\n          | video_tag:\n            poster: nil,\n            autoplay: true,\n            loop: true,\n            controls: false,\n            muted: true,\n            class: 'hero__media',\n            data-testid: 'hero-mobile-video-2'\n        }}\n      </div>\n    {%- endif -%}\n  {%- endif -%}\n{% endcapture %}\n\n{% capture media %}\n  {{ media_slot_1 }}\n  {{ media_slot_2 }}\n\n  {% if media_count == 0 %}\n    {{ 'hero-apparel-1' | placeholder_svg_tag: 'hero__media' }}\n  {%- endif -%}\n{% endcapture %}\n\n{% capture media_blurred %}\n  {% if media_1 == 'image' %}\n    {{\n      section.settings.image_1\n      | image_url: width: 3840\n      | image_tag:\n        width: section.settings.image_1.width,\n        widths: widths,\n        height: section.settings.image_1.height,\n        alt: '',\n        class: 'hero__media',\n        sizes: sizes\n    }}\n  {% endif %}\n  {% if media_2 == 'image' %}\n    {{\n      section.settings.image_2\n      | image_url: width: 3840\n      | image_tag:\n        width: section.settings.image_2.width,\n        widths: widths,\n        height: section.settings.image_2.height,\n        alt: '',\n        class: 'hero__media',\n        sizes: sizes\n    }}\n  {% endif %}\n  {% if media_count == 0 %}\n    {{ 'hero-apparel-1' | placeholder_svg_tag: 'hero__media' }}\n  {% endif %}\n{% endcapture %}\n\n{% capture mobile_media_blurred %}\n  {%- comment -%}\n    On mobile we need to check:\n    1. If the media should be stacked. If it is,we check for the second (bottom) image first, then for the first (top) image.\n    2. If custom mobile setting is active and has media (show desktop media otherwise).\n  {%- endcomment -%}\n  {% if section.settings.stack_media_on_mobile == false %}\n    {% if section.settings.custom_mobile_media == true and fallback_to_desktop == false %}\n      {% if media_1_mobile == 'image' %}\n        {{ section.settings.image_1_mobile\n          | image_url: width: 1600\n          | image_tag: width: section.settings.image_1_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_1_mobile.height,\n            alt: '',\n            class: 'hero__media',\n            sizes: sizes_mobile\n          }}\n      {% endif %}\n      {% if media_2_mobile == 'image' %}\n        {{ section.settings.image_2_mobile\n          | image_url: width: 1600\n          | image_tag: width: section.settings.image_2_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_2_mobile.height,\n            alt: '',\n            class: 'hero__media',\n            sizes: sizes_mobile\n          }}\n      {% endif %}\n    {% elsif fallback_to_desktop %}\n      {{ media_blurred }}\n    {% endif %}\n  {% elsif section.settings.stack_media_on_mobile == true %}\n    {% if section.settings.custom_mobile_media == true and fallback_to_desktop == false %}\n      {% if media_2_mobile == 'image' %}\n        {{ section.settings.image_2_mobile\n          | image_url: width: 1600\n          | image_tag: width: section.settings.image_2_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_2_mobile.height,\n            alt: '',\n            class: 'hero__media',\n            sizes: sizes_mobile\n        }}\n      {% elsif media_1_mobile == 'image' %}\n        {{ section.settings.image_1_mobile\n          | image_url: width: 1600\n          | image_tag: width: section.settings.image_1_mobile.width,\n            widths: mobile_widths,\n            height: section.settings.image_1_mobile.height,\n            alt: '',\n            class: 'hero__media',\n            sizes: sizes_mobile\n          }}\n      {% endif %}\n    {% elsif fallback_to_desktop %}\n      {% if media_count > 0 %}\n        {% if media_2 == 'image' %}\n          {{ section.settings.image_2\n            | image_url: width: 1600\n            | image_tag: width: section.settings.image_2.width,\n              widths: widths,\n              height: section.settings.image_2.height,\n              alt: '',\n              class: 'hero__media',\n              sizes: sizes\n            }}\n        {% elsif media_1 == 'image' %}\n          {{ section.settings.image_1\n            | image_url: width: 1600\n            | image_tag: width: section.settings.image_1.width,\n              widths: widths,\n              height: section.settings.image_1.height,\n              alt: '',\n              class: 'hero__media',\n              sizes: sizes\n            }}\n        {% endif %}\n        {% if media_count == 0 %}\n          {{ 'hero-apparel-1' | placeholder_svg_tag: 'hero__media' }}\n        {% endif %}\n      {% endif %}\n    {% endif %}\n  {% endif %}\n{% endcapture %}\n\n<div\n  id=\"Hero-{{ section.id }}\"\n  class=\"hero color-{{ section.settings.color_scheme }}{% if section.blocks.size == 0 and section.settings.section_height == 'auto' %} hero--no-blocks-auto-height{% endif %}{% if section.settings.stack_media_on_mobile %} hero--stack-mobile{% endif %}\"\n  style=\"\n    --hero-border-style: {{ section.settings.border }};\n    --hero-border-width: {{ section.settings.border_width }}px;\n    --hero-border-opacity: {{ section.settings.border_opacity }}%;\n    --blur-opacity: {{ section.settings.reflection_opacity | divided_by: 100.0 }};\n    {% if section.settings.section_height == 'custom' %}\n      --hero-min-height: {{ section.settings.section_height_custom }}svh;\n    {% elsif section.settings.section_height == \"full-screen\" %}\n       --hero-min-height: 100svh;\n    {% else %}\n      --hero-min-height: var(--section-height-{{ section.settings.section_height }});\n    {% endif %}\n  \"\n  {% if request.visual_preview_mode %}\n    data-shopify-visual-preview\n  {% endif %}\n  {% if section.settings.blurred_reflection and has_only_video == false or has_only_video_mobile == false %}\n    data-blur-shadow=\"true\"\n  {% endif %}\n>\n  {% if section.settings.blurred_reflection %}\n    {% unless has_only_video %}\n      <div\n        class=\"hero__blurred-image hero__blurred-image--desktop\"\n        data-testid=\"hero-blurred-image-desktop\"\n      >\n        {{ media_blurred }}\n      </div>\n    {% endunless %}\n    {% if show_mobile_blurred_reflection %}\n      <div\n        class=\"hero__blurred-image hero__blurred-image--mobile\"\n        data-testid=\"hero-blurred-image-mobile\"\n      >\n        {{ mobile_media_blurred }}\n      </div>\n    {% endif %}\n  {% endif %}\n\n  {% comment %}\n    Hardcoded to section--full-width bc the media has to be full width in all cases.\n    hero__content-wrapper applies section_width.\n  {% endcomment %}\n\n  <div\n    class=\"hero__container spacing-style section section--full-width\"\n    style=\"{% render 'spacing-style', settings: section.settings %}\"\n  >\n    {%- if section.settings.link != blank -%}\n      <a\n        href=\"{{ section.settings.link }}\"\n        class=\"hero__link\"\n        {% if section.settings.open_in_new_tab %}\n          target=\"_blank\" rel=\"noopener\"\n        {% endif %}\n      ></a>\n    {%- endif -%}\n    <div\n      class=\"hero__media-grid\"\n      style=\"--hero-media-count: {{ media_count }};--hero-media-count-mobile: {{ media_count_mobile }};{%- if section.settings.image_1 != blank -%} --hero-media-aspect-ratio: {{ section.settings.image_1.aspect_ratio }};{% endif %}\"\n      data-testid=\"hero-media-wrapper\"\n    >\n      {% liquid\n        if section.settings.toggle_overlay\n          render 'overlay', settings: section.settings\n        endif\n      %}\n      {{ media }}\n    </div>\n    <div\n      class=\"\n        hero__content-wrapper\n        layout-panel-flex\n        layout-panel-flex--{{ section.settings.content_direction }}\n        {% if section.settings.vertical_on_mobile %}mobile-column{% endif %}\n        section-content-wrapper\n        {{section.settings.section_width}}\n        {% if request.design_mode %}hero__content-wrapper--design-mode{% endif %}\n      \"\n      style=\"{% render 'layout-panel-style', settings: section.settings %}\"\n    >\n      {% content_for 'blocks' %}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .hero-wrapper {\n    --hero-height-offset: 0px;\n  }\n\n  /* Being extra specific in the selector for performance reasons */\n  body:has(> #header-group > .header-section > #header-component) .hero-wrapper:first-child {\n    --hero-height-offset: var(--header-group-height, 0);\n  }\n\n  .hero {\n    position: relative;\n    min-height: calc(var(--hero-min-height) - var(--hero-height-offset));\n  }\n\n  .hero[data-shopify-visual-preview] {\n    --hero-min-height: 600px;\n\n    min-height: 600px;\n  }\n\n  .hero__container {\n    position: relative;\n    overflow: hidden;\n    border: var(--hero-border-width) var(--hero-border-style) rgb(var(--color-border-rgb) / var(--hero-border-opacity));\n    min-height: inherit;\n    align-items: var(--vertical-alignment-mobile);\n    justify-content: var(--horizontal-alignment);\n    z-index: var(--layer-base);\n\n    @media screen and (min-width: 750px) {\n      align-items: var(--vertical-alignment);\n    }\n  }\n\n  .hero__content-wrapper.page-width {\n    grid-column: 2 / 3;\n  }\n\n  .hero__content-wrapper {\n    position: relative;\n    inset: 0;\n    z-index: var(--layer-flat);\n  }\n\n  .hero__content-wrapper .group-block-content {\n    position: relative;\n  }\n\n  .hero__media-grid {\n    position: absolute;\n    inset: 0;\n    display: grid;\n    grid-column: 1 / -1;\n    grid-template-columns: repeat(var(--hero-media-count, 1), 1fr);\n  }\n\n  .hero--auto .hero__media {\n    aspect-ratio: var(--hero-media-aspect-ratio);\n  }\n\n  .hero--no-blocks-auto-height {\n    .hero__media {\n      width: 100%;\n      aspect-ratio: auto;\n    }\n\n    .hero__media-grid {\n      /* When there are no blocks and the height is auto, allow the image to appear. */\n      position: relative;\n    }\n  }\n\n  .hero__media-wrapper {\n    overflow: hidden;\n    position: relative;\n  }\n\n  .hero__media {\n    height: 100%;\n    width: 100%;\n    object-fit: cover;\n    object-position: center center;\n    overflow: hidden;\n    position: relative;\n    z-index: var(--layer-base);\n  }\n\n  /* Mobile/Desktop media visibility */\n\n  .hero__media-wrapper--mobile {\n    display: none;\n  }\n\n  .hero__media-wrapper--desktop {\n    display: block;\n  }\n\n  @media screen and (max-width: 749px) {\n    .hero__media-wrapper--desktop {\n      display: none;\n    }\n\n    .hero__media-wrapper--mobile {\n      display: block;\n    }\n\n    .hero__media-grid {\n      grid-template-columns: repeat(var(--hero-media-count-mobile, 1), 1fr);\n    }\n\n    /* Mobile stacking */\n    .hero--stack-mobile .hero__media-grid {\n      grid-template-columns: 1fr;\n      grid-template-rows: repeat(var(--hero-media-count-mobile, 1), calc(100% / var(--hero-media-count-mobile, 1)));\n    }\n  }\n\n  .hero__link {\n    position: absolute;\n    inset: 0;\n    grid-column: 1 / -1;\n  }\n\n  .hero__media-grid,\n  .hero__content-wrapper {\n    pointer-events: none;\n\n    :is(a, button, input, textarea, select, details, summary) {\n      pointer-events: auto;\n    }\n  }\n\n  .hero__content-wrapper--design-mode * {\n    pointer-events: auto;\n  }\n\n  .hero[data-blur-shadow='true'] {\n    --blurred-reflection-filter-saturate: saturate(1.5);\n    --blurred-reflection-mask-image: linear-gradient(to bottom, #000 0%, #000 60%, transparent 100%);\n    --blurred-reflection-box-shadow: rgb(0 0 0 / 5%) 0 0 1rem;\n    --blurred-reflection-filter-blur: blur(20px);\n    --blurred-reflection-scale: scale(2, 1.25);\n    --blurred-reflection-padding-block-end: 60px;\n  }\n\n  .hero[data-blur-shadow='true'] .hero__container::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    box-shadow: var(--blurred-reflection-box-shadow);\n    mix-blend-mode: overlay;\n    pointer-events: none;\n    z-index: -1;\n  }\n\n  .hero__blurred-image {\n    position: absolute;\n    inset: 0;\n    z-index: -1;\n    mask-image: var(--blurred-reflection-mask-image);\n    filter: var(--blurred-reflection-filter-saturate);\n    pointer-events: none;\n    transform: translateY(50%);\n    overflow: hidden;\n  }\n\n  .hero__blurred-image--desktop {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      display: block;\n    }\n  }\n\n  .hero__blurred-image--mobile {\n    display: block;\n\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .hero__blurred-image img,\n  .hero__blurred-image svg {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center center;\n    filter: var(--blurred-reflection-filter-blur);\n    opacity: var(--blur-opacity);\n    transform: var(--blurred-reflection-scale);\n    padding-block-end: var(--blurred-reflection-padding-block-end);\n\n    &:not(:only-child) {\n      width: 50%;\n\n      &:last-child {\n        right: 0;\n        left: auto;\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.hero\",\n  \"tag\": \"section\",\n  \"class\": \"hero-wrapper section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"logo\"\n    },\n    {\n      \"type\": \"jumbo-text\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"_marquee\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.media_1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_1\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_1\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.media_type_1 == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_1\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.media_type_1 == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.media_2\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_2\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_2\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.media_type_2 == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_2\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.media_type_2 == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_media\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"stack_media_on_mobile\",\n      \"label\": \"t:settings.stack_media_on_mobile\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"custom_mobile_media\",\n      \"label\": \"t:settings.custom_mobile_media\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_media_1\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_1_mobile\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_1_mobile\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media and section.settings.media_type_1_mobile == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_1_mobile\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media and section.settings.media_type_1_mobile == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_media_2\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_type_2_mobile\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"image\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image_2_mobile\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media and section.settings.media_type_2_mobile == 'image' }}\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video_2_mobile\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_media and section.settings.media_type_2_mobile == 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_link\"\n    },\n    {\n      \"type\": \"url\",\n      \"id\": \"link\",\n      \"label\": \"t:settings.link\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"open_in_new_tab\",\n      \"label\": \"t:settings.open_new_tab\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"full-screen\",\n          \"label\": \"t:options.full_screen\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"medium\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"section_height_custom\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 50,\n      \"unit\": \"%\",\n      \"visible_if\": \"{{ section.settings.section_height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay and section.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"blurred_reflection\",\n      \"label\": \"t:settings.blurred_reflection\",\n      \"default\": false,\n      \"info\": \"t:info.applies_on_image_only\",\n      \"visible_if\": \"{{ section.settings.media_type_1 != 'video' or section.settings.media_type_2 != 'video' or section.settings.media_type_1_mobile != 'video' or section.settings.media_type_2_mobile != 'video' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"reflection_opacity\",\n      \"label\": \"t:settings.reflection_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 75,\n      \"visible_if\": \"{{ section.settings.blurred_reflection and section.settings.media_type_1 != 'video' or section.settings.media_type_2 != 'video' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.hero\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"text_1\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.new_arrivals_h1\",\n            \"type_preset\": \"h1\",\n            \"max_width\": \"narrow\"\n          }\n        },\n        \"text_2\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.made_with_care\",\n            \"max_width\": \"narrow\",\n            \"padding-block-end\": 32\n          }\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"name\": \"t:names.button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.shop_now_button_label\",\n            \"link\": \"shopify://collections/all\"\n          }\n        }\n      },\n      \"block_order\": [\"text_1\", \"text_2\", \"button\"],\n      \"settings\": {\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"gap\": 16,\n        \"section_height\": \"large\",\n        \"color_scheme\": \"scheme-5\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40,\n        \"toggle_overlay\": true,\n        \"overlay_style\": \"gradient\"\n      }\n    },\n    {\n      \"name\": \"t:names.hero_marquee\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"spacer\": {\n          \"type\": \"spacer\",\n          \"settings\": {\n            \"size\": \"pixel\",\n            \"pixel_size\": 24\n          }\n        },\n        \"marquee\": {\n          \"type\": \"_marquee\",\n          \"blocks\": {\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.explore_latest_products\",\n                \"type_preset\": \"h1\"\n              }\n            }\n          },\n          \"block_order\": [\"text\"]\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.shop_now_button_label\",\n            \"link\": \"shopify://collections/all\"\n          }\n        }\n      },\n      \"block_order\": [\"spacer\", \"marquee\", \"button\"],\n      \"settings\": {\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"space-between\",\n        \"gap\": 32,\n        \"section_height\": \"large\",\n        \"color_scheme\": \"scheme-5\",\n        \"padding-block-start\": 0,\n        \"padding-block-end\": 40,\n        \"toggle_overlay\": true,\n        \"overlay_style\": \"gradient\"\n      }\n    },\n    {\n      \"name\": \"t:names.hero_bottom_aligned\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"group_main\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.group\",\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 18,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"content_group\": {\n              \"type\": \"group\",\n              \"name\": \"t:names.group\",\n              \"settings\": {\n                \"content_direction\": \"column\",\n                \"vertical_on_mobile\": true,\n                \"horizontal_alignment\": \"flex-start\",\n                \"vertical_alignment\": \"center\",\n                \"align_baseline\": false,\n                \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n                \"vertical_alignment_flex_direction_column\": \"center\",\n                \"gap\": 6,\n                \"width\": \"custom\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fill\",\n                \"custom_width_mobile\": 100,\n                \"height\": \"fit\",\n                \"custom_height\": 100,\n                \"inherit_color_scheme\": true,\n                \"color_scheme\": \"\",\n                \"background_media\": \"none\",\n                \"video_position\": \"cover\",\n                \"background_image_position\": \"cover\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {\n                \"text_intro\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.introducing_h2\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"type_preset\": \"h6\",\n                    \"font\": \"var(--font-accent--family)\",\n                    \"font_size\": \"1rem\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"color\": \"\",\n                    \"background\": false,\n                    \"background_color\": \"#00000026\",\n                    \"corner_radius\": 0,\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                },\n                \"text_main\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.new_arrivals_h1\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"type_preset\": \"h2\",\n                    \"font\": \"var(--font-primary--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"color\": \"\",\n                    \"background\": false,\n                    \"background_color\": \"#00000026\",\n                    \"corner_radius\": 0,\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text_intro\", \"text_main\"]\n            },\n            \"text_description\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.make_things_better_extended\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"none\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-primary--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"content_group\", \"text_description\"]\n        }\n      },\n      \"block_order\": [\"group_main\"],\n      \"settings\": {\n        \"media_type_1\": \"image\",\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"flex-end\",\n        \"gap\": 16,\n        \"section_height\": \"large\",\n        \"color_scheme\": \"scheme-5\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40,\n        \"toggle_overlay\": true,\n        \"overlay_style\": \"gradient\",\n        \"gradient_direction\": \"to top\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/layered-slideshow.liquid",
    "content": "{% liquid\n  assign layered_min_height_desktop = '0px'\n  assign layered_panel_height_mobile = '0px'\n\n  case section.settings.height\n    when 'small'\n      assign layered_panel_height_mobile = '260px'\n      assign layered_min_height_desktop = 'var(--section-height-small)'\n    when 'medium'\n      assign layered_panel_height_mobile = '320px'\n      assign layered_min_height_desktop = 'var(--section-height-medium)'\n    when 'large'\n      assign layered_panel_height_mobile = '380px'\n      assign layered_min_height_desktop = 'var(--section-height-large)'\n  endcase\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} spacing-style layered-slideshow-section color-{{ section.settings.color_scheme }}\"\n  style=\"{% render 'spacing-padding', settings: section.settings %}\"\n>\n  <layered-slideshow-component style=\"--layered-panel-height-mobile: {{ layered_panel_height_mobile }}; --layered-min-height-desktop: {{ layered_min_height_desktop }}\">\n    <div\n      class=\"layered-slideshow__container\"\n      ref=\"container\"\n      size=\"{{ section.settings.height }}\"\n      style=\"--corner-radius: {% if section.settings.section_width == 'page-width' %}{{ section.settings.corner_radius | divided_by: 16.0 }}{% else %}0{% endif %}; --total-tabs: {{ section.blocks.size }}; --border-width: {{ section.settings.border_width }}px\"\n    >\n      <div\n        class=\"layered-slideshow__tablist\"\n        role=\"tablist\"\n        aria-label=\"{{ 'accessibility.slideshow' | t }}\"\n      >\n        {% for block in section.blocks %}\n          <button\n            role=\"tab\"\n            ref=\"tabs[]\"\n            id=\"Tab-{{ block.id }}-{{ section.id }}\"\n            aria-selected=\"{% if forloop.index0 == 0 %}true{% else %}false{% endif %}\"\n            aria-controls=\"Panel-{{ block.id }}-{{ section.id }}\"\n            aria-label=\"{{ 'accessibility.slide_status' | t: index: forloop.index, length: section.blocks.size }}\"\n            tabindex=\"{% if forloop.index0 == 0 %}0{% else %}-1{% endif %}\"\n          ></button>\n        {% endfor %}\n      </div>\n      <div class=\"layered-slideshow__panels\">\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </layered-slideshow-component>\n</div>\n\n{% stylesheet %}\n  .layered-slideshow-section {\n    position: relative;\n  }\n\n  layered-slideshow-component {\n    display: block;\n    width: 100%;\n  }\n\n  .layered-slideshow__container {\n    --radius: calc(var(--corner-radius, 1) * 1rem);\n    --button-width: 56px;\n    --border-color: var(--color-background);\n    --inactive-tabs-width: calc((var(--total-tabs) - 1) * var(--button-width));\n    --active-panel-width: calc(100cqi - var(--inactive-tabs-width));\n    width: 100%;\n    position: relative;\n    container-type: inline-size;\n    border-radius: var(--radius);\n    overflow: hidden;\n  }\n\n  .layered-slideshow__container:not([size='auto']) {\n    height: 100%;\n  }\n\n  .layered-slideshow__container[size='auto'] {\n    height: auto;\n  }\n\n  @media screen and (min-width: 750px) {\n    layered-slideshow-component {\n      min-height: var(--layered-min-height-desktop, 0px);\n    }\n  }\n\n  .layered-slideshow__tablist {\n    display: grid;\n    grid-template-columns: var(--active-tab);\n    position: absolute;\n    inset: 0;\n    height: 100%;\n    pointer-events: none;\n    z-index: var(--layer-raised);\n  }\n\n  .layered-slideshow__tablist button {\n    width: var(--button-width);\n    height: 100%;\n    pointer-events: all;\n    opacity: 0;\n    cursor: grab;\n    border: none;\n    background: transparent;\n    padding: 0;\n    position: relative;\n    outline: none;\n    transition: opacity 0.2s ease;\n  }\n\n  .layered-slideshow__tablist button:active {\n    cursor: grabbing;\n  }\n\n  .layered-slideshow__tablist button[aria-selected='true'] {\n    cursor: default;\n  }\n\n  .layered-slideshow__tablist button:focus-visible {\n    opacity: 1;\n  }\n\n  .layered-slideshow__container[data-dragging] {\n    cursor: grabbing;\n  }\n\n  .layered-slideshow__container[data-instant-transitions],\n  .layered-slideshow__container:is([data-dragging], [data-instant-transitions])\n    :is(\n      .layered-slideshow__tablist,\n      .layered-slideshow__panels,\n      .layered-slideshow__panel-content,\n      .layered-slideshow__content\n    ) {\n    transition: none;\n  }\n\n  .layered-slideshow__panels {\n    display: grid;\n    grid-template-columns: var(--active-tab);\n    height: 100%;\n    overflow: hidden;\n  }\n\n  .layered-slideshow__panel {\n    position: relative;\n    height: 100%;\n    min-width: var(--button-width);\n    border-radius: var(--radius);\n    z-index: calc(var(--total-tabs) - var(--index));\n  }\n\n  .layered-slideshow__panel:first-child .layered-slideshow__panel-content {\n    width: var(--active-panel-width);\n    border-left: var(--border-width) solid var(--border-color);\n  }\n\n  .layered-slideshow__panel:not(:first-child) .layered-slideshow__content {\n    padding-inline-start: calc((var(--radius) * 2) + var(--padding-inline-start, 0px));\n  }\n\n  .layered-slideshow__panel-content {\n    border: var(--border-width) solid var(--border-color);\n    border-left: none;\n    border-radius: var(--radius);\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    overflow: hidden;\n    width: calc(var(--active-panel-width) + (var(--radius) * 2));\n  }\n\n  .layered-slideshow__panel-content :is(img, video, svg) {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  /* Video poster visibility - poster shows initially and hides when panel becomes active */\n  .layered-slideshow__video-poster {\n    z-index: 1;\n  }\n\n  .layered-slideshow__video {\n    z-index: 0;\n  }\n\n  /* When panel is active, hide poster so video is visible */\n  .layered-slideshow__panel:not([inert]) .layered-slideshow__video-poster {\n    opacity: 0;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .layered-slideshow__video-poster {\n      transition: opacity 0.3s ease;\n    }\n  }\n\n  .layered-slideshow__content {\n    height: 100%;\n    position: relative;\n    z-index: 1;\n  }\n\n  .layered-slideshow__content > * {\n    margin: auto;\n  }\n\n  .layered-slideshow__content.background-transparent {\n    background-color: transparent;\n  }\n\n  .layered-slideshow__panel--drop-shadow:not(:last-child) .layered-slideshow__panel-content {\n    box-shadow: 4px 0 12px 0 rgba(0, 0, 0, 0.1);\n  }\n\n  /* Shared transitions (desktop and mobile) */\n  @media (prefers-reduced-motion: no-preference) {\n    .layered-slideshow__panels,\n    .layered-slideshow__tablist {\n      transition-property: grid-template-columns, grid-template-rows;\n      transition-duration: 0.6s;\n      transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n    }\n\n    .layered-slideshow__content {\n      opacity: 0;\n      transform: translateY(0.5lh);\n      transition: opacity 0.48s, transform 0.48s;\n    }\n\n    .layered-slideshow__panel:not([inert]) .layered-slideshow__content {\n      opacity: 1;\n      transform: translateY(0);\n      transition-delay: 0.24s;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .layered-slideshow__container {\n      --button-height: 44px;\n      --inactive-tabs-height: calc((var(--total-tabs) - 1) * var(--button-height));\n    }\n\n    .layered-slideshow__container:not([size='auto']) {\n      --layered-total-height: calc(var(--layered-panel-height-mobile, 260px) + var(--inactive-tabs-height));\n      --active-panel-height: var(--layered-panel-height-mobile, 260px);\n      min-height: var(--layered-total-height);\n      height: var(--layered-total-height);\n    }\n\n    .layered-slideshow__container[size='auto'] {\n      height: auto;\n    }\n\n    .layered-slideshow__tablist {\n      grid-template-rows: var(--active-tab);\n      grid-template-columns: 1fr;\n      grid-auto-flow: row;\n    }\n\n    .layered-slideshow__tablist button {\n      width: 100%;\n      height: var(--button-height);\n    }\n\n    .layered-slideshow__panels {\n      grid-template-rows: var(--active-tab);\n      grid-template-columns: 1fr;\n      grid-auto-flow: row;\n    }\n\n    .layered-slideshow__panel {\n      min-height: var(--button-height);\n      width: 100%;\n      height: 100%;\n      position: relative;\n      z-index: calc(var(--total-tabs) - var(--index));\n    }\n\n    .layered-slideshow__panel:first-child .layered-slideshow__panel-content {\n      width: 100%;\n      height: var(--active-panel-height);\n      border-top: var(--border-width) solid var(--border-color);\n      left: 0;\n      right: 0;\n      border-left: var(--border-width) solid var(--border-color);\n    }\n\n    .layered-slideshow__panel-content {\n      position: absolute;\n      border: var(--border-width) solid var(--border-color);\n      border-radius: var(--radius);\n      box-sizing: border-box;\n      width: 100%;\n      /* Clamp overlap to (button-height - border-width) to prevent visual issues with large radius + border */\n      height: calc(var(--active-panel-height) + min(var(--radius) * 2, var(--button-height) - var(--border-width)));\n      top: unset;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      overflow: hidden;\n    }\n\n    .layered-slideshow__panel:not(:first-child) .layered-slideshow__panel-content {\n      border-top: none;\n    }\n\n    .layered-slideshow__panel:not(:first-child) {\n      margin-top: calc(var(--border-width) * -1);\n    }\n\n    .layered-slideshow__content {\n      padding-inline-start: var(--padding-inline-start, 0px);\n      padding-inline-end: var(--padding-inline-end, 0px);\n    }\n\n    /* Adjust padding for non-first slides to account for radius overlap at the top (not sides on mobile) */\n    .layered-slideshow__panel:not(:first-child) .layered-slideshow__content {\n      padding-block-start: calc((var(--radius) * 2) + var(--padding-block-start, 0px));\n      padding-inline-start: var(--padding-inline-start, 0px);\n    }\n\n    .layered-slideshow__panel--drop-shadow:not(:last-child) .layered-slideshow__panel-content {\n      box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.layered_slideshow\",\n  \"class\": \"container-background-image\",\n  \"blocks\": [\n    {\n      \"type\": \"_layered-slide\"\n    }\n  ],\n  \"max_blocks\": 6,\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"medium\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"min\": 0,\n      \"max\": 32,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ section.settings.section_width == 'page-width' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"label\": \"t:settings.border_width\",\n      \"min\": 0,\n      \"max\": 4,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 1\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"drop_shadow\",\n      \"label\": \"t:settings.drop_shadow\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.layered_slideshow\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"slide_1\": {\n          \"type\": \"_layered-slide\",\n          \"blocks\": {\n            \"heading_1\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.new_arrivals_h2\",\n                \"type_preset\": \"h2\"\n              }\n            },\n            \"text_1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.latest_products\"\n              }\n            },\n            \"button_1\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading_1\", \"text_1\", \"button_1\"]\n        },\n        \"slide_2\": {\n          \"type\": \"_layered-slide\",\n          \"blocks\": {\n            \"heading_2\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.bestseller_h2\",\n                \"type_preset\": \"h2\"\n              }\n            },\n            \"text_2\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.discover_bestsellers\"\n              }\n            },\n            \"button_2\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading_2\", \"text_2\", \"button_2\"]\n        },\n        \"slide_3\": {\n          \"type\": \"_layered-slide\",\n          \"blocks\": {\n            \"heading_3\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.featured_collection_h2\",\n                \"type_preset\": \"h2\"\n              }\n            },\n            \"text_3\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.shop_collection\"\n              }\n            },\n            \"button_3\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading_3\", \"text_3\", \"button_3\"]\n        }\n      },\n      \"block_order\": [\"slide_1\", \"slide_2\", \"slide_3\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/logo.liquid",
    "content": "{% liquid\n  assign section_settings = section.settings\n  assign image = settings.logo\n\n  if section_settings.inverse and settings.logo_inverse\n    assign image = settings.logo_inverse\n  endif\n%}\n\n{%- if image -%}\n  {% capture logo_image %}\n    {{-\n      image\n      | image_url: width: 3840\n      | image_tag:\n        width: image.width,\n        widths: '240, 352, 832, 1200, 1600, 1920, 2560, 3840',\n        height: image.height,\n        class: 'logo-section__image',\n        alt: shop.name,\n        sizes: '(min-width: 750px) calc(var(--logo-width)), 100vw'\n    -}}\n  {% endcapture %}\n{%- endif -%}\n\n<div class=\"section-background color-{{ section_settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section_settings.section_width }} color-{{ section_settings.color_scheme }}\"\n>\n  <div\n    class=\"\n      logo-section\n      logo-section--{{ section_settings.alignment_horizontal }}\n      spacing-style\n    \"\n    style=\"\n      {% if section_settings.unit == 'percent' %}\n        --logo-width: {{ section_settings.percent_width }}%;\n      {% else %}\n        {% if image %}\n          --logo-width: {{ image.width | times: 1.00 | divided_by: image.height | times: section_settings.pixel_height }}px;\n        {% else %}\n          --logo-width: {{ shop.name.size | times: 0.65 }}em;\n          --logo-height: {{ section_settings.pixel_height }}px;\n        {% endif %}\n      {% endif %}\n\n      {% if section_settings.custom_mobile_size %}\n        {% if section_settings.unit_mobile == 'percent' %}\n          --logo-width-mobile: {{ section_settings.percent_width_mobile }}%;\n          --logo-height-mobile: auto;\n        {% else %}\n          {% if image %}\n            --logo-width-mobile: {{ image.width | times: 1.00 | divided_by: image.height | times: section_settings.pixel_height_mobile }}px;\n            {% else %}\n              --logo-width-mobile: {{ shop.name.size | times: 0.65 }}em;\n              --logo-height-mobile: {{ section_settings.pixel_height_mobile }}px;\n          {% endif %}\n        {% endif %}\n      {% endif %}\n      {% render 'spacing-style', settings: section_settings %}\n    \"\n    {{ section.shopify_attributes }}\n  >\n    {% if logo_image %}\n      <div class=\"logo-section__image-wrapper\">\n        {{ logo_image }}\n      </div>\n    {% else %}\n      {% render 'jumbo-text', text: shop.name, block_settings: section.settings %}\n    {% endif %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .logo-section {\n    width: calc(var(--logo-width) + var(--padding-inline-start) + var(--padding-inline-end));\n    max-width: 100%;\n    max-height: calc(var(--logo-height, 100%) + var(--padding-block-start) + var(--padding-block-end));\n    font-size: var(--logo-height);\n    display: flex;\n\n    @media screen and (max-width: 749px) {\n      max-height: calc(\n        var(--logo-height-mobile, var(--logo-height, 100%)) + var(--padding-block-start) + var(--padding-block-end)\n      );\n      font-size: var(--logo-height-mobile, var(--logo-height));\n      width: calc(\n        var(--logo-width-mobile, var(--logo-width)) + var(--padding-inline-start) + var(--padding-inline-end)\n      );\n    }\n  }\n\n  .logo-section--center {\n    margin-inline: auto;\n  }\n\n  .logo-section--flex-end {\n    margin-inline-start: auto;\n  }\n\n  .logo-section--flex-start {\n    margin-inline-end: auto;\n  }\n\n  .logo-section__image-wrapper {\n    display: flex;\n    width: 100%;\n    max-width: 100%;\n    max-height: 100%;\n  }\n\n  .logo-section__image {\n    object-fit: contain;\n    width: 100%;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.logo\",\n  \"enabled_on\": {\n    \"groups\": [\"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"checkbox\",\n      \"label\": \"t:settings.use_inverse_logo\",\n      \"id\": \"inverse\",\n      \"default\": false,\n      \"visible_if\": \"{{ settings.logo_inverse }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"font\",\n      \"label\": \"t:settings.font\",\n      \"options\": [\n        {\n          \"value\": \"body\",\n          \"label\": \"t:options.body\"\n        },\n        {\n          \"value\": \"subheading\",\n          \"label\": \"t:options.subheading\"\n        },\n        {\n          \"value\": \"heading\",\n          \"label\": \"t:options.heading\"\n        },\n        {\n          \"value\": \"accent\",\n          \"label\": \"t:options.accent\"\n        }\n      ],\n      \"default\": \"heading\",\n      \"visible_if\": \"{{ settings.logo == blank and settings.logo_inverse == blank or section.settings.inverse == false }}\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_logo_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"unit\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_height\",\n      \"label\": \"t:settings.height\",\n      \"min\": 16,\n      \"max\": 320,\n      \"step\": 8,\n      \"unit\": \"px\",\n      \"default\": 48,\n      \"visible_if\": \"{{ section.settings.unit == 'pixel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_width\",\n      \"label\": \"t:settings.width\",\n      \"min\": 10,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ section.settings.unit == 'percent' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"custom_mobile_size\",\n      \"label\": \"t:settings.custom_mobile_size\",\n      \"default\": false\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.mobile_size\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"unit_mobile\",\n      \"label\": \"t:settings.unit\",\n      \"options\": [\n        {\n          \"value\": \"pixel\",\n          \"label\": \"t:options.pixel\"\n        },\n        {\n          \"value\": \"percent\",\n          \"label\": \"t:options.percent\"\n        }\n      ],\n      \"default\": \"percent\",\n      \"visible_if\": \"{{ section.settings.custom_mobile_size == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"percent_width_mobile\",\n      \"label\": \"t:settings.width\",\n      \"min\": 10,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"default\": 100,\n      \"visible_if\": \"{{ section.settings.unit_mobile == 'percent' and section.settings.custom_mobile_size == true}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"pixel_height_mobile\",\n      \"label\": \"t:settings.height\",\n      \"min\": 16,\n      \"max\": 160,\n      \"step\": 8,\n      \"unit\": \"px\",\n      \"default\": 120,\n      \"visible_if\": \"{{ section.settings.unit_mobile == 'pixel' and section.settings.custom_mobile_size == true}}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"alignment_horizontal\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.logo\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"unit\": \"pixel\",\n        \"pixel_height\": 48,\n        \"alignment_horizontal\": \"center\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-404.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"\n    section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\n    {% if section.settings.section_height != \"\" %} {{ section.settings.section_height | prepend: \"section--height-\" }}{% endif %}\n  \"\n>\n  <div>\n    <div\n      class=\"\n        spacing-style\n        layout-panel-flex\n        layout-panel-flex--column\n        section-content-wrapper\n        mobile-column\n      \"\n      style=\"\n        {% render 'layout-panel-style', settings: section.settings %}\n        {% render 'spacing-style', settings: section.settings %}\n      \"\n    >\n      {% content_for 'blocks' %}\n    </div>\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.404\",\n  \"class\": \"section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        }\n      ],\n      \"default\": \"column\",\n      \"visible_if\": \"{{ section.settings.horizontal_alignment_flex_direction_column == 'fake-value' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"full-screen\",\n          \"label\": \"t:options.full_screen\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-blog-post.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div class=\"section color-{{ section.settings.color_scheme }}\">\n  <div\n    class=\"\n      spacing-style\n      layout-panel-flex\n      layout-panel-flex--column\n      section-content-wrapper\n      mobile-column\n    \"\n    style=\"\n      {% render 'layout-panel-style', settings: section.settings %}\n      {% render 'spacing-style', settings: section.settings %}\n    \"\n  >\n    <header>\n      {%- content_for 'block', id: 'blog-post-title', type: 'text' %}\n      {%- content_for 'block', id: 'blog-post-details', type: '_blog-post-info-text' %}\n    </header>\n\n    {%- if article.image -%}\n      {%- content_for 'block', id: 'blog-post-image', type: '_blog-post-featured-image' %}\n    {%- endif -%}\n    {%- content_for 'block', id: 'blog-post-content', type: '_blog-post-content' %}\n\n    {% comment %} Dynamic area for @app blocks only, at the bottom {% endcomment %}\n    {% content_for 'blocks' %}\n\n    {% if blog.comments_enabled? %}\n      <div class=\"blog-post-comments-container\">\n        <h2 class=\"h3\">{{- 'blogs.article.comments_heading' | t: count: article.comments_count -}}</h2>\n\n        <div class=\"blog-post-comments\">\n          {% paginate article.comments by 10 %}\n            {% for comment in article.comments %}\n              <div class=\"blog-post-comment\">\n                {{ comment.content }}\n                <div class=\"blog-post-comment__author\">\n                  <span class=\"blog-post-comment__author-name\">{{- comment.author -}}</span>\n                  <span>{{- 'blogs.article.comment_author_separator' | t -}}</span>\n                  <span class=\"blog-post-comment__date\">\n                    {{- comment.created_at | time_tag: format: 'date' -}}\n                  </span>\n                </div>\n              </div>\n            {% endfor %}\n\n            <div class=\"blog-post-comments-pagination\">\n              {{- paginate | default_pagination -}}\n            </div>\n          {% endpaginate %}\n        </div>\n\n        {% render 'blog-comment-form', article: article, section_id: section.id %}\n      </div>\n    {% endif %}\n  </div>\n</div>\n\n<script type=\"application/ld+json\">\n  {{ article | structured_data }}\n</script>\n\n{% stylesheet %}\n  .blog-post-comments-container {\n    width: 100%;\n    max-width: var(--normal-content-width);\n    margin: 0 auto;\n  }\n\n  .blog-post-comments {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-3xl);\n  }\n\n  .blog-post-comment__author {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-2xs);\n    margin-top: var(--margin-md);\n    font-size: var(--font-size--body-sm);\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .blog-post-comments-pagination {\n    display: flex;\n    justify-content: center;\n    gap: var(--gap-2xs);\n  }\n\n  .blog-post-comments-pagination,\n  .blog-post-comments-pagination a {\n    color: var(--color-foreground);\n  }\n\n  .blog-post-comments-pagination .current {\n    color: var(--color-foreground);\n  }\n\n  .blog-post-comments-pagination .current,\n  .blog-post-comments-pagination a {\n    display: block;\n    padding: var(--padding-2xs) var(--padding-xs);\n  }\n\n  .blog-post-comments-pagination .current,\n  .blog-post-comments-pagination a:hover {\n    border-bottom: 1px solid var(--color-foreground);\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.blog_post\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"class\": \"section-wrapper\",\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        }\n      ],\n      \"default\": \"column\",\n      \"visible_if\": \"{{ section.settings.gap < 0 }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-blog.liquid",
    "content": "<script\n  src=\"{{ 'blog-posts-list.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<blog-posts-list section-id=\"{{ section.id }}\">\n  <div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n  <div\n    class=\"\n      section\n      color-{{ section.settings.color_scheme }}\n      blog-posts\n      spacing-style\n      size-style\n    \"\n    data-testid=\"blog-posts\"\n    style=\"{% render 'spacing-style', settings: section.settings %}\"\n  >\n    {% content_for 'blocks' %}\n\n    <div\n      ref=\"grid\"\n      class=\"blog-posts-container\"\n    >\n      {% liquid\n        assign items_on_page = blog.articles.size\n      %}\n      {% for article in blog.articles %}\n        {% liquid\n          # Defaults for compact layout\n          assign col_span = 2\n          assign scale = 0.6\n          assign is_horizontal = false\n\n          case items_on_page\n            when 1\n              # Single post: full width hero\n              assign col_span = 6\n              assign scale = 1\n              assign is_horizontal = true\n            when 2\n              # Two posts: both standard side by side\n              assign col_span = 3\n              assign scale = 0.8\n            when 3\n              # Three posts: hero + 2 standard\n              if forloop.index == 1\n                assign col_span = 6\n                assign scale = 1\n                assign is_horizontal = true\n              else\n                assign col_span = 3\n                assign scale = 0.8\n              endif\n            when 4\n              # Four posts: all standard in 2x2 grid\n              assign col_span = 3\n              assign scale = 0.8\n            when 5\n              # Five posts: hero + 4 standard\n              if forloop.index == 1\n                assign col_span = 6\n                assign scale = 1\n                assign is_horizontal = true\n              else\n                assign col_span = 3\n                assign scale = 0.8\n              endif\n            else\n              # 6+ posts: hero, 2 standard, rest compact\n              if forloop.index == 1\n                assign col_span = 6\n                assign scale = 1\n                assign is_horizontal = true\n              elsif forloop.index <= 3\n                assign col_span = 3\n                assign scale = 0.8\n              else\n                assign col_span = 2\n                assign scale = 0.6\n              endif\n          endcase\n        %}\n        {% style %}\n          [data-blog-index=\"{{ section.id }}-{{ forloop.index }}\"] {\n            --col-span: {{ col_span }};\n            --blog-post-card-scale: {{ scale }};\n          }\n\n          @media screen and (max-width: 749px) {\n            [data-blog-index=\"{{ section.id }}-{{ forloop.index }}\"] {\n              --col-span: 6;\n              --blog-post-card-scale: 0.5;\n            }\n          }\n        {% endstyle %}\n        <div\n          class=\"blog-post-item{% if is_horizontal %} blog-post-item--horizontal{% endif %}\"\n          data-testid=\"blog-post-item\"\n          data-blog-index=\"{{ section.id }}-{{ forloop.index }}\"\n        >\n          {% content_for 'block', id: 'static-blog-post-card', type: '_blog-post-card', article: article %}\n        </div>\n      {% endfor %}\n    </div>\n  </div>\n</blog-posts-list>\n\n{% stylesheet %}\n  /**\n   * Blog posts page layout\n   */\n  .blog-posts {\n    --page-content-width: var(--narrow-page-width);\n    --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));\n    --columns-gap: 36px;\n    --rows-gap: 36px;\n  }\n\n  .blog-posts-container {\n    display: grid;\n    grid-template-columns: repeat(6, 1fr);\n    gap: 1rem;\n    width: 100%;\n    column-gap: var(--columns-gap);\n    row-gap: var(--rows-gap);\n  }\n\n  /**\n   * Blog post item grid positioning and scaling.\n   * Layout is calculated in Liquid based on total article count.\n   * Mobile overrides are applied per-item in inline styles for proper specificity.\n   */\n  .blog-post-item {\n    grid-column: span var(--col-span);\n  }\n\n  /**\n   * When there's no image, the blog post item has a border.\n   */\n  .blog-post-item {\n    border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-20));\n    padding: 0 1rem 1rem;\n  }\n\n  .blog-post-item:has(.blog-post-card__image-container) {\n    border: none;\n    padding: 0;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.blog_posts\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-cart.liquid",
    "content": "{% capture cart_page_more_blocks_content %}\n  <div class=\"cart-page__more-blocks\">\n    {%- content_for 'blocks' -%}\n  </div>\n{% endcapture %}\n\n<cart-items-component\n  class=\"cart-items-component\"\n  data-section-id=\"{{ section.id }}\"\n>\n  <template id=\"empty-cart-template\">\n    <div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n    <div\n      class=\"section color-{{ section.settings.color_scheme }} section--{{ section.settings.section_width }}\"\n    >\n      <div\n        class=\"cart-page spacing-style{% if cart.empty? %} cart-page--empty{% endif %}\"\n        style=\"{% render 'spacing-style', settings: section.settings %}\"\n      >\n        <div class=\"cart-page__title\">\n          {%- content_for 'block', id: 'cart-page-title', type: '_cart-title', force_empty: true %}\n        </div>\n        <div class=\"cart-page__items\">\n          {%- content_for 'block', id: 'cart-page-items', type: '_cart-products', force_empty: true %}\n        </div>\n        {{ cart_page_more_blocks_content }}\n      </div>\n    </div>\n  </template>\n\n  {% # theme-check-disable UniqueStaticBlockId %}\n  <div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n  <div\n    class=\"section color-{{ section.settings.color_scheme }} section--{{ section.settings.section_width }}\"\n  >\n    <div\n      class=\"cart-page spacing-style{% if cart.empty? %} cart-page--empty{% endif %}\"\n      style=\"{% render 'spacing-style', settings: section.settings %}\"\n    >\n      <div class=\"cart-page__title\">\n        {%- content_for 'block', id: 'cart-page-title', type: '_cart-title' %}\n      </div>\n\n      <div class=\"cart-page__items\">\n        {%- content_for 'block', id: 'cart-page-items', type: '_cart-products' %}\n      </div>\n\n      {%- unless cart.empty? -%}\n        <div class=\"cart-page__summary\">\n          {%- content_for 'block', id: 'cart-page-summary', type: '_cart-summary' -%}\n        </div>\n      {%- endunless -%}\n\n      {{ cart_page_more_blocks_content }}\n    </div>\n  </div>\n  {% # theme-check-enable UniqueStaticBlockId %}\n</cart-items-component>\n\n{% stylesheet %}\n  .cart-page {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 0 var(--padding-5xl);\n  }\n\n  .cart-page--empty {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .cart-page--empty .cart-page__title,\n  .cart-page--empty .cart-page__more-blocks {\n    margin-top: var(--margin-6xl);\n  }\n\n  .cart-page__more-blocks {\n    width: 100%;\n  }\n\n  .cart-page--empty .cart-title {\n    text-align: center;\n  }\n\n  .cart-page__main {\n    grid-column: 1;\n  }\n\n  .cart-page__summary {\n    padding-top: var(--padding-xl);\n  }\n\n  .cart-page__title + .cart-page__items {\n    margin-block-start: var(--margin-lg);\n  }\n\n  @media screen and (min-width: 750px) {\n    .cart-page {\n      grid-template-columns: 1fr min(50vw, var(--sidebar-width));\n      grid-template-rows: min-content min-content 1fr;\n    }\n\n    .cart-page__summary {\n      display: grid;\n      height: 100%;\n      grid-column: 2;\n      grid-row: 1 / -1;\n      align-self: stretch;\n      grid-template-rows: subgrid;\n      padding-top: 0;\n\n      /* needed to support blurred effect from hero section */\n      position: relative;\n    }\n\n    .section--page-width .cart-page:has(.cart-summary--extend) {\n      grid-column: 2 / 4;\n      grid-template-columns: 1fr minmax(\n          var(--sidebar-width),\n          calc((100vw - var(--page-width)) / 2 + var(--sidebar-width))\n        );\n    }\n  }\n\n  @media screen and (min-width: 1400px) {\n    .cart-page {\n      grid-template-columns: 1fr var(--sidebar-width);\n    }\n  }\n\n  html:active-view-transition-type(empty-cart-page) {\n    .cart-items-component {\n      view-transition-name: cart-page-content;\n    }\n  }\n\n  ::view-transition-old(cart-page-content) {\n    animation: cart-page-content-old var(--animation-speed-fast) var(--animation-easing) forwards;\n  }\n\n  @keyframes cart-page-content-old {\n    from {\n      opacity: 1;\n    }\n    to {\n      opacity: 0;\n      filter: blur(4px);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.cart\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-collection-list.liquid",
    "content": "{% liquid\n  assign section_collections = collections\n  assign max_items = 20\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-resource-list\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {% render 'spacing-style', settings: section.settings %}\n    {% render 'gap-style', value: section.settings.gap %}\n  \"\n>\n  <div class=\"section-resource-list__content\">\n    {%- content_for 'blocks' -%}\n  </div>\n\n  {% if section_collections == null %}\n    {% for i in (1..max_items) %}\n      {% assign section_collections = section_collections | append: ', ' %}\n    {% endfor %}\n\n    {% assign section_collections = section_collections | split: ',' %}\n  {% endif %}\n\n  {% capture list_items %}\n    {% for collection in section_collections limit: max_items %}\n      <div class=\"resource-list__item\">\n        {% content_for 'block', type: '_collection-card', id: 'static-collection-card', closest.collection: collection %}\n      </div>\n      {% unless forloop.last %}\n        <!--@list/split-->\n      {% endunless %}\n    {% endfor %}\n  {% endcapture %}\n\n  {% liquid\n    # Create an array from the list items to be used for different layout types\n    assign list_items_array = list_items | strip | split: '<!--@list/split-->'\n  %}\n\n  {% render 'resource-list',\n    list_items: list_items,\n    list_items_array: list_items_array,\n    settings: section.settings,\n    carousel_ref: 'mainCollectionList',\n    slide_count: max_items,\n    content_type: 'collections',\n    test_id: 'collections-list-grid'\n  %}\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_list\",\n  \"class\": \"ui-test-collection-list\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.cards_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        },\n        {\n          \"value\": \"bento\",\n          \"label\": \"t:options.bento\"\n        },\n        {\n          \"value\": \"editorial\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.layout_type != 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"2\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' and section.settings.carousel_on_mobile == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"bento_gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'bento' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid'}}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_collections\",\n      \"label\": \"t:settings.collection_count\",\n      \"min\": 1,\n      \"max\": 16,\n      \"step\": 1,\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.layout_type == 'editorial' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' and section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-collection.liquid",
    "content": "<script\n  src=\"{{ 'results-list.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% javascript %}\n  const url = new URL(window.location.href);\n  if (url.hash) {\n    document.addEventListener(\n      'DOMContentLoaded',\n      () => {\n        const card = document.getElementById(url.hash.slice(1));\n        if (card) {\n          card.scrollIntoView({ behavior: 'instant' });\n        }\n      },\n      { once: true }\n    );\n  }\n{% endjavascript %}\n\n{% comment %} We always render this full-width, as the child blocks have width: page/full settings {% endcomment %}\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<results-list\n  class=\"section product-grid-container color-{{ section.settings.color_scheme }}\"\n  style=\"--padding-block-start: {{ section.settings.padding-block-start }}px; --padding-block-end: {{ section.settings.padding-block-end }}px;\"\n  section-id=\"{{ section.id }}\"\n  infinite-scroll=\"{{ section.settings.enable_infinite_scroll }}\"\n>\n  {% render 'skip-to-content-link', href: '#ResultsList', text: 'accessibility.skip_to_results_list' %}\n\n  <div\n    class=\"collection-wrapper grid gap-style{% if section.settings.product_grid_width == 'full-width' %} collection-wrapper--grid-full-width{% endif %}\"\n  >\n    {% content_for 'block',\n      type: 'filters',\n      id: 'filters',\n      results: collection,\n      results_size: collection.products_count\n    %}\n\n    {% assign products_per_page = 24 %}\n\n    {% if section.settings.enable_infinite_scroll == false %}\n      {% assign products_per_page = section.settings.products_per_page %}\n    {% endif %}\n\n    {% paginate collection.products by products_per_page %}\n      {% capture children %}\n        {% for product in collection.products %}\n          <li\n            id=\"{{ section.id }}-{{ product.id }}\"\n            class=\"product-grid__item product-grid__item--{{ forloop.index0 }}\"\n            data-page=\"{{ paginate.current_page }}\"\n            data-product-id=\"{{ product.id }}\"\n            ref=\"cards[]\"\n          >\n            {% # theme-check-disable %}\n            {% content_for 'block', type: '_product-card', id: 'product-card', closest.product: product %}\n            {% # theme-check-enable %}\n          </li>\n        {% endfor %}\n      {% endcapture %}\n\n      {% render 'product-grid',\n        section: section,\n        children: children,\n        products: collection.products,\n        paginate: paginate,\n        enable_infinite_scroll: section.settings.enable_infinite_scroll\n      %}\n    {% endpaginate %}\n  </div>\n</results-list>\n\n{% stylesheet %}\n  .main-collection-grid {\n    grid-column: var(--grid-column--mobile);\n\n    @media screen and (min-width: 750px) {\n      grid-column: var(--grid-column--desktop);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.collection_container\",\n  \"enabled_on\": {\n    \"templates\": [\"collection\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"organic\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_card_size\",\n      \"label\": \"t:settings.card_size\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"extra-large\",\n          \"label\": \"t:options.extra_large\"\n        }\n      ],\n      \"default\": \"medium\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_product_card_size\",\n      \"label\": \"t:settings.mobile_card_size\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"small\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_infinite_scroll\",\n      \"label\": \"t:settings.auto_load_products\",\n      \"default\": true\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"products_per_page\",\n      \"label\": \"t:settings.products_per_page\",\n      \"min\": 8,\n      \"max\": 36,\n      \"step\": 4,\n      \"default\": 24,\n      \"visible_if\": \"{{ section.settings.enable_infinite_scroll == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_grid_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"centered\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"centered\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"full_width_on_mobile\",\n      \"label\": \"t:settings.full_width_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.product_grid_width != 'full-width' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap_horizontal\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap_vertical\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/main-page.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div class=\"section page-width-content color-{{ section.settings.color_scheme }}\">\n  <div\n    class=\"\n      spacing-style\n      layout-panel-flex\n      layout-panel-flex--column\n      section-content-wrapper\n      mobile-column\n    \"\n    style=\"\n      {% render 'layout-panel-style', settings: section.settings %}\n      {% render 'spacing-style', settings: section.settings %}\n    \"\n  >\n    {% content_for 'blocks' %}\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.page\",\n  \"class\": \"section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        }\n      ],\n      \"default\": \"column\",\n      \"visible_if\": \"{{ section.settings.gap < 0 }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/marquee.liquid",
    "content": "<script\n  src=\"{{ 'marquee.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% assign gap_between_elements = section.settings.gap_between_elements %}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<marquee-component\n  class=\"section spacing-style gap-style color-{{ section.settings.color_scheme }}\"\n  style=\"\n    {%- render 'spacing-style', settings: section.settings %};\n    {% render 'gap-style', value: gap_between_elements, name: 'marquee-gap' %}\n    --marquee-direction: {{ section.settings.movement_direction }};\n  \"\n  data-speed-factor=\"25\"\n  data-movement-direction=\"{{ section.settings.movement_direction }}\"\n>\n  <div\n    class=\"marquee__wrapper\"\n    ref=\"wrapper\"\n  >\n    <div\n      class=\"marquee__content\"\n      ref=\"content\"\n    >\n      <div\n        class=\"marquee__repeated-items\"\n        ref=\"marqueeItems[]\"\n      >\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </div>\n</marquee-component>\n\n{% stylesheet %}\n  marquee-component {\n    display: block;\n    width: 100%;\n    overflow: hidden;\n  }\n\n  .marquee__wrapper {\n    display: flex;\n    gap: var(--marquee-gap);\n    width: fit-content;\n    white-space: nowrap;\n  }\n\n  .marquee__content {\n    min-width: max-content;\n    display: flex;\n    gap: var(--marquee-gap);\n  }\n\n  .marquee__content :is(p, h1, h2, h3, h4, h5, h6) {\n    white-space: nowrap;\n  }\n\n  .marquee__content .marquee__repeated-items * {\n    max-width: none;\n  }\n\n  .marquee__repeated-items {\n    min-width: max-content;\n    display: flex;\n    gap: var(--marquee-gap);\n    align-items: center;\n    justify-content: center;\n  }\n\n  .marquee__repeated-items > * {\n    align-content: center;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    marquee-component:not([data-disabled]) .marquee__wrapper {\n      animation: marquee-motion var(--marquee-speed) linear infinite var(--marquee-direction);\n    }\n  }\n\n  @keyframes marquee-motion {\n    to {\n      transform: translate3d(calc(-50% - (var(--marquee-gap) / 2)), 0, 0);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.marquee\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"blocks\": [\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"logo\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"movement_direction\",\n      \"label\": \"t:settings.motion_direction\",\n      \"options\": [\n        {\n          \"value\": \"reverse\",\n          \"label\": \"t:options.forward\"\n        },\n        {\n          \"value\": \"normal\",\n          \"label\": \"t:options.reverse\"\n        }\n      ],\n      \"default\": \"normal\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap_between_elements\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 24\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.marquee_section\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.make_things_better\",\n            \"type_preset\": \"custom\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"var(--font-size--h2)\",\n            \"line_height\": \"tight\",\n            \"letter_spacing\": \"tight\",\n            \"case\": \"none\",\n            \"wrap\": \"nowrap\",\n            \"width\": \"fit-content\"\n          }\n        }\n      },\n      \"block_order\": [\"text\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/media-with-content.liquid",
    "content": "{% liquid\n  assign media_class_modifier = 'media-with-content--' | append: section.settings.media_width\n\n  if section.settings.extend_media and section.settings.section_width == 'page-width'\n    assign media_class_modifier = media_class_modifier | append: ' media-with-content--media-extend'\n  endif\n\n  if section.settings.media_position == 'right'\n    assign media_class_modifier = media_class_modifier | append: ' media-with-content--media-right'\n  endif\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} disable-section-top-offset media-with-content color-{{ section.settings.color_scheme }} spacing-style {{ media_class_modifier }}\"\n  data-testid=\"media-with-content\"\n  style=\"\n    {%- render 'spacing-style', settings: section.settings %}\n    {% render 'border-override', settings: section.settings %}\n    --media-height: {{ section.settings.media_height }};\n    {%- case section.settings.media_height %}\n      {% when '50svh' %}\n        --media-height-mobile: 30svh;\n      {% when '60svh' %}\n        --media-height-mobile: 50svh;\n      {% when '80svh' %}\n        --media-height-mobile: 70svh;\n      {% when '100svh' %}\n        --media-height-mobile: 100svh;\n      {% else %}\n        --media-height-mobile: auto;\n    {% endcase -%}\n\n    {% if section.settings.media_height != 'auto' %}\n     --section-preview-height: 600px;\n     {% endif %}\n  \"\n  {% if request.visual_preview_mode %}\n    data-shopify-visual-preview\n  {% endif %}\n>\n  {% content_for 'block', type: '_media-without-appearance', id: 'media' %}\n\n  {% content_for 'block', type: '_content-without-appearance', id: 'content' %}\n</div>\n\n{% stylesheet %}\n  .section--page-width {\n    &.media-with-content {\n      grid-template-areas: 'margin-left media margin-right' 'margin-left content margin-right';\n\n      @media screen and (min-width: 750px) {\n        /* Wide proportion is media 3.5 parts, content 2.5 parts. Which equals 7|5. So divide the central column by 7+5 and multiply accordingly */\n        --media-with-content-grid-columns: var(--full-page-grid-margin)\n          calc((var(--full-page-grid-central-column-width) / 12) * 7)\n          calc((var(--full-page-grid-central-column-width) / 12) * 5) var(--full-page-grid-margin);\n\n        grid-template-areas: 'margin-left media content margin-right';\n      }\n    }\n\n    &.media-with-content--media-right {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: var(--full-page-grid-margin)\n          calc((var(--full-page-grid-central-column-width) / 12) * 5)\n          calc((var(--full-page-grid-central-column-width) / 12) * 7) var(--full-page-grid-margin);\n\n        grid-template-areas: 'margin-left content media margin-right';\n      }\n    }\n\n    &.media-with-content--medium {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: var(--full-page-grid-margin)\n          repeat(2, calc(var(--full-page-grid-central-column-width) / 2)) var(--full-page-grid-margin);\n      }\n    }\n\n    &.media-with-content--narrow.media-with-content--media-right {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: var(--full-page-grid-margin)\n          calc((var(--full-page-grid-central-column-width) / 3) * 2)\n          calc(var(--full-page-grid-central-column-width) / 3) var(--full-page-grid-margin);\n      }\n    }\n\n    &.media-with-content--narrow {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: var(--full-page-grid-margin)\n          calc(var(--full-page-grid-central-column-width) / 3)\n          calc((var(--full-page-grid-central-column-width) / 3) * 2) var(--full-page-grid-margin);\n      }\n    }\n  }\n\n  .section--full-width {\n    &.media-with-content--media-right {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: 2.5fr 3.5fr;\n\n        grid-template-areas: 'content media';\n      }\n    }\n\n    &.media-with-content--medium {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: 1fr 1fr;\n      }\n    }\n\n    &.media-with-content--narrow {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: 2fr 4fr;\n      }\n    }\n\n    &.media-with-content--narrow.media-with-content--media-right {\n      @media screen and (min-width: 750px) {\n        --media-with-content-grid-columns: 4fr 2fr;\n      }\n    }\n  }\n\n  /* Keep the CSS specificity lower assuming that liquid won't assign this class with a full width section */\n  .media-with-content.media-with-content--media-extend {\n    grid-template-columns: var(--media-with-content-grid-columns);\n    grid-template-areas: 'media media media' 'margin-left content margin-right';\n\n    @media screen and (min-width: 750px) {\n      grid-template-areas: 'media media content margin-right';\n    }\n  }\n\n  .media-with-content--media-extend.media-with-content--media-right {\n    @media screen and (min-width: 750px) {\n      grid-template-areas: 'margin-left content media media';\n    }\n  }\n\n  .media-with-content--media-right {\n    @media screen and (min-width: 750px) {\n      grid-template-areas: 'margin-left content media media';\n    }\n  }\n\n  .media-with-content {\n    --media-with-content-grid-columns: var(--full-page-grid-with-margins);\n\n    grid-template-columns: var(--media-with-content-grid-columns);\n    grid-template-areas: 'media media media' 'content content content';\n\n    @media screen and (min-width: 750px) {\n      --media-with-content-grid-columns: 3.5fr 2.5fr;\n\n      /* Default desktop layout is wide media, on the left, in full page section */\n      grid-template-areas: 'media content';\n    }\n\n    .media-block {\n      grid-area: media;\n    }\n\n    .media-with-content__content {\n      grid-area: content;\n    }\n\n    /* Inner blocks spacing */\n    .media-with-content__content > .group-block-content {\n      padding-inline: var(--page-margin);\n      padding-block: calc(2 * var(--page-margin));\n\n      @media screen and (min-width: 750px) {\n        padding-block: var(--page-margin);\n      }\n    }\n\n    &.section--page-width .media-with-content__content > .group-block-content {\n      padding-inline: 0;\n\n      @media screen and (min-width: 750px) {\n        padding-inline-start: var(--page-margin);\n      }\n    }\n\n    &.section--page-width.media-with-content--media-right .media-with-content__content > .group-block-content {\n      padding-inline-end: var(--page-margin);\n      padding-inline-start: 0;\n    }\n  }\n\n  .media-with-content[data-shopify-visual-preview] {\n    --hero-min-height: 500px;\n\n    min-height: 500px;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.media_with_text\",\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"media_position\",\n      \"label\": \"t:settings.media_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_width\",\n      \"label\": \"t:settings.media_width\",\n      \"options\": [\n        {\n          \"value\": \"narrow\",\n          \"label\": \"t:options.narrow\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"wide\",\n          \"label\": \"t:options.wide\"\n        }\n      ],\n      \"default\": \"wide\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"media_height\",\n      \"label\": \"t:settings.media_height\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"50svh\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"60svh\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"80svh\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"100svh\",\n          \"label\": \"t:options.full_screen\"\n        }\n      ],\n      \"default\": \"80svh\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.section_width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"full-width\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"extend_media\",\n      \"label\": \"t:settings.extend_media_to_screen_edge\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.section_width == 'page-width' }}\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-3\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.editorial\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"media_width\": \"medium\",\n        \"media_height\": \"60svh\",\n        \"color_scheme\": \"scheme-4\"\n      },\n      \"blocks\": {\n        \"media\": {\n          \"type\": \"_media-without-appearance\",\n          \"static\": true\n        },\n        \"content\": {\n          \"type\": \"_content-without-appearance\",\n          \"static\": true,\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"space-between\"\n          },\n          \"blocks\": {\n            \"caption\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.caption\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.bestseller\",\n                \"type_preset\": \"h6\"\n              }\n            },\n            \"group\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"height\": \"fit\"\n              },\n              \"blocks\": {\n                \"heading\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.signature_products\",\n                    \"type_preset\": \"h3\"\n                  }\n                },\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.made_with_care_extended\",\n                    \"max_width\": \"narrow\",\n                    \"type_preset\": \"rte\"\n                  }\n                }\n              },\n              \"block_order\": [\"heading\", \"text\"]\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\",\n                \"style_class\": \"link\"\n              }\n            }\n          },\n          \"block_order\": [\"caption\", \"group\", \"button\"]\n        }\n      }\n    },\n    {\n      \"name\": \"t:names.editorial_jumbo_text\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"media_position\": \"right\",\n        \"media_width\": \"medium\",\n        \"media_height\": \"60svh\",\n        \"color_scheme\": \"scheme-3\"\n      },\n      \"blocks\": {\n        \"media\": {\n          \"type\": \"_media-without-appearance\",\n          \"static\": true\n        },\n        \"content\": {\n          \"type\": \"_content-without-appearance\",\n          \"static\": true,\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"flex-end\"\n          },\n          \"blocks\": {\n            \"caption\": {\n              \"type\": \"jumbo-text\",\n              \"name\": \"t:names.jumbo_text\",\n              \"settings\": {\n                \"text\": \"t:text_defaults.up_the_ante\",\n                \"font\": \"heading\",\n                \"alignment\": \"right\",\n                \"line_height\": \"0.8\",\n                \"letter_spacing\": \"-0.03em\",\n                \"case\": \"uppercase\"\n              }\n            }\n          },\n          \"block_order\": [\"caption\"]\n        }\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/password-footer.liquid",
    "content": "<div\n  class=\"password-footer color-{{ section.settings.color_scheme }}\"\n  data-testid=\"password-footer\"\n>\n  <p class=\"password-footer__powered-by\">\n    {{ 'content.powered_by' | t }}\n    <a\n      href=\"//shopify.com\"\n      rel=\"nofollow\"\n      target=\"_blank\"\n      aria-label=\"Shopify\"\n      aria-describedby=\"a11y-new-window-message\"\n    >\n      {{- 'icon-shopify.svg' | inline_asset_content -}}\n    </a>\n  </p>\n  <div class=\"password-footer__links\">\n    <button\n      class=\"button-unstyled password-footer__button\"\n      on:click=\"#password-form/showDialog\"\n    >\n      {{ 'actions.enter_using_password' | t }}\n    </button>\n    <p class=\"password-footer__admin-link\">\n      {{ 'content.store_owner_link_html' | t: link: '/admin' }}\n    </p>\n  </div>\n  <ul hidden>\n    <li id=\"a11y-new-window-message\">{{ 'accessibility.new_window' | t }}</li>\n  </ul>\n</div>\n\n{% stylesheet %}\n  .password-footer {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: var(--gap-sm);\n    padding-block: var(--padding-xl);\n  }\n\n  .password-footer__powered-by {\n    margin: 0;\n    display: flex;\n    align-items: center;\n    gap: var(--padding-xs);\n    height: 1em;\n\n    > a {\n      display: flex;\n    }\n\n    .icon-shopify {\n      display: inline;\n      height: 1.3em;\n      color: var(--color-foreground);\n    }\n  }\n\n  .password-footer__links {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-2xl);\n\n    @media screen and (max-width: 749px) {\n      flex-direction: column;\n      gap: var(--gap-sm);\n    }\n  }\n\n  .password-footer__admin-link {\n    margin: 0;\n  }\n\n  .password-footer__button {\n    height: var(--minimum-touch-target);\n    background-color: transparent;\n    color: var(--color-primary);\n    cursor: pointer;\n    text-decoration: underline;\n\n    &:hover {\n      color: var(--color-primary-hover);\n      text-decoration: none;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.footer_password\",\n  \"class\": \"section-wrapper\",\n  \"settings\": [\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/password.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n>\n  <div\n    class=\"border-style\"\n    style=\"{% render 'border-override', settings: section.settings %}\"\n  >\n    {% render 'background-media',\n      background_media: section.settings.background_media,\n      background_video: section.settings.video,\n      background_video_position: section.settings.video_position,\n      background_image: section.settings.background_image,\n      background_image_position: section.settings.background_image_position\n    %}\n\n    <div\n      class=\"\n        spacing-style\n        layout-panel-flex\n        layout-panel-flex--{{ section.settings.content_direction }}\n        section-content-wrapper\n        {% if section.settings.vertical_on_mobile %} mobile-column{% endif %}\n      \"\n      style=\"\n        {% render 'layout-panel-style', settings: section.settings %}\n        {%  render 'spacing-style', settings: section.settings %}\n      \"\n      data-testid=\"section-content\"\n    >\n      {% content_for 'blocks' %}\n\n      {%- if shop.password_message != blank -%}\n        <div class=\"password-content\">\n          {{ shop.password_message }}\n        </div>\n      {%- endif -%}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .section-password {\n    flex-grow: 1;\n    display: flex;\n  }\n\n  .password-content {\n    text-align: center;\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.section\",\n  \"class\": \"section-wrapper section-password\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/predictive-search-empty.liquid",
    "content": "{% render 'predictive-search-empty-state',\n  load_empty_state: true,\n  shadow_opacity: 0.1,\n  products_test_id: 'products-list-default--reset'\n%}\n\n{% schema %}\n{\n  \"name\": \"t:names.predictive_search_empty\",\n  \"class\": \"predictive-search-empty-section\",\n  \"settings\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/predictive-search.liquid",
    "content": "{%- if predictive_search.performed or search.performed -%}\n  <div\n    id=\"predictive-search-results\"\n    class=\"predictive-search-dropdown\"\n    role=\"listbox\"\n    aria-label=\"{{ 'content.search_results_label' | t }}\"\n    aria-expanded=\"true\"\n    data-transition-container\n    style=\"--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\"\n  >\n    <div\n      class=\"predictive-search-results__inner\"\n      data-search-results\n    >\n      {% if predictive_search.performed %}\n        {% assign search_results_count = predictive_search.resources.products.size\n          | plus: predictive_search.resources.pages.size\n          | plus: predictive_search.resources.articles.size\n          | plus: predictive_search.resources.collections.size\n          | plus: predictive_search.resources.queries.size\n        %}\n      {% else %}\n        {% assign search_results_count = search.results_count %}\n      {% endif %}\n\n      <div\n        class=\"visually-hidden\"\n        role=\"status\"\n        aria-live=\"polite\"\n      >\n        {%- if predictive_search.performed and search_results_count > 0 -%}\n          {{ 'accessibility.search_results_count' | t: count: search_results_count, query: predictive_search.terms }}\n        {%- elsif predictive_search.performed and search_results_count == 0 -%}\n          {{ 'accessibility.search_results_no_results' | t: query: predictive_search.terms }}\n        {%- endif -%}\n      </div>\n\n      {% if predictive_search.performed %}\n        {%- if search_results_count > 0 -%}\n          {% assign shared_results_index = 0 %}\n          {% if predictive_search.resources.queries.size > 0 %}\n            {% assign shared_results_index = shared_results_index\n              | plus: predictive_search.resources.collections.size\n            %}\n            <ul\n              class=\"predictive-search-results__list predictive-search-results__wrapper predictive-search-results__wrapper-queries list-unstyled\"\n              role=\"listbox\"\n              aria-labelledby=\"predictive-search-queries\"\n            >\n              {%- for resource in predictive_search.resources.queries -%}\n                <li\n                  class=\"predictive-search-results__card--query\"\n                  ref=\"resultsItems[]\"\n                  data-search-result-index=\"search-results-{{ shared_results_index | plus: forloop.index }}\"\n                  on:keydown=\"/onSearchKeyDown\"\n                >\n                  <a\n                    class=\"pills__pill predictive-search-results__pill\"\n                    href=\"{{ resource.url }}\"\n                  >\n                    <span\n                      aria-label=\"{{ resource.text }}\"\n                    >\n                      {{ resource.styled_text }}\n                    </span>\n                  </a>\n                </li>\n              {% endfor %}\n            </ul>\n          {% endif %}\n          {% if predictive_search.resources.products.size > 0 %}\n            {%- liquid\n              assign title = 'content.search_results_resource_products' | t\n              assign products = predictive_search.resources.products\n              render 'predictive-search-products-list', title: title, products: products\n            -%}\n          {% endif %}\n\n          {% if predictive_search.resources.collections.size > 0 %}\n            {% assign shared_results_index = shared_results_index | plus: predictive_search.resources.articles.size %}\n            {% assign resource_title = 'content.search_results_resource_collections' | t %}\n\n            {% render 'predictive-search-resource-carousel',\n              title: resource_title,\n              resource_type: 'collection',\n              resources: predictive_search.resources.collections\n            %}\n          {% endif %}\n\n          {% if predictive_search.resources.pages.size > 0 %}\n            {% assign shared_results_index = shared_results_index | plus: predictive_search.resources.products.size %}\n            {% assign resource_title = 'content.search_results_resource_pages' | t %}\n\n            {% render 'predictive-search-resource-carousel',\n              title: resource_title,\n              resource_type: 'page',\n              resources: predictive_search.resources.pages\n            %}\n          {% endif %}\n\n          {% if predictive_search.resources.articles.size > 0 %}\n            {% assign shared_results_index = shared_results_index | plus: predictive_search.resources.pages.size %}\n            {% assign resource_title = 'content.search_results_resource_articles' | t %}\n\n            {% render 'predictive-search-resource-carousel',\n              title: resource_title,\n              resource_type: 'article',\n              resources: predictive_search.resources.articles\n            %}\n          {% endif %}\n        {% else %}\n          <p class=\"predictive-search-results__no-results\">\n            {{ 'content.search_results_no_results' | t: terms: predictive_search.terms }}\n          </p>\n        {% endif %}\n      {% else %}\n        {% assign shared_results_index = 0 %}\n        {%- liquid\n          assign title = 'content.recently_viewed_products' | t\n          assign products = search.results\n\n          comment\n            Searching for recently viewed products by id doesn't preserve the order of the products.\n            To work around this, we get the product ids into an array then use that to reorder them.\n          endcomment\n          if search.terms contains 'id:'\n            assign new_products_ids = search.terms | replace: 'id:', '' | split: ' OR '\n          endif\n          render 'predictive-search-products-list', title: title, products: products, order_ids: new_products_ids, limit: 4\n        -%}\n      {% endif %}\n\n      {% if predictive_search.performed %}\n        {%- if search_results_count > 0 -%}\n          {% assign total_results = predictive_search.resources.products.size\n            | plus: predictive_search.resources.collections.size\n            | plus: predictive_search.resources.pages.size\n            | plus: predictive_search.resources.articles.size\n          %}\n          {% assign single_result_url = null %}\n          {% if total_results == 1 %}\n            {% if predictive_search.resources.products.size == 1 %}\n              {% assign single_result_url = predictive_search.resources.products.first.url %}\n            {% elsif predictive_search.resources.collections.size == 1 %}\n              {% assign single_result_url = predictive_search.resources.collections.first.url %}\n            {% elsif predictive_search.resources.pages.size == 1 %}\n              {% assign single_result_url = predictive_search.resources.pages.first.url %}\n            {% elsif predictive_search.resources.articles.size == 1 %}\n              {% assign single_result_url = predictive_search.resources.articles.first.url %}\n            {% endif %}\n          {% endif %}\n\n          {% if single_result_url %}\n            <div data-single-result-url=\"{{ single_result_url }}\"></div>\n          {% endif %}\n        {% endif %}\n      {% endif %}\n    </div>\n  </div>\n{%- endif -%}\n\n{% stylesheet %}\n  input[type='search']::-webkit-search-decoration {\n    -webkit-appearance: none; /* stylelint-disable-line */\n  }\n\n  .predictive-search-dropdown {\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: var(--layer-base);\n  }\n\n  .search-action .predictive-search {\n    z-index: calc(var(--layer-header-menu) + 2);\n  }\n\n  .search-action .search-modal .predictive-search {\n    z-index: var(--layer-window-overlay);\n  }\n\n  .header__column--right .predictive-search-form__content-wrapper {\n    right: 0;\n    left: unset;\n  }\n\n  .search-modal .predictive-search-form__content-wrapper {\n    width: 100%;\n\n    @media screen and (min-width: 750px) {\n      height: fit-content;\n    }\n  }\n  .dialog-modal .predictive-search-form__header-inner {\n    @media screen and (min-width: 750px) {\n      border: 0;\n    }\n  }\n\n  .search-modal__content .predictive-search-form__content {\n    max-height: var(--modal-max-height);\n  }\n\n  .predictive-search:has(.predictive-search-dropdown) .search-input {\n    outline-color: transparent;\n  }\n\n  .predictive-search:has(.predictive-search-dropdown) .predictive-search-form__header-inner:focus-within {\n    border-top-color: transparent;\n    border-right-color: transparent;\n    border-left-color: transparent;\n\n    @media screen and (max-width: 749px) {\n      border-bottom-color: transparent;\n    }\n  }\n\n  .predictive-search:has(.predictive-search-dropdown[aria-expanded='true'])\n    .predictive-search-form__header-inner:focus-within {\n    border-top-color: transparent;\n    border-right-color: transparent;\n    border-left-color: transparent;\n    border-radius: var(--search-border-radius);\n\n    @media screen and (max-width: 749px) {\n      border-radius: var(--style-border-radius-inputs);\n    }\n  }\n\n  .dialog-modal .predictive-search-form__header {\n    border: 0;\n    border-radius: 0;\n    background-color: var(--color-background);\n    border-bottom: var(--style-border-width) solid var(--color-border);\n\n    @media screen and (min-width: 750px) {\n      padding: var(--padding-2xs) var(--padding-2xs) 0;\n      border-bottom: var(--search-border-width) solid var(--color-border);\n    }\n\n    @media screen and (max-width: 749px) {\n      transition: box-shadow 0.2s ease;\n      box-shadow: none;\n    }\n  }\n\n  .search-action .predictive-search:has(.predictive-search-dropdown) .predictive-search-form__header:focus-within {\n    border-radius: var(--search-border-radius) var(--search-border-radius) 0 0;\n    transition: box-shadow var(--animation-speed) var(--animation-easing);\n    background-color: var(--color-background);\n\n    @media screen and (max-width: 749px) {\n      border-radius: var(--style-border-radius-inputs) var(--style-border-radius-inputs) 0 0;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .dialog-modal .predictive-search__close-modal-button {\n      padding-inline-start: var(--margin-xs);\n      margin-inline-start: 0;\n    }\n  }\n\n  .dialog-modal[open] {\n    @media screen and (max-width: 749px) {\n      border-radius: 0;\n    }\n  }\n\n  .dialog-modal .predictive-search-form__header:has(.predictive-search-form__header-inner:focus-within) {\n    @media screen and (min-width: 750px) {\n      border-bottom-color: transparent;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .dialog-modal {\n      .predictive-search__reset-button-icon {\n        display: none;\n      }\n\n      .predictive-search__reset-button-text {\n        display: block;\n      }\n\n      .predictive-search-form__content {\n        /* The parent has overflow auto, we want to prevent a double scrollbar during animation */\n        max-height: 100%;\n      }\n\n      .predictive-search-form__content-wrapper {\n        box-shadow: none;\n      }\n\n      .predictive-search-form__header {\n        box-shadow: none;\n      }\n\n      .predictive-search-form__footer {\n        padding-block: var(--padding-2xl);\n      }\n    }\n  }\n\n  .predictive-search-results__pill {\n    font-weight: 500;\n    white-space: nowrap;\n    color: var(--color-foreground);\n    transition: background-color var(--animation-speed-medium) var(--animation-timing-hover),\n      box-shadow var(--animation-speed-medium) var(--animation-timing-bounce),\n      transform var(--animation-speed-medium) var(--animation-timing-bounce);\n    margin: 2px;\n\n    &:hover {\n      transform: scale(1.03);\n      box-shadow: 0 2px 5px rgb(0 0 0 / var(--opacity-8));\n    }\n  }\n\n  .predictive-search-results__pill mark {\n    background-color: transparent;\n    font-weight: 200;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-80));\n  }\n\n  .predictive-search-results__pill:focus,\n  .predictive-search-results__pill:hover,\n  .predictive-search-results__card--query:is([aria-selected='true'], :focus-within) .predictive-search-results__pill {\n    --pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8));\n\n    background-color: var(--pill-background-color);\n    outline: var(--border-width-sm) solid var(--color-border);\n    border: var(--border-width-sm);\n    text-decoration: none;\n  }\n\n  .predictive-search-results__title {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    font-size: var(--font-size--body-md);\n    font-weight: 500;\n    margin-block: var(--margin-sm) var(--margin-xs);\n    width: 100%;\n    text-transform: var(--title-case);\n\n    &:first-of-type {\n      margin-block-start: 0;\n    }\n\n    @media screen and (max-width: 749px) {\n      margin-block: var(--margin-lg) var(--margin-sm);\n    }\n  }\n\n  .predictive-search-results__wrapper.predictive-search-results__wrapper-queries {\n    margin-bottom: var(--margin-lg);\n    padding-inline: var(--padding-xl);\n    gap: var(--gap-2xs);\n  }\n\n  .predictive-search-results__card {\n    --title-font-size: var(--font-size--md);\n    --title-margin-block: var(--margin-xs);\n\n    flex: 0 0 auto;\n    scroll-snap-align: start;\n    scroll-margin-block: calc(var(--title-font-size) + var(--title-margin-block) + var(--padding-sm))\n      calc(var(--padding-xl) + var(--button-padding-block) * 2);\n    transition: transform var(--animation-speed-medium) var(--animation-timing-default),\n      background-color var(--animation-speed-medium) var(--animation-timing-hover),\n      border-color var(--animation-speed-medium) var(--animation-timing-hover);\n\n    &:nth-last-child(3) {\n      scroll-snap-align: end;\n    }\n\n    &:active {\n      transform: scale(0.97);\n      transition: transform 100ms var(--animation-timing-active);\n    }\n  }\n\n  .recently-viewed-wrapper .predictive-search-results__card {\n    opacity: 1;\n    transform: translateY(0);\n    transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  .recently-viewed-wrapper.removing .predictive-search-results__card {\n    opacity: 0;\n    transform: translateY(-10px);\n    pointer-events: none;\n  }\n\n  .predictive-search-results__card--product,\n  .recently-viewed-wrapper .predictive-search-results__card--product {\n    &:active {\n      transform: scale(0.97);\n      transition: transform 100ms var(--animation-timing-active);\n    }\n\n    &:hover {\n      background-color: var(--card-bg-hover);\n      border-radius: var(--product-corner-radius);\n      padding: calc(var(--padding-2xs) + 2px);\n      margin: calc((var(--padding-2xs) + 2px) * -1);\n    }\n\n    &:is([aria-selected='true'].keyboard-focus, &:focus-visible, &:has(.resource-card:focus-visible)) {\n      background-color: var(--card-bg-hover);\n      padding: calc(var(--padding-2xs) + 1px);\n      margin: calc((var(--padding-2xs) + 1px) * -1);\n      outline: var(--border-width-sm) solid var(--color-border);\n      border-radius: calc(var(--product-corner-radius) + 1px);\n      border-color: var(--card-border-focus);\n    }\n  }\n\n  .predictive-search-results__card:not(.predictive-search-results__card--product) {\n    padding: var(--padding-sm);\n    border: var(--border-width-sm) solid var(--color-border);\n    border-radius: var(--card-corner-radius);\n    width: 60cqi;\n    content-visibility: visible;\n\n    @media screen and (min-width: 750px) {\n      width: 27.5cqi;\n    }\n\n    &:hover {\n      border-color: var(--card-border-hover);\n      background-color: var(--card-bg-hover);\n    }\n\n    &[aria-selected='true'].keyboard-focus {\n      border-color: var(--card-border-hover);\n      background-color: var(--card-bg-hover);\n    }\n\n    &:active {\n      transform: scale(0.97);\n      transition: transform var(--animation-speed-medium) var(--animation-timing-active);\n    }\n  }\n\n  @keyframes search-element-scale-in {\n    0% {\n      transform: scale(0.95);\n      opacity: 0;\n    }\n\n    40% {\n      opacity: 1;\n    }\n\n    100% {\n      transform: scale(1);\n      opacity: 1;\n    }\n  }\n\n  @keyframes search-element-scale-out {\n    0% {\n      transform: scale(1);\n      opacity: 1;\n    }\n\n    100% {\n      transform: scale(0.95);\n      opacity: 0;\n    }\n  }\n\n  @keyframes search-element-slide-in-top {\n    from {\n      margin-top: calc(var(--modal-top-margin) + var(--padding-sm));\n      opacity: 0;\n    }\n\n    to {\n      margin-top: var(--modal-top-margin);\n      opacity: 1;\n    }\n  }\n\n  @keyframes search-element-slide-out-top {\n    from {\n      margin-top: var(--modal-top-margin);\n      opacity: 1;\n    }\n\n    to {\n      margin-top: calc(var(--modal-top-margin) + var(--padding-sm));\n      opacity: 0;\n    }\n  }\n\n  @keyframes content-slide {\n    from {\n      transform: translateY(var(--slide-from, 0));\n      opacity: var(--slide-opacity-from, 1);\n    }\n\n    to {\n      transform: translateY(var(--slide-to, 0));\n      opacity: var(--slide-opacity-to, 1);\n    }\n  }\n\n  .predictive-search-results__list {\n    --slide-width: 27.5%;\n    --slideshow-gap: var(--gap-md);\n\n    /* Make space for the outline to be visible */\n    padding-block-start: var(--border-width-sm);\n  }\n\n  .predictive-search-results__list slideshow-arrows {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .predictive-search-results__no-results {\n    animation-delay: 100ms;\n    transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-in);\n  }\n\n  .predictive-search-results__no-results,\n  .predictive-search-results__wrapper,\n  .predictive-search-results__wrapper-products .predictive-search-results__card {\n    animation: search-element-slide-up var(--animation-speed-medium) var(--animation-timing-bounce) backwards;\n  }\n\n  .predictive-search-results__no-results:last-child {\n    margin-block: var(--margin-lg);\n    text-align: center;\n  }\n\n  slideshow-slide .resource-card {\n    /* stylelint-disable-next-line declaration-no-important */\n    animation-delay: 0ms !important;\n  }\n\n  .predictive-search-results__list,\n  .predictive-search-results__wrapper {\n    animation-duration: var(--animation-speed-medium);\n  }\n\n  .predictive-search-results__wrapper-queries {\n    animation-delay: 50ms;\n  }\n\n  .predictive-search-results__list:nth-of-type(2) {\n    animation-delay: 150ms;\n  }\n\n  .predictive-search-results__list:nth-of-type(3) {\n    animation-delay: 200ms;\n  }\n\n  .predictive-search-results__list:nth-of-type(4) {\n    animation-delay: 250ms;\n  }\n\n  .predictive-search-results__list:last-child {\n    margin-block-end: 0;\n  }\n\n  [data-resource-type] {\n    /* stylelint-disable-next-line declaration-no-important */\n    animation-delay: 0ms !important;\n  }\n\n  .predictive-search-results__no-results.removing,\n  .predictive-search-results__wrapper.removing {\n    animation: search-element-slide-down var(--animation-speed-medium) var(--animation-timing-fade-out) forwards;\n  }\n\n  .predictive-search-results__card.removing {\n    animation: fadeOut var(--animation-speed-medium) var(--animation-timing-fade-out) forwards;\n  }\n\n  .predictive-search-results__wrapper {\n    transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-in);\n  }\n\n  @keyframes search-element-slide-up {\n    from {\n      opacity: 0;\n      transform: translateY(8px);\n    }\n\n    to {\n      opacity: 1;\n      transform: translateY(0);\n    }\n  }\n\n  @keyframes search-element-slide-down {\n    from {\n      opacity: 1;\n      transform: translateY(0);\n    }\n\n    to {\n      opacity: 0;\n      transform: translateY(8px);\n    }\n  }\n\n  .predictive-search-results__card--query {\n    transition: transform var(--animation-speed-medium) var(--animation-timing-bounce);\n    transform-origin: center;\n\n    &:active {\n      transform: scale(0.97);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.predictive_search\",\n  \"settings\": [],\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/product-hotspots.liquid",
    "content": "<script\n  src=\"{{ 'product-hotspot.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    section-product-hotspots\n    color-{{ section.settings.color_scheme }}\n    spacing-style\n    gap-style\n  \"\n  data-testid=\"product-hotspots\"\n  style=\"\n    {% render 'spacing-style', settings: section.settings %}\n    {% render 'gap-style', value: 28 %}\n    {% if section.settings.section_height != 'auto' %}\n      --ratio: {{ section.settings.section_height }};\n    {% elsif section.settings.image != blank %}\n      --ratio: {{ section.settings.image.aspect_ratio }};\n    {% endif %}\n    --product-title-gap: {{ section.settings.product_title_gap }}px;\n    --hotspot-size: 36px;\n    --minimum-width-dialog: 260px;\n    --maximum-width-dialog: 330px;\n    --width-product-image-dialog: 110px;\n  \"\n>\n  <div class=\"section-product-hotspots__wrapper\">\n    <div class=\"section-product-hotspots__header\">\n      {% content_for 'block', type: 'text', id: 'heading' %}\n    </div>\n\n    <div class=\"section-product-hotspots__content\">\n      {% if section.settings.toggle_overlay %}\n        {% render 'overlay', settings: section.settings, layer: 'var(--layer-flat)' %}\n      {% endif %}\n\n      {% if section.settings.image != blank %}\n        {% render 'image', image: section.settings.image, class: 'hotspots__background-image' %}\n      {% else %}\n        {{ 'hero-apparel-1' | placeholder_svg_tag: 'hotspots__background-image' }}\n      {% endif %}\n\n      <div class=\"hotspots-container\">\n        {% content_for 'blocks' %}\n      </div>\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  /* Section layout */\n  .section-product-hotspots {\n    position: relative;\n  }\n\n  .section-product-hotspots__wrapper {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap);\n    width: 100%;\n    height: 100%;\n  }\n\n  /* Image container */\n  .section-product-hotspots__content {\n    position: relative;\n    aspect-ratio: var(--ratio, 21 / 9);\n    overflow: hidden;\n  }\n\n  /* Hide hotspots without products on touch devices (tablets included) */\n  @media (hover: none) {\n    .hotspot.hotspot--hidden-touch {\n      display: none;\n    }\n  }\n\n  /* Responsive adjustments */\n  @media screen and (max-width: 749px) {\n    /* Hide dialog on mobile - hotspot opens quick-add modal instead */\n    .hotspot .hotspot-dialog {\n      display: none;\n    }\n  }\n\n  /* Hotspot button - positioned element with clickable area */\n  .hotspot {\n    position: absolute;\n    cursor: pointer;\n    width: var(--button-size);\n    height: var(--button-size);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: transparent;\n    border: none;\n    padding: 0;\n    font: inherit;\n    color: inherit;\n    outline: none;\n    transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out;\n    z-index: var(--layer-flat);\n  }\n\n  .hotspot:has(.hotspot-dialog[open]) {\n    z-index: var(--layer-raised);\n  }\n\n  .hotspot .hotspot-trigger {\n    padding: 0;\n    border: none;\n  }\n\n  .hotspot-dialog__product-content {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    padding: var(--padding-xs);\n    padding-inline-start: 0;\n    overflow: hidden;\n  }\n\n  /* Visual target circle */\n  .hotspot-trigger {\n    width: var(--hotspot-size);\n    height: var(--hotspot-size);\n    background: var(--hotspot-bg, rgb(0 0 0 / 0.5));\n    border-radius: 50%;\n    cursor: pointer;\n    position: relative;\n    transition: width 0.1s ease-out, height 0.1s ease-out;\n  }\n\n  /* On mobile, ensure trigger is tappable */\n  @media screen and (max-width: 749px) {\n    .hotspot-trigger {\n      cursor: pointer;\n      -webkit-tap-highlight-color: transparent;\n    }\n  }\n\n  /* Bullseye using ::after pseudo-element */\n  .hotspot-trigger::after {\n    content: '';\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: calc(var(--hotspot-size) * 0.4);\n    height: calc(var(--hotspot-size) * 0.4);\n    background: var(--hotspot-bullseye, #fff);\n    border-radius: 50%;\n    transform: translate(-50%, -50%);\n    transition: width 0.1s ease-out, height 0.1s ease-out, background 0.1s ease-out;\n  }\n\n  /* Bullseye grows on hover or when dialog is open (desktop only) */\n  @media screen and (min-width: 750px) {\n    .hotspot:hover .hotspot-trigger::after,\n    .hotspot:has(.hotspot-dialog[open]) .hotspot-trigger::after {\n      width: calc(var(--hotspot-size) * 0.55);\n      height: calc(var(--hotspot-size) * 0.55);\n      transition: width 0.2s ease-out, height 0.2s ease-out, background 0.2s ease-out;\n      transition-delay: 0.2s;\n    }\n  }\n\n  .hotspots-container {\n    position: absolute;\n    inset: 0;\n    z-index: var(--layer-flat);\n    overflow: clip;\n  }\n\n  .hotspots__background-image {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center;\n  }\n\n  /* Dialog positioning */\n  .hotspot .hotspot-dialog {\n    position: absolute;\n    padding: 0;\n    border-radius: var(--style-border-radius-popover);\n    border: var(--style-border-popover);\n    width: max-content;\n    min-width: var(--minimum-width-dialog);\n    max-width: var(--maximum-width-dialog);\n    box-shadow: var(--shadow-popover);\n\n    &[data-placement*='bottom'] {\n      --offset-y: 0px;\n      --origin-y: calc(var(--hotspot-size) / 2);\n      top: calc((var(--button-size) - var(--hotspot-size)) / 2 + var(--dialog-vertical-offset, 0px));\n      bottom: unset;\n    }\n    &[data-placement*='top'] {\n      --offset-y: 0px;\n      --origin-y: calc(100% - (var(--hotspot-size) * 0.5));\n      top: unset;\n      bottom: calc((var(--button-size) - var(--hotspot-size)) * 0.5 - var(--dialog-vertical-offset, 0px));\n    }\n    &[data-placement*='left'] {\n      --offset-x: calc((var(--button-size) - var(--hotspot-size)) * 0.5);\n      --origin-x: calc(100% - (var(--hotspot-size) * 0.5));\n      left: unset;\n      right: 100%;\n    }\n    &[data-placement*='right'] {\n      --offset-x: calc((var(--button-size) - var(--hotspot-size)) * -0.5);\n      --origin-x: calc(var(--hotspot-size) * 0.5);\n      left: 100%;\n      right: unset;\n    }\n    &[data-placement*='center'] {\n      left: 50%;\n      translate: -50% 0;\n      right: unset;\n    }\n    &[data-placement*='center'][data-placement*='bottom'] {\n      --origin-y: calc(var(--hotspot-size) * 0.5);\n      --origin-x: 50%;\n      --offset-y: calc((var(--button-size) - var(--hotspot-size)) * -0.5);\n      /* stylelint-disable-next-line declaration-property-value-disallowed-list */\n      --offset-x: 0;\n      top: 100%;\n      bottom: unset;\n      margin: 0;\n    }\n    &[data-placement*='center'][data-placement*='top'] {\n      --origin-y: calc(100% - (var(--hotspot-size) * 0.5));\n      --origin-x: 50%;\n      --offset-y: calc((var(--button-size) - var(--hotspot-size)) * 0.5);\n      /* stylelint-disable-next-line declaration-property-value-disallowed-list */\n      --offset-x: 0;\n      bottom: 100%;\n    }\n  }\n\n  .hotspot .hotspot-dialog:is(:focus, :focus-visible),\n  .hotspot .hotspot-dialog__link:is(:focus, :focus-visible) {\n    outline: none;\n  }\n\n  .hotspot-dialog__product {\n    display: grid;\n    grid-template-columns: auto 1fr;\n  }\n\n  .hotspot-dialog__product-image,\n  .hotspot-dialog svg.hotspot-dialog__placeholder-product-image {\n    width: var(--width-product-image-dialog);\n    height: var(--width-product-image-dialog);\n    aspect-ratio: 1;\n    padding: var(--padding-product-image-popover, var(--padding-xs));\n    object-fit: cover;\n    border-radius: var(--style-border-radius-popover);\n  }\n\n  .hotspot-dialog__link {\n    position: absolute;\n    inset: 0;\n    z-index: var(--layer-flat);\n  }\n\n  .hotspot-dialog__product-title {\n    margin-block-end: var(--product-title-gap);\n    padding-inline-end: var(--padding-sm);\n    min-width: 0;\n  }\n\n  .hotspot .hotspot-dialog .hotspot-dialog__sold-out-badge {\n    display: flex;\n    width: fit-content;\n    justify-self: flex-end;\n    align-self: flex-end;\n    justify-content: center;\n    align-items: center;\n    font-size: var(--font-body--size);\n    padding: var(--padding-2xs) var(--padding-sm);\n    background: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n    border-radius: var(--border-radius-sm);\n    text-transform: uppercase;\n    letter-spacing: var(--letter-spacing-sm);\n    opacity: var(--opacity-80);\n  }\n\n  /* Dialog transitions */\n  .hotspot .hotspot-dialog {\n    --hotspot-blur: 4px;\n    --hotspot-scale: 0.8;\n    --hotspot-entry-duration: 0.2s;\n    --hotspot-exit-duration: 0.1s;\n\n    /* Firefox doesn't have reverse transitions */\n    /* in webkit/chromium we can set a closing attribute as we transition the exit and hook there */\n    filter: blur(var(--hotspot-blur));\n    opacity: 0;\n    transform: scale(var(--hotspot-scale)) translate(0, 0);\n    transition-property: display, opacity, filter, transform;\n    transition-duration: var(--hotspot-entry-duration);\n    transition-timing-function: ease;\n\n    transform: scale(var(--hotspot-scale)) translate(var(--offset-x), var(--offset-y));\n    transform-origin: var(--origin-x) var(--origin-y);\n    transition-timing-function: cubic-bezier(0.65, -0.49, 0.35, 1.12);\n\n    &[data-closing='true'] {\n      transition-duration: var(--hotspot-exit-duration);\n      transition-timing-function: ease-out;\n      transform: scale(1) translate(0, calc(var(--hotspot-size) * 0.25));\n    }\n\n    /* We can only set transition-behavior once we've measured the dialog dimensions */\n    &[data-showing='true'] {\n      transition-behavior: allow-discrete;\n    }\n  }\n\n  .hotspot .hotspot-dialog[open][data-showing='true'] {\n    opacity: 1;\n    transform: scale(1) translate(0, 0);\n    filter: blur(0px);\n  }\n\n  @starting-style {\n    .hotspot .hotspot-dialog[open][data-showing='true'] {\n      opacity: 0;\n      filter: blur(var(--hotspot-blur));\n      transform: scale(var(--hotspot-scale)) translate(var(--offset-x), var(--offset-y));\n      transform-origin: var(--origin-x) var(--origin-y);\n    }\n  }\n\n  /* Safety triangles for dialogs */\n  .hotspot .hotspot-dialog::after {\n    content: '';\n    position: absolute;\n    opacity: 0;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    pointer-events: all;\n    transition: opacity 0.22s ease-out, translate 0.22s 0.1s ease-out;\n    scale: var(--scale-x, 1) var(--scale-y, 1);\n    z-index: var(--layer-flat);\n  }\n\n  .hotspot-dialog[open]:is([data-placement*='left'], [data-placement*='right'])::after {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: polygon(0 0, 100% 0, 100% 100%);\n    width: calc(var(--button-size) / 2 + var(--hotspot-size) * 0.5);\n  }\n\n  .hotspot-dialog[open][data-placement*='right']::after {\n    right: 100%;\n    left: unset;\n  }\n\n  .hotspot-dialog[open][data-placement*='left']::after {\n    left: 100%;\n    right: unset;\n    --scale-x: -1;\n  }\n\n  .hotspot-dialog[open][data-placement*='top']::after {\n    --scale-y: -1;\n  }\n\n  .hotspot-dialog[open][data-placement*='center']::after {\n    height: calc(var(--button-size) / 2 + var(--hotspot-size) * 0.5);\n    width: 100%;\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    clip-path: polygon(0 0, 100% 0, 50% calc(100% - var(--hotspot-size) * 0.25));\n    --scale-x: 1;\n    --scale-y: 1;\n  }\n\n  .hotspot-dialog[open][data-placement*='center'][data-placement*='bottom']::after {\n    top: unset;\n    bottom: 100%;\n    --scale-y: -1;\n  }\n\n  .hotspot-dialog[open][data-placement*='center'][data-placement*='top']::after {\n    top: 100%;\n    bottom: unset;\n  }\n\n  /* Quick add button */\n  .hotspot-dialog[open] {\n    .quick-add {\n      display: flex;\n      flex-direction: column;\n      justify-content: flex-end;\n      width: auto;\n      height: auto;\n      position: relative;\n      z-index: var(--layer-flat);\n    }\n\n    .quick-add__button {\n      position: relative;\n      padding-block: 0;\n      box-shadow: none;\n      align-items: center;\n      justify-self: flex-end;\n      height: fit-content;\n      translate: var(--padding-2xs) 0;\n      border: none;\n      color: var(--color-foreground);\n      background-color: var(--color-background);\n      overflow: visible;\n      pointer-events: all;\n      opacity: 1;\n      animation: elementSlideInTop var(--animation-speed) var(--animation-easing);\n      transition-property: translate;\n      transition-duration: var(--animation-speed);\n      transition-timing-function: var(--ease-out-cubic);\n\n      &::before {\n        content: '';\n        position: absolute;\n        inset: -2px;\n        border-radius: calc(50px + 2px);\n        border: 2px solid transparent;\n        pointer-events: none;\n        transition-property: border-color;\n        transition-duration: 0s;\n        transition-timing-function: var(--ease-out-cubic);\n      }\n\n      &:is(:hover, :focus, :focus-visible, :active) {\n        translate: 0 0;\n        transition-delay: var(--animation-speed-slow);\n\n        &::before {\n          border-color: rgb(var(--color-foreground-rgb) / var(--opacity-15));\n          transition-duration: var(--animation-speed);\n          transition-delay: var(--animation-speed-slow);\n        }\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_hotspots\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"blocks\": [\n    {\n      \"type\": \"_hotspot-product\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"image\",\n      \"label\": \"t:settings.image\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.media_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay and section.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"21 / 9\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"16 / 9\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"4 / 3\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"auto\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.colors\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"hotspot_color\",\n      \"label\": \"t:settings.hotspot_color\",\n      \"default\": \"#FFFFFF57\",\n      \"alpha\": true\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"bullseye_color\",\n      \"label\": \"t:settings.bullseye_color\",\n      \"default\": \"#ffffff\",\n      \"alpha\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.popover\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"product_title_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_title_preset\",\n      \"label\": \"t:settings.product_title_typography\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_price_preset\",\n      \"label\": \"t:settings.product_price_typography\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.default\"\n        },\n        {\n          \"value\": \"paragraph\",\n          \"label\": \"t:options.paragraph\"\n        },\n        {\n          \"value\": \"h4\",\n          \"label\": \"t:options.h4\"\n        },\n        {\n          \"value\": \"h5\",\n          \"label\": \"t:options.h5\"\n        },\n        {\n          \"value\": \"h6\",\n          \"label\": \"t:options.h6\"\n        }\n      ],\n      \"default\": \"\",\n      \"info\": \"t:info.edit_presets_in_theme_settings\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 40\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_hotspots\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"section_width\": \"page-width\",\n        \"color_scheme\": \"scheme-1\",\n        \"product_title_gap\": 8,\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      },\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"static\": true,\n          \"settings\": {\n            \"text\": \"t:text_defaults.shop_the_look\",\n            \"type_preset\": \"h4\"\n          }\n        },\n        \"hotspot-1\": {\n          \"type\": \"_hotspot-product\",\n          \"settings\": {\n            \"x-position\": 40,\n            \"y-position\": 40\n          }\n        },\n        \"hotspot-2\": {\n          \"type\": \"_hotspot-product\",\n          \"settings\": {\n            \"x-position\": 60,\n            \"y-position\": 60\n          }\n        }\n      },\n      \"block_order\": [\"hotspot-1\", \"hotspot-2\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/product-information.liquid",
    "content": "<script type=\"application/ld+json\">\n  {{ closest.product | structured_data }}\n</script>\n\n{% capture media_gallery %}\n  {%- content_for 'block',\n    type: '_product-media-gallery',\n    id: 'media-gallery',\n    closest.product: closest.product\n  -%}\n{% endcapture %}\n\n{% capture product_details %}\n  {% content_for 'block',\n    type: '_product-details',\n    id: 'product-details',\n    closest.product: closest.product\n  %}\n{% endcapture %}\n\n{% capture additional_blocks %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% if section.settings.enable_sticky_add_to_cart %}\n  {% liquid\n    assign current_variant = product.selected_or_first_available_variant\n    # Get the initial quantity based on quantity rules\n    assign initial_quantity = current_variant.quantity_rule.min | default: 1\n  %}\n\n  <sticky-add-to-cart\n    class=\"sticky-add-to-cart\"\n    data-variant-available=\"{{ current_variant.available }}\"\n    data-product-id=\"{{ product.id }}\"\n    data-current-variant-id=\"{{ current_variant.id }}\"\n    data-initial-quantity=\"{{ initial_quantity }}\"\n    data-default-variant-title=\"{{ 'products.product.default_title' | t }}\"\n  >\n    <div\n      class=\"sticky-add-to-cart__bar color-{{ settings.popover_color_scheme }}\"\n      data-stuck=\"false\"\n      ref=\"stickyBar\"\n      role=\"region\"\n      aria-label=\"{{ 'products.product.sticky_add_to_cart' | t }}\"\n    >\n      {% liquid\n        assign image_to_show = current_variant.featured_image | default: product.featured_image\n      %}\n      {% if image_to_show %}\n        <div\n          class=\"sticky-add-to-cart__image\"\n        >\n          {% assign image_alt = image_to_show.alt | default: product.title | escape %}\n          {{\n            image_to_show\n            | image_url: width: 120\n            | image_tag:\n              loading: 'lazy',\n              alt: image_alt,\n              class: 'sticky-add-to-cart__image-img',\n              data-testid: 'sticky-product-image',\n              srcset: null,\n              sizes: null,\n              ref: 'productImage'\n          }}\n        </div>\n      {% endif %}\n\n      {% liquid\n        assign has_single_option = false\n        if product.has_only_default_variant != true and product.options.size == 1\n          assign has_single_option = true\n        endif\n\n        if image_to_show == blank\n          assign has_image = false\n        else\n          assign has_image = true\n        endif\n      %}\n      <div\n        class=\"sticky-add-to-cart__info\"\n        data-has-image=\"{{ has_image }}\"\n        data-singleton=\"{{ product.has_only_default_variant }}\"\n        data-single-option=\"{{ has_single_option }}\"\n      >\n        <h3\n          class=\"sticky-add-to-cart__title\"\n          data-testid=\"sticky-product-title\"\n        >\n          {{ product.title | escape }}\n        </h3>\n        <div\n          class=\"sticky-add-to-cart__variant\"\n          data-testid=\"sticky-variant-title\"\n          {% if product.has_only_default_variant %}\n            style=\"display: none;\"\n          {% endif %}\n        >\n          {% unless product.has_only_default_variant %}\n            {% if current_variant != blank %}\n              {% assign variant_title = current_variant.title | escape %}\n            {% endif %}\n            {{ variant_title }}\n          {% endunless %}\n        </div>\n      </div>\n\n      <div\n        class=\"sticky-add-to-cart__price\"\n        data-testid=\"sticky-price-display\"\n      >\n        {% render 'price', product_resource: product, show_sale_price_first: true %}\n      </div>\n\n      <button\n        type=\"button\"\n        class=\"sticky-add-to-cart__button add-to-cart-button button\"\n        ref=\"addToCartButton\"\n        on:click=\"/handleAddToCartClick\"\n        {% unless current_variant.available %}\n          disabled\n        {% endunless %}\n      >\n        <span\n          class=\"add-to-cart-text\"\n        >\n          {% if current_variant.available %}\n            <span class=\"svg-wrapper add-to-cart-icon\">\n              {{- 'icon-add-to-cart.svg' | inline_asset_content -}}\n            </span>\n          {% endif %}\n          <span class=\"add-to-cart-text__content\">\n            <span>\n              {%- if current_variant.available -%}\n                {{- 'products.product.add_to_cart' | t -}}\n              {%- elsif current_variant == blank -%}\n                {{- 'products.product.unavailable' | t -}}\n              {%- else -%}\n                {{- 'products.product.sold_out' | t -}}\n              {%- endif -%}\n            </span>\n            <span\n              ref=\"quantityDisplay\"\n              {% if current_variant.available and initial_quantity > 1 %}\n                style=\"display: inline;\"\n              {% else %}\n                style=\"display: none;\"\n              {% endif %}\n            >\n              {{- ' (' -}}\n              <span ref=\"quantityNumber\">{{- initial_quantity -}}</span>\n              {{- ')' -}}\n            </span>\n          </span>\n        </span>\n        <span class=\"add-to-cart__added\">\n          <span class=\"svg-wrapper add-to-cart__added-icon\">\n            {{- 'icon-checkmark-burst.svg' | inline_asset_content -}}\n          </span>\n        </span>\n      </button>\n    </div>\n  </sticky-add-to-cart>\n{% endif %}\n\n{% render 'product-information-content',\n  product_media_size: closest.product.media.size,\n  section_id: section.id,\n  settings: section.settings,\n  media_gallery: media_gallery,\n  product_details: product_details,\n  additional_blocks: additional_blocks\n%}\n\n{% stylesheet %}\n  .sticky-add-to-cart__bar {\n    position: fixed;\n    bottom: 20px;\n    left: 50%;\n    opacity: 0;\n    transform: translateX(-50%) translateY(calc(100% + 40px));\n    z-index: calc(var(--layer-sticky) - 1); /* Below sticky header */\n    display: block;\n    width: 600px;\n    border-radius: calc(\n      var(--style-border-radius-buttons-primary) + min(var(--padding-sm), var(--style-border-radius-buttons-primary))\n    );\n    box-shadow: var(--shadow-popover);\n    padding: var(--padding-sm);\n    /* Layout styling */\n    display: flex;\n    align-items: center;\n    gap: var(--gap-md);\n\n    @starting-style {\n      opacity: 0;\n      transform: translateX(-50%) translateY(calc(100% + 40px));\n    }\n\n    &::before {\n      --border: 2px;\n      content: '';\n      position: absolute;\n      inset: calc(var(--border) * -1);\n      background: linear-gradient(var(--color-background) 0 100%), linear-gradient(hsl(0 0% 0% / 0.15) 0 100%);\n      background-clip: content-box, border-box;\n      border: var(--border) solid #0000;\n      border-radius: inherit;\n      z-index: -1;\n      backdrop-filter: blur(20px) saturate(180%) brightness(1.5);\n    }\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .sticky-add-to-cart__bar {\n      transition-property: transform, opacity, display;\n      transition-duration: 0.3s;\n      transition-timing-function: var(--ease-out-quad);\n      transition-behavior: allow-discrete;\n    }\n  }\n\n  .sticky-add-to-cart__bar[data-stuck='true'] {\n    transform: translateX(-50%) translateY(0%);\n    opacity: 1;\n  }\n\n  sticky-add-to-cart:not([data-variant-available='true']) .sticky-add-to-cart__bar {\n    opacity: 0;\n    transform: translateX(-50%) translateY(calc(100% + 40px));\n    display: none;\n  }\n\n  .sticky-add-to-cart__info[data-has-image='false'] {\n    padding-left: var(--padding-lg);\n  }\n\n  .sticky-add-to-cart__image {\n    flex-shrink: 0;\n    aspect-ratio: 1;\n    height: var(--height-buy-buttons);\n    overflow: hidden;\n    border-radius: var(--style-border-radius-buttons-primary);\n    background: var(--color-background-secondary);\n  }\n\n  .sticky-add-to-cart__image-img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sticky-add-to-cart__info {\n    flex: 1;\n    min-width: 0; /* Allow text truncation */\n  }\n\n  .sticky-add-to-cart__title {\n    font-size: var(--font-paragraph-medium--size);\n    font-weight: var(--font-weight-semibold);\n    margin: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sticky-add-to-cart__variant {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    font-size: var(--font-paragraph-small--size);\n    margin-top: var(--margin-3xs);\n  }\n\n  .sticky-add-to-cart__price {\n    font-weight: var(--font-weight-semibold);\n  }\n\n  .sticky-add-to-cart__button {\n    height: var(--height-buy-buttons);\n    position: relative;\n  }\n\n  /* Mobile adjustments */\n  @media screen and (max-width: 749px) {\n    .sticky-add-to-cart__bar {\n      bottom: 0;\n      width: 100%;\n      max-width: none;\n      border-radius: 0;\n\n      &::before {\n        --border: 1px;\n      }\n    }\n\n    .sticky-add-to-cart__bar .add-to-cart-text__content {\n      display: none;\n    }\n\n    .sticky-add-to-cart__info[data-has-image='false'] {\n      padding-left: 0;\n    }\n\n    .sticky-add-to-cart__title {\n      font-size: var(--font-paragraph--size);\n    }\n\n    .sticky-add-to-cart__button {\n      padding: var(--padding-lg);\n    }\n\n    .sticky-add-to-cart__price {\n      font-size: var(--font-paragraph-small--size);\n    }\n\n    .sticky-add-to-cart__button {\n      width: var(--height-buy-buttons);\n    }\n\n    sticky-add-to-cart:not([data-variant-available='true']) .add-to-cart-text__content {\n      display: initial;\n    }\n\n    sticky-add-to-cart:not([data-variant-available='true']) .sticky-add-to-cart__button {\n      width: auto;\n    }\n  }\n\n  /* Small mobile - hide text content and compare price */\n  @media screen and (max-width: 389px) {\n    .sticky-add-to-cart__bar {\n      .compare-at-price {\n        display: none;\n      }\n    }\n\n    .sticky-add-to-cart__title {\n      display: none;\n    }\n\n    /* For product with only default variant show title */\n    .sticky-add-to-cart__info[data-singleton='true'] .sticky-add-to-cart__title {\n      display: block;\n    }\n\n    /* For single variant show title and variant, truncate both. variant should be identifiable with truncation */\n    .sticky-add-to-cart__info[data-single-option='true'] .sticky-add-to-cart__title {\n      display: block;\n    }\n\n    .sticky-add-to-cart__info[data-single-option='true'] .sticky-add-to-cart__variant {\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.product_information\",\n  \"blocks\": [\n    {\n      \"type\": \"@app\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"content-center-aligned\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"content-full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"content-center-aligned\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"desktop_media_position\",\n      \"label\": \"t:settings.media_position\",\n      \"options\": [\n        {\n          \"value\": \"left\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"right\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"left\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"equal_columns\",\n      \"label\": \"t:settings.equal_columns\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"limit_details_width\",\n      \"label\": \"t:settings.limit_product_details_width\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.equal_columns }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 48,\n      \"step\": 4,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_sticky_add_to_cart\",\n      \"label\": \"t:settings.enable_sticky_add_to_cart\",\n      \"default\": true\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/product-list.liquid",
    "content": "{% liquid\n  assign max_items = section.settings.max_products\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  data-testid=\"product-list\"\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-resource-list\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {% render 'spacing-style', settings: section.settings %}\n    {% render 'gap-style', value: section.settings.gap %}\n  \"\n>\n  <div class=\"section-resource-list__header\">\n    {%- content_for 'block', type: '_product-list-content', id: 'static-header' -%}\n  </div>\n\n  {% capture list_items %}\n    {% if section.settings.collection != blank and shop.products_count != 0 %}\n      {% paginate section.settings.collection.products by max_items %}\n        {% for product in section.settings.collection.products limit: max_items %}\n          <div\n            class=\"resource-list__item\"\n          >\n            {% # theme-check-disable UniqueStaticBlockId %}\n              {% content_for 'block', type: '_product-card', id: 'static-product-card', closest.product: product %}\n            {% # theme-check-enable UniqueStaticBlockId %}\n          </div>\n\n          {% unless forloop.last %}\n            <!--@list/split-->\n          {% endunless %}\n        {% endfor %}\n      {% endpaginate %}\n    {% else %}\n      {% for i in (1..max_items) %}\n        <div\n          class=\"resource-list__item\"\n        >\n          {% # theme-check-disable UniqueStaticBlockId %}\n            {% content_for 'block', type: '_product-card', id: 'static-product-card', closest.product: null %}\n          {% # theme-check-enable UniqueStaticBlockId %}\n        </div>\n\n        {% unless forloop.last %}\n          <!--@list/split-->\n        {% endunless %}\n      {% endfor %}\n    {% endif %}\n  {% endcapture %}\n\n  {% liquid\n    # Create an array from the list items to be used for different layout types\n    assign list_items_array = list_items | strip | split: '<!--@list/split-->'\n  %}\n\n  {% render 'resource-list',\n    list_items: list_items,\n    list_items_array: list_items_array,\n    settings: section.settings,\n    slide_count: max_items,\n    content_type: 'products',\n    test_id: 'resource-list-grid'\n  %}\n\n  <div\n    class=\"section-resource-list__content\"\n    style=\"--horizontal-alignment: {{ section.settings.horizontal_alignment }};\"\n  >\n    {%- content_for 'blocks' -%}\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_list\",\n  \"class\": \"ui-test-product-list\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"collection\",\n      \"id\": \"collection\",\n      \"label\": \"t:settings.collection\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        },\n        {\n          \"value\": \"editorial\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.layout_type != 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_products\",\n      \"label\": \"t:settings.product_count\",\n      \"min\": 1,\n      \"max\": 16,\n      \"step\": 1,\n      \"default\": 4\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.layout_type != 'editorial' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"2\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' and section.settings.carousel_on_mobile == false }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_card_size\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"60cqw\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"44cqw\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"60cqw\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid'}}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' and section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.products_grid\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"collection\": \"\",\n        \"max_products\": 8,\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_list_text\": {\n              \"type\": \"_product-list-text\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"text\": \"<h3>{{ closest.collection.title }}</h3>\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_list_button\": {\n              \"type\": \"_product-list-button\",\n              \"name\": \"t:names.product_list_button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.view_all_button_label\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              }\n            }\n          },\n          \"block_order\": [\"product_list_text\", \"product_list_button\"]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product-card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"price\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n        }\n      },\n      \"block_order\": []\n    },\n    {\n      \"name\": \"t:names.products_carousel\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"collection\": \"\",\n        \"max_products\": 6,\n        \"layout_type\": \"carousel\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"circle\",\n        \"section_width\": \"page-width\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_list_text\": {\n              \"type\": \"_product-list-text\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"text\": \"<h3>{{ closest.collection.title }}</h3>\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_list_button\": {\n              \"type\": \"_product-list-button\",\n              \"name\": \"t:names.product_list_button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.view_all_button_label\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              }\n            }\n          },\n          \"block_order\": [\"product_list_text\", \"product_list_button\"]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product-card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"price\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n        }\n      },\n      \"block_order\": []\n    },\n    {\n      \"name\": \"t:names.products_editorial\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"collection\": \"\",\n        \"layout_type\": \"editorial\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 4,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"horizontal_alignment\": \"flex-start\",\n        \"gap\": 64,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_list_text\": {\n              \"type\": \"_product-list-text\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"text\": \"<h3>{{ closest.collection.title }}</h3>\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_list_button\": {\n              \"type\": \"_product-list-button\",\n              \"name\": \"t:names.product_list_button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.view_all_button_label\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              }\n            }\n          },\n          \"block_order\": [\"product_list_text\", \"product_list_button\"]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product-card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"price\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n        }\n      },\n      \"block_order\": []\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/product-recommendations.liquid",
    "content": "<script\n  src=\"{{ 'product-recommendations.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% liquid\n  case section.settings.layout_type\n    when 'grid'\n      assign classes = 'resource-list--grid'\n    when 'carousel'\n      assign classes = 'resource-list__carousel'\n  endcase\n\n  capture styles\n    echo '--column-count-mobile: ' | append: section.settings.mobile_columns | append: ';'\n    echo '--resource-list-column-gap-desktop: ' | append: section.settings.columns_gap | append: 'px;'\n    echo '--resource-list-row-gap-desktop: ' | append: section.settings.rows_gap | append: 'px;'\n    echo '--resource-list-columns: repeat(' | append: section.settings.columns | append: ', 1fr);'\n    echo '--resource-list-columns-mobile: repeat(' | append: section.settings.mobile_columns | append: ', 1fr);'\n    echo '--resource-list-column-gap-desktop: ' | append: section.settings.columns_gap | append: 'px;'\n    echo '--column-count: ' | append: section.settings.columns | append: ';'\n    echo '--column-count-mobile: ' | append: section.settings.mobile_columns | append: ';'\n  endcapture\n%}\n\n<product-recommendations\n  id=\"product-recommendations-{{ section.id }}\"\n  class=\"product-recommendations\"\n  data-url=\"{{ routes.product_recommendations_url }}?limit={{ section.settings.max_products }}\"\n  data-section-id=\"{{ section.id }}\"\n  data-product-id=\"{{ section.settings.product.id | default: product.id }}\"\n  data-intent=\"{{ section.settings.recommendation_type }}\"\n  data-testid=\"product-recommendations-section\"\n  data-recommendations-performed=\"{{ recommendations.performed }}\"\n  {{ section.shopify_attributes }}\n>\n  <div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n  <div\n    class=\"\n      section\n      section--{{ section.settings.section_width }}\n      color-{{ section.settings.color_scheme }}\n      section-resource-list\n      spacing-style\n      gap-style\n    \"\n    style=\"\n      {%  render 'spacing-style', settings: section.settings %}\n      {%  render 'gap-style', value: section.settings.gap %}\n      {{ styles }}\n    \"\n  >\n    <div class=\"section-resource-list__content\">\n      {% content_for 'blocks' %}\n    </div>\n\n    {%- if recommendations.performed or section.settings.product == blank -%}\n      {% liquid\n        if section.settings.product == blank\n          assign products = null\n          # Onboarding mode: Show placeholder products\n          for i in (1..section.settings.max_products)\n            assign products = products | append: ', '\n            assign products = products | split: ','\n          endfor\n        elsif recommendations.performed and recommendations.products_count == 0\n          # No recommendations found, pull from catalog\n          if section.settings.recommendation_type == 'related'\n            assign products = collections.all.products | reject: 'id', section.settings.product.id\n          elsif section.settings.recommendation_type == 'complementary'\n            # Do not recommend the All collection as complementary products\n            assign products = null\n          endif\n\n        else\n          assign products = recommendations.products\n        endif\n      %}\n      {% capture list_items %}\n        {% for product in products limit: section.settings.max_products %}\n          <div class=\"resource-list__item\">\n            {% content_for 'block', type: '_product-card', id: 'static-product-card', closest.product: product %}\n          </div>\n          {% unless forloop.last %}\n            <!--@list/split-->\n          {% endunless %}\n        {% endfor %}\n      {% endcapture %}\n\n      {% liquid\n        # Create an array from the list items to be used in the carousel\n        assign slide_content = list_items | strip\n        assign slides = slide_content | split: '<!--@list/split-->'\n\n        if products != blank and products.size > 0\n          assign has_recommendations = 'true'\n        else\n          assign has_recommendations = 'false'\n        endif\n      %}\n\n      <div\n        class=\"\n          resource-list\n          {% if section.settings.layout_type == 'carousel' %}\n            force-full-width\n          {% endif %}\n          {% if section.settings.carousel_on_mobile and section.settings.layout_type != 'carousel' %}\n            hidden--mobile\n          {% endif %}\n          {{ classes }}\n        \"\n        {% if section.settings.layout_type == 'grid' %}\n          data-testid=\"resource-list-grid\"\n        {% endif %}\n        data-has-recommendations=\"{{ has_recommendations }}\"\n      >\n        {% case section.settings.layout_type %}\n          {% when 'grid' %}\n            {{ list_items }}\n          {% when 'carousel' %}\n            {% render 'resource-list-carousel',\n              ref: 'resourceListCarousel',\n              slides: slides,\n              slide_count: recommendations.products.size,\n              settings: section.settings\n            %}\n        {% endcase %}\n      </div>\n\n      {% if section.settings.carousel_on_mobile and section.settings.layout_type != 'carousel' %}\n        {% liquid\n          assign mobile_carousel_gap = section.settings.columns_gap\n        %}\n        <div\n          class=\"\n            resource-list\n            hidden--desktop\n            force-full-width\n          \"\n          style=\"\n            --resource-list-gap: {{ mobile_carousel_gap }}px;\n            --column-count: {{ section.settings.columns }};\n          \"\n        >\n          {% render 'resource-list-carousel',\n            ref: 'resourceListCarouselMobile',\n            slides: slides,\n            slide_count: recommendations.products.size,\n            settings: section.settings\n          %}\n        </div>\n      {% endif %}\n    {%- else -%}\n      <div\n        class=\"resource-list resource-list--grid\"\n      >\n        {% for i in (1..section.settings.columns) %}\n          <div\n            class=\"product-recommendations__skeleton-item\"\n            aria-label=\"{{ 'accessibility.loading_product_recommendations' | t }}\"\n          ></div>\n        {% endfor %}\n      </div>\n    {%- endif -%}\n  </div>\n</product-recommendations>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_recommendations\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"text\"\n    },\n    {\n      \"type\": \"icon\"\n    },\n    {\n      \"type\": \"image\"\n    },\n    {\n      \"type\": \"button\"\n    },\n    {\n      \"type\": \"video\"\n    },\n    {\n      \"type\": \"group\"\n    },\n    {\n      \"type\": \"spacer\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"recommendation_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"related\",\n          \"label\": \"t:options.related\"\n        },\n        {\n          \"value\": \"complementary\",\n          \"label\": \"t:options.complementary\"\n        }\n      ],\n      \"default\": \"related\"\n    },\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.complementary_products\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.cards_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.layout_style\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"carousel\",\n          \"label\": \"t:options.carousel\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"carousel_on_mobile\",\n      \"label\": \"t:settings.carousel_on_mobile\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"max_products\",\n      \"label\": \"t:settings.product_count\",\n      \"min\": 3,\n      \"max\": 10,\n      \"step\": 1,\n      \"default\": 4\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns\",\n      \"label\": \"t:settings.columns\",\n      \"min\": 1,\n      \"max\": 8,\n      \"step\": 1,\n      \"default\": 4\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_columns\",\n      \"label\": \"t:settings.mobile_columns\",\n      \"options\": [\n        {\n          \"value\": \"1\",\n          \"label\": \"t:options.one_number\"\n        },\n        {\n          \"value\": \"2\",\n          \"label\": \"t:options.two_number\"\n        }\n      ],\n      \"default\": \"2\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' and section.settings.carousel_on_mobile == false }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' or section.settings.layout_type == 'carousel' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"rows_gap\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16,\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.carousel_navigation\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icon\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.arrows_large\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.chevron_large\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrow\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' and section.settings.layout_type == 'carousel' or section.settings.carousel_on_mobile == true }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.product_recommendations\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"product\": \"{{ closest.product }}\",\n        \"recommendation_type\": \"related\",\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 4,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 12,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      },\n      \"blocks\": {\n        \"header\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.related_product\"\n          }\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4\n          },\n          \"blocks\": {\n            \"product-card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"product_title\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"price\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"product-card-gallery\", \"product_title\", \"price\"]\n        }\n      },\n      \"block_order\": [\"header\"]\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/quick-order-list.liquid",
    "content": "{% liquid\n  assign items_in_cart = cart | line_items_for: product\n  assign quick_order_form_id = 'QuickOrder-ProductForm-' | append: product.id | append: '-' | append: section.id\n%}\n\n<script\n  src=\"{{ 'quick-order-list.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<div\n  class=\"\n    section\n    section--{{ section.settings.section_width }}\n    color-{{ section.settings.color_scheme }}\n    section-resource-list\n    spacing-style\n    gap-style\n  \"\n  style=\"\n    {%- render 'spacing-style', settings: section.settings -%}\n    {%- render 'gap-style', value: section.settings.gap -%}\n  \"\n>\n  <quick-order-list-component\n    class=\"quick-order-list\"\n    data-section-id=\"{{ section.id }}\"\n    data-product-id=\"{{ product.id }}\"\n    data-cart-variant-ids=\"{{ items_in_cart | map: 'variant_id' | json | escape }}\"\n    data-url=\"{{ product.url }}\"\n    on:submit=\"/handleSubmit\"\n  >\n    {%- form 'product', product, id: quick_order_form_id, data-type: 'add-to-cart-form' -%}\n      {% paginate product.variants by section.settings.variants_per_page %}\n        <div\n          class=\"quick-order-list__container\"\n        >\n          <div\n            class=\"quick-order-list__grid\"\n            role=\"table\"\n          >\n            <div\n              class=\"visually-hidden\"\n              role=\"caption\"\n            >\n              {{ 'content.your_cart' | t }}\n            </div>\n            <div\n              class=\"quick-order-list__grid-header\"\n              role=\"row\"\n            >\n              <div\n                class=\"quick-order-list__grid-cell quick-order-list__grid-cell--variant\"\n                role=\"columnheader\"\n              >\n                {{ 'content.variant' | t }}\n              </div>\n              <div\n                class=\"quick-order-list__grid-cell quick-order-list__grid-cell--quantity hidden--mobile\"\n                role=\"columnheader\"\n              >\n                {{ 'content.quantity' | t }}\n              </div>\n              <div\n                class=\"quick-order-list__grid-cell quick-order-list__grid-cell--price hidden--mobile\"\n                role=\"columnheader\"\n              >\n                {{ 'content.price' | t }}\n              </div>\n              <div\n                class=\"quick-order-list__grid-cell quick-order-list__grid-cell--total\"\n                role=\"columnheader\"\n              >\n                {{ 'content.variant_total' | t }}\n              </div>\n            </div>\n            <div\n              class=\"quick-order-list__grid-body\"\n              role=\"rowgroup\"\n            >\n              {%- for variant in product.variants -%}\n                {% liquid\n                  assign variant_line_items = cart | line_items_for: variant\n                  assign variant_cart_quantity = variant_line_items | sum: 'quantity' | default: 0\n                  assign variant_line_item = variant_line_items | first\n\n                  assign has_quantity_rules = false\n                  if variant.quantity_rule.min > 1 or variant.quantity_rule.increment > 1 or variant.quantity_rule.max != null\n                    assign has_quantity_rules = true\n                  endif\n\n                  assign has_volume_pricing = false\n                  if variant.quantity_price_breaks.size > 0\n                    assign has_volume_pricing = true\n                  endif\n\n                  assign display_price = variant.price\n                  if has_volume_pricing and variant_cart_quantity > 0\n                    for price_break in variant.quantity_price_breaks\n                      if variant_cart_quantity >= price_break.minimum_quantity\n                        assign display_price = price_break.price\n                      endif\n                    endfor\n                  endif\n\n                  assign has_discount = false\n                  if variant.compare_at_price > display_price\n                    assign has_discount = true\n                  endif\n\n                  capture display_price_formatted\n                    render 'format-price', price: display_price\n                  endcapture\n\n                  capture display_price_per_item_formatted\n                    render 'format-price', price: display_price, type: 'per_item'\n                  endcapture\n\n                  if has_discount\n                    capture compare_at_price_formatted\n                      render 'format-price', price: variant.compare_at_price, type: 'compare_at'\n                    endcapture\n                  endif\n\n                  assign variant_display_name = variant.title\n                  if product.variants_count == 1\n                    assign variant_display_name = product.title\n                  endif\n\n                  assign remove_button_aria_label = 'accessibility.remove_item' | t: title: variant.title | escape\n                  assign sold_out_message = 'products.product.sold_out' | t\n\n                  capture quantity_selector_markup\n                    render 'quantity-selector', product: product, variant: variant, in_cart_quantity: variant_cart_quantity, line_index: forloop.index, min: 0\n                  endcapture\n                %}\n                <div\n                  class=\"quick-order-list__grid-row variant-item\"\n                  data-variant-id=\"{{ variant.id }}\"\n                  ref=\"variantRows[]\"\n                  role=\"row\"\n                >\n                  <div\n                    class=\"quick-order-list__grid-cell quick-order-list__grid-cell--variant variant-item__inner\"\n                    role=\"cell\"\n                  >\n                    <div class=\"variant-item__inner-container\">\n                      {% if section.settings.show_image %}\n                        <div class=\"variant-item__image-container\">\n                          {% if variant.image %}\n                            {{\n                              variant.image\n                              | image_url: width: 86\n                              | image_tag:\n                                widths: '86',\n                                class: 'quick-order-list__table-image',\n                                sizes: '43px',\n                                loading: 'lazy'\n                            }}\n                          {% endif %}\n                        </div>\n                      {% endif %}\n                      <div class=\"variant-item__details\">\n                        <span class=\"variant-item__name hidden--mobile\">\n                          {{ variant_display_name }}\n                        </span>\n                        {% if section.settings.show_sku %}\n                          <span class=\"variant-item__sku hidden--mobile\">{{ variant.sku }}</span>\n                        {% endif %}\n\n                        <div class=\"variant-item__mobile-info hidden--desktop\">\n                          <div class=\"variant-item__title-container\">\n                            <span class=\"variant-item__name\">\n                              {{ variant_display_name }}\n                            </span>\n                            {% if section.settings.show_sku %}\n                              <span class=\"variant-item__sku\">{{ variant.sku }}</span>\n                            {% endif %}\n                          </div>\n                          <div class=\"variant-item__mobile-price-container\">\n                            {%- if has_discount -%}\n                              <dl class=\"variant-item__discounted-prices variant-item__discounted-prices--mobile\">\n                                <dt class=\"visually-hidden\">{{ 'content.price_regular' | t }}</dt>\n                                <dd>\n                                  <s class=\"compare-at-price\">\n                                    {{ compare_at_price_formatted }}\n                                  </s>\n                                </dd>\n                                <dt class=\"visually-hidden\">{{ 'content.price_sale' | t }}</dt>\n                                <dd>\n                                  <span class=\"variant-item__mobile-price\">\n                                    {{ display_price_per_item_formatted }}\n                                  </span>\n                                </dd>\n                              </dl>\n                            {%- else -%}\n                              <span class=\"variant-item__mobile-price\">\n                                {{ display_price_per_item_formatted }}\n                              </span>\n                            {%- endif -%}\n                          </div>\n                          <div class=\"variant-item__mobile-quantity\">\n                            {% if variant.available %}\n                              {{ quantity_selector_markup }}\n                              <button\n                                class=\"button variant-item__remove variant-item__remove--mobile hidden--desktop{% if variant_cart_quantity == 0 %} variant-item__remove--hidden{% endif %}\"\n                                type=\"button\"\n                                {% if variant_cart_quantity == 0 %}\n                                  tabindex=\"-1\"\n                                  aria-hidden=\"true\"\n                                {% endif %}\n                                aria-label=\"{{ remove_button_aria_label }}\"\n                                on:click=\"/onLineItemRemove/{{ variant.id | json }}\"\n                                {% assign can_remove = variant.instructions.can_remove\n                                  | default: true, allow_false: true\n                                %}\n                                {% if can_remove == false %}\n                                  hidden\n                                {% endif %}\n                                data-variant-id=\"{{ variant.id }}\"\n                              >\n                                {{- 'icon-delete.svg' | inline_asset_content -}}\n                                <span class=\"visually-hidden\">{{ 'actions.remove' | t }}</span>\n                              </button>\n                            {% else %}\n                              <span>{{ sold_out_message }}</span>\n                            {% endif %}\n                          </div>\n                          {% if variant.available %}\n                            {% if has_volume_pricing or has_quantity_rules %}\n                              {% render 'volume-pricing-info',\n                                variant: variant,\n                                unique_id: variant.id,\n                                quantity: variant_cart_quantity,\n                                show_label: true\n                              %}\n                            {% endif %}\n                          {% endif %}\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n\n                  <div\n                    class=\"quick-order-list__grid-cell quick-order-list__grid-cell--quantity variant-item__quantity hidden--mobile\"\n                    role=\"cell\"\n                  >\n                    <div class=\"variant-item__inner-container\">\n                      {% if variant.available %}\n                        {% if has_volume_pricing or has_quantity_rules %}\n                          {% render 'volume-pricing-info',\n                            variant: variant,\n                            unique_id: variant.id,\n                            quantity: variant_cart_quantity\n                          %}\n                        {% else %}\n                          <div class=\"volume-pricing-info-placeholder\"></div>\n                        {% endif %}\n                        {{ quantity_selector_markup }}\n                      {% else %}\n                        <div class=\"volume-pricing-info-placeholder\"></div>\n                        <span>{{ sold_out_message }}</span>\n                      {% endif %}\n                      <button\n                        class=\"button variant-item__remove hidden--mobile {% if variant_cart_quantity == 0 %}variant-item__remove--hidden{% endif %}\"\n                        type=\"button\"\n                        {% if variant_cart_quantity == 0 %}\n                          tabindex=\"-1\"\n                          aria-hidden=\"true\"\n                        {% endif %}\n                        aria-label=\"{{ remove_button_aria_label }}\"\n                        on:click=\"/onLineItemRemove/{{ variant.id | json }}\"\n                        {% assign can_remove = variant.instructions.can_remove | default: true, allow_false: true %}\n                        {% if can_remove == false %}\n                          hidden\n                        {% endif %}\n                        data-variant-id=\"{{ variant.id }}\"\n                      >\n                        {{- 'icon-delete.svg' | inline_asset_content -}}\n                        <span class=\"visually-hidden\">{{ 'actions.remove' | t }}</span>\n                      </button>\n                    </div>\n                  </div>\n\n                  <div\n                    class=\"quick-order-list__grid-cell quick-order-list__grid-cell--price hidden--mobile\"\n                    role=\"cell\"\n                  >\n                    {%- if has_discount -%}\n                      <dl class=\"variant-item__discounted-prices\">\n                        <dt class=\"visually-hidden\">{{ 'content.price_regular' | t }}</dt>\n                        <dd>\n                          <s class=\"compare-at-price\">\n                            {{ compare_at_price_formatted }}\n                          </s>\n                        </dd>\n                        <dt class=\"visually-hidden\">{{ 'content.price_sale' | t }}</dt>\n                        <dd>\n                          <span class=\"price\">\n                            {{ display_price_formatted }}\n                          </span>\n                        </dd>\n                      </dl>\n                    {%- else -%}\n                      <span class=\"price\">\n                        {{ display_price_per_item_formatted }}\n                      </span>\n                    {%- endif -%}\n                  </div>\n\n                  <div\n                    class=\"quick-order-list__grid-cell quick-order-list__grid-cell--total variant-item__totals\"\n                    role=\"cell\"\n                  >\n                    {% liquid\n                      if variant_line_item\n                        assign total_price = variant_line_item.original_line_price\n                      else\n                        assign total_price = 0\n                      endif\n                    %}\n                    {% capture formatted_total_price %}{% render 'format-price', price: total_price %}{% endcapture %}\n                    <text-component\n                      class=\"price variant-item__total-price\"\n                      data-variant-id=\"{{ variant.id }}\"\n                      value=\"{{ formatted_total_price | strip_html }}\"\n                    >\n                      {{- formatted_total_price -}}\n                    </text-component>\n                  </div>\n                </div>\n              {%- endfor -%}\n            </div>\n          </div>\n        </div>\n        {% render 'pagination-controls',\n          paginate: paginate,\n          on_click_handler: '/onPaginationControlClick',\n          ref: 'paginationNav'\n        %}\n      {% endpaginate %}\n    {%- endform -%}\n    {% liquid\n      assign total_items_count = items_in_cart | sum: 'quantity' | default: 0\n      assign total_price_value = cart | line_items_for: product | sum: 'original_line_price'\n    %}\n    {% capture total_price %}{% render 'format-price', price: total_price_value %}{% endcapture %}\n    <div class=\"quick-order-list-total\">\n      <div\n        class=\"quick-order-list-total__info\"\n        ref=\"totalInfo\"\n      >\n        <div class=\"quick-order-list-total__column\">\n          <div class=\"quick-order-list-total__actions\">\n            <a\n              href=\"{{ routes.cart_url }}\"\n              class=\"quick-order-list__button button-secondary\"\n            >\n              <span class=\"quick-order-list__button-text\">{{ 'content.view_cart' | t }}</span>\n            </a>\n            {% if total_items_count > 0 %}\n              <button\n                class=\"button button--unstyled quick-order-list__remove-all-button\"\n                type=\"button\"\n                data-action=\"confirm\"\n                on:click=\"quick-order-list-component/showRemoveAllConfirmation\"\n              >\n                {{- 'icon-delete.svg' | inline_asset_content -}}\n                <span>{{ 'content.remove_all' | t }}</span>\n              </button>\n            {% endif %}\n          </div>\n          <div\n            class=\"quick-order-list-total__messages\"\n            data-skip-subtree-update\n          >\n            <span\n              class=\"quick-order-list-total__success hidden\"\n              ref=\"successContainer\"\n              aria-live=\"polite\"\n            >\n              <span\n                class=\"svg-wrapper icon-success\"\n              >\n                {{ 'icon-checkmark.svg' | inline_asset_content }}\n              </span>\n              <span ref=\"successText\"></span>\n            </span>\n            <span\n              class=\"quick-order-list-total__error hidden\"\n              ref=\"errorContainer\"\n            >\n              <span class=\"svg-wrapper quick-order-list-total__icon--error\">\n                {{- 'icon-error.svg' | inline_asset_content -}}\n              </span>\n              <span ref=\"errorText\"></span>\n            </span>\n          </div>\n        </div>\n\n        <div class=\"quick-order-list-total__summary\">\n          <div class=\"quick-order-list-total__items\">\n            <span>{{ total_items_count }}</span>\n            <p class=\"h5\">{{ 'content.total_items' | t }}</p>\n          </div>\n\n          <div class=\"quick-order-list-total__price\">\n            <div class=\"quick-order-list-total__product-total\">\n              <text-component\n                class=\"quick-order-list-total__subtotal-value\"\n                value=\"{{ total_price | strip_html }}\"\n                ref=\"totalPrice\"\n              >\n                {{- total_price -}}\n              </text-component>\n              <p class=\"quick-order-list-total__subtotal h5\">{{ 'content.product_subtotal' | t }}</p>\n            </div>\n            <div class=\"quick-order-list-total__tax-note\">\n              {% render 'tax-info', has_discounts_enabled: false %}\n            </div>\n          </div>\n        </div>\n      </div>\n      <div\n        class=\"quick-order-list-total__confirmation hidden\"\n        ref=\"confirmationPanel\"\n      >\n        <span class=\"quick-order-list-total__confirmation-text\">\n          {% if total_items_count > 1 %}\n            {{- 'content.remove_all_items_confirmation' | t: count: total_items_count -}}\n          {% else %}\n            {{- 'content.remove_one_item_confirmation' | t -}}\n          {% endif %}\n        </span>\n        <div class=\"quick-order-list-total__confirmation-buttons\">\n          <button\n            class=\"quick-order-list__button-confirm button-secondary\"\n            type=\"button\"\n            data-action=\"remove\"\n            on:click=\"quick-order-list-component/onRemoveAll\"\n          >\n            {{ 'content.remove_all' | t }}\n          </button>\n          <button\n            class=\"quick-order-list__button-cancel button button--unstyled\"\n            type=\"button\"\n            data-action=\"cancel\"\n            on:click=\"quick-order-list-component/hideRemoveAllConfirmation\"\n          >\n            {{ 'content.cancel' | t }}\n          </button>\n        </div>\n      </div>\n    </div>\n  </quick-order-list-component>\n</div>\n\n{% stylesheet %}\n  .quick-order-list {\n    --quantity-selector-width: 124px;\n    --image-size: 43px;\n    --quantity-header-padding: calc(var(--minimum-touch-target) + var(--gap-sm));\n    --quick-order-quantity-column-width: calc(\n      var(--quantity-selector-width) + 2 * var(--gap-sm) + 2 * var(--minimum-touch-target)\n    );\n    --transform-offset-negative: calc(-1 * var(--icon-stroke-width));\n    --quick-order-first-column-width: 2fr; /* Takes 2 fractions of available space */\n    --quick-order-price-column-width: 1fr; /* Takes 1 fraction */\n    --quick-order-total-column-width: 1fr; /* Takes 1 fraction */\n\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-sm);\n  }\n\n  .quick-order-list__container {\n    width: 100%;\n  }\n\n  /* Grid container setup */\n  .quick-order-list__grid {\n    width: 100%;\n    display: block; /* Container is block, children use grid */\n    contain: layout; /* Isolate layout calculations for performance */\n  }\n\n  .quick-order-list__grid-body {\n    contain: layout; /* Isolate layout calculations for performance */\n  }\n\n  .quick-order-list__grid-header,\n  .quick-order-list__grid-row {\n    display: grid;\n    grid-template-columns:\n      var(--quick-order-first-column-width) /* Variant column - takes 2 parts of available space */\n      var(--quick-order-quantity-column-width) /* Fixed pixel width for quantity */\n      var(--quick-order-price-column-width) /* Price column - takes 1 part */\n      var(--quick-order-total-column-width); /* Total column - takes 1 part */\n    gap: var(--gap-md);\n    align-items: center;\n  }\n\n  .quick-order-list__grid-header {\n    border-block-end: var(--style-border-width) solid var(--color-border);\n    padding-block-end: var(--padding-xl);\n    margin-block-end: var(--padding-sm);\n    opacity: var(--opacity-85);\n    font-weight: normal;\n    font-size: var(--font-size--xs);\n    letter-spacing: var(--letter-spacing--body-loose);\n  }\n\n  /* Add padding to quantity column header to align with content */\n  .quick-order-list__grid-header .quick-order-list__grid-cell--quantity {\n    padding-inline-start: var(--quantity-header-padding);\n  }\n\n  .quick-order-list__grid-row {\n    padding-block-start: var(--padding-sm);\n    padding-block-end: var(--padding-sm);\n    content-visibility: auto;\n    contain-intrinsic-size: auto\n      calc(2 * var(--padding-sm) + var(--image-size) + var(--minimum-touch-target) + var(--padding-2xl));\n  }\n\n  @media screen and (min-width: 750px) {\n    .quick-order-list__grid-row {\n      contain-intrinsic-size: auto calc(2 * var(--padding-sm) + var(--image-size));\n    }\n  }\n\n  .quick-order-list__grid-cell--variant {\n    text-align: start;\n    justify-self: stretch;\n  }\n\n  .quick-order-list__grid-cell--quantity {\n    display: flex;\n    justify-content: flex-start;\n    align-items: flex-start;\n    justify-self: stretch;\n  }\n\n  .quick-order-list__grid-cell--quantity .variant-item__inner-container {\n    width: 100%;\n    justify-content: flex-start;\n  }\n\n  .quick-order-list__grid-cell--price {\n    text-align: end;\n    justify-self: stretch;\n  }\n\n  .quick-order-list__grid-cell--total {\n    text-align: end;\n    justify-self: stretch;\n  }\n\n  .variant-item__image-container,\n  .quick-order-list__table-image {\n    width: var(--image-size);\n    height: auto;\n  }\n\n  .quick-order-list .pagination {\n    margin-block-start: 0;\n    padding-block-start: var(--padding-xl);\n    padding-block-end: 0;\n  }\n\n  .variant-item__inner-container {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-sm);\n  }\n\n  .volume-pricing-info-placeholder {\n    width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n  }\n\n  .variant-item__quantity .quantity-selector {\n    display: flex;\n    flex: 0 0 var(--quantity-selector-width);\n    min-width: var(--quantity-selector-width);\n    font-size: var(--font-size--xs);\n    height: auto;\n  }\n\n  .variant-item__remove {\n    background-color: transparent;\n    color: var(--color-foreground);\n    width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n    justify-content: center;\n    box-shadow: none;\n    padding: 0;\n  }\n\n  .remove-icon-bottom,\n  .remove-icon-top {\n    transition: transform var(--animation-speed) var(--animation-easing);\n  }\n\n  .variant-item__remove:not(.variant-item__remove--hidden):hover .remove-icon-top {\n    transform: translate(var(--transform-offset-negative), var(--icon-stroke-width)) rotate(-15deg);\n  }\n\n  .variant-item__remove:not(.variant-item__remove--hidden):is(:hover, :active) .remove-icon-bottom {\n    transform: translateY(var(--icon-stroke-width));\n  }\n\n  /* Hide remove button with opacity to prevent layout shift */\n  .variant-item__remove--hidden {\n    opacity: 0;\n    pointer-events: none;\n    cursor: default;\n  }\n\n  .variant-item__name {\n    font-weight: var(--font-weight-medium);\n  }\n\n  .variant-item__sku {\n    font-size: var(--font-size--3xs);\n    opacity: var(--opacity-85);\n  }\n\n  .variant-item__details {\n    display: inline-flex;\n    flex-direction: column;\n  }\n\n  .variant-item__totals {\n    flex: 0 0 auto;\n    padding-block-start: var(--padding-2xs);\n  }\n\n  /* Compare at price styles */\n  .variant-item__discounted-prices {\n    display: flex;\n    gap: var(--gap-2xs);\n    justify-content: flex-end;\n  }\n\n  .variant-item__discounted-prices dd {\n    margin: 0;\n  }\n\n  /* Mobile layout */\n  @media screen and (max-width: 749px) {\n    .quick-order-list__grid-header,\n    .quick-order-list__grid-row {\n      grid-template-columns: 1fr auto; /* Variant column and total column on mobile */\n      gap: var(--gap-sm);\n      max-width: 100%;\n      overflow: hidden;\n      align-items: flex-start;\n    }\n\n    .quick-order-list__grid-header .quick-order-list__grid-cell--total {\n      text-align: end;\n    }\n\n    .quick-order-list__grid-row {\n      margin-block-end: var(--margin-2xl);\n      padding-block-end: var(--padding-2xl);\n      border-block-end: var(--style-border-width) solid var(--color-border);\n    }\n\n    .quick-order-list__grid-row:last-child {\n      margin-block-end: 0;\n      border-block-end: none;\n    }\n\n    .variant-item__inner {\n      flex: 1 1 auto;\n      padding-inline-end: var(--padding-lg);\n    }\n\n    .variant-item__inner-container {\n      display: flex;\n      gap: var(--gap-md);\n      align-items: flex-start;\n    }\n\n    .variant-item__details {\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n      min-width: 0; /* Allow text to shrink */\n    }\n\n    .variant-item__totals {\n      flex: 0 0 auto;\n      text-align: end;\n      padding-block-start: var(--padding-2xs);\n    }\n\n    .variant-item__totals .variant-item__total-price {\n      font-size: var(--font-size--sm);\n      font-weight: var(--font-weight-medium);\n    }\n\n    .variant-item__title-container .variant-item__name {\n      display: block;\n      font-size: var(--font-size--sm);\n      line-height: var(--line-height-tight);\n      margin: 0;\n    }\n\n    .variant-item__mobile-price-container {\n      margin-block-end: var(--margin-xs);\n    }\n\n    .variant-item__mobile-price {\n      font-size: var(--font-size--sm);\n      opacity: var(--opacity-85);\n      white-space: nowrap;\n    }\n\n    /* Mobile compare at price styles */\n    .variant-item__discounted-prices--mobile {\n      display: flex;\n      flex-direction: row;\n      align-items: baseline;\n      justify-content: flex-start;\n      gap: var(--gap-xs);\n      margin-block-start: var(--margin-2xs);\n      margin-block-end: 0;\n    }\n\n    .variant-item__discounted-prices--mobile dd {\n      display: inline;\n    }\n\n    .variant-item__mobile-quantity {\n      display: flex;\n      align-items: center;\n      gap: 0;\n    }\n\n    /* Mobile-only content styles */\n    .variant-item__mobile-info {\n      display: flex;\n      flex-direction: column;\n      width: 100%;\n    }\n\n    .variant-item__image-container {\n      flex: 0 0 var(--image-size);\n      width: var(--image-size);\n      height: var(--image-size);\n    }\n\n    .quick-order-list__table-image {\n      width: 100%;\n      height: 100%;\n    }\n\n    .variant-item__mobile-quantity .quantity-selector {\n      display: flex;\n      flex: 0 0 var(--quantity-selector-width);\n      min-width: var(--quantity-selector-width);\n      font-size: var(--font-size--xs);\n      margin: 0;\n      padding: 0;\n    }\n\n    /* Mobile remove button styling */\n    .variant-item__remove--mobile {\n      background-color: transparent;\n      color: var(--color-foreground);\n      width: var(--minimum-touch-target);\n      height: var(--minimum-touch-target);\n      min-width: var(--minimum-touch-target);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      box-shadow: none;\n      padding: 0;\n      margin: 0;\n      flex-shrink: 0;\n      border: none;\n      cursor: pointer;\n    }\n\n    .variant-item__remove--mobile svg {\n      width: var(--icon-size-sm);\n      height: var(--icon-size-sm);\n    }\n\n    .variant-item__remove--mobile:not(.variant-item__remove--hidden):hover {\n      opacity: var(--opacity-70);\n    }\n\n    .quick-order-list .pagination {\n      padding-block-start: var(--padding-2xl);\n    }\n  }\n\n  .quick-order-list-disabled {\n    pointer-events: none;\n  }\n\n  .quick-order-list-total {\n    background: var(--color-background);\n    border-block-start: var(--style-border-width) solid var(--color-border);\n  }\n\n  /* Tablet and Desktop styles - sticky footer */\n  @media screen and (min-width: 750px) {\n    .quick-order-list-total {\n      position: sticky;\n      inset-block-end: 0;\n      z-index: var(--layer-raised);\n    }\n  }\n\n  .quick-order-list-total__info,\n  .quick-order-list-total__confirmation {\n    min-height: 8rem;\n    padding-block-start: var(--padding-4xl);\n  }\n\n  .quick-order-list-total__info {\n    align-items: flex-start;\n    gap: var(--gap-md);\n  }\n\n  .quick-order-list-total__confirmation {\n    display: flex;\n    gap: var(--gap-2xl);\n    align-items: center;\n    justify-content: center;\n    padding: var(--padding-2xl) var(--padding-xl);\n  }\n\n  .quick-order-list-total__column {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .quick-order-list-total__actions {\n    display: flex;\n  }\n\n  /* Desktop layout - Use CSS Grid to match main table alignment */\n  @media screen and (min-width: 750px) {\n    .quick-order-list-total__info {\n      display: grid;\n      grid-template-columns:\n        var(--quick-order-first-column-width) /* Variant column - takes 2 parts of available space */\n        var(--quick-order-quantity-column-width) /* Fixed pixel width for quantity */\n        var(--quick-order-price-column-width) /* Price column - takes 1 part */\n        var(--quick-order-total-column-width); /* Total column - takes 1 part */\n    }\n\n    .quick-order-list-total__column {\n      grid-column: 1;\n      display: flex;\n      flex-direction: column;\n      gap: var(--gap-md);\n    }\n\n    .quick-order-list-total__summary {\n      grid-column: 2 / 5;\n      display: grid;\n      grid-template-columns: var(--quick-order-quantity-column-width, 234px) auto;\n    }\n\n    .quick-order-list-total__items {\n      grid-column: 1;\n      justify-self: center;\n      text-align: center;\n    }\n\n    .quick-order-list-total__price {\n      grid-column: 3;\n      justify-self: end;\n      text-align: end;\n    }\n  }\n\n  /* Tablet-specific overrides - 750px to 989px */\n  @media screen and (min-width: 750px) and (max-width: 989px) {\n    .quick-order-list-total__actions {\n      flex-direction: column;\n    }\n\n    .quick-order-list-total__messages {\n      align-items: stretch;\n    }\n\n    .quick-order-list__remove-all-button {\n      padding-inline: 0;\n    }\n  }\n\n  .quick-order-list__button.button--full-width {\n    width: 100%;\n  }\n\n  .quick-order-list__button.button {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .quick-order-list-total .button--unstyled {\n    border: none;\n    box-shadow: none;\n    background-color: transparent;\n    color: var(--color-foreground);\n    cursor: pointer;\n  }\n\n  .quick-order-list__remove-all-button svg {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n    flex-shrink: 0;\n  }\n\n  .quick-order-list-total__items span {\n    display: block;\n    margin-block-end: var(--margin-xs);\n  }\n\n  .quick-order-list-total__items .h5 {\n    margin: 0;\n    letter-spacing: var(--letter-spacing--body-loose);\n    opacity: var(--opacity-85);\n  }\n\n  .quick-order-list-total__subtotal-value {\n    display: block;\n    margin-block-end: var(--margin-xs);\n    line-height: var(--font-paragraph--line-height);\n  }\n\n  /* Ensure text-component displays properly */\n  .quick-order-list-total__subtotal-value text-component {\n    display: block;\n  }\n\n  .quick-order-list-total__subtotal {\n    margin: 0;\n    letter-spacing: var(--letter-spacing--body-loose);\n    opacity: var(--opacity-85);\n  }\n\n  .quick-order-list-total__tax-note {\n    opacity: var(--opacity-subdued-text);\n  }\n\n  .quick-order-list-total__messages {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-xs);\n  }\n\n  .quick-order-list-total__success,\n  .quick-order-list-total__error {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n  }\n\n  .quick-order-list-total__success .icon-success,\n  .quick-order-list-total__error .quick-order-list-total__icon--error {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n    color: inherit;\n  }\n\n  .quick-order-list-total__success .icon-success svg,\n  .quick-order-list-total__error .quick-order-list-total__icon--error svg {\n    width: 100%;\n    height: 100%;\n  }\n\n  .quick-order-list-total__error:empty,\n  .quick-order-list-total__success:empty {\n    display: none;\n  }\n\n  .quick-order-list-total__info.confirmation-visible {\n    display: none;\n  }\n\n  .quick-order-list-total__confirmation-text {\n    white-space: nowrap;\n  }\n\n  .quick-order-list-total__confirmation-buttons {\n    display: flex;\n    gap: var(--gap-md);\n    align-items: center;\n  }\n\n  .quick-order-list-total__confirmation button {\n    margin: 0;\n    white-space: nowrap;\n  }\n\n  .quick-order-list__remove-all-button {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: var(--gap-sm);\n  }\n\n  /* Mobile styles */\n  @media screen and (max-width: 749px) {\n    .quick-order-list-total__info {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n    }\n\n    .quick-order-list-total__column {\n      order: 3; /* Move column to the end on mobile */\n      width: 100%;\n      flex: 1 1 auto;\n    }\n\n    .quick-order-list-total__actions {\n      flex-direction: column;\n      width: 100%;\n    }\n\n    .quick-order-list-total__messages {\n      width: 100%;\n      align-items: center;\n      margin-block-start: var(--margin-xs);\n    }\n\n    .quick-order-list-total__summary {\n      order: 1; /* First on mobile */\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      width: 100%;\n      gap: var(--gap-md);\n    }\n\n    .quick-order-list-total__items {\n      text-align: center;\n      width: auto;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: var(--gap-xs);\n    }\n\n    .quick-order-list-total__items span {\n      display: inline;\n      margin-block-end: 0;\n    }\n\n    .quick-order-list-total__items .h5 {\n      display: inline;\n    }\n\n    .quick-order-list-total__price {\n      text-align: center;\n      width: 100%;\n    }\n\n    .quick-order-list-total__product-total {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: var(--gap-xs);\n    }\n\n    .quick-order-list-total__product-total .quick-order-list-total__subtotal-value {\n      display: inline-block;\n      margin-block-end: 0;\n    }\n\n    .quick-order-list-total__product-total .quick-order-list-total__subtotal {\n      display: inline;\n    }\n\n    .quick-order-list__button,\n    .quick-order-list__remove-all-button {\n      width: 100%;\n      justify-content: center;\n    }\n\n    .quick-order-list-total__confirmation {\n      flex-direction: column;\n    }\n\n    .quick-order-list-total__tax-note {\n      margin-block-start: var(--margin-xs);\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.quick_order_list\",\n  \"tag\": \"section\",\n  \"enabled_on\": {\n    \"templates\": [\"product\"]\n  },\n  \"blocks\": [],\n  \"settings\": [\n    {\n      \"type\": \"range\",\n      \"id\": \"variants_per_page\",\n      \"label\": \"t:settings.variant_per_page\",\n      \"min\": 5,\n      \"max\": 50,\n      \"step\": 1,\n      \"default\": 50\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_image\",\n      \"label\": \"t:settings.image\",\n      \"default\": false\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"show_sku\",\n      \"label\": \"t:settings.skus\",\n      \"default\": false\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 32\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.quick_order_list\",\n      \"category\": \"t:categories.products\",\n      \"settings\": {\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/search-header.liquid",
    "content": "<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div class=\"section section--page-width color-{{ section.settings.color_scheme }}\">\n  <div\n    class=\"spacing-style search-page__header\"\n    style=\"\n      --horizontal-alignment: {{ section.settings.alignment }};\n      {% render 'spacing-style', settings: section.settings %}\n    \"\n  >\n    {% assign heading_text = 'content.search' | t %}\n\n    {% if search.performed %}\n      {% assign heading_text = 'content.search_results' | t %}\n    {% endif %}\n\n    {% capture heading_text %}\n      <h3>{{ heading_text }}</h3>\n    {% endcapture %}\n\n    {% content_for 'block', id: 'heading', type: '_heading', text: heading_text %}\n    {% content_for 'block', id: 'search', type: '_search-input' %}\n  </div>\n</div>\n\n{% schema %}\n{\n  \"name\": \"t:names.search\",\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/search-results.liquid",
    "content": "<script\n  src=\"{{ 'results-list.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n\n<results-list\n  class=\"section product-grid-container spacing-style color-{{ section.settings.color_scheme }}\"\n  style=\"--padding-block-start: {{ section.settings.padding-block-start }}px; --padding-block-end: {{ section.settings.padding-block-end }}px;\"\n  section-id=\"{{ section.id }}\"\n  infinite-scroll=\"{{ section.settings.enable_infinite_scroll }}\"\n>\n  {% render 'skip-to-content-link', href: '#ResultsList', text: 'accessibility.skip_to_results_list' %}\n\n  <div\n    class=\"collection-wrapper grid gap-style\"\n  >\n    {% assign products_per_page = 24 %}\n\n    {% if section.settings.enable_infinite_scroll == false %}\n      {% assign products_per_page = section.settings.products_per_page %}\n    {% endif %}\n\n    {% paginate search.results by products_per_page %}\n      {% if search.results_count > 0 %}\n        {% content_for 'block', type: 'filters', id: 'filters', results: search, results_size: search.results_count %}\n        {% assign products = search.results | where: 'object_type', 'product' %}\n      {% else %}\n        {% assign collection = settings.empty_state_collection | default: collections.all %}\n        {% assign default_title = 'content.search_results_resource_products' | t %}\n        {% assign title = settings.empty_state_collection.title | default: default_title %}\n        {% assign products = collection.products %}\n      {% endif %}\n\n      {% capture children %}\n        {% for product in products %}\n          <li\n            id=\"{{ section.id }}-{{ product.id }}\"\n            class=\"product-grid__item product-grid__item--{{ forloop.index0 }}\"\n            data-page=\"{{ paginate.current_page }}\"\n            data-product-id=\"{{ product.id }}\"\n            ref=\"cards[]\"\n          >\n            {% content_for 'block', type: '_product-card', id: 'product-card', closest.product: product %}\n          </li>\n        {% endfor %}\n      {% endcapture %}\n\n      {% render 'product-grid',\n        section: section,\n        children: children,\n        products: products,\n        paginate: paginate,\n        enable_infinite_scroll: section.settings.enable_infinite_scroll,\n        title: title\n      %}\n    {% endpaginate %}\n  </div>\n</results-list>\n\n{% schema %}\n{\n  \"name\": \"t:names.search_results\",\n  \"settings\": [\n    {\n      \"type\": \"paragraph\",\n      \"content\": \"t:content.edit_empty_state_collection_in_theme_settings\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"layout_type\",\n      \"label\": \"t:settings.type\",\n      \"options\": [\n        {\n          \"value\": \"grid\",\n          \"label\": \"t:options.grid\"\n        },\n        {\n          \"value\": \"organic\",\n          \"label\": \"t:options.editorial\"\n        }\n      ],\n      \"default\": \"grid\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_card_size\",\n      \"label\": \"t:settings.card_size\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"extra-large\",\n          \"label\": \"t:options.extra_large\"\n        }\n      ],\n      \"default\": \"medium\",\n      \"visible_if\": \"{{ section.settings.layout_type == 'grid' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"mobile_product_card_size\",\n      \"label\": \"t:settings.mobile_card_size\",\n      \"options\": [\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"small\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"enable_infinite_scroll\",\n      \"label\": \"t:settings.auto_load_products\",\n      \"default\": true\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"products_per_page\",\n      \"label\": \"t:settings.products_per_page\",\n      \"min\": 8,\n      \"max\": 36,\n      \"step\": 4,\n      \"default\": 24,\n      \"visible_if\": \"{{ section.settings.enable_infinite_scroll == false }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"product_grid_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"centered\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"centered\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"full_width_on_mobile\",\n      \"label\": \"t:settings.full_width_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.product_grid_width != 'full-width' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap_horizontal\",\n      \"label\": \"t:settings.horizontal_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"columns_gap_vertical\",\n      \"label\": \"t:settings.vertical_gap\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 16\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-start\",\n      \"label\": \"t:settings.left_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-inline-end\",\n      \"label\": \"t:settings.right_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.section_layout\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom_padding\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 8\n    }\n  ],\n  \"presets\": []\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/section-rendering-product-card.liquid",
    "content": "{% comment %}\n  This section is only to be called by the Section Rendering API. Faster to render a single card than the entire product grid.\n\n  HTML updated based on client-side interactions needs to be rendered here.  It is not important to have the exact\n  same HTML structure as the final rendered product card. The variant-picker.js script will morph specific elements as needed.\n{% endcomment %}\n\n{% liquid\n  if product == blank\n    assign product = closest.product\n  endif\n\n  if settings.transition_to_main_product\n    assign featured_media_url = product.selected_or_first_available_variant.featured_image | image_url: width: 500\n    if featured_media_url == blank\n      assign featured_media_url = product.featured_media.preview_image | image_url: width: 500\n    endif\n  endif\n\n  assign url = product.selected_or_first_available_variant.url\n  unless url\n    assign url = product.first_available_variant.url\n  endunless\n  unless url\n    assign url = product.url\n  endunless\n\n  assign sku = product.selected_or_first_available_variant.sku\n%}\n\n<product-card\n  data-product-id=\"{{ product.id }}\"\n  {% if settings.transition_to_main_product %}\n    data-product-transition=\"true\"\n    {% if featured_media_url != blank %}\n      data-featured-media-url=\"{{ featured_media_url }}\"\n    {% endif %}\n    on:click=\"/handleViewTransition\"\n  {% endif %}\n>\n  <a\n    href=\"{{ url }}\"\n    ref=\"productCardLink\"\n  >\n    <variant-picker>\n      <script type=\"application/json\">\n        {{ product.selected_or_first_available_variant | json }}\n      </script>\n    </variant-picker>\n    {% render 'variant-swatches', product_resource: product, has_option_selected: true %}\n\n    <product-price>\n      {% render 'price', product_resource: product, show_unit_price: true %}\n    </product-price>\n\n    <product-sku-component\n      data-product-id=\"{{ product.id }}\"\n      style=\"{% if sku == blank %}display: none;{% else %}display: block;{% endif %}\"\n    >\n      {% render 'sku', product_resource: product %}\n    </product-sku-component>\n  </a>\n</product-card>\n\n{% schema %}\n{\n  \"name\": \"t:names.product_card_rendering\",\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"product\",\n      \"id\": \"product\",\n      \"label\": \"t:settings.product\"\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/section.liquid",
    "content": "{% capture children %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% render 'section', section: section, children: children %}\n\n{% schema %}\n{\n  \"name\": \"t:names.section\",\n  \"class\": \"section-wrapper\",\n  \"blocks\": [\n    {\n      \"type\": \"@theme\"\n    },\n    {\n      \"type\": \"@app\"\n    },\n    {\n      \"type\": \"_divider\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.layout\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_direction\",\n      \"label\": \"t:settings.direction\",\n      \"options\": [\n        {\n          \"value\": \"column\",\n          \"label\": \"t:options.vertical\"\n        },\n        {\n          \"value\": \"row\",\n          \"label\": \"t:options.horizontal\"\n        }\n      ],\n      \"default\": \"column\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"vertical_on_mobile\",\n      \"label\": \"t:settings.vertical_on_mobile\",\n      \"default\": true,\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'row' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"align_baseline\",\n      \"label\": \"t:settings.align_baseline\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.vertical_alignment == 'flex-end' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"horizontal_alignment_flex_direction_column\",\n      \"label\": \"t:settings.alignment\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.left\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.right\"\n        }\n      ],\n      \"default\": \"flex-start\",\n      \"visible_if\": \"{{ section.settings.content_direction != 'row' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"vertical_alignment_flex_direction_column\",\n      \"label\": \"t:settings.position\",\n      \"options\": [\n        {\n          \"value\": \"flex-start\",\n          \"label\": \"t:options.top\"\n        },\n        {\n          \"value\": \"center\",\n          \"label\": \"t:options.center\"\n        },\n        {\n          \"value\": \"flex-end\",\n          \"label\": \"t:options.bottom\"\n        },\n        {\n          \"value\": \"space-between\",\n          \"label\": \"t:options.space_between\"\n        }\n      ],\n      \"default\": \"center\",\n      \"visible_if\": \"{{ section.settings.content_direction == 'column' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.size\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"page-width\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_height\",\n      \"label\": \"t:settings.height\",\n      \"options\": [\n        {\n          \"value\": \"\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        },\n        {\n          \"value\": \"full-screen\",\n          \"label\": \"t:options.full_screen\"\n        },\n        {\n          \"value\": \"custom\",\n          \"label\": \"t:options.custom\"\n        }\n      ],\n      \"default\": \"\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"section_height_custom\",\n      \"label\": \"t:settings.custom_height\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"default\": 50,\n      \"unit\": \"%\",\n      \"visible_if\": \"{{ section.settings.section_height == 'custom' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.appearance\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"scheme-1\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_media\",\n      \"label\": \"t:settings.background_media\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"image\",\n          \"label\": \"t:options.image\"\n        },\n        {\n          \"value\": \"video\",\n          \"label\": \"t:options.video\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"video\",\n      \"id\": \"video\",\n      \"label\": \"t:settings.video\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"video_position\",\n      \"label\": \"t:settings.video_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"contain\",\n          \"label\": \"t:options.contain\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'video' }}\"\n    },\n    {\n      \"type\": \"image_picker\",\n      \"id\": \"background_image\",\n      \"label\": \"t:settings.image\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"background_image_position\",\n      \"label\": \"t:settings.image_position\",\n      \"options\": [\n        {\n          \"value\": \"cover\",\n          \"label\": \"t:options.cover\"\n        },\n        {\n          \"value\": \"fit\",\n          \"label\": \"t:options.fit\"\n        }\n      ],\n      \"default\": \"cover\",\n      \"visible_if\": \"{{ section.settings.background_media == 'image' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"border\",\n      \"label\": \"t:settings.borders\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        }\n      ],\n      \"default\": \"none\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_width\",\n      \"min\": 0,\n      \"max\": 10,\n      \"step\": 0.5,\n      \"unit\": \"px\",\n      \"label\": \"t:settings.border_width\",\n      \"default\": 1,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_opacity\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"%\",\n      \"label\": \"t:settings.border_opacity\",\n      \"default\": 100,\n      \"visible_if\": \"{{ section.settings.border != 'none' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"border_radius\",\n      \"label\": \"t:settings.border_radius\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"toggle_overlay\",\n      \"label\": \"t:settings.background_overlay\"\n    },\n    {\n      \"type\": \"color\",\n      \"id\": \"overlay_color\",\n      \"label\": \"t:settings.overlay_color\",\n      \"alpha\": true,\n      \"default\": \"#00000026\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"overlay_style\",\n      \"label\": \"t:settings.overlay_style\",\n      \"options\": [\n        {\n          \"value\": \"solid\",\n          \"label\": \"t:options.solid\"\n        },\n        {\n          \"value\": \"gradient\",\n          \"label\": \"t:options.gradient\"\n        }\n      ],\n      \"default\": \"solid\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"gradient_direction\",\n      \"label\": \"t:settings.gradient_direction\",\n      \"options\": [\n        {\n          \"value\": \"to top\",\n          \"label\": \"t:options.up\"\n        },\n        {\n          \"value\": \"to bottom\",\n          \"label\": \"t:options.down\"\n        }\n      ],\n      \"default\": \"to top\",\n      \"visible_if\": \"{{ section.settings.toggle_overlay and section.settings.overlay_style == 'gradient' }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.custom_section\",\n      \"category\": \"t:categories.layout\",\n      \"settings\": {\n        \"section_height\": \"small\"\n      }\n    },\n    {\n      \"name\": \"t:names.rich_text_section\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.new_arrivals_h2\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"background\": false,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"text\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.make_things_better_extended\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"background\": false,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"name\": \"t:names.button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.button_label\",\n            \"link\": \"shopify://collections/all\",\n            \"open_in_new_tab\": false,\n            \"style_class\": \"button\",\n            \"width\": \"fit-content\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fit-content\",\n            \"custom_width_mobile\": 100\n          }\n        }\n      },\n      \"block_order\": [\"heading\", \"text\", \"button\"],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 25,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"small\",\n        \"color_scheme\": \"\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.faq_section\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.faq\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"narrow\",\n            \"alignment\": \"left\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"accordion\": {\n          \"type\": \"accordion\",\n          \"name\": \"t:names.accordion\",\n          \"settings\": {\n            \"icon\": \"caret\",\n            \"dividers\": true,\n            \"type_preset\": \"h5\",\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"accordion_row_1\": {\n              \"type\": \"_accordion-row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.what_is_return_policy\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.goal_for_every_customer\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion_row_2\": {\n              \"type\": \"_accordion-row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.are_purchases_final_sale\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.unable_to_accept_returns\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion_row_3\": {\n              \"type\": \"_accordion-row\",\n              \"name\": \"t:names.accordion_row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.when_will_order_arrive\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.work_quickly_to_ship\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion_row_4\": {\n              \"type\": \"_accordion-row\",\n              \"name\": \"t:names.accordion_row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.where_are_products_made\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.made_local_and_global\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text\"]\n            },\n            \"accordion_row_5\": {\n              \"type\": \"_accordion-row\",\n              \"name\": \"t:names.accordion_row\",\n              \"settings\": {\n                \"heading\": \"t:text_defaults.how_much_for_shipping\"\n              },\n              \"blocks\": {\n                \"text\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.shipping_based_on_location\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"text\"]\n            }\n          },\n          \"block_order\": [\"accordion_row_1\", \"accordion_row_2\", \"accordion_row_3\", \"accordion_row_4\", \"accordion_row_5\"]\n        }\n      },\n      \"block_order\": [\"text\", \"accordion\"],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 32,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"color_scheme\": \"\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.video_section\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 16,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"color_scheme\": \"\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 32,\n        \"padding-block-end\": 32\n      },\n      \"blocks\": {\n        \"video\": {\n          \"type\": \"video\",\n          \"name\": \"t:names.video\",\n          \"settings\": {\n            \"video\": \"\",\n            \"custom_width\": 100,\n            \"custom_width_mobile\": 100,\n            \"aspect_ratio\": \"16/9\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          }\n        },\n        \"group\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.caption\",\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.product_launch\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"name\": \"t:names.button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.discover_collection\",\n                \"link\": \"shopify://collections/all\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              }\n            }\n          },\n          \"block_order\": [\"text\", \"button\"]\n        }\n      },\n      \"block_order\": [\"video\", \"group\"]\n    },\n    {\n      \"name\": \"t:names.pull_quote\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.product_story\",\n            \"type_preset\": \"h2\",\n            \"width\": \"100%\",\n            \"max_width\": \"narrow\",\n            \"alignment\": \"center\"\n          }\n        },\n        \"button\": {\n          \"type\": \"button\",\n          \"settings\": {\n            \"label\": \"t:text_defaults.shop_now_button_label\",\n            \"link\": \"shopify://collections/all\",\n            \"style_class\": \"link\"\n          }\n        }\n      },\n      \"block_order\": [\"text\", \"button\"],\n      \"settings\": {\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"gap\": 16,\n        \"padding-block-start\": 64,\n        \"padding-block-end\": 64\n      }\n    },\n    {\n      \"name\": \"t:names.contact_form\",\n      \"category\": \"t:categories.forms\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.contact_us\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"center\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0\n          }\n        },\n        \"contact_form\": {\n          \"type\": \"contact-form\",\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 50,\n            \"width_mobile\": \"custom\",\n            \"custom_width_mobile\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"submit-button\": {\n              \"type\": \"contact-form-submit-button\",\n              \"static\": true,\n              \"settings\": {\n                \"label\": \"t:text_defaults.submit_button_label\",\n                \"style_class\": \"button\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              }\n            }\n          },\n          \"block_order\": []\n        }\n      },\n      \"block_order\": [\"text\", \"contact_form\"],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 32,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"color_scheme\": \"scheme-1\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 32,\n        \"padding-block-end\": 32\n      }\n    },\n    {\n      \"name\": \"t:names.email_signup\",\n      \"category\": \"t:categories.forms\",\n      \"settings\": {\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"gap\": 16,\n        \"color_scheme\": \"scheme-2\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      },\n      \"blocks\": {\n        \"text_1\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.subscribe\",\n            \"width\": \"100%\",\n            \"alignment\": \"center\"\n          }\n        },\n        \"text_2\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.first_to_know\",\n            \"type_preset\": \"paragraph\",\n            \"width\": \"100%\",\n            \"alignment\": \"center\"\n          }\n        },\n        \"email_signup\": {\n          \"type\": \"email-signup\",\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 50,\n            \"style_class\": \"button-unstyled\",\n            \"display_type\": \"arrow\",\n            \"label\": \"t:text_defaults.sign_up_button_label\",\n            \"integrated_button\": true\n          }\n        }\n      },\n      \"block_order\": [\"text_1\", \"text_2\", \"email_signup\"]\n    },\n    {\n      \"name\": \"t:names.icons_with_text\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"group_1\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 16,\n            \"height\": \"fit\",\n            \"inherit_color_scheme\": true\n          },\n          \"blocks\": {\n            \"icon\": {\n              \"type\": \"icon\",\n              \"settings\": {\n                \"icon\": \"eye\",\n                \"width\": 32,\n                \"link\": \"\"\n              }\n            },\n            \"group\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"gap\": 4\n              },\n              \"blocks\": {\n                \"heading\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.intentional_design\",\n                    \"type_preset\": \"h3\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                },\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.everythings_starts_with_why\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"heading\", \"text\"]\n            }\n          },\n          \"block_order\": [\"icon\", \"group\"]\n        },\n        \"group_2\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 16,\n            \"height\": \"fit\",\n            \"inherit_color_scheme\": true\n          },\n          \"blocks\": {\n            \"icon\": {\n              \"type\": \"icon\",\n              \"settings\": {\n                \"icon\": \"heart\",\n                \"width\": 32,\n                \"link\": \"\"\n              }\n            },\n            \"group\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"gap\": 4\n              },\n              \"blocks\": {\n                \"heading\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.made_with_care_h2\",\n                    \"type_preset\": \"h3\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                },\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.build_better\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"heading\", \"text\"]\n            }\n          },\n          \"block_order\": [\"icon\", \"group\"]\n        },\n        \"group_3\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 16,\n            \"height\": \"fit\",\n            \"inherit_color_scheme\": true\n          },\n          \"blocks\": {\n            \"icon\": {\n              \"type\": \"icon\",\n              \"settings\": {\n                \"icon\": \"silhouette\",\n                \"width\": 32,\n                \"link\": \"\"\n              }\n            },\n            \"group\": {\n              \"type\": \"group\",\n              \"settings\": {\n                \"gap\": 4\n              },\n              \"blocks\": {\n                \"heading\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.team_with_goal\",\n                    \"type_preset\": \"h3\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                },\n                \"text\": {\n                  \"type\": \"text\",\n                  \"settings\": {\n                    \"text\": \"t:html_defaults.real_people\",\n                    \"type_preset\": \"rte\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"width\": \"100%\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"center\",\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0\n                  }\n                }\n              },\n              \"block_order\": [\"heading\", \"text\"]\n            }\n          },\n          \"block_order\": [\"icon\", \"group\"]\n        }\n      },\n      \"block_order\": [\"group_1\", \"group_2\", \"group_3\"],\n      \"settings\": {\n        \"content_direction\": \"row\",\n        \"vertical_on_mobile\": true,\n        \"gap\": 16,\n        \"section_width\": \"page-width\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.split_showcase\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"group_1\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"vertical_alignment_flex_direction_column\": \"space-between\",\n            \"gap\": 32,\n            \"inherit_color_scheme\": false,\n            \"color_scheme\": \"scheme-5\",\n            \"background_media\": \"image\",\n            \"placeholder\": \"hero-apparel-2\",\n            \"height\": \"fill\",\n            \"padding-block-start\": 40,\n            \"padding-block-end\": 40,\n            \"padding-inline-start\": 40,\n            \"padding-inline-end\": 40\n          },\n          \"blocks\": {\n            \"spacer\": {\n              \"type\": \"spacer\",\n              \"settings\": {\n                \"size\": \"pixel\",\n                \"pixel_size\": 16\n              }\n            },\n            \"text_1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.new_arrivals_h3\",\n                \"type_preset\": \"h3\",\n                \"width\": \"fit-content\",\n                \"alignment\": \"center\"\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\",\n                \"style_class\": \"link\"\n              }\n            }\n          },\n          \"block_order\": [\"spacer\", \"text_1\", \"button\"]\n        },\n        \"group_2\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"vertical_alignment_flex_direction_column\": \"space-between\",\n            \"gap\": 32,\n            \"inherit_color_scheme\": false,\n            \"color_scheme\": \"scheme-5\",\n            \"background_media\": \"image\",\n            \"placeholder\": \"hero-apparel-1\",\n            \"height\": \"fill\",\n            \"padding-block-start\": 40,\n            \"padding-block-end\": 40,\n            \"padding-inline-start\": 40,\n            \"padding-inline-end\": 40\n          },\n          \"blocks\": {\n            \"spacer\": {\n              \"type\": \"spacer\",\n              \"settings\": {\n                \"size\": \"pixel\",\n                \"pixel_size\": 16\n              }\n            },\n            \"text_1\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.bestseller_h3\",\n                \"type_preset\": \"h3\",\n                \"width\": \"fit-content\",\n                \"alignment\": \"center\"\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\",\n                \"style_class\": \"link\"\n              }\n            }\n          },\n          \"block_order\": [\"spacer\", \"text_1\", \"button\"]\n        }\n      },\n      \"block_order\": [\"group_1\", \"group_2\"],\n      \"settings\": {\n        \"content_direction\": \"row\",\n        \"vertical_on_mobile\": true,\n        \"gap\": 0,\n        \"section_width\": \"full-width\",\n        \"section_height\": \"large\"\n      }\n    },\n    {\n      \"name\": \"t:names.image_with_text\",\n      \"category\": \"t:categories.storytelling\",\n      \"settings\": {\n        \"content_direction\": \"row\",\n        \"gap\": 32,\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      },\n      \"blocks\": {\n        \"image\": {\n          \"type\": \"image\",\n          \"settings\": {\n            \"image\": \"\",\n            \"image_ratio\": \"square\"\n          }\n        },\n        \"group\": {\n          \"type\": \"group\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"width\": \"custom\"\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.signature_products\",\n                \"type_preset\": \"h3\"\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.made_with_care_extended\",\n                \"max_width\": \"narrow\"\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\", \"button\"]\n        }\n      },\n      \"block_order\": [\"image\", \"group\"]\n    },\n    {\n      \"name\": \"t:names.multicolumn\",\n      \"category\": \"t:categories.text\",\n      \"blocks\": {\n        \"group_1\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.column\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"flex-start\",\n            \"gap\": 8,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 10,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"<h2>Intentional design</h2>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.description\",\n              \"settings\": {\n                \"text\": \"<p>We create with intention. Our products solve real problems with clean design and honest materials.</p>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\"]\n        },\n        \"group_2\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.column\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"flex-start\",\n            \"gap\": 8,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 10,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"<h2>Quality first</h2>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.description\",\n              \"settings\": {\n                \"text\": \"<p>We obsess over the details and strive to deliver the best products at the best prices, every time.</p>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\"]\n        },\n        \"group_3\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.column\",\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"flex-start\",\n            \"gap\": 8,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 10,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"<h2>Customer care</h2>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.description\",\n              \"settings\": {\n                \"text\": \"<p>We're always on your side: keeping our loyal customers happy is our top priority and number one goal.</p>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"center\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\"]\n        }\n      },\n      \"block_order\": [\"group_1\", \"group_2\", \"group_3\"],\n      \"settings\": {\n        \"content_direction\": \"row\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"flex-start\",\n        \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 16,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"color_scheme\": \"\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    {\n      \"name\": \"t:names.image_compare\",\n      \"category\": \"t:categories.storytelling\",\n      \"blocks\": {\n        \"group_EhJ6aA\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.content\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"gap\": 30,\n            \"width\": \"fit-content\"\n          },\n          \"blocks\": {\n            \"group_3xi9Yi\": {\n              \"type\": \"group\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"horizontal_alignment_flex_direction_column\": \"center\"\n              },\n              \"blocks\": {\n                \"text_NpcR4X\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.heading\",\n                  \"settings\": {\n                    \"text\": \"<h2>Find your perfect fit</h2>\"\n                  }\n                },\n                \"text_jbqPwX\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.subheading\",\n                  \"settings\": {\n                    \"text\": \"<p>Discover the best of both worlds</p>\"\n                  }\n                }\n              },\n              \"block_order\": [\"text_NpcR4X\", \"text_jbqPwX\"]\n            },\n            \"group_PpcWat\": {\n              \"type\": \"group\",\n              \"name\": \"t:names.buttons\",\n              \"settings\": {\n                \"content_direction\": \"row\",\n                \"vertical_on_mobile\": false,\n                \"horizontal_alignment\": \"center\"\n              },\n              \"blocks\": {\n                \"button_bbnFQ3\": {\n                  \"type\": \"button\",\n                  \"name\": \"t:names.button\",\n                  \"settings\": {\n                    \"label\": \"t:text_defaults.view_all_button_label\",\n                    \"link\": \"shopify://collections/all\",\n                    \"style_class\": \"button-secondary\",\n                    \"custom_width\": 34,\n                    \"custom_width_mobile\": 34\n                  }\n                },\n                \"button_cKPkCT\": {\n                  \"type\": \"button\",\n                  \"name\": \"t:names.button\",\n                  \"settings\": {\n                    \"label\": \"t:text_defaults.shop_now_button_label\",\n                    \"link\": \"shopify://collections/all\",\n                    \"style_class\": \"button-secondary\",\n                    \"custom_width\": 34,\n                    \"custom_width_mobile\": 34\n                  }\n                }\n              },\n              \"block_order\": [\"button_bbnFQ3\", \"button_cKPkCT\"]\n            }\n          },\n          \"block_order\": [\"group_3xi9Yi\", \"group_PpcWat\"]\n        },\n        \"comparison_slider_RjcBej\": {\n          \"type\": \"comparison-slider\",\n          \"name\": \"t:names.comparison_slider\",\n          \"settings\": {\n            \"image_ratio\": \"landscape\",\n            \"width\": \"custom\",\n            \"custom_width\": 65\n          }\n        }\n      },\n      \"block_order\": [\"group_EhJ6aA\", \"comparison_slider_RjcBej\"],\n      \"settings\": {\n        \"content_direction\": \"row\",\n        \"horizontal_alignment\": \"space-between\",\n        \"gap\": 46,\n        \"section_height\": \"small\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      }\n    },\n    {\n      \"name\": \"t:names.large_logo\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"text\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"t:html_defaults.made_with_care_extended\",\n            \"max_width\": \"narrow\"\n          }\n        },\n        \"logo\": {\n          \"type\": \"logo\",\n          \"settings\": {\n            \"unit\": \"percent\",\n            \"percent_width\": 100\n          }\n        }\n      },\n      \"block_order\": [\"text\", \"logo\"],\n      \"settings\": {\n        \"vertical_alignment_flex_direction_column\": \"space-between\",\n        \"gap\": 16,\n        \"section_height\": \"medium\",\n        \"color_scheme\": \"scheme-3\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "sections/slideshow.liquid",
    "content": "{% if section.blocks.size > 1 %}\n  {% if section.settings.display_mode == 'full_frame' %}\n    {% assign autoplay = section.settings.autoplay %}\n  {% else %}\n    {% assign autoplay = false %}\n  {% endif %}\n  {% capture controls %}\n    {%- render 'slideshow-controls',\n      style: section.settings.slideshow_controls_style,\n      autoplay: autoplay,\n      item_count: section.blocks.size,\n      show_arrows: false,\n      arrows_on_media: true,\n      controls_on_media: true,\n      pagination_position: 'center',\n      icon_style: section.settings.icons_style\n    -%}\n  {% endcapture %}\n{% endif %}\n\n{% capture slides %}\n  {% content_for 'blocks' %}\n{% endcapture %}\n\n{% liquid\n  assign section_width_class = ''\n  if section.settings.display_mode == 'with_hints'\n    assign section_width_class = 'section--page-width'\n    if section.settings.full_frame_on_mobile\n      assign section_width_class = section_width_class | append: ' section--mobile-full-width'\n    endif\n  else\n    assign section_width_class = 'section--' | append: section.settings.section_width\n  endif\n\n  assign slideshow_class = 'slideshow--content-' | append: section.settings.content_position\n  if section.blocks.size == 1\n    assign slideshow_class = slideshow_class | append: ' slideshow--single-media'\n  endif\n  if section.settings.display_mode == 'with_hints'\n    assign slideshow_class = slideshow_class | append: ' slideshow--with-hints'\n    if section.settings.full_frame_on_mobile\n      assign slideshow_class = slideshow_class | append: ' slideshow--with-hints--mobile-full-frame'\n    else\n      assign slideshow_class = slideshow_class | append: ' slideshow--with-hints--mobile-with-hints'\n    endif\n  endif\n\n  assign show_arrows = true\n  if section.settings.icons_style == 'none' or section.blocks.size <= 1\n    assign show_arrows = false\n  endif\n\n  assign rounded_slide_corners = false\n  if section.settings.display_mode == 'full_frame' and section.settings.section_width == 'page-width'\n    assign rounded_slide_corners = true\n  elsif section.settings.display_mode == 'with_hints' and section.settings.full_frame_on_mobile == false\n    assign rounded_slide_corners = true\n  endif\n%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"slideshow-section spacing-style section {{ section_width_class }} color-{{ section.settings.color_scheme }} disable-section-top-offset\"\n  style=\"{% render 'spacing-padding', settings: section.settings %}; --slideshow-gap: {{ section.settings.slideshow_gap }}px;{% if rounded_slide_corners %} --corner-radius: {{ section.settings.corner_radius }}px;{% endif %}\"\n>\n  {% render 'slideshow',\n    class: slideshow_class,\n    controls: controls,\n    show_arrows: show_arrows,\n    icon_style: section.settings.icons_style,\n    icon_shape: section.settings.icons_shape,\n    autoplay: autoplay,\n    autoplay_speed: section.settings.autoplay_speed,\n    slides: slides,\n    slide_count: section.blocks.size,\n    slide_size: section.settings.slide_height\n  %}\n</div>\n\n{% stylesheet %}\n  .slideshow-section {\n    slideshow-arrows .slideshow-control:first-of-type {\n      margin-inline-start: var(--padding-xs);\n    }\n\n    slideshow-arrows .slideshow-control:last-of-type {\n      margin-inline-end: var(--padding-xs);\n    }\n\n    .slideshow--with-hints--mobile-with-hints {\n      gap: var(--slideshow-gap, 0);\n      grid-column: 1 / -1;\n    }\n\n    /* Hide navigation arrows at boundaries for with-hints mode */\n    .slideshow--with-hints--mobile-with-hints slideshow-arrows .slideshow-control {\n      transition: opacity 0.3s ease;\n    }\n\n    /* Override animation for boundary arrows in with-hints mode on hover */\n    slideshow-component.slideshow--with-hints--mobile-with-hints:has(\n        slideshow-slide:first-child:not([aria-hidden='true'])\n      )\n      > slideshow-container\n      > slideshow-arrows\n      .slideshow-control--previous,\n    slideshow-component.slideshow--with-hints--mobile-with-hints:has(\n        slideshow-slide:last-child:not([aria-hidden='true'])\n      )\n      > slideshow-container\n      > slideshow-arrows\n      .slideshow-control--next {\n      animation: none;\n      opacity: 0;\n      pointer-events: none;\n    }\n\n    @media screen and (max-width: 749px) {\n      .slideshow--with-hints--mobile-with-hints slideshow-slides {\n        padding-inline: var(--page-margin);\n      }\n\n      .slideshow--with-hints--mobile-with-hints slideshow-slide {\n        width: 96%;\n      }\n\n      .slideshow--with-hints--mobile-with-hints slideshow-slides {\n        gap: min(var(--slideshow-gap, 0), 10px);\n      }\n    }\n\n    @media screen and (min-width: 750px) {\n      .slideshow--with-hints {\n        gap: var(--slideshow-gap, 0);\n        grid-column: 1 / -1;\n      }\n\n      .slideshow--with-hints slideshow-slides {\n        padding-inline: var(--page-margin);\n        gap: var(--slideshow-gap, 0);\n      }\n\n      .slideshow--with-hints slideshow-slide {\n        width: calc((100vw - var(--page-margin) * 2));\n        overflow: hidden;\n      }\n\n      .slideshow--with-hints slideshow-arrows .slideshow-control {\n        transition: opacity 0.3s ease;\n      }\n\n      slideshow-component.slideshow--with-hints:has(slideshow-slide:first-child:not([aria-hidden='true']))\n        > slideshow-container\n        > slideshow-arrows\n        .slideshow-control--previous,\n      slideshow-component.slideshow--with-hints:has(slideshow-slide:last-child:not([aria-hidden='true']))\n        > slideshow-container\n        > slideshow-arrows\n        .slideshow-control--next {\n        animation: none;\n        opacity: 0;\n        pointer-events: none;\n      }\n    }\n  }\n{% endstylesheet %}\n\n{% schema %}\n{\n  \"name\": \"t:names.slideshow\",\n  \"class\": \"container-background-image\",\n  \"blocks\": [\n    {\n      \"type\": \"_slide\"\n    }\n  ],\n  \"disabled_on\": {\n    \"groups\": [\"header\", \"footer\"]\n  },\n  \"settings\": [\n    {\n      \"type\": \"select\",\n      \"id\": \"display_mode\",\n      \"label\": \"t:settings.layout\",\n      \"options\": [\n        {\n          \"value\": \"full_frame\",\n          \"label\": \"t:options.full_frame\"\n        },\n        {\n          \"value\": \"with_hints\",\n          \"label\": \"t:options.with_hints\"\n        }\n      ],\n      \"default\": \"full_frame\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"section_width\",\n      \"label\": \"t:settings.width\",\n      \"options\": [\n        {\n          \"value\": \"page-width\",\n          \"label\": \"t:options.page\"\n        },\n        {\n          \"value\": \"full-width\",\n          \"label\": \"t:options.full\"\n        }\n      ],\n      \"default\": \"full-width\",\n      \"visible_if\": \"{{ section.settings.display_mode == 'full_frame' }}\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"full_frame_on_mobile\",\n      \"label\": \"t:settings.full_frame_on_mobile\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.display_mode == 'with_hints' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"slideshow_gap\",\n      \"label\": \"t:settings.gap\",\n      \"min\": 0,\n      \"max\": 30,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 12,\n      \"visible_if\": \"{{ section.settings.display_mode == 'with_hints' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"corner_radius\",\n      \"label\": \"t:settings.corner_radius\",\n      \"min\": 0,\n      \"max\": 50,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0,\n      \"visible_if\": \"{{ section.settings.display_mode == 'with_hints' or section.settings.display_mode == 'full_frame' and section.settings.section_width == 'page-width' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slide_height\",\n      \"options\": [\n        {\n          \"value\": \"auto\",\n          \"label\": \"t:options.auto\"\n        },\n        {\n          \"value\": \"small\",\n          \"label\": \"t:options.small\"\n        },\n        {\n          \"value\": \"medium\",\n          \"label\": \"t:options.medium\"\n        },\n        {\n          \"value\": \"large\",\n          \"label\": \"t:options.large\"\n        }\n      ],\n      \"default\": \"medium\",\n      \"label\": \"t:settings.media_height\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"content_position\",\n      \"label\": \"t:settings.content_position\",\n      \"options\": [\n        {\n          \"value\": \"on-media\",\n          \"label\": \"t:options.on_media\"\n        },\n        {\n          \"value\": \"below-media\",\n          \"label\": \"t:options.below_media\"\n        }\n      ],\n      \"default\": \"on-media\"\n    },\n    {\n      \"type\": \"color_scheme\",\n      \"id\": \"color_scheme\",\n      \"label\": \"t:settings.color_scheme\",\n      \"default\": \"primary\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.navigation\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_style\",\n      \"label\": \"t:settings.icons\",\n      \"options\": [\n        {\n          \"value\": \"arrow\",\n          \"label\": \"t:options.arrows\"\n        },\n        {\n          \"value\": \"chevron\",\n          \"label\": \"t:options.chevrons\"\n        },\n        {\n          \"value\": \"arrows_large\",\n          \"label\": \"t:options.large_arrows\"\n        },\n        {\n          \"value\": \"chevron_large\",\n          \"label\": \"t:options.large_chevrons\"\n        },\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        }\n      ],\n      \"default\": \"arrows_large\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"icons_shape\",\n      \"label\": \"t:settings.icon_background\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"circle\",\n          \"label\": \"t:options.circle\"\n        },\n        {\n          \"value\": \"square\",\n          \"label\": \"t:options.square\"\n        }\n      ],\n      \"default\": \"none\",\n      \"visible_if\": \"{{ section.settings.icons_style != 'none' }}\"\n    },\n    {\n      \"type\": \"select\",\n      \"id\": \"slideshow_controls_style\",\n      \"label\": \"t:settings.pagination\",\n      \"options\": [\n        {\n          \"value\": \"none\",\n          \"label\": \"t:options.none\"\n        },\n        {\n          \"value\": \"dots\",\n          \"label\": \"t:options.dots\"\n        },\n        {\n          \"value\": \"counter\",\n          \"label\": \"t:options.counter\"\n        }\n      ],\n      \"default\": \"dots\"\n    },\n    {\n      \"type\": \"checkbox\",\n      \"id\": \"autoplay\",\n      \"label\": \"t:settings.auto_rotate_slides\",\n      \"default\": false,\n      \"visible_if\": \"{{ section.settings.display_mode == 'full_frame' }}\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"autoplay_speed\",\n      \"label\": \"t:settings.speed\",\n      \"min\": 3,\n      \"max\": 7,\n      \"step\": 1,\n      \"unit\": \"s\",\n      \"default\": 4,\n      \"visible_if\": \"{{ section.settings.display_mode == 'full_frame' and section.settings.autoplay }}\"\n    },\n    {\n      \"type\": \"header\",\n      \"content\": \"t:content.padding\"\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-start\",\n      \"label\": \"t:settings.top\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    },\n    {\n      \"type\": \"range\",\n      \"id\": \"padding-block-end\",\n      \"label\": \"t:settings.bottom\",\n      \"min\": 0,\n      \"max\": 100,\n      \"step\": 1,\n      \"unit\": \"px\",\n      \"default\": 0\n    }\n  ],\n  \"presets\": [\n    {\n      \"name\": \"t:names.slideshow_full_frame\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"slide_1\": {\n          \"type\": \"_slide\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"inherit_color_scheme\": false,\n            \"color_scheme\": \"scheme-6\",\n            \"padding-inline-start\": 48,\n            \"padding-inline-end\": 48,\n            \"padding-block-start\": 48,\n            \"padding-block-end\": 48\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.new_arrivals_h2\"\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.latest_products\",\n                \"padding-block-end\": 20\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\", \"button\"]\n        },\n        \"slide_2\": {\n          \"type\": \"_slide\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"inherit_color_scheme\": false,\n            \"color_scheme\": \"scheme-6\",\n            \"padding-inline-start\": 48,\n            \"padding-inline-end\": 48,\n            \"padding-block-start\": 48,\n            \"padding-block-end\": 48\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.bestseller_h2\"\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.discover_bestsellers\",\n                \"padding-block-end\": 20\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\", \"button\"]\n        }\n      },\n      \"block_order\": [\"slide_1\", \"slide_2\"]\n    },\n    {\n      \"name\": \"t:names.slideshow_inset\",\n      \"category\": \"t:categories.banners\",\n      \"blocks\": {\n        \"slide_1\": {\n          \"type\": \"_slide\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"inherit_color_scheme\": true,\n            \"padding-inline-start\": 48,\n            \"padding-inline-end\": 48,\n            \"padding-block-start\": 48,\n            \"padding-block-end\": 48\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.new_arrivals_h2\"\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.latest_products\",\n                \"padding-block-end\": 20\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\", \"button\"]\n        },\n        \"slide_2\": {\n          \"type\": \"_slide\",\n          \"settings\": {\n            \"horizontal_alignment_flex_direction_column\": \"center\",\n            \"inherit_color_scheme\": true,\n            \"padding-inline-start\": 48,\n            \"padding-inline-end\": 48,\n            \"padding-block-start\": 48,\n            \"padding-block-end\": 48\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.heading\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.bestseller_h2\"\n              }\n            },\n            \"text\": {\n              \"type\": \"text\",\n              \"settings\": {\n                \"text\": \"t:html_defaults.discover_bestsellers\",\n                \"padding-block-end\": 20\n              }\n            },\n            \"button\": {\n              \"type\": \"button\",\n              \"settings\": {\n                \"label\": \"t:text_defaults.shop_now_button_label\",\n                \"link\": \"shopify://collections/all\"\n              }\n            }\n          },\n          \"block_order\": [\"heading\", \"text\", \"button\"]\n        }\n      },\n      \"block_order\": [\"slide_1\", \"slide_2\"],\n      \"settings\": {\n        \"display_mode\": \"with_hints\",\n        \"slideshow_gap\": 18,\n        \"corner_radius\": 20,\n        \"slide_height\": \"medium\",\n        \"content_position\": \"below-media\",\n        \"icons_style\": \"arrows_large\",\n        \"icons_shape\": \"none\",\n        \"slideshow_controls_style\": \"none\"\n      }\n    }\n  ]\n}\n{% endschema %}\n"
  },
  {
    "path": "snippets/add-to-cart-button.liquid",
    "content": "{%- doc -%}\n  Renders an \"Add to cart\" button with dynamic text and state. It shows different text based on whether the product can be added to the cart and provides visual feedback when an item is added.\n\n  @param {boolean} can_add_to_cart - Whether the product can be added to the cart.\n  @param {string} add_to_cart_text - The text to display on the button.\n  @param {object} product - The product object to be added to the cart.\n  @param {boolean} [icon_only_on_mobile] - If `true`, only the icon is shown on mobile devices.\n  @param {string} [class] - Additional CSS classes to apply to the button.\n  @param {string} [id] - The ID attribute for the button.\n  @param {string} [data_testid] - The data-testid attribute for testing.\n{%- enddoc -%}\n\n{%- liquid\n  assign default_add_to_cart_text = 'actions.add_to_cart' | t\n  assign product_variant_media = product.selected_or_first_available_variant.featured_media.preview_image | image_url: width: 100\n  if product.selected_or_first_available_variant.featured_media.preview_image == blank\n    assign product_variant_media = product.featured_media.preview_image | image_url: width: 100\n  endif\n-%}\n\n<add-to-cart-component\n  ref=\"addToCartButtonContainer\"\n  data-product-variant-media=\"{{ product_variant_media }}\"\n  data-add-to-cart-animation=\"{{ settings.add_to_cart_animation }}\"\n>\n  <button\n    {% if id != blank %}\n      id=\"{{ id }}\"\n    {% endif %}\n    type=\"submit\"\n    name=\"add\"\n    ref=\"addToCartButton\"\n    on:click=\"/handleClick\"\n    class=\"button {{ class }}\"\n    {% if data_testid %}\n      data-testid=\"{{ data_testid }}\"\n    {% endif %}\n    {% unless can_add_to_cart %}\n      disabled\n    {% endunless %}\n  >\n    <span\n      class=\"add-to-cart-text\"\n    >\n      {% if can_add_to_cart %}\n        <span\n          aria-hidden=\"true\"\n          class=\"svg-wrapper add-to-cart-icon\"\n        >\n          {{- 'icon-add-to-cart.svg' | inline_asset_content -}}\n        </span>\n      {% endif %}\n      <span class=\"add-to-cart-text__content{% if icon_only_on_mobile %} is-visually-hidden-mobile{% endif %}\">\n        <span>\n          <span>\n            {{- add_to_cart_text | default: default_add_to_cart_text -}}\n          </span>\n        </span>\n      </span>\n    </span>\n    {% comment %} checkmark burst markup {% endcomment %}\n    <span class=\"add-to-cart__added\">\n      <span class=\"svg-wrapper add-to-cart__added-icon\">\n        {{- 'icon-checkmark-burst.svg' | inline_asset_content -}}\n      </span>\n    </span>\n  </button>\n</add-to-cart-component>\n"
  },
  {
    "path": "snippets/background-media.liquid",
    "content": "{%- doc -%}\n  Renders a background media\n\n  @param {string} [background_media] - The background media\n  @param {object} [background_video] - The background video\n  @param {string} [background_video_position] - The background video position\n  @param {object} [background_image] - The background image\n  @param {string} [background_image_position] - The background image position\n  @param {string} [placeholder] - The placeholder\n  @param {object} [block] - The block object\n  @param {object} [section] - The section object\n\n  @example\n  {% render 'background-media', background_media: background_media, background_video: background_video, background_video_position: background_video_position, background_image: background_image, background_image_position: background_image_position, placeholder: placeholder %}\n{%- enddoc -%}\n\n{% if background_media == 'video' %}\n  {% liquid\n    assign video_classes = 'video-background video-background--' | append: background_video_position\n  %}\n  {%- if background_video != blank -%}\n    <video-background-component\n      class=\"{{ video_classes }}\"\n    >\n      {% liquid\n        assign media_width_desktop = 100 | append: 'vw'\n        assign media_width_mobile = '100vw'\n        assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n        assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n      %}\n      {{\n        background_video.preview_image\n        | image_url: width: 3840\n        | image_tag: width: 1100, widths: widths, sizes: sizes\n      }}\n      <video\n        playsinline\n        muted\n        autoplay\n        loop\n        ref=\"videoElement\"\n      >\n        {%- for sourceElement in background_video.sources -%}\n          <source\n            data-video-source=\"{{ sourceElement.url }}\"\n            type=\"{{ sourceElement.mime_type }}\"\n            ref=\"videoSources[]\"\n          >\n        {%- endfor -%}\n      </video>\n    </video-background-component>\n  {%- else -%}\n    <div class=\"{{ video_classes }}\">\n      {%- assign placeholder_name = placeholder | default: 'hero-apparel-2' -%}\n      {%- if placeholder_name == blank -%}\n        {%- assign placeholder_name = 'hero-apparel-2' -%}\n      {%- endif -%}\n      {{ placeholder_name | placeholder_svg_tag }}\n    </div>\n  {%- endif -%}\n{% elsif background_media == 'image' %}\n  <div\n    class=\"background-image-container{% if background_image_position == 'fit' %} background-image-fit{% endif %}\"\n  >\n    {% liquid\n      # Define sizes based on page width setting whether this is called from a section or block\n\n      if block.settings\n        if section.settings.section_width == 'full-width'\n          assign sizes = '100vw'\n        else\n          case settings.page_width\n            when 'narrow'\n              # Narrow: max 90rem (1440px)\n              assign sizes = '(min-width: 1440px) 1440px, 100vw'\n            when 'normal'\n              # Normal: max 120rem (1920px)\n              assign sizes = '(min-width: 1920px) 1920px, 100vw'\n            when 'wide'\n              # Wide: max 150rem (2400px)\n              assign sizes = '(min-width: 2400px) 2400px, 100vw'\n            else\n              # Fallback to full width\n              assign sizes = '100vw'\n          endcase\n        endif\n      else\n        assign sizes = '100vw'\n      endif\n\n      assign widths = '832, 1200, 1600, 1920, 2560, 3840'\n    %}\n\n    {%- if background_image != blank -%}\n      {% liquid\n        assign fetch_priority = 'auto'\n        assign loading = 'lazy'\n        if section and section.index == 1\n          assign fetch_priority = 'high'\n        endif\n\n        if section and section.index <= 3\n          assign loading = 'eager'\n        endif\n      %}\n      {{\n        background_image\n        | image_url: width: 3840\n        | image_tag: sizes: sizes, widths: widths, loading: loading, fetchpriority: fetch_priority\n      }}\n    {%- else -%}\n      {%- assign placeholder_name = placeholder | default: 'hero-apparel-2' -%}\n      {%- if placeholder_name == blank -%}\n        {%- assign placeholder_name = 'hero-apparel-2' -%}\n      {%- endif -%}\n      {{ placeholder_name | placeholder_svg_tag }}\n    {%- endif -%}\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  @media (prefers-reduced-motion: reduce) {\n    video-background-component video {\n      display: none;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/bento-grid.liquid",
    "content": "{%- doc -%}\n  Takes an array of HTML strings and positions them in a bento box grid layout.\n  Bento boxes can hold up to 12 items; when more items are provided, a new box is created to maintain the layout structure.\n\n  @param {string[]} items - An array of HTML strings, where each string is a collection list item.\n{%- enddoc -%}\n\n{% liquid\n  assign odd_item_check = items.size | modulo: 12\n  if odd_item_check == 1\n    assign first_box_size = 11\n  else\n    assign first_box_size = 12\n  endif\n%}\n\n{% for item in items %}\n  {% liquid\n    if first_box_size == 11\n      assign item_modulo = forloop.index | modulo: 11\n      if forloop.index == 12\n        # Close the box and for a new one to start\n        assign item_modulo = forloop.index | modulo: 12\n        assign item_modulo = 1\n      endif\n    else\n      assign item_modulo = forloop.index | modulo: 12\n    endif\n\n    # Calculate items in current box when starting a new box\n    if forloop.first or item_modulo == 1\n      assign remaining_items = items.size | minus: forloop.index0\n      if remaining_items >= first_box_size\n        assign box_item_count = first_box_size\n      else\n        assign box_item_count = remaining_items\n      endif\n    endif\n  %}\n\n  {% # theme-check-disable UnclosedHTMLElement %}\n  {% if forloop.first or item_modulo == 1 %}\n    <div\n      class=\"bento-box bento-box--items-{{ box_item_count }}\"\n      data-testid=\"bento-box\"\n    >\n  {% endif %}\n  {% # theme-check-disable UnclosedHTMLElement %}\n\n  <div class=\"bento-box__item\">\n    {{ item }}\n  </div>\n\n  {% if forloop.last or item_modulo == 0 %}\n    </div>\n  {% endif %}\n{% endfor %}\n\n{% stylesheet %}\n  .bento-box {\n    display: grid;\n    column-gap: var(--bento-gap);\n    row-gap: calc(var(--bento-gap) * 1.5);\n    width: 100%;\n  }\n\n  .bento-box:has(.collection-card--image-bg) {\n    row-gap: var(--bento-gap);\n  }\n\n  .bento-box ~ .bento-box {\n    padding-block-start: var(--bento-gap);\n  }\n\n  @media screen and (max-width: 900px) {\n    .bento-box {\n      grid-template-columns: repeat(2, 1fr);\n    }\n\n    .bento-box__item {\n      /* Prevent grid items from overflowing their cells when children have aspect-ratio */\n      min-width: 0;\n      overflow: hidden;\n    }\n\n    .bento-box__item:nth-child(3n + 1) {\n      grid-column: span 1;\n    }\n\n    .bento-box__item:nth-child(3n + 2) {\n      grid-column: span 1;\n    }\n\n    .bento-box__item:nth-child(3n + 3) {\n      grid-column: span 2;\n    }\n\n    /* Ensure last items create a full row */\n    .bento-box__item:last-child:nth-child(3n + 5) {\n      grid-column: span 1;\n    }\n\n    .bento-box__item:last-child:nth-child(3n + 4) {\n      grid-column: span 2;\n    }\n  }\n\n  @media screen and (min-width: 901px) {\n    .bento-box {\n      grid-template-columns: repeat(12, 1fr);\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D E E E F F F'\n        'G G G H H H I I I I I I'\n        'J J J J K K K K L L L L';\n    }\n\n    .bento-box__item:nth-child(1) {\n      grid-area: A;\n    }\n\n    .bento-box__item:nth-child(2) {\n      grid-area: B;\n    }\n\n    .bento-box__item:nth-child(3) {\n      grid-area: C;\n    }\n\n    .bento-box__item:nth-child(4) {\n      grid-area: D;\n    }\n\n    .bento-box__item:nth-child(5) {\n      grid-area: E;\n    }\n\n    .bento-box__item:nth-child(6) {\n      grid-area: F;\n    }\n\n    .bento-box__item:nth-child(7) {\n      grid-area: G;\n    }\n\n    .bento-box__item:nth-child(8) {\n      grid-area: H;\n    }\n\n    .bento-box__item:nth-child(9) {\n      grid-area: I;\n    }\n\n    .bento-box__item:nth-child(10) {\n      grid-area: J;\n    }\n\n    .bento-box__item:nth-child(11) {\n      grid-area: K;\n    }\n\n    .bento-box__item:nth-child(12) {\n      grid-area: L;\n    }\n\n    /* === Overrides for specific item counts === */\n\n    /* Exactly 1 item */\n    .bento-box--items-1 {\n      grid-template-areas: 'A A A A A A A A A A A A';\n    }\n\n    /* Exactly 2 items */\n    .bento-box--items-2 {\n      grid-template-areas: 'A A A A A A B B B B B B';\n    }\n\n    /* Exactly 4 items */\n    .bento-box--items-4 {\n      grid-template-areas:\n        'A A A A B B B B B B B B'\n        'C C C C C C C C D D D D';\n    }\n\n    /* Exactly 5 items */\n    .bento-box--items-5 {\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D E E E E E E';\n    }\n\n    /* Exactly 7 items */\n    .bento-box--items-7 {\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D D D D E E E'\n        'F F F F F F G G G G G G';\n    }\n\n    /* Exactly 8 items */\n    .bento-box--items-8 {\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D E E E F F F'\n        'G G G H H H H H H H H H';\n    }\n\n    /* Exactly 10 items */\n    .bento-box--items-10 {\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D E E E F F F'\n        'G G G G G G G G G H H H'\n        'I I I J J J J J J J J J';\n    }\n\n    /* Exactly 11 items */\n    .bento-box--items-11 {\n      grid-template-areas:\n        'A A A B B B B B B C C C'\n        'D D D D D D E E E F F F'\n        'G G G H H H I I I I I I'\n        'J J J J K K K K K K K K';\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/blog-comment-form.liquid",
    "content": "{%- doc -%}\n  Renders a comment form for a blog post.\n\n  @param {object} [form] - The form object\n  @param {object} [article] - The article object\n  @param {string} [section_id] - The section ID\n{%- enddoc -%}\n\n{% form 'new_comment', article %}\n  <div class=\"blog-post-comments__form-container\">\n    <h2 class=\"h3\">{{- 'blogs.comment_form.heading' | t -}}</h2>\n\n    {%- if form.errors -%}\n      <p\n        class=\"blog-post-comments__form-message\"\n        role=\"alert\"\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n\n        {{- 'blogs.comment_form.error' | t -}}\n      </p>\n\n      <ul class=\"\">\n        {%- for field in form.errors -%}\n          <li>\n            {%- if form.errors.translated_fields[field] contains 'author' -%}\n              <span id=\"blog-post-comment-author-error\">\n                {{- 'blogs.comment_form.name' | t -}}\n              </span>\n            {%- elsif form.errors.translated_fields[field] contains 'body' -%}\n              <span id=\"blog-post-comment-body-error\">\n                {{- 'blogs.comment_form.message' | t -}}\n              </span>\n            {%- else -%}\n              <span id=\"{{ form.errors.translated_fields[field] | handleize }}-error\">\n                {{- form.errors.translated_fields[field] | capitalize -}}\n              </span>\n            {%- endif -%}\n            {{ form.errors.messages[field] }}\n          </li>\n        {%- endfor -%}\n      </ul>\n    {%- elsif form.posted_successfully? -%}\n      <p\n        class=\"blog-post-comments__form-message\"\n        role=\"alert\"\n      >\n        {{- 'icon-checkmark.svg' | inline_asset_content -}}\n\n        {%- liquid\n          assign post_message = 'blogs.comment_form.success'\n          if blog.moderated? and comment.status == 'unapproved'\n            assign post_message = 'blogs.comment_form.success_moderated'\n          endif\n        -%}\n\n        {{ post_message | t }}\n      </p>\n    {%- endif -%}\n\n    <div class=\"blog-post-comments__form\">\n      <div class=\"field\">\n        <label\n          class=\"visually-hidden\"\n          for=\"{{ section_id }}-blog-post-comment-author\"\n        >\n          {{ 'blogs.comment_form.name' | t }}\n        </label>\n\n        <input\n          type=\"text\"\n          name=\"comment[author]\"\n          id=\"{{ section_id }}-blog-post-comment-author\"\n          class=\"blog-post-comments__form-input field__input\"\n          autocomplete=\"name\"\n          value=\"{{- form.author -}}\"\n          aria-required=\"true\"\n          placeholder=\"{{ 'blogs.comment_form.name' | t }}\"\n          required\n          {% if form.errors contains 'author' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"blog-post-comment-author-error\"\n          {% endif %}\n        >\n      </div>\n\n      <div class=\"field\">\n        <label\n          class=\"visually-hidden\"\n          for=\"{{ section_id }}-blog-post-comment-email\"\n        >\n          {{ 'blogs.comment_form.email' | t }}\n        </label>\n\n        <input\n          type=\"email\"\n          name=\"comment[email]\"\n          id=\"{{ section_id }}-blog-post-comment-email\"\n          autocomplete=\"email\"\n          class=\"blog-post-comments__form-input field__input\"\n          value=\"{{ form.email }}\"\n          autocorrect=\"off\"\n          autocapitalize=\"off\"\n          aria-required=\"true\"\n          placeholder=\"{{ 'blogs.comment_form.email' | t }}\"\n          required\n          {% if form.errors contains 'email' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"blog-post-comment-email-error\"\n          {% endif %}\n        >\n      </div>\n\n      <div class=\"field blog-post-comments__form-body\">\n        <label\n          class=\"visually-hidden\"\n          for=\"{{ section_id }}-blog-post-comment-body\"\n        >\n          {{ 'blogs.comment_form.message' | t }}\n        </label>\n\n        <textarea\n          rows=\"5\"\n          name=\"comment[body]\"\n          id=\"{{ section_id }}-blog-post-comment-body\"\n          class=\"blog-post-comments__form-input blog-post-comments__form-input--textarea field__input\"\n          aria-required=\"true\"\n          placeholder=\"{{ 'blogs.comment_form.message' | t }}\"\n          required\n          {% if form.errors contains 'body' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"blog-post-comment-body-error\"\n          {% endif %}\n        >\n          {{- form.body -}}\n        </textarea>\n      </div>\n    </div>\n\n    {% if blog.moderated? %}\n      <p class=\"blog-post-comments__form-moderated\">\n        {{- 'blogs.comment_form.moderated' | t -}}\n      </p>\n    {% endif %}\n\n    <button\n      class=\"button blog-post-comments__form-submit\"\n      type=\"submit\"\n    >\n      {{ 'blogs.comment_form.post' | t }}\n    </button>\n  </div>\n{% endform %}\n\n{% stylesheet %}\n  .blog-post-comments__form-container {\n    --comment-form-gap: var(--gap-md);\n\n    width: 100%;\n    max-width: var(--normal-content-width);\n    margin: var(--margin-4xl) auto 0;\n  }\n\n  .blog-post-comments__form {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: var(--comment-form-gap);\n\n    @media screen and (min-width: 750px) {\n      grid-template-columns: 1fr 1fr;\n    }\n  }\n\n  .blog-post-comments__form-input {\n    padding: var(--padding-lg) var(--padding-xl);\n    border: var(--style-border-width-inputs) solid var(--color-input-border);\n  }\n\n  .blog-post-comments__form-input--textarea {\n    resize: vertical;\n    min-height: var(--input-textarea-min-height);\n  }\n\n  .blog-post-comments__form-message {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n  }\n\n  .blog-post-comments__form-body {\n    grid-column: 1 / -1;\n  }\n\n  .blog-post-comments__form-input:focus-visible {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .blog-post-comments__form-moderated {\n    font-size: var(--font-size--xs);\n  }\n\n  .blog-post-comments__form-submit {\n    margin-block-start: var(--comment-form-gap);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/border-override.liquid",
    "content": "{%- comment -%}\n  Renders border override CSS\n{%- endcomment -%}\n\n--border-width: {{ settings.border_width }}px; --border-style: {{ settings.border }}; --border-color:\nrgb(var(--color-border-rgb) / {{ settings.border_opacity | divided_by: 100.0 }}); --border-radius:\n{{ settings.border_radius }}px; {% if settings.border_radius > 0 %} overflow: hidden; {% endif %}\n"
  },
  {
    "path": "snippets/button.liquid",
    "content": "{%- doc -%}\n  Intended for use in a block similar to the button block.\n\n  @param {string} link - link to render\n  @param {object} [block] - The block\n\n  @example\n  {% render 'button', link: '/collections/all' %}\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n\n<a\n  {% if link == blank %}\n    role=\"link\"\n    aria-disabled=\"true\"\n  {% else %}\n    href=\"{{ link }}\"\n  {% endif %}\n  class=\"\n    size-style\n    {{ block_settings.style_class }}\n    {{ block_settings.style_class }}--{{ block.id }}\n  \"\n  style=\"{% render 'size-style', settings: block_settings %}\"\n  {%- if block_settings.open_in_new_tab -%}\n    target=\"_blank\"\n    rel=\"noopener noreferrer\"\n  {%- endif -%}\n  {{ block.shopify_attributes }}\n>\n  {{ block_settings.label }}\n</a>\n\n{% stylesheet %}\n  .link {\n    text-decoration: none;\n    text-decoration-color: currentcolor;\n\n    &:hover {\n      color: var(--color-primary-hover);\n      text-decoration-color: transparent;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/card-gallery.liquid",
    "content": "{%- doc -%}\n  Displays product images in a carousel.\n  Settings allow for a full slideshow, showing only the first image, or showing the second image when hovering.\n  Note: When the product card itself is in a carousel layout, the card-gallery's carousel is disabled with JavaScript.\n\n  @param [children] - Additional content rendered below the card gallery\n  @param [section] - The section object the snippet is rendered in\n  @param [block] - The block object the snippet is rendered in\n{%- enddoc -%}\n\n{% liquid\n  assign product = closest.product\n  assign block_settings = block.settings\n  assign image_sizes = '(min-width: 750px) 50vw, 100vw'\n\n  # Check if product has badges and determine position\n  assign has_badges = false\n  assign badge_position = null\n  if product != blank\n    if product.available == false or product.compare_at_price > product.price\n      assign has_badges = true\n      assign badge_position = settings.badge_position\n    endif\n  endif\n\n  # if the card-gallery has a section.settings.product_card_size:\n  # assume grid-template autofill(card-size, 1fr) and calculate the sizes attribute based on the minimum card size\n  #\n  # if section has section.settings.columns:\n  # assume grid-template repeat(column-count, 1fr) and calculate the sizes attribute based on the number of columns\n  if section.settings.product_card_size\n    capture card_size\n      render 'util-product-grid-card-size', section: section\n    endcapture\n    assign card_size = card_size | strip | replace: 'px', '' | plus: 0\n    capture sizes_attribute\n      render 'util-autofill-img-size-attr', card_size: card_size, card_gap: section.settings.columns_gap_horizontal\n    endcapture\n    assign image_sizes = sizes_attribute | strip\n  elsif section.settings.columns and section.settings.layout_type != 'editorial'\n    assign viewport_width = 100.0 | divided_by: section.settings.columns\n    assign sizes_attribute = '(min-width: 750px) [viewport_width]vw, 100vw' | replace: '[viewport_width]', viewport_width\n    assign image_sizes = sizes_attribute | strip\n  endif\n\n  assign ratio = '1'\n  case block_settings.image_ratio\n    when 'landscape'\n      assign ratio = '16 / 9'\n    when 'portrait'\n      assign ratio = '4 / 5'\n    when 'square'\n      assign ratio = '1'\n    when 'adapt'\n      assign ratio = product.featured_media.preview_image.aspect_ratio | default: '1'\n  endcase\n\n  if block_settings.image_ratio == 'adapt' and block_settings.constrain_to_viewport\n    if block_settings.constrain_to_viewport != ''\n      assign constrain_to_viewport = true\n      assign media_fit = block_settings.constrain_to_viewport\n    endif\n  endif\n%}\n\n<div\n  ref=\"cardGallery\"\n  class=\"card-gallery card-gallery-{{ block.id }} spacing-style border-style{% if has_badges %} card-gallery--badge-{{ badge_position }}{% endif %}\"\n  style=\"\n    {% render 'border-override', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n    --gallery-aspect-ratio: {{ ratio }};\n  \"\n  data-product-id=\"{{ product.id }}\"\n  {% if settings.show_second_image_on_hover %}\n    on:pointerenter=\"/previewImage\"\n    on:pointerleave=\"/resetImage\"\n  {% endif %}\n  {% if settings.transition_to_main_product %}\n    data-view-transition-to-main-product\n  {% endif %}\n  data-image-ratio=\"{{ block_settings.image_ratio }}\"\n  {{ block.shopify_attributes }}\n>\n  {%- if product.media.size > 0 -%}\n    {% liquid\n      # Check if there are generic media that are not variant images\n      assign variant_images = product.images | where: 'attached_to_variant?', true | map: 'src'\n      assign generic_media_size = product.media.size | minus: variant_images.size\n\n      # Sort media so product.featured_media.preview_image comes first as that is the most relevant image to display\n      # product.featured_media updates based on search context and filters applied\n\n      assign other_media = product.media | reject: 'src', product.featured_media\n      assign media_list_to_show = product.featured_media | concat: other_media\n\n      if product.media.size > 2 and generic_media_size > 0\n        assign show_arrows = true\n      endif\n\n      # Don't overfetch media if we don't need to\n      assign max_visible_slide_count = 1\n      if settings.product_card_carousel\n        assign max_visible_slide_count = 5\n      elsif settings.show_second_image_on_hover\n        assign max_visible_slide_count = 2\n      endif\n\n      capture slides\n        for media in media_list_to_show\n          assign loading = 'lazy'\n          assign sizes = 'auto, ' | append: image_sizes\n\n          assign hidden = false\n          assign attributes = ''\n          if variant_images contains media.src\n            assign attributes = 'variant-image'\n\n            if forloop.first == false\n              # hide all variant images that aren't the first one\n              assign hidden = true\n            endif\n          endif\n\n          # Performance improvement: don't render more than 5 visible images into the slideshow\n          # We'll keep the images that we need for the variant images and hover next.\n          if forloop.first\n            assign visible_slide_count = 0\n          endif\n          unless hidden\n            assign visible_slide_count = visible_slide_count | plus: 1\n          endunless\n          if hidden == false and visible_slide_count > max_visible_slide_count\n            continue\n          endif\n\n          if forloop.first and section.index == null or section.index < 5\n            assign loading = 'eager'\n            assign sizes = image_sizes\n          endif\n\n          assign class = 'product-media-container media-fit product-media-container--[media_type]' | replace: '[media_type]', media.media_type\n          if constrain_to_viewport\n            assign class = class | append: ' constrain-height'\n          endif\n\n          capture slideshow_children\n            render 'product-media', media: media, sizes: sizes, loading: loading, preview_image_only: true\n          endcapture\n\n          render 'slideshow-slide', slide_id: media.id, index: forloop.index0, hidden: hidden, class: class, attributes: attributes, children: slideshow_children, media_fit: media_fit\n        endfor\n      endcapture\n\n      assign slideshow_attributes = 'data-generic-media-size=\"[generic_media_size]\"' | replace: '[generic_media_size]', generic_media_size\n      if settings.product_card_carousel == false\n        assign slideshow_attributes = slideshow_attributes | append: ' disabled=\"true\"'\n      endif\n    %}\n    <a\n      class=\"contents\"\n      ref=\"cardGalleryLink\"\n      href=\"{{ product.selected_or_first_available_variant.url }}\"\n      aria-label=\"{{- product.title -}}\"\n    >\n      {% render 'slideshow',\n        ref: 'slideshow',\n        initial_slide: 0,\n        slides: slides,\n        slide_count: media_list_to_show.size,\n        show_arrows: show_arrows,\n        attributes: slideshow_attributes\n      %}\n    </a>\n  {% elsif product != blank and product.media.size == 0 %}\n    <product-title class=\"product-card-gallery__title-placeholder\">\n      <a\n        class=\"contents\"\n        ref=\"productTitleLink\"\n        href=\"{{ product.selected_or_first_available_variant.url }}\"\n        aria-hidden=\"true\"\n      >\n        <span class=\"title-text\">{{- product.title -}}</span>\n      </a>\n    </product-title>\n  {% elsif product == blank %}\n    {% liquid\n      capture placeholder_image\n        # Extract index from block ID (e.g., \"product-card-3\" -> \"3\")\n        assign block_parts = block.id | split: '-'\n        assign placeholder_index = block_parts.last | default: 0\n        assign variant = placeholder_index | modulo: 3 | plus: 1\n        assign placeholder_name = 'product-apparel-' | append: variant\n        echo placeholder_name | placeholder_svg_tag\n      endcapture\n      capture placeholder_slide\n        render 'slideshow-slide', index: 1, children: placeholder_image, class: 'product-media-container card-gallery__placeholder'\n      endcapture\n      render 'slideshow', ref: 'slideshow', slides: placeholder_slide, slide_count: 1, attributes: 'disabled=\"true\"'\n    %}\n  {%- endif -%}\n  {{ children }}\n</div>\n\n{% stylesheet %}\n  .card-gallery {\n    overflow: hidden;\n    container-type: inline-size; /* Make card-gallery a container */\n    container-name: card-gallery-container; /* Optional: name the container */\n  }\n\n  .card-gallery__placeholder svg {\n    height: 100%;\n    width: 100%;\n  }\n\n  .card-gallery svg {\n    aspect-ratio: var(--gallery-aspect-ratio, var(--ratio));\n  }\n\n  .product-card-gallery__title-placeholder {\n    padding: var(--padding-md);\n    font-size: var(--font-size--2xl);\n    line-height: var(--line-height--display-loose);\n    word-break: break-word;\n    color: var(--color-foreground);\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n    aspect-ratio: var(--gallery-aspect-ratio);\n    border-radius: var(--product-corner-radius);\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .product-card-gallery__title-placeholder a {\n    color: var(--color-foreground);\n  }\n\n  @media screen and (min-width: 750px) {\n    .product-grid[data-product-card-size='extra-large'] .product-card-gallery__title-placeholder {\n      padding: var(--padding-3xl);\n      font-size: var(--font-size--3xl);\n    }\n\n    .product-grid[data-product-card-size='large'] .product-card-gallery__title-placeholder {\n      padding: var(--padding-2xl);\n      font-size: var(--font-size--2xl);\n    }\n\n    .product-grid[data-product-card-size='medium'] .product-card-gallery__title-placeholder {\n      padding: var(--padding-xl);\n      font-size: var(--font-size--xl);\n    }\n\n    .product-grid[data-product-card-size='small'] .product-card-gallery__title-placeholder {\n      padding: var(--padding-sm);\n      font-size: var(--font-size--lg);\n    }\n\n    .product-grid[data-product-card-size='extra-large']\n      .card-gallery.card-gallery--badge-top-right\n      .product-card-gallery__title-placeholder {\n      padding-right: calc(var(--padding-3xl) + 50px);\n    }\n\n    .product-grid[data-product-card-size='large']\n      .card-gallery.card-gallery--badge-top-right\n      .product-card-gallery__title-placeholder {\n      padding-right: calc(var(--padding-2xl) + 50px);\n    }\n\n    .product-grid[data-product-card-size='medium']\n      .card-gallery.card-gallery--badge-top-right\n      .product-card-gallery__title-placeholder {\n      padding-right: calc(var(--padding-xl) + 50px);\n    }\n\n    .product-grid[data-product-card-size='small']\n      .card-gallery.card-gallery--badge-top-right\n      .product-card-gallery__title-placeholder {\n      padding-right: calc(var(--padding-sm) + 50px);\n    }\n\n    .product-grid[data-product-card-size='extra-large']\n      .card-gallery.card-gallery--badge-top-left\n      .product-card-gallery__title-placeholder {\n      padding-top: calc(var(--padding-3xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='large']\n      .card-gallery.card-gallery--badge-top-left\n      .product-card-gallery__title-placeholder {\n      padding-top: calc(var(--padding-2xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='medium']\n      .card-gallery.card-gallery--badge-top-left\n      .product-card-gallery__title-placeholder {\n      padding-top: calc(var(--padding-xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='small']\n      .card-gallery.card-gallery--badge-top-left\n      .product-card-gallery__title-placeholder {\n      padding-top: calc(var(--padding-sm) + 40px);\n    }\n\n    .product-grid[data-product-card-size='extra-large']\n      .card-gallery.card-gallery--badge-bottom-left\n      .product-card-gallery__title-placeholder {\n      padding-bottom: calc(var(--padding-3xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='large']\n      .card-gallery.card-gallery--badge-bottom-left\n      .product-card-gallery__title-placeholder {\n      padding-bottom: calc(var(--padding-2xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='medium']\n      .card-gallery.card-gallery--badge-bottom-left\n      .product-card-gallery__title-placeholder {\n      padding-bottom: calc(var(--padding-xl) + 40px);\n    }\n\n    .product-grid[data-product-card-size='small']\n      .card-gallery.card-gallery--badge-bottom-left\n      .product-card-gallery__title-placeholder {\n      padding-bottom: calc(var(--padding-sm) + 40px);\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .product-card-gallery__title-placeholder {\n      font-size: var(--font-size--xl);\n      padding: var(--padding-md);\n    }\n\n    .product-grid[data-product-card-size]\n      .card-gallery.card-gallery--badge-top-right\n      .product-card-gallery__title-placeholder {\n      padding-right: calc(var(--padding-sm) + 50px);\n    }\n\n    .product-grid[data-product-card-size]\n      .card-gallery.card-gallery--badge-top-left\n      .product-card-gallery__title-placeholder {\n      padding-top: calc(var(--padding-sm) + 40px);\n    }\n\n    .product-grid[data-product-card-size]\n      .card-gallery.card-gallery--badge-bottom-left\n      .product-card-gallery__title-placeholder {\n      padding-bottom: calc(var(--padding-sm) + 40px);\n    }\n  }\n\n  [product-grid-view='zoom-out'] .card-gallery .product-card-gallery__title-placeholder {\n    /* stylelint-disable-next-line declaration-no-important */\n    padding: var(--padding-xs) !important;\n    font-size: var(--font-size--xs);\n  }\n\n  [product-grid-view='zoom-out'] .card-gallery .slideshow-control {\n    min-width: auto;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/cart-bubble.liquid",
    "content": "{%- doc -%}\n  @param [limit] - {number}\n  @param [live_region] - {boolean}\n\n  The maximum number of items in the cart to display. If the number of items in the cart is greater than this limit, the\n  count will be displayed as \"99+\".\n{%- enddoc -%}\n\n<div\n  ref=\"cartBubble\"\n  class=\"cart-bubble{% if cart == empty %} visually-hidden{% endif %}\"\n  {% assign item_count = cart.item_count %}\n  {% if item_count <= 99 %}\n    data-maintain-ratio\n  {% endif %}\n>\n  <span class=\"cart-bubble__background\"></span>\n  <span\n    ref=\"cartBubbleText\"\n    id=\"cart-bubble-text\"\n    class=\"cart-bubble__text\"\n    {% if live_region %}\n      role=\"status\"\n    {% endif %}\n  >\n    <span class=\"visually-hidden\">\n      {{- 'accessibility.cart_count' | t -}}\n      : {{ cart.item_count }}\n    </span>\n    <span\n      class=\"cart-bubble__text-count{% if cart == empty %} hidden{% endif %}\"\n      ref=\"cartBubbleCount\"\n      aria-hidden=\"true\"\n      data-testid=\"cart-bubble\"\n    >\n      {%- if limit == blank or cart.item_count < limit %}\n        {{- cart.item_count -}}\n      {%- endif -%}\n    </span>\n  </span>\n</div>\n"
  },
  {
    "path": "snippets/cart-products.liquid",
    "content": "{% doc %}\n  Cart Products\n\n  Renders the cart products list or empty cart state.\n\n  @param {boolean} [force_empty] - Force render empty cart state\n\n  @example\n  {% render 'cart-products', force_empty: true %}\n{% enddoc %}\n\n{% liquid\n  assign block_settings = block.settings\n%}\n\n<script\n  src=\"{{ 'component-cart-items.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'component-cart-quantity-selector.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'volume-pricing-info.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<div\n  {{ block.shopify_attributes }}\n  class=\"cart-items__wrapper\"\n  {% if settings.product_title_case == 'uppercase' %}\n    style=\"--product-title-case: uppercase;\"\n  {% endif %}\n>\n  {% if cart.empty? or force_empty %}\n    {%- if shop.customer_accounts_enabled and customer == null -%}\n      <p>\n        {{ 'actions.log_in_html' | t: link: routes.account_login_url }}\n      </p>\n    {%- endif -%}\n\n    <a\n      class=\"button cart-items__empty-button\"\n      href=\"{{ settings.empty_cart_button_link | default: routes.all_products_collection_url }}\"\n    >\n      <span class=\"button-text\">\n        {{ 'actions.continue_shopping' | t }}\n      </span>\n    </a>\n  {%- else -%}\n    <span\n      class=\"visually-hidden\"\n      ref=\"cartItemCount\"\n      aria-hidden=\"true\"\n    >\n      {{- cart.item_count -}}\n    </span>\n    <form\n      action=\"{{ routes.cart_url }}\"\n      class=\"cart-form\"\n      id=\"cart-form\"\n      method=\"post\"\n    >\n      <div\n        class=\"cart-items spacing-style{% if block_settings.dividers %} cart-items--dividers{% endif %}\"\n        style=\"{%  render 'spacing-style', settings: block_settings %} --cart-items-gap:{{ block_settings.gap | append: \"px\" }};\"\n      >\n        <table\n          class=\"cart-items__table\"\n          role=\"table\"\n        >\n          <caption\n            class=\"visually-hidden\"\n            role=\"caption\"\n          >\n            {{ 'content.cart_total' | t }}\n            <span>{{ cart.total_price | money_with_currency }}</span>\n          </caption>\n\n          <thead\n            class=\"visually-hidden\"\n            role=\"rowgroup\"\n          >\n            <tr\n              role=\"row\"\n              class=\"cart-items__table-row\"\n            >\n              <th\n                id=\"productImage\"\n                scope=\"col\"\n                role=\"columnheader\"\n              >\n                {{ 'content.product_image' | t }}\n              </th>\n              <th\n                id=\"productInformation\"\n                scope=\"col\"\n                role=\"columnheader\"\n              >\n                {{ 'content.product_information' | t }}\n              </th>\n              <th\n                id=\"quantity\"\n                scope=\"col\"\n                role=\"columnheader\"\n              >\n                {{ 'content.quantity' | t }}\n              </th>\n              <th\n                id=\"productTotal\"\n                scope=\"col\"\n                role=\"columnheader\"\n              >\n                {{ 'content.product_total' | t }}\n              </th>\n            </tr>\n          </thead>\n\n          <tbody role=\"rowgroup\">\n            {% for item in cart.items %}\n              <tr\n                role=\"row\"\n                class=\"cart-items__table-row{% if item.parent_relationship.parent != null %} cart-items__nested-line{% endif %}{% unless item.unit_price_measurement %} cart-items__table-row--full-width-variants{% endunless %}\"\n                ref=\"cartItemRows[]\"\n                data-parent-key=\"{{ item.parent_relationship.parent.key }}\"\n                data-key=\"{{ item.key }}\"\n              >\n                <td\n                  class=\"cart-items__media\"\n                  role=\"cell\"\n                  headers=\"productImage\"\n                >\n                  {% if item.image -%}\n                    {% liquid\n                      assign ratio = 1\n                      assign border_opacity = settings.cart_thumbnail_border_opacity | divided_by: 100.0\n                      assign border_override = '--border-width: [cart_thumbnail_border_width]px; --border-style: [cart_thumbnail_border_style]; --border-color: rgb(var(--color-border-rgb) / [cart_thumbnail_border_opacity]); --border-radius: [cart_thumbnail_border_radius]px;' | replace: '[cart_thumbnail_border_width]', settings.cart_thumbnail_border_width | replace: '[cart_thumbnail_border_style]', settings.cart_thumbnail_border | replace: '[cart_thumbnail_border_opacity]', border_opacity | replace: '[cart_thumbnail_border_radius]', settings.cart_thumbnail_border_radius\n\n                      if settings.cart_thumbnail_border_radius > 0\n                        assign border_override = border_override | append: ' overflow: hidden;'\n                      endif\n                      if block_settings.image_ratio == 'portrait'\n                        assign ratio = 0.8\n                      elsif block_settings.image_ratio == 'adapt'\n                        assign ratio = item.image.aspect_ratio\n                      endif\n                    %}\n                    <a\n                      href=\"{{ item.url }}\"\n                      class=\"cart-items__media-container\"\n                      style=\"--ratio:{{ ratio }};\"\n                    >\n                      {%- liquid\n                        echo item.image | image_url: width: 250 | image_tag: class: 'cart-items__media-image border-style', style: border_override\n                      -%}\n                    </a>\n                  {%- endif %}\n                </td>\n                <td\n                  class=\"cart-items__details cart-primary-typography\"\n                  role=\"cell\"\n                  headers=\"productInformation\"\n                >\n                  <div class=\"cart-items__product-info\">\n                    <p>\n                      <a\n                        href=\"{{ item.url }}\"\n                        class=\"cart-items__title\"\n                        {% if item.parent_relationship.parent != null %}\n                          aria-label=\"{{ 'accessibility.nested_product' | t: product_title: item.product.title, parent_title: item.parent_relationship.parent.title | escape }}\"\n                        {% endif %}\n                      >\n                        {{- item.product.title -}}\n                      </a>\n                    </p>\n                    {% if item.product.vendor and block_settings.vendor %}\n                      <p>\n                        {{ item.product.vendor }}\n                      </p>\n                    {% endif %}\n\n                    {%- if item.item_components.size != 0 -%}\n                      <ul class=\"cart-items__bundle list-unstyled\">\n                        {%- for component in item.item_components -%}\n                          <li>\n                            {{- component.title -}}\n                            {%- if component.quantity > 1 -%}\n                              <span> × {{ component.quantity }}</span>\n                            {%- endif -%}\n                          </li>\n                        {%- endfor -%}\n                      </ul>\n                    {%- endif -%}\n                  </div>\n\n                  <div class=\"cart-items__variants-wrapper\">\n                    {%- if item.product.has_only_default_variant == false\n                      or item.properties.size != 0\n                      or item.selling_plan_allocation != null\n                    -%}\n                      {%- if item.product.has_only_default_variant == false and item.item_components.size == 0 -%}\n                        <dl class=\"cart-items__variants\">\n                          {%- for option in item.options_with_values -%}\n                            <div class=\"cart-items__variant\">\n                              <dt class=\"visually-hidden\">{{ option.name }}:</dt>\n                              <dd>\n                                {{- option.value -}}\n                                {%- if forloop.last != true %},&nbsp;{% endif -%}\n                              </dd>\n                            </div>\n                          {%- endfor -%}\n                        </dl>\n                      {%- endif -%}\n\n                      {%- liquid\n                        assign has_visible_properties = false\n                        for property in item.properties\n                          assign property_first_char = property.first | slice: 0\n                          if property.last != blank and property_first_char != '_'\n                            assign has_visible_properties = true\n                            break\n                          endif\n                        endfor\n                      -%}\n                      {%- if has_visible_properties -%}\n                        <dl class=\"cart-items__properties\">\n                          {%- for property in item.properties -%}\n                            {%- assign property_first_char = property.first | slice: 0 -%}\n                            {%- if property.last != blank and property_first_char != '_' -%}\n                              <div class=\"cart-items__property\">\n                                <dt>{{ property.first }}:</dt>\n                                <dd>\n                                  {%- if property.last contains '/uploads/' -%}\n                                    <a href=\"{{ property.last }}\">{{ property.last | split: '/' | last }}</a>\n                                  {%- else -%}\n                                    {{ property.last }}\n                                  {%- endif -%}\n                                </dd>\n                              </div>\n                            {%- endif -%}\n                          {%- endfor -%}\n                        </dl>\n                      {%- endif -%}\n\n                      {%- if item.selling_plan_allocation -%}\n                        <p>{{ item.selling_plan_allocation.selling_plan.name }}</p>\n                      {%- endif -%}\n\n                      {%- if item.line_level_discount_allocations.size > 0 -%}\n                        <ul\n                          class=\"list-unstyled\"\n                          role=\"list\"\n                        >\n                          {%- for discount in item.line_level_discount_allocations -%}\n                            <li>{{ discount.discount_application.title | escape }}</li>\n                          {%- endfor -%}\n                        </ul>\n                      {%- endif -%}\n                    {%- endif -%}\n                  </div>\n\n                  <div class=\"cart-items__unit-price-wrapper\">\n                    <div>\n                      {% if item.original_price != item.final_price %}\n                        <span class=\"visually-hidden\">{{ 'content.price_sale' | t }}</span>\n                        <span>{{ item.final_price | money }}</span>\n                        <span class=\"visually-hidden\">{{ 'content.price_regular' | t }}</span>\n                        <s class=\"compare-at-price\">\n                          {% if item.variant.compare_at_price > item.original_price %}\n                            {{ item.variant.compare_at_price | money }}\n                          {% else %}\n                            {{ item.original_price | money }}\n                          {% endif %}\n                        </s>\n                      {% else %}\n                        {% if item.variant.compare_at_price > item.original_price %}\n                          <span class=\"visually-hidden\">{{ 'content.price_sale' | t }}</span>\n                        {% else %}\n                          <span class=\"visually-hidden\">{{ 'content.price' | t }}</span>\n                        {% endif %}\n\n                        <span>{{ item.original_price | money }}</span>\n\n                        {% if item.variant.compare_at_price > item.original_price %}\n                          <span class=\"visually-hidden\">{{ 'content.price_regular' | t }}</span>\n                          <s class=\"compare-at-price\">{{ item.variant.compare_at_price | money }}</s>\n                        {% endif %}\n                      {% endif %}\n                    </div>\n                  </div>\n                </td>\n                <td\n                  class=\"cart-items__quantity\"\n                  role=\"cell\"\n                  headers=\"quantity\"\n                >\n                  {% # Here I want to pass some arguments to the quantity block so it knows which value should the input be set to. Though quantity block could be a snippet instead %}\n                  {% assign can_update_quantity = item.instructions.can_update_quantity\n                    | default: true, allow_false: true\n                  %}\n                  <div class=\"cart-items__quantity-controls\">\n                    {% render 'volume-pricing-info',\n                      variant: item.variant,\n                      unique_id: item.index,\n                      quantity: item.quantity\n                    %}\n\n                    {% render 'quantity-selector',\n                      product: item.product,\n                      variant: item.variant,\n                      in_cart_quantity: item.quantity,\n                      line_index: item.index,\n                      class: 'cart-primary-typography',\n                      can_update_quantity: can_update_quantity\n                    %}\n\n                    <button\n                      class=\"button cart-items__remove\"\n                      type=\"button\"\n                      aria-label=\"{{ 'accessibility.remove_item' | t: title: item.title | escape }}\"\n                      on:click=\"/onLineItemRemove/{{ item.index | plus: 1 }}\"\n                      {% assign can_remove = item.instructions.can_remove | default: true, allow_false: true %}\n                      {% if can_remove == false %}\n                        hidden\n                      {% endif %}\n                    >\n                      {{- 'icon-delete.svg' | inline_asset_content -}}\n                      <span class=\"visually-hidden\">{{ 'accessibility.remove' | t }}</span>\n                    </button>\n                  </div>\n                </td>\n                <td\n                  class=\"cart-items__error hidden\"\n                  role=\"cell\"\n                  ref=\"cartItemErrorContainer-{{ item.index | plus: 1 }}\"\n                  headers=\"quantity\"\n                >\n                  <div\n                    class=\"cart-item__error\"\n                    role=\"alert\"\n                  >\n                    <span class=\"svg-wrapper\">\n                      {{- 'icon-error.svg' | inline_asset_content -}}\n                    </span>\n                    <small\n                      class=\"cart-item__error-text cart-primary-typography\"\n                      ref=\"cartItemError-{{ item.index | plus: 1 }}\"\n                    ></small>\n                  </div>\n                </td>\n                {%- liquid\n                  if settings.currency_code_enabled_cart_items\n                    assign price = item.final_line_price | money_with_currency\n                    assign unit_price = item.unit_price | money_with_currency\n                  else\n                    assign price = item.final_line_price | money\n                    assign unit_price = item.unit_price | money\n                  endif\n                -%}\n                <td\n                  class=\"cart-items__price cart-secondary-typography\"\n                  role=\"cell\"\n                  headers=\"productTotal\"\n                >\n                  <text-component value=\"{{ price | strip_html }}\">{{ price }}</text-component>\n                  {%- if item.unit_price_measurement -%}\n                    <div class=\"cart-items__price-unit cart-secondary-typography\">\n                      {% render 'unit-price', price: unit_price, measurement: item.unit_price_measurement %}\n                    </div>\n                  {%- endif -%}\n                </td>\n              </tr>\n            {% endfor %}\n          </tbody>\n        </table>\n      </div>\n    </form>\n  {%- endif -%}\n</div>\n\n{% stylesheet %}\n  .cart-items {\n    --cart-item-media-width-min: 2.5rem;\n    --cart-item-media-width-max: 7.5rem;\n\n    container-name: cart-items;\n    container-type: inline-size;\n    width: 100%;\n  }\n\n  .cart-items-disabled {\n    pointer-events: none;\n  }\n\n  .cart-page--empty .cart-items__wrapper {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    margin-block-start: 0;\n    text-align: center;\n  }\n\n  .cart-drawer:not(:has(.cart-form)) .cart-items__wrapper {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n  }\n\n  .cart-items__table {\n    width: 100%;\n    border-spacing: 0;\n  }\n\n  .cart-items__table * {\n    margin: 0;\n  }\n\n  .cart-items__table-row {\n    --cart-item-price-width: 6rem;\n\n    display: grid;\n    grid-template-columns: clamp(2.5rem, 15cqi, 7.5rem) minmax(0, 1fr) minmax(var(--cart-item-price-width), auto);\n    grid-template-areas:\n      'media details price'\n      'media quantity price'\n      'media error error';\n    column-gap: var(--gap-md);\n    align-items: start;\n    padding-bottom: var(--cart-items-gap);\n    margin-bottom: var(--margin-lg);\n  }\n\n  /* Cart drawer: separate grid areas for variants and unit price */\n  .cart-drawer .cart-items__table-row--full-width-variants {\n    grid-template-columns: clamp(2.5rem, 15cqi, 7.5rem) minmax(0, 1fr) auto;\n    grid-template-rows: repeat(4, min-content) 1fr;\n    grid-template-areas:\n      'media details price'\n      'media variants variants'\n      'media unit_price unit_price'\n      'media quantity quantity'\n      'media error error';\n\n    .cart-items__details {\n      display: contents;\n    }\n\n    .cart-items__product-info {\n      grid-area: details;\n    }\n\n    .cart-items__variants-wrapper {\n      grid-area: variants;\n\n      &:empty {\n        display: none;\n      }\n\n      p {\n        margin: 0;\n      }\n    }\n\n    .cart-items__unit-price-wrapper {\n      grid-area: unit_price;\n      font-size: var(--font-size--sm);\n    }\n\n    .cart-items__price {\n      min-width: auto;\n      width: max-content;\n    }\n  }\n\n  .cart-items__table-row.cart-items__nested-line td:first-child {\n    width: 60%;\n    justify-self: right;\n  }\n\n  html:active-view-transition-type(page-navigation) .cart-items__table-row {\n    /* stylelint-disable-next-line declaration-no-important */\n    view-transition-name: none !important;\n  }\n\n  .cart-items__table-row.removing {\n    overflow: hidden;\n    animation: removeRow calc(var(--animation-speed) * 2) var(--animation-easing) forwards;\n    animation-delay: var(--animation-speed);\n  }\n\n  @keyframes removeRow {\n    0% {\n      height: var(--row-height);\n    }\n\n    100% {\n      opacity: 0;\n      height: 0;\n      padding-bottom: 0;\n      margin-bottom: 0;\n      border-color: transparent;\n    }\n  }\n\n  .cart-items__table-row:last-child {\n    padding-bottom: 0;\n  }\n\n  .cart-items--dividers .cart-items__table-row {\n    border-bottom: 1px solid var(--color-border);\n    margin-bottom: var(--cart-items-gap);\n  }\n\n  .cart-items--dividers .cart-items__table-row:has(+ .cart-items__nested-line) {\n    border-bottom: none;\n    margin-bottom: 0;\n  }\n\n  .cart-items--dividers .cart-items__table-row:last-of-type {\n    border-block-end: none;\n    padding-block-end: 0;\n    margin-bottom: 0;\n  }\n\n  .cart-items__details {\n    grid-area: details;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-70));\n  }\n\n  .cart-items__details > * + *,\n  .cart-items__bundle li {\n    margin-block-start: var(--margin-3xs);\n  }\n\n  .cart-items__details * {\n    font-size: var(--font-size--sm);\n  }\n\n  .cart-items__details a {\n    text-decoration: none;\n  }\n\n  .cart-items__title {\n    font-size: var(--font-size--md);\n    color: var(--color-foreground);\n    text-transform: var(--product-title-case);\n    display: block;\n    margin-block-start: calc((var(--font-size--md) - 1lh) / 2);\n  }\n\n  .cart-items__variants {\n    display: block;\n  }\n\n\n  .cart-items__variant {\n    display: inline;\n  }\n\n  .cart-items__variant dt,\n  .cart-items__variant dd {\n    display: inline;\n    margin: 0;\n  }\n\n  .cart-items__quantity {\n    grid-area: quantity;\n    margin-block-start: var(--margin-xs);\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    gap: var(--gap-xs);\n    width: fit-content;\n  }\n\n  .cart-items__quantity-controls {\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    gap: var(--gap-xs);\n    width: fit-content;\n  }\n\n  .cart-items__quantity-controls > .volume-pricing-info {\n    margin-inline-start: calc(-1 * var(--minimum-touch-target) - var(--gap-xs));\n  }\n\n  .cart-items__quantity .quantity-selector {\n    display: inline-flex;\n    font-size: var(--font-size--sm);\n    height: auto;\n  }\n\n  .cart-items__remove {\n    background-color: transparent;\n    color: var(--color-foreground);\n    width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n    justify-content: center;\n    box-shadow: none;\n    padding: 0;\n  }\n\n  .cart-items__media {\n    grid-area: media;\n    padding: 0;\n  }\n\n  .cart-items__price {\n    grid-area: price;\n    min-height: unset;\n    min-width: var(--cart-item-price-width);\n    text-align: end;\n    display: block;\n    font-size: var(--font-size--sm);\n    line-height: var(--line-height);\n  }\n\n\n  .cart-items__price-unit {\n    font-size: var(--font-size--xs);\n    padding-block-start: var(--padding-2xs);\n  }\n\n  .cart-items__media-container {\n    display: flex;\n    aspect-ratio: var(--ratio);\n    position: relative;\n    width: 100%;\n    overflow: hidden;\n  }\n\n  .cart-items__media-image {\n    aspect-ratio: inherit;\n    object-fit: cover;\n    object-position: center center;\n    width: 100%;\n    height: auto;\n  }\n\n  .cart-items__empty-button {\n    margin-top: var(--margin-md);\n    padding-inline: var(--padding-4xl);\n    padding-block: var(--padding-lg);\n  }\n\n  /* Error message */\n  .cart-items__error {\n    display: flex;\n    align-items: flex-start;\n    width: 100%;\n    grid-area: error;\n    margin-block-start: var(--margin-xs);\n    opacity: 1;\n    overflow: hidden;\n    transform: translateY(0);\n    transition: opacity var(--drawer-animation-speed) var(--animation-easing),\n      transform var(--drawer-animation-speed) var(--animation-easing);\n\n    @starting-style {\n      opacity: 0;\n      transform: translateY(-0.5rem);\n    }\n  }\n\n  .cart-item__error {\n    display: flex;\n    align-items: flex-start;\n    width: 100%;\n    font-size: var(--font-size--sm);\n    padding-block: var(--padding-2xs);\n  }\n\n  .cart-item__error .svg-wrapper {\n    flex-shrink: 0;\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n    margin-inline: var(--margin-3xs) var(--margin-xs);\n    margin-block-start: var(--margin-3xs);\n  }\n\n  @container cart-items (min-width: 720px) {\n    /* Cart page: original layout */\n    .cart-items__table-row {\n      --cart-item-price-width: 6rem;\n\n      grid-template-columns: 7.5rem 1fr 1fr minmax(var(--cart-item-price-width), auto);\n      grid-template-rows: min-content 1fr;\n      grid-template-areas:\n        'media details quantity price'\n        'media details error error';\n    }\n\n    .cart-items__quantity,\n    .cart-items__price {\n      grid-area: initial;\n    }\n\n    .cart-items__quantity {\n      margin-top: 0;\n    }\n\n    .cart-items__price {\n      min-height: var(--minimum-touch-target);\n      display: flex;\n      flex-direction: column;\n      align-items: flex-end;\n    }\n\n    /* Cart drawer: separate areas for variants and unit price */\n    .cart-drawer .cart-items__table-row--full-width-variants {\n      grid-template-rows: min-content min-content min-content 1fr;\n      grid-template-areas:\n        'media details quantity price'\n        'media variants variants variants'\n        'media unit_price unit_price unit_price'\n        'media error error error';\n\n      .cart-items__quantity,\n      .cart-items__price {\n        grid-area: initial;\n      }\n    }\n  }\n\n  .cart__subtotal-container,\n  .cart__total-container {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .cart__total-container {\n    row-gap: var(--gap-2xs);\n\n    &.cart__total-container--has-installments {\n      row-gap: var(--gap-xs);\n    }\n  }\n\n  .cart__subtotal-container:empty {\n    display: none;\n  }\n\n  .cart__summary-totals {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-xl);\n    width: 100%;\n    border-block-start: none;\n\n    &:has(> :first-child:not(.cart__subtotal-container, .cart__total-container)) {\n      padding-block-start: 0;\n      border-block-start: none;\n    }\n\n    @media screen and (min-width: 750px) {\n      padding-block-start: 0;\n    }\n  }\n\n  .cart__subtotal-container,\n  .cart__subtotal-container * {\n    font-size: var(--font-size--sm);\n  }\n\n  .cart__total {\n    font-weight: var(--font-weight-bold);\n  }\n\n  .cart__total-label {\n    font-size: var(--font-size--sm);\n  }\n\n  .cart__total-value {\n    font-size: var(--font-size--xl);\n\n    @media screen and (max-width: 749px) {\n      font-size: var(--font-size--lg);\n    }\n  }\n\n  .cart-primary-typography {\n    font-family: var(--cart-primary-font-family);\n    font-style: var(--cart-primary-font-style);\n    font-weight: var(--cart-primary-font-weight);\n  }\n\n  .cart-secondary-typography {\n    font-family: var(--cart-secondary-font-family);\n    font-style: var(--cart-secondary-font-style);\n    font-weight: var(--cart-secondary-font-weight);\n  }\n\n  .cart__ctas {\n    width: 100%;\n    display: grid;\n    gap: var(--checkout-button-gap);\n    grid-auto-flow: row;\n    grid-template-columns: 1fr;\n  }\n\n  .cart__additional-checkout-buttons {\n    width: 100%;\n  }\n\n  shopify-accelerated-checkout-cart {\n    --shopify-accelerated-checkout-inline-alignment: center;\n    --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-primary);\n    --shopify-accelerated-checkout-row-gap: var(--checkout-button-gap, 10px);\n  }\n\n  /* Remove animation */\n  .remove-icon-bottom,\n  .remove-icon-top {\n    transition: transform var(--animation-speed) var(--animation-easing);\n  }\n\n  .cart-items__remove:hover .remove-icon-top {\n    transform: translate(calc(-1 * var(--icon-stroke-width)), var(--icon-stroke-width)) rotate(-15deg);\n  }\n\n  .cart-items__remove:is(:hover, :active) .remove-icon-bottom {\n    transform: translateY(var(--icon-stroke-width));\n  }\n\n  .cart-items__table-row.removing .remove-icon-bottom {\n    transform: translateY(0);\n  }\n\n  .cart-items__table-row.removing .remove-icon-top {\n    animation: removeButtonClickedIconTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  @keyframes removeButtonClickedIconTop {\n    50% {\n      transform: translate(0, calc(-1 * var(--icon-stroke-width)));\n    }\n\n    100% {\n      transform: translate(0, 0);\n    }\n  }\n\n  .cart-items__properties {\n    display: block;\n    margin-block-start: var(--margin-2xs);\n  }\n\n  .cart-items__property {\n    display: block;\n  }\n\n  .cart-items__properties dt,\n  .cart-items__properties dd {\n    display: inline;\n    margin: 0;\n    overflow-wrap: break-word;\n  }\n\n  @media screen and (min-width: 750px) {\n    .cart-items .quantity-selector {\n      --quantity-selector-width: 105px;\n      height: var(--button-size-md);\n      width: var(--quantity-selector-width);\n    }\n\n    .cart-items .quantity-selector button {\n      width: var(--button-size-md);\n      height: var(--button-size-md);\n    }\n\n    .cart-items .quantity-selector input {\n      max-width: calc(var(--quantity-selector-width) - var(--button-size-md) * 2);\n    }\n  }\n\n  @media screen and (prefers-reduced-motion: no-preference) {\n    html:active-view-transition-type(empty-cart-drawer) {\n      .cart-items__empty-button,\n      .cart__checkout-button {\n        view-transition-name: cart-drawer-primary-action;\n\n        & > .button-text {\n          view-transition-name: cart-drawer-primary-action-text;\n        }\n      }\n    }\n  }\n\n  ::view-transition-old(cart-drawer-primary-action-text),\n  ::view-transition-new(cart-drawer-primary-action-text) {\n    height: 100%;\n    object-fit: none;\n    overflow: clip;\n    overflow-clip-margin: 1em;\n  }\n\n  ::view-transition-old(cart-drawer-primary-action-text) {\n    animation: cart-drawer-primary-action-text var(--animation-speed) var(--animation-easing) reverse forwards;\n  }\n  ::view-transition-new(cart-drawer-primary-action-text) {\n    animation: cart-drawer-primary-action-text var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  ::view-transition-old(cart-drawer-primary-action),\n  ::view-transition-new(cart-drawer-primary-action) {\n    height: 100%;\n  }\n\n  ::view-transition-group(cart-drawer-primary-action-text),\n  ::view-transition-group(cart-drawer-primary-action) {\n    animation-duration: var(--spring-d300-b0-duration);\n    animation-timing-function: var(--spring-d300-b0-easing);\n  }\n\n  @keyframes cart-drawer-primary-action-text {\n    from {\n      filter: blur(3px);\n      opacity: 0;\n    }\n    to {\n      filter: none;\n      opacity: 1;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/cart-summary.liquid",
    "content": "{%- doc -%}\n  Renders the cart summary totals.\n\n  @param {string} [accelerated_checkout_buttons_layout] - { 'vertical' } Forced layout of the additional checkout buttons, instead of relying on platform's layout.\n  @param {string} [section_id] - The section ID for cart discount component.\n{%- enddoc -%}\n\n<div class=\"cart-totals\">\n  {% # We need to keep this node in place to allow morphing to work properly # %}\n  <div class=\"cart-totals__original-container cart-primary-typography\">\n    {%- if cart.cart_level_discount_applications.size > 0 -%}\n      <span class=\"cart-totals__item cart-totals__original\">\n        <span class=\"cart-totals__original-label\">{{ 'content.cart_subtotal' | t }}</span>\n        <span\n          class=\"cart-totals__original-value cart-secondary-typography\"\n          data-testid=\"cart-subtotal-value\"\n        >\n          {{- cart.items_subtotal_price | money -}}\n        </span>\n      </span>\n      <ul\n        class=\"cart-discounts\"\n        role=\"list\"\n        aria-label=\"{{ 'content.discounts' | t }}\"\n      >\n        {%- for discount in cart.cart_level_discount_applications -%}\n          <li class=\"cart-discounts__item\">\n            <span class=\"cart-discounts__label\">\n              {{- 'icon-discount.svg' | inline_asset_content -}}\n              {{ discount.title | escape }}\n            </span>\n            <span class=\"cart-discounts__value cart-secondary-typography\"\n              >-{{ discount.total_allocated_amount | money -}}\n            </span>\n          </li>\n        {%- endfor -%}\n      </ul>\n    {%- endif -%}\n  </div>\n\n  {% if settings.show_cart_note or settings.show_add_discount_code %}\n    <div class=\"cart-actions\">\n      {% if settings.show_cart_note %}\n        <script\n          type=\"module\"\n          src=\"{{ 'cart-note.js' | asset_url }}\"\n        ></script>\n\n        <cart-note style=\"display: flex;\">\n          <accordion-custom\n            class=\"cart-note\"\n            {% if settings.cart_note_open_by_default %}\n              open-by-default-on-desktop\n              open-by-default-on-mobile\n            {% endif %}\n          >\n            <details\n              class=\"details\"\n              {% if settings.cart_note_open_by_default %}\n                open\n              {% endif %}\n            >\n              <summary class=\"cart-note__summary\">\n                <span class=\"cart-note__label cart-primary-typography\">\n                  {{ 'content.seller_note' | t }}\n                </span>\n\n                <span class=\"cart-totals__icon\">\n                  {{- 'icon-plus.svg' | inline_asset_content -}}\n                </span>\n              </summary>\n\n              <div class=\"details-content cart-note__inner\">\n                <label\n                  for=\"cart-note\"\n                  class=\"visually-hidden\"\n                >\n                  {{- 'content.seller_note' | t -}}\n                </label>\n                <textarea\n                  form=\"cart-form\"\n                  on:input=\"/updateCartNote\"\n                  id=\"cart-note\"\n                  class=\"cart-note__instructions\"\n                  name=\"note\"\n                >{{ cart.note }}</textarea>\n              </div>\n            </details>\n          </accordion-custom>\n        </cart-note>\n      {% endif %}\n      {% if settings.show_cart_note and settings.show_add_discount_code %}\n        <div class=\"cart-actions__divider\"></div>\n      {% endif %}\n      {% if settings.show_add_discount_code %}\n        {% liquid\n          assign discount_codes = cart.cart_level_discount_applications | where: 'type', 'discount_code' | map: 'title'\n          for item in cart.items\n            for allocation in item.line_level_discount_allocations\n              if allocation.discount_application.type == 'discount_code'\n                assign discount_codes = item.line_level_discount_allocations | slice: forloop.index0 | map: 'discount_application' | map: 'title' | concat: discount_codes\n              endif\n            endfor\n          endfor\n\n          assign discount_codes = discount_codes | uniq\n\n          # Evaluate the boolean expression for the disclosure state\n          if discount_codes.size == 0\n            assign disclosure_expanded = false\n          else\n            assign disclosure_expanded = true\n          endif\n        %}\n\n        <accordion-custom class=\"cart-discount\">\n          <details\n            class=\"details\"\n            {% if disclosure_expanded %}\n              open\n            {% endif %}\n          >\n            <summary class=\"cart-discount__summary\">\n              <span class=\"cart-discount__label cart-primary-typography\">{{ 'content.discount' | t }}</span>\n\n              <span class=\"cart-totals__icon\">\n                {{- 'icon-plus.svg' | inline_asset_content -}}\n              </span>\n            </summary>\n\n            <div class=\"details-content\">\n              <div id=\"cart-discount-disclosure\">\n                <cart-discount-component\n                  {% if section_id != blank %}\n                    data-section-id=\"{{ section_id }}\"\n                  {% endif %}\n                >\n                  <div class=\"cart-discount__content\">\n                    <form\n                      on:submit=\"/applyDiscount\"\n                      onsubmit=\"return false;\"\n                      class=\"cart-discount__form\"\n                    >\n                      <label\n                        for=\"cart-discount\"\n                        class=\"visually-hidden\"\n                      >\n                        {{- 'accessibility.discount' | t -}}\n                      </label>\n                      <input\n                        id=\"cart-discount\"\n                        class=\"cart-discount__input\"\n                        type=\"text\"\n                        name=\"discount\"\n                        size=\"8\"\n                        placeholder=\"{{ 'content.discount_code' | t }}\"\n                        required\n                      >\n                      <button\n                        type=\"submit\"\n                        class=\"button cart-discount__button\"\n                      >\n                        {{ 'actions.apply' | t }}\n                      </button>\n                    </form>\n                  </div>\n                  <div\n                    class=\"cart-discount__error hidden\"\n                    role=\"alert\"\n                    ref=\"cartDiscountError\"\n                  >\n                    <span class=\"svg-wrapper\">\n                      {{- 'icon-error.svg' | inline_asset_content -}}\n                    </span>\n                    <small\n                      class=\"cart-discount__error-text cart-primary-typography hidden\"\n                      ref=\"cartDiscountErrorDiscountCode\"\n                    >\n                      {{ 'content.discount_code_error' | t: code: 'test' }}\n                    </small>\n                    <small\n                      class=\"cart-discount__error-text cart-primary-typography hidden\"\n                      ref=\"cartDiscountErrorShipping\"\n                    >\n                      {{ 'content.shipping_discount_error' | t }}\n                    </small>\n                  </div>\n                  <ul class=\"cart-discount__codes\">\n                    {% for discount_code in discount_codes %}\n                      <li\n                        class=\"cart-discount__pill\"\n                        data-discount-code=\"{{ discount_code }}\"\n                        aria-label=\"{{ 'accessibility.discount_applied' | t: code: discount_code }}\"\n                      >\n                        <p class=\"cart-discount__pill-code\">\n                          {{ discount_code }}\n                        </p>\n                        <button\n                          type=\"button\"\n                          on:click=\"/removeDiscount\"\n                          class=\"cart-discount__pill-remove svg-wrapper svg-wrapper--smaller button-unstyled\"\n                          aria-label=\"{{ 'actions.remove_discount' | t: code: discount_code }}\"\n                        >\n                          {{- 'icon-filters-close.svg' | inline_asset_content -}}\n                        </button>\n                      </li>\n                    {% endfor %}\n                  </ul>\n                </cart-discount-component>\n              </div>\n            </div>\n          </details>\n        </accordion-custom>\n      {% endif %}\n    </div>\n  {% endif %}\n\n  {%- liquid\n    if settings.currency_code_enabled_cart_total\n      assign total_price = cart.total_price | money_with_currency\n    else\n      assign total_price = cart.total_price | money\n    endif\n  -%}\n\n  <div class=\"cart-totals__container{% if settings.show_installments %} cart-totals__container--has-installments{% endif %}\">\n    <span\n      class=\"cart-totals__item cart-totals__total\"\n      role=\"status\"\n    >\n      <span class=\"cart-totals__total-label cart-primary-typography\">{{ 'content.cart_estimated_total' | t }}</span>\n      <text-component\n        ref=\"cartTotal\"\n        value=\"{{ total_price | strip_html }}\"\n        class=\"cart-totals__total-value cart-secondary-typography\"\n        {% comment %} Used by payment_terms web component {% endcomment %}\n        data-testid=\"cart-total-value\"\n        data-cart-subtotal\n      >\n        {{ total_price }}\n      </text-component>\n    </span>\n    {% if settings.show_installments %}\n      <span class=\"cart-totals__item cart-totals__installments\">\n        {% form 'cart', cart %}\n          {{ form | payment_terms }}\n        {% endform %}\n      </span>\n    {% endif %}\n    <div class=\"cart-totals__item cart-totals__tax-note cart-primary-typography\">\n      {% render 'tax-info', has_discounts_enabled: settings.show_add_discount_code %}\n    </div>\n  </div>\n</div>\n\n<div class=\"cart__ctas\">\n  <button\n    type=\"submit\"\n    id=\"checkout\"\n    class=\"cart__checkout-button button\"\n    name=\"checkout\"\n    {% if cart == empty %}\n      disabled\n    {% endif %}\n    form=\"cart-form\"\n  >\n    <span class=\"button-text\">\n      {{ 'content.checkout' | t }}\n    </span>\n  </button>\n\n  {% if additional_checkout_buttons and settings.show_accelerated_checkout_buttons %}\n    <div\n      class=\"\n        additional-checkout-buttons\n        {% if accelerated_checkout_buttons_layout == 'vertical' %}additional-checkout-buttons--vertical{% endif %}\n      \"\n    >\n      {{ content_for_additional_checkout_buttons }}\n    </div>\n  {% endif %}\n</div>\n\n{% stylesheet %}\n  .cart-actions {\n    display: flex;\n    flex-direction: column;\n    gap: 0;\n    border-block: 1px solid var(--color-border);\n    padding-block: 0;\n    margin-block-start: var(--margin-3xs);\n  }\n\n  .cart-actions__divider {\n    border-block-start: 1px solid var(--color-border);\n  }\n\n  .cart-totals:not(:has(.cart-actions)) {\n    margin-block-start: var(--margin-3xs);\n    border-block-start: 1px solid var(--color-border);\n    padding-block-start: var(--margin-xl);\n  }\n\n  .cart-totals__item {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .cart-totals__tax-note {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .cart-totals__tax-note small {\n    font-size: var(--font-size--2xs);\n  }\n\n  .cart-discounts {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n\n  .cart-discounts__item {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .cart-discounts__label {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-2xs);\n  }\n\n  .cart-discounts__label svg {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n    display: inline-block;\n  }\n\n  .cart-totals__original-container,\n  .cart-totals__container {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .cart-totals__container {\n    row-gap: var(--gap-2xs);\n\n    &.cart-totals__container--has-installments {\n      row-gap: var(--gap-xs);\n    }\n  }\n\n  .cart-totals__original-container:empty {\n    display: none;\n  }\n\n  .cart-totals {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-xl);\n    width: 100%;\n    border-block-start: none;\n\n    &:has(> :first-child:not(.cart-totals__original-container, .cart-totals__container)) {\n      padding-block-start: 0;\n      border-block-start: none;\n    }\n\n    @media screen and (min-width: 750px) {\n      padding-block-start: 0;\n    }\n  }\n\n  .cart-totals__original-container,\n  .cart-totals__original-container * {\n    font-size: var(--cart-font-size--sm);\n  }\n\n  .cart-totals__total {\n    align-items: baseline;\n    font-weight: var(--font-weight-bold);\n  }\n\n  .cart-totals__total-label {\n    font-size: var(--cart-font-size--sm);\n  }\n\n  .cart-totals__total-value {\n    font-size: var(--cart-font-size--xl);\n\n    @media screen and (max-width: 749px) {\n      font-size: var(--font-size--lg);\n    }\n  }\n\n  .cart-totals__installments {\n    color: var(--color-foreground);\n    font-size: var(--font-size--2xs);\n  }\n\n  .cart-note {\n    width: 100%;\n  }\n\n  @starting-style {\n    .cart-note[open-by-default-on-desktop][open-by-default-on-mobile] .details-content {\n      block-size: auto;\n      opacity: 1;\n      overflow-y: visible;\n    }\n  }\n\n  .cart-note__inner {\n    padding-block: var(--padding-2xs) var(--padding-sm);\n  }\n\n  .cart-note__summary {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .cart-note__summary:hover {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .cart-note__label {\n    display: flex;\n    align-items: flex-start;\n    gap: var(--gap-2xs);\n    font-size: var(--font-size--2xs);\n    font-weight: 500;\n  }\n\n  .cart-note__instructions {\n    color: var(--color-input-text);\n    background-color: var(--color-input-background);\n    border-width: var(--style-border-width-inputs);\n    border-color: var(--color-input-border);\n    transition: box-shadow var(--animation-speed) ease;\n    box-shadow: var(--input-box-shadow);\n    min-height: 5.5rem;\n    min-width: 100%;\n    max-width: 100%;\n    font-size: var(--font-size--sm);\n    padding: max(4px, calc(var(--style-border-radius-inputs) * (1 - cos(45deg))));\n  }\n\n  .cart-totals__icon {\n    height: var(--icon-size-xs);\n    width: var(--icon-size-xs);\n    margin: 0;\n  }\n\n  .cart__ctas {\n    width: 100%;\n    display: grid;\n    gap: var(--checkout-button-gap);\n    grid-auto-flow: row;\n    grid-template-columns: 1fr;\n  }\n\n  .cart__ctas .cart__checkout-button {\n    width: 100%;\n    height: clamp(25px, var(--height-buy-buttons), 55px);\n    padding-inline: var(--padding-4xl);\n  }\n\n  .cart-drawer__summary .cart-totals:not(:has(.cart-totals__original-container:empty)) {\n    border-block-start: var(--style-border-width) solid var(--color-border);\n    padding-block-start: var(--padding-2xl);\n  }\n\n  .cart-drawer__summary .cart-note {\n    @media screen and (min-width: 750px) {\n      margin-block-start: var(--margin-3xs);\n    }\n  }\n\n  .cart-discount__input {\n    background-color: var(--color-input-background);\n    color: var(--color-input-text);\n    border-width: var(--style-border-width-inputs);\n    border-color: var(--color-input-border);\n    border-style: solid;\n    border-radius: var(--style-border-radius-inputs);\n    padding: var(--padding-sm) var(--padding-md);\n    height: 100%;\n    flex-grow: 1;\n    min-width: 0;\n    font-size: var(--font-size--sm);\n  }\n\n  .cart-discount__input::placeholder {\n    color: rgb(var(--color-input-text-rgb) / var(--opacity-subdued-text));\n  }\n\n  .cart-discount__pill-code {\n    overflow: hidden;\n    max-width: 100px;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    margin: 0;\n  }\n\n  .cart-discount {\n    width: 100%;\n  }\n\n  .cart-discount__codes {\n    display: none;\n    gap: var(--padding-xs);\n    flex-wrap: wrap;\n    list-style: none;\n    padding-inline: 0;\n    margin: 0;\n  }\n\n  .cart-discount__codes:has(.cart-discount__pill) {\n    display: flex;\n  }\n\n  .cart-discount__button {\n    height: 100%;\n  }\n\n  .cart-discount__content {\n    height: calc(var(--button-size) + var(--padding-2xs) + var(--padding-sm));\n  }\n\n  .cart-discount__pill {\n    display: flex;\n    color: var(--color-foreground);\n    gap: var(--padding-xs);\n    align-items: center;\n    padding: var(--padding-xs) var(--padding-sm);\n    border-radius: var(--style-border-radius-pills);\n    background-color: var(--color-input-background);\n    text-transform: uppercase;\n  }\n\n  .cart-discount__form {\n    display: flex;\n    gap: var(--padding-md);\n    align-items: center;\n    height: 100%;\n    padding-block: var(--padding-2xs) var(--padding-sm);\n  }\n\n  :is(.cart-discount__pill-remove, .cart-discount__pill-remove:hover) {\n    --close-icon-opacity: 0.4;\n\n    color: var(--color-foreground);\n    background-color: transparent;\n    pointer-events: all;\n    cursor: pointer;\n    height: 100%;\n  }\n\n  .cart-discount__error {\n    display: flex;\n    align-items: center;\n    width: 100%;\n    padding-block: var(--padding-2xs) var(--padding-sm);\n  }\n\n  .cart-discount__error .svg-wrapper {\n    flex-shrink: 0;\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n    margin-inline: var(--margin-3xs) var(--margin-xs);\n  }\n\n  .cart-discount__error-text {\n    margin-block-start: var(--margin-3xs);\n  }\n\n  .cart-discount__summary {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .cart-discount__summary:hover {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .cart-discount__label {\n    display: flex;\n    align-items: flex-start;\n    gap: var(--gap-2xs);\n    font-size: var(--font-size--2xs);\n    font-weight: 500;\n  }\n\n  @media screen and (min-width: 750px) {\n    .cart-summary--extend {\n      height: 100%;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/checkbox.liquid",
    "content": "{%- doc -%}\n  Renders a checkbox input and label\n\n  @param {string} id - input id attribute\n  @param {string} name - input name attribute\n  @param {string} value - input value attribute\n  @param {string} label - label text\n  @param {boolean} checked - whether the input is checked\n  @param {string} events - event attributes for the input, e.g. 'on:click=\"/action\"'\n  @param {boolean} disabled - whether the input is disabled\n  @param {boolean} [required] - whether the input is required\n  @param {string} [formId] - form id attribute for the input\n  @param {string} [inputRef] - input ref attribute for use with component framework\n  @param {string} [labelRef] - label ref attribute for use with component framework\n  @param {boolean} [autofocus] - whether the input should be autofocused\n{%- enddoc -%}\n<div\n  class=\"checkbox{% if disabled %} checkbox--disabled{% endif %}\"\n  {{ events }}\n>\n  <input\n    type=\"checkbox\"\n    name=\"{{ name }}\"\n    value=\"{{ value }}\"\n    id=\"{{ id }}\"\n    class=\"checkbox__input\"\n    data-label=\"{{ label }}\"\n    {% if checked %}\n      checked\n    {% endif %}\n    {% if disabled %}\n      disabled\n    {% endif %}\n    {% if required %}\n      required aria-required=\"true\"\n    {% endif %}\n    {% if formId != blank %}\n      form=\"{{ formId }}\"\n    {% endif %}\n    {% if inputRef != blank %}\n      ref=\"{{ inputRef }}\"\n    {% endif %}\n    {% if autofocus %}\n      autofocus\n    {% endif %}\n  >\n  <label\n    class=\"checkbox__label\"\n    for=\"{{ id }}\"\n    {% if labelRef != blank %}\n      ref=\"{{ labelRef }}\"\n    {% endif %}\n    role=\"checkbox\"\n  >\n    {{ 'icon-checkmark.svg' | inline_asset_content }}\n    <span class=\"checkbox__label-text\">{{- label -}}</span>\n  </label>\n</div>\n"
  },
  {
    "path": "snippets/collection-card.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render a collection card.\n  To be used inside a block to inherit the block object settings.\n\n  @param {string} card_image - The image to display in the collection card\n  @param {string} children - The content to render inside the collection card\n  @param {object} collection - The collection to render the card for\n  @param {object} block - The block object\n  @param {object} section - The section object\n\n  @example\n  {% render 'collection-card',\n    card_image: card_image,\n    children: children,\n    block: block,\n    collection: collection,\n    section: section\n  %}\n{%- enddoc -%}\n\n{% style %}\n  {% if request.visual_preview_mode %}\n    .collection-card {\n      min-width: 250px;\n    }\n  {% endif %}\n{% endstyle %}\n\n{% liquid\n  assign onboarding = false\n  assign block_settings = block.settings\n\n  if collection == blank\n    assign onboarding = true\n  endif\n%}\n\n<div\n  class=\"\n    collection-card\n    border-style\n    {% if block_settings.placement == 'on_image' %}collection-card--image-bg{% endif %}\n    {% if section.settings.layout_type == 'bento' %}collection-card--image-height-fixed{% endif %}\n    {% if section.settings.layout_type == 'editorial' %}collection-card--flexible-aspect-ratio{% endif %}\n    {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n  \"\n  data-block-id=\"{{ block.id }}\"\n  {% if onboarding %}\n    data-placeholder=\"true\"\n  {% endif %}\n  style=\"\n    {% render 'border-override', settings: block_settings %}\n    --horizontal-alignment: {{ block_settings.horizontal_alignment }};\n    --vertical-alignment: {{ block_settings.vertical_alignment }};\n    --background-overlay-color: {{ block_settings.overlay_color }};\n    --gap: {{ block_settings.collection_card_gap }}px;\n  \"\n  {{- block.shopify_attributes -}}\n>\n  <a\n    class=\"collection-card__link\"\n    {% unless onboarding %}\n      href=\"{{ collection.url }}\"\n    {% endunless %}\n  >\n    <span class=\"visually-hidden\">{{ collection.title }}</span>\n  </a>\n  <div class=\"collection-card__inner\">\n    {{ card_image }}\n    <div class=\"collection-card__content layout-panel-flex--column\">\n      {{ children }}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .collection-card {\n    --fixed-card-height: var(--height-small);\n\n    flex: 1 1 var(--card-width-small);\n  }\n\n  .collection-card > svg {\n    height: 100%;\n    width: 100%;\n    aspect-ratio: var(--ratio);\n  }\n\n  .collection-card--image-bg .collection-card__inner {\n    height: 100%;\n  }\n\n  .collection-card__inner {\n    gap: var(--gap);\n\n    a,\n    button {\n      /* only allow interactive elements to be clickable separate from .collection-card__link */\n      pointer-events: auto;\n    }\n  }\n\n  /* allow all blocks to be selectable in editor preview */\n  .shopify-design-mode .collection-card__content * {\n    pointer-events: auto;\n  }\n\n  .collection-card__content {\n    max-width: 100%;\n    --flex-wrap: wrap;\n  }\n\n  /* Nested image block rules */\n\n  .collection-card.collection-card--image-bg {\n    aspect-ratio: var(--ratio);\n  }\n\n  .collection-card.collection-card--image-bg .collection-card__content {\n    padding: var(--padding-lg);\n  }\n\n  .collection-card--image-height-fixed {\n    height: 100%;\n  }\n\n  /* Bento layout rules */\n  .collection-card--image-height-fixed .collection-card__image {\n    height: var(--fixed-card-height);\n    width: 100%;\n  }\n\n  .collection-card--image-height-fixed.collection-card--image-bg {\n    height: var(--fixed-card-height);\n    aspect-ratio: unset;\n  }\n\n  .collection-card__image .image-block__image {\n    object-fit: cover;\n    width: 100%;\n    height: 100%;\n    max-width: 100%;\n  }\n\n  .collection-card--image-bg .collection-card__image {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n  }\n\n  .collection-card__image svg {\n    height: 100%;\n    width: 100%;\n  }\n\n  .resource-list:not(.hidden--desktop) .collection-card--flexible-aspect-ratio {\n    &.collection-card.collection-card--image-bg,\n    &.collection-card .placeholder-svg {\n      aspect-ratio: 99;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/color-schemes.liquid",
    "content": "{% style %}\n  {% for scheme in settings.color_schemes -%}\n    {% assign scheme_classes = scheme_classes | append: ', .color-' | append: scheme.id %}\n    {% if forloop.index == 1 %}\n      :root,\n    {% endif %}\n    {% assign background_brightness = scheme.settings.background | color_brightness %}\n    {% if background_brightness < 64 %}\n      {% assign opacity_5_15 = 0.15 %}\n      {% assign opacity_10_25 = 0.25 %}\n      {% assign opacity_35_55 = 0.55 %}\n      {% assign opacity_40_60 = 0.60 %}\n      {% assign opacity_30_60 = 0.60 %}\n    {% else %}\n      {% assign opacity_5_15 = 0.05 %}\n      {% assign opacity_10_25 = 0.1 %}\n      {% assign opacity_35_55 = 0.35 %}\n      {% assign opacity_40_60 = 0.40 %}\n      {% assign opacity_30_60 = 0.30 %}\n    {% endif %}\n    .color-{{ scheme.id }} {\n        --color-background: rgb({{ scheme.settings.background.rgba }});\n        /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */\n        --color-background-rgb: {{ scheme.settings.background.rgb }};\n        --opacity-5-15: {{ opacity_5_15 }};\n        --opacity-10-25: {{ opacity_10_25 }};\n        --opacity-35-55: {{ opacity_35_55 }};\n        --opacity-40-60: {{ opacity_40_60 }};\n        --opacity-30-60: {{ opacity_30_60 }};\n        --color-foreground: rgb({{ scheme.settings.foreground.rgba }});\n        --color-foreground-rgb: {{ scheme.settings.foreground.rgb }};\n        --color-foreground-heading: rgb({{ scheme.settings.foreground_heading.rgba }});\n        --color-foreground-heading-rgb: {{ scheme.settings.foreground_heading.rgb }};\n        --color-primary: rgb({{ scheme.settings.primary.rgba }});\n        --color-primary-rgb: {{ scheme.settings.primary.rgb }};\n        --color-primary-hover: rgb({{ scheme.settings.primary_hover.rgba }});\n        --color-primary-hover-rgb: {{ scheme.settings.primary_hover.rgb }};\n        --color-border: rgb({{ scheme.settings.border.rgba }});\n        --color-border-rgb: {{ scheme.settings.border.rgb }};\n        --color-shadow: rgb({{ scheme.settings.shadow.rgba }});\n        --color-shadow-rgb: {{ scheme.settings.shadow.rgb }};\n        --color-primary-button-text: rgb({{ scheme.settings.primary_button_text.rgba }});\n        --color-primary-button-background: rgb({{ scheme.settings.primary_button_background.rgba }});\n        --color-primary-button-border: rgb({{ scheme.settings.primary_button_border.rgba }});\n        --color-primary-button-hover-text: rgb({{ scheme.settings.primary_button_hover_text.rgba }});\n        --color-primary-button-hover-background: rgb({{ scheme.settings.primary_button_hover_background.rgba }});\n        --color-primary-button-hover-border: rgb({{ scheme.settings.primary_button_hover_border.rgba }});\n        --color-secondary-button-text: rgb({{ scheme.settings.secondary_button_text.rgba }});\n        --color-secondary-button-background: rgb({{ scheme.settings.secondary_button_background.rgba }});\n        --color-secondary-button-border: rgb({{ scheme.settings.secondary_button_border.rgba }});\n        --color-secondary-button-hover-text: rgb({{ scheme.settings.secondary_button_hover_text.rgba }});\n        --color-secondary-button-hover-background: rgb({{ scheme.settings.secondary_button_hover_background.rgba }});\n        --color-secondary-button-hover-border: rgb({{ scheme.settings.secondary_button_hover_border.rgba }});\n        --color-input-background: rgb({{ scheme.settings.input_background.rgba }});\n        --color-input-text: rgb({{ scheme.settings.input_text_color.rgba }});\n        --color-input-text-rgb: {{ scheme.settings.input_text_color.rgb }};\n        --color-input-border: rgb({{ scheme.settings.input_border_color.rgba }});\n        --color-input-hover-background: rgb({{ scheme.settings.input_hover_background.rgba }});\n        --color-variant-background: rgb({{ scheme.settings.variant_background_color.rgba }});\n        --color-variant-border: rgb({{ scheme.settings.variant_border_color.rgba }});\n        --color-variant-text: rgb({{ scheme.settings.variant_text_color.rgba }});\n        --color-variant-text-rgb: {{ scheme.settings.variant_text_color.rgb }};\n        --color-variant-hover-background: rgb({{ scheme.settings.variant_hover_background_color.rgba }});\n        --color-variant-hover-text: rgb({{ scheme.settings.variant_hover_text_color.rgba }});\n        --color-variant-hover-border: rgb({{ scheme.settings.variant_hover_border_color.rgba }});\n        --color-selected-variant-background: rgb({{ scheme.settings.selected_variant_background_color.rgba }});\n        --color-selected-variant-border: rgb({{ scheme.settings.selected_variant_border_color.rgba }});\n        --color-selected-variant-text: rgb({{ scheme.settings.selected_variant_text_color.rgba }});\n        --color-selected-variant-hover-background: rgb({{ scheme.settings.selected_variant_hover_background_color.rgba }});\n        --color-selected-variant-hover-text: rgb({{ scheme.settings.selected_variant_hover_text_color.rgba }});\n        --color-selected-variant-hover-border: rgb({{ scheme.settings.selected_variant_hover_border_color.rgba }});\n\n        --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n        --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));\n        --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n        --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60));\n        --font-h1--color: var(--color-foreground-heading);\n        --font-h2--color: var(--color-foreground-heading);\n        --font-h3--color: var(--color-foreground-heading);\n        --font-h4--color: var(--color-foreground-heading);\n        --font-h5--color: var(--color-foreground-heading);\n        --font-h6--color: var(--color-foreground-heading);\n\n        /* Shadows */\n        {% if settings.drawer_drop_shadow %}\n          --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));\n        {% endif %}\n        {% if settings.popover_drop_shadow %}\n          --shadow-blur: 20px;\n          --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15));\n        {% endif %}\n      }\n  {% endfor %}\n\n  {{ scheme_classes | prepend: 'body' }} {\n    color: var(--color-foreground);\n    background-color: var(--color-background);\n  }\n{% endstyle %}\n"
  },
  {
    "path": "snippets/divider.liquid",
    "content": "{%- doc -%}\n  Renders a divider line, used to visually separate content.\n\n  @param {string} id - A unique ID for the divider, linking it to a block or section.\n  @param {object} settings - An object containing style settings for the divider.\n\n  @param {string} [settings.alignment_horizontal] - The horizontal alignment of the divider ('left', 'center', or\n  'right'). Defaults to 'center'.\n  @param {number} [settings.thickness] - The thickness of the divider line in pixels.\n  @param {string} [settings.corner_radius] - The corner radius of the divider, e.g., 'rounded'.\n  @param {number} [settings.width_percent] - The width of the divider as a percentage of its container.\n\n  @param {boolean} [full_width] - When `true`, the divider spans the full width of its container.\n  @param {boolean} [attributes] - When `true`, render block.shopify_attributes on the divider container.\n{%- enddoc -%}\n\n<div\n  class=\"divider divider-{{ id }} spacing-style\"\n  style=\"\n    --divider-justify-content: {{ settings.alignment_horizontal | default: 'center' }};\n    {% render 'spacing-style', settings: settings %}\n  \"\n  {% if attributes %}\n    {{- block.shopify_attributes -}}\n  {% endif %}\n>\n  <span\n    class=\"divider__line\"\n    style=\"\n      --divider-border-thickness: {{ settings.thickness }}px;\n      {% unless full_width %}\n        --divider-border-rounded: {% if settings.corner_radius == 'rounded' %}1{% else %}0{% endif %};\n      {% endunless %}\n      --divider-flex-basis: {{ settings.width_percent }}%;\n    \"\n  ></span>\n</div>\n\n{% stylesheet %}\n  .divider {\n    align-self: stretch;\n    display: flex;\n    align-items: center;\n    justify-content: var(--divider-justify-content);\n  }\n\n  .divider__line {\n    border-bottom: var(--divider-border-thickness) solid var(--color-border);\n    border-right: var(--divider-border-thickness) solid var(--color-border);\n    border-radius: calc(var(--style-border-radius-sm) * var(--divider-border-rounded));\n    flex-basis: var(--divider-flex-basis);\n    min-height: var(--divider-flex-basis);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/editorial-blog-grid.liquid",
    "content": "{%- doc -%}\n  Renders a grid and places blog items inside of it using an editorial layout.\n  This is a horizontally mirrored version of the collection grid layout.\n\n  @param {object} items - An array of HTML strings for the blog list items\n\n  @example\n  {% render 'editorial-blog-grid', items: items %}\n{%- enddoc -%}\n\n<div class=\"editorial-blog__grid\">\n  <div class=\"editorial-blog__spacer\"></div>\n\n  {% for item in items %}\n    {% liquid\n      assign current_grid_index = forloop.index0 | divided_by: 8\n      assign current_item_index = forloop.index0 | modulo: 8\n\n      # Horizontally mirrored from editorial-collection-grid\n      case current_item_index\n        when 0\n          assign grid_column = '8 / span 4'\n          assign grid_row = 1\n          assign grid_row_span = 5\n        when 1\n          assign grid_column = '2 / span 5'\n          assign grid_row = 3\n          assign grid_row_span = 5\n        when 2\n          assign grid_column = '5 / span 8'\n          assign grid_row = 9\n          assign grid_row_span = 6\n        when 3\n          assign grid_column = '2 / span 8'\n          assign grid_row = 16\n          assign grid_row_span = 6\n        when 4\n          assign grid_column = '2 / span 5'\n          assign grid_row = 23\n          assign grid_row_span = 5\n        when 5\n          assign grid_column = '8 / span 4'\n          assign grid_row = 25\n          assign grid_row_span = 5\n        when 6\n          assign grid_column = '1 / span 8'\n          assign grid_row = 31\n          assign grid_row_span = 6\n        when 7\n          assign grid_column = '3 / span 8'\n          assign grid_row = 38\n          assign grid_row_span = 6\n      endcase\n\n      assign full_grid_rows = current_grid_index | times: 44\n      assign grid_row = grid_row | plus: full_grid_rows\n    %}\n    <div\n      class=\"editorial-blog__item-{{ forloop.index0 | modulo: 4 }}\"\n      style=\"grid-column: {{ grid_column }}; grid-row: {{ grid_row }} / span {{ grid_row_span }};\"\n    >\n      {{ item }}\n    </div>\n  {% endfor %}\n</div>\n\n{% stylesheet %}\n  .editorial-blog__grid {\n    display: grid;\n    grid-template-columns: repeat(12, 1fr);\n    grid-auto-rows: 1fr;\n    gap: var(--gap-xl);\n\n    .shopify-block {\n      height: 100%;\n    }\n  }\n\n  .editorial-blog__spacer {\n    aspect-ratio: 1;\n  }\n\n  @media screen and (max-width: 749px) {\n    .editorial-blog__grid {\n      display: flex;\n      flex-direction: column;\n      gap: var(--gap-2xl);\n    }\n\n    .editorial-blog__spacer {\n      display: none;\n    }\n\n    /* Mobile layout - also horizontally mirrored from collection grid */\n    .editorial-blog__item-0 {\n      width: 66%;\n      align-self: flex-end; /* Originally flex-start, now flex-end */\n    }\n\n    .editorial-blog__item-1 {\n      width: 83%;\n      align-self: flex-start; /* Originally flex-end, now flex-start */\n    }\n\n    .editorial-blog__item-2 {\n      width: 83%;\n      align-self: flex-end; /* Originally flex-start, now flex-end */\n    }\n\n    .editorial-blog__item-3 {\n      width: 100%;\n      align-self: center; /* Stays centered */\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/editorial-collection-grid.liquid",
    "content": "{%- doc -%}\n  Renders a grid and places items inside of it using an editorial layout.\n\n  @param {object} items - An array of HTML strings for the collection list items\n\n  @example\n  {% render 'editorial-collection-grid', items: items %}\n{%- enddoc -%}\n\n<div class=\"editorial-collection__grid\">\n  <div class=\"editorial-collection__spacer\"></div>\n\n  {% for item in items %}\n    {% liquid\n      assign current_grid_index = forloop.index0 | divided_by: 8\n      assign current_item_index = forloop.index0 | modulo: 8\n\n      case current_item_index\n        when 0\n          assign grid_column = '2 / span 4'\n          assign grid_row = 1\n          assign grid_row_span = 5\n        when 1\n          assign grid_column = '7 / span 5'\n          assign grid_row = 3\n          assign grid_row_span = 5\n        when 2\n          assign grid_column = '1 / span 8'\n          assign grid_row = 9\n          assign grid_row_span = 6\n        when 3\n          assign grid_column = '3 / span 8'\n          assign grid_row = 16\n          assign grid_row_span = 6\n        when 4\n          assign grid_column = '7 / span 5'\n          assign grid_row = 23\n          assign grid_row_span = 5\n        when 5\n          assign grid_column = '2 / span 4'\n          assign grid_row = 25\n          assign grid_row_span = 5\n        when 6\n          assign grid_column = '5 / span 8'\n          assign grid_row = 31\n          assign grid_row_span = 6\n        when 7\n          assign grid_column = '2 / span 8'\n          assign grid_row = 38\n          assign grid_row_span = 6\n      endcase\n\n      assign full_grid_rows = current_grid_index | times: 44\n      assign grid_row = grid_row | plus: full_grid_rows\n    %}\n    <div\n      class=\"editorial-collection__item-{{ forloop.index0 | modulo: 4 }}\"\n      style=\"grid-column: {{ grid_column }}; grid-row: {{ grid_row }} / span {{ grid_row_span }};\"\n    >\n      {{ item }}\n    </div>\n  {% endfor %}\n</div>\n\n{% stylesheet %}\n  .editorial-collection__grid {\n    display: grid;\n    grid-template-columns: repeat(12, 1fr);\n    grid-auto-rows: 1fr;\n    gap: var(--gap-xl);\n\n    .resource-list__item,\n    .collection-card {\n      height: 100%;\n    }\n  }\n\n  .editorial-collection__spacer {\n    aspect-ratio: 1;\n  }\n\n  @media screen and (max-width: 749px) {\n    .editorial-collection__grid {\n      display: flex;\n      flex-direction: column;\n      gap: var(--gap-2xl);\n    }\n\n    .editorial-collection__spacer {\n      display: none;\n    }\n\n    .editorial-collection__item-0 {\n      width: 66%;\n      align-self: flex-start;\n      aspect-ratio: 4 / 5;\n    }\n\n    .editorial-collection__item-1 {\n      width: 83%;\n      align-self: flex-end;\n      aspect-ratio: 5 / 5;\n    }\n\n    .editorial-collection__item-2 {\n      width: 83%;\n      align-self: flex-start;\n      aspect-ratio: 8 / 6;\n    }\n\n    .editorial-collection__item-3 {\n      width: 100%;\n      align-self: center;\n      aspect-ratio: 8 / 6;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/editorial-product-grid.liquid",
    "content": "{%- doc -%}\n  Renders a grid and places items inside of it using an editorial layout.\n\n  @param {object} items - An array of HTML strings for the product list items\n\n  @example\n  {% render 'editorial-product-grid', items: items %}\n{%- enddoc -%}\n\n<div class=\"editorial-product__grid\">\n  <div class=\"editorial-product__spacer\"></div>\n\n  {% for item in items %}\n    {% liquid\n      assign current_grid_index = forloop.index0 | divided_by: 8\n      assign current_item_index = forloop.index0 | modulo: 8\n\n      case current_item_index\n        when 0\n          assign grid_column = '1 / span 7'\n          assign grid_row = 1\n          assign grid_row_span = 6\n        when 1\n          assign grid_column = '9 / span 4'\n          assign grid_row = 5\n          assign grid_row_span = 5\n        when 2\n          assign grid_column = '2 / span 5'\n          assign grid_row = 8\n          assign grid_row_span = 5\n        when 3\n          assign grid_column = '5 / span 8'\n          assign grid_row = 14\n          assign grid_row_span = 6\n        when 4\n          assign grid_column = '1 / span 7'\n          assign grid_row = 21\n          assign grid_row_span = 6\n        when 5\n          assign grid_column = '9 / span 4'\n          assign grid_row = 25\n          assign grid_row_span = 5\n        when 6\n          assign grid_column = '2 / span 5'\n          assign grid_row = 28\n          assign grid_row_span = 5\n        when 7\n          assign grid_column = '3 / span 8'\n          assign grid_row = 34\n          assign grid_row_span = 6\n      endcase\n\n      assign full_grid_rows = current_grid_index | times: 40\n      assign grid_row = grid_row | plus: full_grid_rows\n    %}\n    <div\n      class=\"editorial-product__item-{{ forloop.index0 | modulo: 4 }}\"\n      style=\"grid-column: {{ grid_column }}; grid-row: {{ grid_row }} / span {{ grid_row_span }};\"\n    >\n      {{ item }}\n    </div>\n  {% endfor %}\n</div>\n\n{% stylesheet %}\n  .editorial-product__grid {\n    display: grid;\n    grid-template-columns: repeat(12, 1fr);\n    grid-auto-rows: 1fr;\n    gap: var(--gap-xl);\n\n    /* Make the aspect ratio super high on width, then increase the height of\n     * slideshow containers until they fill all the available space */\n    .card-gallery {\n      /* stylelint-disable-next-line declaration-no-important */\n      --gallery-aspect-ratio: 99 !important;\n    }\n\n    .card-gallery,\n    slideshow-component,\n    slideshow-container,\n    slideshow-slides {\n      height: 100%;\n    }\n  }\n\n  .editorial-product__spacer {\n    aspect-ratio: 1;\n  }\n\n  @media screen and (max-width: 749px) {\n    .editorial-product__grid {\n      display: flex;\n      flex-direction: column;\n      gap: var(--gap-2xl);\n    }\n\n    .editorial-product__spacer {\n      display: none;\n    }\n\n    .editorial-product__item-0 {\n      width: 83%;\n      align-self: flex-start;\n      aspect-ratio: 7 / 6;\n    }\n\n    .editorial-product__item-1 {\n      width: 83%;\n      align-self: flex-end;\n      aspect-ratio: 4 / 5;\n    }\n\n    .editorial-product__item-2 {\n      width: 66%;\n      align-self: flex-start;\n      aspect-ratio: 5 / 5;\n    }\n\n    .editorial-product__item-3 {\n      width: 100%;\n      aspect-ratio: 8 / 6;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/filter-remove-buttons.liquid",
    "content": "{%- doc -%}\n  Renders filter remove buttons.\n\n  Accepts:\n\n  @param {object} filters - The filters to render\n  @param {boolean} show_filter_label - Whether to show the filter label\n  @param {string} results_url - The results URL\n  @param {boolean} should_show_clear_all - Whether to show the clear all button\n{%- enddoc -%}\n\n<div class=\"facets-remove facets-remove--mobile-and-vertical\">\n  {%- for filter in filters -%}\n    {% if filter.type == 'price_range' and filter.min_value.value != null or filter.max_value.value != null %}\n      {%- liquid\n        assign is_active = true\n      -%}\n      <facet-remove-component\n        class=\"\n          pills__pill\n          pills__pill--desktop-small\n          facets-remove__pill\n        \"\n        data-url=\"{{ filter.url_to_remove }}\"\n        tabindex=\"0\"\n        role=\"button\"\n        on:click=\"/removeFilter?form=\"\n        on:keydown=\"/removeFilter?form=\"\n      >\n        {%- if filter.min_value.value != null and filter.max_value.value != null %}\n          {{- filter.min_value.value | money -}}\n          –\n          {{- filter.max_value.value | money -}}\n        {%- elsif filter.min_value.value != null -%}\n          {{ filter.min_value.value | money }}–{{ filter.range_max | money }}\n        {%- elsif filter.max_value.value != null -%}\n          {{- 0 | money -}}\n          –\n          {{- filter.max_value.value | money -}}\n        {%- endif -%}\n        <span class=\"svg-wrapper svg-wrapper--smaller\">\n          {{- 'icon-filters-close.svg' | inline_asset_content -}}\n        </span>\n        <span class=\"visually-hidden\">{{ 'actions.remove' | t }}</span>\n      </facet-remove-component>\n    {% else %}\n      {%- for value in filter.active_values -%}\n        {%- liquid\n          assign is_active = true\n        -%}\n        <facet-remove-component\n          class=\"\n            pills__pill\n            pills__pill--desktop-small\n            facets-remove__pill\n            {% if value.swatch %}pills__pill--swatch{% endif %}\n          \"\n          data-url=\"{{ value.url_to_remove }}\"\n          tabindex=\"0\"\n          role=\"button\"\n          on:click=\"/removeFilter?form=\"\n          on:keydown=\"/removeFilter?form=\"\n          {% if is_first_filter and forloop.first %}\n            autofocus\n          {% endif %}\n        >\n          {% if value.swatch %}\n            {% render 'swatch', swatch: value.swatch, mode: 'pill' %}\n          {% endif %}\n\n          {% if filter.type == 'boolean' or show_filter_label %}\n            {{ filter.label | escape }}: {{ value.label | escape }}\n          {% else %}\n            {{ value.label | escape }}\n          {% endif %}\n\n          <span class=\"svg-wrapper svg-wrapper--smaller\">\n            {{- 'icon-filters-close.svg' | inline_asset_content -}}\n          </span>\n          <span class=\"visually-hidden\">{{ 'actions.remove' | t }}</span>\n        </facet-remove-component>\n      {%- endfor -%}\n    {% endif %}\n  {%- endfor -%}\n  {% if should_show_clear_all and is_active %}\n    <facet-remove-component\n      data-url=\"{{ results_url }}\"\n    >\n      <button\n        type=\"button\"\n        class=\"button-unstyled facets__clear-all-link\"\n        ref=\"clearButton\"\n        on:click=\"/removeFilter?form=\"\n        on:keydown=\"/removeFilter?form=\"\n      >\n        {{- 'actions.clear_all' | t -}}\n      </button>\n    </facet-remove-component>\n  {% endif %}\n</div>\n\n{% stylesheet %}\n  /* Facets - Remove buttons */\n  .facets-remove {\n    --variant-picker-swatch-width: 20px;\n    --variant-picker-swatch-height: 20px;\n\n    display: none;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: var(--gap-xs);\n    padding: 0 var(--drawer-padding);\n    margin: 0;\n\n    @media screen and (min-width: 750px) {\n      --variant-picker-swatch-width: 16px;\n      --variant-picker-swatch-height: 16px;\n\n      gap: var(--gap-2xs);\n    }\n  }\n\n  .facets-remove:has(facet-remove-component) {\n    display: flex;\n    margin-block-start: var(--margin-2xs);\n    margin-block-end: var(--margin-md);\n  }\n\n  .facets:not(.facets--drawer) .facets-remove--mobile-and-vertical {\n    @media screen and (min-width: 750px) {\n      padding: 0;\n    }\n  }\n\n  .facets--horizontal .facets-remove--mobile-and-vertical {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .facets-remove__pill {\n    .svg-wrapper,\n    .swatch {\n      flex-shrink: 0;\n    }\n  }\n\n  .facets--horizontal .facets-remove {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/fonts.liquid",
    "content": "{% # theme-check-disable %}\n{%- unless settings.type_body_font.system? -%}\n  <link\n    rel=\"preload\"\n    as=\"font\"\n    href=\"{{ settings.type_body_font | font_url }}\"\n    type=\"font/woff2\"\n    crossorigin\n    fetchpriority=\"low\"\n  >\n{%- endunless -%}\n{%- unless settings.type_subheading_font.system? -%}\n  <link\n    rel=\"preload\"\n    as=\"font\"\n    href=\"{{ settings.type_subheading_font | font_url }}\"\n    type=\"font/woff2\"\n    crossorigin\n    fetchpriority=\"low\"\n  >\n{%- endunless -%}\n{%- unless settings.type_heading_font.system? -%}\n  <link\n    rel=\"preload\"\n    as=\"font\"\n    href=\"{{ settings.type_heading_font | font_url }}\"\n    type=\"font/woff2\"\n    crossorigin\n    fetchpriority=\"low\"\n  >\n{%- endunless -%}\n{%- unless settings.type_accent_font.system? -%}\n  <link\n    rel=\"preload\"\n    as=\"font\"\n    href=\"{{ settings.type_accent_font | font_url }}\"\n    type=\"font/woff2\"\n    crossorigin\n    fetchpriority=\"low\"\n  >\n{%- endunless -%}\n{% # theme-check-enable %}\n"
  },
  {
    "path": "snippets/format-price.liquid",
    "content": "{%- doc -%}\n  Formats a price value with or without currency code based on settings\n\n  @param {number} price - The price to format (defaults to 0 if not provided)\n  @param {string} [type] - Type of price formatting (defaults to 'regular', only 'per_item' has special behavior)\n\n  @example\n  {% render 'format-price', price: variant.price %}\n  {% render 'format-price', price: variant.price, type: 'per_item' %}\n  {% render 'format-price', price: variant.compare_at_price %}\n{%- enddoc -%}\n\n{% liquid\n  assign price_value = price | default: 0\n  assign price_type = type | default: 'regular'\n\n  assign show_currency = settings.currency_code_enabled_product_pages\n\n  if show_currency\n    assign formatted_price = price_value | money_with_currency\n  else\n    assign formatted_price = price_value | money\n  endif\n\n  if price_type == 'per_item'\n    assign per_item_text = 'content.quantity_per_item' | t\n    assign formatted_price = formatted_price | append: per_item_text\n  endif\n%}\n\n{{- formatted_price -}}\n"
  },
  {
    "path": "snippets/gap-style.liquid",
    "content": "{%- doc -%}\n  Renders the CSS variables for the `gap` styles needed for responsive scaling.\n  Intended for use with the `gap-style` class.\n\n  @param {number} value - The base or desktop gap value to use, in pixels.\n  @param {string} [name] - The name of the CSS variable to set. Default: 'gap'\n  @param {number} [scale_min] - Value above which gap scaling will be applied. Default: 20\n  @param {boolean} [disable_scaling] - If true, disables scaling and outputs the original value.\n\n  @example\n  <div class=\"gap-style\" style=\"{% render 'gap-style', value: block.settings.gap %}\">\n{%- enddoc -%}\n\n{%- liquid\n  assign min = scale_min | default: 24\n  assign name = name | default: 'gap'\n-%}\n\n{%- if value != blank -%}\n  {%- if disable_scaling != true and value > min -%}\n    --{{ name }}: max({{ min }}px, calc(var(--gap-scale, 1.0) * {{ value }}px));\n  {%- else -%}\n    --{{ name }}: {{ value }}px;\n  {%- endif -%}\n{%- endif -%}\n"
  },
  {
    "path": "snippets/gift-card-recipient-form.liquid",
    "content": "{% comment %}\n  Renders gift card recipient form.\n  Accepts:\n  - product: {Object} product object.\n  - form: {Object} the product form object.\n  - section: {Object} section to which this snippet belongs.\n\n  Usage:\n  {% render 'gift-card-recipient-form', product: product, form: form, section: section, block: block %}\n{% endcomment %}\n\n<script\n  src=\"{{ 'gift-card-recipient-form.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<gift-card-recipient-form\n  class=\"recipient-form\"\n  data-section-id=\"{{ section.id }}\"\n  data-product-variant-id=\"{{ product.selected_or_first_available_variant.id }}\"\n>\n  <fieldset\n    class=\"gift-card-form-option\"\n  >\n    <legend class=\"recipient-form__send-to\">\n      {{ 'content.recipient_form_send_to' | t }}\n    </legend>\n    <label class=\"gift-card-form-option__button-label\">\n      <input\n        type=\"radio\"\n        id=\"My-email-button-{{ block.id }}\"\n        name=\"gift-card-delivery-{{ block.id }}\"\n        ref=\"myEmailButton\"\n        on:change=\"/toggleRecipientForm/self\"\n        value=\"self\"\n        checked\n        aria-controls=\"recipient-fields\"\n      >\n      <span>{{- 'content.recipient_form_email_label_my_email' | t -}}</span>\n    </label>\n    <label class=\"gift-card-form-option__button-label\">\n      <input\n        type=\"radio\"\n        id=\"Recipient-email-button-{{ block.id }}\"\n        name=\"gift-card-delivery-{{ block.id }}\"\n        ref=\"recipientEmailButton\"\n        on:change=\"/toggleRecipientForm/recipient_form\"\n        value=\"recipient_form\"\n        aria-controls=\"recipient-fields\"\n      >\n      <span>{{ 'content.recipient_form_email_label' | t }}</span>\n    </label>\n  </fieldset>\n  <div\n    ref=\"recipientFields\"\n    class=\"recipient-fields\"\n    hidden\n  >\n    <div>\n      <div class=\"field\">\n        <input\n          ref=\"recipientEmail\"\n          class=\"recipient-fields__input\"\n          id=\"Recipient-email-{{ block.id }}\"\n          type=\"email\"\n          placeholder=\"{{ 'content.recipient_form_email_address' | t }}\"\n          name=\"properties[Recipient email]\"\n          autocorrect=\"off\"\n          autocapitalize=\"off\"\n          autocomplete=\"email\"\n          pattern=\"[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}\"\n          value=\"{{ form.email }}\"\n          {% if form.errors contains 'email' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"RecipientForm-email-error-{{ block.id }}\"\n          {% endif %}\n        >\n      </div>\n\n      <div\n        ref=\"emailError\"\n        class=\"recipient-form__message{% unless form.errors contains 'email' %} hidden{% endunless %}\"\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n        <span>\n          {%- if form.errors contains 'email' -%}\n            {{ form.errors.messages.email }}.\n          {%- endif -%}\n        </span>\n      </div>\n    </div>\n\n    <div>\n      <div class=\"field\">\n        <input\n          ref=\"recipientName\"\n          class=\"recipient-fields__input\"\n          autocomplete=\"name\"\n          type=\"text\"\n          id=\"Recipient-name-{{ block.id }}\"\n          name=\"properties[Recipient name]\"\n          placeholder=\"{{ 'content.recipient_form_name_label' | t }}\"\n          value=\"{{ form.name }}\"\n          maxlength=\"100\"\n          {% if form.errors contains 'name' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"RecipientForm-name-error-{{ block.id }}\"\n          {% endif %}\n        >\n      </div>\n\n      <div\n        ref=\"nameError\"\n        class=\"recipient-form__message{% unless form.errors contains 'name' %} hidden{% endunless %}\"\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n        <span>\n          {%- if form.errors contains 'name' -%}\n            {{ form.errors.messages.name }}.\n          {%- endif -%}\n        </span>\n      </div>\n    </div>\n\n    <div>\n      {%- assign max_chars_message = 200 -%}\n      {%- assign current_chars = form.message | size -%}\n      {%- assign max_chars_message_rendered = 'content.recipient_form_characters_used'\n        | t: used_chars: current_chars, max_chars: max_chars_message\n      -%}\n      {%- assign message_label_rendered = 'content.recipient_form_message' | t -%}\n      <div class=\"field\">\n        <textarea\n          ref=\"recipientMessage\"\n          rows=\"10\"\n          id=\"Recipient-message-{{ block.id }}\"\n          class=\"recipient-fields__input recipient-fields__textarea\"\n          name=\"properties[Message]\"\n          maxlength=\"{{ max_chars_message }}\"\n          placeholder=\"{{ 'content.recipient_form_message' | t }}\"\n          aria-label=\"{{ message_label_rendered }} {{ max_chars_message_rendered }}\"\n          {% if form.errors contains 'message' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"RecipientForm-message-error-{{ block.id }}\"\n          {% endif %}\n        >{{ form.message }}</textarea>\n\n        <label\n          for=\"Recipient-message-{{ block.id }}\"\n          class=\"recipient-form-field-label\"\n        >\n          <span\n            ref=\"characterCount\"\n            data-template=\"{{ 'content.recipient_form_characters_used' | t: used_chars: '[current]', max_chars: '[max]' }}\"\n            data-max=\"{{ max_chars_message }}\"\n          >\n            {{- max_chars_message_rendered -}}\n          </span>\n        </label>\n      </div>\n\n      <div\n        ref=\"messageError\"\n        class=\"recipient-form__message{% unless form.errors contains 'message' %} hidden{% endunless %}\"\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n        <span>\n          {%- if form.errors contains 'message' -%}\n            {{ form.errors.messages.message }}.\n          {%- endif -%}\n        </span>\n      </div>\n    </div>\n\n    <div>\n      <div class=\"field field--send-on\">\n        <div for=\"Recipient-send-on-{{ block.id }}\">\n          {{ 'content.recipient_form_send_on_label' | t }}\n        </div>\n        <input\n          ref=\"recipientSendOn\"\n          class=\"recipient-fields__input\"\n          autocomplete=\"send_on\"\n          type=\"date\"\n          id=\"Recipient-send-on-{{ block.id }}\"\n          name=\"properties[Send on]\"\n          placeholder=\"{{ 'content.recipient_form_send_on_label' | t }}\"\n          pattern=\"\\d{4}-\\d{2}-\\d{2}\"\n          value=\"{{ form.send_on }}\"\n          {% if form.errors contains 'send_on' %}\n            aria-invalid=\"true\"\n            aria-describedby=\"RecipientForm-send_on-error-{{ block.id }}\"\n          {% endif %}\n        >\n      </div>\n      <div\n        ref=\"sendOnError\"\n        class=\"recipient-form__message{% unless form.errors contains 'send_on' %} hidden{% endunless %}\"\n      >\n        {{- 'icon-error.svg' | inline_asset_content -}}\n        <span>\n          {%- if form.errors contains 'send_on' -%}\n            {{ form.errors.messages.send_on }}.\n          {%- endif -%}\n        </span>\n      </div>\n    </div>\n  </div>\n  <input\n    ref=\"timezoneOffset\"\n    type=\"hidden\"\n    name=\"properties[__shopify_offset]\"\n    value=\"\"\n    id=\"Recipient-timezone-offset-{{ block.id }}\"\n    disabled\n  >\n  <div\n    ref=\"liveRegion\"\n    role=\"status\"\n    aria-atomic=\"true\"\n    aria-live=\"assertive\"\n    class=\"visually-hidden\"\n  ></div>\n</gift-card-recipient-form>\n\n{% stylesheet %}\n  .recipient-form {\n    --options-border-radius: var(--variant-picker-button-radius);\n    --options-border-width: var(--variant-picker-button-border-width);\n\n    display: flex;\n    flex-direction: column;\n    padding-bottom: var(--padding-2xl);\n  }\n\n  .recipient-form__send-to {\n    padding: 0;\n    margin-block-end: var(--margin-xs);\n  }\n\n  .gift-card-form-option {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: var(--gap-sm);\n    padding: 0;\n    border: none;\n  }\n\n  .gift-card-form-option__button-label {\n    display: flex;\n    align-items: center;\n    position: relative;\n    padding-block: var(--padding-sm);\n    padding-inline: var(--padding-lg);\n    border: var(--style-border-width) solid var(--color-variant-border);\n    border-radius: var(--options-border-radius);\n    border-width: var(--options-border-width);\n    overflow: clip;\n    justify-content: center;\n    min-width: auto;\n    background-color: var(--color-variant-background);\n    color: var(--color-variant-text);\n    transition: background-color var(--animation-speed) var(--animation-easing),\n      border-color var(--animation-speed) var(--animation-easing);\n\n    &:hover {\n      background-color: var(--color-variant-hover-background);\n      border-color: var(--color-variant-hover-border);\n      color: var(--color-variant-hover-text);\n    }\n  }\n\n  .gift-card-form-option__button-label:has(:focus-visible) {\n    --variant-picker-stroke-color: var(--color-foreground);\n\n    border-color: var(--color-foreground);\n    outline: var(--focus-outline-width) solid var(--color-foreground);\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .gift-card-form-option__button-label:has(:checked) {\n    color: var(--color-selected-variant-text);\n    background-color: var(--color-selected-variant-background);\n    border-color: var(--color-selected-variant-border);\n    transition: background-color var(--animation-speed) var(--animation-easing),\n      border-color var(--animation-speed) var(--animation-easing);\n\n    &:hover {\n      background-color: var(--color-selected-variant-hover-background);\n      border-color: var(--color-selected-variant-hover-border);\n      color: var(--color-selected-variant-hover-text);\n    }\n  }\n\n  .gift-card-form-option__button-label input {\n    /* remove the checkbox from the page flow */\n    position: absolute;\n\n    /* set the dimensions to match those of the label */\n    inset: 0;\n\n    /* hide it */\n    opacity: 0;\n    margin: 0;\n    cursor: pointer;\n    width: 100%;\n    height: 100%;\n  }\n\n  .recipient-fields {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-sm);\n    transition: opacity 0.3s var(--animation-easing);\n    padding-block-start: var(--padding-xl);\n  }\n\n  .recipient-fields[hidden] {\n    display: none;\n  }\n\n  .field--send-on {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .recipient-form__message {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    gap: var(--gap-sm);\n    margin-top: var(--margin-sm);\n  }\n\n  .recipient-form-field-label {\n    position: absolute;\n    left: var(--padding-sm);\n    bottom: var(--padding-sm);\n    font-style: italic;\n    color: var(--color-input-text);\n  }\n\n  .recipient-fields__textarea {\n    min-height: 5.5rem;\n    overflow-y: auto;\n\n    /* Space for the character count */\n    padding-bottom: calc(var(--padding-sm) * 3);\n    scroll-padding-bottom: calc(var(--padding-sm) * 3);\n  }\n\n  .recipient-fields__input {\n    flex-grow: 1;\n    transition: background-color var(--animation-speed) ease, border-color var(--animation-speed) ease;\n    padding: var(--input-padding);\n    background-color: var(--color-input-background);\n    color: var(--color-input-text);\n    text-align: left;\n    font-size: var(--font-paragraph--size);\n    border: var(--style-border-width-inputs) solid var(--color-input-border);\n    border-radius: var(--style-border-radius-inputs);\n\n    &:autofill {\n      background-color: var(--color-input-background);\n      color: var(--color-input-text);\n    }\n\n    &:is(:focus, :hover) {\n      background-color: var(--color-input-hover-background);\n    }\n\n    &:is(:focus) {\n      outline-color: var(--color-input-background);\n    }\n  }\n\n  /* Date picker calendar icon\n   * Safari doesn't show the icon and Firefox correctly applies the color from the input field.\n   * Webkit browsers need the mask-image trick to use the correct icon color.\n   */\n  .field--send-on .recipient-fields__input::-webkit-calendar-picker-indicator {\n    cursor: pointer;\n    mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' viewBox='0 0 24 24' %3E%3Cg%3E%3Cpath d='M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");\n    background-repeat: no-repeat;\n    background-image: none;\n    background-color: currentColor;\n    mask-type: match-source;\n  }\n\n  /* For Webkit browsers - text cursor for input area */\n  .field--send-on .recipient-fields__input::-webkit-datetime-edit {\n    cursor: text;\n  }\n\n  .field--send-on .recipient-fields__input::-webkit-datetime-edit-year-field,\n  .field--send-on .recipient-fields__input::-webkit-datetime-edit-month-field,\n  .field--send-on .recipient-fields__input::-webkit-datetime-edit-day-field {\n    /* Override the disabled color */\n    color: var(--color-input-text);\n  }\n\n  /* Fallback for other browsers */\n  .field--send-on .recipient-fields__input {\n    cursor: text;\n  }\n\n  /* For Firefox - entire field is clickable, so show pointer */\n  @supports (-moz-appearance: none) {\n    .field--send-on .recipient-fields__input {\n      cursor: pointer;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/grid-density-controls.liquid",
    "content": "{%- doc -%}\n  Renders the grid density controls.\n\n  @param {string} viewport - The viewport to render the controls for, either 'mobile' or 'desktop'.\n\n  @example\n  {% render 'grid-density-controls', viewport: 'desktop' %}\n{%- enddoc -%}\n\n<div class=\"column-options-wrapper\">\n  <fieldset class=\"column-options\">\n    <legend class=\"column-options__legend visually-hidden\">\n      {{ 'content.grid_view.grid_fieldset' | t }}\n    </legend>\n\n    {% if viewport == 'mobile' %}\n      <label class=\"column-options__option\">\n        <input\n          type=\"radio\"\n          name=\"grid-mobile\"\n          value=\"mobile-single\"\n          class=\"column-options__option-input\"\n          aria-label=\"{{ 'content.grid_view.single_item' | t }}\"\n          on:change=\"results-list/updateLayout\"\n        >\n        <span class=\"column-picker column-picker-mobile--single\">\n          {{- 'icon-one-col-mobile.svg' | inline_asset_content -}}\n        </span>\n      </label>\n\n      <label class=\"column-options__option\">\n        <input\n          type=\"radio\"\n          class=\"column-options__option-input\"\n          name=\"grid-mobile\"\n          value=\"default\"\n          checked\n          aria-label=\"{{ 'content.grid_view.default_view' | t }}\"\n          data-grid-layout=\"mobile-option\"\n          on:change=\"results-list/updateLayout\"\n        >\n        <span class=\"column-picker column-picker-mobile--double\">\n          {{- 'icon-grid-default.svg' | inline_asset_content -}}\n        </span>\n      </label>\n\n    {% elsif viewport == 'desktop' %}\n      <label class=\"column-options__option\">\n        <input\n          type=\"radio\"\n          name=\"grid\"\n          value=\"default\"\n          class=\"column-options__option-input\"\n          checked\n          aria-label=\"{{ 'content.grid_view.default_view' | t }}\"\n          data-grid-layout=\"desktop-default-option\"\n          on:change=\"results-list/updateLayout\"\n          data-skip-node-update\n        >\n        <span class=\"column-picker column-picker--default\">\n          {{- 'icon-grid-default.svg' | inline_asset_content -}}\n        </span>\n      </label>\n\n      <label class=\"column-options__option\">\n        <input\n          type=\"radio\"\n          name=\"grid\"\n          value=\"zoom-out\"\n          class=\"column-options__option-input\"\n          aria-label=\"{{ 'content.grid_view.zoom_out' | t }}\"\n          on:change=\"results-list/updateLayout\"\n          data-skip-node-update\n        >\n        <span class=\"column-picker column-picker--zoom-out\">\n          {{- 'icon-grid-dense.svg' | inline_asset_content -}}\n        </span>\n      </label>\n    {% endif %}\n  </fieldset>\n</div>\n\n{% stylesheet %}\n  .column-options-wrapper {\n    --icon-offset: -3px;\n\n    display: flex;\n    gap: var(--gap-sm);\n    min-width: fit-content;\n    justify-content: flex-end;\n    height: var(--minimum-touch-target);\n    align-items: center;\n    margin-right: var(--icon-offset);\n  }\n\n  .column-options-wrapper:only-child {\n    margin-left: auto;\n  }\n\n  .facets__form-wrapper > .column-options-wrapper:first-child {\n    margin-left: auto;\n  }\n\n  .facets .column-options-wrapper {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  .column-options {\n    display: flex;\n    flex-wrap: wrap;\n    gap: var(--gap-xs);\n    margin: 0;\n    padding: 0;\n    border: none;\n\n    @media screen and (min-width: 750px) {\n      gap: var(--gap-2xs);\n    }\n  }\n\n  .column-options__option {\n    display: none;\n    position: relative;\n  }\n\n  .column-options__option:has(.column-picker-mobile--single),\n  .column-options__option:has(.column-picker-mobile--double) {\n    @media screen and (max-width: 749px) {\n      display: flex;\n    }\n  }\n\n  .column-options__option:has(.column-picker--default),\n  .column-options__option:has(.column-picker--zoom-out) {\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  /* Override base rule for grid density controls - only when visible */\n  .column-options-wrapper .column-options__option:has(input[type=\"radio\"]):has(.column-picker-mobile--single),\n  .column-options-wrapper .column-options__option:has(input[type=\"radio\"]):has(.column-picker-mobile--double) {\n    @media screen and (max-width: 749px) {\n      display: flex;\n    }\n  }\n\n  .column-options-wrapper .column-options__option:has(input[type=\"radio\"]):has(.column-picker--default),\n  .column-options-wrapper .column-options__option:has(input[type=\"radio\"]):has(.column-picker--zoom-out) {\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  .column-options__legend {\n    padding: 0;\n    margin: 0;\n  }\n\n  .column-options__option-input {\n    /* this is a repeating pattern a bit with the variant picker buttons */\n\n    /* remove the checkbox from the page flow */\n    position: absolute;\n\n    /* set the dimensions to match those of the label */\n    inset: 0;\n\n    /* hide it */\n    opacity: 0;\n    margin: 0;\n    padding: 0;\n    width: auto;\n    height: auto;\n    aspect-ratio: unset;\n    border: none;\n    border-radius: 0;\n    background: transparent;\n    appearance: auto;\n    display: block;\n    cursor: pointer;\n  }\n\n  .column-picker {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n    padding: var(--padding-2xs);\n    border-radius: var(--style-border-radius-xs);\n    transition: background-color var(--animation-speed) ease, color var(--animation-speed) ease;\n  }\n\n  .column-options__option:hover .column-picker {\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  .column-options__option-input:checked ~ .column-picker {\n    color: rgb(var(--color-foreground-rgb));\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/group.liquid",
    "content": "{%- doc -%}\n  Renders block content for all blocks that extend the group block.\n\n  @param {string} children - The DOM content of the group block.\n  @param {object} settings - The settings of the group block.\n  @param {string} shopify_attributes - String with Shopify attributes for the editor.\n  @param {string} [class] - Custom classes for the group block.\n  @param {string} [style] - Custom inline styles for the group block.\n\n  @example\n  {% render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}\n{%- enddoc -%}\n\n<div\n  class=\"\n    group-block\n    group-block--height-{{ settings.height }}\n    group-block--width-{{ settings.width }}\n    border-style\n    spacing-style\n    size-style\n    {% if settings.inherit_color_scheme == false %} color-{{ settings.color_scheme }}{% endif %}\n    {{ class }}\n  \"\n  style=\"\n    {% render 'border-override', settings: settings %}\n    {% render 'spacing-style', settings: settings %}\n    {% render 'size-style', settings: settings %}\n    {{ style }}\n  \"\n  {{ shopify_attributes }}\n  data-testid=\"group-block\"\n>\n  {%- if settings.link != blank -%}\n    <a\n      href=\"{{ settings.link }}\"\n      class=\"group-block__link\"\n      {% if settings.open_in_new_tab %}\n        target=\"_blank\" rel=\"noopener\"\n      {% endif %}\n    ></a>\n  {%- endif -%}\n\n  <div class=\"group-block__media-wrapper\">\n    {% render 'background-media',\n      background_media: settings.background_media,\n      background_video: settings.video,\n      background_video_position: settings.video_position,\n      background_image: settings.background_image,\n      background_image_position: settings.background_image_position,\n      placeholder: settings.placeholder\n    %}\n    {% if settings.toggle_overlay %}\n      {% render 'overlay', settings: settings, layer: '0' %}\n    {% endif %}\n  </div>\n\n  <div\n    class=\"\n      group-block-content\n      {% if request.design_mode %}group-block-content--design-mode{% endif %}\n      layout-panel-flex\n      layout-panel-flex--{{ settings.content_direction | default: 'column' }}\n      {% if settings.vertical_on_mobile %} mobile-column{% endif %}\n    \"\n    style=\"{% render 'layout-panel-style', settings: settings %}\"\n  >\n    {{- children -}}\n  </div>\n</div>\n\n{% stylesheet %}\n  .group-block__link {\n    position: absolute;\n    inset: 0;\n  }\n\n  .group-block__link ~ :is(.group-block-content, .group-block__media-wrapper) {\n    pointer-events: none;\n\n    :is(a, button, input, textarea, select) {\n      pointer-events: auto;\n    }\n  }\n\n  /* Needs the .group-block__link ~ to be specific enough to take effect. */\n  .group-block__link ~ .group-block-content--design-mode {\n    pointer-events: auto;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/header-actions.liquid",
    "content": "<script\n  type=\"module\"\n  src=\"{{ 'cart-icon.js' | asset_url }}\"\n  fetchpriority=\"low\"\n></script>\n\n{% capture cart_icon %}\n  <cart-icon\n    class=\"header-actions__cart-icon{% if display_style == 'text' %} header-actions__cart-icon--text{% endif %}{% unless cart == empty %} header-actions__cart-icon--has-cart{% endunless %}\"\n    data-testid=\"cart-icon\"\n  >\n    <span class=\"{% if display_style == 'icon' %}hidden{% else %}mobile:hidden{% endif %}\">\n      {{ 'content.cart_title' | t }}\n    </span>\n\n    <span\n      class=\"svg-wrapper {% if display_style != 'icon' %}desktop:hidden{% endif %}\"\n      aria-hidden=\"true\"\n    >\n      {{ 'icon-cart.svg' | inline_asset_content }}\n    </span>\n\n    {% render 'cart-bubble', limit: 100, live_region: true %}\n  </cart-icon>\n{% endcapture %}\n\n{% capture account_icon %}\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"15\"\n    height=\"17\"\n    viewBox=\"0 0 15 17\"\n    fill=\"none\"\n    slot=\"signed-out-avatar\"\n    class=\"account-button__icon\"\n  >\n    <path\n      stroke=\"currentColor\"\n      stroke-linejoin=\"round\"\n      stroke-width=\"var(--icon-stroke-width)\"\n      d=\"M10.375 3.813a3.063 3.063 0 1 1-6.125 0 3.063 3.063 0 0 1 6.125 0ZM7.313 9.5c-3.667 0-6.24 2.691-6.563 6.125h13.125C13.552 12.191 10.979 9.5 7.312 9.5Z\"\n    />\n  </svg>\n{% endcapture %}\n\n<header-actions\n  {% if display_style == 'text' %}\n    class=\"header-actions--text\"\n  {% endif %}\n  {{- block.shopify_attributes -}}\n>\n  {% if shop.customer_accounts_enabled %}\n    {% liquid\n      assign account_actions_style = ''\n      if display_style == 'text' and section\n        assign actions_font = section.settings.actions_font | default: 'body'\n        assign font_obj = settings.type_heading_font\n        case actions_font\n          when 'body'\n            assign font_obj = settings.type_body_font\n          when 'subheading'\n            assign font_obj = settings.type_subheading_font\n          when 'accent'\n            assign font_obj = settings.type_accent_font\n        endcase\n        assign font_family = font_obj.family | append: ', ' | append: font_obj.fallback_families\n        assign font_family_safe = font_family | replace: '\"', \"'\"\n        assign account_actions_style = '--header-actions-font-family: ' | append: font_family_safe | append: '; --header-actions-font-weight: ' | append: font_obj.weight | append: ';'\n      endif\n    %}\n    <div\n      class=\"account-button header-actions__action{% if display_style == 'text' %} account-button--text{% endif %} color-{{ settings.popover_color_scheme }}\"\n    >\n      <shopify-account\n        menu=\"{{ customer_account_menu }}\"\n        {% if account_actions_style != blank %}\n          style=\"{{ account_actions_style }}\"\n        {% endif %}\n      >\n        {% if customer %}\n          <div class=\"account-button__fallback\"></div>\n        {% else %}\n          <span\n            slot=\"signed-out-avatar\"\n            class=\"account-button__text header-actions__text-style {% if display_style == 'icon' %}hidden{% else %}mobile:hidden{% endif %}\"\n          >\n            {{ 'content.account_title' | t }}\n          </span>\n\n          <span\n            slot=\"signed-out-avatar\"\n            class=\"{% if display_style != 'icon' %}desktop:hidden{% endif %}\"\n            aria-hidden=\"true\"\n          >\n            {{ account_icon }}\n          </span>\n        {% endif %}\n      </shopify-account>\n    </div>\n  {% endif %}\n\n  {% if settings.cart_type == 'drawer' and template.name != 'cart' %}\n    <script\n      src=\"{{ 'cart-drawer.js' | asset_url }}\"\n      type=\"module\"\n      fetchpriority=\"low\"\n    ></script>\n\n    {% capture empty_cart_drawer_content %}\n      <div class=\"cart-drawer__header\">\n        <button\n          ref=\"closeButton\"\n          on:click=\"cart-drawer-component/close\"\n          class=\"button close-button cart-drawer__close-button button-unstyled\"\n          aria-label=\"{{ 'actions.close_dialog' | t }}\"\n        >\n          <span class=\"svg-wrapper\">\n            {{- 'icon-close.svg' | inline_asset_content -}}\n          </span>\n        </button>\n      </div>\n\n      <div\n        class=\"cart-drawer__content\"\n        aria-label=\"{{ 'accessibility.cart' | t }}\"\n      >\n        <h2\n          class=\"cart-drawer__heading h4 cart-drawer__heading--empty\"\n          id=\"cart-drawer-heading-empty\"\n        >\n          {{ 'content.your_cart_is_empty' | t }}\n        </h2>\n\n        <div class=\"cart-drawer__items\">\n          {% render 'cart-products', force_empty: true %}\n        </div>\n      </div>\n    {% endcapture %}\n\n    <cart-drawer-component\n      class=\"cart-drawer{% if display_style == 'text' %} cart-drawer--text{% endif %}\"\n      {{ block.shopify_attributes }}\n      {% if settings.auto_open_cart_drawer %}\n        auto-open\n      {% endif %}\n    >\n      <template id=\"empty-cart-template\">\n        {{ empty_cart_drawer_content }}\n      </template>\n      <button\n        class=\"header-actions__action button-unstyled{% if display_style == 'text' %} header-actions__text-style{% endif %}\"\n        on:click=\"/open\"\n        aria-haspopup=\"dialog\"\n        aria-label=\"{{ 'accessibility.cart' | t }}\"\n        aria-describedby=\"cart-bubble-text\"\n        data-testid=\"cart-drawer-trigger\"\n      >\n        {{ cart_icon }}\n      </button>\n\n      <dialog\n        ref=\"dialog\"\n        class=\"cart-drawer__dialog dialog-modal dialog-drawer color-{{ settings.drawer_color_scheme }}{% if cart.empty? %} cart-drawer--empty{%endif%}\"\n        data-testid=\"cart-drawer-dialog\"\n        aria-labelledby=\"{% if cart.empty? %}cart-drawer-heading-empty{% else %}cart-drawer-heading{% endif %}\"\n        scroll-lock\n        cart-summary-sticky=\"true\"\n      >\n        <div\n          class=\"cart-drawer__inner\"\n          data-hydration-key=\"cart-drawer-inner\"\n        >\n          <cart-items-component\n            class=\"cart-items-component\"\n            data-drawer\n            data-section-id=\"{{ section.id }}\"\n          >\n            {%- if cart.empty? -%}\n              {{ empty_cart_drawer_content }}\n            {%- else -%}\n              <div\n                class=\"cart-drawer__header\"\n                id=\"cart-drawer-header\"\n              >\n                <h2\n                  class=\"cart-drawer__heading h4\"\n                  id=\"cart-drawer-heading\"\n                >\n                  {{ 'content.cart_title' | t }}\n                  {% render 'cart-bubble' %}\n                </h2>\n\n                <button\n                  ref=\"closeButton\"\n                  on:click=\"cart-drawer-component/close\"\n                  class=\"button close-button cart-drawer__close-button button-unstyled\"\n                  aria-label=\"{{ 'actions.close_dialog' | t }}\"\n                >\n                  <span class=\"svg-wrapper\">\n                    {{- 'icon-close.svg' | inline_asset_content -}}\n                  </span>\n                </button>\n              </div>\n\n              <scroll-hint\n                class=\"cart-drawer__content\"\n                aria-label=\"{{ 'accessibility.cart' | t }}\"\n                style=\"--header-height: 60px;\"\n              >\n                <scroll-hint\n                  class=\"cart-drawer__items\"\n                >\n                  {% render 'cart-products', drawer_context: 'drawer' %}\n                </scroll-hint>\n\n                <div\n                  class=\"cart-drawer__summary\"\n                >\n                  {% render 'cart-summary', section_id: section.id %}\n                </div>\n              </scroll-hint>\n            {%- endif -%}\n          </cart-items-component>\n        </div>\n      </dialog>\n    </cart-drawer-component>\n  {% else %}\n    <a\n      href=\"{{ routes.cart_url }}\"\n      class=\"header-actions__action action__cart{% if display_style == 'text' %} header-actions__text-style{% endif %}\"\n      aria-label=\"{{ 'accessibility.cart' | t }}\"\n      aria-describedby=\"cart-bubble-text\"\n    >\n      {{ cart_icon }}\n    </a>\n  {% endif %}\n</header-actions>\n\n{% stylesheet %}\n  .header {\n    --account-offset-top: calc(\n      var(--header-group-height) + (var(--header-height) * var(--transparent-header-offset-boolean))\n    );\n\n    &[data-sticky-state='active'] {\n      --account-offset-top: calc(var(--header-height) - 1px);\n    }\n  }\n\n  .account-button {\n    /* Remove the background color from the color scheme, we want to inherit the color of the header */\n    background: transparent;\n  }\n\n  .account-button__icon,\n  .account-button__text {\n    color: var(--color-account-icon);\n    transition: color var(--header-content-transition-timing);\n    -webkit-font-smoothing: antialiased;\n  }\n\n  shopify-account {\n    --shopify-account-font-heading: var(--font-heading--family);\n    --shopify-account-font-heading-weight: var(--font-heading--weight);\n    --shopify-account-font-body: var(--font-body--family);\n    --shopify-account-font-body-weight: var(--font-body--weight);\n    --shopify-account-radius-base: var(--style-border-radius-popover);\n    --shopify-account-radius-button: var(--style-border-radius-buttons-primary);\n    --shopify-account-radius-button-small: var(--style-border-radius-buttons-primary);\n    --shopify-account-radius-input: var(--style-border-radius-buttons-primary);\n    --shopify-account-color-background: var(--color-background);\n    --shopify-account-color-text: var(--color-foreground);\n    --shopify-account-color-accent: var(--color-primary-button-background);\n    --shopify-account-color-accent-text: var(--color-primary-button-text);\n    --shopify-account-dialog-position-top: var(--account-offset-top);\n\n    &:not(:defined) {\n      min-width: 44px;\n      height: 44px;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      /* Match the line height of the other buttons */\n      line-height: normal;\n    }\n  }\n\n  .account-button__fallback {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background-color: var(--shopify-account-color-accent, #0a142f);\n  }\n\n  .account-button--text shopify-account {\n    color: inherit;\n  }\n\n  .cart-drawer {\n    --cart-drawer-padding: var(--padding-xl) var(--padding-xl);\n    --cart-drawer-padding-desktop: var(--padding-xl) var(--padding-2xl);\n\n    @media screen and (min-width: 750px) {\n      margin-inline-end: calc(var(--gap-xs) * -1);\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .cart-drawer--text {\n      display: flex;\n      align-items: center;\n    }\n  }\n\n  .cart-drawer__dialog {\n    position: fixed;\n    overflow: hidden;\n    border-radius: 0;\n    width: 100%;\n    height: 100%;\n    margin: 0 0 0 auto;\n    padding: 0;\n    border-left: var(--style-border-drawer);\n    box-shadow: var(--shadow-drawer);\n    background-color: var(--color-background);\n\n    @media screen and (min-width: 750px) {\n      width: var(--sidebar-width);\n      max-width: 95vw;\n    }\n  }\n\n  /* Needed to ensure the drawer is full height */\n  .cart-drawer__dialog:modal {\n    max-height: 100dvh;\n    overflow-y: hidden;\n  }\n\n  .cart-drawer__inner {\n    height: 100%;\n    overflow: hidden;\n  }\n\n  .cart-drawer__content {\n    height: calc(100% - var(--header-height));\n    display: flex;\n    flex-direction: column;\n    padding: 0;\n    background-color: var(--color-background);\n    flex-grow: 1;\n    overflow-y: auto;\n  }\n\n  .cart-drawer__heading {\n    display: flex;\n    align-items: center;\n    gap: var(--gap-xs);\n    margin-bottom: 0;\n  }\n\n  .cart-drawer__close-button {\n    margin-right: calc(var(--padding-sm) * -1);\n    top: var(--margin-sm);\n\n    @media screen and (max-width: 749px) {\n      top: var(--margin-2xs);\n    }\n  }\n\n  .cart-drawer--empty .cart-drawer__content {\n    text-align: center;\n    min-height: auto;\n  }\n\n  .cart-drawer--empty .cart-drawer__heading {\n    margin-bottom: var(--margin-md);\n  }\n\n  .cart-drawer__items .cart-items__table-row {\n    padding-bottom: var(--gap-xl);\n    border-bottom: var(--style-border-width) solid var(--color-border);\n    margin-bottom: var(--gap-xl);\n  }\n\n  .cart-drawer__items .cart-items__table-row:has(+ .cart-items__nested-line) {\n    border-bottom: none;\n    margin-bottom: 0;\n  }\n\n  .cart-drawer__items .cart-items__table-row:last-child {\n    border-bottom: none;\n  }\n\n  .cart-drawer__summary {\n    --cart-drawer-summary-padding: var(--padding-lg);\n\n    position: sticky;\n    bottom: 0;\n    z-index: 1;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: var(--gap-xl);\n    padding: var(--cart-drawer-summary-padding);\n    margin-top: auto;\n    background-color: var(--color-background);\n    /* stylelint-disable-next-line color-named */\n    mask-image: linear-gradient(to bottom, transparent, black var(--cart-drawer-summary-padding));\n\n    @media screen and (min-width: 750px) {\n      --cart-drawer-summary-padding: var(--padding-2xl);\n    }\n  }\n\n  .cart-drawer__dialog[cart-summary-sticky='false'] .cart-drawer__summary {\n    position: static;\n    mask-image: none;\n  }\n\n  .cart-drawer__dialog[cart-summary-sticky='false'] .cart-drawer__items {\n    overflow: unset;\n  }\n\n  .cart-actions summary {\n    padding-inline: 0;\n    padding-block: var(--padding-sm);\n    line-height: 1.2;\n    min-height: var(--minimum-touch-target);\n  }\n\n  .cart-drawer__summary .cart__summary-totals:not(:has(.cart__subtotal-container:empty)) {\n    border-block-start: var(--style-border-width) solid var(--color-border);\n    padding-block-start: var(--padding-2xl);\n  }\n\n  .cart-drawer__summary .cart-note {\n    @media screen and (min-width: 750px) {\n      margin-block-start: var(--margin-3xs);\n    }\n  }\n\n  .cart-drawer__heading--empty {\n    display: flex;\n    justify-content: center;\n  }\n\n  .cart-drawer__items {\n    display: flex;\n    flex-direction: column;\n    padding-inline: var(--cart-drawer-padding);\n    overflow-y: auto;\n\n    @media screen and (min-width: 750px) {\n      padding-inline: var(--cart-drawer-padding-desktop);\n    }\n  }\n\n  .cart-drawer__items .cart-items__table-row {\n    padding-bottom: var(--gap-xl);\n    border-bottom: var(--style-border-width) solid var(--color-border);\n    margin-bottom: var(--gap-xl);\n  }\n\n  .cart-drawer__items .cart-items__table-row:last-child {\n    border-bottom: none;\n    padding-block-end: 0;\n    margin-block-end: 0;\n  }\n\n  .cart-drawer--empty .cart-drawer__inner {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    height: 100dvh;\n    margin-top: 0;\n  }\n\n  .cart-drawer:not(:has(.cart-form)) .cart-drawer__content {\n    justify-content: center;\n  }\n\n  .cart-drawer__header {\n    background-color: var(--color-background);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    padding: var(--cart-drawer-padding);\n    border-bottom: var(--style-border-width) solid none;\n    position: sticky;\n    top: 0;\n    z-index: 1;\n\n    @media screen and (min-width: 750px) {\n      padding-inline: var(--cart-drawer-padding-desktop);\n    }\n  }\n\n  .cart-drawer--empty .cart-drawer__header {\n    justify-content: right;\n    border-bottom: none;\n    padding-bottom: 0;\n  }\n\n  .cart-drawer--empty .cart-drawer__heading {\n    text-align: center;\n  }\n\n  header-actions {\n    display: flex;\n\n    @media screen and (max-width: 749px) {\n      justify-self: flex-end;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .header-actions--text {\n      gap: var(--gap-xl);\n    }\n\n    .header-actions__text-style {\n      font-size: var(--header-actions-font-size);\n      font-family: var(--header-actions-font-family);\n      font-weight: var(--header-actions-font-weight);\n      text-transform: var(--header-actions-text-case);\n    }\n  }\n\n  #header-component[data-menu-style='drawer'] header-actions {\n    justify-self: flex-end;\n  }\n\n  .header__column--right header-actions {\n    margin-inline-start: calc(var(--gap-md) * -1);\n  }\n\n  .header-actions__cart-icon {\n    --cart-bubble-size: 20px;\n    --cart-bubble-top: 4.5px;\n    --cart-bubble-right: 2.5px;\n\n    position: relative;\n  }\n\n  .header-actions__cart-icon .cart-bubble {\n    position: absolute;\n    width: var(--cart-bubble-size, 20px);\n    top: var(--cart-bubble-top);\n    right: var(--cart-bubble-right);\n  }\n\n  @media screen and (min-width: 750px) {\n    .header-actions__cart-icon--text.header-actions__cart-icon .cart-bubble {\n      position: relative;\n      top: 0;\n    }\n  }\n\n  .cart-drawer__heading .cart-bubble {\n    width: fit-content;\n    border-radius: var(--style-border-radius-buttons-primary);\n    aspect-ratio: auto;\n    padding: var(--cart-padding);\n  }\n\n  .cart-drawer__heading .cart-bubble[data-maintain-ratio] {\n    width: min(1lh, 22px);\n    height: min(1lh, 22px);\n  }\n\n  .header-actions__cart-icon .cart-bubble__text,\n  .cart-drawer__heading .cart-bubble__text {\n    font-family: var(--font-paragraph--family);\n    font-weight: var(--font-paragraph--weight);\n  }\n\n  .header-actions__cart-icon.header-actions__cart-icon--has-cart svg {\n    /* Create donut mask where the cart bubble sits */\n    mask: radial-gradient(\n      calc(var(--cart-bubble-size) + 2px) at calc(100% - var(--cart-bubble-right)) var(--cart-bubble-top),\n      transparent 45.45%,\n      #fff 45.45%,\n      #fff 100%\n    );\n  }\n\n  .cart-drawer__heading .cart-bubble__background {\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));\n  }\n\n  .cart-drawer__heading .cart-bubble__text {\n    color: var(--color-foreground);\n    font-size: clamp(var(--font-size--3xs), 0.75em, var(--font-size--xs));\n  }\n\n  .cart-bubble--animating .cart-bubble__background {\n    animation: grow var(--animation-speed) var(--animation-easing);\n  }\n\n  .cart-bubble--animating .cart-bubble__text {\n    --start-y: -1em;\n    --start-opacity: 1;\n    /* Set initial transform state before animation starts */\n    transform: translate(0, var(--start-y, -1em));\n    opacity: var(--start-opacity, 1);\n    animation: move-and-fade var(--animation-speed) var(--animation-easing);\n  }\n\n  cart-icon:has(.cart-bubble__text-count:empty) {\n    --cart-bubble-size: 10px;\n    --cart-bubble-top: 9px;\n    --cart-bubble-right: 9px;\n\n    .svg-wrapper {\n      --cart-bubble-top: 4px;\n      --cart-bubble-right: 4px;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    cart-icon.header-actions__cart-icon--text:has(.cart-bubble__text-count:empty) {\n      --cart-bubble-right: 2.5px;\n    }\n  }\n\n  @media screen and (prefers-reduced-motion: no-preference) {\n    html:active-view-transition-type(empty-cart-drawer) {\n      .cart-drawer__close-button {\n        view-transition-name: cart-drawer-close-button;\n      }\n\n      .cart-items-component {\n        view-transition-name: cart-drawer-content;\n      }\n    }\n  }\n\n  :active-view-transition {\n    .cart-drawer__header,\n    .cart-drawer__content {\n      background: transparent;\n    }\n  }\n\n  ::view-transition-old(cart-drawer-content) {\n    transform-origin: 50% 33%;\n    animation: cart-contents-old var(--spring-d280-b0-duration) var(--spring-d280-b0-easing) forwards;\n  }\n\n  ::view-transition-new(cart-drawer-content) {\n    transform-origin: top center;\n    animation: cart-contents-new var(--spring-d280-b0-duration) var(--spring-d280-b0-easing) forwards;\n  }\n\n  @keyframes cart-contents-old {\n    to {\n      scale: 0.92;\n      opacity: 0;\n    }\n  }\n\n  @keyframes cart-contents-new {\n    from {\n      scale: 1.05;\n      translate: 0 128px;\n      filter: blur(1px);\n      opacity: 0;\n    }\n  }\n  .header-actions__text {\n    display: flex;\n    align-items: center;\n  }\n\n  @media screen and (min-width: 750px) {\n    .header-actions__cart-icon--text {\n      display: flex;\n      align-items: center;\n      gap: var(--gap-xs);\n    }\n\n    .header__column--right .header-actions--text {\n      margin-inline-start: 0;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/header-drawer.liquid",
    "content": "{%- doc -%}\n  Renders a header drawer menu triggered by the top details element.\n\n  @param {object} linklist - The linklist to render\n  @param {string} [class] - Additional classes to add to the drawer\n  @param {string} [data_header_drawer_type] - The type of header drawer to render\n  @param {object} [block] - The block that can be used to provide settings\n  @param {object} [section] - The section that can be used to provide settings\n\n  @example\n  {% render 'header-drawer', linklist: section.settings.menu, class: 'header-drawer--mobile' %}\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n  assign max_featured_items = 4\n  assign image_border_radius = block_settings.image_border_radius\n\n  if block_settings.menu_style == 'featured_collections'\n    assign ratio = block_settings.featured_collections_aspect_ratio\n  elsif block_settings.menu_style == 'featured_products'\n    assign ratio = block_settings.featured_products_aspect_ratio\n  endif\n\n  ##\n  # We only eager load heavy elements of the page when rendering this template\n  # through the Section Rendering API.\n  #\n  # This keeps the initial render lightweight, minimizing the impact on TTFB.\n  # The second render then refreshes the page with additional content.\n  #\n  # At the moment, we check if the Section Rendering API is being used by\n  # checking if section.index is blank.\n  assign eager_loading = false\n  if section.index == blank\n    assign eager_loading = true\n  endif\n%}\n\n<script\n  src=\"{{ 'header-drawer.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<header-drawer\n  class=\"header-drawer {{ class }}\"\n  style=\"--menu-image-border-radius: {{ image_border_radius }}px; --resource-card-corner-radius: {{ image_border_radius }}px;\"\n>\n  <details\n    id=\"Details-menu-drawer-container\"\n    data-skip-node-update=\"true\"\n    class=\"menu-drawer-container\"\n    ref=\"details\"\n    scroll-lock\n  >\n    <summary\n      class=\"header__icon header__icon--menu header__icon--summary\"\n      aria-label=\"{{ 'accessibility.menu' | t }}\"\n      on:click=\"/toggle\"\n    >\n      <span class=\"svg-wrapper header-drawer-icon header-drawer-icon--open\">\n        {{- 'icon-menu.svg' | inline_asset_content -}}\n      </span>\n      <span class=\"svg-wrapper header-drawer-icon header-drawer-icon--close\">\n        {{- 'icon-close.svg' | inline_asset_content -}}\n      </span>\n    </summary>\n    <div\n      ref=\"menuDrawer\"\n      class=\"\n        menu-drawer\n        color-{{ block_settings.color_scheme }}\n      \"\n    >\n      <button\n        class=\"button close-button menu-drawer__close-button\"\n        type=\"button\"\n        aria-label=\"{{ 'actions.close' | t }}\"\n        on:click=\"/close\"\n      >\n        <span class=\"svg-wrapper header-drawer-icon header-drawer-icon--close\">\n          {{- 'icon-close.svg' | inline_asset_content -}}\n        </span>\n      </button>\n      <nav\n        class=\"menu-drawer__navigation\"\n        style=\"\n          {%- render 'menu-font-styles', settings: block_settings, menu_type: 'drawer' %}\n          {%- render 'submenu-font-styles', settings: block_settings %}\n        \"\n        aria-label=\"{{ 'accessibility.header_navigation_label' | t }}\"\n      >\n        <ul\n          class=\"menu-drawer__menu has-submenu\"\n          role=\"list\"\n        >\n          {%- comment -%}\n            Handle menus with fewer than 3 levels of links\n          {%- endcomment -%}\n          {% if linklist.levels < 3 %}\n            {% assign first_accordion_open = false %}\n            {% assign animation_index = 0 %}\n            {%- for link in linklist.links -%}\n              {% assign animation_index = animation_index | plus: 1 %}\n              <li\n                style=\"--menu-drawer-animation-index: {{ animation_index }};\"\n                class=\"{%- if block_settings.drawer_accordion -%}menu-drawer__list-item--deep{%- else -%}menu-drawer__list-item--flat{%- endif -%}{% if block_settings.drawer_dividers %} menu-drawer__list-item--divider{% endif %}\"\n              >\n                {% if block_settings.drawer_accordion and link.links != blank %}\n                  {%- comment -%}\n                    Accordion for links with children, in menus with fewer than 3 levels of links\n                  {%- endcomment -%}\n                  {% liquid\n                    assign accordion_state = ''\n                    if first_accordion_open == false and block_settings.drawer_accordion_expand_first\n                      assign first_accordion_open = true\n                      assign accordion_state = 'open-by-default-on-mobile'\n                    endif\n                  %}\n                  <accordion-custom {{ accordion_state }}>\n                    <details\n                      id=\"Details-menu-drawer-{{ link.handle }}\"\n                    >\n                      <summary\n                        id=\"HeaderDrawer-{{ link.handle }}\"\n                        class=\"menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset\"\n                      >\n                        <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                        <span class=\"svg-wrapper icon-plus\">\n                          {{- 'icon-plus.svg' | inline_asset_content -}}\n                        </span>\n                      </summary>\n                      {% liquid\n                        assign render_link_image = false\n                        if block_settings.menu_style == 'collection_images'\n                          assign catalog_links = link.links | where: 'type', 'catalog_link'\n                          assign collection_list_links = link.links | where: 'type', 'collections_link'\n                          assign collection_links = link.links | where: 'type', 'collection_link'\n                          if catalog_links.size > 0 or collection_list_links.size > 0 or collection_links.size > 0\n                            assign render_link_image = true\n                          endif\n                        endif\n                      %}\n                      <ul\n                        class=\"menu-drawer__menu menu-drawer__menu--childlist menu-drawer__animated-element details-content{% if render_link_image %} menu-drawer__menu--grid{% endif %}\"\n                        role=\"list\"\n                        tabindex=\"-1\"\n                      >\n                        {%- for childlink in link.links -%}\n                          <li\n                            class=\"menu-drawer__list-item\"\n                            style=\"--menu-drawer-animation-index: {{ forloop.index }};\"\n                          >\n                            <a\n                              id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}\"\n                              href=\"{{ childlink.url }}\"\n                              class=\"menu-drawer__menu-item menu-drawer__menu-item--child focus-inset{% if childlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                              {% if childlink.current %}\n                                aria-current=\"page\"\n                              {% endif %}\n                            >\n                              {% if render_link_image %}\n                                {% render 'link-featured-image',\n                                  link: childlink,\n                                  class: 'menu-drawer__link-image',\n                                  sizes: 'auto, 400px'\n                                %}\n                              {% endif %}\n                              <span class=\"menu-drawer__menu-item-text wrap-text\">{{ childlink.title | escape }}</span>\n                            </a>\n                          </li>\n                        {%- endfor -%}\n                      </ul>\n                    </details>\n                  </accordion-custom>\n                {% elsif block_settings.drawer_accordion == false and link.links != blank %}\n                  {%- comment -%}\n                    Flat menus for links with children, in menus with fewer than 3 levels of links\n                  {%- endcomment -%}\n                  <a\n                    id=\"HeaderDrawer-{{ link.handle }}\"\n                    href=\"{{ link.url }}\"\n                    class=\"menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset\"\n                    {% if link.current %}\n                      aria-current=\"page\"\n                    {% endif %}\n                  >\n                    <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                  </a>\n                  {% liquid\n                    assign render_link_image = false\n                    if block_settings.menu_style == 'collection_images'\n                      assign catalog_links = link.links | where: 'type', 'catalog_link'\n                      assign collection_list_links = link.links | where: 'type', 'collections_link'\n                      assign collection_links = link.links | where: 'type', 'collection_link'\n                      if catalog_links.size > 0 or collection_list_links.size > 0 or collection_links.size > 0\n                        assign render_link_image = true\n                      endif\n                    endif\n                  %}\n                  <ul\n                    class=\"menu-drawer__menu menu-drawer__menu--childlist{% if render_link_image %} menu-drawer__menu--grid{% endif %}\"\n                    role=\"list\"\n                    tabindex=\"-1\"\n                  >\n                    {%- for childlink in link.links -%}\n                      <li\n                        class=\"menu-drawer__list-item\"\n                        style=\"--menu-drawer-animation-index: {{ animation_index }};\"\n                      >\n                        <a\n                          href=\"{{ childlink.url }}\"\n                          class=\"menu-drawer__menu-item menu-drawer__menu-item--child menu-drawer__animated-element focus-inset{% if childlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                          {% if childlink.current %}\n                            aria-current=\"page\"\n                          {% endif %}\n                        >\n                          {% if render_link_image %}\n                            {% render 'link-featured-image',\n                              link: childlink,\n                              class: 'menu-drawer__link-image',\n                              sizes: 'auto, 400px'\n                            %}\n                          {% endif %}\n                          <span class=\"menu-drawer__menu-item-text wrap-text\">{{ childlink.title | escape }}</span>\n                        </a>\n                      </li>\n                    {%- endfor -%}\n                  </ul>\n                {% else %}\n                  {%- comment -%}\n                    Simple links for links with no children (regardless of accordion setting), in menus with fewer than 3 levels of links\n                  {%- endcomment -%}\n                  <a\n                    id=\"HeaderDrawer-{{ link.handle }}\"\n                    href=\"{{ link.url }}\"\n                    class=\"menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset\"\n                    {% if link.current %}\n                      aria-current=\"page\"\n                    {% endif %}\n                  >\n                    <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                  </a>\n                {% endif %}\n              </li>\n            {%- endfor -%}\n          {% else %}\n            {%- comment -%}\n              Handle menus with 3 levels of links\n            {%- endcomment -%}\n            {% assign animation_index = 0 %}\n            {%- for link in linklist.links -%}\n              {% assign animation_index = animation_index | plus: 1 %}\n              <li\n                class=\"menu-drawer__list-item\"\n                style=\"--menu-drawer-animation-index: {{ animation_index }};\"\n              >\n                {%- if link.links != blank -%}\n                  {%- comment -%}\n                    Regardless of the Accordion setting, in menus with 3 levels of links, we use a details element to handle the top level of the menu for links that have children.\n                  {%- endcomment -%}\n                  <details\n                    id=\"Details-menu-drawer-menu-item-{{ forloop.index }}\"\n                    class=\"menu-drawer__menu-container{% if block_settings.drawer_dividers %} menu-drawer__menu-container--divider{% endif %}\"\n                  >\n                    <summary\n                      id=\"HeaderDrawer-{{ link.handle }}\"\n                      class=\"menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset{% if link.child_active %} menu-drawer__menu-item--active{% endif %}\"\n                      on:click=\"header-drawer/open/submenu\"\n                    >\n                      <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                      <span class=\"svg-wrapper icon-caret icon-caret--forward\">\n                        {{- 'icon-caret.svg' | inline_asset_content -}}\n                      </span>\n                    </summary>\n                    <div\n                      id=\"link-{{ link.handle | escape }}\"\n                      class=\"menu-drawer__submenu has-submenu\"\n                      tabindex=\"-1\"\n                      style=\"--menu-drawer-animation-index: {{ animation_index }};\"\n                    >\n                      <div class=\"menu-drawer__inner-submenu\">\n                        <div class=\"menu-drawer__nav-buttons\">\n                          <button\n                            class=\"button menu-drawer__back-button focus-inset\"\n                            aria-expanded=\"true\"\n                            on:click=\"header-drawer/back\"\n                            aria-label=\"{{ 'actions.back' | t }}\"\n                          >\n                            <span class=\"svg-wrapper icon-caret icon-caret--backward\">\n                              {{- 'icon-caret.svg' | inline_asset_content -}}\n                            </span>\n                            <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                          </button>\n                          <button\n                            class=\"button button-unstyled close-button menu-drawer__close-button\"\n                            type=\"button\"\n                            aria-label=\"{{ 'actions.close' | t }}\"\n                            on:click=\"header-drawer/close\"\n                          >\n                            <span class=\"svg-wrapper header-drawer-icon header-drawer-icon--close\">\n                              {{- 'icon-close.svg' | inline_asset_content -}}\n                            </span>\n                          </button>\n                        </div>\n                        {% liquid\n                          assign render_link_image = false\n                          if block_settings.menu_style == 'collection_images'\n                            assign catalog_links = link.links | where: 'type', 'catalog_link'\n                            assign collection_list_links = link.links | where: 'type', 'collections_link'\n                            assign collection_links = link.links | where: 'type', 'collection_link'\n                            if catalog_links.size > 0 or collection_list_links.size > 0 or collection_links.size > 0\n                              assign render_link_image = true\n                            endif\n                          endif\n                        %}\n                        <ul\n                          class=\"menu-drawer__menu menu-drawer__menu--childlist{% if render_link_image and link.levels == 1 %} menu-drawer__menu--grid{% endif %}\"\n                          role=\"list\"\n                          tabindex=\"-1\"\n                        >\n                          {% assign first_accordion_open = false -%}\n                          {%- for childlink in link.links -%}\n                            <li\n                              class=\"\n                                menu-drawer__list-item\n                                {% if childlink.links != blank -%}\n                                  {% if block_settings.drawer_accordion -%} menu-drawer__list-item--deep{% else -%} menu-drawer__list-item--flat{%- endif -%}\n                                {%- endif -%}\n                                {% if block_settings.drawer_dividers %} menu-drawer__list-item--divider{% endif %}\n                              \"\n                            >\n                              {%- if childlink.links == blank -%}\n                                {%- comment -%}\n                                  Simple links for links with no children (regardless of accordion setting), in menus with 3 levels of links\n                                  This link is currently using --parent class style but --child would match the pattern on desktop\n                                {%- endcomment -%}\n                                <a\n                                  id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}\"\n                                  href=\"{{ childlink.url }}\"\n                                  class=\"menu-drawer__menu-item menu-drawer__menu-item--parent focus-inset{% if childlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                                  {% if childlink.current %}\n                                    aria-current=\"page\"\n                                  {% endif %}\n                                >\n                                  {% if render_link_image and link.levels == 1 %}\n                                    {% render 'link-featured-image',\n                                      link: childlink,\n                                      class: 'menu-drawer__link-image',\n                                      sizes: 'auto, 400px'\n                                    %}\n                                  {% endif %}\n                                  <span class=\"menu-drawer__menu-item-text wrap-text\">\n                                    {{- childlink.title | escape -}}\n                                  </span>\n                                </a>\n                              {%- else -%}\n                                {% liquid\n                                  assign accordion_state = ''\n                                  if first_accordion_open == false and block_settings.drawer_accordion and block_settings.drawer_accordion_expand_first\n                                    assign first_accordion_open = true\n                                    assign accordion_state = 'open-by-default-on-mobile'\n                                  endif\n                                %}\n                                {% if block_settings.drawer_accordion %}\n                                  {%- comment -%}\n                                    Accordion for links with children, in menus with 3 levels of links\n                                  {%- endcomment -%}\n                                  <accordion-custom {{ accordion_state }}>\n                                    <details\n                                      id=\"Details-menu-drawer-{{ link.handle }}-{{ childlink.handle }}\"\n                                    >\n                                      <summary\n                                        id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}\"\n                                        class=\"menu-drawer__menu-item menu-drawer__menu-item--parent focus-inset\"\n                                      >\n                                        <span class=\"menu-drawer__menu-item-text wrap-text\">\n                                          {{- childlink.title | escape -}}\n                                        </span>\n                                        <span class=\"svg-wrapper icon-plus\">\n                                          {{- 'icon-plus.svg' | inline_asset_content -}}\n                                        </span>\n                                      </summary>\n                                      {% liquid\n                                        assign render_link_image = false\n                                        if block_settings.menu_style == 'collection_images'\n                                          assign catalog_links = childlink.links | where: 'type', 'catalog_link'\n                                          assign collection_list_links = childlink.links | where: 'type', 'collections_link'\n                                          assign collection_links = childlink.links | where: 'type', 'collection_link'\n                                          if catalog_links.size > 0 or collection_list_links.size > 0 or collection_links.size > 0\n                                            assign render_link_image = true\n                                          endif\n                                        endif\n                                      %}\n                                      <ul\n                                        class=\"menu-drawer__menu menu-drawer__menu--grandchildlist details-content{% if render_link_image %} menu-drawer__menu--grid{% endif %}\"\n                                        role=\"list\"\n                                        tabindex=\"-1\"\n                                      >\n                                        {%- for grandchildlink in childlink.links -%}\n                                          <li\n                                            class=\"menu-drawer__list-item\"\n                                            style=\"--menu-drawer-animation-index: {{ forloop.index }};\"\n                                          >\n                                            <a\n                                              id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}-{{ grandchildlink.handle }}\"\n                                              href=\"{{ grandchildlink.url }}\"\n                                              class=\"menu-drawer__menu-item menu-drawer__menu-item--child focus-inset{% if grandchildlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                                              {% if grandchildlink.current %}\n                                                aria-current=\"page\"\n                                              {% endif %}\n                                            >\n                                              {% if render_link_image %}\n                                                {% render 'link-featured-image',\n                                                  link: grandchildlink,\n                                                  class: 'menu-drawer__link-image',\n                                                  sizes: 'auto, 400px'\n                                                %}\n                                              {% endif %}\n                                              <span class=\"menu-drawer__menu-item-text wrap-text\">\n                                                {{- grandchildlink.title | escape -}}\n                                              </span>\n                                            </a>\n                                          </li>\n                                        {%- endfor -%}\n                                      </ul>\n                                    </details>\n                                  </accordion-custom>\n                                {% else %}\n                                  {%- comment -%}\n                                    Flat menus for links with children, in menus with 3 levels of links\n                                  {%- endcomment -%}\n                                  <a\n                                    id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}\"\n                                    href=\"{{ childlink.url }}\"\n                                    class=\"menu-drawer__menu-item menu-drawer__menu-item--parent focus-inset{% if childlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                                    {% if childlink.current %}\n                                      aria-current=\"page\"\n                                    {% endif %}\n                                  >\n                                    <span class=\"menu-drawer__menu-item-text wrap-text\">\n                                      {{- childlink.title | escape -}}\n                                    </span>\n                                  </a>\n                                  {% liquid\n                                    assign render_link_image = false\n                                    if block_settings.menu_style == 'collection_images'\n                                      assign catalog_links = childlink.links | where: 'type', 'catalog_link'\n                                      assign collection_list_links = childlink.links | where: 'type', 'collections_link'\n                                      assign collection_links = childlink.links | where: 'type', 'collection_link'\n                                      if catalog_links.size > 0 or collection_list_links.size > 0 or collection_links.size > 0\n                                        assign render_link_image = true\n                                      endif\n                                    endif\n                                  %}\n                                  <ul\n                                    class=\"menu-drawer__menu menu-drawer__menu--grandchildlist details-content{% if render_link_image %} menu-drawer__menu--grid{% endif %}\"\n                                    role=\"list\"\n                                    tabindex=\"-1\"\n                                  >\n                                    {%- for grandchildlink in childlink.links -%}\n                                      <li\n                                        class=\"menu-drawer__list-item\"\n                                        style=\"--menu-drawer-animation-index: {{ forloop.index }};\"\n                                      >\n                                        <a\n                                          id=\"HeaderDrawer-{{ link.handle }}-{{ childlink.handle }}-{{ grandchildlink.handle }}\"\n                                          href=\"{{ grandchildlink.url }}\"\n                                          class=\"menu-drawer__menu-item menu-drawer__menu-item--child focus-inset{% if grandchildlink.current %} menu-drawer__menu-item--active{% endif %}\"\n                                          {% if grandchildlink.current %}\n                                            aria-current=\"page\"\n                                          {% endif %}\n                                        >\n                                          {% if render_link_image %}\n                                            {% render 'link-featured-image',\n                                              link: grandchildlink,\n                                              class: 'menu-drawer__link-image',\n                                              sizes: 'auto, 400px'\n                                            %}\n                                          {% endif %}\n                                          <span class=\"menu-drawer__menu-item-text wrap-text\">\n                                            {{- grandchildlink.title | escape -}}\n                                          </span>\n                                        </a>\n                                      </li>\n                                    {%- endfor -%}\n                                  </ul>\n                                {%- endif -%}\n                              {%- endif -%}\n                            </li>\n                          {%- endfor -%}\n                        </ul>\n                        {% liquid\n                          if eager_loading\n                            if block_settings.menu_style == 'featured_collections'\n                              assign featured_collections = link.links | where: 'type', 'collection_link'\n                            endif\n\n                            if block_settings.menu_style == 'featured_products'\n                              assign collection_linklist = link.links | where: 'type', 'collection_link' | first\n                              assign featured_products_collection = collection_linklist.object\n                            endif\n                          else\n                            assign featured_collections = null | sort\n                            assign featured_products_collection = null | sort\n                          endif\n                        -%}\n\n                        {% if featured_collections.size > 0 or featured_products_collection.products_count > 0 %}\n                          <div\n                            class=\"menu-drawer__featured-content menu-drawer__featured-content--childlist\"\n                            style=\"--menu-drawer-animation-index: {{ linklist.links.size | plus: 1 }};\"\n                          >\n                            <ul class=\"menu-drawer__featured-content-list list-unstyled\">\n                              {% if featured_collections.size > 0 %}\n                                {%- for collection in featured_collections limit: max_featured_items -%}\n                                  <li class=\"menu-drawer__featured-content-list-item menu-drawer__featured-content-list-item--collection\">\n                                    {% render 'resource-card',\n                                      resource: collection.object,\n                                      resource_type: 'collection',\n                                      style: 'overlay',\n                                      image_aspect_ratio: ratio,\n                                      image_sizes: 'auto, 400px'\n                                    %}\n                                  </li>\n                                {%- endfor -%}\n                              {% else %}\n                                {% paginate featured_products_collection.products by max_featured_items %}\n                                  {%- for product in featured_products_collection.products limit: max_featured_items -%}\n                                    <li class=\"menu-drawer__featured-content-list-item menu-drawer__featured-content-list-item--product\">\n                                      {% render 'resource-card',\n                                        resource: product,\n                                        resource_type: 'product',\n                                        image_aspect_ratio: ratio,\n                                        image_sizes: 'auto, 400px'\n                                      %}\n                                    </li>\n                                  {%- endfor -%}\n                                {% endpaginate %}\n                              {% endif %}\n                            </ul>\n                          </div>\n                        {% endif %}\n                      </div>\n                    </div>\n                  </details>\n                {%- else -%}\n                  {%- comment -%}\n                    Simple links for links with no children (regardless of accordion setting), in menus with 3 levels of links\n                  {%- endcomment -%}\n                  <a\n                    id=\"HeaderDrawer-{{ link.handle }}\"\n                    href=\"{{ link.url }}\"\n                    class=\"menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element focus-inset\"\n                    {% if link.current %}\n                      aria-current=\"page\"\n                    {% endif %}\n                  >\n                    <span class=\"menu-drawer__menu-item-text wrap-text\">{{ link.title | escape }}</span>\n                  </a>\n                {%- endif -%}\n              </li>\n            {%- endfor -%}\n          {% endif %}\n        </ul>\n      </nav>\n      <div\n        class=\"menu-drawer__utility-links menu-drawer__animated-element\"\n        style=\"--menu-drawer-animation-index: {{ linklist.links.size }};\"\n      >\n        {% liquid\n          assign show_language = section.settings.show_language\n          if localization.available_languages.size <= 1\n            assign show_language = false\n          endif\n\n          assign show_country = section.settings.show_country\n          if localization.available_countries.size <= 1\n            assign show_country = false\n          endif\n        %}\n        {% if data_header_drawer_type == 'mobile-drawer' and show_country or show_language %}\n          {% liquid\n            assign background_brightness = block.settings.color_scheme.settings.background | color_brightness\n            if background_brightness < 64\n              assign flag_shadow_size = 4\n            else\n              assign flag_shadow_size = 2\n            endif\n\n            assign localization_font = '--menu-localization-font: var(--font-[localization_font]--family); ' | replace: '[localization_font]', section.settings.localization_font\n            assign color_shadow = '--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));'\n            assign form_style = localization_font | append: color_shadow\n          %}\n          {% if show_language and show_country == false %}\n            <div class=\"menu-drawer__localization color-{{ settings.popover_color_scheme }}\">\n              {% render 'localization-form',\n                show_country: show_country,\n                show_language: show_language,\n                localization_style: 'drawer',\n                form_style: form_style,\n                form_id: block.id\n              %}\n            </div>\n          {% else %}\n            <drawer-localization-component class=\"menu-drawer__localization\">\n              <details\n                id=\"drawer-localization\"\n                class=\"drawer-localization\"\n                on:toggle=\"/toggle\"\n              >\n                <summary\n                  id=\"HeaderDrawer-localization\"\n                  class=\"drawer-localization__button h3 link focus-inset\"\n                  aria-expanded=\"false\"\n                  on:click=\"header-drawer/open/submenu\"\n                  style=\"{{ form_style }}\"\n                >\n                  <div class=\"drawer-localization__button--label h6\">\n                    {%- if show_country -%}\n                      <div class=\"mobile-localization mobile-localization--country link\">\n                        {%- if section.settings.country_selector_style == true -%}\n                          <span\n                            class=\"icon-flag\"\n                            style=\"\n                              background-image: url({{- localization.country | image_url: width: 32 }});\n                              --size-shadow: {{ flag_shadow_size }}px;\n                              --color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-30-60));\n                            \"\n                          ></span>\n                        {%- endif -%}\n                        <span class=\"currency-code\">\n                          {{- localization.country.currency.iso_code -}}\n                        </span>\n                      </div>\n                    {%- endif -%}\n\n                    {%- if show_country and show_language -%}\n                      <span>/</span>\n                    {%- endif -%}\n\n                    {%- if show_language -%}\n                      <div class=\"mobile-localization mobile-localization--country link\">\n                        <span>\n                          {{ localization.language.iso_code | upcase }}\n                        </span>\n                      </div>\n                    {%- endif -%}\n                  </div>\n                  <span class=\"svg-wrapper icon-caret icon-caret--forward\">\n                    {{- 'icon-caret.svg' | inline_asset_content -}}\n                  </span>\n                </summary>\n\n                <div\n                  class=\"menu-drawer__submenu has-submenu color-{{ settings.drawer_color_scheme }}\"\n                  style=\"\"\n                >\n                  <div\n                    class=\"menu-drawer__nav-buttons\"\n                    ref=\"navButtons\"\n                  >\n                    <button\n                      class=\"button menu-drawer__back-button link focus-inset\"\n                      aria-expanded=\"true\"\n                      on:click=\"header-drawer/back\"\n                    >\n                      <span class=\"svg-wrapper icon-caret icon-caret--backward\">\n                        {{- 'icon-caret.svg' | inline_asset_content -}}\n                      </span>\n                      {{ 'content.localization_region_and_language' | t }}\n                    </button>\n                    <button\n                      class=\"button close-button menu-drawer__close-button\"\n                      type=\"button\"\n                      aria-label=\"{{ 'actions.close' | t }}\"\n                      on:click=\"header-drawer/close\"\n                    >\n                      <span class=\"svg-wrapper header-drawer-icon header-drawer-icon--close\">\n                        {{- 'icon-close.svg' | inline_asset_content -}}\n                      </span>\n                    </button>\n                  </div>\n\n                  {% render 'localization-form',\n                    show_country: show_country,\n                    show_language: show_language,\n                    localization_style: 'drawer',\n                    form_style: form_style,\n                    form_id: block.id\n                  %}\n                </div>\n              </details>\n            </drawer-localization-component>\n          {% endif %}\n        {%- endif -%}\n      </div>\n\n      {% liquid\n        if block_settings.menu_style == 'featured_collections'\n          assign top_level_featured_collections = linklist.links | where: 'type', 'collection_link'\n        endif\n\n        if eager_loading and block_settings.menu_style == 'featured_products'\n          for link in linklist.links\n            if link.type == 'collection_link'\n              assign collection_linklist = link\n              assign top_level_featured_products_collection = collection_linklist.object\n              break\n            elsif link.type == 'catalog_link' or link.type == 'collections_link'\n              assign top_level_featured_products_collection = collections.all\n              break\n            endif\n          endfor\n        endif\n      -%}\n      {% if top_level_featured_collections.size > 0 or top_level_featured_products_collection.products_count > 0 %}\n        <div\n          class=\"menu-drawer__featured-content\"\n          style=\"--menu-drawer-animation-index: {{ linklist.links.size | plus: 1 }};\"\n        >\n          <ul class=\"menu-drawer__featured-content-list menu-drawer__animated-element list-unstyled\">\n            {% if top_level_featured_collections.size > 0 %}\n              {%- for collection in top_level_featured_collections limit: max_featured_items -%}\n                <li class=\"menu-drawer__featured-content-list-item menu-drawer__featured-content-list-item--collection\">\n                  {% render 'resource-card',\n                    resource: collection.object,\n                    resource_type: 'collection',\n                    style: 'overlay',\n                    image_aspect_ratio: ratio,\n                    image_sizes: 'auto, 400px'\n                  %}\n                </li>\n              {%- endfor -%}\n            {% elsif top_level_featured_products_collection.products_count > 0 %}\n              {% paginate top_level_featured_products_collection.products by max_featured_items %}\n                {%- for product in top_level_featured_products_collection.products limit: max_featured_items -%}\n                  <li class=\"menu-drawer__featured-content-list-item menu-drawer__featured-content-list-item--product\">\n                    {% render 'resource-card',\n                      resource: product,\n                      resource_type: 'product',\n                      image_aspect_ratio: ratio,\n                      image_sizes: 'auto, 400px'\n                    %}\n                  </li>\n                {%- endfor -%}\n              {% endpaginate %}\n            {% endif %}\n          </ul>\n        </div>\n      {% endif %}\n    </div>\n    <div\n      class=\"menu-drawer__backdrop\"\n      on:click=\"header-drawer/close\"\n    ></div>\n  </details>\n</header-drawer>\n\n{% stylesheet %}\n  .header__icon--menu {\n    position: initial;\n  }\n\n  .menu-drawer-container .header__icon--summary {\n    color: var(--color-foreground);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    padding: var(--padding-lg);\n  }\n\n  .header__icon--summary .header-drawer-icon {\n    margin: auto;\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .menu-drawer__featured-content {\n    z-index: var(--layer-base);\n    container-type: inline-size;\n  }\n\n  .menu-drawer__featured-content--childlist {\n    z-index: var(--layer-flat);\n  }\n\n  .menu-drawer__featured-content-list {\n    display: flex;\n    gap: 1em;\n    overflow-x: auto;\n    padding-block-end: var(--padding-lg);\n  }\n\n  .menu-drawer__featured-content-list-item {\n    flex: 0 0 auto;\n  }\n\n  .menu-drawer__featured-content-list-item--product {\n    width: 35cqi;\n  }\n\n  .menu-drawer__featured-content-list-item--collection img.resource-card__image {\n    width: 80cqi;\n  }\n\n  .menu-drawer__featured-content-list-item:first-child {\n    margin-inline-start: var(--margin-xl);\n  }\n\n  .menu-drawer__featured-content-list-item:last-child {\n    margin-inline-end: var(--margin-xl);\n  }\n\n  .menu-drawer__navigation {\n    padding: 0;\n\n    @media screen and (min-width: 750px) {\n      margin-top: var(--drawer-header-desktop-top);\n    }\n  }\n\n  details:not(.menu-open) .header__icon--menu .header-drawer-icon--close {\n    display: none;\n  }\n\n  details.menu-open .header__icon--menu .header-drawer-icon--close {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  details.menu-open .header__icon--menu .header-drawer-icon--open {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  .menu-drawer {\n    position: fixed;\n    transform: translateX(-100%);\n    visibility: hidden;\n    height: var(--drawer-height);\n    width: var(--drawer-width);\n    max-width: var(--drawer-max-width);\n    z-index: var(--layer-menu-drawer);\n    left: 0;\n    top: 0;\n    padding: 0;\n    background-color: var(--color-background);\n    overflow: auto;\n    display: flex;\n    border-right: var(--style-border-drawer);\n    box-shadow: var(--shadow-drawer);\n    flex-direction: column;\n\n    @media screen and (min-width: 750px) {\n      width: 25rem;\n    }\n  }\n\n  /* When opening a submenu we don't want the first-level menu to be scrollable, so we reset the overflow  */\n  .menu-drawer.menu-drawer--has-submenu-opened {\n    overflow: initial;\n  }\n\n  .menu-drawer__backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100vw;\n    height: 100dvh;\n    backdrop-filter: brightness(0.75);\n    z-index: var(--layer-heightened);\n    opacity: 0;\n    transition: opacity var(--drawer-animation-speed) ease;\n\n    .menu-open & {\n      opacity: 1;\n    }\n  }\n\n  .menu-drawer,\n  details[open] > .menu-drawer__submenu {\n    transition: transform var(--drawer-animation-speed) ease, visibility var(--drawer-animation-speed) ease,\n      opacity var(--drawer-animation-speed) ease;\n  }\n\n  .menu-open > .menu-drawer,\n  .menu-open > .menu-drawer__submenu:not(.menu-drawer__menu--childlist) {\n    transform: translateX(0);\n    visibility: visible;\n    opacity: 1;\n    display: flex;\n    flex-direction: column;\n  }\n\n  .menu-drawer__inner-container {\n    position: relative;\n    height: 100%;\n  }\n\n  .menu-drawer__navigation-container {\n    display: grid;\n    grid-template-rows: 1fr auto;\n    align-content: space-between;\n    overflow-y: auto;\n    height: 100%;\n  }\n\n  .menu-drawer__inner-submenu {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    overflow-y: auto;\n\n    @media screen and (min-width: 750px) {\n      margin-top: var(--drawer-header-desktop-top);\n    }\n  }\n\n  .menu-drawer__nav-buttons {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  .menu-drawer__menu {\n    --menu-drawer-inline-padding: calc(var(--padding-sm) + 7px);\n\n    list-style: none;\n    padding-inline: var(--drawer-padding);\n    margin-inline: 0;\n    margin-block-start: 0;\n  }\n\n  .menu-drawer__menu--grid {\n    display: grid;\n    width: 100%;\n    grid-template-columns: 1fr 1fr;\n    gap: var(--padding-sm);\n    padding-inline-end: var(--menu-drawer-inline-padding);\n    padding-block-start: var(--padding-xs);\n  }\n\n  .menu-drawer__menu--childlist:not(.menu-drawer__menu--grid) {\n    flex-grow: 1;\n  }\n\n  .menu-drawer__menu.has-submenu,\n  .menu-drawer__menu--childlist:not(:has(.menu-drawer__animated-element)) {\n    margin-block-end: var(--margin-xs);\n\n    @media screen and (min-width: 750px) {\n      margin-block-end: 2.5rem;\n    }\n  }\n\n  .menu-drawer__list-item--divider {\n    border-block-end: 1px solid var(--color-border);\n  }\n\n  .menu-drawer__list-item--deep:not(.menu-drawer__list-item--divider) .menu-drawer__menu {\n    margin-block-start: -0.3rem;\n  }\n\n  .menu-drawer__list-item--flat.menu-drawer__list-item--divider .menu-drawer__menu {\n    margin-block-start: -0.4rem;\n  }\n\n  .menu-drawer__menu-container--divider {\n    border-block-end: 1px solid var(--color-border);\n  }\n\n  .menu-drawer__menu > .menu-drawer__list-item {\n    display: flex;\n    min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs));\n  }\n\n  .menu-drawer__list-item--deep .menu-drawer__list-item,\n  .menu-drawer__list-item--flat .menu-drawer__list-item {\n    min-height: auto;\n  }\n\n  .menu-drawer__menu .menu-drawer__list-item--flat {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    margin-block-end: var(--margin-md);\n  }\n\n  .menu-drawer__menu--childlist .menu-drawer__list-item--flat {\n    margin-block-end: var(--margin-sm);\n\n    @media screen and (min-width: 750px) {\n      margin-block-end: var(--margin-lg);\n    }\n  }\n\n  .menu-drawer__menu--childlist .menu-drawer__list-item--flat.menu-drawer__list-item--divider {\n    margin-block-end: 0;\n  }\n\n  .menu-drawer__list-item--flat .menu-drawer__menu--childlist {\n    width: 100%;\n    padding-inline: 0;\n  }\n\n  .menu-drawer-container[open] .menu-drawer__animated-element {\n    animation: menu-drawer-nav-open var(--drawer-animation-speed) ease-in-out;\n    animation-delay: calc(var(--drawer-animation-speed) + (var(--menu-drawer-animation-index) - 1) * 0.1s);\n    animation-fill-mode: backwards;\n  }\n\n  .menu-drawer__menu accordion-custom .details-content--no-animation {\n    animation: none;\n    visibility: visible;\n    opacity: 1;\n    transform: translateX(0);\n    transition: none;\n  }\n\n  .menu-drawer__menu details,\n  .menu-drawer__menu-item,\n  .menu-drawer__menu accordion-custom {\n    width: 100%;\n  }\n\n  .menu-drawer__list-item--divider .menu-drawer__menu-item:not(.menu-drawer__menu-item--child) {\n    min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs));\n  }\n\n  .menu-drawer__menu-item--mainlist {\n    min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs));\n    font-family: var(--menu-top-level-font-family);\n    font-style: var(--menu-top-level-font-style);\n    font-weight: var(--menu-top-level-font-weight);\n    font-size: var(--menu-top-level-font-size);\n    line-height: var(--menu-top-level-font-line-height);\n    text-transform: var(--menu-top-level-font-case);\n    color: var(--menu-top-level-font-color);\n    justify-content: space-between;\n\n    &:hover {\n      color: var(--menu-top-level-font-color);\n    }\n  }\n\n  .menu-drawer__menu-item--parent {\n    font-family: var(--menu-parent-font-family);\n    font-style: var(--menu-parent-font-style);\n    font-weight: var(--menu-parent-font-weight);\n    font-size: var(--menu-parent-font-size);\n    line-height: var(--menu-parent-font-line-height);\n    text-transform: var(--menu-parent-font-case);\n    color: var(--menu-parent-font-color);\n\n    &:hover {\n      color: var(--menu-parent-font-color);\n    }\n  }\n\n  .menu-drawer__menu-item--child {\n    font-family: var(--menu-child-font-family);\n    font-style: var(--menu-child-font-style);\n    font-weight: var(--menu-child-font-weight);\n    font-size: var(--menu-child-font-size);\n    line-height: var(--menu-child-font-line-height);\n    text-transform: var(--menu-child-font-case);\n    color: var(--menu-child-font-color);\n\n    &:hover {\n      color: var(--menu-child-font-color);\n    }\n  }\n\n  .menu-drawer__menu--childlist summary.menu-drawer__menu-item {\n    display: flex;\n    width: 100%;\n    padding-inline-end: 0;\n  }\n\n  .menu-drawer__list-item--deep .menu-drawer__menu,\n  .menu-drawer__menu--grandchildlist {\n    padding-inline: 0;\n  }\n\n  .menu-drawer__list-item--deep .menu-drawer__menu {\n    padding-block-end: 0.5rem;\n  }\n\n  .menu-drawer__list-item--deep.menu-drawer__list-item--divider .menu-drawer__menu {\n    padding-block-end: 0.3rem;\n  }\n\n  .menu-drawer__list-item--flat.menu-drawer__list-item--divider .menu-drawer__menu--grandchildlist {\n    padding-block-end: 0.5rem;\n  }\n\n  .menu-drawer__menu-item {\n    display: flex;\n    padding: var(--padding-2xs) 0;\n    position: relative;\n    text-decoration: none;\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  .menu-drawer__menu-item:has(> .menu-drawer__link-image) {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: flex-start;\n    row-gap: var(--padding-3xs);\n    padding: 0;\n  }\n\n  .menu-drawer__link-image {\n    width: 100%;\n    position: relative;\n    aspect-ratio: 16 / 9;\n    object-fit: cover;\n  }\n\n  /* Fix alignment for collection image mode links without images in drawer */\n\n  /* Target menu items in grids that have images */\n  .menu-drawer__menu--grid:has(.menu-drawer__link-image) .menu-drawer__menu-item:not(:has(> .menu-drawer__link-image)) {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: flex-start;\n    row-gap: var(--padding-3xs);\n    padding: 0;\n  }\n\n  .menu-drawer__menu--grid:has(.menu-drawer__link-image)\n    .menu-drawer__menu-item:not(:has(> .menu-drawer__link-image))::before {\n    content: '';\n    display: block;\n    width: 100%;\n    aspect-ratio: 16 / 9;\n    background-color: var(--color-foreground-muted);\n    opacity: 0.1;\n    border-radius: var(--menu-image-border-radius);\n  }\n\n  .menu-drawer__close-button {\n    position: relative;\n    right: auto;\n    top: auto;\n    width: fit-content;\n    height: fit-content;\n    color: inherit;\n    padding: var(--padding-lg);\n  }\n\n  .menu-drawer__back-button {\n    display: flex;\n    width: 100%;\n    padding: var(--padding-md) var(--padding-xl);\n    border: none;\n    align-items: center;\n    color: var(--color-foreground);\n    background-color: transparent;\n    text-align: left;\n    text-decoration: none;\n    white-space: nowrap;\n    overflow-x: hidden;\n    line-height: 1.2;\n    box-shadow: none;\n  }\n\n  .menu-drawer__menu-item-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  /** Styles when the country selector is hidden */\n  .menu-drawer .language-selector:not(.menu-drawer__submenu *) {\n    width: fit-content;\n    padding-inline-start: 0;\n\n    .localization-form__select {\n      text-align: left;\n    }\n  }\n\n  .menu-drawer__menu-item > .svg-wrapper {\n    width: fit-content;\n    height: fit-content;\n    margin: 0;\n    padding-block: var(--padding-lg);\n    padding-inline-start: var(--padding-xl);\n    flex-shrink: 0;\n  }\n\n  .menu-drawer__list-item--divider .menu-drawer__menu-item > .svg-wrapper {\n    padding-block: var(--padding-md);\n  }\n\n  .menu-drawer svg {\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .menu-drawer__submenu {\n    position: absolute;\n    width: 100%;\n    top: 0;\n    height: 100dvh;\n    left: 0;\n    background-color: var(--color-background);\n    z-index: var(--layer-flat);\n    transform: translateX(-5%);\n    visibility: hidden;\n    overflow-y: auto;\n    opacity: 0;\n  }\n\n  .menu-drawer__back-button > .svg-wrapper {\n    margin-right: var(--padding-md);\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .menu-drawer__utility-links {\n    display: flex;\n    flex-direction: column;\n    padding: 0;\n    margin-block: auto var(--padding-sm);\n    margin-inline-start: var(--padding-xl);\n    background-color: rgb(var(--color-foreground) 0.03);\n  }\n\n  .menu-drawer__account {\n    display: inline-flex;\n    align-items: center;\n    gap: var(--gap-xs);\n    text-decoration: none;\n    height: 44px;\n    font-size: 1.4rem;\n    color: rgb(var(--color-foreground));\n  }\n\n  .menu-drawer__account svg {\n    height: var(--icon-size-sm);\n    width: var(--icon-size-sm);\n  }\n\n  .menu-drawer__account shop-user-avatar {\n    --shop-avatar-size: 2.4rem;\n\n    margin-right: 0.55rem;\n    margin-left: -0.45rem;\n  }\n\n  .menu-drawer__link-image,\n  .menu-drawer__featured-product-image,\n  .menu-drawer__featured-collection-image,\n  .menu-drawer__featured-collection-link::before {\n    border-radius: var(--menu-image-border-radius);\n  }\n\n  @keyframes menu-drawer-nav-open {\n    0% {\n      visibility: hidden;\n      opacity: 0;\n      transform: translateX(-0.5rem);\n    }\n\n    100% {\n      visibility: visible;\n      opacity: 1;\n      transform: translateX(0);\n    }\n  }\n\n  @keyframes menu-drawer-subnav-open {\n    0% {\n      visibility: visible;\n      opacity: 1;\n      transform: translateX(0);\n    }\n\n    100% {\n      visibility: hidden;\n      opacity: 0;\n      transform: translateX(-1rem);\n    }\n  }\n\n  /* Drawer Localization Styles */\n  .drawer-localization__button .icon-flag {\n    width: var(--menu-localization-font-size, var(--icon-size-sm));\n    height: var(--menu-localization-font-size, var(--icon-size-sm));\n    clip-path: circle(50%); /* stylelint-disable-line */\n    background-position: center;\n    background-size: cover;\n    margin-inline-end: 4px;\n    position: relative;\n  }\n\n  .drawer-localization__button .icon-flag::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    box-shadow: inset 0 0 var(--size-shadow) var(--color-shadow);\n    border-radius: 50%;\n  }\n\n  .drawer-localization .country-filter {\n    padding-block: 8px;\n  }\n\n  .drawer-localization .drawer-localization__button {\n    display: flex;\n    padding: 0;\n    position: relative;\n    text-decoration: none;\n    height: 44px;\n\n    &:hover {\n      color: var(--color-foreground);\n    }\n  }\n\n  .drawer-localization .drawer-localization__button .icon-caret {\n    width: fit-content;\n    height: fit-content;\n    margin: 0;\n    padding: var(--padding-xl) var(--padding-xl) var(--padding-xl) var(--padding-xs);\n  }\n\n  .menu-drawer__localization:not(drawer-localization-component) .language-selector {\n    font-family: var(--menu-localization-font);\n    font-size: var(--menu-localization-font-size);\n  }\n\n  .menu-drawer__localization .language-selector.h5 {\n    padding-inline-start: 0;\n  }\n\n  .drawer-localization {\n    display: contents;\n    color: var(--color-foreground);\n  }\n\n  .drawer-localization localization-form-component {\n    position: relative;\n    height: 100%;\n  }\n\n  .drawer-localization .mobile-localization,\n  .drawer-localization .drawer-localization__button--label {\n    display: flex;\n    gap: var(--gap-xs);\n    margin-block: 0;\n    align-items: center;\n  }\n\n  .drawer-localization__button--label.h6 {\n    font-family: var(--menu-localization-font);\n  }\n\n  .drawer-localization img {\n    width: var(--icon-size-sm);\n  }\n\n  .drawer-localization .localization-button__icon,\n  .drawer-localization .localization-button__icon svg {\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .drawer-localization summary.is-disabled {\n    pointer-events: none;\n  }\n\n  .drawer-localization .localization-wrapper {\n    width: 100%;\n  }\n\n  .drawer-localization .localization-form {\n    display: flex;\n    flex-direction: column;\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n  }\n\n  .drawer-localization .localization-form > * {\n    padding-inline: var(--padding-xl);\n  }\n\n  .drawer-localization .language-selector .svg-wrapper.icon-caret {\n    transform: translateY(-50%) rotate(0deg);\n  }\n\n  .drawer-localization .language-selector .svg-wrapper.icon-caret svg {\n    transform: none;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/header-row.liquid",
    "content": "{% doc %}\n  Renders a responsive header row with three columns (left, center, right).\n  Organizes header elements based on their configured position and row placement\n\n  @param {string} row - The row identifier ('top' or 'bottom')\n  @param {string} order - Comma-separated list of item names defining the order of elements\n  @param {object} settings - Section settings object containing position and row settings for each item\n  @param {string} [first] - Optional captured HTML for the first item (typically drawer menu for top row)\n  @param {string} [logo] - Captured HTML for the logo element\n  @param {string} [menu] - Captured HTML for the menu navigation\n  @param {string} [actions] - Captured HTML for header actions (cart, account buttons, etc.)\n  @param {string} [localization] - Captured HTML for language/country selector\n  @param {string} [search] - Captured HTML for search input\n  @param {string} [drawer_search] - Captured HTML for drawer-based search\n{% enddoc %}\n\n{%- liquid\n  assign order = order | split: ','\n  assign left = ''\n  assign center = ''\n  assign right = ''\n\n  if first != blank\n    assign left = 'first '\n  endif\n\n  for item in order\n    assign column_key = item | append: '_position'\n    assign row_key = item | append: '_row'\n    assign item_row = settings[row_key] | default: 'top'\n    assign item_column = settings[column_key] | default: 'left'\n\n    case item\n      when 'actions'\n        assign item_column = 'right'\n    endcase\n\n    if item_row == row\n      case item_column\n        when 'left'\n          assign left = left | append: item | append: ' '\n        when 'center'\n          assign center = center | append: item | append: ' '\n        else\n          assign right = right | append: item | append: ' '\n      endcase\n    endif\n  endfor\n\n  assign columns = 'left,center,right' | split: ','\n-%}\n\n{%- for column in columns -%}\n  {%- capture items_for_column -%}\n    {% case column %}\n      {% when 'left' %}\n        {{ left }}\n      {% when 'center' %}\n        {{ center }}\n      {% else %}\n        {{ right }}\n    {% endcase %}\n  {%- endcapture -%}\n\n  {%- assign items_array = items_for_column | strip | split: ' ' | compact -%}\n\n  {%- if items_array.size > 0 -%}\n    <div\n      class=\"header__column header__column--{{ column }}\"\n      data-testid=\"header-{{ row }}-{{ column }}\"\n    >\n      {% for key in items_array %}\n        {% unless key == blank %}\n          {% case key %}\n            {% when 'first' %}\n              {{ first }}\n            {% when 'logo' %}\n              {{ logo }}\n            {% when 'menu' %}\n              {{ menu }}\n            {% when 'localization' %}\n              {{ localization }}\n            {% when 'search' %}\n              {{ search }}\n            {% when 'drawer_search' %}\n              {{ drawer_search }}\n            {% when 'actions' %}\n              {{ actions }}\n          {% endcase %}\n        {% endunless %}\n      {% endfor %}\n    </div>\n  {%- endif -%}\n{%- endfor -%}\n"
  },
  {
    "path": "snippets/icon-or-image.liquid",
    "content": "{%- doc -%}\n  Renders either an SVG icon or an uploaded image based on block settings.\n\n  @param {string} icon - The icon name from block.settings.icon\n  @param {object} image_upload - The uploaded image from block.settings.image_upload\n  @param {number} width - The width setting from block.settings.width\n  @param {string} class_name - CSS class name for the rendered element\n  @param {object} [attributes] - Additional HTML attributes to add to the element\n{%- enddoc -%}\n\n{%- if icon != 'none' and image_upload == blank -%}\n  <svg\n    class=\"{{ class_name | append: ' icon-default' | strip }}\"\n    aria-hidden=\"true\"\n    focusable=\"false\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"{{ width }}\"\n    height=\"{{ width }}\"\n    viewBox=\"0 0 20 20\"\n    {% if attributes %}\n      {{ attributes }}\n    {% endif %}\n  >\n    {%- render 'icon', icon: icon -%}\n  </svg>\n{%- elsif image_upload != blank -%}\n  {% liquid\n    assign media_width_desktop = '100vw'\n    assign media_width_mobile = '100vw'\n    assign sizes = '(min-width: 1024px) 1024px, ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n    assign widths = '240, 352, 832, 1200'\n  %}\n\n  {% assign image_style = 'width: ' | append: width | append: 'px;' %}\n  {{\n    image_upload\n    | image_url: width: 1200\n    | image_tag: widths: widths, class: class_name, style: image_style, sizes: sizes\n  }}\n{%- endif -%}\n"
  },
  {
    "path": "snippets/icon.liquid",
    "content": "{% # To be removed when we can use the icon static block instead %}\n\n{%- case icon -%}\n  {%- when 'apple' -%}\n    <path d=\"M10.6616 1.84311C11.4997 0.994336 12.5829 0.555929 13.3364 0.406304C13.4671 0.380359 13.6027 0.407635 13.7132 0.48208C13.8237 0.556525 13.8999 0.671982 13.9249 0.802834C14.2685 2.59987 13.7042 3.90202 12.8265 4.77303C11.9732 5.61989 10.8528 6.03394 10.0739 6.16284C9.94237 6.1846 9.80763 6.15297 9.69957 6.07495C9.59151 5.99694 9.51906 5.87901 9.49832 5.74735C9.22227 3.99494 9.8034 2.71219 10.6616 1.84311ZM10.4322 5.05051C10.9838 4.87866 11.6201 4.56143 12.1221 4.06324C12.6862 3.5034 13.1028 2.69625 13.0153 1.52987C12.4847 1.71504 11.8688 2.04373 11.3731 2.54573C10.8104 3.1156 10.3882 3.92035 10.4322 5.05051Z\" />\n    <path d=\"M6.74466 1.36403C6.82081 1.09859 7.09771 0.945143 7.36315 1.02129C8.4313 1.32771 10.4241 2.68991 10.4999 5.68393C10.5069 5.95998 10.2888 6.18943 10.0127 6.19643C9.73668 6.20342 9.50723 5.9853 9.50024 5.70925C9.43732 3.22559 7.81131 2.19019 7.0874 1.98252C6.82196 1.90637 6.66851 1.62947 6.74466 1.36403Z\" />\n    <path d=\"M5.7976 5.51618C5.08273 5.80325 4.40428 6.33518 3.91474 6.94951C3.01446 8.0793 2.53613 9.47907 2.53613 11.1986C2.53613 14.3276 4.3809 16.9669 7.07997 18.0835C7.41131 18.2206 7.75875 18.2099 8.22329 18.1348C8.32226 18.1188 8.42919 18.0991 8.54253 18.0782C8.92684 18.0074 9.38491 17.923 9.85684 17.923C10.3302 17.923 10.8107 18.007 11.2255 18.0795C11.3576 18.1026 11.4831 18.1246 11.5995 18.1422C12.1188 18.2211 12.517 18.2314 12.872 18.0838C15.6049 16.9478 17.4589 14.3 17.4639 11.2113C17.3883 9.75258 17.1668 8.70553 16.7428 7.88888C16.3278 7.08972 15.6964 6.46856 14.717 5.90109C13.9224 5.57109 13.3583 5.45194 12.9406 5.4387C12.5294 5.42567 12.2379 5.51434 11.9817 5.63936C11.8475 5.70489 11.72 5.78185 11.5797 5.86982C11.5575 5.8837 11.5348 5.89804 11.5115 5.91271C11.3938 5.98697 11.2627 6.06966 11.1279 6.14411C10.7884 6.3316 10.3877 6.48938 9.85684 6.48938C9.22764 6.48938 8.83995 6.29877 8.52175 6.04985C8.44189 5.98738 8.34486 5.90226 8.26392 5.83126C8.22148 5.79404 8.18347 5.76069 8.15468 5.73653C8.04777 5.64681 7.94466 5.57121 7.8199 5.50793C7.21536 5.2013 6.5101 5.23007 5.7976 5.51618ZM5.42495 4.58821C6.32089 4.22843 7.33981 4.14315 8.27225 4.61609C8.4901 4.72659 8.65843 4.8538 8.79753 4.97054C8.86924 5.03072 8.92077 5.07647 8.96623 5.11683C9.02365 5.16781 9.07139 5.2102 9.13788 5.26221C9.30136 5.39009 9.47644 5.48938 9.85684 5.48938C10.1679 5.48938 10.4012 5.4031 10.6445 5.26872C10.7515 5.20961 10.8536 5.14531 10.9708 5.07145C10.9959 5.05563 11.0217 5.03937 11.0484 5.02262C11.1936 4.93153 11.3585 4.83076 11.5431 4.74067C11.9247 4.55444 12.3768 4.42033 12.9722 4.4392C13.556 4.4577 14.2527 4.62242 15.1322 4.99079L15.1611 5.00288L15.1882 5.01846C16.3065 5.66113 17.1032 6.41295 17.6303 7.42805C18.1508 8.43058 18.3851 9.64589 18.4633 11.173L18.4639 11.1858V11.1986C18.4639 14.7063 16.3566 17.7183 13.2559 19.0072C12.6339 19.2658 12.0024 19.2149 11.4494 19.1309C11.2863 19.1061 11.1317 19.0792 10.9824 19.0532C10.5912 18.9849 10.2359 18.923 9.85684 18.923C9.48487 18.923 9.15235 18.984 8.78723 19.0509C8.65765 19.0747 8.52396 19.0992 8.38294 19.122C7.87454 19.2042 7.29552 19.2549 6.69769 19.0075C3.6271 17.7372 1.53613 14.7348 1.53613 11.1986C1.53613 9.28002 2.07513 7.65346 3.13268 6.32632C3.71714 5.59286 4.53139 4.94704 5.42495 4.58821Z\" />\n  {%- when 'banana' -%}\n    <path d=\"M9.58939 2.04935C9.70278 1.96927 9.84436 1.93993 9.98024 1.96837L12.1559 2.42361C12.408 2.47637 12.5788 2.71205 12.5504 2.96807L12.3138 5.10404C12.3555 5.13755 12.4053 5.17072 12.4788 5.21958C12.5193 5.24655 12.567 5.27831 12.6245 5.31756C12.9513 5.54051 13.3912 5.88157 13.6898 6.53073C14.024 7.25761 14.303 8.11357 14.5807 8.96549C14.6035 9.03552 14.6264 9.10552 14.6492 9.17542C14.9546 10.1102 15.2674 11.0396 15.6678 11.8693C16.068 12.6988 16.5398 13.3939 17.1428 13.8785C17.7344 14.3539 18.477 14.6469 19.4685 14.6364C19.6178 14.6349 19.76 14.7001 19.8562 14.8144C19.9524 14.9287 19.9925 15.0799 19.9655 15.2268C19.8731 15.7293 19.5512 16.4108 18.893 16.9222C18.2217 17.4439 17.2418 17.7572 15.8976 17.5804C14.6826 17.4511 13.1852 16.8785 12.0063 15.311C11.9882 15.287 11.9702 15.2627 11.9522 15.2381C11.1194 17.0387 8.72378 19.2058 4.58412 18.6145C4.35292 18.5815 4.17538 18.3929 4.15645 18.1601C4.13753 17.9273 4.28227 17.7124 4.50511 17.6425C4.53208 17.634 4.56314 17.625 4.59775 17.615C4.97981 17.5043 5.7956 17.2679 6.34999 16.237C6.61683 15.4808 6.73258 14.9216 6.77285 14.4342C6.81396 13.9365 6.77848 13.4941 6.72455 12.9516C6.71963 12.9022 6.7146 12.8522 6.70951 12.8016C6.60065 11.7201 6.46178 10.3405 6.80091 7.78357C6.89499 7.07423 7.2501 6.36099 7.70563 5.80064C8.07332 5.34834 8.54644 4.94741 9.06367 4.74229L9.38236 2.39062C9.40101 2.25306 9.476 2.12944 9.58939 2.04935ZM11.2725 14.1084C10.5074 12.557 10.0209 10.3842 10.0365 7.37309C10.038 7.09695 10.263 6.87426 10.5391 6.87569C10.8153 6.87712 11.038 7.10213 11.0365 7.37827C11.017 11.1373 11.8091 13.3852 12.8055 14.71C13.7938 16.0241 15.023 16.4829 16.009 16.5866L16.0224 16.588C17.1418 16.7365 17.8462 16.4692 18.2794 16.1326C18.4907 15.9684 18.6475 15.7801 18.7597 15.5972C17.871 15.4873 17.1327 15.1533 16.5164 14.658C15.752 14.0438 15.2006 13.2024 14.7671 12.3039C14.3337 11.4057 14.0024 10.4157 13.6986 9.48599C13.6772 9.42039 13.6559 9.35515 13.6348 9.29028C13.3514 8.42141 13.09 7.61997 12.7812 6.94854C12.5929 6.53906 12.3248 6.32367 12.0609 6.1436C12.0354 6.12619 12.0066 6.10708 11.9759 6.08667C11.8678 6.01486 11.7357 5.92709 11.6375 5.84192C11.4956 5.71899 11.3146 5.5136 11.3025 5.20124C11.3015 5.17638 11.3024 5.15148 11.3051 5.12675L11.5065 3.30939L10.3012 3.05718L10.0118 5.19278C9.9833 5.4028 9.82551 5.57207 9.61799 5.61518C9.27759 5.6859 8.85406 5.97324 8.48157 6.43144C8.11516 6.88218 7.85688 7.42763 7.79223 7.91505C7.46822 10.358 7.59866 11.6519 7.70409 12.6977C7.70935 12.7499 7.71456 12.8016 7.71964 12.8527C7.77404 13.3998 7.81867 13.9208 7.76945 14.5165C7.71999 15.1152 7.57786 15.77 7.27992 16.6066C7.27203 16.6288 7.26257 16.6504 7.25163 16.6712C7.02512 17.1028 6.7592 17.4359 6.48673 17.6938C9.65464 17.4589 11.1039 15.2127 11.2725 14.1084Z\" />\n    <path d=\"M6.27111 11.8004C6.52894 11.3027 6.60251 10.9081 6.58566 10.7451L7.58035 10.6422C7.62656 11.0889 7.45335 11.6923 7.15905 12.2604C6.85438 12.8486 6.38071 13.4767 5.73385 13.9687C4.86162 14.6322 4.1367 15.0865 3.40292 15.4806C5.55977 15.2705 6.56129 14.7956 6.93741 14.4936L7.56344 15.2734C6.79366 15.8914 4.92577 16.5867 1.00511 16.5867C0.770535 16.5867 0.567494 16.4236 0.516889 16.1946C0.466283 15.9655 0.581721 15.7321 0.794467 15.6332C0.870045 15.5981 0.944324 15.5637 1.01741 15.5298C2.59233 14.7991 3.61321 14.3255 5.12841 13.1728C5.63986 12.7838 6.02365 12.2781 6.27111 11.8004Z\" />\n  {%- when 'bottle' -%}\n    <path d=\"M13.1436 3.0254C13.3363 3.0254 13.5118 3.13611 13.5948 3.30999C13.6778 3.48386 13.6536 3.68996 13.5324 3.83978C13.4038 3.99885 13.3639 4.17442 13.3691 4.34267C13.3746 4.52205 13.4315 4.66574 13.4591 4.71337C14.6041 6.69086 15.0342 9.52317 15.1116 10.6863C15.1123 10.6974 15.1127 10.7085 15.1127 10.7195V18.7774C15.1127 19.0535 14.8888 19.2774 14.6127 19.2774H5.39716C5.12101 19.2774 4.89716 19.0535 4.89716 18.7774V10.7358C4.84125 9.8507 5.03236 8.79357 5.29232 7.81832C5.55654 6.82711 5.9041 5.87643 6.18601 5.1985C6.2393 5.07034 6.31494 4.93247 6.37143 4.82952C6.38977 4.79607 6.4061 4.76631 6.41899 4.74177C6.48471 4.61655 6.51337 4.53933 6.52193 4.47554C6.53252 4.3967 6.51006 4.29687 6.439 4.16377C6.40471 4.09955 6.36476 4.03788 6.32141 3.97381C6.31602 3.96585 6.30986 3.95683 6.30314 3.94701C6.26852 3.89642 6.21927 3.82444 6.18678 3.7649C6.10224 3.60998 6.10564 3.42197 6.19571 3.27021C6.28579 3.11844 6.44919 3.0254 6.62568 3.0254H13.1436ZM12.3915 4.02539L7.46117 4.0254C7.51302 4.19577 7.54196 4.39323 7.51304 4.6086C7.48043 4.85158 7.38361 5.05566 7.30443 5.20651C7.27233 5.26767 7.2448 5.31773 7.22052 5.36187C7.17495 5.44473 7.14083 5.50678 7.10936 5.58246C6.84062 6.22873 6.50895 7.13661 6.25858 8.07589C6.00564 9.02481 5.8476 9.96272 5.89604 10.6861C5.89678 10.6972 5.89716 10.7084 5.89716 10.7195V18.2774H14.1127V10.7364C14.036 9.61852 13.6192 6.98555 12.5937 5.21445C12.4833 5.0239 12.3802 4.71869 12.3696 4.37355C12.3661 4.26297 12.3722 4.14581 12.3915 4.02539Z\" />\n    <path d=\"M6.37329 1.69755C6.45246 1.21406 6.87025 0.859121 7.36017 0.859131L12.4688 0.859235C12.9266 0.859245 13.3259 1.17011 13.4382 1.61391L13.7705 2.92708C13.9304 3.55892 13.4528 4.17241 12.8011 4.17241H6.85086C6.38827 4.17241 6.03597 3.75773 6.11071 3.30122L6.37329 1.69755ZM12.4688 1.85924L7.36015 1.85913L7.14512 3.17241L12.8011 3.17241L12.4688 1.85924Z\" />\n    <path d=\"M14.1014 8.95304L14.1 8.95373L14.0595 8.97423L14.0578 8.9751L14.0151 8.99651L13.9721 9.01791L13.9287 9.03926L13.8849 9.06055L13.8407 9.08171L13.7961 9.10273L13.7511 9.12356L13.7056 9.14416L13.6598 9.1645L13.6135 9.18453L13.5667 9.20423L13.5195 9.22355L13.4718 9.24244L13.4237 9.26088L13.3751 9.27881L13.326 9.29621L13.2764 9.31301L13.2264 9.3292L13.1759 9.34472L13.1249 9.35952L13.0735 9.37358L13.0216 9.38685L12.9693 9.39928L12.9166 9.41084L12.8634 9.42149L12.8099 9.4312L12.7561 9.43992L12.7019 9.44763L12.6474 9.45429L12.5928 9.45989L12.5379 9.4644L12.4829 9.4678L12.4277 9.47008L12.3725 9.47124L12.3173 9.47126L12.2622 9.47014L12.2071 9.46791L12.1522 9.46455L12.0974 9.4601L12.0429 9.45457L11.9886 9.44797L11.9347 9.44035L11.8811 9.43172L11.8278 9.42213L11.775 9.4116L11.7225 9.40017L11.6705 9.38789L11.6189 9.37478L11.5678 9.36089L11.5172 9.34626L11.467 9.33093L11.4173 9.31495L11.3681 9.29834L11.3193 9.28116L11.2711 9.26344L11.2232 9.24523L11.1759 9.22655L11.129 9.20746L11.0826 9.18799L11.0365 9.16818L10.991 9.14806L10.9458 9.12768L10.9011 9.10707L10.8568 9.08626L10.8129 9.0653L10.7693 9.04422L10.7262 9.02306L10.6835 9.00185L10.6429 8.98154L10.6411 8.98062L10.6006 8.96015L10.5991 8.95942L10.5575 8.93827L10.3156 8.81448L10.2766 8.79467L10.275 8.79391L10.2379 8.77518L10.236 8.77423L10.1997 8.75604L10.1974 8.75491L10.1618 8.73728L10.1591 8.73597L10.1228 8.71818L10.0855 8.70018L10.0486 8.68263L10.0122 8.66558L9.97608 8.64902L9.94047 8.63303L9.90526 8.61757L9.87047 8.60267L9.83616 8.58838L9.80227 8.57469L9.76888 8.56162L9.73593 8.54918L9.70345 8.53737L9.67144 8.52621L9.63992 8.5157L9.60886 8.50584L9.57828 8.49663L9.54817 8.48807L9.51852 8.48015L9.48931 8.47287L9.46055 8.46622L9.4322 8.46019L9.40425 8.45477L9.37668 8.44995L9.34945 8.44573L9.32254 8.44208L9.2959 8.43899L9.26951 8.43647L9.24331 8.43449L9.21726 8.43306L9.19132 8.43216L9.16543 8.43179L9.13956 8.43196L9.11364 8.43265L9.08764 8.43388L9.0615 8.43565L9.03519 8.43797L9.00865 8.44084L8.98184 8.44427L8.95474 8.44828L8.9273 8.45287L8.8995 8.45806L8.87131 8.46385L8.84271 8.47026L8.81367 8.4773L8.78419 8.48498L8.75425 8.4933L8.72385 8.50226L8.69298 8.51187L8.66163 8.52214L8.62981 8.53305L8.5975 8.54461L8.56474 8.55681L8.5315 8.56965L8.4978 8.5831L8.46365 8.59717L8.42906 8.61183L8.39401 8.62707L8.35854 8.64287L8.32264 8.65922L8.28633 8.67608L8.24961 8.69344L8.21249 8.71127L8.17495 8.72956L8.13702 8.74826L8.09873 8.76734L8.06087 8.78638L8.05921 8.78722L8.02161 8.80626L8.02033 8.80691L7.7378 8.95136L7.73649 8.95203L7.69426 8.9734L7.65166 8.9948L7.60868 9.0162L7.5653 9.03757L7.52154 9.05886L7.47737 9.08003L7.4328 9.10106L7.38781 9.12191L7.3424 9.14253L7.29655 9.16289L7.25028 9.18295L7.20355 9.20268L7.15638 9.22202L7.10874 9.24095L7.06065 9.25943L7.01208 9.2774L6.96304 9.29484L6.91352 9.3117L6.86353 9.32793L6.81307 9.3435L6.76213 9.35837L6.71074 9.37249L6.65889 9.38582L6.6066 9.39832L6.5539 9.40995L6.50079 9.42068L6.44731 9.43046L6.39348 9.43926L6.33933 9.44705L6.2849 9.4538L6.23024 9.45948L6.17537 9.46408L6.12035 9.46757L6.06522 9.46994L6.01004 9.47119L5.95484 9.4713L5.89968 9.47027L5.8446 9.46813L5.78965 9.46486L5.73489 9.46049L5.68035 9.45505L5.62607 9.44854L5.57209 9.44099L5.51844 9.43245L5.46516 9.42293L5.4636 8.33645L5.49517 8.34701L5.52626 8.35692L5.55688 8.36618L5.58703 8.3748L5.61672 8.38277L5.64596 8.3901L5.67476 8.3968L5.70313 8.40288L5.73111 8.40834L5.75871 8.41321L5.78597 8.41748L5.81291 8.42118L5.83956 8.42431L5.86597 8.42688L5.89219 8.42889L5.91825 8.43037L5.9442 8.43131L5.97009 8.43172L5.99596 8.4316L6.02187 8.43095L6.04786 8.42976L6.07399 8.42803L6.10029 8.42576L6.12681 8.42294L6.15359 8.41955L6.18067 8.41559L6.20808 8.41104L6.23585 8.4059L6.26401 8.40016L6.29258 8.39379L6.32158 8.3868L6.35102 8.37918L6.38092 8.37092L6.41129 8.362L6.44212 8.35244L6.47344 8.34223L6.50522 8.33137L6.53748 8.31986L6.57022 8.30771L6.60341 8.29492L6.63708 8.28152L6.67119 8.2675L6.70576 8.25288L6.74077 8.23768L6.77619 8.22193L6.81207 8.20562L6.84835 8.1888L6.88503 8.17148L6.92212 8.15369L6.95964 8.13543L6.99752 8.11677L7.0358 8.0977L7.0736 8.07871L7.07529 8.07786L7.11282 8.05886L7.11413 8.0582L7.35502 7.93496L7.39775 7.9132L7.43994 7.89183L7.48251 7.87043L7.52546 7.84902L7.5688 7.82766L7.61254 7.80636L7.65667 7.78517L7.70122 7.76413L7.74617 7.74327L7.79155 7.72263L7.83736 7.70225L7.8836 7.68216L7.93029 7.66241L7.97743 7.64303L8.02502 7.62406L8.07308 7.60555L8.12161 7.58753L8.17062 7.57005L8.22009 7.55315L8.27005 7.53686L8.32048 7.52123L8.37137 7.50631L8.42273 7.49213L8.47454 7.47873L8.52679 7.46617L8.57947 7.45446L8.63254 7.44367L8.686 7.43381L8.7398 7.42493L8.79392 7.41706L8.84833 7.41022L8.90298 7.40445L8.95783 7.39977L9.01284 7.39619L9.06796 7.39373L9.12315 7.3924L9.17835 7.3922L9.23351 7.39313L9.2886 7.39519L9.34355 7.39836L9.39833 7.40264L9.45289 7.408L9.50719 7.41443L9.5612 7.42189L9.61487 7.43036L9.66819 7.4398L9.72111 7.45019L9.77363 7.46147L9.82572 7.47363L9.87736 7.48661L9.92854 7.50037L9.97926 7.51489L10.0295 7.53011L10.0793 7.54599L10.1286 7.5625L10.1774 7.57959L10.2257 7.59723L10.2736 7.61537L10.3211 7.63397L10.368 7.653L10.4145 7.67241L10.4606 7.69217L10.5063 7.71224L10.5515 7.73258L10.5963 7.75316L10.6407 7.77394L10.6846 7.79488L10.7282 7.81594L10.7714 7.83709L10.8142 7.8583L10.8566 7.87952L10.8987 7.90073L10.9404 7.92189L11.1826 8.04586L11.2217 8.06572L11.2232 8.06645L11.2604 8.08526L11.2622 8.08618L11.2987 8.10446L11.3009 8.10556L11.3367 8.12329L11.3393 8.12456L11.3757 8.14243L11.413 8.1605L11.45 8.17812L11.4865 8.19526L11.5227 8.21189L11.5584 8.22799L11.5936 8.24354L11.6285 8.25851L11.6629 8.2729L11.6968 8.28669L11.7303 8.29986L11.7633 8.31241L11.7959 8.32431L11.8279 8.33558L11.8596 8.34619L11.8907 8.35616L11.9213 8.36547L11.9515 8.37414L11.9813 8.38215L12.0105 8.38954L12.0394 8.39629L12.0678 8.40242L12.0958 8.40793L12.1234 8.41284L12.1507 8.41716L12.1777 8.42091L12.2043 8.42408L12.2308 8.42669L12.257 8.42875L12.2831 8.43027L12.309 8.43126L12.3349 8.43171L12.3608 8.43163L12.3867 8.43102L12.4127 8.42987L12.4388 8.42819L12.4651 8.42596L12.4916 8.42318L12.5183 8.41984L12.5454 8.41592L12.5728 8.41143L12.6005 8.40633L12.6286 8.40064L12.6572 8.39432L12.6861 8.38738L12.7155 8.37981L12.7454 8.37159L12.7757 8.36273L12.8065 8.35322L12.8378 8.34306L12.8696 8.33225L12.9018 8.3208L12.9345 8.3087L12.9676 8.29596L13.0013 8.28261L13.0353 8.26864L13.0699 8.25407L13.1048 8.23892L13.1402 8.2232L13.1761 8.20694L13.2123 8.19015L13.249 8.17288L13.286 8.15512L13.3221 8.13761L13.3601 8.11889L13.3626 8.11766L13.3986 8.09977L13.4007 8.09872L13.4374 8.08028L13.4391 8.07941L13.4766 8.06045L13.4779 8.05977L13.76 7.91553L13.7613 7.9149L13.8034 7.89353L13.846 7.87213L13.8889 7.85073L13.9322 7.82936L13.9759 7.80805L14.02 7.78685L14.0645 7.7658L14.1095 7.74492L14.1548 7.72426L14.2006 7.70386L14.2468 7.68375L14.184 8.9109L14.1429 8.93193L14.1014 8.95304Z\" />\n  {%- when 'bluesky' %}\n    <path\n      d=\"M5.46825 3.82629C7.3025 5.20804 9.27575 8.00929 10 9.51254V13.483C10 13.3985 9.9675 13.494 9.8975 13.6998C9.5195 14.8138 8.043 19.1615 4.66675 15.6858C2.889 13.8558 3.712 12.0258 6.948 11.4733C5.09675 11.7893 3.0155 11.267 2.4445 9.21954C2.28 8.63054 2 5.00254 2 4.51254C2 2.05804 4.14475 2.82954 5.46825 3.82629ZM14.5317 3.82629C12.6975 5.20804 10.7243 8.00929 10 9.51254V13.483C10 13.3985 10.0325 13.494 10.1025 13.6998C10.4805 14.8138 11.957 19.1615 15.3333 15.6858C17.111 13.8558 16.288 12.0258 13.052 11.4733C14.9033 11.7893 16.9845 11.267 17.5555 9.21954C17.72 8.63054 18 5.00254 18 4.51254C18 2.05804 15.8555 2.82954 14.5317 3.82629Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'box' -%}\n    <path\n      d=\"M9.69502 0.6786C9.91338 0.601796 10.1516 0.603123 10.3691 0.682353L18.2151 3.54058C18.61 3.68445 18.8728 4.05988 18.8728 4.48018V14.4287C18.8728 14.8074 18.6588 15.1537 18.32 15.3231L10.4731 19.2465C10.196 19.385 9.87022 19.3873 9.59117 19.2526L1.45405 15.3244C1.10843 15.1576 0.888794 14.8076 0.888794 14.4239V4.48434C0.888794 4.05997 1.15665 3.68181 1.55699 3.541L9.69502 0.6786ZM6.07999 3.01017L2.5346 4.25719L10.149 7.63545L13.5692 6.118L6.07999 3.01017ZM6.78606 2.76183L14.1997 5.83828L17.5367 4.35774L10.0268 1.62195L6.78606 2.76183ZM1.88879 14.4239L1.88879 5.06467L9.64898 8.50762V18.1701L1.88879 14.4239ZM17.8728 14.4287L10.649 18.0405V8.50762L17.8728 5.30263V14.4287Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'caret' -%}\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z\"\n      fill=\"currentColor\"\n    ></path>\n  {%- when 'double-sided-caret' -%}\n    <g opacity=\"0.6\">\n      <path\n        d=\"M4.93509 1.08583C4.44566 0.596391 3.65213 0.596391 3.16269 1.08583L0.509308 3.73921C0.215647 4.03287 0.215647 4.50899 0.509308 4.80265C0.802969 5.09631 1.27909 5.09631 1.57275 4.80265L4.04889 2.32651L6.52504 4.80265C6.8187 5.09631 7.29482 5.09631 7.58848 4.80265C7.88214 4.50899 7.88214 4.03287 7.58848 3.73921L4.93509 1.08583Z\"\n        fill=\"#333030\"\n      />\n      <path\n        d=\"M7.58848 9.81591L4.93509 12.4693C4.44566 12.9587 3.65213 12.9587 3.16269 12.4693L0.509308 9.81591C0.215647 9.52225 0.215647 9.04613 0.509308 8.75247C0.802969 8.45881 1.27909 8.45881 1.57275 8.75247L4.04889 11.2286L6.52504 8.75247C6.8187 8.45881 7.29482 8.45881 7.58848 8.75247C7.88214 9.04613 7.88214 9.52225 7.58848 9.81591Z\"\n        fill=\"#333030\"\n      />\n    </g>\n\n  {%- when 'carrot' -%}\n    <path d=\"M13.2007 3.20077C14.0708 3.44799 14.8041 4.00582 15.3825 4.5842C16.2207 5.42236 16.6759 6.29785 16.8114 7.17238C16.9467 8.04585 16.7557 8.87096 16.3832 9.59676C15.9414 10.4576 15.1619 11.0331 14.4616 11.4873L2.62637 19.1625C2.12702 19.4863 1.46511 19.3907 1.07779 18.9388C0.737991 18.5424 0.696827 17.9706 0.976338 17.5296L8.60593 5.49145C9.01714 4.84263 9.52843 4.13083 10.278 3.67078C11.3161 3.03367 12.3083 2.9472 13.2007 3.20077ZM12.9274 4.16269C12.3101 3.98731 11.6062 4.02897 10.8011 4.52307C10.2597 4.85536 9.85026 5.39615 9.45058 6.02677L1.82098 18.0649C1.77672 18.1347 1.78324 18.2253 1.83705 18.288C1.89838 18.3596 2.0032 18.3747 2.08227 18.3235L13.9175 10.6482C14.6029 10.2038 15.1812 9.74867 15.4935 9.14018C15.7883 8.56575 15.9205 7.95335 15.8232 7.32546C15.7261 6.69861 15.393 6.00887 14.6754 5.29132C14.1567 4.77261 13.5669 4.34441 12.9274 4.16269Z\" />\n    <path d=\"M10.7668 12.8682C10.6731 12.9696 10.5149 12.9758 10.4135 12.8821L8.90763 11.49C8.80624 11.3962 8.80003 11.2381 8.89376 11.1367C8.98748 11.0353 9.14565 11.0291 9.24704 11.1228L10.7529 12.5149C10.8543 12.6086 10.8605 12.7668 10.7668 12.8682Z\" />\n    <path d=\"M11.1604 8.42439C11.0671 8.52617 10.909 8.53304 10.8072 8.43974L8.51699 6.34018C8.41521 6.24688 8.40834 6.08874 8.50164 5.98696C8.59494 5.88518 8.75309 5.87831 8.85486 5.97162L11.1451 8.07117C11.2469 8.16447 11.2538 8.32262 11.1604 8.42439Z\" />\n    <path d=\"M16.4865 3.03018C16.5841 3.12781 16.5841 3.2861 16.4865 3.38373L15.119 4.75118C15.0214 4.84881 14.8631 4.84881 14.7655 4.75118C14.6678 4.65355 14.6678 4.49526 14.7655 4.39763L16.1329 3.03018C16.2306 2.93255 16.3888 2.93255 16.4865 3.03018Z\" />\n    <path d=\"M6.24811 14.5997C6.15439 14.7011 5.99622 14.7073 5.89483 14.6135L4.38894 13.2214C4.28755 13.1277 4.28134 12.9696 4.37507 12.8682C4.46879 12.7668 4.62696 12.7606 4.72835 12.8543L6.23424 14.2464C6.33563 14.3401 6.34184 14.4983 6.24811 14.5997Z\" />\n    <path d=\"M15.1489 1.79459C14.8108 2.16669 14.515 2.42303 14.2115 2.57726C13.887 2.74215 13.5937 2.77041 13.3103 2.75961H12.4977C11.7987 2.82025 11.4452 3.45337 11.4517 3.94279L10.4518 3.95616C10.4404 3.1065 11.0471 1.86293 12.4414 1.76094L12.4596 1.75961L13.3306 1.75961L13.341 1.76004C13.5207 1.76752 13.6314 1.75035 13.7584 1.68578C13.9056 1.61101 14.1089 1.45423 14.4236 1.10571L14.4392 1.08853L14.4562 1.07286C14.8541 0.706824 15.4138 0.430762 16.0689 0.42081C16.7314 0.410747 17.4358 0.673487 18.1148 1.28675C18.4263 1.56805 18.8681 2.03401 19.0602 2.65903C19.265 3.32542 19.1621 4.09192 18.5277 4.88236L18.508 4.90683L18.4855 4.92864C18.3252 5.08386 18.2537 5.17427 18.21 5.29103C18.1643 5.41343 18.13 5.62051 18.1731 6.02839L18.2752 6.79709C18.3357 7.23357 18.1902 7.75046 17.901 8.17635C17.6019 8.61691 17.1192 9.00553 16.4551 9.13239L16.2675 8.15015C16.6341 8.08013 16.901 7.86897 17.0737 7.61466C17.2558 7.34633 17.3042 7.07418 17.2846 6.93388L17.2841 6.93035L17.1792 6.14099C17.1269 5.65202 17.1509 5.2682 17.2734 4.94068C17.3929 4.62121 17.588 4.40752 17.7662 4.23331C18.1942 3.68869 18.2017 3.26969 18.1043 2.95281C17.9928 2.59008 17.7154 2.27342 17.4446 2.0289C16.9207 1.55573 16.4531 1.41509 16.0841 1.42069C15.7158 1.42629 15.3906 1.57837 15.1489 1.79459Z\" />\n  {%- when 'chat_bubble' -%}\n    <path d=\"M5.80023 10.2433C5.80023 9.691 6.24795 9.24329 6.80023 9.24329C7.35252 9.24329 7.80023 9.691 7.80023 10.2433C7.80023 10.7956 7.35252 11.2433 6.80023 11.2433C6.24795 11.2433 5.80023 10.7956 5.80023 10.2433Z\" />\n    <path d=\"M9.22974 10.2433C9.22974 9.691 9.67745 9.24329 10.2297 9.24329C10.782 9.24329 11.2297 9.691 11.2297 10.2433C11.2297 10.7956 10.782 11.2433 10.2297 11.2433C9.67745 11.2433 9.22974 10.7956 9.22974 10.2433Z\" />\n    <path d=\"M12.6592 10.2433C12.6592 9.691 13.1069 9.24329 13.6592 9.24329C14.2115 9.24329 14.6592 9.691 14.6592 10.2433C14.6592 10.7956 14.2115 11.2433 13.6592 11.2433C13.1069 11.2433 12.6592 10.7956 12.6592 10.2433Z\" />\n    <path\n      d=\"M16.6445 17.2036C16.6418 17.2023 16.6392 17.2009 16.6365 17.1996C16.3947 17.0764 16.1302 16.9257 15.8701 16.7774C15.2251 16.4099 14.607 16.0576 14.4279 16.1795C13.2314 16.9937 11.7861 17.4696 10.2297 17.4696C6.10323 17.4696 2.75806 14.1244 2.75806 9.99791C2.75806 5.87142 6.10323 2.52625 10.2297 2.52625C14.3562 2.52625 17.7014 5.87142 17.7014 9.99791C17.7014 11.512 17.251 12.9209 16.477 14.0979C16.3445 14.2994 16.6705 14.9403 17.0113 15.6104C17.1583 15.8994 17.308 16.1938 17.4249 16.4607C17.4269 16.4653 17.4289 16.4697 17.4308 16.4742C17.6237 16.9172 17.7239 17.2824 17.5671 17.418C17.4394 17.5544 17.0791 17.4243 16.6445 17.2036ZM18.2593 18.14C17.8792 18.5115 17.4018 18.4853 17.2128 18.461C16.9786 18.4309 16.7562 18.3504 16.587 18.2799C16.2391 18.1348 15.8412 17.9114 15.506 17.7209C15.4611 17.6954 15.4172 17.6704 15.3743 17.6459C15.0837 17.4804 14.8356 17.3391 14.6299 17.2385C13.347 18.0196 11.8396 18.4696 10.2297 18.4696C5.55095 18.4696 1.75806 14.6767 1.75806 9.99791C1.75806 5.31914 5.55095 1.52625 10.2297 1.52625C14.9085 1.52625 18.7014 5.31914 18.7014 9.99791C18.7014 11.5821 18.2656 13.0672 17.5072 14.3369C17.5098 14.3432 17.5125 14.3497 17.5153 14.3564C17.6071 14.5755 17.7411 14.8392 17.8997 15.1513C17.927 15.2049 17.9549 15.2599 17.9835 15.3164C18.1621 15.6689 18.3719 16.0905 18.5003 16.4618C18.5631 16.6435 18.6314 16.8815 18.6427 17.1309C18.6529 17.3561 18.6228 17.7987 18.2593 18.14Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'check_box' -%}\n    <path\n      d=\"M18.5 1.5H1.5L1.5 18.5H18.5V1.5ZM1.5 0.5C0.947715 0.5 0.5 0.947715 0.5 1.5V18.5C0.5 19.0523 0.947715 19.5 1.5 19.5H18.5C19.0523 19.5 19.5 19.0523 19.5 18.5V1.5C19.5 0.947715 19.0523 0.5 18.5 0.5H1.5Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M14.9975 6.09084C15.201 6.27746 15.2147 6.59375 15.0281 6.79728L8.91631 13.4627C8.82231 13.5652 8.68987 13.6239 8.55079 13.6247C8.41172 13.6256 8.27857 13.5684 8.18335 13.4671L4.99513 10.0731C4.80606 9.87179 4.81596 9.55536 5.01723 9.3663C5.21849 9.17723 5.53492 9.18713 5.72399 9.3884L8.54335 12.3897L14.291 6.12145C14.4776 5.91791 14.7939 5.90421 14.9975 6.09084Z\" />\n  {%- when 'clipboard' -%}\n    <path d=\"M6.31104 9.13574C6.31104 8.99767 6.42296 8.88574 6.56104 8.88574H13.7464C13.8844 8.88574 13.9964 8.99767 13.9964 9.13574C13.9964 9.27381 13.8844 9.38574 13.7464 9.38574H6.56104C6.42296 9.38574 6.31104 9.27381 6.31104 9.13574Z\" />\n    <path d=\"M6.31104 14.0544C6.31104 13.9164 6.42296 13.8044 6.56104 13.8044H13.439C13.577 13.8044 13.689 13.9164 13.689 14.0544C13.689 14.1925 13.577 14.3044 13.439 14.3044H6.56104C6.42296 14.3044 6.31104 14.1925 6.31104 14.0544Z\" />\n    <path d=\"M6.92587 11.5952C6.92587 11.4571 7.0378 11.3452 7.17587 11.3452H12.8241C12.9622 11.3452 13.0741 11.4571 13.0741 11.5952C13.0741 11.7333 12.9622 11.8452 12.8241 11.8452H7.17587C7.0378 11.8452 6.92587 11.7333 6.92587 11.5952Z\" />\n    <path d=\"M5.19623 1.77832C5.19623 0.949892 5.8678 0.27832 6.69623 0.27832H13.3038C14.1322 0.27832 14.8038 0.949893 14.8038 1.77832V3.46728C14.8038 4.29571 14.1322 4.96728 13.3038 4.96728H6.69623C5.8678 4.96728 5.19623 4.29571 5.19623 3.46728V1.77832ZM6.69623 1.27832C6.42009 1.27832 6.19623 1.50218 6.19623 1.77832V3.46728C6.19623 3.74342 6.42009 3.96728 6.69623 3.96728H13.3038C13.5799 3.96728 13.8038 3.74342 13.8038 3.46728V1.77832C13.8038 1.50218 13.5799 1.27832 13.3038 1.27832H6.69623Z\" />\n    <path d=\"M3.73691 2.50806V18.7232H16.2631V2.50806H14.4981V1.50806H16.2631C16.8154 1.50806 17.2631 1.95577 17.2631 2.50806V18.7232C17.2631 19.2755 16.8154 19.7232 16.2631 19.7232H3.73691C3.18462 19.7232 2.73691 19.2755 2.73691 18.7232V2.50806C2.73691 1.95577 3.18462 1.50806 3.73691 1.50806H5.75974V2.50806L3.73691 2.50806Z\" />\n  {%- when 'dairy' -%}\n    <path d=\"M6.46816 3.065L4.29671 6.0883L3.4845 5.50493L5.65594 2.48163L6.46816 3.065ZM15.1299 3.15247L13.4802 6.23562L12.5985 5.76386L14.2482 2.6807L15.1299 3.15247Z\" />\n    <path d=\"M14.5216 2.58283H15.1011L16.4806 5.74789C16.5356 5.87393 16.5639 6.00995 16.5639 6.14744V16.1023C16.5639 16.372 16.455 16.6302 16.2619 16.8184L13.8023 19.2158C13.6156 19.3979 13.3651 19.4997 13.1043 19.4997H11V18.4997H13.1043L15.5639 16.1023V6.14744L14.3152 3.2826L14.5216 3.19268V2.58283Z\" />\n    <path d=\"M3.49998 5.49976H13.5V18.4998C13.5 19.052 13.0523 19.4998 12.5 19.4998H4.49998C3.94769 19.4998 3.49998 19.052 3.49998 18.4998V5.49976ZM4.49998 6.49976V18.4998H12.5V6.49976H4.49998Z\" />\n    <path d=\"M5.49998 1.49976C5.49998 0.947471 5.94769 0.499756 6.49998 0.499756H14.1015C14.6538 0.499756 15.1015 0.947471 15.1015 1.49976V2.62301H14.1015V1.49976H6.49998V2.99976H5.49998V1.49976Z\" />\n    <path d=\"M15.0133 3.08862H5.87577V2.58862H15.0133V3.08862Z\" />\n  {%- when 'dairy_free' -%}\n    <path d=\"M6.20039 12.9182L2.4549 15.5063L1.88641 14.6837L5.63191 12.0955L6.20039 12.9182Z\" />\n    <path d=\"M17.3978 5.26416L14.2983 7.3195L13.7457 6.48609L16.8452 4.43075L17.3978 5.26416Z\" />\n    <path d=\"M5.15762 12.7983L4.98999 12.5573L5.81101 11.9864L5.97864 12.2274L5.15762 12.7983Z\" />\n    <path\n      d=\"M9.93939 18.4998C14.6338 18.4998 18.4394 14.6942 18.4394 9.99976C18.4394 5.30534 14.6338 1.49976 9.93939 1.49976C5.24497 1.49976 1.43939 5.30534 1.43939 9.99976C1.43939 14.6942 5.24497 18.4998 9.93939 18.4998ZM9.93939 19.4998C15.1861 19.4998 19.4394 15.2465 19.4394 9.99976C19.4394 4.75305 15.1861 0.499756 9.93939 0.499756C4.69269 0.499756 0.439392 4.75305 0.439392 9.99976C0.439392 15.2465 4.69269 19.4998 9.93939 19.4998Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M7.72041 4.91077L6.22367 7.185C6.07186 7.41567 5.7618 7.4796 5.53113 7.32779C5.30046 7.17598 5.23653 6.86592 5.38834 6.63525L6.88508 4.36102L7.72041 4.91077ZM13.7064 5.17641L12.5414 7.35371L11.6597 6.88194L12.8247 4.70465L13.7064 5.17641Z\" />\n    <path d=\"M13.4248 4.63432L14.6478 6.60375C14.7462 6.76214 14.7983 6.94487 14.7983 7.13132V14.0304C14.7983 14.3 14.6894 14.5582 14.4963 14.7465L12.8465 16.3545C12.6598 16.5366 12.4093 16.6384 12.1485 16.6384H10.7222V15.6384H12.1485L13.7983 14.0304V7.13132L12.5752 5.16189L13.4248 4.63432Z\" />\n    <path d=\"M5.27887 6.95804C5.27887 6.6819 5.50273 6.45804 5.77887 6.45804H12.6346V15.6385C12.6346 16.1908 12.1869 16.6385 11.6346 16.6385H6.27887C5.72658 16.6385 5.27887 16.1908 5.27887 15.6385V6.95804ZM6.27887 7.45804V15.6385H11.6346V7.45804H6.27887Z\" />\n    <path d=\"M6.5 3.5C6.5 2.94772 6.94772 2.5 7.5 2.5H12.5C13.0523 2.5 13.5 2.94772 13.5 3.5V4.84992H12.5V3.5H7.5V5H6.5V3.5Z\" />\n    <path d=\"M13.4084 5.02249H6.95563V4.02249H13.4084V5.02249Z\" />\n  {%- when 'discord' -%}\n    <path\n      d=\"M12.534 3.178a10.55 10.55 0 0 0-.478.965 13.91 13.91 0 0 0-4.12 0 9.65 9.65 0 0 0-.478-.965 15 15 0 0 0-3.715 1.145C1.395 7.8.76 11.19 1.076 14.532a14.93 14.93 0 0 0 4.555 2.287c.37-.496.696-1.023.976-1.573a9.866 9.866 0 0 1-1.536-.732c.13-.093.255-.19.377-.284a10.696 10.696 0 0 0 9.107 0c.122.101.248.198.377.284a9.766 9.766 0 0 1-1.54.736c.28.55.607 1.077.976 1.572a14.923 14.923 0 0 0 4.556-2.283c.373-3.877-.64-7.237-2.675-10.213a14.77 14.77 0 0 0-3.711-1.141l-.004-.007Zm-5.525 9.297c-.886 0-1.622-.804-1.622-1.798 0-.995.707-1.802 1.619-1.802s1.637.81 1.622 1.802c-.014.99-.714 1.798-1.619 1.798Zm5.98 0c-.89 0-1.618-.804-1.618-1.798 0-.995.707-1.802 1.619-1.802s1.633.81 1.619 1.802c-.015.99-.715 1.798-1.62 1.798Z\"\n    />\n  {%- when 'dryer' -%}\n    <path\n      d=\"M18.47 1.53H1.53L1.53 18.47H18.47V1.53ZM1.53 0.5C0.961149 0.5 0.5 0.961148 0.5 1.53V18.47C0.5 19.0389 0.961148 19.5 1.53 19.5H18.47C19.0389 19.5 19.5 19.0389 19.5 18.47V1.53C19.5 0.961149 19.0389 0.5 18.47 0.5H1.53Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path\n      d=\"M9.99998 15.2238C12.885 15.2238 15.2237 12.885 15.2237 10C15.2237 7.11505 12.885 4.7763 9.99998 4.7763C7.11499 4.7763 4.77624 7.11505 4.77624 10C4.77624 12.885 7.11499 15.2238 9.99998 15.2238ZM9.99998 16.2538C13.4538 16.2538 16.2537 13.4539 16.2537 10C16.2537 6.54619 13.4538 3.7463 9.99998 3.7463C6.54613 3.7463 3.74624 6.54619 3.74624 10C3.74624 13.4539 6.54613 16.2538 9.99998 16.2538Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'error' -%}\n    <path d=\"M10 14a.75.75 0 0 1-.75-.75v-3.5a.75.75 0 0 1 1.5 0v3.5A.75.75 0 0 1 10 14ZM9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z\" />\n    <path\n      fill-rule=\"evenodd\"\n      d=\"M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0Zm-1.5 0a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0Z\"\n      clip-rule=\"evenodd\"\n    />\n  {%- when 'eye' -%}\n    <path d=\"M9.5235 4.79973C6.76257 4.92905 4.08307 6.62063 1.1722 9.66543C0.993412 9.85244 0.993412 10.1474 1.1722 10.3344C4.08307 13.3793 6.76258 15.0709 9.52351 15.2003C12.2733 15.3291 15.2667 13.9138 18.8217 10.3399C19.0086 10.152 19.0086 9.84814 18.8217 9.6602C15.2667 6.0863 12.2733 4.67093 9.5235 4.79973ZM9.47509 3.7592C12.6521 3.61039 15.9149 5.26347 19.5564 8.92433C20.1479 9.5189 20.1479 10.4812 19.5564 11.0758C15.9149 14.7366 12.6521 16.3897 9.47508 16.2408C6.30917 16.0924 3.3912 14.1603 0.42305 11.0555C-0.141017 10.4655 -0.141017 9.53435 0.423051 8.94433C3.3912 5.8396 6.30918 3.90749 9.47509 3.7592Z\" />\n    <path d=\"M13.5807 10.0002C13.5807 11.9741 11.9742 13.5586 10.012 13.5586C8.04979 13.5586 6.44327 11.9741 6.44327 10.0002C6.44327 8.02617 8.04979 6.44176 10.012 6.44176C11.9742 6.44176 13.5807 8.02617 13.5807 10.0002ZM10.012 12.5169C11.4096 12.5169 12.5426 11.3901 12.5426 10.0002C12.5426 8.6102 11.4096 7.48342 10.012 7.48342C8.61438 7.48342 7.48138 8.6102 7.48138 10.0002C7.48138 11.3901 8.61438 12.5169 10.012 12.5169Z\" />\n  {%- when 'fire' -%}\n    <path d=\"M10.289 0.195688L10.0165 0.614868L9.73308 0.202948C9.89985 0.0882083 10.1193 0.085342 10.289 0.195688ZM10.0239 1.22397C10.0059 1.23709 9.98711 1.25084 9.96754 1.2652C9.75267 1.42286 9.44443 1.65462 9.07398 1.94898C8.33229 2.53833 7.34518 3.37545 6.35998 4.36829C5.3731 5.36282 4.39917 6.50258 3.6746 7.69609C2.9476 8.8936 2.49361 10.1091 2.49359 11.265C2.49353 16.0723 6.3863 18.7892 9.86979 18.8827C13.3336 18.9757 17.5064 16.2076 17.5064 11.1715C17.5064 9.95392 17.0516 8.71412 16.3299 7.51857C15.6097 6.32527 14.6416 5.20589 13.6605 4.23874C12.6809 3.27316 11.6994 2.47011 10.9619 1.90808C10.5935 1.62738 10.2871 1.4076 10.0736 1.25854C10.0564 1.24656 10.0399 1.23503 10.0239 1.22397ZM17.1861 7.00182C17.9626 8.28829 18.5064 9.70844 18.5064 11.1716C18.5064 16.8584 13.7772 19.988 9.84295 19.8824C5.92833 19.7773 1.49353 16.7183 1.49359 11.265C1.49361 9.85582 2.04249 8.45751 2.81979 7.17715C3.59952 5.89279 4.63131 4.69065 5.65015 3.66392C6.67066 2.6355 7.68927 1.77201 8.45186 1.16605C8.83356 0.862756 9.1521 0.623199 9.37598 0.45894C9.48794 0.376793 9.5763 0.31343 9.63711 0.270293C9.66752 0.248724 9.69105 0.232207 9.7072 0.220924L9.72585 0.207945L9.73092 0.20444L9.73308 0.202948C9.73308 0.202948 9.73308 0.202948 10.0165 0.614868C10.289 0.195688 10.289 0.195688 10.289 0.195688L10.2913 0.197143L10.2964 0.200494L10.3151 0.21283C10.3313 0.223537 10.3549 0.23919 10.3853 0.259633C10.4461 0.300517 10.5343 0.360582 10.646 0.438599C10.8695 0.594598 11.1873 0.822577 11.568 1.11271C12.3286 1.69232 13.3445 2.52316 14.3625 3.52657C15.3788 4.52841 16.4082 5.71311 17.1861 7.00182Z\" />\n    <path d=\"M10.2984 6.53911L10.0101 6.94762L9.71091 6.547C9.88437 6.41747 10.1215 6.41428 10.2984 6.53911ZM10.0177 7.57751C9.89792 7.67445 9.74607 7.80014 9.57119 7.95096C9.12226 8.33812 8.52516 8.88776 7.92971 9.53903C7.33288 10.1918 6.7473 10.9363 6.31312 11.7125C5.87714 12.492 5.61131 13.2722 5.6113 14.0056C5.61126 17.1425 7.75659 18.8851 9.9123 18.8851C12.0924 18.8851 14.3887 17.2093 14.3887 13.9436C14.3887 12.3722 13.2922 10.7471 12.0841 9.45463C11.4927 8.82192 10.8996 8.29519 10.4537 7.92638C10.2836 7.78568 10.1354 7.66842 10.0177 7.57751ZM12.8147 8.77178C14.0459 10.089 15.3887 11.9619 15.3887 13.9436C15.3887 17.7841 12.622 19.8851 9.9123 19.8851C7.17825 19.8851 4.61126 17.6683 4.6113 14.0055C4.61131 13.039 4.95783 12.087 5.44038 11.2243C5.92472 10.3585 6.56383 9.55098 7.19169 8.86426C7.82093 8.17602 8.44852 7.59865 8.9181 7.19368C9.15326 6.99088 9.3497 6.83053 9.48811 6.72031C9.55734 6.66518 9.61212 6.62254 9.65004 6.59335L9.694 6.55974L9.70595 6.55072L9.70932 6.54819L9.71091 6.547C9.71091 6.547 9.71091 6.547 10.0101 6.94762C10.2984 6.53911 10.2984 6.53911 10.2984 6.53911L10.3 6.54029L10.3035 6.54273L10.3155 6.55135L10.3597 6.58331C10.3977 6.61105 10.4525 6.65155 10.5217 6.70398C10.66 6.80882 10.8562 6.9616 11.091 7.1558C11.5599 7.54357 12.1864 8.09964 12.8147 8.77178Z\" />\n  {%- when 'gluten_free' -%}\n    <path d=\"M7.06824 12.3516L2.5155 15.5063L1.94594 14.6844L6.49868 11.5296L7.06824 12.3516Z\" />\n    <path d=\"M17.5225 5.32178L12.9698 8.47656L12.4002 7.65461L16.953 4.49983L17.5225 5.32178Z\" />\n    <path d=\"M9.5 16.5102V7.48755C9.5 7.21141 9.72386 6.98755 10 6.98755C10.2761 6.98755 10.5 7.21141 10.5 7.48755V16.5102C10.5 16.7863 10.2761 17.0102 10 17.0102C9.72386 17.0102 9.5 16.7863 9.5 16.5102Z\" />\n    <path d=\"M11.6499 6.16907C12.0653 4.3892 11.1344 2.97716 10.4169 2.35932C10.2112 2.18215 9.90167 2.20154 9.71965 2.403C8.5055 3.74686 8.23998 5.05583 8.46722 6.15655L9.44657 5.95437C9.31065 5.296 9.40373 4.45385 10.1172 3.49217C10.5448 4.04146 10.9158 4.91458 10.6761 5.94184L11.6499 6.16907Z\" />\n    <path d=\"M9.23931 5.58007C8.53263 4.97546 7.68892 4.71888 7.10039 4.65047C6.83071 4.61912 6.58528 4.80872 6.54752 5.07758C6.36481 6.37849 6.53802 7.47619 7.01787 8.2605L7.87088 7.73861C7.60135 7.29806 7.43535 6.634 7.48488 5.74907C7.84288 5.85624 8.24246 6.04325 8.58922 6.33992C9.09387 6.77167 9.51495 7.45768 9.51495 8.56389L10.515 8.56389C10.515 7.16257 9.96384 6.19994 9.23931 5.58007Z\" />\n    <path d=\"M10.7766 5.7705C11.4833 5.16589 12.327 4.90931 12.9155 4.8409C13.1852 4.80955 13.4307 4.99915 13.4684 5.26801C13.6511 6.56892 13.4779 7.66662 12.9981 8.45093L12.145 7.92903C12.4146 7.48849 12.5806 6.82443 12.531 5.9395C12.1731 6.04667 11.7735 6.23368 11.4267 6.53035C10.9221 6.9621 10.501 7.64811 10.501 8.75432L9.50098 8.75432C9.50098 7.353 10.0521 6.39037 10.7766 5.7705Z\" />\n    <path d=\"M11.1313 8.03618C11.9048 7.51988 12.7731 7.36543 13.3655 7.36747C13.637 7.3684 13.8582 7.58583 13.8637 7.85728C13.8905 9.17069 13.588 10.24 13.0183 10.9617L12.2334 10.3421C12.5534 9.93673 12.7972 9.29711 12.8532 8.41257C12.485 8.47642 12.066 8.61459 11.6864 8.86793C11.134 9.23663 10.6344 9.86771 10.5029 10.9661L9.50995 10.8472C9.67655 9.45581 10.3382 8.56552 11.1313 8.03618Z\" />\n    <path d=\"M8.78433 8.01627C7.99185 7.52953 7.11841 7.40795 6.52642 7.43234C6.25515 7.44352 6.04237 7.66914 6.04708 7.9406C6.06991 9.25408 6.41252 10.3112 7.00904 11.0109L7.77002 10.3621C7.43496 9.96912 7.16722 9.33916 7.07786 8.45736C7.44821 8.50727 7.8721 8.62954 8.26096 8.86838C8.82688 9.21597 9.34999 9.82774 9.52286 10.9204L10.5106 10.7641C10.2916 9.37999 9.59682 8.51531 8.78433 8.01627Z\" />\n    <path d=\"M10.4487 12.1822C9.29338 10.2297 7.27248 10.0798 6.23288 10.3152C5.96807 10.3752 5.79951 10.6355 5.85315 10.9016C6.11442 12.1981 6.67517 13.079 7.37604 13.6435C8.07111 14.2032 8.86395 14.4197 9.54256 14.4622L9.60513 13.4642C9.08338 13.4315 8.50257 13.2667 8.00326 12.8646C7.59385 12.5349 7.21139 12.0234 6.96619 11.2297C7.77612 11.2096 8.8907 11.5129 9.58803 12.6914L10.4487 12.1822Z\" />\n    <path d=\"M9.50482 12.1822C10.6601 10.2297 12.681 10.0798 13.7206 10.3152C13.9854 10.3752 14.154 10.6355 14.1003 10.9016C13.8401 12.1932 13.2951 13.0779 12.6087 13.6485C11.9265 14.2156 11.1444 14.4393 10.4615 14.4821L10.3989 13.4841C10.9164 13.4516 11.4827 13.2842 11.9695 12.8795C12.3704 12.5463 12.7452 12.0292 12.9884 11.2297C12.1784 11.2093 11.0631 11.5123 10.3655 12.6914L9.50482 12.1822Z\" />\n    <path\n      d=\"M10 18.4998C14.6944 18.4998 18.5 14.6942 18.5 9.99976C18.5 5.30534 14.6944 1.49976 10 1.49976C5.30558 1.49976 1.5 5.30534 1.5 9.99976C1.5 14.6942 5.30558 18.4998 10 18.4998ZM10 19.4998C15.2467 19.4998 19.5 15.2465 19.5 9.99976C19.5 4.75305 15.2467 0.499756 10 0.499756C4.75329 0.499756 0.5 4.75305 0.5 9.99976C0.5 15.2465 4.75329 19.4998 10 19.4998Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'heart' -%}\n    <path\n      d=\"M10 5.2393L8.5149 3.77392C6.79996 2.08174 4.01945 2.08174 2.30451 3.77392C0.589562 5.4661 0.589563 8.2097 2.30451 9.90188L10 17.4952L17.6955 9.90188C19.4104 8.2097 19.4104 5.4661 17.6955 3.77392C15.9805 2.08174 13.2 2.08174 11.4851 3.77392L10 5.2393ZM10.765 3.06343C12.8777 0.978857 16.3029 0.978856 18.4155 3.06343C20.5282 5.148 20.5282 8.52779 18.4155 10.6124L10.72 18.2057C10.3224 18.5981 9.67763 18.5981 9.27996 18.2057L1.58446 10.6124C-0.528154 8.52779 -0.528154 5.14801 1.58446 3.06343C3.69708 0.978859 7.12233 0.978858 9.23495 3.06343L10 3.81832L10.765 3.06343Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'iron' -%}\n    <path\n      d=\"M7.06843 2C7.06843 1.72386 7.29229 1.5 7.56843 1.5H18.8715C19.5071 1.5 20 2.01682 20 2.64089H19C19 2.55058 18.9365 2.5 18.8715 2.5H7.56843C7.29229 2.5 7.06843 2.27614 7.06843 2ZM0.0496071 16.2893L0.0456548 16.3034L0.0425352 16.3177C-0.0693018 16.8308 0.0392824 17.3941 0.373431 17.8237C0.704644 18.2495 1.21056 18.5 1.7572 18.5H18.2429C19.2185 18.5 20 17.6891 20 16.7183V2.64089H19V7.78236H12.3493C7.3981 7.78236 4.24306 9.43504 2.37802 11.7502C1.47719 12.8655 0.897699 13.9807 0.5528 14.8266C0.38499 15.233 0.255782 15.5934 0.17739 15.8549C0.15381 15.9277 0.121759 16.037 0.0970143 16.1228C0.0838597 16.1684 0.0720441 16.2099 0.0635213 16.2399L0.0534033 16.2758L0.0496071 16.2893ZM19 8.78236H12.3493C7.63614 8.78236 4.79462 10.3441 3.15638 12.378C2.3266 13.4053 1.79297 14.4333 1.47838 15.2051L1.47751 15.2072C1.3171 15.5957 1.19979 15.9259 1.13382 16.1469L1.13011 16.1593C1.11264 16.2128 1.08389 16.3096 1.05785 16.3999C1.04524 16.4436 1.03388 16.4835 1.02566 16.5125L1.01689 16.5436C0.968598 16.7829 1.02541 17.0332 1.16275 17.2097C1.3055 17.3933 1.52075 17.5 1.7572 17.5H18.2429C18.648 17.5 19 17.1552 19 16.7183V8.78236Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M8.7886 14.3589C8.3886 14.3589 8.08859 14.6589 8.08859 15.0589C8.08859 15.4489 8.3886 15.7489 8.7886 15.7489C9.1886 15.7489 9.48861 15.4489 9.48861 15.0589C9.47861 14.6689 9.1786 14.3589 8.7886 14.3589Z\" />\n    <path d=\"M11.6186 14.3589C11.2186 14.3589 10.9186 14.6589 10.9186 15.0589C10.9186 15.4489 11.2186 15.7489 11.6186 15.7489C12.0186 15.7489 12.3186 15.4489 12.3186 15.0589C12.3086 14.6689 12.0086 14.3589 11.6186 14.3589Z\" />\n    <path d=\"M14.4486 14.3589C14.0486 14.3589 13.7486 14.6589 13.7486 15.0589C13.7486 15.4489 14.0486 15.7489 14.4486 15.7489C14.8486 15.7489 15.1486 15.4489 15.1486 15.0589C15.1486 14.6689 14.8486 14.3589 14.4486 14.3589Z\" />\n  {%- when 'leaf' -%}\n    <path d=\"M18.6307 0.0851008C18.9214 0.143319 19.2573 0.251631 19.499 0.483071C19.7487 0.722288 19.8616 1.06444 19.9202 1.35568C19.9821 1.66275 20.0008 2.00418 20 2.32523C19.9986 2.89096 19.9355 3.45932 19.9011 3.76888C19.8965 3.81064 19.8924 3.8477 19.889 3.8794L19.8885 3.88469C19.7574 5.00604 19.5546 6.53586 19.2559 8.16345C18.9577 9.77538 18.5618 11.5447 18.0423 13.1175L18.0415 13.1198C17.54 14.6143 16.835 16.2292 15.7876 17.2779C12.1807 20.8897 6.31722 20.917 2.70668 17.3017C-0.903844 13.6864 -0.876728 7.8151 2.73025 4.20335C3.77726 3.15495 5.37751 2.44898 6.88416 1.94609L6.88527 1.94573C8.4557 1.42559 10.21 1.02928 11.8328 0.73059C13.4582 0.431407 14.986 0.228254 16.1059 0.097027L16.1111 0.0964089C16.1231 0.0951308 16.1358 0.0937998 16.1492 0.09237C16.4416 0.0610531 17.0517 -0.0042707 17.6652 0.000220251C17.9855 0.00256445 18.3248 0.0238389 18.6307 0.0851008ZM16.2207 1.10269C15.114 1.23241 13.6107 1.4325 12.0155 1.72612C10.4166 2.02043 8.71247 2.40674 7.20334 2.90653C5.72522 3.39993 4.31684 4.04614 3.44505 4.91909C0.229287 8.13911 0.209266 13.3695 3.42148 16.5859C6.63368 19.8024 11.8571 19.7822 15.0728 16.5622C15.9442 15.6897 16.5895 14.2687 17.0829 12.7984C17.5818 11.2879 17.9676 9.5703 18.2616 7.98044C18.5549 6.38318 18.7546 4.8779 18.8841 3.76969C18.8878 3.73473 18.8921 3.69563 18.8969 3.65288C18.9315 3.33899 18.9879 2.82875 18.9891 2.32275C18.9898 2.03445 18.9722 1.76875 18.9293 1.5558C18.8832 1.32703 18.8229 1.23626 18.8002 1.21454C18.7694 1.18504 18.6656 1.12434 18.4325 1.07766C18.2146 1.03402 17.9461 1.01452 17.6578 1.01241C17.1035 1.00835 16.5429 1.06826 16.2505 1.09951C16.2402 1.10061 16.2303 1.10167 16.2207 1.10269Z\" />\n    <path d=\"M19.4297 0.501734C19.6261 0.7004 19.6244 1.02084 19.426 1.21747L0.860985 19.6161C0.662582 19.8127 0.342561 19.811 0.146198 19.6124C-0.0501654 19.4137 -0.0485124 19.0933 0.14989 18.8966L18.7149 0.498038C18.9133 0.301414 19.2334 0.303069 19.4297 0.501734Z\" />\n    <path d=\"M5.62257 2.4772H6.12801V13.6663H17.3961V14.1724H5.62257V2.4772Z\" />\n    <path d=\"M10.1879 1.18752H10.6933L10.6933 9.14731H18.7842V9.65342H10.1879L10.1879 1.18752Z\" />\n  {%- when 'leather' -%}\n    <path d=\"M7.97895 1.55555C7.75602 1.55555 7.55049 1.71237 7.49305 1.94762L7.49123 1.95509C7.42498 2.21019 7.33959 2.53757 7.21755 2.85227C7.09741 3.16208 6.92519 3.50498 6.66011 3.77111C5.94871 4.49525 4.9347 4.58069 4.15302 4.58069C3.86517 4.58069 3.57871 4.54519 3.29458 4.47515C3.24995 4.46626 3.17168 4.45029 3.08678 4.41925C3.02446 4.40156 2.97878 4.39485 2.93608 4.39485C2.85763 4.39485 2.77367 4.41506 2.69931 4.45229C2.58049 4.51177 2.49244 4.61426 2.45245 4.74393L2.08187 5.96006C1.99969 6.23376 2.14791 6.5108 2.40926 6.59694C3.06631 6.80864 3.64401 7.16273 4.12596 7.64524C5.79603 9.31728 5.79603 12.0249 4.12596 13.697L4.1207 13.7022C3.70656 14.1053 3.22471 14.4375 2.66344 14.653C2.42776 14.7449 2.29223 15.0137 2.37026 15.2777L2.3694 15.275L2.37085 15.2797L2.37026 15.2777L2.92436 17.0653L2.92291 17.061L2.92626 17.0715L2.92436 17.0653C2.97736 17.22 3.1002 17.3437 3.23664 17.3938C3.23134 17.3924 3.22591 17.3909 3.22032 17.3894L3.24853 17.3979C3.24455 17.3966 3.24059 17.3952 3.23664 17.3938C3.31908 17.4155 3.36721 17.4222 3.41048 17.4222C3.49912 17.4222 3.60995 17.3887 3.70246 17.3233C3.98945 17.1198 4.30448 16.9574 4.6125 16.8318L4.61978 16.8288C5.10547 16.639 5.61461 16.5446 6.14334 16.5446C7.11309 16.5446 8.05549 16.8874 8.79764 17.4889L8.80712 17.4966L8.81955 17.5076C8.90806 17.5864 9.00821 17.6755 9.10985 17.7768C9.10724 17.7743 9.10462 17.7719 9.10199 17.7695L9.11722 17.7841C9.11476 17.7817 9.11231 17.7792 9.10985 17.7768C9.26909 17.925 9.40178 18.0826 9.51863 18.2455L9.51488 18.2407L9.52415 18.2532C9.52231 18.2507 9.52048 18.2481 9.51863 18.2455C9.61654 18.3713 9.76885 18.4444 9.91772 18.4444V19.4999C9.42913 19.4999 8.96472 19.2651 8.67058 18.8776L8.66585 18.8714L8.66131 18.865C8.57515 18.7443 8.48502 18.6386 8.38216 18.5436L8.3744 18.5364L8.36693 18.5289C8.28943 18.4513 8.21077 18.3808 8.12058 18.3006C8.12363 18.303 8.12667 18.3055 8.12971 18.3079L8.11112 18.2921C8.11428 18.295 8.11744 18.2978 8.12058 18.3006C7.56475 17.8535 6.86093 17.6002 6.14334 17.6002C5.74527 17.6002 5.36861 17.6705 5.00975 17.8102L5.01345 17.8087L5.00616 17.8116L5.00975 17.8102C4.7622 17.9115 4.52249 18.0371 4.31551 18.1839C4.05739 18.3663 3.73435 18.4778 3.41048 18.4778C3.22966 18.4778 3.07494 18.4441 2.94062 18.4074L2.9264 18.4036L2.91241 18.3989C2.43607 18.2399 2.07057 17.8518 1.91799 17.3935L1.91453 17.3831L1.35631 15.5819C1.12631 14.8143 1.50604 13.9695 2.27996 13.6691L2.28202 13.6683C2.68845 13.5124 3.05095 13.2676 3.37829 12.9495L3.37567 12.9522L3.38096 12.9469L3.37829 12.9495C4.63437 11.6891 4.6335 9.64934 3.37567 8.39003C3.01234 8.02628 2.57987 7.76103 2.08252 7.60098L2.08001 7.60016C1.26969 7.33494 0.820566 6.47637 1.06787 5.6562L1.06832 5.65473L1.43956 4.43642L1.43993 4.43521C1.565 4.02823 1.84814 3.69722 2.22417 3.50898C2.43856 3.40166 2.68453 3.3393 2.93608 3.3393C3.11661 3.3393 3.27314 3.37268 3.40855 3.41335L3.43121 3.42015L3.45248 3.42867C3.45248 3.42867 3.45629 3.42989 3.46231 3.4314C3.47374 3.43427 3.48719 3.43707 3.51473 3.44259L3.52713 3.44507L3.5394 3.44814C3.746 3.49985 3.95026 3.52514 4.15302 3.52514C4.91759 3.52514 5.52295 3.42089 5.9046 3.03158L5.90806 3.02805C6.02355 2.91242 6.13155 2.72544 6.22996 2.47166C6.32632 2.22316 6.39772 1.95396 6.46528 1.69386L6.46427 1.69798L6.46615 1.69052L6.46528 1.69386C6.63616 1.00201 7.25456 0.5 7.97895 0.5H11.609C12.3348 0.5 12.9542 1.00401 13.1237 1.69798L13.1242 1.70013C13.1834 1.94725 13.2587 2.21702 13.359 2.46369C13.4616 2.71581 13.5762 2.90808 13.696 3.02807C14.1211 3.45365 14.7781 3.68003 15.4455 3.68003C15.5631 3.68003 15.6809 3.67176 15.7991 3.65507C16.0139 3.6203 16.225 3.56054 16.415 3.47834C16.6179 3.38568 16.8361 3.3393 17.0543 3.3393C17.2747 3.3393 17.4951 3.38664 17.6997 3.48119C18.0942 3.66348 18.4093 4.00233 18.5392 4.44215L18.9305 5.59736L18.9334 5.60717C19.0547 6.01723 19.0121 6.46746 18.7906 6.84757C18.5695 7.22709 18.1953 7.48993 17.7778 7.58282L17.7709 7.58435C17.5695 7.62636 17.3676 7.69501 17.1451 7.78185C16.7638 7.95199 16.4097 8.19235 16.1092 8.49326C15.4747 9.1285 15.1188 9.97588 15.1188 10.8775C15.1188 11.7824 15.4665 12.6274 16.1066 13.2593L16.1092 13.2619C16.4842 13.6374 16.929 13.9137 17.4287 14.0838C18.1828 14.3325 18.7843 15.188 18.5193 16.05L18.0759 17.4952L18.0752 17.4976C17.9207 17.9926 17.544 18.3705 17.0476 18.5259L17.0418 18.5277C16.9097 18.5673 16.7524 18.6017 16.5797 18.6017C16.2411 18.6017 15.898 18.4939 15.6144 18.273L15.6108 18.2702C15.3991 18.1024 15.1801 17.9708 14.9427 17.865L14.9447 17.8659L14.9408 17.8641L14.9427 17.865C14.5354 17.688 14.1132 17.6002 13.6715 17.6002C12.9507 17.6002 12.2587 17.8453 11.7065 18.2988L11.7141 18.2921L11.6994 18.3047C11.7018 18.3028 11.7041 18.3008 11.7065 18.2988L11.4477 18.5292C11.4511 18.5257 11.4547 18.5221 11.4582 18.5186L11.4356 18.5399L11.4477 18.5292C11.3396 18.6384 11.2492 18.7459 11.1669 18.8609C11.1682 18.8589 11.1695 18.857 11.1708 18.8551L11.1639 18.865L11.1669 18.8609C10.8858 19.2703 10.4109 19.4975 9.92545 19.4999L9.92546 18.4444H9.91772C10.0873 18.4444 10.2255 18.3642 10.2941 18.2632L10.3009 18.2532C10.4214 18.0843 10.5538 17.9281 10.7079 17.7738L10.7189 17.7628L11.0162 17.4983L11.0237 17.4921C11.7696 16.8756 12.7042 16.5446 13.6715 16.5446C14.2604 16.5446 14.8275 16.663 15.3684 16.8985L15.3723 16.9002C15.6902 17.0416 15.9855 17.219 16.2676 17.4422L16.2662 17.4411L16.2698 17.444L16.2676 17.4422C16.355 17.5098 16.4651 17.5461 16.5797 17.5461C16.6128 17.5461 16.6607 17.5394 16.7332 17.5179L16.7305 17.5187L16.7363 17.517L16.7332 17.5179C16.895 17.4664 17.0122 17.3494 17.0638 17.185L17.5069 15.741C17.5716 15.5306 17.412 15.1893 17.0951 15.0856L17.0895 15.0838C16.4357 14.8617 15.8506 14.4986 15.3602 14.008L15.3615 14.0093L15.3589 14.0067L15.3602 14.008C14.5161 13.1739 14.0599 12.0577 14.0599 10.8775C14.0599 9.69362 14.529 8.57933 15.3589 7.74846C15.7569 7.34998 16.2242 7.03443 16.7259 6.81248L16.7363 6.80786L16.747 6.80369C16.9934 6.70716 17.2611 6.61261 17.5499 6.55201L17.5472 6.55261L17.5541 6.55113L17.5499 6.55201C17.6881 6.52047 17.8079 6.43273 17.875 6.3174C17.9411 6.20409 17.9608 6.05889 17.9202 5.91414L17.924 5.92537L17.9178 5.90587C17.9187 5.90862 17.9195 5.91138 17.9202 5.91414L17.5282 4.75688L17.5247 4.74458C17.4871 4.61282 17.3921 4.50249 17.2544 4.43887C17.1909 4.40952 17.1226 4.39485 17.0543 4.39485C16.9859 4.39485 16.9176 4.40953 16.8541 4.43887L16.8433 4.44383C16.5614 4.56653 16.2601 4.6503 15.9626 4.69796L15.9538 4.69937C15.7847 4.72356 15.6152 4.73559 15.4455 4.73559C14.5661 4.73559 13.6138 4.4417 12.9457 3.77286C12.684 3.51084 12.5047 3.17239 12.3778 2.86025C12.2488 2.54315 12.1592 2.21564 12.0947 1.94676C12.037 1.71199 11.8317 1.55555 11.609 1.55555H7.97895Z\" />\n  {%- when 'lightning_bolt' -%}\n    <path d=\"M14.6792 0.161747C14.8796 0.280525 14.9715 0.522024 14.9006 0.743992L12.5162 8.21151L16.6937 9.21166C16.8685 9.2535 17.0074 9.38595 17.0575 9.55856C17.1076 9.73117 17.0612 9.91739 16.936 10.0463L7.56282 19.6949C7.39667 19.8659 7.13287 19.8958 6.93265 19.7663C6.73242 19.6368 6.65151 19.384 6.73935 19.1623L9.70397 11.6806L5.23445 10.6106C5.06054 10.5689 4.9221 10.4376 4.87139 10.2661C4.82068 10.0946 4.86541 9.9091 4.9887 9.77957L14.0621 0.247179C14.2228 0.0784039 14.4787 0.042969 14.6792 0.161747ZM6.3116 9.84018L10.4977 10.8424C10.6387 10.8761 10.7581 10.9694 10.8249 11.0981C10.8918 11.2267 10.8995 11.378 10.8461 11.5128L8.59272 17.1996L15.6066 9.97963L11.7597 9.05865C11.6245 9.02628 11.5089 8.93906 11.4406 8.81795C11.3723 8.69683 11.3575 8.55276 11.3998 8.42031L13.286 2.51296L6.3116 9.84018Z\" />\n  {%- when 'linkedin' -%}\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M16.8411 2H3.2061C2.5539 2 2 2.51581 2 3.15124V16.848C2 17.4842 2.36343 18 3.01562 18H16.6507C17.3036 18 18 17.4842 18 16.848V3.15124C18 2.51581 17.4941 2 16.8411 2ZM8.09524 8.09524H10.2491V9.19314H10.2728C10.6011 8.60114 11.571 8 12.7703 8C15.072 8 15.7143 9.2221 15.7143 11.4857V15.7143H13.4286V11.9025C13.4286 10.8891 13.024 10 12.0777 10C10.9288 10 10.381 10.7779 10.381 12.0549V15.7143H8.09524V8.09524ZM4.28571 15.7143H6.57143V8.09524H4.28571V15.7143ZM6.85714 5.42857C6.85714 6.2179 6.2179 6.85714 5.42857 6.85714C4.63924 6.85714 4 6.2179 4 5.42857C4 4.63924 4.63924 4 5.42857 4C6.2179 4 6.85714 4.63924 6.85714 5.42857Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'lipstick' -%}\n    <path d=\"M5.75667 9.01565C6.15216 8.63015 6.79313 8.6304 7.18832 9.01621L11.3583 13.0872C11.7535 13.473 11.7533 14.0983 11.3578 14.4838L7.09967 18.6344C6.3087 19.4054 5.02676 19.4049 4.23639 18.6332L1.49746 15.9593C0.707086 15.1877 0.707575 13.9372 1.49855 13.1662L5.75667 9.01565ZM10.6422 13.7852L6.47222 9.71421L2.2141 13.8648C1.81861 14.2503 1.81837 14.8755 2.21355 15.2613L4.95248 17.9352C5.34767 18.3211 5.98864 18.3213 6.38412 17.9358L10.6422 13.7852Z\" />\n    <path d=\"M9.72567 6.73552L13.6983 10.6138L10.5435 13.6889L6.57087 9.81062L9.72567 6.73552ZM9.72513 8.13208L8.00251 9.81118L10.544 12.2923L12.2666 10.6132L9.72513 8.13208Z\" />\n    <path d=\"M15.5129 1.0945C15.9084 0.709004 16.5493 0.709254 16.9445 1.09506L17.6972 1.82982C19.0803 3.18014 19.0795 5.36856 17.6953 6.7178L12.9823 11.3117L9.00968 7.43344L15.5129 1.0945ZM16.9811 2.52782L16.2284 1.79306L10.4413 7.434L12.9828 9.91516L16.9797 6.01924C17.9684 5.0555 17.969 3.49234 16.9811 2.52782Z\" />\n  {%- when 'lock' -%}\n    <path\n      d=\"M16.5 7.11819H3.5L3.5 18.9997L16.5 18.9997V7.11819ZM3.5 6.11786C2.94772 6.11786 2.5 6.56573 2.5 7.11819V18.9997C2.5 19.5521 2.94772 20 3.5 20H16.5C17.0523 20 17.5 19.5521 17.5 18.9997V7.11819C17.5 6.56572 17.0523 6.11786 16.5 6.11786H3.5Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M11.443 11.9199C11.443 12.7406 10.797 13.406 10.0001 13.406C9.20314 13.406 8.55712 12.7406 8.55712 11.9199C8.55712 11.0992 9.20314 10.4338 10.0001 10.4338C10.797 10.4338 11.443 11.0992 11.443 11.9199Z\" />\n    <path d=\"M10.0187 11.9202C10.3639 11.9202 10.6437 12.2001 10.6437 12.5454V15.6971C10.6437 16.0424 10.3639 16.3223 10.0187 16.3223C9.67354 16.3223 9.39372 16.0424 9.39372 15.6971V12.5454C9.39372 12.2001 9.67354 11.9202 10.0187 11.9202Z\" />\n    <path d=\"M6.2417 3.75956C6.2417 1.68321 7.92435 0 10 0C12.0757 0 13.7583 1.68321 13.7583 3.75956V6.12135H12.7583V3.75956C12.7583 2.23568 11.5234 1.00033 10 1.00033C8.47663 1.00033 7.2417 2.23568 7.2417 3.75956V6.12135H6.2417V3.75956Z\" />\n  {%- when 'map_pin' -%}\n    <path\n      d=\"M9.91038 18.5904L14.9458 9.80988C17.1744 5.9237 14.4213 1.03316 10.004 1.03316C5.61856 1.03316 2.85676 5.85475 5.01217 9.74644L9.91038 18.5904ZM10.004 0C4.84496 0 1.59264 5.67261 4.13039 10.2547L9.34236 19.6651C9.58751 20.1078 10.2108 20.1126 10.4625 19.6737L15.82 10.3316C18.4445 5.75498 15.2016 0 10.004 0Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M12.9997 6.79602C12.9997 8.5559 11.6011 9.98256 9.87597 9.98256C8.1508 9.98256 6.75228 8.5559 6.75228 6.79602C6.75228 5.03615 8.1508 3.60949 9.87597 3.60949C11.6011 3.60949 12.9997 5.03615 12.9997 6.79602ZM9.87597 8.9494C11.0418 8.9494 11.9869 7.9853 11.9869 6.79602C11.9869 5.60675 11.0418 4.64265 9.87597 4.64265C8.71015 4.64265 7.76506 5.60675 7.76506 6.79602C7.76506 7.9853 8.71015 8.9494 9.87597 8.9494Z\" />\n  {%- when 'nut_free' -%}\n    <path d=\"M8.38041 11.5855L2.5155 15.5063L1.95973 14.675L7.82464 10.7542L8.38041 11.5855Z\" />\n    <path d=\"M17.6981 5.08643L11.8332 9.00726L11.2774 8.17593L17.1424 4.25509L17.6981 5.08643Z\" />\n    <path d=\"M6.13399 9.34115C6.80574 10.0344 7.66191 10.4557 8.28602 10.5914C8.40535 10.6174 8.51106 10.6861 8.5832 10.7847C8.70288 10.9482 8.80546 11.0846 8.89607 11.2051C9.04851 11.4078 9.16711 11.5655 9.2764 11.7315C9.46109 12.0119 9.6332 12.3328 9.95101 12.9745C10.4796 14.0417 11.4698 14.339 11.8528 14.4362C12.4756 14.5687 12.9843 14.6365 13.3964 14.6349C13.8107 14.6334 14.0932 14.5618 14.2896 14.4469C14.6434 14.2399 14.9175 13.76 14.9175 12.5471C14.9175 11.6522 14.5765 10.8589 14.0942 10.2599C13.6042 9.65156 13.0036 9.28557 12.5348 9.1946C11.3967 8.97378 10.7812 8.27648 10.5969 7.84891C10.4593 7.53894 10.1866 7.07083 9.87896 6.62103C9.5679 6.16616 9.26103 5.78894 9.06123 5.61912C8.45551 5.15102 8.02652 5.00866 7.42372 4.90607C6.29733 4.71437 5.79753 4.88276 5.55066 5.1071C5.28632 5.34732 5.14585 5.79122 5.09075 6.56826C5.00813 7.73344 5.47224 8.65824 6.13399 9.34115ZM5.41583 10.037C4.59647 9.19146 3.98677 7.99933 4.09325 6.49754C4.14909 5.71003 4.29708 4.89505 4.87814 4.36703C5.47667 3.82312 6.37921 3.71392 7.5915 3.92024C8.33035 4.04599 8.92081 4.24475 9.68194 4.835C9.68684 4.8388 9.69167 4.84269 9.69642 4.84667C10.0093 5.10851 10.3844 5.58865 10.7044 6.05655C11.0305 6.53334 11.3407 7.05887 11.5124 7.44641L11.5151 7.45267C11.5652 7.57005 11.9047 8.0537 12.7253 8.21291C13.4827 8.35987 14.2758 8.89112 14.873 9.63272C15.4779 10.3838 15.9175 11.3932 15.9175 12.5471C15.9175 13.8345 15.6375 14.8169 14.7946 15.31C14.3928 15.5451 13.9164 15.633 13.4001 15.6349C12.8836 15.6368 12.293 15.5526 11.635 15.4122C11.6291 15.4109 11.6232 15.4095 11.6172 15.4081C11.1791 15.2976 9.79283 14.9082 9.0549 13.4183C8.73742 12.7773 8.58886 12.5057 8.44122 12.2815C8.34723 12.1387 8.25749 12.0196 8.1243 11.8429C8.05736 11.7541 7.97945 11.6507 7.88452 11.5224C7.10236 11.3107 6.16389 10.809 5.41583 10.037Z\" />\n    <path\n      d=\"M10 18.4998C14.6944 18.4998 18.5 14.6942 18.5 9.99976C18.5 5.30534 14.6944 1.49976 10 1.49976C5.30558 1.49976 1.5 5.30534 1.5 9.99976C1.5 14.6942 5.30558 18.4998 10 18.4998ZM10 19.4998C15.2467 19.4998 19.5 15.2465 19.5 9.99976C19.5 4.75305 15.2467 0.499756 10 0.499756C4.75329 0.499756 0.5 4.75305 0.5 9.99976C0.5 15.2465 4.75329 19.4998 10 19.4998Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'pants' -%}\n    <path d=\"M5.38585 1.09329C5.07555 1.09329 4.81943 1.35288 4.81943 1.66737V3.1424V3.68905V3.79657L2.58822 17.5451C2.53138 17.8619 2.74218 18.1574 3.04189 18.2081L3.04477 18.2086L7.0226 18.9029L7.0238 18.9031C7.03985 18.9058 7.05426 18.9067 7.12196 18.9067C7.2249 18.9067 7.34688 18.8779 7.49367 18.8011C7.61722 18.7011 7.68686 18.5755 7.70572 18.4512L7.70722 18.4414L9.22185 9.54571C9.37633 8.63834 10.6618 8.63833 10.8163 9.54568L12.3206 18.379C12.3651 18.656 12.5975 18.8507 12.8719 18.8507C12.9396 18.8507 12.954 18.8497 12.97 18.8471L12.9712 18.8469L16.9432 18.1536C17.1105 18.1199 17.2405 18.0327 17.3138 17.9238C17.4016 17.7932 17.4374 17.6315 17.4146 17.4768L15.1762 3.68905L15.1388 3.33082L15.1191 3.1424V1.66737C15.1191 1.35288 14.8629 1.09329 14.5526 1.09329H5.38585ZM3.74074 1.66737C3.74074 0.749069 4.47981 0 5.38585 0H14.5526C15.4587 0 16.1977 0.749069 16.1977 1.66737V3.24777L18.4804 17.3081C18.5452 17.7354 18.4484 18.1779 18.205 18.5397C17.9471 18.9231 17.548 19.149 17.1425 19.2281L17.1322 19.2301L13.1514 19.9248L13.1486 19.9253C13.0375 19.9441 12.9437 19.944 12.8803 19.944L12.8719 19.944C12.0855 19.944 11.3898 19.3778 11.2564 18.5579L11.2559 18.5552L10.0191 11.2923L8.77103 18.6229C8.70148 19.0708 8.44825 19.4502 8.10262 19.7049L8.07511 19.7252L8.04531 19.7418C7.7641 19.8986 7.45399 20 7.12196 20L7.1135 20C7.05014 20 6.95633 20.0001 6.84527 19.9813L6.8424 19.9808L2.86456 19.2865L2.86275 19.2862C1.97085 19.1345 1.36484 18.268 1.52597 17.3544L3.74074 3.70726V1.66737Z\" />\n    <path d=\"M15.1762 3.68905H4.81943V3.1424H15.1191L15.1762 3.68905Z\" />\n  {%- when 'paw_print' -%}\n    <path d=\"M4.34392 7.16368C4.01559 6.62807 3.5917 6.36975 3.21922 6.39495C2.73316 6.42785 2.45795 6.58174 2.30073 6.74933C2.14054 6.92007 2.05037 7.16105 2.04138 7.46193C2.02254 8.09186 2.36617 8.81926 2.81281 9.17768C3.09955 9.40778 3.55864 9.54479 3.95773 9.4945C4.32171 9.44864 4.59366 9.26185 4.68772 8.84687C4.80166 8.34416 4.66637 7.68972 4.34392 7.16368ZM5.19648 6.64106C5.62446 7.33924 5.84642 8.25859 5.66298 9.06792C5.45965 9.96498 4.78605 10.398 4.08274 10.4867C3.41454 10.5708 2.68459 10.357 2.18694 9.95761C1.49068 9.39888 1.0138 8.36924 1.04182 7.43204C1.05626 6.94936 1.20637 6.45426 1.57143 6.06513C1.93946 5.67284 2.47446 5.44307 3.15171 5.39724C4.05461 5.33615 4.77437 5.95246 5.19648 6.64106Z\" />\n    <path d=\"M7.14946 1.68176C6.9184 1.59371 6.62261 1.70407 6.49559 1.9565C6.22812 2.48805 6.083 3.36616 6.18378 4.10853C6.35261 5.35217 7.25625 5.71812 7.70271 5.65305C7.86816 5.62894 8.12274 5.47614 8.31293 5.14915C8.49419 4.83751 8.59089 4.40403 8.47246 3.90187C8.36055 3.42733 8.19106 2.91836 7.95574 2.49796C7.7165 2.07056 7.44271 1.79351 7.14946 1.68176ZM5.6023 1.50701C5.94378 0.828378 6.76265 0.464216 7.50555 0.747312C8.11181 0.978337 8.53571 1.48675 8.82834 2.00952C9.12489 2.5393 9.32145 3.14522 9.44576 3.67233C9.62415 4.42875 9.48453 5.12377 9.17735 5.65192C8.87909 6.16472 8.39313 6.563 7.84693 6.6426C6.80439 6.79453 5.43013 5.99077 5.19287 4.24305C5.06802 3.32337 5.23428 2.23839 5.6023 1.50701Z\" />\n    <path d=\"M12.6907 1.80274C12.3355 1.97062 12.0017 2.33008 11.8476 2.75928C11.6133 3.41213 11.5804 4.12275 11.9972 4.77771C12.1956 5.08948 12.3753 5.24649 12.5141 5.32269C12.6452 5.39474 12.7606 5.40672 12.8697 5.38874C13.119 5.34765 13.3959 5.13462 13.6039 4.86582C13.6354 4.82509 13.6668 4.77061 13.706 4.68927C13.7204 4.65945 13.7348 4.62961 13.7492 4.59974C13.8655 4.35944 13.9828 4.11688 14.0737 3.86325C14.1756 3.57906 14.2289 3.32057 14.2137 3.09192C14.192 2.76518 13.9579 2.26203 13.5735 1.8984C13.333 1.67099 13.0297 1.64254 12.6907 1.80274ZM12.2635 0.898617C12.8842 0.605286 13.6539 0.598007 14.2606 1.1719C14.7883 1.67098 15.1698 2.39777 15.2115 3.02563C15.2396 3.44739 15.1396 3.85347 15.015 4.20081C14.9048 4.50815 14.7632 4.80049 14.649 5.03616C14.6345 5.0661 14.6205 5.09513 14.607 5.12316C14.5566 5.2278 14.4896 5.35525 14.3948 5.47779C14.1224 5.82976 13.6457 6.27432 13.0323 6.37543C12.7101 6.42854 12.3669 6.38277 12.0326 6.19918C11.706 6.01974 11.4135 5.72323 11.1535 5.31458C10.5193 4.31806 10.6049 3.26144 10.9064 2.4214C11.1464 1.75307 11.659 1.18427 12.2635 0.898617Z\" />\n    <path d=\"M17.6809 6.04621C17.5007 5.91767 17.2317 5.89108 16.9698 6.00071C16.4976 6.19832 16.0025 6.58528 15.8248 7.18311C15.6412 7.8004 15.7046 8.22074 15.8297 8.46804C15.9512 8.70832 16.1477 8.82666 16.3584 8.84523C16.6985 8.87521 17.0562 8.86118 17.3579 8.69638C17.6345 8.54529 17.9513 8.21835 18.1143 7.42891C18.1984 7.02206 18.1528 6.73097 18.0669 6.52401C17.9799 6.31413 17.8378 6.15805 17.6809 6.04621ZM16.5837 5.07824C17.1051 4.86005 17.7504 4.86756 18.2615 5.232C18.5443 5.43362 18.8203 5.73017 18.9907 6.14097C19.1622 6.5547 19.2132 7.05235 19.0937 7.63117C18.8855 8.63918 18.4276 9.25149 17.8373 9.57397C17.2721 9.88275 16.6707 9.87663 16.2706 9.84137C15.7087 9.79184 15.2116 9.46185 14.9373 8.91931C14.6665 8.3838 14.6317 7.68684 14.8662 6.8981C15.1592 5.91277 15.9478 5.34435 16.5837 5.07824Z\" />\n    <path d=\"M10.2255 15.5337L11.4477 16.756C12.4796 17.7879 14.1526 17.7879 15.1845 16.756C16.2164 15.7241 16.2164 14.051 15.1845 13.0191L10.2255 8.06003L5.26638 13.0191C4.23448 14.051 4.23448 15.7241 5.26638 16.756C6.29828 17.7879 7.97134 17.7879 9.00324 16.756L10.2255 15.5337ZM10.9326 7.35292L15.8916 12.312C17.3141 13.7344 17.3141 16.0406 15.8916 17.4631C14.4692 18.8855 12.163 18.8855 10.7406 17.4631L10.2255 16.948L9.71034 17.4631C8.28792 18.8855 5.9817 18.8855 4.55927 17.4631C3.13685 16.0406 3.13685 13.7344 4.55927 12.312L9.51834 7.35292C9.90887 6.9624 10.542 6.9624 10.9326 7.35292Z\" />\n  {%- when 'pepper' -%}\n    <path\n      d=\"M13.8697 0.56604C13.8697 0.289898 14.0935 0.06604 14.3697 0.06604H16.1634C16.4395 0.06604 16.6634 0.289898 16.6634 0.56604V2.00119C16.8943 2.11287 17.0762 2.2161 17.2364 2.32805C17.4622 2.48585 17.6272 2.64926 17.8098 2.83566C18.3879 3.4258 18.6838 4.0656 18.5812 4.59575C18.5301 4.85963 18.3669 5.11474 18.0821 5.22789C17.9221 8.51167 16.8642 11.1646 15.0245 13.383C13.1049 15.6976 10.3577 17.5112 6.97064 19.0917C5.83897 19.6198 4.66049 19.9164 3.67478 19.9278C2.73561 19.9387 1.7552 19.6826 1.37658 18.8445C1.17446 18.3971 1.11237 17.9655 1.26429 17.5467C1.40694 17.1534 1.71003 16.8573 2.02785 16.6059C2.26091 16.4216 2.54867 16.227 2.85558 16.0194C2.96642 15.9444 3.07977 15.8678 3.19393 15.7893C3.63681 15.4849 4.13145 15.1279 4.65693 14.6701C4.92064 14.4404 5.1939 14.2073 5.47234 13.9698C6.40218 13.1766 7.38971 12.3342 8.27196 11.4037C9.41554 10.1975 10.3247 8.89945 10.6603 7.47273C10.7012 7.29869 10.724 7.08615 10.7475 6.8208C10.7505 6.7866 10.7535 6.75157 10.7566 6.71584C10.7764 6.48649 10.7987 6.22794 10.8381 5.97015C10.8938 5.60546 10.9878 5.20747 11.1798 4.83151C11.1501 4.80403 11.1216 4.77301 11.0947 4.73804C10.8783 4.45736 10.9044 4.09427 10.9762 3.79231C11.0555 3.45849 11.2874 3.18135 11.5216 2.97117C11.7664 2.75155 12.0711 2.55419 12.3884 2.38942C12.8464 2.15153 13.3815 1.95585 13.8697 1.86928V0.56604ZM12.407 4.86811C12.409 4.86725 12.4109 4.86639 12.4129 4.86553C12.5275 4.8153 12.6251 4.76382 12.6749 4.73705C12.7418 4.71705 12.8926 4.7152 13.0953 4.80628C13.3053 4.90068 13.4627 5.0486 13.5278 5.17835C13.8801 5.881 14.5839 6.01378 15.1168 5.94363C15.387 5.90805 15.6472 5.8201 15.8648 5.7034C16.0705 5.59304 16.2919 5.42788 16.421 5.20375C16.4448 5.16235 16.5495 5.06452 16.7333 5.01828C16.8672 4.98459 16.9905 4.99199 17.0898 5.03328C16.9642 8.18191 15.9752 10.67 14.2547 12.7446C12.4678 14.8993 9.86837 16.636 6.54778 18.1856C5.51393 18.668 4.47602 18.9184 3.66318 18.9279C2.80379 18.9378 2.40347 18.6886 2.2879 18.4328C2.15392 18.1362 2.1692 17.9846 2.20436 17.8877C2.24879 17.7652 2.36666 17.613 2.64825 17.3902C2.8499 17.2307 3.09094 17.0677 3.38386 16.8696C3.50082 16.7905 3.62606 16.7057 3.76036 16.6134C4.2184 16.2986 4.74771 15.9173 5.31379 15.4241C5.56162 15.2082 5.82407 14.9844 6.09557 14.7529C7.03158 13.9546 8.07509 13.0647 8.99763 12.0917C10.1906 10.8335 11.2389 9.38021 11.6337 7.70168C11.6933 7.4485 11.7207 7.16834 11.7436 6.90875C11.7469 6.87165 11.7501 6.83481 11.7532 6.79817C11.7733 6.5669 11.7926 6.34398 11.8266 6.12103C11.9027 5.62261 12.0414 5.21135 12.3412 4.90777C12.3619 4.89477 12.3838 4.88149 12.407 4.86811ZM17.5332 4.1359C17.467 3.98775 17.339 3.7841 17.0954 3.53544C16.9171 3.35342 16.8072 3.24815 16.6635 3.14766C16.5173 3.0455 16.3189 2.93675 15.9612 2.77864C15.7802 2.69861 15.6634 2.51929 15.6634 2.32133V1.06604H14.8697V2.32133C14.8697 2.59747 14.6458 2.82133 14.3697 2.82133C13.9943 2.82133 13.3936 2.99416 12.8493 3.27687C12.5835 3.41493 12.3546 3.5673 12.1894 3.71553C12.0695 3.82309 12.0059 3.90791 11.9745 3.96414C12.0669 3.91366 12.1677 3.8644 12.2738 3.81991C12.6862 3.64699 13.1523 3.73558 13.5052 3.89417C13.8667 4.05666 14.2281 4.34391 14.4217 4.73012C14.5095 4.90511 14.6858 4.99174 14.9862 4.95218C15.1326 4.93291 15.2773 4.88373 15.3921 4.82216C15.5023 4.76309 15.5456 4.71437 15.5533 4.70578C15.5544 4.70449 15.5548 4.70411 15.5544 4.70472C15.7497 4.36558 16.1228 4.14073 16.4892 4.04851C16.8054 3.96897 17.1837 3.97088 17.5332 4.1359Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'perfume' -%}\n    <path\n      d=\"M14.3418 4.01136C13.9848 3.73496 12.6615 3.7584 11.331 3.78196C10.9574 3.78858 10.5832 3.79521 10.2297 3.79521C9.88584 3.79521 9.51668 3.78621 9.14346 3.77711C7.90091 3.74682 6.61334 3.71544 6.06507 4.01135C3.48159 5.40609 1.79797 8.51637 1.79797 11.5832C1.79797 14.7181 3.62382 17.4403 6.30228 18.8076C7.47516 19.4063 8.81154 19.7452 10.2297 19.7452C11.6478 19.7452 12.9842 19.4063 14.1571 18.8076C16.8356 17.4403 18.6614 14.7181 18.6614 11.5832C18.6614 8.51637 16.9253 5.4061 14.3418 4.01136ZM13.7989 4.85466C13.7595 4.84463 13.6961 4.83194 13.6031 4.81974C13.3808 4.79058 13.0786 4.77518 12.7062 4.77044C12.27 4.76489 11.8342 4.77295 11.3816 4.78132C11.0119 4.78816 10.631 4.79521 10.2297 4.79521C9.873 4.79521 9.49181 4.78591 9.12145 4.77687C9.08988 4.7761 9.0584 4.77533 9.02701 4.77457C8.62113 4.76474 8.22906 4.75612 7.86427 4.75895C7.49696 4.7618 7.18238 4.77625 6.93082 4.80758C6.80621 4.82309 6.70953 4.84128 6.63756 4.85985C6.57251 4.87665 6.54392 4.88963 6.54011 4.89136C6.53955 4.89162 6.53962 4.89163 6.54011 4.89136C4.31953 6.09024 2.79797 8.83678 2.79797 11.5832C2.79797 14.3156 4.38864 16.708 6.75693 17.9169C7.7914 18.4449 8.97223 18.7452 10.2297 18.7452C11.4871 18.7452 12.668 18.4449 13.7024 17.9169C16.0707 16.708 17.6614 14.3156 17.6614 11.5832C17.6614 8.84882 16.0972 6.09543 13.8668 4.89131L13.7989 4.85466ZM6.54011 4.89136C6.53955 4.89162 6.53962 4.89163 6.54011 4.89136Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path\n      d=\"M10.7202 1.18872H9.73911C9.18683 1.18872 8.73911 1.63644 8.73911 2.18872V3.75251H11.7202V2.18872C11.7202 1.63644 11.2725 1.18872 10.7202 1.18872ZM9.73911 0.188721C8.63454 0.188721 7.73911 1.08415 7.73911 2.18872V4.75251H12.7202V2.18872C12.7202 1.08415 11.8248 0.188721 10.7202 0.188721H9.73911Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M13.4614 8.96045L13.5166 8.96114L13.5717 8.96311L13.6267 8.9662L13.6815 8.97039L13.736 8.97567L13.7904 8.98201L13.8444 8.98939L13.8981 8.99778L13.9514 9.00715L14.0044 9.01746L14.0569 9.02867L14.1091 9.04076L14.1607 9.05367L14.212 9.06738L14.2627 9.08184L14.313 9.097L14.3628 9.11283L14.4122 9.12929L14.461 9.14634L14.5094 9.16393L14.5573 9.18204L14.6048 9.20061L14.6518 9.21959L14.6983 9.23898L14.7444 9.25871L14.7901 9.27876L14.8354 9.29908L14.8802 9.31965L14.9246 9.34041L14.9686 9.36133L15.0123 9.38239L15.0555 9.40353L15.0983 9.42474L15.1408 9.44596L15.1829 9.46718L15.2246 9.48834L15.2651 9.50901L15.3877 9.57183L15.5061 9.63227L15.5075 9.633L15.5448 9.65185L15.5466 9.65275L15.5832 9.67107L15.5854 9.67216L15.6211 9.68993L15.6237 9.6912L15.6587 9.70839L15.6617 9.70983L15.6959 9.72641L15.6993 9.72803L15.7327 9.74399L15.7364 9.74577L15.7711 9.76204L15.8073 9.77873L15.843 9.79484L15.8784 9.81047L15.9132 9.82547L15.9476 9.83991L15.9816 9.85375L16.0151 9.86697L16.0482 9.87957L16.0808 9.89151L16.1129 9.90284L16.1445 9.9135L16.1757 9.92352L16.2064 9.93288L16.2366 9.9416L16.2664 9.94967L16.2957 9.9571L16.3246 9.9639L16.353 9.97008L16.3811 9.97564L16.4087 9.9806L16.436 9.98497L16.463 9.98876L16.4897 9.99198L16.5162 9.99463L16.5424 9.99674L16.5685 9.9983L16.5944 9.99933L16.6203 9.99982L16.6462 9.99979L16.6721 9.99922L16.6981 9.99812L16.7242 9.99648L16.7505 9.99429L16.7769 9.99156L16.8037 9.98826L16.8307 9.98439L16.8581 9.97994L16.8858 9.97489L16.9139 9.96924L16.9424 9.96298L16.9713 9.95609L17.0007 9.94857L17.0305 9.9404L17.0608 9.9316L17.0916 9.92214L17.1228 9.91203L17.1545 9.90127L17.1867 9.88986L17.2194 9.87781L17.2525 9.86514L17.2861 9.85182L17.3201 9.8379L17.3546 9.82339L17.3896 9.80827L17.4249 9.79261L17.4607 9.77639L17.499 9.7587L17.5317 9.74329L17.5354 9.74153L17.5689 9.72548L17.5722 9.72389L17.6066 9.70721L17.6095 9.7058L17.6446 9.68853L17.6471 9.68728L17.683 9.66943L17.6851 9.66837L17.7218 9.64998L17.7235 9.64909L17.7609 9.63017L17.7623 9.62948L17.8005 9.61007L17.841 9.58936L18.4676 10.481L18.4271 10.5017L18.3855 10.5229L18.3842 10.5236L18.3436 10.5441L18.3419 10.5449L18.3013 10.5653L18.2992 10.5663L18.2587 10.5865L18.2562 10.5877L18.2127 10.6091L18.1689 10.6304L18.1247 10.6515L18.08 10.6725L18.035 10.6933L17.9895 10.7139L17.9436 10.7342L17.8972 10.7542L17.8504 10.7739L17.8032 10.7932L17.7555 10.8121L17.7073 10.8305L17.6587 10.8483L17.6096 10.8657L17.56 10.8825L17.5099 10.8986L17.4594 10.9141L17.4084 10.9288L17.3569 10.9428L17.305 10.956L17.2526 10.9684L17.1998 10.9799L17.1467 10.9904L17.0931 11.0001L17.0392 11.0087L16.985 11.0163L16.9306 11.0229L16.8759 11.0284L16.821 11.0328L16.766 11.0362L16.7108 11.0383L16.6556 11.0394L16.6004 11.0393L16.5453 11.0381L16.4902 11.0358L16.4353 11.0324L16.3806 11.0278L16.3261 11.0222L16.2718 11.0155L16.2179 11.0078L16.1643 10.9991L16.1111 10.9895L16.0583 10.9789L16.0058 10.9674L15.9538 10.955L15.9023 10.9418L15.8512 10.9279L15.8006 10.9132L15.7505 10.8978L15.7008 10.8818L15.6517 10.8651L15.6029 10.8479L15.5547 10.8301L15.5069 10.8119L15.4596 10.7932L15.4128 10.7741L15.3664 10.7546L15.3204 10.7347L15.2748 10.7146L15.2297 10.6942L15.185 10.6735L15.1408 10.6527L15.0969 10.6318L15.0534 10.6107L15.0128 10.5908L15.0103 10.5895L14.9697 10.5694L14.9676 10.5683L14.927 10.548L14.9252 10.5471L14.8847 10.5266L14.8833 10.5259L14.8427 10.5053L14.7599 10.4629L14.7191 10.442L14.5999 10.381L14.561 10.3612L14.5594 10.3605L14.5223 10.3418L14.5204 10.3408L14.4841 10.3227L14.4818 10.3215L14.4463 10.3039L14.4436 10.3026L14.4088 10.2856L14.4057 10.2841L14.3718 10.2677L14.3683 10.2661L14.3351 10.2503L14.3312 10.2485L14.2968 10.2324L14.2608 10.2159L14.2251 10.1999L14.19 10.1845L14.1552 10.1696L14.1209 10.1554L14.0871 10.1418L14.0537 10.1287L14.0208 10.1164L13.9884 10.1046L13.9564 10.0935L13.9249 10.083L13.8939 10.0732L13.8634 10.0641L13.8333 10.0555L13.8037 10.0477L13.7745 10.0404L13.7458 10.0338L13.7174 10.0279L13.6895 10.0225L13.662 10.0177L13.6348 10.0135L13.6079 10.0099L13.5813 10.0069L13.5549 10.0044L13.5287 10.0025L13.5027 10.0011L13.4767 10.0002L13.4509 9.99992L13.425 10.0001L13.3991 10.0009L13.3731 10.0021L13.3469 10.0039L13.3206 10.0063L13.294 10.0092L13.2672 10.0127L13.2401 10.0168L13.2126 10.0214L13.1848 10.0266L13.1565 10.0325L13.1279 10.0389L13.0988 10.046L13.0693 10.0537L13.0393 10.0621L13.0089 10.0711L12.978 10.0808L12.9466 10.0911L12.9147 10.1021L12.8824 10.1137L12.8496 10.1259L12.8163 10.1388L12.7826 10.1523L12.7484 10.1664L12.7137 10.1812L12.6787 10.1964L12.6432 10.2123L12.6073 10.2287L12.5729 10.2446L12.5689 10.2465L12.5359 10.2621L12.5324 10.2638L12.4986 10.2801L12.4954 10.2816L12.4608 10.2985L12.458 10.2998L12.4227 10.3173L12.4203 10.3185L12.3841 10.3365L12.3821 10.3375L12.3452 10.3561L12.3436 10.3569L12.306 10.376L12.3047 10.3766L12.2663 10.3962L12.1046 10.479L12.0635 10.5001L12.022 10.5212L12.0206 10.5219L11.9801 10.5424L11.9784 10.5432L11.9357 10.5646L11.8927 10.586L11.8493 10.6074L11.8055 10.6287L11.7613 10.6498L11.7167 10.6709L11.6717 10.6917L11.6262 10.7123L11.5804 10.7326L11.5341 10.7527L11.4873 10.7724L11.4401 10.7917L11.3924 10.8106L11.3443 10.829L11.2957 10.8469L11.2466 10.8643L11.197 10.8811L11.147 10.8973L11.0965 10.9128L11.0455 10.9277L10.9941 10.9417L10.9422 10.955L10.8899 10.9674L10.8372 10.979L10.784 10.9896L10.7305 10.9993L10.6767 11.008L10.6225 11.0158L10.568 11.0224L10.5134 11.028L10.4585 11.0325L10.4035 11.0359L10.3483 11.0382L10.2931 11.0394L10.2379 11.0394L10.1828 11.0383L10.1277 11.036L10.0728 11.0327L10.018 11.0282L9.9635 11.0227L9.90925 11.0161L9.85529 11.0085L9.80167 10.9999L9.74842 10.9903L9.69556 10.9797L9.64311 10.9683L9.59109 10.956L9.53953 10.9429L9.48841 10.929L9.43777 10.9144L9.3876 10.8991L9.3379 10.8831L9.28868 10.8665L9.23993 10.8493L9.19165 10.8316L9.14385 10.8134L9.0965 10.7947L9.0496 10.7756L9.00315 10.7561L8.95715 10.7363L8.91158 10.7162L8.86643 10.6958L8.8217 10.6752L8.77737 10.6544L8.73346 10.6334L8.68993 10.6124L8.6468 10.5912L8.60406 10.57L8.56353 10.5497L8.56169 10.5487L8.52116 10.5283L8.51971 10.5275L8.47809 10.5064L8.23618 10.3826L8.19717 10.3628L8.19565 10.362L8.15852 10.3433L8.15663 10.3424L8.12027 10.3242L8.11799 10.323L8.0824 10.3054L8.07974 10.3041L8.04338 10.2863L8.00611 10.2683L7.96921 10.2508L7.93276 10.2337L7.89668 10.2172L7.86107 10.2012L7.82586 10.1857L7.79108 10.1708L7.75676 10.1565L7.72287 10.1428L7.68948 10.1298L7.65653 10.1173L7.62405 10.1055L7.59204 10.0943L7.56052 10.0838L7.52946 10.074L7.49888 10.0648L7.46877 10.0562L7.43912 10.0483L7.40991 10.041L7.38115 10.0344L7.3528 10.0283L7.32485 10.0229L7.29728 10.0181L7.27006 10.0139L7.24314 10.0102L7.21651 10.0071L7.19011 10.0046L7.16391 10.0026L7.13786 10.0012L7.11192 10.0003L7.08603 9.99992L7.06016 10.0001L7.03424 10.0008L7.00824 10.002L6.98211 10.0038L6.95579 10.0061L6.92925 10.009L6.90244 10.0124L6.87534 10.0164L6.8479 10.021L6.8201 10.0262L6.79191 10.032L6.76331 10.0384L6.73427 10.0454L6.7048 10.0531L6.67486 10.0614L6.64446 10.0704L6.61358 10.08L6.58223 10.0903L6.55041 10.1012L6.51811 10.1127L6.48534 10.1249L6.4521 10.1378L6.4184 10.1512L6.38425 10.1653L6.34966 10.18L6.31461 10.1952L6.27914 10.211L6.24325 10.2274L6.20693 10.2442L6.17021 10.2616L6.13309 10.2794L6.09555 10.2977L6.05762 10.3164L6.01933 10.3355L5.98147 10.3545L5.97981 10.3553L5.94221 10.3744L5.94094 10.375L5.6584 10.5195L5.65709 10.5202L5.61487 10.5415L5.57226 10.5629L5.52928 10.5843L5.48591 10.6057L5.44214 10.627L5.39797 10.6482L5.3534 10.6692L5.30841 10.69L5.263 10.7107L5.21716 10.731L5.17088 10.7511L5.12415 10.7708L5.07698 10.7902L5.02935 10.8091L4.98125 10.8276L4.93268 10.8455L4.88364 10.863L4.83412 10.8798L4.78413 10.8961L4.73367 10.9116L4.68273 10.9265L4.63134 10.9406L4.57949 10.954L4.52721 10.9665L4.4745 10.9781L4.42139 10.9888L4.36791 10.9986L4.31408 11.0074L4.25993 11.0152L4.20551 11.0219L4.15084 11.0276L4.09597 11.0322L4.04095 11.0357L3.98583 11.0381L3.93064 11.0393L3.87544 11.0394L3.82028 11.0384L3.7652 11.0363L3.71026 11.033L3.65549 11.0286L3.60095 11.0232L3.54667 11.0167L3.49269 11.0091L3.43904 11.0006L3.38576 10.9911L3.33287 10.9806L3.28039 10.9692L3.22833 10.957L3.17673 10.944L3.12558 10.9302L3.0749 10.9156L3.02469 10.9003L2.97496 10.8844L2.9257 10.8678L2.87691 10.8507L2.8286 10.833L2.78075 10.8148L2.73337 10.7962L2.68644 10.7771L2.63995 10.7577L2.59391 10.7379L2.54831 10.7178L2.50312 10.6974L2.45836 10.6768L2.414 10.6561L2.37005 10.6351L2.3265 10.614L2.28334 10.5929L2.24056 10.5717L2.19817 10.5504L2.15615 10.5292L2.11451 10.5081L2.07397 10.4874L1.9918 10.4453L2.6201 9.55449L2.70043 9.59565L2.74004 9.61587L2.77927 9.63579L2.81812 9.6554L2.85661 9.67466L2.8947 9.69354L2.93241 9.71202L2.96972 9.73006L3.00663 9.74764L3.04314 9.76474L3.07923 9.78132L3.1149 9.79738L3.15014 9.81288L3.18494 9.82781L3.2193 9.84216L3.25321 9.85589L3.28666 9.86902L3.31964 9.88151L3.35216 9.89336L3.3842 9.90458L3.41577 9.91514L3.44686 9.92505L3.47748 9.93432L3.50763 9.94293L3.53732 9.9509L3.56656 9.95823L3.59536 9.96493L3.62374 9.97101L3.65172 9.97647L3.67931 9.98134L3.70657 9.98561L3.73351 9.98931L3.76016 9.99244L3.78658 9.99501L3.81279 9.99703L3.83885 9.9985L3.8648 9.99944L3.89069 9.99985L3.91656 9.99973L3.94247 9.99908L3.96846 9.99789L3.99459 9.99616L4.02089 9.99389L4.04741 9.99107L4.07419 9.98768L4.10127 9.98372L4.12868 9.97917L4.15645 9.97403L4.18461 9.96829L4.21318 9.96192L4.24218 9.95494L4.27162 9.94731L4.30152 9.93905L4.33189 9.93013L4.36273 9.92057L4.39404 9.91036L4.42582 9.8995L4.45808 9.88799L4.49082 9.87584L4.52402 9.86306L4.55768 9.84965L4.59179 9.83563L4.62636 9.82101L4.66137 9.80582L4.69679 9.79006L4.73267 9.77376L4.76895 9.75693L4.80563 9.73962L4.84272 9.72182L4.88024 9.70356L4.91812 9.6849L4.9564 9.66584L4.9942 9.64684L4.99589 9.64599L5.03343 9.62699L5.03474 9.62633L5.27562 9.50309L5.31835 9.48133L5.36054 9.45996L5.40311 9.43856L5.44606 9.41716L5.4894 9.39579L5.53314 9.37449L5.57728 9.3533L5.62182 9.33226L5.66677 9.3114L5.71215 9.29076L5.75796 9.27038L5.8042 9.25029L5.85089 9.23054L5.89803 9.21116L5.94563 9.19219L5.99369 9.17368L6.04221 9.15566L6.09122 9.13818L6.1407 9.12128L6.19065 9.10499L6.24108 9.08937L6.29197 9.07444L6.34333 9.06026L6.39515 9.04687L6.4474 9.0343L6.50007 9.0226L6.55315 9.0118L6.6066 9.00194L6.6604 8.99306L6.71453 8.98519L6.76893 8.97835L6.82358 8.97258L6.87843 8.9679L6.93344 8.96432L6.98856 8.96186L7.04375 8.96053L7.09895 8.96033L7.15411 8.96126L7.2092 8.96332L7.26416 8.96649L7.31893 8.97077L7.3735 8.97614L7.4278 8.98256L7.4818 8.99002L7.53548 8.99849L7.58879 9.00793L7.64172 9.01832L7.69423 9.0296L7.74632 9.04176L7.79796 9.05474L7.84914 9.0685L7.89986 9.08302L7.95011 9.09824L7.99988 9.11412L8.04918 9.13063L8.098 9.14772L8.14635 9.16536L8.19424 9.1835L8.24166 9.2021L8.28862 9.22113L8.33514 9.24054L8.38122 9.2603L8.42686 9.28037L8.47208 9.30071L8.51688 9.32129L8.56126 9.34207L8.60525 9.36301L8.64883 9.38407L8.69202 9.40522L8.73483 9.42643L8.77725 9.44765L8.8193 9.46886L8.86097 9.49002L9.10323 9.61399L9.14231 9.63385L9.14377 9.63458L9.18101 9.65339L9.18285 9.65431L9.21933 9.67259L9.22154 9.67369L9.25727 9.69142L9.25986 9.6927L9.2963 9.71056L9.33362 9.72863L9.37057 9.74625L9.40713 9.7634L9.44326 9.78002L9.47897 9.79612L9.51423 9.81167L9.54907 9.82665L9.58346 9.84103L9.61741 9.85482L9.6509 9.868L9.68392 9.88054L9.71647 9.89244L9.74855 9.90371L9.78015 9.91432L9.81129 9.92429L9.84194 9.9336L9.87214 9.94227L9.90185 9.95029L9.93114 9.95767L9.95997 9.96442L9.98838 9.97055L10.0164 9.97606L10.044 9.98097L10.0713 9.98529L10.0983 9.98904L10.1249 9.99221L10.1514 9.99482L10.1776 9.99689L10.2037 9.99841L10.2296 9.99939L10.2555 9.99984L10.2814 9.99976L10.3073 9.99915L10.3333 9.998L10.3594 9.99632L10.3857 9.99409L10.4122 9.99131L10.4389 9.98797L10.466 9.98406L10.4934 9.97956L10.5211 9.97447L10.5492 9.96877L10.5778 9.96245L10.6067 9.95552L10.6361 9.94794L10.666 9.93973L10.6963 9.93087L10.7271 9.92136L10.7584 9.91119L10.7902 9.90038L10.8224 9.88893L10.8551 9.87683L10.8882 9.86409L10.9219 9.85074L10.9559 9.83677L10.9905 9.8222L11.0254 9.80706L11.0609 9.79133L11.0967 9.77507L11.1329 9.75829L11.1696 9.74101L11.2066 9.72325L11.2427 9.70574L11.2807 9.68702L11.2832 9.68579L11.3192 9.6679L11.3213 9.66685L11.358 9.64841L11.3597 9.64754L11.3972 9.62859L11.3985 9.6279L11.6806 9.48366L11.6819 9.48303L11.724 9.46166L11.7666 9.44026L11.8095 9.41886L11.8528 9.39749L11.8965 9.37618L11.9406 9.35499L11.9851 9.33393L12.0301 9.31306L12.0754 9.29239L12.1212 9.27199L12.1674 9.25188L12.214 9.2321L12.2611 9.21269L12.3087 9.19369L12.3567 9.17514L12.4052 9.15708L12.4542 9.13955L12.5036 9.1226L12.5535 9.10626L12.6039 9.09058L12.6548 9.0756L12.7061 9.06136L12.7579 9.0479L12.8101 9.03527L12.8627 9.0235L12.9158 9.01262L12.9692 9.00269L13.023 8.99373L13.0771 8.98578L13.1315 8.97886L13.1861 8.973L13.2409 8.96823L13.2959 8.96457L13.3511 8.96202L13.4062 8.96059L13.4614 8.96045Z\" />\n    <path d=\"M10.2005 3.75842C10.4767 3.75842 10.7005 3.98228 10.7005 4.25842V14.4612C10.7005 14.7374 10.4767 14.9612 10.2005 14.9612C9.92437 14.9612 9.70052 14.7374 9.70052 14.4612L9.70052 4.25842C9.70052 3.98228 9.92437 3.75842 10.2005 3.75842Z\" />\n  {%- when 'plane' -%}\n    <path d=\"M16.4116 2.07871C16.3845 2.09721 16.3574 2.11565 16.3303 2.13411C16.1517 2.25559 15.9719 2.37791 15.7837 2.52296L15.7773 2.52789C14.8355 3.23007 13.6039 4.27066 12.2818 5.4955C12.1614 5.60703 11.994 5.65239 11.8338 5.61687L3.68598 3.81033C3.60396 3.80009 3.57101 3.79608 3.53891 3.79608C3.32198 3.79608 3.11893 3.92321 3.0302 4.12886C2.92673 4.39247 3.02138 4.67552 3.23628 4.81149L3.24111 4.81454L8.61434 8.30083C8.741 8.38301 8.82374 8.51802 8.83947 8.66819C8.8552 8.81836 8.80223 8.96759 8.69534 9.07423L8.66991 9.09961C7.38122 10.4798 6.31043 11.7361 5.58838 12.7137C5.47003 12.8747 5.36378 13.0195 5.27879 13.1514C5.16553 13.3272 4.95486 13.4139 4.75068 13.3689L2.19767 12.8052C2.11507 12.7948 2.08257 12.7908 2.05053 12.7908C1.83353 12.7908 1.6304 12.918 1.54169 13.1236C1.44423 13.3719 1.52255 13.6375 1.71155 13.7811L4.70992 14.8869C4.84334 14.9361 4.9495 15.0398 5.00183 15.172L6.23217 18.2805C6.33749 18.4229 6.50021 18.5 6.6743 18.5C6.68974 18.5 6.70318 18.4991 6.71409 18.4977C6.75433 18.4624 6.80008 18.4337 6.84965 18.4128C7.09772 18.3083 7.23368 18.0443 7.17792 17.7789L7.17755 17.7772L6.60833 15.2112C6.56292 15.0066 6.65004 14.7953 6.82652 14.6821C6.90797 14.6299 6.97089 14.584 7.04582 14.5293C7.10751 14.4844 7.17733 14.4334 7.27233 14.3682C8.25973 13.6492 9.5053 12.5837 10.8878 11.2987L10.9132 11.2733C11.0198 11.1669 11.1687 11.1143 11.3185 11.13C11.4683 11.1457 11.603 11.2281 11.6853 11.3542L15.1827 16.7203C15.2864 16.8837 15.4603 16.9728 15.6474 16.9728C15.7137 16.9728 15.7958 16.9563 15.866 16.9273C16.1134 16.8225 16.2489 16.5588 16.1933 16.294L14.3782 8.1444C14.3425 7.9844 14.3876 7.8171 14.4987 7.69663C15.7202 6.37288 16.7705 5.15757 17.4604 4.21249L17.4689 4.20111C17.614 4.01381 17.7363 3.83484 17.8578 3.65697C17.8763 3.6299 17.8948 3.60285 17.9133 3.5758C18.0978 3.29428 18.3328 2.929 18.4428 2.55475C18.5482 2.19592 18.5158 1.92451 18.2922 1.70148C18.1713 1.58082 17.9849 1.5 17.7692 1.5C17.4882 1.5 17.1061 1.62056 16.4116 2.07871ZM11.1716 12.3976C9.92929 13.5361 8.79171 14.4994 7.85517 15.1808L7.84395 15.1889C7.79752 15.2208 7.73884 15.2628 7.67606 15.308C7.66979 15.3125 7.66348 15.3171 7.65713 15.3216L8.15558 17.5686C8.30356 18.2625 7.96934 18.9767 7.32384 19.2951C7.10254 19.4742 6.82781 19.5 6.6743 19.5C6.16465 19.5 5.66279 19.2521 5.36533 18.7835C5.34846 18.7569 5.33414 18.7288 5.32255 18.6996L4.15425 15.7478L1.30743 14.6979C1.27444 14.6858 1.24282 14.6701 1.2131 14.6513C0.56351 14.2403 0.341328 13.4303 0.615189 12.7472L0.618547 12.7388C0.868584 12.1463 1.44556 11.7908 2.05053 11.7908C2.15024 11.7908 2.24946 11.8035 2.31873 11.8124C2.32791 11.8136 2.33656 11.8147 2.34462 11.8157C2.36005 11.8177 2.37537 11.8203 2.39055 11.8237L4.63775 12.3198C4.68444 12.255 4.73137 12.1912 4.77648 12.1298L4.78291 12.1211L4.78359 12.1202C5.46491 11.1976 6.42874 10.0567 7.57005 8.81531L2.69897 5.65488C2.05143 5.24337 1.8302 4.43467 2.1037 3.75248L2.10706 3.74411C2.35707 3.15168 2.93387 2.79608 3.53891 2.79608C3.63888 2.79608 3.73821 2.8088 3.80785 2.81773C3.81678 2.81887 3.82523 2.81996 3.83313 2.82094C3.8487 2.82288 3.86417 2.82556 3.87949 2.82895L11.795 4.58399C13.0596 3.4216 14.2446 2.42349 15.1764 1.72853C15.3888 1.56496 15.5937 1.42564 15.7706 1.30538C15.7981 1.28666 15.8249 1.26841 15.851 1.2506L15.8574 1.24625C16.5966 0.758201 17.1851 0.5 17.7692 0.5C18.2292 0.5 18.6761 0.671867 18.9985 0.99357C19.5773 1.57101 19.566 2.27912 19.4022 2.83663C19.2467 3.36596 18.9337 3.8433 18.7575 4.11215L18.7411 4.13711C18.7231 4.16341 18.7045 4.19042 18.6855 4.21819C18.5656 4.39374 18.4268 4.59704 18.2639 4.80777C17.5744 5.7516 16.563 6.92641 15.411 8.182L17.1709 16.0836C17.3254 16.8078 16.9545 17.5539 16.2531 17.8493L16.2509 17.8503C16.0679 17.9263 15.8552 17.9728 15.6474 17.9728C15.1387 17.9728 14.6379 17.7259 14.3402 17.2591L11.1716 12.3976Z\" />\n  {%- when 'plant' -%}\n    <path d=\"M15.9633 5.16568C16.1818 5.33464 16.2219 5.64867 16.0529 5.86709L11.2315 12.1C10.7573 12.7132 10.5 13.4664 10.5 14.2415L10.5 17.728C10.5 18.0041 10.2761 18.228 9.99998 18.228C9.72384 18.228 9.49998 18.0041 9.49998 17.728L9.49997 14.2415C9.49997 13.2449 9.8308 12.2765 10.4406 11.4882L15.2619 5.25525C15.4309 5.03683 15.7449 4.99673 15.9633 5.16568Z\" />\n    <path d=\"M4.13656 9.11047C3.94637 9.31067 3.95448 9.62715 4.15469 9.81735L8.41061 13.8605C9.10616 14.5213 9.49997 15.4386 9.49997 16.398V19.5C9.49997 19.7761 9.72383 20 9.99997 20C10.2761 20 10.5 19.7761 10.5 19.5V16.398C10.5 15.1645 9.99364 13.9851 9.09936 13.1355L4.84344 9.09235C4.64324 8.90216 4.32676 8.91027 4.13656 9.11047Z\" />\n    <path\n      d=\"M18.3779 1.53927C18.4327 2.29021 18.4725 3.32703 18.4047 4.40738C18.3125 5.87411 18.0299 7.25745 17.4545 8.14562C16.7167 9.28439 15.6883 9.90008 14.7112 10.1459C13.6919 10.4023 12.8474 10.2333 12.4595 9.98203C11.6151 9.43502 10.6657 7.26257 12.1639 4.95007C12.7171 4.09609 13.9498 3.29603 15.4075 2.63437C16.4929 2.1417 17.5917 1.77412 18.3779 1.53927ZM18.7295 0.399095C19.0125 0.322287 19.2884 0.513872 19.3179 0.805582C19.4683 2.2906 19.735 6.46465 18.2937 8.68934C16.5205 11.4265 13.2903 11.7118 11.9158 10.8213C10.5413 9.93084 9.57124 7.11282 11.3246 4.40636C12.7665 2.18066 17.2 0.814295 18.7295 0.399095Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path\n      d=\"M1.16197 6.23639C1.24915 6.80305 1.38541 7.51404 1.5922 8.22877C1.89834 9.28691 2.31835 10.2055 2.84189 10.729C3.54804 11.4352 4.37904 11.7175 5.11404 11.7439C5.89258 11.7719 6.44282 11.5154 6.64245 11.3158C7.09947 10.8588 7.49486 9.18578 6.0474 7.73833C5.55144 7.24237 4.58274 6.85006 3.40831 6.58298C2.60103 6.3994 1.79173 6.29511 1.16197 6.23639ZM0.569611 5.18777C0.276949 5.16998 0.0467941 5.41364 0.080866 5.70486C0.226586 6.95034 0.719124 10.0205 2.13478 11.4362C3.93434 13.2357 6.44588 12.9266 7.34955 12.0229C8.25323 11.1193 8.53389 8.8106 6.75451 7.03122C5.33581 5.61253 1.90298 5.26882 0.569611 5.18777Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'price_tag' -%}\n    <path\n      d=\"M1.16154 11.8423L8.09186 18.829C8.28991 19.0287 8.61108 19.0284 8.80882 18.8285L18.839 8.68572C18.9337 8.58998 18.9868 8.46032 18.9868 8.32514V1.53212C18.9868 1.25006 18.76 1.02141 18.4802 1.02141L11.387 1.02147C11.2527 1.02147 11.1238 1.07529 11.0288 1.17108L1.16151 11.1201C0.963704 11.3195 0.963715 11.6428 1.16154 11.8423ZM20 1.53212C20 0.685947 19.3196 -6.58649e-06 18.4802 0L11.387 5.82026e-05C10.9839 6.15389e-05 10.5973 0.161509 10.3123 0.448879L0.445049 10.3979C-0.148378 10.9962 -0.148346 11.9662 0.445123 12.5645L7.37544 19.5513C7.96958 20.1502 8.9331 20.1495 9.52633 19.5496L19.5565 9.40686C19.8405 9.11967 20 8.73068 20 8.32514V1.53212Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M15.9028 8.22958C14.7801 9.36148 12.9597 9.36148 11.837 8.22958C10.7142 7.09769 10.7142 5.26253 11.837 4.13064C12.9597 2.99875 14.7801 2.99875 15.9028 4.13064C17.0256 5.26253 17.0256 7.09769 15.9028 8.22958ZM12.5534 7.50734C13.2805 8.24034 14.4593 8.24034 15.1864 7.50734C15.9135 6.77433 15.9135 5.58589 15.1864 4.85289C14.4593 4.11988 13.2805 4.11988 12.5534 4.85289C11.8263 5.58589 11.8263 6.77433 12.5534 7.50734Z\" />\n  {%- when 'question_mark' -%}\n    <path d=\"M9.56285 11.959C9.36021 11.959 9.19593 11.7947 9.19593 11.5921V11.4654C9.19266 10.9745 9.27959 10.5556 9.51194 10.162C9.73885 9.77751 10.0875 9.44653 10.5519 9.09905C10.9668 8.78804 11.2183 8.53255 11.3688 8.28844C11.5132 8.05415 11.577 7.80994 11.577 7.49433V7.48101C11.577 6.58737 10.9199 5.94963 10.0093 5.94963C9.14693 5.94963 8.48176 6.556 8.39691 7.55858C8.38999 7.64041 8.35581 7.71754 8.29986 7.77765L8.29366 7.78431C8.22548 7.85755 8.13034 7.89977 8.03028 7.90119L7.55903 7.90785C7.43278 7.90963 7.31449 7.84638 7.24586 7.7404C7.19061 7.65507 7.1738 7.55171 7.19715 7.45492C7.30916 5.93601 8.41577 4.74287 10.0217 4.74287C11.6246 4.74287 12.8131 5.91906 12.8131 7.46103V7.47435C12.8131 7.98614 12.6995 8.4388 12.4473 8.86135C12.199 9.27731 11.8283 9.64397 11.3455 10.0059L11.3431 10.0077C10.929 10.313 10.7058 10.5344 10.5791 10.746C10.4596 10.9455 10.4072 11.1677 10.4072 11.5174V11.5921C10.4072 11.7947 10.2429 11.959 10.0403 11.959H9.56285ZM10.7049 14.3815C10.7049 14.8554 10.3695 15.2613 9.86668 15.2613C9.36996 15.2613 9.02231 14.862 9.02231 14.3815C9.02231 13.9045 9.37305 13.5084 9.86668 13.5084C10.3665 13.5084 10.7049 13.911 10.7049 14.3815Z\" />\n    <path d=\"M18.5 10C18.5 14.6944 14.6944 18.5 10 18.5C5.30558 18.5 1.5 14.6944 1.5 10C1.5 5.30558 5.30558 1.5 10 1.5C14.6944 1.5 18.5 5.30558 18.5 10ZM10 17.4967C14.1403 17.4967 17.4967 14.1403 17.4967 10C17.4967 5.85971 14.1403 2.50335 10 2.50335C5.85971 2.50335 2.50335 5.85971 2.50335 10C2.50335 14.1403 5.85971 17.4967 10 17.4967Z\" />\n  {%- when 'recycle' -%}\n    <path d=\"M10.7058 0.549946C11.0066 0.550342 11.3069 0.550737 11.5727 0.54775C12.6717 0.535401 13.4169 1.32825 13.7106 1.83393L15.3904 4.63773L16.1669 4.22927C16.3476 4.13421 16.5679 4.15856 16.7235 4.29078C16.879 4.42299 16.9386 4.63651 16.8739 4.83016L15.5307 8.85205C15.45 9.09376 15.2004 9.23609 14.9512 9.18246L10.5904 8.24369C10.3905 8.20066 10.2369 8.04021 10.2027 7.8386C10.1684 7.63698 10.2604 7.43484 10.4349 7.32822L11.3466 6.77121L10.491 5.35356L9.16947 7.63949C9.0331 7.87537 8.73297 7.95865 8.49456 7.82675L5.46517 6.15084C5.34568 6.08474 5.25843 5.97265 5.22367 5.8406C5.18892 5.70854 5.20968 5.56802 5.28114 5.45166C5.75753 4.67599 6.64634 3.14684 7.2264 2.14351C7.52092 1.63407 7.80943 1.26638 8.12347 1.01328C8.44922 0.750745 8.77858 0.630664 9.11576 0.579998C9.12637 0.578405 9.13702 0.577153 9.14771 0.576245C9.4761 0.548329 10.0919 0.549139 10.7058 0.549946ZM10.925 4.13746L12.4598 6.68024C12.6019 6.91575 12.5271 7.22186 12.2924 7.36528L12.0238 7.52936L14.724 8.11064L15.5313 5.69358L15.4374 5.74295C15.2026 5.8665 14.9121 5.78506 14.7757 5.55742L12.8469 2.33802C12.6459 1.99038 12.1756 1.54104 11.584 1.54769C11.2714 1.5512 10.9415 1.55066 10.6262 1.55014C10.059 1.54921 9.53863 1.54836 9.24893 1.5713C9.06973 1.60012 8.91602 1.65888 8.75098 1.79189C8.72575 1.81222 8.69986 1.83462 8.67329 1.85932C9.41082 2.17381 10.3422 2.86027 10.925 4.13746ZM8.06135 2.69724C7.58009 3.52944 6.89514 4.70818 6.40422 5.52752L8.5493 6.71421L9.91606 4.35001C9.36655 3.30179 8.53989 2.84656 8.06135 2.69724Z\" />\n    <path d=\"M18.8984 16.3552C18.7447 16.6138 18.5913 16.872 18.4584 17.1022C17.909 18.0541 16.847 18.2912 16.2622 18.2861L12.9938 18.3026L12.9496 19.1788C12.9393 19.3827 12.806 19.5598 12.613 19.6263C12.4199 19.6928 12.2059 19.6352 12.0722 19.4809L9.29638 16.2755C9.12955 16.0828 9.1343 15.7955 9.30742 15.6085L12.3375 12.3349C12.4764 12.1848 12.6927 12.1345 12.8837 12.2078C13.0746 12.2811 13.2016 12.4632 13.2044 12.6677L13.219 13.736L14.8748 13.7223L13.5815 11.4203C13.4481 11.1827 13.5294 10.8821 13.7644 10.7442L16.7502 8.99179C16.8679 8.92267 17.0089 8.90473 17.1402 8.94212C17.2715 8.97951 17.3818 9.06899 17.4455 9.18978C17.8701 9.99496 18.7328 11.539 19.3005 12.5494C19.5887 13.0624 19.758 13.498 19.8157 13.8972C19.8756 14.3113 19.8111 14.6559 19.6828 14.9718C19.6788 14.9817 19.6745 14.9916 19.6698 15.0012C19.5264 15.298 19.2119 15.8274 18.8984 16.3552ZM15.7 14.7155L12.73 14.7401C12.455 14.7424 12.2297 14.522 12.2259 14.247L12.2216 13.9323L10.3454 15.9593L12.0136 17.8856L12.019 17.7797C12.0324 17.5147 12.2505 17.3063 12.5158 17.3049L16.2688 17.2861C16.6703 17.2904 17.2966 17.1147 17.5924 16.6023C17.7487 16.3315 17.9172 16.048 18.0784 15.7769C18.3682 15.2895 18.6342 14.8421 18.7621 14.5812C18.8286 14.4123 18.8564 14.2501 18.826 14.0403C18.8214 14.0083 18.8153 13.9746 18.8076 13.9391C18.1612 14.4134 17.0959 14.8649 15.7 14.7155ZM18.3985 12.9856C17.9278 12.1474 17.2627 10.9574 16.8079 10.1174L14.6937 11.3582L16.0313 13.7391C17.2132 13.8005 18.0262 13.3212 18.3985 12.9856Z\" />\n    <path d=\"M1.15621 15.7354C1.00906 15.473 0.862139 15.2111 0.729208 14.9809C0.179617 14.0291 0.505229 12.9909 0.801973 12.487L2.42199 9.6482L1.68529 9.17176C1.51385 9.06089 1.42705 8.85692 1.466 8.65651C1.50496 8.4561 1.66185 8.2995 1.86233 8.26092L6.0262 7.45965C6.27645 7.4115 6.52288 7.55926 6.59829 7.80269L7.91826 12.0636C7.97877 12.259 7.91423 12.4715 7.7553 12.6002C7.59636 12.7289 7.37508 12.7478 7.1966 12.648L6.26413 12.1265L5.4481 13.5673L8.08835 13.5983C8.3608 13.6015 8.58054 13.8222 8.58248 14.0947L8.60717 17.5567C8.60815 17.6932 8.55323 17.8242 8.45518 17.9193C8.35714 18.0143 8.22448 18.0651 8.08803 18.0599C7.17842 18.025 5.4099 18.0001 4.25104 17.9865C3.66263 17.9796 3.20071 17.9084 2.82615 17.7588C2.43762 17.6036 2.17147 17.3755 1.96199 17.1064C1.9554 17.098 1.94909 17.0893 1.94306 17.0804C1.75771 16.8079 1.45648 16.2708 1.15621 15.7354ZM4.1754 13.7853L5.63906 11.201C5.77463 10.9616 6.07809 10.8767 6.31818 11.011L6.59287 11.1646L5.77555 8.52624L3.27316 9.00778L3.36221 9.06537C3.58504 9.20948 3.65648 9.50256 3.52495 9.73304L1.66481 12.9926C1.46034 13.3382 1.29934 13.9685 1.59519 14.4808C1.75154 14.7515 1.91278 15.0392 2.06695 15.3144C2.34421 15.8091 2.59863 16.2631 2.76066 16.5043C2.87365 16.6464 3.00022 16.7515 3.19707 16.8302C3.22716 16.8422 3.25937 16.8538 3.29393 16.8648C3.20641 16.0678 3.34805 14.9195 4.1754 13.7853ZM4.32426 16.9873C5.28553 16.9987 6.6487 17.0177 7.60349 17.0439L7.586 14.5925L4.85535 14.5605C4.2112 15.5533 4.21977 16.497 4.32426 16.9873Z\" />\n  {%- when 'return' -%}\n    <path d=\"M11.571 1.05882C11.571 0.750194 11.8198 0.5 12.1266 0.5H13.4572C17.0692 0.5 20 3.45304 20 7.08924C20 10.7255 17.0692 13.6785 13.4572 13.6785L1.89992 13.7105L1.30855 13.1197L1.89992 12.5484L13.4572 12.5608C16.4541 12.5608 18.8889 10.1096 18.8889 7.08924C18.8889 4.06891 16.4541 1.61765 13.4572 1.61765H12.1266C11.8198 1.61765 11.571 1.36745 11.571 1.05882Z\" />\n    <path d=\"M6.00311 7.00677C6.22317 6.7917 6.57489 6.79679 6.78871 7.01815C7.00252 7.2395 6.99746 7.59329 6.7774 7.80836L6.00311 7.00677ZM1.30855 13.1197L6.73968 18.5463C6.9565 18.7647 6.95627 19.1185 6.73917 19.3366C6.52207 19.5547 6.17031 19.5544 5.9535 19.3361L0.162462 13.5034C0.0572388 13.3974 -0.00128425 13.2533 2.13868e-05 13.1036C0.00132703 12.9538 0.0623521 12.8108 0.169407 12.7067C0.3269 12.5535 1.78474 11.1291 3.20439 9.74186L6.00311 7.00677L6.7774 7.80836L3.97862 10.5435C2.95441 11.5444 1.8705 12.5709 1.30855 13.1197Z\" />\n  {%- when 'ruler' -%}\n    <path\n      d=\"M18.9836 5.32852L14.6715 1.01638L1.01638 14.6715L5.32852 18.9836L18.9836 5.32852ZM15.3902 0.297691C14.9933 -0.0992303 14.3497 -0.0992303 13.9528 0.297691L0.297691 13.9528C-0.0992301 14.3497 -0.0992305 14.9932 0.297691 15.3902L4.60983 19.7023C5.00675 20.0992 5.65029 20.0992 6.04721 19.7023L19.7023 6.04721C20.0992 5.65029 20.0992 5.00675 19.7023 4.60983L15.3902 0.297691Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M11.7863 2.67056C11.9848 2.4721 12.3065 2.4721 12.505 2.67056L14.4237 4.58927C14.6222 4.78774 14.6222 5.1095 14.4237 5.30796C14.2252 5.50642 13.9035 5.50642 13.705 5.30796L11.7863 3.38925C11.5878 3.19079 11.5878 2.86902 11.7863 2.67056Z\" />\n    <path d=\"M8.93891 5.36331C9.13737 5.16485 9.45914 5.16485 9.6576 5.36331L11.5763 7.28202C11.7748 7.48048 11.7748 7.80225 11.5763 8.00071C11.3779 8.19917 11.0561 8.19917 10.8576 8.00071L8.93891 6.082C8.74045 5.88354 8.74045 5.56177 8.93891 5.36331Z\" />\n    <path d=\"M6.24307 8.20742C6.44153 8.00896 6.76329 8.00896 6.96175 8.20742L8.88047 10.1261C9.07893 10.3246 9.07893 10.6464 8.88047 10.8448C8.68201 11.0433 8.36024 11.0433 8.16178 10.8448L6.24307 8.92611C6.0446 8.72765 6.0446 8.40588 6.24307 8.20742Z\" />\n    <path d=\"M3.37296 10.8776C3.57142 10.6791 3.89319 10.6791 4.09165 10.8776L6.01036 12.7963C6.20882 12.9948 6.20882 13.3165 6.01036 13.515C5.8119 13.7134 5.49013 13.7134 5.29167 13.515L3.37296 11.5963C3.1745 11.3978 3.1745 11.076 3.37296 10.8776Z\" />\n  {%- when 'serving_dish' -%}\n    <path d=\"M10 7.22864C5.83597 7.22864 2.44179 10.6819 2.44179 14.9649C2.44179 15.241 2.21794 15.4649 1.94179 15.4649C1.66565 15.4649 1.44179 15.241 1.44179 14.9649C1.44179 10.1503 5.2632 6.22864 10 6.22864C14.7369 6.22864 18.5583 10.1503 18.5583 14.9649C18.5583 15.241 18.3344 15.4649 18.0583 15.4649C17.7821 15.4649 17.5583 15.241 17.5583 14.9649C17.5583 10.6819 14.1641 7.22864 10 7.22864Z\" />\n    <path d=\"M0.473022 14.9867C0.473022 14.7106 0.69688 14.4867 0.973022 14.4867H19.027C19.3032 14.4867 19.527 14.7106 19.527 14.9867C19.527 15.2628 19.3032 15.4867 19.027 15.4867H0.973022C0.69688 15.4867 0.473022 15.2628 0.473022 14.9867Z\" />\n    <path d=\"M6.09332 9.9023C6.15244 10.0271 6.09921 10.1761 5.97443 10.2353C5.51339 10.4537 4.52514 11.2638 4.43389 12.6935C4.4251 12.8313 4.30627 12.9358 4.16847 12.927C4.03068 12.9183 3.92611 12.7994 3.93491 12.6616C4.04068 11.0045 5.18149 10.0577 5.76036 9.78341C5.88513 9.72429 6.03421 9.77752 6.09332 9.9023Z\" />\n    <path\n      d=\"M10.4906 5.04834H9.5095C8.95722 5.04834 8.5095 5.49605 8.5095 6.04834V6.1947H11.4906V6.04834C11.4906 5.49606 11.0429 5.04834 10.4906 5.04834ZM9.5095 4.04834C8.40493 4.04834 7.5095 4.94377 7.5095 6.04834V7.1947H12.4906V6.04834C12.4906 4.94377 11.5952 4.04834 10.4906 4.04834H9.5095Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'shirt' -%}\n    <path d=\"M5.81971 2.09623C5.66962 2.09623 5.54176 2.15186 5.44395 2.25357L1.21145 6.65441C1.1088 6.76918 1.05429 6.90939 1.05429 7.05112C1.05429 7.20712 1.10783 7.34015 1.20568 7.44189L3.32991 9.65061C3.44515 9.76252 3.57826 9.81363 3.71113 9.81363C3.85775 9.81363 3.9834 9.76402 4.08701 9.65628L4.09094 9.6522L4.7024 9.02972C4.85658 8.87275 5.08721 8.82933 5.28453 8.92013C5.48186 9.01093 5.60604 9.21761 5.59798 9.44182L5.31373 17.3532C5.31817 17.6495 5.55481 17.8928 5.84081 17.8928H6.18836L14.1803 17.9038C14.4659 17.9035 14.7026 17.6607 14.7074 17.3648L14.4021 9.4433C14.3934 9.21885 14.5174 9.01164 14.7148 8.92044C14.9122 8.82925 15.1432 8.87254 15.2976 9.02968L15.9059 9.6489C16.0215 9.76199 16.1553 9.81363 16.2889 9.81363C16.4354 9.81363 16.561 9.76407 16.6646 9.65628L18.7886 7.44788C18.8912 7.33314 18.9457 7.19288 18.9457 7.05112C18.9457 6.89515 18.8922 6.76218 18.7943 6.66041L14.5618 2.25956C14.4515 2.15289 14.3167 2.09623 14.1803 2.09623H12.6411C12.5341 2.09623 12.3259 2.19376 12.1903 2.3422L12.181 2.35239C11.5962 2.9605 10.8184 3.29107 9.99479 3.29107C9.1624 3.29107 8.38522 2.95368 7.75232 2.28271L7.74644 2.27647C7.63884 2.1587 7.50017 2.09623 7.35906 2.09623H5.81971ZM4.69845 1.47842C5.00127 1.16356 5.40048 1 5.81971 1H7.35906C7.80667 1 8.21475 1.19917 8.50754 1.51779C8.94944 1.98502 9.45762 2.19485 9.99479 2.19485C10.5398 2.19485 11.0467 1.97904 11.4314 1.5813C11.6973 1.29312 12.1609 1 12.6411 1H14.1803C14.6114 1 15.0018 1.18292 15.2913 1.46809L15.3017 1.47828L19.5398 5.88527C19.8426 6.20007 20 6.61513 20 7.05112C20 7.49942 19.824 7.90545 19.5498 8.20642L19.54 8.21718L17.4101 10.4314C17.0921 10.7621 16.6905 10.9099 16.2889 10.9099C16.0115 10.9099 15.7438 10.8349 15.5054 10.6946L15.7613 17.3337C15.7616 17.341 15.7617 17.3483 15.7617 17.3557C15.7617 18.2613 15.0513 19 14.1803 19L6.18836 18.989H5.84081C4.96982 18.989 4.25938 18.2503 4.25938 17.3447C4.25938 17.3379 4.2595 17.331 4.25974 17.3242L4.49783 10.6977C4.25265 10.8427 3.98187 10.9099 3.71113 10.9099C3.29738 10.9099 2.90507 10.743 2.59955 10.4412L2.58975 10.4316L0.460183 8.21704C0.157401 7.90221 0 7.48707 0 7.05112C0 6.60279 0.176044 6.19683 0.450248 5.89588L0.460047 5.88513L4.69845 1.47842Z\" />\n  {%- when 'shoe' -%}\n    <path d=\"M12.8224 4.03182L12.8025 4.03174C12.542 4.03174 12.3153 4.21802 12.2775 4.47255C12.2579 4.61681 12.0795 5.67852 11.4659 6.79358C10.8407 7.92973 9.72533 9.1832 7.81577 9.49259C5.83649 9.81404 4.11637 10.1581 2.89249 10.7606C2.28904 11.0577 1.83597 11.4041 1.53332 11.8155C1.23568 12.22 1.06157 12.7168 1.06157 13.3581V13.4819V13.9977V15.4525C1.06157 15.7001 1.24601 15.9099 1.48733 15.958H18.4076C18.6983 15.958 18.9384 15.7247 18.9384 15.4421V13.9977C18.9442 13.796 18.945 13.667 18.9421 13.4819C18.9408 13.4368 18.9384 13.3932 18.9384 13.3478V5.22846C18.9384 4.97383 18.7359 4.75007 18.4718 4.71927L18.4692 4.71896L12.8322 4.03422L12.8224 4.03182ZM2.12314 16.9897V17H1.59236C0.715348 17 0 16.3048 0 15.4525V13.359C0 12.5199 0.233271 11.8087 0.669786 11.2154C1.10128 10.6289 1.70913 10.1867 2.41275 9.84032C3.80301 9.15585 5.68163 8.7932 7.64079 8.47502C9.10688 8.23755 9.99265 7.28323 10.5298 6.30706C10.7978 5.82005 10.9708 5.34056 11.0778 4.97162C11.1311 4.78784 11.1675 4.63343 11.191 4.5218C11.2027 4.46602 11.2111 4.42124 11.2167 4.38917C11.2223 4.35718 11.2248 4.33924 11.2248 4.33924L11.2258 4.3316C11.3376 3.55552 12.0233 3.00005 12.8025 3.00005C12.8025 3.00005 12.807 3.00004 12.8098 3.00003C12.8443 2.99989 12.926 2.99954 13.0186 3.01715L18.5982 3.69494L18.5997 3.6951C19.3964 3.78872 20 4.45187 20 5.22846V13.3478C20 13.3478 20 13.352 20 13.3543C20 13.3806 20.0001 13.4225 19.9941 13.4747C19.9944 13.4773 19.9948 13.48 19.9951 13.4826C19.9971 13.5007 20 13.53 20 13.5645V15.4421C20 16.2945 19.2846 16.9897 18.4076 16.9897H2.12314Z\" />\n    <path d=\"M18.9384 13.9977H1.06157V13.4819H18.9421L18.9461 13.7315L18.9384 13.9977Z\" />\n  {%- when 'silhouette' -%}\n    <path\n      d=\"M12.5 12.0391H7.5C4.46243 12.0391 2 14.5484 2 17.6437V18.481H18V17.6437C18 14.5484 15.5376 12.0391 12.5 12.0391ZM7.5 11.0201C3.91015 11.0201 1 13.9856 1 17.6437V19.5H19V17.6437C19 13.9856 16.0899 11.0201 12.5 11.0201H7.5Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M14.3596 5.08556C14.3596 7.6181 12.3448 9.67113 9.85956 9.67113C7.37428 9.67113 5.35956 7.6181 5.35956 5.08556C5.35956 2.55303 7.37428 0.5 9.85956 0.5C12.3448 0.5 14.3596 2.55303 14.3596 5.08556ZM9.85956 8.65211C11.7926 8.65211 13.3596 7.05532 13.3596 5.08556C13.3596 3.11581 11.7926 1.51901 9.85956 1.51901C7.92656 1.51901 6.35956 3.11581 6.35956 5.08556C6.35956 7.05532 7.92656 8.65211 9.85956 8.65211Z\" />\n  {%- when 'snowflake' -%}\n    <path d=\"M10 0.5C10.2761 0.5 10.5 0.723858 10.5 1V2.85676L12.3862 1.70941C12.6222 1.5659 12.9253 1.64343 13.0634 1.88258C13.2015 2.12173 13.1222 2.43193 12.8862 2.57544L10.6881 3.91254L10.5 4.20171V9.10567L14.7324 6.5025L14.7497 6.47255L14.9238 3.70441C14.9413 3.4261 15.1766 3.21512 15.4494 3.23315C15.7222 3.25118 15.9292 3.49141 15.9116 3.76971L15.7803 5.85797L17.4941 4.80383C17.7293 4.65916 18.0331 4.73508 18.1726 4.9734C18.3121 5.21172 18.2345 5.5222 17.9993 5.66687L16.1725 6.79045L18.1852 8.00596C18.4192 8.1473 18.4959 8.45767 18.3565 8.69919C18.217 8.9407 17.9143 9.02191 17.6802 8.88057L15.5078 7.56859L14.9656 7.53275L10.9676 9.99182L15.1203 12.4496H15.3615L17.7806 11.2234C18.0245 11.0998 18.3204 11.2032 18.4416 11.4544C18.5627 11.7056 18.4632 12.0094 18.2194 12.133L16.2618 13.1252L18.0691 14.1948C18.3067 14.3355 18.3895 14.6446 18.254 14.8852C18.1185 15.1258 17.816 15.2068 17.5784 15.0661L15.794 14.0101L15.7868 16.2668C15.7859 16.5457 15.5636 16.7717 15.2902 16.7717C15.0168 16.7717 14.7959 16.5457 14.7968 16.2668L14.8051 13.6677L14.6411 13.3278L10.5 10.8769V15.7983L10.6881 16.0875L12.8862 17.4246C13.1222 17.5681 13.2015 17.8783 13.0634 18.1174C12.9253 18.3566 12.6221 18.4341 12.3862 18.2906L10.5 17.1432V19C10.5 19.2761 10.2761 19.5 10 19.5C9.72386 19.5 9.5 19.2761 9.5 19V17.1236L7.69032 18.3603C7.46233 18.5161 7.15546 18.4548 7.00491 18.2233C6.85436 17.9918 6.91714 17.6778 7.14513 17.522L9.37855 15.9957L9.5 15.7853V10.8945L5.28087 13.4895L5.19492 13.6677L5.2032 16.2668C5.20409 16.5457 4.98319 16.7717 4.70981 16.7717C4.43643 16.7717 4.21409 16.5457 4.21321 16.2668L4.20646 14.1503L2.50589 15.1963C2.27067 15.341 1.96692 15.265 1.82743 15.0267C1.68794 14.7884 1.76553 14.4779 2.00075 14.3332L3.86241 13.1882L1.78063 12.133C1.53676 12.0094 1.43728 11.7056 1.55844 11.4544C1.67959 11.2032 1.9755 11.0998 2.21937 11.2234L4.63853 12.4496H5.06329L9.03246 10.0083L4.86806 7.54362L4.49224 7.56846L2.31982 8.88045C2.08578 9.02179 1.78302 8.94058 1.64358 8.69906C1.50414 8.45755 1.58083 8.14718 1.81486 8.00584L3.71259 6.85976L1.93081 5.80522C1.69317 5.66458 1.61038 5.35551 1.74589 5.11491C1.8814 4.8743 2.1839 4.79327 2.42154 4.93391L4.2289 6.00359L4.08836 3.76959C4.07085 3.49129 4.27779 3.25106 4.55057 3.23303C4.82336 3.21499 5.05868 3.42598 5.07619 3.70428L5.25034 6.47231L5.36945 6.67862L9.5 9.12326V4.21468L9.37855 4.00432L7.14513 2.47799C6.91714 2.32219 6.85436 2.00822 7.00491 1.77672C7.15546 1.54523 7.46233 1.48387 7.69032 1.63968L9.5 2.87642V1C9.5 0.723858 9.72386 0.5 10 0.5Z\" />\n  {%- when 'star' -%}\n    <path\n      d=\"M10 2.62639L8.54072 7.33639C8.34848 7.95687 7.79714 8.37696 7.17504 8.37696H2.45272L6.27316 11.2879C6.77645 11.6714 6.98704 12.3511 6.7948 12.9716L5.33552 17.6816L9.15596 14.7706C9.65925 14.3872 10.3408 14.3872 10.844 14.7706L14.6645 17.6816L13.2052 12.9716C13.013 12.3511 13.2236 11.6714 13.7268 11.2879L17.5473 8.37696H12.825C12.2029 8.37696 11.6515 7.95687 11.4593 7.33639L10 2.62639ZM10.4552 0.846855C10.3119 0.384382 9.68806 0.384382 9.54477 0.846855L7.63027 7.02616C7.56619 7.23298 7.38241 7.37301 7.17504 7.37301H0.979572C0.515888 7.37301 0.323098 7.99527 0.698226 8.28109L5.71047 12.1001C5.87823 12.2279 5.94843 12.4545 5.88435 12.6613L3.96984 18.8406C3.82656 19.3031 4.33129 19.6877 4.70642 19.4019L9.71865 15.5828C9.88642 15.455 10.1136 15.455 10.2813 15.5828L15.2936 19.4019C15.6687 19.6877 16.1734 19.3031 16.0302 18.8406L14.1157 12.6613C14.0516 12.4545 14.1218 12.2279 14.2895 12.1001L19.3018 8.28109C19.6769 7.99527 19.4841 7.37301 19.0204 7.37301H12.825C12.6176 7.37301 12.4338 7.23298 12.3697 7.02616L10.4552 0.846855Z\"\n      fill-rule=\"evenodd\"\n    />\n  {%- when 'stopwatch' -%}\n    <path d=\"M18.7014 11.3962C18.7014 16.075 14.9085 19.8679 10.2297 19.8679C5.55095 19.8679 1.75806 16.075 1.75806 11.3962C1.75806 6.71746 5.55095 2.92457 10.2297 2.92457C14.9085 2.92457 18.7014 6.71746 18.7014 11.3962ZM10.2297 18.8679C14.3562 18.8679 17.7014 15.5227 17.7014 11.3962C17.7014 7.26974 14.3562 3.92457 10.2297 3.92457C6.10323 3.92457 2.75806 7.26974 2.75806 11.3962C2.75806 15.5227 6.10323 18.8679 10.2297 18.8679Z\" />\n    <path\n      d=\"M10.7203 1.7782H9.7392C9.18691 1.7782 8.7392 2.22591 8.7392 2.7782V2.92456H11.7203V2.7782C11.7203 2.22591 11.2726 1.7782 10.7203 1.7782ZM9.7392 0.778198C8.63463 0.778198 7.7392 1.67363 7.7392 2.7782V3.92456H12.7203V2.7782C12.7203 1.67363 11.8249 0.778198 10.7203 0.778198H9.7392Z\"\n      fill-rule=\"evenodd\"\n    />\n    <path d=\"M8.98448 11.3963C8.98448 10.7086 9.54201 10.1511 10.2298 10.1511C10.9175 10.1511 11.475 10.7086 11.475 11.3963C11.475 12.0841 10.9175 12.6416 10.2298 12.6416C9.54201 12.6416 8.98448 12.0841 8.98448 11.3963Z\" />\n    <path d=\"M9.72974 11.3962C9.72974 11.1201 9.95359 10.8962 10.2297 10.8962H15.2108C15.487 10.8962 15.7108 11.1201 15.7108 11.3962C15.7108 11.6724 15.487 11.8962 15.2108 11.8962H10.2297C9.95359 11.8962 9.72974 11.6724 9.72974 11.3962Z\" />\n    <path d=\"M10.2297 5.91517C10.5059 5.91517 10.7297 6.13902 10.7297 6.41517V8.90572C10.7297 9.18186 10.5059 9.40572 10.2297 9.40572C9.95359 9.40572 9.72974 9.18186 9.72974 8.90572V6.41517C9.72974 6.13902 9.95359 5.91517 10.2297 5.91517Z\" />\n    <path d=\"M13.9544 7.30685C14.1497 7.50211 14.1497 7.8187 13.9544 8.01396L12.1934 9.77505C11.9981 9.97031 11.6815 9.97031 11.4862 9.77505C11.291 9.57978 11.291 9.2632 11.4862 9.06794L13.2473 7.30685C13.4426 7.11159 13.7592 7.11159 13.9544 7.30685Z\" />\n  {%- when 'truck' -%}\n    <path d=\"M0 3.75156C0 3.47454 0.224196 3.24997 0.500755 3.24997H10.647C10.9235 3.24997 11.1477 3.47454 11.1477 3.75156V5.07505V5.63362V6.10938V13.6616C10.9427 14.0067 10.8813 14.1101 10.5516 14.6648L7.22339 14.6646V13.6614H10.1462V4.25316H1.00151V13.6614H2.6842V14.6646H0.500755C0.224196 14.6646 0 14.44 0 14.163V3.75156Z\" />\n    <path d=\"M18.9985 8.08376L11.1477 6.10938V5.07505L19.6212 7.20603C19.8439 7.26203 20 7.46255 20 7.69253V14.1631C20 14.4401 19.7758 14.6647 19.4992 14.6647H17.3071V13.6615H18.9985V8.08376ZM11.1477 13.6616L13.3442 13.6615L13.3443 14.6647L10.5516 14.6648L11.1477 13.6616Z\" />\n    <path d=\"M7.71269 14.1854C7.71269 15.6018 6.56643 16.75 5.15245 16.75C3.73847 16.75 2.59221 15.6018 2.59221 14.1854C2.59221 12.7691 3.73847 11.6209 5.15245 11.6209C6.56643 11.6209 7.71269 12.7691 7.71269 14.1854ZM5.15245 15.7468C6.01331 15.7468 6.71118 15.0478 6.71118 14.1854C6.71118 13.3231 6.01331 12.6241 5.15245 12.6241C4.29159 12.6241 3.59372 13.3231 3.59372 14.1854C3.59372 15.0478 4.29159 15.7468 5.15245 15.7468Z\" />\n    <path d=\"M17.5196 14.1854C17.5196 15.6018 16.3733 16.75 14.9593 16.75C13.5454 16.75 12.3991 15.6018 12.3991 14.1854C12.3991 12.7691 13.5454 11.6209 14.9593 11.6209C16.3733 11.6209 17.5196 12.7691 17.5196 14.1854ZM14.9593 15.7468C15.8202 15.7468 16.5181 15.0478 16.5181 14.1854C16.5181 13.3231 15.8202 12.6241 14.9593 12.6241C14.0985 12.6241 13.4006 13.3231 13.4006 14.1854C13.4006 15.0478 14.0985 15.7468 14.9593 15.7468Z\" />\n  {%- when 'washing' -%}\n    <path d=\"M0.38191 4.26524C0.652327 4.19778 0.926646 4.36065 0.994619 4.62903L3.53292 14.6511C3.54914 14.7106 3.60034 14.7479 3.65788 14.7479H16.3422C16.3998 14.7479 16.451 14.7106 16.4672 14.651C16.4673 14.6506 16.4675 14.6502 16.4676 14.6498L19.0054 4.62904C19.0734 4.36066 19.3477 4.19778 19.6181 4.26523C19.8885 4.33269 20.0526 4.60494 19.9847 4.87332L17.4458 14.8982L17.4447 14.9023C17.3149 15.3972 16.867 15.75 16.3422 15.75H3.65788C3.13313 15.75 2.68527 15.3972 2.55542 14.9023L2.55434 14.8982L0.0153513 4.87333C-0.0526214 4.60495 0.111492 4.3327 0.38191 4.26524Z\" />\n    <path d=\"M6.76169 7.36178C6.11228 7.20142 5.40174 7.36303 4.75389 7.71568L4.74572 7.72013L4.73738 7.72427C4.55194 7.81655 4.38964 7.91308 4.21117 8.01923C4.0989 8.08601 3.98022 8.1566 3.84536 8.23232C3.52401 8.41277 3.15453 8.59357 2.72811 8.67939L2.71955 8.68111C2.08915 8.79675 1.53984 8.55856 1.12774 8.33954L1.6044 7.45611C1.97602 7.65361 2.26006 7.74481 2.53197 7.69634C2.80109 7.64144 3.05982 7.52202 3.34815 7.36012C3.43695 7.31026 3.53611 7.25156 3.64095 7.1895C3.84288 7.06996 4.06587 6.93795 4.27647 6.83261C5.06232 6.40671 6.03295 6.1502 7.00242 6.38856C7.69625 6.55146 8.31122 6.91064 8.84283 7.22112C8.93772 7.27654 9.02996 7.33041 9.11951 7.38134C9.54269 7.61551 9.86129 7.74878 10.1516 7.70566C10.5743 7.61348 10.9584 7.3965 11.4176 7.12784C11.4329 7.11892 11.4482 7.10994 11.4636 7.1009C11.8908 6.85074 12.3909 6.55782 12.968 6.42066C13.9716 6.13864 15.01 6.39498 15.8247 6.85665C16.0106 6.953 16.2099 7.06983 16.3941 7.17778C16.5001 7.2399 16.6011 7.29909 16.6916 7.34975C16.9673 7.50401 17.2202 7.62511 17.4814 7.69408C17.6558 7.74014 17.8437 7.72276 18.0658 7.64569C18.2042 7.59767 18.3474 7.52933 18.4995 7.44684L18.9839 8.32612C18.8074 8.42189 18.6102 8.51838 18.399 8.59167C18.0548 8.71111 17.6518 8.77606 17.2218 8.6625C16.8378 8.56111 16.4976 8.39159 16.1957 8.22267C16.064 8.14895 15.9478 8.08055 15.8372 8.01544C15.6731 7.91888 15.5214 7.82959 15.3497 7.741L15.3404 7.73618L15.3312 7.73097C14.673 7.35597 13.9098 7.1946 13.2351 7.38713L13.2233 7.39052L13.2113 7.39332C12.7842 7.49304 12.3982 7.71742 11.9304 7.99113L11.9227 7.99562C11.4802 8.25451 10.9593 8.55926 10.35 8.68837L10.3384 8.69081L10.3268 8.69271C9.64242 8.8049 9.02791 8.47817 8.62508 8.2551L8.62016 8.25237C8.51051 8.19005 8.40451 8.12848 8.30111 8.06845C7.7661 7.75786 7.30134 7.48804 6.76778 7.36325L6.76169 7.36178Z\" />\n  {%- when 'arrow' -%}\n    <path\n      clip-rule=\"evenodd\"\n      d=\"m11.246 5.31759c.0322-.07821.0833-.14723.1486-.20093.0654-.0537.143-.09041.2259-.10686.083-.01645.1688-.01214.2497.01257.0808.0247.1544.06902.214.12902l4.104 4.104c.0478.04765.0857.10426.1115.16659.0259.06232.0392.12913.0392.19661 0 .06747-.0133.13429-.0392.19661-.0258.06233-.0637.11893-.1115.16659l-4.104 4.10401c-.0963.0963-.227.1504-.3632.1504s-.2669-.0541-.3632-.1504-.1504-.227-.1504-.3632.0541-.2669.1504-.3632l3.2288-3.2278h-11.0736c-.13606 0-.26654-.0541-.36275-.15027-.0962-.0962-.15025-.22669-.15025-.36274 0-.13606.05405-.26654.15025-.36275.09621-.0962.22669-.15025.36275-.15025h11.0736l-3.2288-3.2278c-.0721-.07178-.1212-.16335-.1411-.2631s-.0097-.20316.0293-.2971z\"\n      fill=\"currentColor\"\n      fill-rule=\"evenodd\"\n    />\n\n  {%- when 'tiktok' -%}\n    <path d=\"M10.511 1.705h2.74s-.157 3.51 3.795 3.768v2.711s-2.114.129-3.796-1.158l.028 5.606A5.073 5.073 0 1 1 8.213 7.56h.708v2.785a2.298 2.298 0 1 0 1.618 2.205L10.51 1.705Z\" />\n  {%- when 'youtube' -%}\n    <path d=\"M18.16 5.87c.34 1.309.34 4.08.34 4.08s0 2.771-.34 4.08a2.125 2.125 0 0 1-1.53 1.53c-1.309.34-6.63.34-6.63.34s-5.321 0-6.63-.34a2.125 2.125 0 0 1-1.53-1.53c-.34-1.309-.34-4.08-.34-4.08s0-2.771.34-4.08a2.173 2.173 0 0 1 1.53-1.53C4.679 4 10 4 10 4s5.321 0 6.63.34a2.173 2.173 0 0 1 1.53 1.53ZM8.3 12.5l4.42-2.55L8.3 7.4v5.1Z\" />\n  {%- when 'instagram' -%}\n    <path\n      fill-rule=\"evenodd\"\n      d=\"M13.23 3.492c-.84-.037-1.096-.046-3.23-.046-2.144 0-2.39.01-3.238.055-.776.027-1.195.164-1.487.273a2.43 2.43 0 0 0-.912.593 2.486 2.486 0 0 0-.602.922c-.11.282-.238.702-.274 1.486-.046.84-.046 1.095-.046 3.23 0 2.134.01 2.39.046 3.229.004.51.097 1.016.274 1.495.145.365.319.639.602.913.282.282.538.456.92.602.474.176.974.268 1.479.273.848.046 1.103.046 3.238.046 2.134 0 2.39-.01 3.23-.046.784-.036 1.203-.164 1.486-.273.374-.146.648-.329.921-.602.283-.283.447-.548.602-.922.177-.476.27-.979.274-1.486.037-.84.046-1.095.046-3.23 0-2.134-.01-2.39-.055-3.229-.027-.784-.164-1.204-.274-1.495a2.43 2.43 0 0 0-.593-.913 2.604 2.604 0 0 0-.92-.602c-.284-.11-.703-.237-1.488-.273ZM6.697 2.05c.857-.036 1.131-.045 3.302-.045 1.1-.014 2.202.001 3.302.045.664.014 1.321.14 1.943.374a3.968 3.968 0 0 1 1.414.922c.41.397.728.88.93 1.414.23.622.354 1.279.365 1.942C18 7.56 18 7.824 18 10.005c0 2.17-.01 2.444-.046 3.292-.036.858-.173 1.442-.374 1.943-.2.53-.474.976-.92 1.423a3.896 3.896 0 0 1-1.415.922c-.51.191-1.095.337-1.943.374-.857.036-1.122.045-3.302.045-2.171 0-2.445-.009-3.302-.055-.849-.027-1.432-.164-1.943-.364a4.152 4.152 0 0 1-1.414-.922 4.128 4.128 0 0 1-.93-1.423c-.183-.51-.329-1.085-.365-1.943C2.009 12.45 2 12.167 2 10.004c0-2.161 0-2.435.055-3.302.027-.848.164-1.432.365-1.942a4.44 4.44 0 0 1 .92-1.414 4.18 4.18 0 0 1 1.415-.93c.51-.183 1.094-.33 1.943-.366Zm.427 4.806a4.105 4.105 0 1 1 5.805 5.805 4.105 4.105 0 0 1-5.805-5.805Zm1.882 5.371a2.668 2.668 0 1 0 2.042-4.93 2.668 2.668 0 0 0-2.042 4.93Zm5.922-5.942a.958.958 0 1 1-1.355-1.355.958.958 0 0 1 1.355 1.355Z\"\n      clip-rule=\"evenodd\"\n    />\n  {%- when 'x' -%}\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M7.27301 2.80005L10.8 7.82205L15.218 2.80005H16.986L11.586 8.93905L17.385 17.193H12.727L8.99701 11.883L4.32601 17.193H2.55801L8.21201 10.766L2.61501 2.80005H7.27301ZM13.515 15.925L5.07001 4.10905H6.47501L14.921 15.925H13.515Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'twitter' -%}\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M7.27301 2.80005L10.8 7.82205L15.218 2.80005H16.986L11.586 8.93905L17.385 17.193H12.727L8.99701 11.883L4.32601 17.193H2.55801L8.21201 10.766L2.61501 2.80005H7.27301ZM13.515 15.925L5.07001 4.10905H6.47501L14.921 15.925H13.515Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'facebook' -%}\n    <path d=\"M18 10.049C18 5.603 14.419 2 10 2c-4.419 0-8 3.603-8 8.049C2 14.067 4.925 17.396 8.75 18v-5.624H6.719v-2.328h2.03V8.275c0-2.017 1.195-3.132 3.023-3.132.874 0 1.79.158 1.79.158v1.98h-1.009c-.994 0-1.303.621-1.303 1.258v1.51h2.219l-.355 2.326H11.25V18c3.825-.604 6.75-3.933 6.75-7.951Z\" />\n  {%- when 'pinterest' -%}\n    <path d=\"M10 2.01c2.124.01 4.16.855 5.666 2.353a8.087 8.087 0 0 1 1.277 9.68A7.952 7.952 0 0 1 10 18.04a8.164 8.164 0 0 1-2.276-.307c.403-.653.672-1.24.816-1.729l.567-2.2c.134.27.393.5.768.702.384.192.768.297 1.19.297.836 0 1.585-.24 2.248-.72a4.678 4.678 0 0 0 1.537-1.969c.37-.89.554-1.848.537-2.813 0-1.249-.48-2.315-1.43-3.227a5.061 5.061 0 0 0-3.65-1.374c-.893 0-1.729.154-2.478.461a5.023 5.023 0 0 0-3.236 4.552c0 .72.134 1.355.413 1.902.269.538.672.922 1.22 1.152.096.039.182.039.25 0 .066-.028.114-.096.143-.192l.173-.653c.048-.144.02-.288-.105-.432a2.257 2.257 0 0 1-.548-1.565 3.803 3.803 0 0 1 3.976-3.861c1.047 0 1.863.288 2.44.855.585.576.883 1.315.883 2.228 0 .768-.106 1.479-.317 2.122a3.813 3.813 0 0 1-.893 1.556c-.384.384-.836.576-1.345.576-.413 0-.749-.144-1.018-.451-.259-.307-.345-.672-.25-1.085.147-.514.298-1.026.452-1.537l.173-.701c.057-.25.086-.451.086-.624 0-.346-.096-.634-.269-.855-.192-.22-.451-.336-.797-.336-.432 0-.797.192-1.085.595-.288.394-.442.893-.442 1.499.005.374.063.746.173 1.104l.058.144c-.576 2.478-.913 3.938-1.037 4.36-.116.528-.154 1.153-.125 1.863A8.067 8.067 0 0 1 2 10.03c0-2.208.778-4.11 2.343-5.666A7.721 7.721 0 0 1 10 2.001v.01Z\" />\n  {%- when 'tumblr' -%}\n    <path\n      fill-rule=\"evenodd\"\n      d=\"M11.997 18c-2.26 0-3.954-1.235-3.954-4.198V9.061H6V6.489C8.26 5.867 9.201 3.787 9.314 2h2.344v4.068h2.73V9.06h-2.73v4.128c0 1.235.584 1.667 1.516 1.667h1.318V18h-2.495Z\"\n      clip-rule=\"evenodd\"\n    />\n  {%- when 'vimeo' -%}\n    <path\n      fill-rule=\"evenodd\"\n      d=\"M17.995 7.002C17.92 8.457 16.9 10.451 14.935 13c-2.039 2.653-3.763 3.988-5.187 3.988-.87 0-1.605-.81-2.205-2.429L6.33 10.121c-.45-1.62-.93-2.43-1.44-2.43-.12 0-.51.24-1.184.706L3 7.497l2.19-1.95c.989-.869 1.724-1.319 2.218-1.349 1.17-.135 1.89.66 2.16 2.37.3 1.844.495 2.998.6 3.448.344 1.53.704 2.294 1.11 2.294.314 0 .794-.495 1.424-1.5.49-.67.832-1.436 1.004-2.249.09-.87-.255-1.304-1.004-1.304-.36 0-.735.09-1.11.255.735-2.414 2.144-3.584 4.213-3.509 1.545.045 2.265 1.05 2.19 3Z\"\n      clip-rule=\"evenodd\"\n    />\n  {%- when 'snapchat' -%}\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M17.388 15.3961C17.0368 15.5883 16.6638 15.7377 16.277 15.8411C16.203 16.0711 16.041 16.4051 15.681 16.6541C15.412 16.8314 15.1023 16.9374 14.781 16.9621C14.641 16.9771 14.468 16.9831 14.338 16.9881L14.246 16.9921C13.929 17.0061 13.622 17.0341 13.288 17.1461L13.286 17.1471C13.1699 17.1908 13.0589 17.2471 12.955 17.3151L12.817 17.4001C12.677 17.4871 12.487 17.6051 12.32 17.6981C11.6132 18.1004 10.8123 18.3081 9.99902 18.3001C9.18748 18.3095 8.38819 18.1016 7.68402 17.6981C7.52002 17.6071 7.32902 17.4881 7.18902 17.4011L7.04902 17.3151C6.94206 17.2472 6.82888 17.1896 6.71102 17.1431C6.40005 17.046 6.07675 16.9941 5.75102 16.9891L5.66102 16.9861C5.53102 16.9801 5.35702 16.9731 5.21602 16.9591C5.06602 16.9431 4.67502 16.8991 4.31602 16.6491C4.03469 16.452 3.82624 16.1677 3.72302 15.8401C3.33518 15.7384 2.96161 15.5886 2.61102 15.3941C2.36503 15.2639 2.15065 15.0812 1.98302 14.8591C1.8462 14.674 1.75573 14.4588 1.71919 14.2316C1.68265 14.0044 1.70111 13.7717 1.77302 13.5531C1.87168 13.2633 2.05662 13.0107 2.30302 12.8291C2.44002 12.7251 2.57302 12.6591 2.62602 12.6331C3.85602 12.0291 4.39602 11.2531 4.62202 10.8001L4.44202 10.6821C4.27502 10.5721 4.10002 10.4591 4.00402 10.3911C3.75202 10.2131 3.43202 9.94206 3.22502 9.54106C3.10728 9.31562 3.03865 9.06778 3.02365 8.81389C3.00865 8.55999 3.04763 8.3058 3.13802 8.06806L3.14002 8.06306C3.48402 7.14106 4.34002 6.92306 4.84402 6.92306H4.91402C4.91736 6.69973 4.92836 6.47373 4.94702 6.24506C4.99171 5.17126 5.41096 4.147 6.13202 3.35006L6.13902 3.34306C6.63384 2.80515 7.2385 2.37988 7.91202 2.09606C8.57882 1.81681 9.29737 1.68251 10.02 1.70206C12.292 1.71006 13.542 2.97506 13.875 3.35706C14.5904 4.15241 15.0063 5.17223 15.051 6.24106C15.07 6.46806 15.079 6.69706 15.083 6.91906H15.171C15.692 6.92406 16.517 7.16106 16.855 8.05206L16.86 8.06406C16.9505 8.30257 16.9893 8.5576 16.9738 8.81224C16.9583 9.06688 16.8888 9.31531 16.77 9.54106C16.561 9.94206 16.239 10.2131 15.984 10.3911C15.8512 10.4818 15.7171 10.5708 15.582 10.6581L15.373 10.7961C15.597 11.2461 16.133 12.0221 17.367 12.6231L17.377 12.6271L17.385 12.6311C17.441 12.6601 17.573 12.7281 17.71 12.8341C17.83 12.9271 18.098 13.1571 18.23 13.5581C18.39 14.0511 18.258 14.5211 18.023 14.8501C17.8563 15.0743 17.6423 15.259 17.396 15.3911L17.388 15.3961ZM14.073 10.1281C14.161 10.0451 14.403 9.88006 14.647 9.71806L14.902 9.54906L14.986 9.49406L15.203 9.35006L15.221 9.33706L15.239 9.32506C15.599 9.07506 15.753 8.82106 15.64 8.51406C15.559 8.30006 15.36 8.21906 15.154 8.21906C15.0888 8.21779 15.0236 8.22451 14.96 8.23906C14.823 8.26959 14.6884 8.30969 14.557 8.35906L14.378 8.42706L14.365 8.43206L14.307 8.45506C14.2144 8.49173 14.1317 8.52273 14.059 8.54806C14.0257 8.5594 13.9954 8.56839 13.968 8.57506C13.939 8.58706 13.911 8.58706 13.886 8.58706C13.769 8.58706 13.725 8.53406 13.733 8.39106L13.736 8.34306L13.753 8.07906C13.7682 7.81762 13.7782 7.5559 13.783 7.29406V7.26406C13.7879 6.94943 13.7779 6.63475 13.753 6.32106C13.7268 5.54199 13.4257 4.79735 12.903 4.21906C12.704 3.98906 11.773 3.00206 9.99902 3.00206C9.45656 2.98523 8.91678 3.0848 8.41602 3.29406C7.91602 3.50406 7.46502 3.82106 7.09602 4.22406C6.57318 4.80194 6.27171 5.54621 6.24502 6.32506C6.21242 6.72352 6.20373 7.12357 6.21902 7.52306L6.22902 7.76906C6.23751 7.9612 6.24851 8.15321 6.26202 8.34506C6.26202 8.36373 6.26302 8.38173 6.26502 8.39906C6.27302 8.53406 6.23302 8.59106 6.11102 8.59106L6.03102 8.58306L5.94402 8.55806C5.8585 8.52837 5.77381 8.49635 5.69002 8.46206L5.63602 8.44006L5.56402 8.41106L5.44102 8.36506L5.43302 8.36206C5.28756 8.3079 5.13811 8.2651 4.98602 8.23406C4.93901 8.22702 4.89156 8.22335 4.84402 8.22306C4.63702 8.22306 4.43902 8.30006 4.35802 8.51806C4.24402 8.82506 4.39802 9.07906 4.75502 9.32906L4.84402 9.39006L5.11802 9.57106L5.35602 9.72706C5.59902 9.88806 5.83802 10.0501 5.92502 10.1321C6.10002 10.2971 6.08502 10.4251 6.06502 10.5841L6.06302 10.6041C6.04902 10.7191 5.75902 12.0961 4.13702 13.2451C3.97264 13.3626 3.80242 13.4717 3.62702 13.5721C3.48703 13.653 3.34428 13.729 3.19902 13.8001C3.05802 13.8701 2.81102 14.0171 3.24402 14.2591C3.32802 14.3051 3.40802 14.3454 3.48402 14.3801C3.73102 14.4931 3.94502 14.5541 4.13502 14.6051L4.17002 14.6151C4.22936 14.6297 4.28602 14.6451 4.34002 14.6611C4.48002 14.7031 4.60702 14.7491 4.72202 14.8241C4.88202 14.9281 4.90402 15.0981 4.92502 15.2561C4.94302 15.3891 4.96002 15.5141 5.05802 15.5821C5.17502 15.6641 5.39102 15.6731 5.68102 15.6851C6.05602 15.7001 6.55402 15.7211 7.12402 15.9101C7.41102 16.0071 7.66002 16.1631 7.92402 16.3261C8.43802 16.6481 9.00402 17.0001 9.99902 17.0001C10.999 17.0001 11.571 16.6441 12.086 16.3231C12.347 16.1611 12.594 16.0081 12.874 15.9141C13.446 15.7221 13.947 15.7021 14.322 15.6881C14.611 15.6771 14.825 15.6681 14.939 15.5861C15.04 15.5181 15.057 15.3931 15.074 15.2581C15.095 15.1011 15.118 14.9301 15.28 14.8241C15.396 14.7491 15.524 14.7031 15.668 14.6611L15.868 14.6051C16.0879 14.5494 16.3027 14.4751 16.51 14.3831C16.5941 14.3446 16.6768 14.3032 16.758 14.2591C17.187 14.0171 16.944 13.8651 16.798 13.7911C16.6545 13.7216 16.5134 13.6472 16.375 13.5681L16.365 13.5631C16.1939 13.4638 16.0271 13.3574 15.865 13.2441C14.236 12.0991 13.949 10.7181 13.935 10.5951V10.5931C13.911 10.4301 13.891 10.3001 14.073 10.1281Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'spotify' -%}\n    <path\n      d=\"M10.3174 2.15792C5.90232 1.98576 2.18119 5.35734 2.00643 9.68876C1.83094 14.0202 5.26836 17.6701 9.68268 17.8423C14.0977 18.0144 17.8181 14.6428 17.9936 10.3114C18.1684 5.98001 14.7317 2.32937 10.3174 2.15792ZM13.6941 13.6558C13.5947 13.8279 13.4009 13.914 13.2122 13.8882C13.1545 13.8803 13.0967 13.8616 13.0426 13.8315C11.9853 13.2411 10.8329 12.8566 9.6176 12.6888C8.40233 12.5209 7.18633 12.579 6.00396 12.8609C5.7473 12.9219 5.48919 12.7677 5.42703 12.5159C5.36488 12.2641 5.52209 12.0108 5.77875 11.9499C7.07884 11.64 8.41549 11.5761 9.75068 11.7605C11.0859 11.9449 12.3523 12.3674 13.5157 13.0166C13.7446 13.145 13.825 13.4305 13.6948 13.6558H13.6941ZM14.7456 11.5955C14.5825 11.891 14.2052 12.0015 13.904 11.8416C12.6668 11.1852 11.3272 10.754 9.92252 10.5603C8.51786 10.3667 7.10955 10.419 5.73561 10.7153C5.66102 10.7311 5.58717 10.7339 5.51551 10.7239C5.26617 10.6895 5.05265 10.5073 4.99562 10.2512C4.92177 9.92262 5.13382 9.59765 5.46871 9.5252C6.98744 9.19737 8.54418 9.13926 10.0958 9.35303C11.6467 9.56681 13.1274 10.0431 14.4948 10.7691C14.7968 10.9291 14.9086 11.2985 14.7456 11.5948V11.5955ZM15.9111 9.27269C15.7576 9.5625 15.438 9.71243 15.1265 9.66939C15.0425 9.65791 14.9598 9.63209 14.8801 9.59191C13.4396 8.85662 11.888 8.37097 10.2684 8.14787C8.64875 7.92477 7.02034 7.97212 5.42923 8.28919C5.01536 8.37169 4.61247 8.10913 4.52838 7.70382C4.44429 7.2978 4.71191 6.90253 5.12504 6.82004C6.88726 6.46925 8.68896 6.41688 10.4812 6.66365C12.2734 6.91043 13.9902 7.44844 15.5857 8.26265C15.9601 8.45346 16.1056 8.90612 15.9111 9.27341V9.27269Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'next' -%}\n    <path\n      d=\"M 1.4818 0.8146 C 0.8153 0.4482 0 0.9304 0 2 V 12.2081 C 0 12.991 0.8588 13.4702 1.525 13.0592 L 10.5398 7.4981 C 11.1918 7.0959 11.1679 6.1399 10.4965 5.7707 L 1.4818 0.8146 M 12 1 V 12.5 C 12 13.5618 13.4 13.5618 13.4 12.5 V 1.5 C 13.4 0.4482 12 0.4482 12 1.5 Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'previous' -%}\n    <path\n      d=\"M 11.9182 12.991 C 12.5847 13.3574 13.4 12.8752 13.4 11.8056 V 1.5975 C 13.4 0.8146 12.5412 0.3354 11.875 0.7464 L 2.8602 6.3075 C 2.2082 6.7097 2.2321 7.6657 2.9035 8.0349 L 11.9182 12.991 M 1.4 12.8056 V 1.3056 C 1.4 0.2438 0 0.2438 0 1.3056 V 12.3056 C 0 13.3574 1.4 13.3574 1.4 12.3056 Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'threads' -%}\n    <path\n      d=\"M13.5643 9.39373C13.4928 9.35946 13.4201 9.32648 13.3466 9.29489C13.2184 6.93398 11.9284 5.58236 9.76225 5.56853C9.75244 5.56847 9.74268 5.56847 9.73287 5.56847C8.43724 5.56847 7.35968 6.12151 6.69645 7.12787L7.88776 7.94508C8.38322 7.19337 9.16079 7.03312 9.73344 7.03312C9.74005 7.03312 9.74669 7.03312 9.75324 7.03318C10.4665 7.03772 11.0047 7.24509 11.353 7.6495C11.6065 7.94391 11.776 8.35076 11.86 8.86422C11.2276 8.75674 10.5438 8.7237 9.81267 8.76561C7.7532 8.88424 6.42921 10.0854 6.51814 11.7544C6.56326 12.601 6.98502 13.3293 7.70568 13.8051C8.31498 14.2073 9.09973 14.404 9.91532 14.3594C10.9924 14.3004 11.8373 13.8895 12.4268 13.138C12.8745 12.5674 13.1577 11.8279 13.2827 10.8962C13.796 11.206 14.1764 11.6136 14.3865 12.1037C14.7437 12.9367 14.7646 14.3056 13.6476 15.4216C12.669 16.3993 11.4926 16.8222 9.71484 16.8353C7.74278 16.8206 6.25134 16.1882 5.28165 14.9555C4.37362 13.8012 3.90434 12.1339 3.88683 9.99995C3.90434 7.86597 4.37362 6.19869 5.28165 5.04439C6.25134 3.81169 7.74276 3.17925 9.71481 3.1646C11.7012 3.17937 13.2186 3.81484 14.2254 5.0535C14.7191 5.66092 15.0913 6.4248 15.3367 7.31545L16.7327 6.94297C16.4353 5.84668 15.9673 4.902 15.3304 4.11854C14.0397 2.53053 12.152 1.71682 9.71968 1.69995H9.70995C7.2826 1.71676 5.41601 2.53357 4.16204 4.12764C3.04617 5.54617 2.47057 7.51995 2.45123 9.99412L2.45117 9.99995L2.45123 10.0058C2.47057 12.4799 3.04617 14.4538 4.16204 15.8723C5.41601 17.4663 7.2826 18.2832 9.70995 18.3H9.71968C11.8777 18.285 13.3989 17.72 14.652 16.468C16.2915 14.83 16.2421 12.7769 15.7018 11.5165C15.3141 10.6127 14.575 9.87858 13.5643 9.39373ZM9.83821 12.8969C8.93559 12.9477 7.99785 12.5426 7.95162 11.6748C7.91734 11.0314 8.40952 10.3134 9.89361 10.2279C10.0636 10.2181 10.2303 10.2133 10.3942 10.2133C10.9333 10.2133 11.4376 10.2657 11.8961 10.3659C11.725 12.5016 10.7219 12.8484 9.83821 12.8969Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'whatsapp' -%}\n    <path\n      d=\"M17.9234 9.63974C17.8487 7.59633 16.9877 5.66079 15.5199 4.23722C14.0521 2.81365 12.0911 2.01212 10.0464 2H10.0078C8.63087 1.99898 7.27744 2.35647 6.08057 3.03729C4.88373 3.71811 3.88476 4.6988 3.18196 5.88287C2.47916 7.06694 2.09675 8.41361 2.07235 9.7903C2.04795 11.167 2.38241 12.5264 3.04282 13.7346L2.34157 17.9308C2.34043 17.9394 2.34113 17.9482 2.34364 17.9565C2.34614 17.9648 2.35039 17.9725 2.3561 17.979C2.3618 17.9856 2.36884 17.9908 2.37673 17.9945C2.38463 17.9981 2.3932 17.9999 2.40188 18H2.41395L6.56432 17.0768C7.63669 17.5916 8.81103 17.8588 10.0006 17.8585C10.0762 17.8585 10.1518 17.8585 10.2274 17.8585C11.2737 17.8286 12.3039 17.5918 13.2582 17.1617C14.2126 16.7316 15.0724 16.1168 15.7879 15.3527C16.5034 14.5886 17.0605 13.6904 17.427 12.7098C17.7935 11.7292 17.9622 10.6858 17.9234 9.63974ZM10.1879 16.4793C10.1252 16.4793 10.0625 16.4793 10.0006 16.4793C8.94927 16.4806 7.91301 16.229 6.97928 15.7459L6.76698 15.6349L3.95235 16.2999L4.47184 13.4523L4.35122 13.2481C3.77509 12.2658 3.46476 11.1504 3.45082 10.0117C3.43687 8.87302 3.71978 7.75031 4.27167 6.75423C4.82358 5.75813 5.62543 4.92298 6.59826 4.33102C7.57109 3.73907 8.68133 3.41074 9.81967 3.37837C9.88293 3.37837 9.94644 3.37837 10.0102 3.37837C11.7289 3.38346 13.3767 4.06351 14.5988 5.27198C15.8208 6.48046 16.5192 8.12065 16.5434 9.8391C16.5677 11.5576 15.9159 13.2168 14.7285 14.4593C13.541 15.7018 11.913 16.4281 10.1952 16.4817L10.1879 16.4793Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M7.24367 6.10129C7.14569 6.1032 7.04909 6.12475 6.95958 6.16467C6.87007 6.20459 6.78947 6.26207 6.72258 6.3337C6.53359 6.52751 6.00525 6.99393 5.97469 7.97343C5.94413 8.95289 6.62849 9.92196 6.72418 10.0579C6.81989 10.1937 8.03257 12.3096 10.0302 13.1676C11.2043 13.6735 11.719 13.7603 12.0527 13.7603C12.1902 13.7603 12.294 13.7458 12.4025 13.7394C12.7684 13.7169 13.5943 13.2939 13.7744 12.8339C13.9546 12.3739 13.9666 11.9718 13.9192 11.8914C13.8718 11.811 13.7415 11.7531 13.5453 11.6501C13.349 11.5472 12.3864 11.0325 12.2055 10.9601C12.1384 10.9289 12.0662 10.9101 11.9924 10.9047C11.9443 10.9072 11.8976 10.9214 11.8562 10.9461C11.8149 10.9707 11.7802 11.0051 11.7551 11.0462C11.5943 11.2464 11.2252 11.6815 11.1013 11.807C11.0743 11.8381 11.0409 11.8632 11.0036 11.8807C10.9662 11.8982 10.9255 11.9076 10.8842 11.9083C10.8081 11.9049 10.7337 11.8849 10.6663 11.8496C10.0832 11.602 9.55156 11.2473 9.09892 10.8041C8.67598 10.3873 8.31716 9.91007 8.03417 9.38799C7.92484 9.18532 8.03417 9.08079 8.13391 8.98591C8.23364 8.89097 8.34057 8.75993 8.4435 8.64649C8.52798 8.54964 8.59838 8.44138 8.65262 8.32484C8.68068 8.27076 8.69486 8.21055 8.69385 8.14964C8.69289 8.08868 8.67678 8.029 8.64697 7.97583C8.59956 7.8745 8.24489 6.87813 8.07844 6.47845C7.94335 6.13667 7.78249 6.12542 7.64175 6.11496C7.52596 6.10692 7.39327 6.1029 7.26057 6.09888H7.24367\"\n      fill=\"currentColor\"\n    />\n  {%- when '3d-model' -%}\n    <path\n      d=\"M7.67998 20.629L1.28002 16.723C0.886205 16.4784 0.561675 16.1368 0.337572 15.731C0.113468 15.3251 -0.00274623 14.8686 -1.39464e-05 14.405V6.59497C-0.00238367 6.13167 0.113819 5.6755 0.33751 5.26978C0.561202 4.86405 0.884959 4.52227 1.278 4.27698L7.67796 0.377014C8.07524 0.131403 8.53292 0.000877102 8.99999 9.73346e-08C9.46678 -0.000129605 9.92446 0.129369 10.322 0.374024V0.374024L16.722 4.27399C17.1163 4.51985 17.4409 4.86287 17.6647 5.27014C17.8885 5.67742 18.0039 6.13529 18 6.59998V14.409C18.0026 14.8725 17.8864 15.3289 17.6625 15.7347C17.4386 16.1405 17.1145 16.4821 16.721 16.727L10.321 20.633C9.92264 20.8742 9.46565 21.0012 8.99999 21C8.53428 20.9998 8.07761 20.8714 7.67998 20.629V20.629ZM8.72398 2.078L2.32396 5.97803C2.22303 6.04453 2.14066 6.13551 2.08452 6.24255C2.02838 6.34959 2.00031 6.46919 2.00298 6.59003V14.4C2.00026 14.5205 2.02818 14.6396 2.08415 14.7463C2.14013 14.853 2.22233 14.9438 2.32298 15.01L7.99999 18.48V10.919C8.00113 10.5997 8.08851 10.2867 8.25292 10.0129C8.41732 9.73922 8.65267 9.51501 8.93401 9.36401L15.446 5.841L9.28001 2.08002C9.19614 2.02738 9.09901 1.99962 8.99999 2C8.90251 1.99972 8.8069 2.02674 8.72398 2.078V2.078Z\"\n      fill=\"currentColor\"\n    />\n  {%- when 'mastodon' -%}\n    <path\n      d=\"M17.742 5.889c-.215-1.586-1.612-2.835-3.268-3.078-.28-.04-1.338-.19-3.79-.19h-.019c-2.453 0-2.979.15-3.258.19-1.61.236-3.08 1.359-3.437 2.963-.172.79-.19 1.666-.158 2.47.045 1.152.054 2.302.16 3.45.073.762.2 1.518.382 2.262.339 1.375 1.711 2.52 3.056 2.986a8.283 8.283 0 0 0 4.472.234c.163-.038.325-.081.484-.13.36-.114.783-.241 1.093-.464a.034.034 0 0 0 .014-.027v-1.111a.032.032 0 0 0-.012-.026.033.033 0 0 0-.014-.006.033.033 0 0 0-.014 0 12.52 12.52 0 0 1-2.902.335c-1.682 0-2.134-.79-2.264-1.118a3.433 3.433 0 0 1-.196-.881.032.032 0 0 1 .025-.033.034.034 0 0 1 .015 0 12.25 12.25 0 0 0 2.855.335c.231 0 .462 0 .693-.006.967-.027 1.986-.075 2.938-.26.023-.004.047-.008.067-.014 1.501-.285 2.93-1.18 3.074-3.445.006-.09.02-.935.02-1.027 0-.315.102-2.232-.015-3.41Zm-2.31 5.653h-1.577V7.719c0-.805-.34-1.215-1.03-1.215-.757 0-1.137.485-1.137 1.444v2.093h-1.569V7.948c0-.959-.38-1.444-1.138-1.444-.686 0-1.028.41-1.029 1.215v3.823H6.375v-3.94c0-.804.208-1.443.624-1.917.428-.473.99-.716 1.688-.716.808 0 1.418.307 1.825.92l.393.653.393-.652c.407-.614 1.017-.92 1.824-.92.697 0 1.259.242 1.689.715.415.473.623 1.113.623 1.918l-.001 3.939Z\"\n    />\n  {%- when 'reddit' -%}\n    <path d=\"M16.024 7.512c-.569 0-1.093.192-1.511.514-1.14-.705-2.577-1.148-4.15-1.207v-.007c0-1.054.783-1.929 1.8-2.073a1.772 1.772 0 1 0-.011-.766 2.86 2.86 0 0 0-2.55 2.84v.01c-1.558.065-2.98.508-4.109 1.208a2.481 2.481 0 1 0-2.57 4.21c.083 2.881 3.222 5.198 7.083 5.198 3.86 0 7.004-2.32 7.082-5.202a2.482 2.482 0 0 0-1.064-4.723v-.002Z\" />\n  {%- when 'telegram' -%}\n    <path\n      fill-rule=\"evenodd\"\n      d=\"M2.274 9.088c4.677-1.996 7.796-3.312 9.357-3.947 4.455-1.815 5.38-2.13 5.984-2.14.133-.003.43.029.622.182a.657.657 0 0 1 .228.425c.022.123.048.401.027.619-.241 2.484-1.286 8.514-1.818 11.296-.224 1.178-.67 1.43-1.1 1.468-.93.084-1.635-.46-2.537-1.04-1.413-.906-1.932-1.15-3.302-2.034-1.584-1.023-.72-1.558.183-2.476.236-.24 4.37-3.984 4.45-4.316.01-.041-.126-.456-.22-.538-.094-.081-.232-.053-.332-.031-.142.031-2.398 1.492-6.768 4.38-.64.431-1.22.64-1.74.63-.573-.012-1.675-.317-2.494-.578-1.005-.32-1.375-.47-1.306-1.014.036-.283.292-.578.766-.886Z\"\n      clip-rule=\"evenodd\"\n    />\n  {%- when 'twitch' -%}\n    <path d=\"M6.41 2.36 3.7 5.09v9.821h3.25v2.728l2.709-2.728h2.166L16.701 10V2.36H6.41Zm9.208 7.094-2.167 2.183h-2.166l-1.896 1.91v-1.91H6.95V3.452h8.667v6.002Z\"\n    /><path\n      d=\"M12.91 5.362h1.083v3.274H12.91V5.362Zm-2.98 0h1.084v3.274H9.93V5.362Z\"\n    />\n{%- endcase -%}\n"
  },
  {
    "path": "snippets/image.liquid",
    "content": "{%- doc -%}\n  Renders the <img> element using provided image object\n\n  @param {object} image - image object\n  @param {number} [height] - custom image height\n  @param {string} [class] - additional classes\n  @param {string} [text_fallback] - text to display if image is blank\n  @param {boolean} [unset_image_tag] - if true, ignores the image focal point\n  @param {string} [style] - additional styles\n\n  @example\n  {% render 'image', image: product.featured_image, height: 300, class: 'product-image' %}\n{%- enddoc -%}\n{% if image != blank %}\n  {% assign image_height = height | default: image.height %}\n  {% assign image_height_2x = height | default: image_height | times: 2 %}\n  {% assign image_height_3x = height | default: image_height | times: 3 %}\n\n  {% capture image_srcset -%}\n    {{ image | image_url: height: image_height }} 1x, {{ image | image_url: height: image_height_2x }} 2x, {{ image | image_url: height: image_height_3x }} 3x\n  {%- endcapture %}\n\n  {% assign style_value = style | default: '' %}\n\n  {% if unset_image_tag %}\n    {% assign style_value = style_value | append: 'object-position: inherit;' %}\n  {% endif %}\n\n  {{ image | image_url: height: image_height | image_tag: class: class, srcset: image_srcset, style: style_value }}\n{% elsif text_fallback %}\n  {{ text_fallback }}\n{% endif %}\n"
  },
  {
    "path": "snippets/jumbo-text.liquid",
    "content": "{%- doc -%}\n  Renders text that stretches to fit the full width of its container.\n\n  @param {string} [text] - The text to be rendered.\n  @param {object} [block_settings] - The block settings object, defaults to block.settings\n\n  @example\n  {% render 'jumbo-text', text: block.settings.text %}\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block_settings | default: block.settings\n  assign shown_text = text | default: block_settings.text\n  assign descenders = 'alphabetic'\n  assign trim = 'trim-both'\n  assign cap_text = false\n\n  unless block_settings.case == 'uppercase'\n    assign has_descender = false\n    assign descender_chars = 'g,j,p,q,y,ç,ý,ÿ,ş,ţ,ģ,ą,ę,į,ų' | split: ','\n    for descender_char in descender_chars\n      if shown_text contains descender_char\n        assign has_descender = true\n        break\n      endif\n    endfor\n\n    if has_descender\n      assign descenders = 'text'\n      assign cap_text = true\n    endif\n  endunless\n\n  assign text_trim = trim | append: ' cap ' | append: descenders\n  assign shown_text_with_line_breaks = shown_text | newline_to_br | strip_newlines\n  assign text_with_lines = shown_text_with_line_breaks | split: '<br />'\n  assign nudge = '-0.04em'\n%}\n\n{% capture attributes %}\n  style=\"\n    --font-family: var(--font-{{ block_settings.font | default: 'accent'}}--family);\n    --font-weight: var(--font-{{ block_settings.font | default: 'accent'}}--weight);\n    {% if block_settings.font == 'body' %}\n      --color: var(--color-foreground);\n    {% else %}\n      --color: var(--color-foreground-heading);\n    {% endif %}\n    --text-align: {{ block_settings.alignment | default: 'left' }};\n    {% if block_settings.alignment == \"left\" %}\n      --margin-left-nudge: {{nudge}};\n    {% elsif block_settings.alignment == \"right\" %}\n      --margin-right-nudge: {{nudge}};\n    {% endif %}\n    --line-height: {{ block_settings.line_height | default: '1' }};\n    --letter-spacing: {{ block_settings.letter_spacing | default: '-0.03em' }};\n    --text-transform: {{ block_settings.case | default: 'none' }};\n    --text-trim: {{text_trim}};\n  \"\n  data-cap-text=\"{{ cap_text }}\"\n  {{ block.shopify_attributes }}\n{% endcapture %}\n\n{% if text != blank %}\n  <jumbo-text {{ attributes }}\n    ><span class=\"jumbo-text-line\">{{ text }}</span></jumbo-text\n  >\n{% else %}\n  <span class=\"visually-hidden\">{{ shown_text }}</span>\n  <jumbo-text\n    {{ attributes }}\n    data-text-effect=\"{{ block_settings.text_effect }}\"\n    data-animation-repeat=\"{{ block_settings.animation_repeat }}\"\n  >\n    {%- for line in text_with_lines -%}\n      {%- if forloop.index > 1 -%}\n        <br>\n      {%- endif -%}\n      <span\n        class=\"jumbo-text-line\"\n        style=\"--line-index: {{ forloop.index }};\"\n        data-testid=\"jumbo-text-line\"\n        aria-hidden=\"true\"\n      >\n        {{- line -}}\n      </span>\n    {%- endfor -%}\n  </jumbo-text>\n{% endif %}\n\n<script\n  src=\"{{ 'jumbo-text.js' | asset_url }}\"\n  type=\"module\"\n  async\n></script>\n\n{% stylesheet %}\n  .jumbo-text__container {\n    width: 100%;\n  }\n\n  footer .jumbo-text__container {\n    pointer-events: none;\n  }\n\n  jumbo-text {\n    display: block;\n    font-family: var(--font-family, inherit);\n    font-style: var(--font-style, normal);\n    color: var(--color, inherit);\n    font-weight: var(--font-weight, inherit);\n    letter-spacing: var(--letter-spacing, -0.02em);\n    line-height: var(--line-height, 1);\n    opacity: 0;\n    visibility: hidden;\n    text-align: var(--text-align);\n    text-box: var(--text-trim, trim-end cap text);\n    text-transform: var(--text-transform, none);\n    transition: opacity 0.3s ease;\n    width: 100%;\n    margin-left: var(--margin-left-nudge, 0);\n    margin-right: var(--margin-right-nudge, 0);\n    overflow: visible;\n  }\n\n  jumbo-text.ready {\n    opacity: 1;\n    visibility: visible;\n  }\n\n  jumbo-text[data-cap-text='true'] {\n    /* stylelint-disable-next-line plugin/no-unsupported-browser-features */\n    text-box-edge: cap text;\n  }\n\n  .jumbo-text-line {\n    display: inline-flex;\n    white-space: pre;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    /* Blur effect */\n    .ready[data-text-effect='blur'] {\n      filter: blur(20px);\n      opacity: 0.5;\n      scale: 1.05;\n      transition: filter 1.6s var(--animation-timing-fade-in), opacity 1.3s var(--animation-timing-fade-in),\n        scale 1.6s var(--animation-timing-fade-in);\n    }\n\n    .jumbo-text-visible[data-text-effect='blur'] {\n      filter: blur(0);\n      opacity: 1;\n      scale: 1;\n    }\n\n    /* Reveal effect */\n    .ready[data-text-effect='reveal'] {\n      overflow: hidden;\n    }\n\n    .ready[data-text-effect='reveal'] .jumbo-text-line {\n      transform: translateY(100%);\n    }\n\n    .jumbo-text-visible[data-text-effect='reveal'] .jumbo-text-line {\n      transition: transform 0.5s var(--animation-timing-fade-in) calc(var(--line-index) * 0.05s);\n      transform: translateY(0);\n    }\n\n    .jumbo-text-visible[data-text-effect='reveal'] {\n      overflow: visible;\n      transition: overflow 0s linear 0.75s;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/layout-panel-style.liquid",
    "content": "{%- liquid\n  comment\n    Intended for blocks and sections that provide values for all the referenced settings.\n\n    Accepts:\n      settings: {block.settings || section.settings}\n  endcomment\n\n  assign horizontal_alignment = settings.horizontal_alignment\n\n  assign vertical_alignment = settings.vertical_alignment\n  if settings.align_baseline and vertical_alignment == 'flex-end'\n    assign vertical_alignment = 'last baseline'\n  endif\n\n  unless settings.content_direction == 'row'\n    assign horizontal_alignment = settings.horizontal_alignment_flex_direction_column\n    assign vertical_alignment = settings.vertical_alignment_flex_direction_column\n  endunless\n\n  assign vertical_alignment_mobile = vertical_alignment\n\n  if settings.vertical_on_mobile and vertical_alignment == 'last baseline'\n    assign vertical_alignment_mobile = 'flex-end'\n  endif\n-%}\n\n--flex-direction: {{ settings.content_direction | default: 'column' }}; --flex-wrap: nowrap; --flex-wrap-mobile: wrap;\n\n{% render 'gap-style', value: settings.gap %}\n\n--horizontal-alignment: {{ horizontal_alignment }}; --vertical-alignment: {{ vertical_alignment }};\n--vertical-alignment-mobile: {{ vertical_alignment_mobile }};\n"
  },
  {
    "path": "snippets/link-featured-image.liquid",
    "content": "{%- doc -%}\n  Renders the featured image for a menu item.\n\n  @param {object} link - The link to render\n  @param {string} [class] - The class to apply to the image\n  @param {string} [sizes] - The sizes to apply to the image\n\n  @example\n  {% render 'menu-featured-image', link: link %}\n{%- enddoc -%}\n\n{% assign image_sizes = sizes | default: 'auto' %}\n\n{% if link.type == 'collection_link' %}\n  {% if link.object.featured_image %}\n    {{\n      link.object.featured_image\n      | image_url: width: 800\n      | image_tag: loading: 'lazy', class: class, sizes: image_sizes\n    }}\n  {% elsif link.object.products.size > 0 %}\n    {% assign product_object = link.object.products | where: 'featured_image' | first %}\n    {% if product_object.featured_image %}\n      {{\n        product_object.featured_image\n        | image_url: width: 800\n        | image_tag: loading: 'lazy', class: class, sizes: image_sizes\n      }}\n    {% endif %}\n  {% endif %}\n{% elsif link.type == 'collections_link' %}\n  {% assign collection_object = collections | where: 'featured_image' | first %}\n  {% if collection_object.featured_image %}\n    {{\n      collection_object.featured_image\n      | image_url: width: 800\n      | image_tag: loading: 'lazy', class: class, sizes: image_sizes\n    }}\n  {% endif %}\n{% elsif link.type == 'catalog_link' %}\n  {% assign product_object = collections.all.products | where: 'featured_image' | first %}\n  {{\n    product_object.featured_image\n    | image_url: width: 800\n    | image_tag: loading: 'lazy', class: class, sizes: image_sizes\n  }}\n{% endif %}\n"
  },
  {
    "path": "snippets/list-filter.liquid",
    "content": "{%- doc -%}\n  Renders a list or swatch filter.\n\n  @param {object} filter - The filter to render\n  @param {string} filter_style - The filter style ('horizontal' | 'vertical')\n  @param {number} active_value_count - The number of active values\n  @param {number} sectionId - The section ID\n  @param {boolean} [should_render_clear] - Whether to render the clear button\n  @param {boolean} [show_swatch_label] - Whether to show the swatch label\n  @param {boolean} [in_drawer] - Whether the filter is in a drawer\n{%- enddoc -%}\n\n{% liquid\n  assign is_swatch = false\n  assign swatch_index = filter.values | find_index: 'swatch'\n\n  if swatch_index != null\n    assign is_swatch = true\n  endif\n\n  assign is_image = false\n  if filter.presentation == 'image'\n    assign is_image = true\n  endif\n%}\n\n<accordion-custom\n  class=\"facets__item\"\n  {% if filter_style == 'horizontal' %}\n    data-disable-animation-on-desktop=\"true\"\n    data-close-with-escape=\"true\"\n  {% endif %}\n\n  {% if filter_style == 'vertical' %}\n    open\n    open-by-default-on-mobile\n    open-by-default-on-desktop\n  {% endif %}\n  data-filter-param-name=\"{{ filter.param_name | escape | replace: '.', '-' }}\"\n>\n  <details\n    id=\"Facet-Details-{{ sectionId }}-{{ filter.param_name | escape | replace: '.', '-' }}\"\n    class=\"facets__panel\"\n    {% if filter_style == 'horizontal' %}\n      data-auto-close-details=\"desktop\"\n    {% endif %}\n    {% if filter_style == 'vertical' %}\n      open\n    {% endif %}\n  >\n    <summary class=\"facets__summary\">\n      <span class=\"facets__label\">{{ filter.label }}</span>\n\n      <div class=\"facets__status-wrapper\">\n        {% if is_swatch %}\n          <facet-status-component\n            class=\"facets__status facets__status--swatches\"\n            facet-type=\"swatches\"\n          >\n            <span\n              class=\"facets__swatch-wrapper{% if active_value_count > 3 %} bubble facets__bubble{% endif %}\"\n              ref=\"facetStatus\"\n            >\n              {%- liquid\n                if active_value_count > 3\n                  echo active_value_count\n                elsif active_value_count > 0 and active_value_count <= 3\n                  for value in filter.active_values\n                    render 'swatch', swatch: value.swatch, mode: 'filter'\n                  endfor\n                endif\n              -%}\n            </span>\n          </facet-status-component>\n        {% else %}\n          <facet-status-component\n            class=\"facets__status\"\n            facet-type=\"list\"\n            data-filter-style=\"{{ filter_style }}\"\n          >\n            <span\n              class=\"\n                {%- if filter_style == 'horizontal' -%}\n                  {%- if active_value_count > 1 -%}\n                    bubble facets__bubble\n                  {%- endif -%}\n                {%- else -%}\n                  {%- if active_value_count > 0 -%}\n                    bubble facets__bubble\n                  {%- endif -%}\n                {%- endif %}\n                hide-when-empty\n              \"\n              ref=\"facetStatus\"\n            >\n              {%- liquid\n                if filter_style == 'horizontal' and active_value_count == 1\n                  echo filter.active_values[0].label\n                elsif active_value_count > 0\n                  echo active_value_count\n                endif\n              -%}\n            </span>\n          </facet-status-component>\n        {% endif %}\n        <span class=\"svg-wrapper icon-caret icon-animated\">\n          {{- 'icon-caret.svg' | inline_asset_content -}}\n        </span>\n      </div>\n    </summary>\n    <floating-panel-component\n      {% unless filter_style == 'vertical' %}\n        data-close-on-resize\n      {% endunless %}\n      class=\"facets__inputs facets__panel-content details-content{% if filter_style == 'horizontal' %} color-{{ settings.popover_color_scheme }}{% endif %}\"\n      id=\"facet-inputs-{{ filter.param_name | escape | replace: '.', '-' }}\"\n    >\n      <facet-inputs-component\n        on:change=\"/updateFilters\"\n        id=\"facet-inputs-component-{{ filter.param_name | escape | replace: '.', '-' }}\"\n      >\n        {% liquid\n          assign has_active_values = false\n          assign inital_visible_values = 10\n          if is_swatch\n            assign inital_visible_values = 22\n          endif\n          if is_image\n            assign inital_visible_values = 6\n          endif\n          assign max_visible_values = inital_visible_values | plus: 1\n          assign render_show_more = false\n          assign should_render_for_swatch = is_swatch\n          if is_swatch and show_swatch_label\n            assign should_render_for_swatch = false\n          endif\n          if filter.values.size > max_visible_values and should_render_for_swatch == false\n            assign render_show_more = true\n          endif\n        %}\n        {% liquid\n          if render_show_more\n            if filter_style == 'horizontal'\n              echo '<show-more-component class=\"show-more\" data-expanded=\"false\" data-disable-on-desktop=\"true\" data-skip-node-update=\"true\">'\n            else\n              echo '<show-more-component class=\"show-more\" data-expanded=\"false\" data-skip-node-update=\"true\">'\n            endif\n          endif\n          assign should_use_pills = true\n\n          for value in filter.values\n            if value.label.size > 3\n              assign should_use_pills = false\n              break\n            endif\n          endfor\n\n          if filter.type == 'boolean'\n            assign should_use_pills = false\n          endif\n        %}\n\n        <div\n          class=\"facets__inputs-wrapper{% if is_swatch or is_image or should_use_pills %} facets__inputs-wrapper--row{% endif %}\"\n          ref=\"showMoreContent\"\n        >\n          {% liquid\n            if is_swatch\n              assign swatch_columns = filter.values.size\n\n              if swatch_columns > 4\n                assign swatch_columns = 4\n\n                # Balance the number of columns based on the number of values, i.e. try to avoid one or two items in\n                # the last row if the number of values is (almost) divisible by 3.\n                assign mod4 = filter.values.size | modulo: 4\n                assign mod3 = filter.values.size | modulo: 3\n                if mod4 != 0 and mod4 != 3\n                  if mod3 == 0 or mod3 == 2\n                    assign swatch_columns = 3\n                  endif\n                endif\n              endif\n            endif\n\n            if is_image\n              assign image_columns = 3\n              if filter.values.size < 3\n                assign image_columns = filter.values.size\n              endif\n            endif\n          %}\n          <ul\n            id=\"filters-list-{{ sectionId }}-{{ filter.param_name | escape | replace: '.', '-' }}\"\n            class=\"facets__inputs-list{% if should_use_pills %} facets__inputs-list--grid{% endif %} list-unstyled{% if is_swatch %} facets__inputs-list--swatches{% if show_swatch_label %} facets__inputs-list--swatches-grid{% endif %}{% endif %}{% if is_image %} facets__inputs-list--images{% endif %}\"\n            {% if is_swatch %}\n              style=\"--swatch-columns: {{ swatch_columns }};\"\n            {% endif %}\n            {% if is_image %}\n              style=\"--image-columns: {{ image_columns }};\"\n            {% endif %}\n            name=\"{{ filter.label }}\"\n          >\n            {%- for value in filter.values -%}\n              {% liquid\n                assign input_id = 'Filter-' | append: filter.param_name | escape | append: '-' | append: forloop.index | replace: '.', '-' | append: '-' | append: filter_style | append: '-' | append: in_drawer\n                assign is_disabled = false\n                if value.count == 0 and value.active == false\n                  assign is_disabled = true\n                endif\n                assign hidden_class = null\n                if forloop.index > inital_visible_values and render_show_more\n                  assign hidden_class = 'hidden'\n                  if filter_style == 'horizontal'\n                    assign hidden_class = 'mobile:hidden'\n                  endif\n                endif\n              %}\n              <li\n                data-skip-node-update=\"true\"\n                class=\"\n                  facets__inputs-list-item\n                  {% if hidden_class %} {{ hidden_class }}{% endif %}\n                  {% if is_disabled %} facets__inputs-list-item--disabled{% endif %}\n                \"\n                {% if hidden_class %}\n                  ref=\"showMoreItems[]\"\n                {% endif %}\n              >\n                {% if value.active %}\n                  {% assign has_active_values = true %}\n                {% endif %}\n                {% if is_image %}\n                  <fieldset\n                    class=\"variant-option variant-option--buttons variant-option--images\"\n                    aria-label=\"{{ value.label }}\"\n                    on:keydown=\"#facet-inputs-component-{{ filter.param_name | escape | replace: '.', '-' }}/handleKeyDown\"\n                  >\n                    <div class=\"facets__image-wrapper\">\n                      {% if value.image %}\n                        {{ value.image | image_url: width: 300 | image_tag: alt: value.alt }}\n                      {% endif %}\n                      {% if is_disabled %}\n                        <svg\n                          aria-hidden=\"true\"\n                          width=\"100%\"\n                          height=\"100%\"\n                          viewBox=\"0 0 100 100\"\n                          preserveAspectRatio=\"none\"\n                        >\n                          <line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"100\" vector-effect=\"non-scaling-stroke\" />\n                        </svg>\n                      {% endif %}\n                    </div>\n                    <input\n                      tabindex=\"0\"\n                      type=\"checkbox\"\n                      name=\"{{ value.param_name }}\"\n                      value=\"{{ value.value }}\"\n                      aria-label=\"{{ value.label }}\"\n                      id=\"{{ input_id }}\"\n                      {% if value.active %}\n                        checked\n                      {% endif %}\n                      {% if is_disabled %}\n                        disabled\n                      {% endif %}\n                      ref=\"facetInputs[]\"\n                    >\n                    <label\n                      class=\"facets__image-label\"\n                      for=\"{{ input_id }}\"\n                      tabindex=\"-1\"\n                    >\n                      {{- value.label }}\n                    </label>\n                  </fieldset>\n                {% elsif is_swatch %}\n                  <fieldset\n                    class=\"variant-option variant-option--buttons variant-option--swatches {% if is_disabled %}variant-option--swatches-disabled{% endif %}\"\n                    aria-label=\"{{ value.label }}\"\n                    on:keydown=\"#facet-inputs-component-{{ filter.param_name | escape | replace: '.', '-' }}/handleKeyDown\"\n                  >\n                    <label\n                      class=\"variant-option__button-label variant-option__button-label--has-swatch\"\n                      on:pointerenter=\"/prefetchPage\"\n                      on:pointerleave=\"/cancelPrefetchPage\"\n                    >\n                      <div\n                        class=\"variant-option__swatch-wrapper\"\n                      >\n                        <input\n                          tabindex=\"0\"\n                          type=\"checkbox\"\n                          name=\"{{ value.param_name }}\"\n                          value=\"{{ value.value }}\"\n                          aria-label=\"{{ value.label }}\"\n                          id=\"{{ input_id }}\"\n                          {% if value.active %}\n                            checked\n                          {% endif %}\n                          {% if is_disabled %}\n                            disabled\n                          {% endif %}\n                          ref=\"facetInputs[]\"\n                        >\n                        {% render 'swatch', swatch: value.swatch, mode: 'filter' %}\n                        {% if is_disabled %}\n                          <svg\n                            aria-hidden=\"true\"\n                            width=\"100%\"\n                            height=\"100%\"\n                            viewBox=\"0 0 100 100\"\n                            preserveAspectRatio=\"none\"\n                          >\n                            <line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"100\" vector-effect=\"non-scaling-stroke\" />\n                          </svg>\n                        {% endif %}\n                      </div>\n                      <label\n                        class=\"{% if show_swatch_label %}facets__swatch-label{% else %}hidden{% endif %}\"\n                        for=\"{{ input_id }}\"\n                        tabindex=\"-1\"\n                      >\n                        {{- value.label }}\n                      </label>\n                    </label>\n                  </fieldset>\n                {% else %}\n                  {% if should_use_pills %}\n                    <div\n                      class=\"facets__pill-wrapper\"\n                      on:keydown=\"#facet-inputs-component-{{ filter.param_name | escape | replace: '.', '-' }}/handleKeyDown\"\n                    >\n                      <input\n                        type=\"checkbox\"\n                        name=\"{{ value.param_name }}\"\n                        value=\"{{ value.value }}\"\n                        id=\"{{ input_id }}\"\n                        class=\"facets__pill-input\"\n                        data-label=\"{{ value.label }}\"\n                        {% if value.active %}\n                          checked\n                        {% endif %}\n                        {% if is_disabled %}\n                          disabled\n                        {% endif %}\n                        ref=\"facetInputs[]\"\n                        tabindex=\"-1\"\n                      >\n                      <label\n                        class=\"facets__pill-label\"\n                        for=\"{{ input_id }}\"\n                        tabindex=\"0\"\n                      >\n                        {{- value.label }}\n                        {% if is_disabled %}\n                          <svg\n                            aria-hidden=\"true\"\n                            width=\"100%\"\n                            height=\"100%\"\n                            viewBox=\"0 0 100 100\"\n                            preserveAspectRatio=\"none\"\n                          >\n                            <line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"100\" vector-effect=\"non-scaling-stroke\" />\n                          </svg>\n                        {% endif %}\n                      </label>\n                    </div>\n                  {% else %}\n                    {% render 'checkbox',\n                      name: value.param_name,\n                      value: value.value,\n                      label: value.label,\n                      checked: value.active,\n                      id: input_id,\n                      disabled: is_disabled,\n                      inputRef: 'facetInputs[]',\n                      events: 'on:pointerenter=\"/prefetchPage\" on:pointerleave=\"/cancelPrefetchPage\"'\n                    %}\n                  {% endif %}\n                {% endif %}\n              </li>\n            {%- endfor -%}\n          </ul>\n        </div>\n        {% if render_show_more %}\n          <button\n            class=\"show-more__button button-unstyled button-unstyled--with-icon{% if filter_style == 'horizontal' %} desktop:hidden{% endif %}\"\n            ref=\"showMoreButton\"\n            on:click=\"/toggle\"\n            aria-expanded=\"false\"\n            aria-controls=\"filters-list-{{ sectionId }}-{{ filter.param_name | escape | replace: '.', '-' }}\"\n          >\n            <span class=\"svg-wrapper icon-plus\">\n              {{- 'icon-plus.svg' | inline_asset_content -}}\n            </span>\n            <span class=\"show-more__label show-more__label--more\">\n              {{- 'actions.show_more' | t -}}\n            </span>\n            <span class=\"show-more__label show-more__label--less\">\n              {{- 'actions.show_less' | t -}}\n            </span>\n          </button>\n          {% echo '</show-more-component>' %}\n        {% endif %}\n\n        {% if should_render_clear %}\n          <facet-clear-component>\n            <div\n              class=\"facets__clear {% if has_active_values %}facets__clear--active{% endif %}\"\n              ref=\"clearButton\"\n            >\n              <button\n                type=\"button\"\n                on:click=\"/clearFilter\"\n                on:keydown=\"/clearFilter\"\n                class=\"clear-filter button button-secondary\"\n              >\n                {{- 'actions.clear' | t -}}\n              </button>\n            </div>\n          </facet-clear-component>\n        {% endif %}\n      </facet-inputs-component>\n    </floating-panel-component>\n  </details>\n</accordion-custom>\n\n{% stylesheet %}\n  .facets input:checked + label {\n    font-weight: 500;\n  }\n\n  .facets .checkbox .icon-checkmark {\n    transition: border-color 0.2s ease, background-color 0.2s ease;\n  }\n\n  .facets .checkbox:not(.checkbox--disabled):hover .icon-checkmark {\n    border-color: rgb(var(--color-foreground-rgb) / var(--opacity-40-60));\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  /* Hover state for checked checkboxes - targeting via adjacent sibling */\n  .facets .checkbox:not(.checkbox--disabled):hover .checkbox__input:checked + .checkbox__label .icon-checkmark {\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-85));\n  }\n\n  .facets .checkbox:not(.checkbox--disabled):hover .checkbox__label-text {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-90));\n  }\n\n  .facets .checkbox .checkbox__label-text {\n    transition: color 0.2s ease, font-weight 0.2s ease;\n  }\n\n  /* Pill style */\n  .facets__pill-label {\n    --pill-label-padding-inline: var(--padding-xs);\n    --pill-label-border-radius: var(--style-border-radius-md);\n    --pill-label-border-width: var(--variant-picker-button-border-width);\n    --pill-label-height: var(--button-size-md);\n    --pill-label-focus-outline-color: var(--color-foreground);\n    --pill-label-color: var(--color-foreground);\n    --pill-label-color-rgb: var(--color-foreground-rgb);\n    --pill-label-background-color: var(--color-background);\n    --pill-label-background-color-rgb: var(--color-background-rgb);\n    --pill-label-border-opacity: var(--facets-low-opacity);\n\n    display: inline-flex;\n    position: relative;\n    align-items: center;\n    justify-content: center;\n    box-shadow: inset 0 0 0 var(--pill-label-border-width) rgb(var(--pill-label-color-rgb) / var(--opacity-10-25));\n    border-radius: var(--pill-label-border-radius);\n    height: var(--pill-label-height);\n    width: 100%;\n    padding-inline: var(--pill-label-padding-inline);\n    color: rgb(var(--pill-label-color-rgb));\n    background-color: rgb(var(--pill-label-background-color-rgb));\n    cursor: pointer;\n    transition: color var(--animation-speed) var(--animation-easing),\n      background-color var(--animation-speed) var(--animation-easing);\n    outline-color: var(--pill-label-focus-outline-color);\n\n    &:hover {\n      --pill-label-border-opacity: 100%;\n    }\n  }\n\n  .facets__pill-input {\n    &:checked + .facets__pill-label {\n      --pill-label-color-rgb: var(--color-background-rgb);\n      --pill-label-background-color-rgb: var(--color-foreground-rgb);\n      --pill-label-border-opacity: 0;\n\n      font-weight: 500;\n    }\n\n    &:disabled + .facets__pill-label {\n      opacity: var(--disabled-opacity);\n      cursor: not-allowed;\n\n      &:hover {\n        --pill-label-border-opacity: var(--facets-low-opacity);\n      }\n    }\n  }\n\n  .facets__status-wrapper {\n    display: flex;\n    align-items: center;\n  }\n\n  .facets--drawer .facets__status-wrapper {\n    @media screen and (max-width: 749px) {\n      gap: var(--gap-3xs);\n    }\n  }\n\n  .facets--vertical .facets__status-wrapper {\n    gap: var(--gap-xs);\n  }\n\n  .facets--horizontal .facets__status-wrapper {\n    gap: 0;\n  }\n\n  .facets__pill-input:disabled + .facets__pill-label svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    border-radius: var(--style-border-radius-md);\n  }\n\n  .facets__pill-label svg line {\n    stroke-width: 1.5px;\n    stroke: rgb(var(--color-foreground-rgb) / var(--facets-low-opacity));\n  }\n\n  .facets__pill-wrapper {\n    position: relative;\n  }\n\n  .facets__pill-input {\n    position: absolute;\n    inset: 0;\n    margin: 0;\n    padding: 0;\n    width: auto;\n    height: auto;\n    aspect-ratio: unset;\n    border: none;\n    border-radius: 0;\n    background: transparent;\n    appearance: auto;\n    display: block;\n    opacity: 0;\n    cursor: pointer;\n  }\n\n  /* Swatches */\n  .facets__status--swatches {\n    display: none;\n  }\n\n  .facets__swatch-wrapper {\n    display: flex;\n  }\n\n  .variant-option__swatch-wrapper {\n    position: relative;\n    overflow: visible;\n    border-radius: var(--options-border-radius);\n  }\n\n  .variant-option--swatches-disabled {\n    pointer-events: none;\n    cursor: not-allowed;\n  }\n\n  .variant-option--swatches-disabled .variant-option__swatch-wrapper {\n    overflow: hidden;\n  }\n\n  .facets--horizontal .facets__status--swatches {\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  .facets--horizontal .sorting-filter .facets__status {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n\n  .facets__status--swatches .swatch {\n    width: calc(var(--variant-picker-swatch-width) / 1.5);\n    height: calc(var(--variant-picker-swatch-height) / 1.5);\n  }\n\n  .facets__status--swatches .swatch + .swatch {\n    margin-left: calc(var(--variant-picker-swatch-width) / -3);\n    outline: 1px solid rgb(var(--color-background-rgb));\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--images {\n    display: grid;\n    grid-template-columns: repeat(var(--image-columns), 125px);\n    gap: var(--gap-sm);\n  }\n\n  .facets--drawer .facets__inputs-wrapper .facets__inputs-list--images {\n    grid-template-columns: repeat(3, 1fr);\n\n    @media screen and (min-width: 750px) {\n      grid-template-columns: repeat(4, 1fr);\n    }\n  }\n\n  .facets--vertical .facets__inputs-wrapper .facets__inputs-list--images {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .facets--drawer .facets__inputs-list--images {\n    padding-top: var(--padding-xs);\n  }\n\n  .facets__image-wrapper {\n    aspect-ratio: 1/1;\n    width: 100%;\n    padding: var(--padding-xs);\n    position: relative;\n    overflow: hidden;\n  }\n\n  .facets__image-wrapper img {\n    height: 100%;\n    width: 100%;\n    object-fit: contain;\n    border-radius: calc(var(--border-radius) / 2);\n  }\n\n  .facets__image-label {\n    width: 100%;\n    text-align: center;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    padding-block-end: var(--padding-xs);\n    cursor: pointer;\n  }\n\n  .facets__inputs-list-item--disabled .facets__image-label {\n    cursor: not-allowed;\n  }\n\n  .facets__inputs-list-item:not(.facets__inputs-list-item--disabled) .facets__image-label:hover {\n    font-weight: 500;\n  }\n\n  /* Filter-specific variant-option styles */\n  .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch {\n    --focus-outline: var(--focus-outline-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55));\n\n    outline: var(--focus-outline);\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .facets__inputs-list--swatches-grid .variant-option__button-label:has(:focus-visible) .swatch {\n    --focus-outline: var(--focus-outline-width) solid currentcolor;\n\n    outline: var(--focus-outline);\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .facets__inputs-list--swatches-grid .variant-option__button-label:has(:focus-visible) {\n    outline: none;\n  }\n\n  .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover {\n    outline: none;\n  }\n\n  .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:has(:checked) {\n    --focus-outline: none;\n  }\n\n  .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:has(:checked) .swatch {\n    outline: var(--focus-outline);\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .facets__inputs-list--swatches .variant-option__button-label {\n    --color-variant-text: var(--color-foreground);\n  }\n\n  .facets__inputs-list--swatches {\n    --variant-picker-swatch-width: 32px;\n    --variant-picker-swatch-height: 32px;\n\n    @media screen and (min-width: 750px) {\n      --variant-picker-swatch-width: 26px;\n      --variant-picker-swatch-height: 26px;\n    }\n  }\n\n  .facets--vertical .facets__inputs-wrapper .facets__inputs-list--swatches-grid {\n    gap: var(--gap-sm);\n  }\n\n  .facets--vertical .facets__inputs-list--swatches .facets__inputs-list-item {\n    display: flex;\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--swatches-grid {\n    --columns: 2;\n\n    display: grid;\n    grid-template-columns: repeat(var(--columns), 1fr);\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--swatches-grid .variant-option--swatches {\n    cursor: pointer;\n    overflow: visible;\n  }\n\n  .facets__inputs-list-item--disabled .variant-option--swatches {\n    cursor: not-allowed;\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--swatches-grid label {\n    cursor: pointer;\n    word-break: break-word;\n    white-space: normal;\n  }\n\n  .facets__inputs-list--swatches-grid .facets__inputs-list-item--disabled label {\n    cursor: not-allowed;\n  }\n\n  .facets__inputs-list-item--disabled .variant-option__button-label {\n    cursor: not-allowed;\n  }\n\n  .facets__inputs-wrapper\n    .facets__inputs-list--swatches-grid\n    .variant-option__button-label--has-swatch:has(input[type='checkbox']) {\n    align-items: center;\n    overflow: visible;\n    justify-content: flex-start;\n    display: flex;\n    width: 100%;\n    flex-basis: unset;\n    gap: var(--gap-sm);\n  }\n\n  .facets__inputs-wrapper .facets__inputs-list--swatches-grid .variant-option__button-label:has(:checked) {\n    color: rgb(var(--color-foreground-rgb));\n    background-color: rgb(var(--color-background-rgb));\n    font-weight: 500;\n    transition: font-weight 0.2s ease;\n  }\n\n  .facets .variant-option--swatches {\n    --options-border-radius: var(--variant-picker-swatch-radius);\n\n    width: auto;\n  }\n\n  .facets__inputs-list-item:not(.facets__inputs-list-item--disabled) .variant-option__button-label:hover {\n    font-weight: 500;\n  }\n\n  /* Variant option images (filters) */\n  .variant-option--images {\n    --image-facet-border-width: var(--variant-picker-button-border-width);\n    --image-facet-border-opacity: var(--facets-low-opacity);\n    --image-facet-border-radius: var(--style-border-radius-xs);\n\n    position: relative;\n    border-radius: var(--image-facet-border-radius);\n    box-shadow: inset 0 0 0 var(--image-facet-border-width)\n      rgb(var(--color-foreground-rgb) / var(--image-facet-border-opacity));\n\n    &:hover {\n      --image-facet-border-opacity: 100%;\n    }\n\n    &:has(input:checked) {\n      font-weight: 500;\n      transition: font-weight 0.2s ease;\n    }\n\n    &:has(input:checked):hover {\n      --image-facet-border-width: calc(var(--variant-picker-button-border-width) + 0.5px);\n    }\n\n    &:has(input:focus-visible) {\n      outline: var(--focus-outline-width) solid currentcolor;\n      outline-offset: var(--focus-outline-offset);\n    }\n  }\n\n  .variant-option--images input {\n    /* remove the checkbox from the page flow */\n    position: absolute;\n\n    /* set the dimensions to match those of the label */\n    inset: 0;\n\n    /* hide it */\n    opacity: 0;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    height: 100%;\n    aspect-ratio: unset;\n    border: none;\n    border-radius: 0;\n    background: transparent;\n    appearance: auto;\n    display: block;\n    cursor: pointer;\n  }\n\n  .facets__inputs-list-item--disabled .variant-option--images {\n    --image-facet-border-opacity: 0;\n\n    opacity: var(--disabled-opacity);\n    cursor: not-allowed;\n\n    &:hover {\n      --image-facet-border-opacity: 0;\n    }\n\n    img {\n      opacity: var(--disabled-opacity);\n    }\n\n    input,\n    label,\n    .facets__image-label {\n      cursor: not-allowed;\n    }\n\n    .facets__image-wrapper {\n      border: var(--style-border-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-30));\n      border-radius: var(--image-facet-border-radius);\n    }\n  }\n\n  /* Position disabled-svg */\n  .variant-option--images svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    stroke-width: var(--border-width);\n    stroke: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  /* Position label text and handle overflow */\n  .facets__inputs-list-item,\n  .variant-option--images {\n    min-width: 0;\n  }\n\n  /* Safari < 16.4 outline border-radius workaround - filter-specific */\n  @supports not (background-color: rgb(from red 150 g b / alpha)) {\n    .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch {\n      outline: none;\n      position: relative;\n      overflow: visible;\n    }\n\n    .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch::after {\n      content: '';\n      position: absolute;\n      inset: calc(-1 * var(--focus-outline-offset));\n      border: var(--focus-outline);\n      border-radius: var(--focus-outline-radius, 50%);\n      background-color: transparent;\n      display: inherit;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/localization-form.liquid",
    "content": "{%- doc -%}\n  Renders either a country selector, language selector, or both.\n\n  @param {boolean} show_country - Whether to show the country selector\n  @param {boolean} show_language - Whether to show the language selector\n  @param {string} form_id - The block or section ID\n  @param {string} localization_style - The style of the localization form\n  @param {string} [form_style] - The style tag string to be applied to the form\n\n  @example\n  {% render 'localization-form', show_country: true, show_language: true, form_id: block.id, localization_style: 'dropdown' %}\n{%- enddoc -%}\n\n{%- liquid\n  comment\n    From Tyler in July: Noting here that it might make sense for us to just be able to get localization.available_currencies and localization.popular_countries instead of needing this esoteric logic.\n  endcomment\n  assign currencies = localization.available_countries | map: 'currency' | map: 'iso_code' | uniq\n  assign popular_countries = localization.available_countries | where: 'popular?' | sort: 'name'\n\n  assign show_country_filter = false\n  if localization.available_countries.size > 9\n    assign show_country_filter = true\n  endif\n\n  assign show_popular_countries = false\n  if localization.available_countries.size > 9 and popular_countries.size > 1\n    assign show_popular_countries = true\n  endif\n\n  assign show_currencies = false\n  if currencies.size > 1\n    assign show_currencies = true\n  endif\n\n  assign aliases_us = 'us,usa,america,united states of america'\n  assign aliases_uk = 'uk,gb,great britain'\n%}\n<localization-form-component\n  ref=\"localizationForm\"\n  data-label-results-count=\"{{ 'accessibility.country_results_count' | t: count: '[count]' }}\"\n  data-show-filter=\"{{ show_country_filter }}\"\n  style=\"{{ form_style }}\"\n>\n  {% assign localization_label = 'content.localization_region_and_language' | t %}\n\n  {%- form 'localization',\n    id: 'LocalizationForm',\n    class: 'localization-form',\n    ref: 'form',\n    return_to: back,\n    aria-label: localization_label\n  -%}\n    {% if show_country %}\n      {% if show_country_filter %}\n        <div class=\"country-filter\">\n          <div class=\"field\">\n            <div class=\"country-filter__search-icon field__button\">\n              <span class=\"svg-wrapper\">\n                {{ 'icon-search.svg' | inline_asset_content }}\n              </span>\n            </div>\n            <input\n              class=\"country-filter__input\"\n              id=\"country-filter-input\"\n              type=\"search\"\n              name=\"country_filter\"\n              value=\"\"\n              placeholder=\"{{ 'placeholders.search' | t }}\"\n              role=\"combobox\"\n              aria-owns=\"country-results\"\n              aria-controls=\"country-results\"\n              aria-haspopup=\"listbox\"\n              aria-autocomplete=\"list\"\n              aria-label=\"{{ 'accessibility.find_country' | t }}\"\n              autocorrect=\"off\"\n              autocomplete=\"off\"\n              autocapitalize=\"off\"\n              spellcheck=\"false\"\n              ref=\"search\"\n              on:keyup=\"/filterCountries\"\n            >\n            <label\n              class=\"field__label visually-hidden\"\n              for=\"country-filter-input\"\n            >\n              {{- 'content.search' | t -}}\n            </label>\n            <button\n              type=\"reset\"\n              class=\"button button-unstyled country-filter__reset-button field__button\"\n              aria-label=\"{{ 'actions.reset' | t }}\"\n              ref=\"resetButton\"\n              hidden\n              on:click=\"/resetCountriesFilter\"\n            >\n              <span class=\"svg-wrapper\">\n                {{ 'icon-reset.svg' | inline_asset_content }}\n              </span>\n            </button>\n          </div>\n        </div>\n      {% endif %}\n      <div class=\"country-selector-form__wrapper\">\n        <h2\n          class=\"visually-hidden\"\n          id=\"{{ localization_style }}-CountryLabel\"\n        >\n          Country/Region\n        </h2>\n        {% if show_country_filter %}\n          <div\n            id=\"sr-country-search-results-{{ form_id }}\"\n            class=\"visually-hidden\"\n            aria-live=\"polite\"\n            ref=\"liveRegion\"\n          ></div>\n        {% endif %}\n        <div\n          class=\"localization-form__list\"\n          id=\"{{ localization_style }}-country-results\"\n          ref=\"countryList\"\n        >\n          {% if show_popular_countries %}\n            <ul\n              role=\"list\"\n              class=\"list-unstyled popular-countries\"\n              aria-label=\"{{ 'accessibility.country_region' | t }}\"\n              ref=\"popularCountries\"\n            >\n              {%- for country in popular_countries -%}\n                {% liquid\n                  assign aliases = ''\n                  case country.iso_code\n                    when 'US'\n                      assign aliases = aliases_us\n                    when 'GB'\n                      assign aliases = aliases_uk\n                  endcase\n                %}\n                <li\n                  class=\"localization-form__list-item\"\n                  {% if country.iso_code == localization.country.iso_code %}\n                    aria-current=\"true\"\n                  {% endif %}\n                  data-value=\"{{ country.iso_code }}\"\n                  {% if aliases %}\n                    data-aliases=\"{{ aliases }}\"\n                  {% endif %}\n                  id=\"{{ country.name }}\"\n                  aria-label=\"{{ country.name }}\"\n                  role=\"option\"\n                  tabindex=\"-1\"\n                  ref=\"countryListItems[]\"\n                  on:click=\"/selectCountry/{{ country.iso_code }}\"\n                >\n                  <span class=\"svg-wrapper icon-checkmark\">\n                    {{- 'icon-checkmark.svg' | inline_asset_content -}}\n                  </span>\n                  <span class=\"country\">{{- country.name }}</span>\n                  <span\n                    class=\"localization-form__currency\"\n                    {% unless show_currencies %}\n                      hidden\n                    {% endunless %}\n                  >\n                    {{ country.currency.iso_code }}\n                    {{ country.currency.symbol -}}\n                  </span>\n                </li>\n              {%- endfor -%}\n            </ul>\n          {% endif %}\n          <ul\n            role=\"list\"\n            class=\"list-unstyled countries\"\n          >\n            <span\n              class=\"localization-form__list-item localization-form__list-item-disabled\"\n              id=\"no-results-message\"\n              ref=\"noResultsMessage\"\n              hidden\n            >\n              {{- 'content.no_results_found' | t -}}\n            </span>\n            {%- for country in localization.available_countries -%}\n              {% liquid\n                assign aliases = ''\n                case country.iso_code\n                  when 'US'\n                    assign aliases = aliases_us\n                  when 'GB'\n                    assign aliases = aliases_uk\n                endcase\n              %}\n              <li\n                class=\"localization-form__list-item\"\n                {% if country.iso_code == localization.country.iso_code %}\n                  aria-current=\"true\"\n                {% endif %}\n                data-value=\"{{ country.iso_code }}\"\n                {% if aliases %}\n                  data-aliases=\"{{ aliases }}\"\n                {% endif %}\n                id=\"{{ country.name }}\"\n                aria-label=\"{{ country.name }}\"\n                role=\"option\"\n                tabindex=\"-1\"\n                ref=\"countryListItems[]\"\n                on:click=\"/selectCountry/{{ country.iso_code }}\"\n              >\n                <span class=\"svg-wrapper icon-checkmark\">\n                  {{- 'icon-checkmark.svg' | inline_asset_content -}}\n                </span>\n                <span class=\"country\">{{- country.name }}</span>\n                <span\n                  class=\"localization-form__currency\"\n                  {% unless show_currencies %}\n                    hidden\n                  {% endunless %}\n                >\n                  {{ country.currency.iso_code }}\n                  {{ country.currency.symbol -}}\n                </span>\n              </li>\n            {%- endfor -%}\n          </ul>\n        </div>\n        <div class=\"country-selector__overlay\"></div>\n        <input\n          type=\"hidden\"\n          name=\"country_code\"\n          value=\"{{ localization.country.iso_code }}\"\n          ref=\"countryInput\"\n        >\n      </div>\n    {% endif %}\n\n    {% if show_language %}\n      <div class=\"language-selector{% if show_country %} top-shadow{% else %} language-selector--collapse-space{% endif %}{% if show_country == false and localization_style == 'drawer' %} h5{% endif %}\">\n        <h2\n          class=\"visually-hidden\"\n          id=\"{{ localization_style }}-LanguageLabel\"\n        >\n          {{ 'content.language' | t }}\n        </h2>\n        {% if show_country == true %}\n          <span class=\"language-selector__label\">{{ 'content.language' | t }}</span>\n        {% endif %}\n        <select\n          id=\"{{ localization_style }}Select\"\n          class=\"localization-form__select\"\n          name=\"language_code\"\n          aria-label=\"{{ 'content.language' | t }}\"\n          ref=\"languageInput\"\n          on:change=\"/changeLanguage\"\n        >\n          {%- for language in localization.available_languages -%}\n            <option\n              value=\"{{ language.iso_code }}\"\n              lang=\"{{ language.iso_code }}\"\n              {% if language.iso_code == localization.language.iso_code %}\n                selected\n              {% endif %}\n            >\n              {{ language.endonym_name | capitalize }}\n            </option>\n          {%- endfor -%}\n        </select>\n        <span class=\"svg-wrapper icon-caret\">\n          {{- 'icon-caret.svg' | inline_asset_content -}}\n        </span>\n      </div>\n    {% endif %}\n  {%- endform -%}\n</localization-form-component>\n\n{% stylesheet %}\n  /* Localization */\n  localization-form-component {\n    display: flex;\n    width: var(--width, auto);\n\n    @media screen and (min-width: 750px) {\n      position: relative;\n    }\n  }\n\n  localization-form-component[data-show-filter='false'] .country-selector-form__wrapper {\n    padding-block-start: var(--padding-xs);\n  }\n\n  .localization-form {\n    width: 100%;\n  }\n\n  localization-form-component .button:is(:not(.country-filter__reset-button)) {\n    --button-color: var(--color-primary);\n    --button-background-color: var(--language-button-background-color, var(--color-background));\n    --button-border-color: var(--language-button-border-color, var(--color-border));\n\n    text-decoration-color: transparent;\n    text-decoration-thickness: 0.075em;\n    text-underline-offset: 0.125em;\n    transition: text-decoration-color var(--animation-speed) var(--animation-easing);\n  }\n\n  localization-form-component .button:is(:not(.country-filter__reset-button)):hover,\n  .localization-form__list-item:hover,\n  .localization-form__list-item:focus {\n    --button-color: var(--color-primary-hover);\n\n    background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8));\n  }\n\n  .localization-form__list-item[aria-current='true'] {\n    --button-color: var(--color-primary-active);\n\n    background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-10));\n  }\n\n  .localization-form__list-item-disabled {\n    pointer-events: none;\n  }\n\n  .localization-form__list-item:focus-visible {\n    outline: none;\n  }\n\n  localization-form-component .localization-selector {\n    display: flex;\n    align-items: center;\n    gap: var(--margin-2xs);\n  }\n\n  localization-form-component .country-filter__search-icon {\n    left: 8px;\n    right: auto;\n    color: var(--color-foreground-muted);\n    pointer-events: none;\n  }\n\n  .country-filter__search-icon .svg-wrapper svg {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n  }\n\n  .disclosure {\n    width: 100%;\n  }\n\n  .localization-form__list {\n    position: relative;\n    width: 100%;\n    padding-block: 0 var(--padding-xs);\n    font-size: var(--font-size-lg);\n    scroll-padding: var(--padding-xs) 0;\n    overflow-y: auto;\n    white-space: nowrap;\n\n    /* Hide scrollbar which would cause extra right padding in Safari */\n    scrollbar-width: none;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n\n  .localization-form__list-item:not([hidden]) {\n    margin-block-end: var(--margin-3xs);\n    display: flex;\n    gap: var(--margin-sm);\n    padding: 8px;\n    border-radius: 8px;\n    line-height: var(--font-line-height-md);\n    align-items: center;\n    text-align: start;\n    cursor: pointer;\n    transition: background-color var(--animation-speed) var(--animation-easing);\n\n    .country {\n      flex: 1;\n      color: var(--color-foreground);\n    }\n\n    &:hover {\n      background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8));\n    }\n\n    &[aria-current='true'] {\n      .country {\n        font-weight: 500;\n      }\n    }\n  }\n\n  .localization-form__list-item#no-results-message {\n    grid-template-columns: 1fr;\n    text-align: center;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .is-searching .localization-form__list-item .country {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-80));\n  }\n\n  .localization-form__list-item .country mark {\n    font-weight: 500;\n    background: none;\n    color: var(--color-foreground);\n  }\n\n  .country-filter {\n    position: relative;\n    padding: var(--padding-xs);\n    border-bottom: var(--style-border-width) solid transparent;\n    transition: border-color var(--animation-values);\n  }\n\n  .country-filter.is-scrolled {\n    border-color: var(--color-border);\n  }\n\n  .country-selector-form__wrapper {\n    overflow-y: auto;\n    max-height: 100%;\n    flex-grow: 1;\n  }\n\n  .language-selector {\n    display: flex;\n    gap: var(--gap-xs);\n    padding: var(--padding-md) var(--padding-lg);\n    position: relative;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n  }\n\n  .language-selector__label {\n    flex-shrink: 0;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .localization-form__select {\n    border: none;\n    color: var(--color-foreground);\n    appearance: none;\n    background-color: var(--color-input-background);\n    padding-block: var(--padding-3xs);\n    padding-inline: var(--padding-xs) calc(var(--icon-size-xs) + var(--padding-xs));\n    text-align: right;\n    cursor: pointer;\n    max-width: 40vw;\n    text-overflow: ellipsis;\n    field-sizing: content;\n\n    &:focus-visible {\n      outline: var(--focus-outline-width) solid currentcolor;\n    }\n\n    &:focus {\n      outline: none;\n    }\n  }\n\n  #header-component[transparent] localization-form-component .localization-form .localization-form__select {\n    background-color: transparent;\n  }\n\n  .localization-form__select option {\n    background-color: var(--color-input-background);\n    color: var(--color-input-text);\n  }\n\n  .language-selector .svg-wrapper.icon-caret {\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n    position: absolute;\n    right: 12px;\n    top: 50%;\n    transform: translateY(-50%);\n    display: flex;\n    align-items: center;\n  }\n\n  .language-selector--collapse-space {\n    padding-inline-end: var(--padding-2xs);\n  }\n\n  .language-selector--collapse-space .localization-form__select {\n    padding-inline-end: var(--icon-size-xs);\n  }\n\n  .language-selector--collapse-space .svg-wrapper.icon-caret {\n    right: 0;\n  }\n\n  .localization-form .icon-checkmark {\n    width: var(--icon-size-xs);\n    height: var(--icon-size-xs);\n  }\n\n  .localization-form .svg-wrapper.icon-checkmark {\n    visibility: hidden;\n  }\n\n  .localization-form__list-item[aria-current='true'] .svg-wrapper.icon-checkmark {\n    visibility: visible;\n  }\n\n  .country-filter__input {\n    width: 100%;\n    height: 44px;\n    font-size: var(--font-size-lg);\n    padding: var(--padding-md) var(--padding-lg) var(--padding-md) calc(var(--margin-md) + var(--padding-xl));\n    border: 1px solid var(--color-foreground);\n    color: var(--color-input-text);\n    background-color: var(--color-input-background);\n    outline-offset: -1px;\n\n    @media screen and (min-width: 750px) {\n      height: 36px;\n    }\n  }\n\n  .country-filter__input::placeholder {\n    color: inherit;\n  }\n\n  .country-filter .field {\n    position: relative;\n  }\n\n  .country-filter .field__label {\n    font-size: var(--font-size-lg);\n    left: var(--margin-2xl);\n    top: var(--margin-xl);\n    pointer-events: none;\n    position: absolute;\n  }\n\n  .country-filter__input:focus ~ .field__label,\n  .country-filter__input:not(:placeholder-shown) ~ .field__label,\n  .country-filter__input:-webkit-autofill ~ .field__label {\n    font-size: var(--font-size-xs);\n    top: var(--margin-xs);\n  }\n\n  .country-filter .field__button:not([hidden]) {\n    display: flex;\n    height: fit-content;\n    position: absolute;\n    padding: 0;\n    right: 8px;\n    top: 50%;\n    transform: translateY(-50%);\n    align-items: center;\n    background-color: transparent;\n    color: var(--color-input-text);\n    border: 0;\n  }\n\n  input[type='search']::-webkit-search-cancel-button {\n    appearance: none;\n  }\n\n  .country-selector__close-button {\n    display: none;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/media.liquid",
    "content": "{%- doc -%}\n  Renders media block contents (used in _media and _media-without-appearance blocks)\n\n  @param {string} section_id - The section ID\n  @param {object} [block] - The block object\n  @param {boolean} [unset_image_tag] - if true, ignores the image focal point in the image\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n  assign show_image = false\n  assign show_video = false\n\n  if block_settings.media_type == 'image'\n    assign show_image = true\n  endif\n\n  if block_settings.media_type == 'video'\n    assign show_video = true\n  endif\n%}\n\n<div\n  class=\"\n    media-block\n    spacing-style\n    {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n    {% if show_image and block_settings.image_position == 'contain' or show_video and block_settings.video_position == 'contain' %}\n      media-block--contain\n    {% endif %}\n  \"\n  style=\"\n    {% render 'border-override', settings: block_settings %}\n    {% render 'spacing-style', settings: block_settings %}\n    --image-position: {{ block_settings.image_position }};\n    --video-position: {{ block_settings.video_position }};\n  \"\n  {{ block.shopify_attributes }}\n>\n  {%- if show_image -%}\n    {% capture image_tag %}\n      {% if block_settings.image != blank %}\n        {% render 'image',\n          image: block_settings.image,\n          class: 'media-block__media border-style',\n          unset_image_tag: unset_image_tag\n        %}\n      {% else %}\n        <div class=\"media-block__media border-style\">\n          {{ 'detailed-apparel-1' | placeholder_svg_tag: 'hero__media' }}\n        </div>\n      {% endif %}\n    {% endcapture %}\n\n    {% if block_settings.link != blank %}\n      <a\n        href=\"{{ block_settings.link }}\"\n        class=\"media-block__media-link\"\n      >\n        {{ image_tag }}\n      </a>\n    {% else %}\n      {{ image_tag }}\n    {% endif %}\n  {%- elsif show_video -%}\n    {% render 'video',\n      video: block_settings.video,\n      video_autoplay: block_settings.video_autoplay,\n      video_loop: block_settings.video_loop,\n      video_class: 'media-block__media media-block__media--video border-style',\n      section_id: section_id\n    %}\n  {%- else -%}\n    <div class=\"media-block__media border-style\">\n      {{ 'hero-apparel-3' | placeholder_svg_tag }}\n    </div>\n  {%- endif -%}\n</div>\n\n{% stylesheet %}\n  .media-block {\n    overflow: hidden;\n    position: relative;\n\n    @media screen and (min-width: 750px) {\n      min-height: var(--media-height);\n    }\n  }\n\n  .media-block__media {\n    height: var(--media-height-mobile, auto);\n    object-fit: var(--image-position, 'cover');\n    object-position: center center;\n    width: 100%;\n\n    @media screen and (min-width: 750px) {\n      height: 100%;\n      position: absolute;\n    }\n  }\n\n  deferred-media[class].media-block__media\n    :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) {\n    object-fit: var(--video-position, 'cover');\n  }\n\n  /* This is to support corner radius on video and align the video to the center of the block */\n  .media-block__media--video {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    @media screen and (max-width: 749px) {\n      --media-height-mobile: auto;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/mega-menu-list.liquid",
    "content": "{%- doc -%}\n  Renders mega menu list markup and optional featured content.\n\n  @param {object} parent_link - The linklist to render.\n  @param {string} id - Unique ID to assign to the `<ul>` element.\n  @param {number} [grid_columns_count] - Number of grid columns for the mega menu.\n  @param {number} [grid_columns_count_tablet] - Number of grid columns for the mega menu on tablets.\n  @param {number} [grid_columns_count_collection_images] - Number of grid columns when `menu_content_type` is 'collection_images'.\n  @param {string} [menu_content_type] - Type of content: 'featured_products', 'featured_collections', 'collection_images', or 'text'.\n  @param {number} [content_aspect_ratio] - Aspect ratio for content images.\n  @param {number} [image_border_radius] - Border radius for content images.\n  @param {object} [section] - The section object.\n\n  @example\n  {% render 'mega-menu-list', parent_link: link, id: 'MegaMenuList-1', grid_columns_count: 6, menu_content_type: 'featured_products' %}\n{%- enddoc -%}\n\n{% liquid\n  comment\n    open_column_span tracks when a vertical column in the mega menu is open. Links will be stacked\n    in the column until the code closes the column span.\n  endcomment\n  assign open_column_span = false\n  assign column_count = 0\n  assign links_before_wrap = 10\n  assign max_menu_columns = grid_columns_count | default: 6\n  assign max_menu_columns_tablet = grid_columns_count_tablet | default: 4\n\n  ##\n  # We only eager load heavy elements of the page when rendering this template\n  # through the Section Rendering API.\n  #\n  # This keeps the initial render lightweight, minimizing the impact on TTFB.\n  # The second render then refreshes the page with additional content.\n  #\n  # At the moment, we check if the Section Rendering API is being used by\n  # checking if section.index is blank.\n  assign eager_loading = false\n  if section.index == blank\n    assign eager_loading = true\n  endif\n\n  if menu_content_type == 'collection_images'\n    assign collection_links = parent_link.links | where: 'type', 'collection_link'\n    assign catalog_links = parent_link.links | where: 'type', 'catalog_link'\n    assign collection_list_links = parent_link.links | where: 'type', 'collections_link'\n    if collection_links.size == 0 and catalog_links.size == 0 and collection_list_links.size == 0\n      assign menu_content_type = 'text'\n    endif\n  endif\n\n  if menu_content_type == 'featured_collections'\n    if parent_link.type == 'collection_link'\n      assign collection_handles = parent_link.object.handle | append: ','\n    elsif parent_link.type == 'catalog_link' or parent_link.type == 'collections_link'\n      assign collection_handles = 'all' | append: ','\n    endif\n    assign collection_links = parent_link.links | where: 'type', 'collection_link'\n    for collection_link in collection_links\n      assign collection_handles = collection_handles | append: collection_link.object.handle | append: ','\n    endfor\n  endif\n\n  if menu_content_type == 'featured_products'\n    if parent_link.type == 'collection_link'\n      assign collection_object = parent_link.object\n    elsif parent_link.type == 'catalog_link' or parent_link.type == 'collections_link'\n      assign collection_object = collections.all\n    else\n      assign menu_content_type = 'text'\n    endif\n  endif\n%}\n<ul\n  data-menu-list-id=\"{{ id }}\"\n  class=\"mega-menu__list list-unstyled\"\n  style=\"--menu-image-border-radius: {{ image_border_radius }}px;\"\n>\n  {% for link in parent_link.links %}\n    {% liquid\n      # Decide whether to open a column span, and how many columns of the grid to span\n      if forloop.first or open_column_span == false\n        assign open_column_span = true\n\n        # Don't allow orphan links in a column\n        assign break_after_modulo = link.links.size | modulo: links_before_wrap\n        if break_after_modulo == 1\n          assign links_before_wrap = links_before_wrap | minus: 1\n        endif\n        assign break_after_float = links_before_wrap | times: 1.0\n        assign column_span = link.links.size | divided_by: break_after_float | ceil | at_least: 1\n        assign column_count = column_count | plus: column_span\n        assign should_break_columns = true\n        assign span_class = ''\n\n        if menu_content_type == 'collection_images'\n          assign should_break_columns = false\n          # For collection image mode, we have an 8-column grid when 4 or fewer parent links are used. Set column span to 2 in that case, otherwise use 1 column\n          if parent_link.links.size <= 4\n            assign span_class = 'mega-menu__column--wide-collection-image'\n          endif\n        else\n          # For all other modes, column span is determined by the number of links in the parent link\n          assign span_class = 'mega-menu__column--span-' | append: column_span\n        endif\n        echo '<li class=\"mega-menu__column ' | append: span_class | append: '\">'\n      endif\n    %}\n    <div>\n      <a\n        href=\"{{ link.url }}\"\n        class=\"mega-menu__link {% if link.links != blank %}mega-menu__link--parent{% endif %}\"\n      >\n        {% if menu_content_type == 'collection_images' %}\n          {%- capture collection_image_sizes -%}\n            {%- if parent_link.links.size <= 4 -%}\n              {%- assign columns_per_item = 2 -%}\n            {%- else -%}\n              {%- assign columns_per_item = 1 -%}\n            {%- endif -%}\n            {%- render 'util-mega-menu-img-sizes-attr',\n              menu_content_type: 'collection_images',\n              settings: settings,\n              grid_columns: grid_columns_count,\n              grid_columns_tablet: grid_columns_count_tablet,\n              grid_columns_collection_images: grid_columns_count_collection_images,\n              parent_links_size: parent_link.links.size,\n              columns_per_item: columns_per_item\n            -%}\n          {%- endcapture -%}\n\n          {% render 'link-featured-image', link: link, class: 'mega-menu__link-image', sizes: collection_image_sizes %}\n        {% endif %}\n        <span class=\"wrap-text\">\n          {{- link.title -}}\n        </span>\n      </a>\n      {% if link.links != blank %}\n        <ul\n          class=\"list-unstyled\"\n          {% if should_break_columns %}\n            style=\"column-count: {{ column_span }};\"\n          {% endif %}\n        >\n          {% for childLink in link.links %}\n            {% assign break_after_modulo = forloop.index | modulo: links_before_wrap %}\n            <li\n              {% if break_after_modulo == 0 and should_break_columns %}\n                style=\"break-after: column;\"\n              {% endif %}\n            >\n              <a\n                href=\"{{ childLink.url }}\"\n                class=\"mega-menu__link\"\n              >\n                <span class=\"wrap-text\">{{- childLink.title -}}</span>\n              </a>\n            </li>\n          {% endfor %}\n        </ul>\n      {% endif %}\n    </div>\n\n    {% liquid\n      # Check conditions for closing the span at the end of each iteration, then close the span if needed\n      assign next_linklist = parent_link.links[forloop.index]\n\n      if forloop.last\n        assign open_column_span = false\n      elsif menu_content_type == 'collection_images'\n        assign open_column_span = false\n      elsif next_linklist.links != blank\n        assign open_column_span = false\n      elsif link.links != blank and next_linklist.links == blank\n        assign open_column_span = false\n      endif\n\n      if open_column_span == false\n        echo '</li>'\n      endif\n    %}\n  {% endfor %}\n</ul>\n\n{% liquid\n  # decide how many grid columns are needed for the menu list, and how many columns are needed for the featured content\n  # prioritize a minimum of 1 featured_collection (2 columns), and minimum 2 featured_products (2 columns)\n  assign min_products = 2\n  assign max_products = 3\n  assign min_products_tablet = 1\n  assign max_products_tablet = 3\n  assign min_collections = 1\n\n  if menu_content_type == 'featured_products'\n    # desktop breakpoint\n    assign temp_column_count = column_count | plus: min_products\n\n    if temp_column_count > max_menu_columns\n      assign max_product_columns = 2\n    else\n      assign max_product_columns = max_menu_columns | minus: column_count | at_most: max_products\n    endif\n\n    if eager_loading\n      assign max_product_columns = max_product_columns | at_most: collection_object.products_count\n    else\n      assign max_product_columns = 0\n    endif\n\n    assign max_featured_products = max_product_columns\n    assign max_menu_columns = max_menu_columns | minus: max_product_columns\n\n    # tablet breakpoint\n    assign temp_column_count = column_count | plus: min_products_tablet\n\n    if temp_column_count > max_menu_columns_tablet\n      assign max_product_columns_tablet = 1\n    else\n      assign max_product_columns_tablet = max_menu_columns_tablet | minus: column_count | at_most: max_products_tablet\n    endif\n\n    assign max_product_columns_tablet = max_product_columns_tablet | at_most: max_product_columns\n\n    assign max_featured_products_tablet = max_product_columns_tablet\n    assign max_menu_columns_tablet = max_menu_columns_tablet | minus: max_product_columns_tablet\n  endif\n\n  if menu_content_type == 'featured_collections'\n    # desktop breakpoint\n    assign min_featured_collection_columns = min_collections | times: 2\n    assign temp_column_count = column_count | plus: min_featured_collection_columns\n\n    if temp_column_count > max_menu_columns\n      assign max_collection_columns = 2\n    else\n      assign max_collection_columns = max_menu_columns | minus: column_count\n    endif\n\n    assign max_featured_collections = max_collection_columns | divided_by: 2 | floor\n    assign max_menu_columns = max_menu_columns | minus: max_collection_columns\n\n    # tablet breakpoint\n    assign max_collection_columns_tablet = 2\n    assign max_featured_collections_tablet = 1\n    assign max_menu_columns_tablet = max_menu_columns_tablet | minus: max_collection_columns_tablet\n  endif\n%}\n\n{% style %}\n  [data-menu-grid-id=\"{{ id }}\"] {\n    {% if menu_content_type == 'collection_images' and parent_link.links.size < 5 %}\n      --menu-columns-desktop: {{ grid_columns_count_collection_images }};\n      --menu-columns-tablet: {{ grid_columns_count_tablet }};\n    {% else %}\n      --menu-columns-desktop: {{ grid_columns_count }};\n      --menu-columns-tablet: {{ grid_columns_count_tablet }};\n    {% endif %}\n  }\n\n  [data-menu-list-id=\"{{ id }}\"] {\n    {% if menu_content_type == 'collection_images' and parent_link.links.size < 5 %}\n      --menu-columns-desktop: {{ grid_columns_count_collection_images }};\n      --menu-columns-tablet: {{ max_menu_columns_tablet }};\n    {% else %}\n      --menu-columns-desktop: {{ max_menu_columns }};\n      --menu-columns-tablet: {{ max_menu_columns_tablet }};\n    {% endif %}\n  }\n{% endstyle %}\n\n{% case menu_content_type %}\n  {% when 'featured_products' %}\n    {%- capture image_sizes -%}\n      {%- render 'util-mega-menu-img-sizes-attr',\n        menu_content_type: 'featured_products',\n        settings: settings,\n        grid_columns: grid_columns_count,\n        grid_columns_tablet: grid_columns_count_tablet\n      -%}\n    {%- endcapture -%}\n\n    <span\n      class=\"mega-menu__content\"\n      style=\"--menu-content-columns-desktop: {{ max_product_columns }}; --menu-content-columns-tablet: {{ max_product_columns_tablet }}; --resource-card-corner-radius: {{ image_border_radius }}px;\"\n    >\n      <ul\n        class=\"mega-menu__content-list mega-menu__content-list--products list-unstyled\"\n      >\n        {% if eager_loading %}\n          {% paginate collection_object.products by max_featured_products %}\n            {% for item in collection_object.products %}\n              <li class=\"mega-menu__content-list-item {% if forloop.index > max_featured_products_tablet %} mega-menu__content-list-item--hidden-tablet{% endif %}\">\n                {% render 'resource-card',\n                  resource: item,\n                  resource_type: 'product',\n                  image_hover: true,\n                  image_aspect_ratio: content_aspect_ratio,\n                  image_sizes: image_sizes\n                %}\n              </li>\n            {% endfor %}\n          {% endpaginate %}\n        {% endif %}\n      </ul>\n    </span>\n  {% when 'featured_collections' %}\n    {% assign collection_handles = collection_handles | split: ',' | uniq %}\n    {%- capture image_sizes -%}\n      {%- render 'util-mega-menu-img-sizes-attr',\n        menu_content_type: 'featured_collections',\n        settings: settings\n      -%}\n    {%- endcapture -%}\n\n    {% if collection_handles.size == 1 %}\n      {% assign max_featured_collections = 1 %}\n    {% endif %}\n\n    <span\n      class=\"mega-menu__content\"\n      style=\"--menu-content-columns-desktop: {{ max_collection_columns }}; --menu-content-columns-tablet: {{ max_collection_columns_tablet }}; --resource-card-corner-radius: {{ image_border_radius }}px;\"\n    >\n      <ul\n        class=\"mega-menu__content-list mega-menu__content-list--collections list-unstyled\"\n        style=\"--menu-content-columns-desktop: {{ max_featured_collections }}; --menu-content-columns-tablet: {{ max_featured_collections_tablet }};\"\n      >\n        {% for handle in collection_handles limit: max_featured_collections %}\n          {% if handle == 'all' %}\n            {% assign collection_object = collections.all %}\n          {% else %}\n            {% assign collection_object = collections[handle] %}\n          {% endif %}\n          <li class=\"mega-menu__content-list-item{% if forloop.index > max_featured_collections_tablet %} mega-menu__content-list-item--hidden-tablet{% endif %}\">\n            {% render 'resource-card',\n              resource: collection_object,\n              resource_type: 'collection',\n              style: 'overlay',\n              image_aspect_ratio: content_aspect_ratio,\n              image_sizes: image_sizes\n            %}\n          </li>\n        {% endfor %}\n      </ul>\n    </span>\n{% endcase %}\n"
  },
  {
    "path": "snippets/menu-font-styles.liquid",
    "content": "{%- comment -%}\n  Derives CSS variables from the menu typography settings for 1st level/main menu items.\n  Accepts:\n     settings {block.settings}\n     menu_type {string}: 'drawer' or 'mega_menu'\n{%- endcomment -%}\n\n--menu-top-level-font-family: var(--font-{{ settings.type_font_primary_link }}--family);\n--menu-top-level-font-size-desktop: {{ settings.type_font_primary_size }}; --menu-top-level-font-style: var(--font-\n{{- settings.type_font_primary_link -}}\n--style); --menu-top-level-font-weight: var(--font-\n{{- settings.type_font_primary_link -}}\n--weight); --menu-top-level-font-case:\n{%- if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif -%}\n;\n{% if menu_type == 'drawer' %}\n  --menu-top-level-font-size: var(--menu-font-2xl--size); --menu-top-level-font-line-height:\n  var(--menu-font-2xl--line-height);\n{% else %}\n  --menu-top-level-font-size: var(--menu-font-sm--size); --menu-top-level-font-line-height:\n  var(--menu-font-sm--line-height);\n{% endif %}\n--menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb);\n"
  },
  {
    "path": "snippets/meta-tags.liquid",
    "content": "<meta charset=\"utf-8\">\n<meta\n  http-equiv=\"X-UA-Compatible\"\n  content=\"IE=edge\"\n>\n<meta\n  name=\"viewport\"\n  content=\"width=device-width,initial-scale=1\"\n>\n<meta\n  name=\"view-transition\"\n  content=\"same-origin\"\n>\n<meta\n  name=\"theme-color\"\n  content=\"\"\n>\n\n{%- liquid\n  assign og_title = page_title | default: shop.name\n  assign og_url = canonical_url | default: request.origin\n  assign og_type = 'website'\n  assign og_description = page_description | default: shop.description | default: shop.name\n\n  if request.page_type == 'product'\n    assign og_type = 'product'\n  elsif request.page_type == 'article'\n    assign og_type = 'article'\n  elsif request.page_type == 'password'\n    assign og_url = request.origin\n  endif\n%}\n\n<meta\n  property=\"og:site_name\"\n  content=\"{{ shop.name }}\"\n>\n<meta\n  property=\"og:url\"\n  content=\"{{ og_url }}\"\n>\n<meta\n  property=\"og:title\"\n  content=\"{{ og_title | escape }}\"\n>\n<meta\n  property=\"og:type\"\n  content=\"{{ og_type }}\"\n>\n<meta\n  property=\"og:description\"\n  content=\"{{ og_description | escape }}\"\n>\n\n{%- if page_image -%}\n  <meta\n    property=\"og:image\"\n    content=\"http:{{ page_image | image_url }}\"\n  >\n  <meta\n    property=\"og:image:secure_url\"\n    content=\"https:{{ page_image | image_url }}\"\n  >\n  <meta\n    property=\"og:image:width\"\n    content=\"{{ page_image.width }}\"\n  >\n  <meta\n    property=\"og:image:height\"\n    content=\"{{ page_image.height }}\"\n  >\n{%- endif -%}\n\n{%- if request.page_type == 'product' -%}\n  <meta\n    property=\"og:price:amount\"\n    content=\"{{ product.price | money_without_currency | strip_html }}\"\n  >\n  <meta\n    property=\"og:price:currency\"\n    content=\"{{ cart.currency.iso_code }}\"\n  >\n{%- endif -%}\n\n{%- if settings.social_twitter_link != blank -%}\n  <meta\n    name=\"twitter:site\"\n    content=\"{{ settings.social_twitter_link | split: 'twitter.com/' | last | prepend: '@' }}\"\n  >\n{%- endif -%}\n<meta\n  name=\"twitter:card\"\n  content=\"summary_large_image\"\n>\n<meta\n  name=\"twitter:title\"\n  content=\"{{ og_title | escape }}\"\n>\n<meta\n  name=\"twitter:description\"\n  content=\"{{ og_description | escape }}\"\n>\n\n<title>\n  {{ page_title }}\n  {%- if current_tags %} &ndash; tagged \"{{ current_tags | join: ', ' }}\"{% endif -%}\n  {%- if current_page != 1 %} &ndash; Page {{ current_page }}{% endif -%}\n  {%- unless page_title contains shop.name %} &ndash; {{ shop.name }}{% endunless -%}\n</title>\n\n<link\n  rel=\"canonical\"\n  href=\"{{ canonical_url }}\"\n>\n\n{% if page_description %}\n  <meta\n    name=\"description\"\n    content=\"{{ page_description | escape }}\"\n  >\n{% endif %}\n"
  },
  {
    "path": "snippets/overflow-list.liquid",
    "content": "{%- doc -%}\n  @param {string} children - The children of the overflow list.\n  @param {string} [class] - The class that is applied on the overflow-list element.\n  @param {string} [attributes] - The attributes that are applied on the overflow-list element.\n  @param {number} [minimum-items] - The minimum number of items to show in the overflow list.\n  @param {string} [ref] - The ref that is set on the overflow-list element.\n  @param {string} [data-testid] - The data-testid attribute that is set on the overflow-list element.\n  @param {string} [more-attributes] - The attributes that are applied on the more button.\n{%- enddoc -%}\n\n<overflow-list\n  {% if ref %}\n    ref=\"{{ ref }}\"\n  {% endif %}\n  {% if class %}\n    class=\"{{ class }}\"\n  {% endif %}\n  {% if minimum-items %}\n    minimum-items=\"{{ minimum-items }}\"\n  {% endif %}\n  {% if data-testid %}\n    data-testid=\"{{ data-testid }}\"\n  {% endif %}\n  {% if attributes %}\n    {{ attributes }}\n  {% endif %}\n>\n  <template shadowrootmode=\"open\">\n    {{ 'overflow-list.css' | asset_url | stylesheet_tag }}\n\n    <ul part=\"list\">\n      <slot></slot>\n      <slot\n        name=\"more\"\n        part=\"more\"\n        hidden\n        {% if more-attributes %}\n          {{ more-attributes }}\n        {% endif %}\n      >\n        <li\n          part=\"more\"\n        >\n          <button\n            class=\"button\"\n            type=\"button\"\n            tabindex=\"0\"\n          >\n            {{ 'actions.more' | t }}\n          </button>\n        </li>\n      </slot>\n      <li\n        part=\"placeholder\"\n        hidden\n      ></li>\n    </ul>\n\n    <div part=\"overflow\">\n      <ul part=\"overflow-list\">\n        <slot name=\"overflow\"></slot>\n      </ul>\n    </div>\n  </template>\n\n  {{ children }}\n</overflow-list>\n"
  },
  {
    "path": "snippets/overlay.liquid",
    "content": "{%- doc -%}\n  Renders a full-bleed overlay.\n\n  @param {object} settings - Block or section settings, expecting `overlay_color`, `overlay_style`, and `gradient_direction`.\n  @param {string} [layer] - The z-index layer for the overlay, defaults to `var(--layer-flat)`.\n\n  @example\n  {% render 'overlay', settings: section.settings, layer: 'var(--layer-raised)' %}\n{%- enddoc -%}\n\n<div\n  class=\"overlay overlay--{{ settings.overlay_style | default: 'gradient' }}\"\n  style=\"\n    --overlay-layer: {{ layer | default: 'var(--layer-flat)' }};\n    --overlay-color: {{ settings.overlay_color | default: 'rgb(0 0 0 / var(--opacity-25))' }};\n    --overlay-color--end: {{ settings.overlay_color | color_modify: 'alpha', 0 | default: 'rgb(0 0 0 / 0)' }};\n    --overlay-direction: {{ settings.gradient_direction | default: 'to top' }};\n    {%- if settings.border_radius %} --overlay-border-radius: {{ settings.border_radius | default: '0' }}px;{% endif -%}\n  \"\n></div>\n\n{% stylesheet %}\n  .overlay {\n    position: absolute;\n    inset: 0;\n    z-index: var(--overlay-layer);\n    pointer-events: none;\n    border-radius: var(--overlay-border-radius, 0);\n  }\n\n  .overlay--solid {\n    background: var(--overlay-color);\n  }\n\n  .overlay--gradient {\n    background: linear-gradient(var(--overlay-direction), var(--overlay-color), var(--overlay-color--end));\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/pagination-controls.liquid",
    "content": "{%- doc -%}\n  Renders pagination controls with previous/next navigation and page numbers.\n\n  @param {object} paginate - The paginate object\n  @param {string} [ref] - Component reference attribute for the pagination nav element\n  @param {string} [on_click_handler] - Component function to handle pagination clicks.\n\n  When provided the handler will receive URL search params as data. It extracts URL parameters from each pagination link\n  and passes them through the onclick attribute in the format: \"on:click='handler?params'\". This allows components to\n  intercept pagination and update content via section-renderer. The handler receives an object containing the URL search\n  parameters (e.g., {page: \"2\"})\n\n  @example\n  {%- paginate collection.products by 24 -%}\n    {%- render 'pagination-controls', paginate: paginate -%}\n  {%- endpaginate -%}\n{%- enddoc -%}\n\n{%- if paginate.pages > 1 -%}\n  <nav\n    class=\"pagination\"\n    aria-label=\"{{ 'content.pagination.nav_label' | t }}\"\n    data-current_page=\"{{ paginate.current_page }}\"\n    {% if ref != blank %}\n      ref=\"{{ ref }}\"\n    {% endif %}\n  >\n    <ul\n      class=\"pagination__list\"\n      role=\"list\"\n    >\n      <li class=\"pagination__item\">\n        {%- if paginate.previous -%}\n          {%- assign prev_params = paginate.previous.url | split: '?' | last -%}\n          <a\n            href=\"{{ paginate.previous.url }}\"\n            aria-label=\"{{ 'content.pagination.previous' | t }}\"\n            class=\"pagination__link pagination__link--arrow\"\n            {% if on_click_handler != blank %}\n              on:click=\"{{ on_click_handler }}?{{ prev_params }}\"\n            {% endif %}\n          >\n            {{ 'icon-chevron-left.svg' | inline_asset_content }}\n          </a>\n        {%- else -%}\n          <span\n            aria-label=\"{{ 'content.pagination.previous' | t }}\"\n            class=\"pagination__link pagination__link--arrow pagination__link--disabled\"\n            aria-disabled=\"true\"\n          >\n            {{ 'icon-chevron-left.svg' | inline_asset_content }}\n          </span>\n        {%- endif -%}\n      </li>\n\n      {%- assign current_page = paginate.current_page -%}\n      {%- assign last_visible_page = 0 -%}\n      {%- assign just_saw_ellipsis = false -%}\n\n      {%- for part in paginate.parts -%}\n        {% liquid\n          assign should_hide_on_mobile = false\n          assign is_page_number = false\n          assign page_number = 0\n\n          if part.is_link\n            assign page_number = part.title | plus: 0\n            if page_number > 0\n              assign is_page_number = true\n              assign distance_from_current = page_number | minus: current_page | abs\n              if page_number != 1 and page_number != paginate.pages and distance_from_current > 1\n                assign should_hide_on_mobile = true\n              endif\n            endif\n          elsif part.is_link == false and part.title != '&hellip;'\n            assign is_page_number = true\n            assign page_number = current_page\n          endif\n\n          if part.title == '&hellip;'\n            assign just_saw_ellipsis = true\n          else\n            if is_page_number and should_hide_on_mobile == false\n              assign last_visible_plus_one = last_visible_page | plus: 1\n              if last_visible_page > 0 and page_number > last_visible_plus_one and just_saw_ellipsis == false\n                echo '<li class=\"pagination__item pagination__item--mobile-only pagination__item--gap\">'\n                echo '<span class=\"pagination__link pagination__link--gap\" aria-hidden=\"true\">&hellip;</span>'\n                echo '</li>'\n              endif\n              assign last_visible_page = page_number\n              assign just_saw_ellipsis = false\n            endif\n          endif\n        %}\n\n        {% liquid\n          assign li_classes = 'pagination__item'\n          if should_hide_on_mobile\n            assign li_classes = li_classes | append: ' pagination__item--mobile-hide'\n          endif\n          if part.title == '&hellip;'\n            assign li_classes = li_classes | append: ' pagination__item--gap'\n          endif\n        %}\n        <li class=\"{{ li_classes }}\">\n          {%- if part.is_link -%}\n            {%- assign part_params = part.url | split: '?' | last -%}\n            <a\n              href=\"{{ part.url }}\"\n              aria-label=\"{{ 'content.pagination.page' | t: page: part.title }}\"\n              class=\"pagination__link pagination__link--page\"\n              {% if on_click_handler != blank %}\n                on:click=\"{{ on_click_handler }}?{{ part_params }}\"\n              {% endif %}\n            >\n              {{ part.title }}\n            </a>\n          {%- else -%}\n            {%- if part.title == '&hellip;' -%}\n              <span\n                class=\"pagination__link pagination__link--gap\"\n                aria-hidden=\"true\"\n                >&hellip;</span\n              >\n            {%- else -%}\n              <span\n                class=\"pagination__link pagination__link--page pagination__link--current\"\n                aria-current=\"page\"\n              >\n                {{- part.title -}}\n              </span>\n            {%- endif -%}\n          {%- endif -%}\n        </li>\n      {%- endfor -%}\n\n      <li class=\"pagination__item\">\n        {%- if paginate.next -%}\n          {%- assign next_params = paginate.next.url | split: '?' | last -%}\n          <a\n            href=\"{{ paginate.next.url }}\"\n            aria-label=\"{{ 'content.pagination.next' | t }}\"\n            class=\"pagination__link pagination__link--arrow\"\n            {% if on_click_handler != blank %}\n              on:click=\"{{ on_click_handler }}?{{ next_params }}\"\n            {% endif %}\n          >\n            {{ 'icon-chevron-right.svg' | inline_asset_content }}\n          </a>\n        {%- else -%}\n          <span\n            aria-label=\"{{ 'content.pagination.next' | t }}\"\n            class=\"pagination__link pagination__link--arrow pagination__link--disabled\"\n            aria-disabled=\"true\"\n          >\n            {{ 'icon-chevron-right.svg' | inline_asset_content }}\n          </span>\n        {%- endif -%}\n      </li>\n    </ul>\n  </nav>\n{%- endif -%}\n\n{% stylesheet %}\n  .pagination {\n    --pagination-size: 36px;\n    --pagination-inset: 2px;\n    --pagination-radius: 6;\n\n    display: flex;\n    justify-content: center;\n    padding: var(--padding-xl) var(--padding-sm);\n    margin-top: var(--padding-xl);\n    position: relative;\n  }\n\n  .pagination__list {\n    display: flex;\n    gap: 0;\n    align-items: center;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    position: relative;\n  }\n\n  .pagination__item {\n    width: var(--pagination-size);\n    aspect-ratio: 1;\n    display: grid;\n    place-items: center;\n  }\n\n  .pagination__link {\n    display: grid;\n    place-items: center;\n    color: var(--color-foreground);\n    text-decoration: none;\n    width: 100%;\n    height: 100%;\n    user-select: none;\n    position: relative;\n    outline-color: var(--color-foreground);\n    -webkit-tap-highlight-color: transparent;\n    font-size: var(--font-size--md);\n    font-weight: var(--font-weight-normal);\n    border-radius: calc(var(--pagination-radius) * 1px);\n    transition: color var(--hover-transition-duration) var(--hover-transition-timing),\n      opacity var(--hover-transition-duration) var(--hover-transition-timing);\n  }\n\n  .pagination__link:focus-visible {\n    outline: 2px solid var(--color-foreground);\n    outline-offset: 2px;\n  }\n\n  .pagination__link--current {\n    color: var(--color-background);\n    font-weight: var(--font-weight-medium);\n    cursor: default;\n  }\n\n  .pagination__link--gap {\n    cursor: default;\n    pointer-events: none;\n  }\n\n  .pagination__link--arrow {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .pagination__link--disabled {\n    opacity: 0.3;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n\n  .pagination__link svg {\n    width: 0.5rem;\n    height: 0.75rem;\n    flex-shrink: 0;\n  }\n\n  .pagination__item--mobile-only {\n    display: none;\n  }\n\n  /* Fallback for browsers without anchor positioning support */\n  @supports not (anchor-name: --pagination-active) {\n    .pagination__link:not(.pagination__link--gap)::before {\n      content: '';\n      position: absolute;\n      inset: var(--pagination-inset);\n      border-radius: calc(var(--pagination-radius) * 1px);\n      background: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n      z-index: -1;\n      opacity: 0;\n      transition: background var(--hover-transition-duration) var(--hover-transition-timing),\n        opacity var(--hover-transition-duration) var(--hover-transition-timing);\n    }\n\n    .pagination__link[aria-current='page']::before {\n      background: var(--color-foreground);\n      opacity: 1;\n    }\n\n    .pagination__link:hover:not([aria-current='page'], .pagination__link--gap, .pagination__link--disabled)::before {\n      opacity: 1;\n    }\n  }\n\n  /* Modern approach with anchor positioning */\n  @supports (anchor-name: --pagination-active) {\n    .pagination__list::before {\n      content: '';\n      z-index: -1;\n      position: absolute;\n      width: calc(var(--pagination-size) - (2 * var(--pagination-inset)));\n      aspect-ratio: 1;\n      pointer-events: none;\n      opacity: 0;\n      border-radius: calc(var(--pagination-radius) * 1px);\n      background: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n      transition: left var(--hover-transition-duration) var(--hover-transition-timing),\n        top var(--hover-transition-duration) var(--hover-transition-timing);\n    }\n\n    /* Hide hover indicator on touch devices */\n    @media (hover: none) and (pointer: coarse) {\n      .pagination__list::before {\n        content: unset;\n      }\n    }\n\n    .pagination__list:has(\n        .pagination__link:is(:hover, :focus-visible):not(.pagination__link--gap, .pagination__link--disabled))::before {\n      opacity: 1;\n    }\n\n    /* Style current page directly */\n    .pagination__link[aria-current='page']::before {\n      content: '';\n      position: absolute;\n      inset: var(--pagination-inset);\n      border-radius: calc(var(--pagination-radius) * 1px);\n      background: var(--color-foreground);\n      z-index: -1;\n    }\n\n    .pagination__list\n      .pagination__item:has(\n        .pagination__link:is(:hover, :focus-visible):not(.pagination__link--gap, .pagination__link--disabled)) {\n      anchor-name: --pagination-hover;\n    }\n\n    /* Position hover indicator using anchor */\n    .pagination__list::before {\n      position-anchor: --pagination-hover;\n      left: calc(anchor(left) + var(--pagination-inset));\n      top: calc(anchor(top) + var(--pagination-inset));\n    }\n\n    .pagination__item:has(+ .pagination__item--gap) .pagination__link::after,\n    .pagination__item--gap + .pagination__item .pagination__link::after {\n      position: absolute;\n      content: '';\n      pointer-events: auto;\n    }\n\n    .pagination__item:has(+ .pagination__item--gap) .pagination__link::after {\n      inset: 0 -50% 0 100%;\n    }\n\n    .pagination__item--gap + .pagination__item .pagination__link::after {\n      inset: 0 100% 0 -50%;\n    }\n  }\n\n  @media screen and (max-width: 749px) {\n    .pagination {\n      --pagination-size: 44px;\n      --pagination-inset: 5px;\n\n      padding: var(--padding-lg) var(--padding-sm);\n    }\n\n    .pagination__link {\n      font-size: var(--font-size--sm);\n    }\n\n    .pagination__item--mobile-hide {\n      display: none;\n    }\n\n    .pagination__item--mobile-only {\n      display: grid;\n    }\n\n    .pagination__item:has(.pagination__link--gap) {\n      width: calc(var(--pagination-size) * 0.5);\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/password-layout-styles.liquid",
    "content": "{%- doc -%}\n  Styles for the password layout: main content, password dialog, and email-signup\n  used in the dialog. Rendered from layout/password.liquid (layouts cannot use the\n  stylesheet tag directly).\n{%- enddoc -%}\n\n{% stylesheet %}\n  .password-main-content {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n  }\n\n  .password-dialog {\n    max-width: 100vw;\n    max-height: 100svh;\n    width: 100vw;\n    height: 100svh;\n    border: none;\n    transition: opacity var(--animation-values), display var(--animation-speed) allow-discrete,\n      overlay var(--animation-speed) allow-discrete;\n\n    &::backdrop {\n      display: none;\n    }\n  }\n\n  .password-dialog[open] {\n    opacity: 1;\n    top: 0;\n    left: 0;\n  }\n\n  @starting-style {\n    .password-dialog[open] {\n      opacity: 0;\n    }\n  }\n\n  .password-dialog:not([open]) {\n    opacity: 0;\n  }\n\n  @starting-style {\n    .password-dialog:not([open]) {\n      opacity: 1;\n    }\n  }\n\n  .password-dialog__close-button {\n    cursor: pointer;\n  }\n\n  .password-dialog__header {\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: var(--padding-lg);\n    z-index: var(--layer-raised);\n  }\n\n  .password-dialog__content {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    padding: var(--padding-lg);\n    height: 100%;\n    transition: transform var(--animation-values);\n  }\n\n  .password-dialog__content .email-signup__message {\n    padding-block-start: var(--padding-xl);\n  }\n\n  .password-dialog[open] .password-dialog__content {\n    transform: translateY(0);\n  }\n\n  @starting-style {\n    .password-dialog[open] .password-dialog__content {\n      transform: translateY(1em);\n    }\n  }\n\n  .password-dialog:not([open]) .password-dialog__content {\n    transform: translateY(1em);\n  }\n\n  @starting-style {\n    .password-dialog:not([open]) .password-dialog__content {\n      transform: translateY(0);\n    }\n  }\n\n  .storefront-password-form {\n    max-width: 400px;\n    width: 100%;\n  }\n\n  .email-signup__input-group,\n  .password-dialog__submit-button {\n    width: 100%;\n\n    @media screen and (min-width: 750px) {\n      width: auto;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/predictive-search-empty-state.liquid",
    "content": "{% doc %}\n  Renders the predictive search empty state\n\n  @param {number} shadow_opacity - shadow opacity for the empty state container shadow\n  @param {string} products_test_id - a playwright test id, used to differentiate empty state from 'real' search results\n  @param {boolean} [load_empty_state] - Load the empty state or not\n\n  @example\n  {% render 'predictive-search-empty-state', shadow_opacity: 0.1, products_test_id: 'empty-state' %}\n{% enddoc %}\n\n<div\n  id=\"predictive-search-results\"\n  class=\"predictive-search-dropdown\"\n  role=\"listbox\"\n  aria-expanded=\"true\"\n  style=\"--color-shadow: rgb(var(--color-foreground-rgb) / {{ shadow_opacity }});\"\n>\n  {% if load_empty_state %}\n    <div class=\"predictive-search-results__inner\">\n      {% liquid\n        assign collection = settings.empty_state_collection | default: collections.all\n        assign default_title = 'content.search_results_resource_products' | t\n        assign title = settings.empty_state_collection.title | default: default_title\n      %}\n      {% paginate collection.products by 4 %}\n        {% assign products = collection.products %}\n        {% comment %} Only show products section if there are products to display {% endcomment %}\n        {% if products.size > 0 %}\n          {% render 'predictive-search-products-list',\n            products_test_id: products_test_id,\n            title: title,\n            products: products,\n            limit: 4\n          %}\n        {% else %}\n          <div class=\"predictive-search-results__no-results\">\n            <p>{{ 'content.no_products_found' | t }}</p>\n          </div>\n        {% endif %}\n      {% endpaginate %}\n    </div>\n  {% endif %}\n</div>\n"
  },
  {
    "path": "snippets/predictive-search-products-list.liquid",
    "content": "{%- doc -%}\n  Renders the predictive search products list for empty state and recently viewed products\n\n  @param {string} title - title of the result list\n  @param {object[]} products - array of products\n  @param {string[]} [order_ids] - array of product ids\n  @param {number} [limit] - limit of products to display\n  @param {string} [products_test_id] - a playwright test id, used to differentiate empty state from 'real' search results\n{%- enddoc -%}\n{%- liquid\n  assign recently_viewed_title_text = 'content.recently_viewed_products' | t\n-%}\n<div\n  id=\"predictive-search-products\"\n  class=\"predictive-search-results__products\"\n  {% if products_test_id %}\n    data-testid=\"{{ products_test_id }}\"\n  {% endif %}\n>\n  {% if title == recently_viewed_title_text %}\n    <div\n      class=\"recently-viewed-wrapper\"\n      ref=\"recentlyViewedWrapper\"\n    >\n      <h4\n        class=\"predictive-search-results__title\"\n        ref=\"recentlyViewedTitle[]\"\n      >\n        {{ title }}\n        <button\n          class=\"predictive-search-results__clear button button-unstyled\"\n          type=\"button\"\n          on:click=\"/clearRecentlyViewedProducts\"\n        >\n          {{ 'actions.clear' | t }}\n        </button>\n      </h4>\n      <ul\n        class=\"predictive-search-results__list predictive-search-results__wrapper-products list-unstyled\"\n        role=\"listbox\"\n        aria-label=\"{{ title }}\"\n      >\n        {% liquid\n          assign limit = limit | default: 8\n        %}\n        {% comment %}\n          If we're searching for recently viewed products by id, we need to reorder the products.\n          The order here comes from the search terms, and we display the products in the order of the ids.\n        {% endcomment %}\n        {% if order_ids != blank %}\n          {% for _id in order_ids %}\n            {% assign int_id = _id | times: 1 %}\n            {% assign product = products | find: 'id', int_id %}\n            <li\n              class=\"predictive-search-results__card predictive-search-results__card--product\"\n              ref=\"recentlyViewedItems[]\"\n            >\n              {% render 'resource-card',\n                resource_type: 'product',\n                resource: product,\n                image_width: 500,\n                image_hover: true,\n                image_aspect_ratio: '4 / 5'\n              %}\n            </li>\n          {% endfor %}\n        {% else %}\n          {% for product in products limit: limit %}\n            <li\n              class=\"predictive-search-results__card predictive-search-results__card--product\"\n              ref=\"recentlyViewedItems[]\"\n            >\n              {% render 'resource-card',\n                resource_type: 'product',\n                resource: product,\n                image_width: 500,\n                image_hover: true,\n                image_aspect_ratio: '4 / 5'\n              %}\n            </li>\n          {% endfor %}\n        {% endif %}\n      </ul>\n    </div>\n  {% else %}\n    <h4 class=\"predictive-search-results__title\">\n      {{ title }}\n    </h4>\n    <ul\n      class=\"predictive-search-results__list predictive-search-results__wrapper-products list-unstyled\"\n      role=\"listbox\"\n      aria-label=\"{{ title }}\"\n    >\n      {% liquid\n        assign limit = limit | default: 8\n      %}\n      {% for product in products limit: limit %}\n        <li\n          class=\"predictive-search-results__card predictive-search-results__card--product\"\n          ref=\"resultsItems[]\"\n        >\n          {% render 'resource-card',\n            resource_type: 'product',\n            resource: product,\n            image_width: 500,\n            image_hover: true,\n            image_aspect_ratio: '4 / 5'\n          %}\n        </li>\n      {% endfor %}\n    </ul>\n  {% endif %}\n</div>\n\n{% stylesheet %}\n  .predictive-search-results__products {\n    padding-inline: var(--padding-xl);\n  }\n\n  .recently-viewed-wrapper {\n    display: grid;\n    grid-template-rows: auto auto;\n    max-height: 1000px;\n    opacity: 1;\n    overflow: visible;\n    transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n    transform-origin: top center;\n    transform: translateY(0);\n  }\n\n  .recently-viewed-wrapper.removing {\n    max-height: 0;\n    opacity: 0;\n    transform: translateY(-10px);\n    transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n      transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n    pointer-events: none;\n  }\n\n  .predictive-search-results__clear.button-unstyled {\n    color: var(--color-foreground);\n    opacity: 0.68;\n    transition: opacity var(--animation-speed-medium) var(--animation-easing);\n    padding: 0;\n    margin-left: var(--margin-sm);\n\n    &:hover {\n      opacity: 1;\n    }\n  }\n\n  .recently-viewed-wrapper.removing .predictive-search-results__card {\n    transition: none;\n    transform: none;\n    opacity: 1;\n  }\n\n  .recently-viewed-wrapper > * {\n    transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(1) {\n    animation-delay: 30ms;\n  }\n\n  .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(2) {\n    animation-delay: 60ms;\n  }\n\n  .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(3) {\n    animation-delay: 90ms;\n  }\n\n  .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(4) {\n    animation-delay: 120ms;\n  }\n\n  .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(n + 5) {\n    animation-delay: 150ms;\n  }\n\n  .predictive-search-results__wrapper-products {\n    animation-delay: 50ms;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/predictive-search-resource-carousel.liquid",
    "content": "{%- doc -%}\n  Renders a carousel of predictive search results cards.\n\n  @param {string} title - The title of the carousel.\n  @param {object} resources - The resources to display.\n  @param {string} resource_type - The type of resource to display.\n{%- enddoc -%}\n\n{% liquid\n  capture slides\n    for resource in resources\n      capture children\n        render 'resource-card', resource_type: resource_type, resource: resource, image_aspect_ratio: '4 / 5', collection_thumbnails: 'multiple'\n      endcapture\n      render 'slideshow-slide', index: forloop.index0, children: children, class: 'predictive-search-results__card'\n    endfor\n  endcapture\n%}\n\n{% capture header %}\n  <div class=\"predictive-search-results__resource-header\">\n    <h4\n      id=\"predictive-search-{{ resource_type }}\"\n      class=\"predictive-search-results__title\"\n    >\n      {{ title }}\n    </h4>\n\n    {% if resources.size >= 4 %}\n      {%- render 'slideshow-controls',\n        show_arrows: true,\n        icon_style: 'chevron',\n        shape: 'none'\n      -%}\n    {% endif %}\n  </div>\n{% endcapture %}\n\n{% assign slideshow_class = 'predictive-search-results__list predictive-search-results__wrapper list-unstyled slideshow--single-media' %}\n{% if resources.size >= 4 %}\n  {% assign slideshow_class = 'predictive-search-results__list predictive-search-results__wrapper list-unstyled' %}\n{% endif %}\n\n{% render 'slideshow',\n  class: slideshow_class,\n  header: header,\n  infinite: false,\n  slides: slides,\n  slide_count: resources.size,\n  icon_style: 'chevron',\n  slideshow_gutters: 'start end'\n%}\n\n{% stylesheet %}\n  .predictive-search-results__wrapper {\n    display: flex;\n    overflow-x: auto;\n    overflow-y: hidden;\n    padding-block-end: var(--padding-sm);\n    padding-inline: 0;\n    scroll-snap-type: x mandatory;\n    scroll-padding: 0 var(--padding-xl);\n    scrollbar-width: none;\n    -ms-overflow-style: none;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n\n  .predictive-search-results__wrapper slideshow-slides {\n    --gutter-slide-width: var(--padding-xl);\n\n    /* Add padding to prevent hover animations from being clipped in slideshow\n       15px accommodates:\n       - Scale effect (9px on each side from 1.03 scale)\n       - Lift effect (4px upward movement)\n       - Shadow (15px spread with -5px offset)\n       Using 16px for better alignment with our spacing scale */\n    padding-block: var(--padding-xl);\n    margin-block: calc(-1 * var(--padding-xl));\n    gap: var(--gap-md);\n  }\n\n  .predictive-search-results__resource-header {\n    display: flex;\n    padding-inline: var(--padding-xl);\n    justify-content: space-between;\n    align-items: center;\n    height: 32px;\n  }\n\n  .predictive-search-results__resource-header .svg-wrapper {\n    width: var(--icon-size-xs);\n  }\n\n  .predictive-search-results__wrapper-products {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    padding-block-end: var(--padding-sm);\n    gap: var(--gap-md);\n    transition: height var(--animation-speed-medium) var(--animation-easing);\n\n    @container (min-width: 550px) {\n      grid-template-columns: repeat(4, 1fr);\n    }\n  }\n\n  .predictive-search-results__wrapper-products:last-child {\n    padding-block-end: var(--padding-lg);\n\n    @media screen and (min-width: 750px) {\n      padding-block-end: var(--padding-sm);\n    }\n  }\n\n  .predictive-search-results__resource-header .predictive-search-results__title {\n    margin-block-end: 0;\n  }\n\n  .predictive-search-results__resource-header:has(slideshow-controls) .predictive-search-results__title {\n    margin-block-end: 0;\n  }\n\n  .predictive-search-results__resource-header slideshow-controls {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/price-filter.liquid",
    "content": "{%- doc -%}\n  Renders a price filter.\n\n  @param {object} filter - The filter object to render.\n  @param {string} filter_style - The filter style, can be 'horizontal' or 'vertical'.\n  @param {boolean} [should_render_clear] - Whether to render the clear button.\n\n  @example\n  {% render 'price-filter', filter: filter, filter_style: 'vertical' %}\n{%- enddoc -%}\n\n<accordion-custom\n  class=\"facets__item\"\n  {% if filter_style == 'horizontal' %}\n    data-disable-animation-on-desktop=\"true\"\n    data-close-with-escape=\"true\"\n  {% endif %}\n\n  {% if filter_style == 'vertical' %}\n    open\n    open-by-default-on-mobile\n    open-by-default-on-desktop\n  {% endif %}\n>\n  <details\n    class=\"facets__panel\"\n    {% if filter_style == 'horizontal' %}\n      data-auto-close-details=\"desktop\"\n    {% endif %}\n    {% if filter_style == 'vertical' %}\n      open\n    {% endif %}\n  >\n    <summary\n      class=\"facets__summary\"\n      data-testid=\"price-filter\"\n    >\n      <span class=\"facets__label\">{{ filter.label }}</span>\n      <facet-status-component class=\"facets__status\">\n        <template ref=\"moneyFormat\">{{ shop.money_format }}</template>\n\n        <span\n          class=\"hide-when-empty\"\n          ref=\"facetStatus\"\n          data-currency=\"{{ localization.country.currency.iso_code }}\"\n          data-range-max=\"{{ filter.range_max | money_without_currency }}\"\n        >\n          {%- if filter.min_value.value != null or filter.max_value.value != null %}\n            {%- if filter.min_value.value != null and filter.max_value.value != null %}\n              {{- filter.min_value.value | money | strip_html -}}\n              –\n              {{- filter.max_value.value | money | strip_html -}}\n            {%- elsif filter.min_value.value != null -%}\n              {{ filter.min_value.value | money | strip_html }}–{{ filter.range_max | money | strip_html }}\n\n            {%- elsif filter.max_value.value != null -%}\n              {{- 0 | money | strip_html -}}\n              –\n              {{- filter.max_value.value | money | strip_html -}}\n            {%- endif -%}\n          {%- endif -%}\n        </span>\n      </facet-status-component>\n      <span class=\"svg-wrapper icon-caret icon-animated\">\n        {{- 'icon-caret.svg' | inline_asset_content -}}\n      </span>\n    </summary>\n    <floating-panel-component\n      {% unless filter_style == 'vertical' %}\n        data-close-on-resize\n      {% endunless %}\n      class=\"facets__panel-content details-content{% if filter_style == 'horizontal' %} color-{{ settings.popover_color_scheme }}{% endif %}\"\n    >\n      {% assign min_input_max_value = filter.max_value.value | default: filter.range_max %}\n      {% assign max_input_min_value = filter.min_value.value | default: 0 %}\n\n      <price-facet-component\n        class=\"\n          price-facet\n          {%- if filter_style == 'horizontal' %}\n            price-facet--horizontal\n          {%- endif %}\n        \"\n        id=\"facet-inputs-{{ filter.param_name | escape | replace: '.', '-' }}\"\n        data-money-format=\"{{ shop.money_format | strip_html }}\"\n        data-currency=\"{{ localization.country.currency.iso_code }}\"\n        on:change=\"/updatePriceFilterAndResults\"\n      >\n        <div class=\"facets__inputs-wrapper facets__inputs-wrapper--row\">\n          <div\n            class=\"price-facet__inputs-wrapper\"\n          >\n            <div class=\"field price-facet__field\">\n              <input\n                class=\"field__input price-facet__input\"\n                name=\"{{ filter.min_value.param_name }}\"\n                id=\"{{ filter.label | escape }}-GTE\"\n                {%- if filter.min_value.value -%}\n                  value=\"{{ filter.min_value.value | money_without_currency }}\"\n                {%- endif -%}\n                type=\"text\"\n                inputmode=\"decimal\"\n                placeholder=\"0\"\n                data-min=\"0\"\n                data-max=\"{{ min_input_max_value | money_without_currency }}\"\n                ref=\"minInput\"\n                autocomplete=\"off\"\n              >\n\n              <label\n                class=\"field__label price-facet__label\"\n                for=\"{{ filter.label | escape }}-GTE\"\n              >\n                {{ cart.currency.symbol }}\n              </label>\n            </div>\n\n            <div class=\"price-facet__separator\">{{ 'fields.separator' | t }}</div>\n\n            <div class=\"field price-facet__field\">\n              <input\n                class=\"field__input price-facet__input\"\n                name=\"{{ filter.max_value.param_name }}\"\n                id=\"{{ filter.label | escape }}-LTE\"\n                {%- if filter.max_value.value -%}\n                  value=\"{{ filter.max_value.value | money_without_currency }}\"\n                {%- endif -%}\n                type=\"text\"\n                inputmode=\"decimal\"\n                placeholder=\"{{ filter.range_max | money_without_currency }}\"\n                data-min=\"{{ max_input_min_value | money_without_currency }}\"\n                data-max=\"{{ filter.range_max | money_without_currency }}\"\n                ref=\"maxInput\"\n                autocomplete=\"off\"\n              >\n              <label\n                class=\"field__label price-facet__label\"\n                for=\"{{ filter.label | escape }}-LTE\"\n              >\n                {{ cart.currency.symbol }}\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div\n          class=\"\n            price-facet__highest-price\n            {%- if filter_style == 'horizontal' %}\n              price-facet__highest-price--horizontal\n            {%- endif %}\n          \"\n        >\n          {%- assign formatted_highest_price = filter.range_max | money -%}\n          {{ 'content.price_filter_html' | t: price: formatted_highest_price }}\n        </div>\n\n        {% if filter.min_value.value != null or filter.max_value.value != null %}\n          {% assign has_active_values = true %}\n        {% endif %}\n\n        {% if should_render_clear %}\n          <facet-clear-component\n            class=\"clear-filter\"\n            tabindex=\"{% if has_active_values %}0{% else %}-1{% endif %}\"\n            on:click=\"/clearFilter\"\n            on:keydown=\"/clearFilter\"\n          >\n            <div\n              class=\"facets__clear {% if has_active_values %}facets__clear--active{% endif %}\"\n              ref=\"clearButton\"\n            >\n              {{- 'actions.clear' | t -}}\n            </div>\n          </facet-clear-component>\n        {% endif %}\n      </price-facet-component>\n    </floating-panel-component>\n  </details>\n</accordion-custom>\n\n{% stylesheet %}\n  /* Price filter */\n  .price-facet {\n    container-type: inline-size;\n    display: flex;\n    flex-direction: column;\n  }\n  .price-facet--horizontal {\n    min-width: 360px;\n  }\n\n  .price-facet__inputs-wrapper {\n    display: flex;\n    flex-direction: row;\n    padding: var(--style-border-width-inputs);\n    gap: calc(var(--gap-sm) + (var(--style-border-width-inputs) * 2));\n  }\n\n  @container (max-width: 199px) {\n    .price-facet__inputs-wrapper {\n      flex-wrap: wrap;\n    }\n  }\n\n  .price-facet__input {\n    width: 100%;\n    text-align: right;\n    padding-left: calc(2.5 * var(--input-padding-x));\n  }\n\n  .price-facet__input::placeholder {\n    color: var(--facets-input-label-color);\n  }\n\n  .price-facet__separator {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: var(--font-paragraph--size);\n  }\n\n  .price-facet__highest-price {\n    padding: var(--padding-xs) 0 var(--padding-sm);\n  }\n\n  .price-facet__highest-price--horizontal {\n    padding: 0 var(--padding-md) var(--padding-xs);\n  }\n\n  .price-facet__label {\n    top: 0;\n    left: 0;\n    color: var(--facets-input-label-color);\n    padding: var(--input-padding-y) var(--input-padding-x);\n    transform: none;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/price.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render a product card.\n  It is used in the product block,featured product block, and the product card block.\n\n  @param {product} product_resource - The product to render\n  @param {boolean} [show_unit_price] - Whether to show the unit price\n  @param {boolean} [show_sale_price_first] - Whether to show the sale price first\n{%- enddoc -%}\n\n{%- liquid\n  assign show_unit_price = show_unit_price | default: false\n  assign show_sale_price_first = show_sale_price_first | default: false\n  assign selected_variant = product_resource.selected_or_first_available_variant\n  assign price = selected_variant.price\n  assign compare_at_price = selected_variant.compare_at_price\n\n  assign show_compare_price = false\n  if compare_at_price > price\n    assign show_compare_price = true\n  endif\n\n  if product_resource == blank\n    assign price = 1999\n  endif\n\n  # Check if variant has volume pricing\n  assign has_volume_pricing = null\n  assign price_min = null\n  assign price_max = null\n\n  # For product cards (collection/search pages), calculate min/max across all variants\n  # For product pages, only use the selected variant's pricing\n  assign is_product_card = false\n  if template.name != 'product'\n    assign is_product_card = true\n  endif\n\n  if is_product_card\n    assign price_min = product_resource.price_min\n    assign price_max = product_resource.price_max\n    assign has_volume_pricing = product_resource.quantity_price_breaks_configured? | default: false\n  else\n    # Product page: only use selected variant's pricing\n    if selected_variant.quantity_price_breaks.size > 0\n      assign has_volume_pricing = true\n      assign price_min = selected_variant.quantity_price_breaks.last.price\n      assign price_max = selected_variant.price\n    endif\n  endif\n\n  # Determine if currency code should be shown\n  assign use_currency = false\n  if product.handle == product_resource.handle\n    if settings.currency_code_enabled_product_pages\n      assign use_currency = true\n    endif\n  elsif settings.currency_code_enabled_product_cards\n    assign use_currency = true\n  endif\n\n  # Format all prices\n  if use_currency\n    assign price = price | money_with_currency\n    assign compare_at_price = compare_at_price | money_with_currency\n    assign price_min = price_min | money_with_currency\n    assign price_max = price_max | money_with_currency\n  else\n    assign price = price | money\n    assign compare_at_price = compare_at_price | money\n    assign price_min = price_min | money\n    assign price_max = price_max | money\n  endif\n-%}\n\n<div ref=\"priceContainer\">\n  {% if has_volume_pricing %}\n    {% comment %} Volume pricing display {% endcomment %}\n    {% if show_compare_price %}\n      <span role=\"group\">\n        <span class=\"visually-hidden\">{{ 'content.price_regular' | t }}&nbsp;</span>\n        <span class=\"compare-at-price\">{{- compare_at_price -}}</span>\n      </span>\n    {% endif %}\n    <span role=\"group\">\n      <span class=\"visually-hidden\">{{ 'content.price_range' | t }}&nbsp;</span>\n      <span class=\"price\">{{ price_min }} - {{ price_max }}</span>\n    </span>\n  {% else %}\n    {% comment %} Standard pricing display {% endcomment %}\n    {% if show_sale_price_first == false and show_compare_price %}\n      <span role=\"group\">\n        <span class=\"visually-hidden\">{{ 'content.price_regular' | t }}&nbsp;</span>\n        <span class=\"compare-at-price\">{{- compare_at_price -}}</span>\n      </span>\n    {% endif %}\n\n    {% if show_compare_price %}\n      <span role=\"group\">\n        <span class=\"visually-hidden\">{{ 'content.price_sale' | t }}&nbsp;</span>\n        <span class=\"price\">{{ price | default: '&nbsp;' }}</span>\n      </span>\n    {% else %}\n      <span class=\"price\">{{ price | default: '&nbsp;' }}</span>\n    {% endif %}\n\n    {% if show_sale_price_first == true and show_compare_price %}\n      <span role=\"group\">\n        <span class=\"visually-hidden\">{{ 'content.price_regular' | t }}&nbsp;</span>\n        <span class=\"compare-at-price\">{{- compare_at_price -}}</span>\n      </span>\n    {% endif %}\n  {% endif %}\n  {%- if selected_variant.unit_price and show_unit_price %}\n    {%- liquid\n      if use_currency\n        assign unit_price = selected_variant.unit_price | money_with_currency\n      else\n        assign unit_price = selected_variant.unit_price | money\n      endif\n    -%}\n    {% render 'unit-price', price: unit_price, measurement: selected_variant.unit_price_measurement %}\n  {%- endif -%}\n</div>\n{%- if has_volume_pricing -%}\n  <small ref=\"volumePricingNote\" class=\"volume-pricing-note\">{{ 'content.volume_pricing_available' | t }}</small>\n{%- endif -%}\n"
  },
  {
    "path": "snippets/product-card.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render a product card.\n  It is used in the product block, featured product block, and the product card block.\n  The product object is null or when placeholders are rendered.\n\n  @param {object} product - The product object\n  @param {object} children - The children of the product card\n  @param {object} [block] - The block object\n  @param {number} [product_card_gap] - The gap between the product card children (overrides block settings)\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n\n{% style %}\n  {% if request.visual_preview_mode %}\n    product-card[data-product-transition] {\n      width: 100%;\n      min-width: 250px;\n    }\n  {% endif %}\n{% endstyle %}\n\n{% liquid\n  assign has_quick_add = false\n  if settings.quick_add and product.available\n    assign has_quick_add = true\n  endif\n\n  assign has_mobile_quick_add = false\n  if has_quick_add and settings.mobile_quick_add\n    assign has_mobile_quick_add = true\n  endif\n\n  assign product_card_id = 'product-card-link-' | append: block.id | append: '-' | append: product.id\n  assign product_card_gap_value = product_card_gap | default: block_settings.product_card_gap\n\n  # Logic to determine which variant URL to use (matching swatch selection logic)\n  assign variant_to_link = product.selected_or_first_available_variant\n\n  if settings.transition_to_main_product\n    assign featured_image = variant_to_link.featured_image\n    if featured_image == blank\n      assign featured_image = product.featured_media.preview_image\n    endif\n\n    if featured_image != blank\n      assign featured_media_url = featured_image | image_url: width: 500\n    endif\n  endif\n\n  assign onboarding = false\n  if product.id == empty or product == blank\n    assign onboarding = true\n  endif\n%}\n\n<product-card\n  class=\"product-card size-style\"\n  style=\"{% render 'size-style', settings: block_settings %}\"\n  data-product-id=\"{{ product.id }}\"\n  id=\"product-card-{{ block.id }}\"\n  {% if settings.transition_to_main_product %}\n    data-product-transition=\"true\"\n    data-featured-media-url=\"{{ featured_media_url }}\"\n    on:click=\"/handleViewTransition\"\n  {% endif %}\n  {{ block.shopify_attributes }}\n  {% if onboarding %}\n    data-placeholder=\"true\"\n  {% endif %}\n>\n  <a\n    id=\"{{ product_card_id | md5 }}\"\n    {% unless onboarding %}\n      href=\"{{ variant_to_link.url }}\"\n    {% endunless %}\n    class=\"product-card__link\"\n    ref=\"productCardLink\"\n  >\n    <span class=\"visually-hidden\">\n      {{ product.title }}\n    </span>\n  </a>\n  <div\n    class=\"\n      product-card__content\n      layout-panel-flex\n      layout-panel-flex--column\n      product-grid__card\n      spacing-style\n      border-style\n      gap-style\n      {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n    \"\n    style=\"\n      {% render 'border-override', settings: block_settings %}\n      {% render 'layout-panel-style', settings: block_settings %}\n      {% render 'spacing-style', settings: block_settings %}\n      {% render 'gap-style', value: product_card_gap_value, name: 'product-card-gap' %}\n      --quick-add-display: {% if has_quick_add %}flex{% else %}none{% endif %};\n      --quick-add-mobile-display: {% if has_mobile_quick_add %}flex{% else %}none{% endif %};\n      --quick-add-mobile-opacity: {% if has_mobile_quick_add %}1{% else %}0{% endif %};\n      {% if block_settings.padding-inline-start > 0 %}--zoom-out-padding-inline-start: min(var(--padding-xs), {{ block_settings.padding-inline-start | times: 0.7}}px);{% endif %}\n      {% if block_settings.padding-inline-end > 0 %}--zoom-out-padding-inline-end: min(var(--padding-xs), {{ block_settings.padding-inline-end | times: 0.7}}px);{% endif %}\n      {% if block_settings.padding-block-start > 0 %}--zoom-out-padding-block-start: min(var(--padding-xs), {{ block_settings.padding-block-start | times: 0.7}}px);{% endif %}\n      {% if block_settings.padding-block-end > 0 %}--zoom-out-padding-block-end: min(var(--padding-xs), {{ block_settings.padding-block-end | times: 0.7}}px);{% endif %}\n    \"\n  >\n    {{ children }}\n  </div>\n</product-card>\n\n{% stylesheet %}\n  .product-card__placeholder-image svg {\n    height: 100%;\n  }\n\n  @media screen and (max-width: 749px) {\n    .product-card slideshow-arrows .slideshow-control {\n      display: none;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/product-grid.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render the product grid on collection and search pages.\n\n  @param {object} section - The section object\n  @param {object} paginate - Pagination object\n  @param {object} products - Array of product objects\n  @param {string} [title] - Header of the collection or search results\n  @param {string} children - List or grid of product cards\n  @param {boolean} [enable_infinite_scroll] - Whether to enable infinite scroll (default: true)\n{%- enddoc -%}\n\n{% capture product_card_size %}\n  {% render 'util-product-grid-card-size' section: section %}\n{% endcapture %}\n{% assign product_card_size = product_card_size | strip %}\n\n{% style %}\n  @media screen and (min-width: 750px) {\n    {% case section.settings.layout_type %}\n      {% when 'grid' %}\n        .product-grid--{{ section.id }}:is(.product-grid--grid) {\n          --product-grid-columns-desktop: repeat(auto-fill, minmax({{ product_card_size }}, 1fr));\n        }\n\n\n      {% when 'organic' %}\n        {% assign large_span = 2 %}\n        {% assign row_cycle = 3 %}\n        {% assign product_cycle = row_cycle | times: 2 %}\n        {% assign right_large_start_col = 3 %}\n        .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-of-type({{ product_cycle }}n + 1) {\n          grid-column: 1 / span {{ large_span }};\n        }\n\n        .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-of-type({{ product_cycle }}n + 2),\n        .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-of-type({{ product_cycle }}n + 5) {\n          align-self: end;\n        }\n\n        .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-of-type({{ product_cycle }}n + {{ product_cycle }}) {\n          grid-column: {{ right_large_start_col }} / span {{ large_span }};\n        }\n\n        .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) {\n          --product-grid-columns-desktop: repeat(4, 1fr);\n        }\n    {% endcase %}\n\n    /* This logic helps prevent displaying one column for an large or extra-large product card size on a small screen. We want it to display at least two columns. */\n    {% case section.settings.product_card_size %}\n      {% when 'extra-large' or 'large' %}\n        @container product-grid (max-width: calc({{ product_card_size }} * 3 + {{ section.settings.columns_gap_horizontal }}px * 2)) {\n          .product-grid--{{ section.id }}:is(.product-grid--grid) {\n            --product-grid-columns-desktop: repeat(2, 1fr);\n          }\n        }\n    {% endcase %}\n\n    /* When zoomed out, fit as many 100px-wide columns as possible */\n    .product-grid--{{ section.id }}[product-grid-view='zoom-out'] {\n      --product-grid-columns-desktop: repeat(auto-fill, minmax(6.25rem, 1fr));\n    }\n\n    .product-grid--{{ section.id }}[product-grid-view='zoom-out'] .product-grid-view-zoom-out--details {\n      display: block;\n    }\n\n    .product-grid--{{ section.id }}[product-grid-view='zoom-out'] .product-grid__card {\n      padding-inline-start: var(--zoom-out-padding-inline-start, 0);\n      padding-inline-end: var(--zoom-out-padding-inline-end, 0);\n      padding-block-start: var(--zoom-out-padding-block-start, 0);\n      padding-block-end: var(--zoom-out-padding-block-end, 0);\n    }\n  }\n{% endstyle %}\n<div\n  id=\"ResultsList\"\n  class=\"\n    grid main-collection-grid\n    {%- if section.settings.inherit_color_scheme == false %} color-{{ section.settings.color_scheme }}{% endif %}\n    {%- if section.settings.product_grid_width == 'full-width' %} collection-wrapper--full-width{% endif %}\n    {%- if section.settings.full_width_on_mobile == true %} collection-wrapper--full-width-on-mobile{% endif %}\n    spacing-style\n  \"\n\n  style=\"\n    --grid--margin--mobile: 0{% if section.settings.product_grid_width == 'centered' and section.settings.full_width_on_mobile == false %} var(--margin-lg){% else %} 0{% endif %};\n    --grid-column--desktop: var(--{% if section.settings.product_grid_width == 'centered' %}centered{% else %}full-width{% endif %});\n    --grid-column--mobile: var(--{% if section.settings.full_width_on_mobile %}full-width{% else %}{% if section.settings.product_grid_width == 'centered' %}centered{% else %}full-width{% endif %}{% endif %});\n    --padding-inline-start: {{ section.settings.padding-inline-start }}px;\n    --padding-inline-end: {{ section.settings.padding-inline-end }}px;\n  \"\n>\n  <div\n    style=\"\n      grid-column: var(--full-width);\n      --product-grid-gap-mobile: {{ section.settings.columns_gap_vertical | at_most: 12 }}px {{ section.settings.columns_gap_horizontal | at_most: 12 }}px;\n      --product-grid-gap-desktop: {{ section.settings.columns_gap_vertical }}px {{ section.settings.columns_gap_horizontal }}px;\n      container-type: inline-size;\n      container-name: product-grid;\n    \"\n  >\n    {% if products.size == 0 %}\n      <div class=\"main-collection-grid__empty\">\n        <h2 class=\"main-collection-grid__empty-title h2\">\n          {{ 'content.no_products_found' | t }}\n        </h2>\n        <p>\n          {{ 'content.use_fewer_filters_html' | t: link: collection.url, class: 'main-collection-grid__empty-link' }}\n        </p>\n      </div>\n    {% else %}\n      {% if enable_infinite_scroll %}\n        <span ref=\"viewMorePrevious\"></span>\n      {% endif %}\n\n      {% if title %}\n        <h4 class=\"main-collection-grid__title\">{{ title }}</h4>\n      {% endif %}\n      <ul\n        class=\"product-grid product-grid--{{ section.id }} product-grid--{{ section.settings.layout_type }} {% if section.settings.mobile_product_card_size == 'large' %} product-grid-mobile--large{% endif %}\"\n        data-testid=\"product-grid\"\n        product-grid-view=\"default\"\n        ref=\"grid\"\n        role=\"list\"\n        data-last-page=\"{{ paginate.pages }}\"\n        data-product-card-size=\"{{ section.settings.product_card_size }}\"\n        style=\"--mobile-columns: {% if section.settings.mobile_product_card_size == 'large' %}1{% else %}2{% endif %};\"\n      >\n        {% comment %}\n          This script is used to set the grid view on the product grid stored in sessionStorage. Keeping it here helps us prevent seeing the default state.\n        {% endcomment %}\n        {% unless request.design_mode %}\n          <script>\n            (() => {\n              const grid = document.querySelector('.product-grid');\n              if (!grid) return;\n\n              const storedLayoutMobile = sessionStorage.getItem('product-grid-view-mobile') || 'default';\n              const storedLayoutDesktop = sessionStorage.getItem('product-grid-view-desktop') || 'default';\n\n              // No need to read the window width if no custom layouts were saved.\n              if (storedLayoutMobile === 'default' && storedLayoutDesktop === 'default') return;\n\n              const storedLayout = window.innerWidth >= 750 ? storedLayoutDesktop : storedLayoutMobile;\n              if (storedLayout === 'default') return;\n\n              grid.setAttribute('product-grid-view', storedLayout);\n\n              const options = document.querySelectorAll(\n                'input[type=\"radio\"][name=\"grid\"], input[type=\"radio\"][name=\"grid-mobile\"]'\n              );\n              for (const option of options) {\n                option.checked = option.value === storedLayout;\n              }\n            })();\n          </script>\n        {% endunless %}\n\n        {{ children }}\n      </ul>\n      {% if enable_infinite_scroll != false %}\n        <span ref=\"viewMoreNext\"></span>\n      {% else %}\n        {% render 'pagination-controls', paginate: paginate %}\n      {% endif %}\n    {% endif %}\n  </div>\n</div>\n\n{% stylesheet %}\n  .product-grid {\n    --product-grid-gap: var(--product-grid-gap-mobile);\n    --mobile-columns: 2; /* Default value */\n\n    isolation: isolate;\n\n    @media screen and (min-width: 750px) {\n      --product-grid-gap: var(--product-grid-gap-desktop);\n    }\n  }\n\n  .product-grid slideshow-arrows .slideshow-control {\n    display: none;\n\n    @media screen and (min-width: 750px) {\n      display: grid;\n    }\n  }\n\n  /* This triggers iOS < 16.4 */\n  @supports not (background-color: rgb(from red 150 g b / alpha)) {\n    /* Force aspect ratio to auto for iOS < 16.4 since it's not compatible with the infinite pagination */\n    .product-grid .product-media,\n    .product-grid .product-media-container {\n      aspect-ratio: auto;\n    }\n  }\n\n  .main-collection-grid {\n    padding: var(--grid--margin--mobile);\n\n    @media screen and (min-width: 750px) {\n      padding: var(--padding-block-start) var(--padding-inline-end) var(--padding-block-end) var(--padding-inline-start);\n    }\n  }\n\n  .main-collection-grid__empty {\n    padding-block: var(--padding-6xl);\n    padding-inline: var(--page-margin);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n    gap: var(--padding-sm);\n  }\n\n  .main-collection-grid__empty-title {\n    margin: 0;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/product-information-content.liquid",
    "content": "{% doc %}\n  Product Information Content\n\n  Renders the product information layout with media gallery and product details.\n  Used by both product-information and featured-product-information sections.\n\n  @param {number} product_media_size - Number of media items in the product\n  @param {string} section_id - Unique section ID\n  @param {object} settings - Section settings object\n  @param {string} media_gallery - Captured HTML for the product media gallery block\n  @param {string} product_details - Captured HTML for the product details block\n  @param {string} additional_blocks - Captured HTML for additional section blocks\n\n  @example\n  {% capture media_gallery %}\n    {% content_for 'block', type: '_product-media-gallery', id: 'media-gallery', closest.product: product %}\n  {% endcapture %}\n\n  {% capture product_details %}\n    {% content_for 'block', type: '_product-details', id: 'product-details', closest.product: product %}\n  {% endcapture %}\n\n  {% capture additional_blocks %}\n    {% content_for 'blocks' %}\n  {% endcapture %}\n\n  {% render 'product-information-content',\n    product_media_size: product.media.size,\n    section_id: section.id,\n    settings: section.settings,\n    media_gallery: media_gallery,\n    product_details: product_details,\n    additional_blocks: additional_blocks\n  %}\n{% enddoc %}\n\n{% liquid\n  # Determine render order based on media position\n  if settings.desktop_media_position == 'left'\n    assign render_order = 'media,product-details'\n  else\n    assign render_order = 'product-details,media'\n  endif\n\n  # Check if product has media\n  assign product_has_media = true\n  if product_media_size == 0\n    assign product_has_media = false\n  endif\n\n  # Build product grid class\n  assign product_grid_class = 'product-information__grid'\n\n  if product_has_media == false\n    assign product_grid_class = product_grid_class | append: ' product-information--media-none'\n  elsif settings.desktop_media_position == 'right'\n    assign product_grid_class = product_grid_class | append: ' product-information--media-right'\n  else\n    assign product_grid_class = product_grid_class | append: ' product-information--media-left'\n  endif\n\n  if settings.equal_columns\n    assign product_grid_class = product_grid_class | append: ' product-information__grid--half'\n\n    if settings.limit_details_width\n      assign product_grid_class = product_grid_class | append: ' product-information__grid--limit-details'\n    endif\n  endif\n\n  # Determine content width\n  case settings.content_width\n    when 'content-center-aligned'\n      assign content_width = 'page-width'\n    when 'content-full-width'\n      assign content_width = 'full-width'\n  endcase\n%}\n\n<div class=\"section-background color-{{ settings.color_scheme }}\"></div>\n<div\n  class=\"product-information section section--{{ content_width }} spacing-style color-{{ settings.color_scheme }} relative\"\n  style=\"{% render 'spacing-style', settings: settings %} --gap: {{ settings.gap }}px;\"\n  data-testid=\"product-information\"\n>\n  {% if settings.desktop_media_position == 'left' and product_has_media and request.page_type == 'product' %}\n    {% assign product_href = '#ProductInformation-' | append: section_id %}\n    {% render 'skip-to-content-link', href: product_href, text: 'accessibility.skip_to_product_info' %}\n  {% endif %}\n  <div\n    class=\"{{ product_grid_class }}\"\n    data-product-grid-content\n  >\n    {% assign render_order_array = render_order | split: ',' %}\n    {% capture media %}\n      <div\n        class=\"product-information__media\"\n        data-testid=\"product-information-media\"\n      >\n        {{ media_gallery }}\n      </div>\n    {% endcapture %}\n\n    {% for block in render_order_array %}\n      {% if block == 'media' and product_has_media %}\n        {{ media }}\n      {% elsif block == 'product-details' %}\n        {{ product_details }}\n      {% endif %}\n    {% endfor %}\n  </div>\n\n  {{ additional_blocks }}\n</div>\n\n{% stylesheet %}\n  .product-information {\n    gap: var(--gap) 0;\n  }\n\n  /* Base grid layout */\n  .product-information__grid {\n    display: grid;\n    grid-template-columns: subgrid;\n    grid-column: 1 / -1;\n  }\n\n  /* Default column positions */\n  .product-details {\n    order: 1;\n  }\n\n  .product-information__media {\n    order: 0;\n    width: 0;\n    min-width: 100%;\n  }\n\n  .product-information__media .product-media-gallery__placeholder-image {\n    width: 100%;\n    height: 100%;\n  }\n\n  /* Mobile styles */\n  @media screen and (max-width: 749px) {\n    .product-information__media {\n      grid-column: 1 / -1;\n    }\n\n    .product-details {\n      grid-column: 2 / 3;\n    }\n  }\n\n  /* Desktop styles */\n  @media screen and (min-width: 750px) {\n    .product-information__grid {\n      grid-column: 2;\n    }\n\n    /* Position when there is no media */\n    .product-information__grid.product-information--media-none {\n      .product-details {\n        width: var(--narrow-content-width);\n        margin: 0 auto;\n      }\n    }\n\n    /* Position when there is media */\n    .product-information__grid:not(.product-information--media-none) {\n      /* Media on the left side */\n      &.product-information--media-left {\n        grid-template-columns: 1fr min(50vw, var(--sidebar-width));\n\n        .product-information__media {\n          padding-right: calc(var(--gap, 0) / 2);\n        }\n\n        .product-details {\n          padding-left: calc(var(--gap, 0) / 2);\n        }\n\n        &:has(.media-gallery--extend) {\n          grid-column: 1 / 3;\n        }\n      }\n\n      /* Media on the right side */\n      &.product-information--media-right {\n        grid-template-columns: min(50vw, var(--sidebar-width)) 1fr;\n\n        .product-information__media {\n          padding-left: calc(var(--gap, 0) / 2);\n          order: 1;\n        }\n\n        .product-details {\n          padding-right: calc(var(--gap, 0) / 2);\n          order: 0;\n        }\n\n        &:has(.media-gallery--extend) {\n          grid-column: 2 / -1;\n        }\n      }\n\n      /* Equal width columns */\n      &.product-information__grid--half,\n      &.product-information__grid--half:has(.media-gallery--extend) {\n        grid-column: 1 / -1;\n        grid-template-columns:\n          var(--full-page-grid-margin) calc(var(--full-page-grid-central-column-width) / 2) calc(\n            var(--full-page-grid-central-column-width) / 2\n          )\n          var(--full-page-grid-margin);\n\n        &.product-information--media-left {\n          .product-information__media {\n            grid-column: 2 / 3;\n\n            &:has(.media-gallery--extend) {\n              grid-column: 1 / 3;\n            }\n          }\n\n          .product-details {\n            grid-column: 3 / 4;\n          }\n        }\n\n        &.product-information--media-right {\n          .product-information__media {\n            grid-column: 3 / 4;\n\n            &:has(.media-gallery--extend) {\n              grid-column: 3 / -1;\n            }\n          }\n\n          .product-details {\n            grid-column: 2 / 3;\n          }\n        }\n      }\n    }\n\n    /* Handle full width section */\n    .section--full-width {\n      .product-information__grid:not(.product-information--media-none) {\n        &.product-information--media-left,\n        &.product-information--media-right {\n          grid-column: 1 / -1;\n        }\n\n        &.product-information--media-left .product-details {\n          padding-inline-end: var(--padding-lg);\n        }\n\n        &.product-information--media-right .product-details {\n          padding-inline-start: var(--padding-lg);\n        }\n\n        &.product-information__grid--half.product-information--media-left {\n          .product-information__media {\n            grid-column: 1 / 3;\n          }\n\n          .product-details {\n            grid-column: 3 / -1;\n          }\n        }\n\n        &.product-information__grid--half.product-information--media-right {\n          .product-information__media {\n            grid-column: 3 / -1;\n          }\n\n          .product-details {\n            grid-column: 1 / 3;\n          }\n        }\n      }\n    }\n  }\n\n  /* Wider sidebar for large screens */\n  @media screen and (min-width: 1200px) {\n    .product-information__grid:not(\n        .product-information__grid--half,\n        .product-information--media-none\n      ).product-information--media-left {\n      grid-template-columns: 2fr 1fr;\n    }\n\n    .product-information__grid:not(\n        .product-information__grid--half,\n        .product-information--media-none\n      ).product-information--media-right {\n      grid-template-columns: 1fr 2fr;\n    }\n  }\n\n  .product-information__grid--limit-details .product-details > .group-block {\n    --details-max-width: var(--sidebar-width);\n    max-width: var(--details-max-width);\n  }\n\n  @media screen and (min-width: 1600px) {\n    .product-information__grid--limit-details .product-details > .group-block {\n      --details-max-width: 32rem;\n    }\n  }\n\n  /* If the header is sticky, make product details content stick underneath the header */\n  body:has(#header-group #header-component[data-sticky-state='active']) .product-details.sticky-content--desktop {\n    --sticky-header-offset: var(--header-height);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/product-media-gallery-content.liquid",
    "content": "{% doc %}\n  Product Media Gallery Content\n\n  Renders product media gallery for the closest product.\n\n  @param {string} media_presentation - Either 'grid' or 'carousel'\n  @param {object} block_settings - Block settings object\n  @param {string} block_id - Block ID for unique element IDs\n  @param {string} block_shopify_attributes - Block shopify attributes\n\n  @example\n  {% render 'product-media-gallery-content',\n    media_presentation: 'carousel',\n    block_settings: block.settings,\n    block_id: block.id,\n    block_shopify_attributes: block.shopify_attributes,\n  %}\n{% enddoc %}\n{%- if block_settings.zoom -%}\n  <script\n    src=\"{{ 'zoom-dialog.js' | asset_url }}\"\n    type=\"module\"\n  ></script>\n{%- endif -%}\n{%- liquid\n  assign selected_product = closest.product\n  assign selected_variant_media = selected_product.selected_or_first_available_variant.featured_media\n  assign first_3d_model = selected_product.media | where: 'media_type', 'model' | first\n\n  if block_settings.hide_variants\n    assign variant_images = selected_product.images | where: 'attached_to_variant?', true | map: 'src'\n  endif\n\n  if block_settings.slideshow_controls_style == 'thumbnails'\n    assign controls_on_media = false\n  else\n    assign controls_on_media = true\n  endif\n\n  if block_settings.slideshow_mobile_controls_style == 'thumbnails'\n    assign mobile_controls_on_media = false\n  else\n    assign mobile_controls_on_media = true\n  endif\n\n  assign render_slideshow_controls = false\n\n  if media_presentation == 'carousel' or block_settings.slideshow_controls_style == block_settings.slideshow_mobile_controls_style\n    assign render_slideshow_controls = true\n  endif\n\n  assign render_mobile_slideshow_controls = false\n\n  if block_settings.slideshow_controls_style != block_settings.slideshow_mobile_controls_style\n    assign slideshow_controls_class = 'mobile:hidden'\n\n    if block_settings.slideshow_mobile_controls_style != 'hint'\n      assign render_mobile_slideshow_controls = true\n    endif\n  endif\n\n  assign slideshow_controls_style = block_settings.slideshow_controls_style\n  # Use a counter instead of dots when there are many images to avoid cropping/overflow.\n  if slideshow_controls_style == 'dots' and selected_product.media.size > 15\n    assign slideshow_controls_style = 'counter'\n  endif\n\n  assign render_slideshow_arrows = false\n\n  if selected_product.media.size <= 1\n    assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media'\n  else\n    assign slideshow_class = ''\n\n    if media_presentation == 'carousel'\n      assign render_slideshow_arrows = true\n    endif\n  endif\n\n  if slideshow_controls_style == 'thumbnails'\n    assign pagination_position = block_settings.thumbnail_position\n  else\n    assign pagination_position = 'center'\n  endif\n\n  # correct discrepancy between position settings for thumbnails and other controls\n  if pagination_position == 'bottom'\n    assign pagination_position = 'center'\n  endif\n\n  assign icons_position = 'center'\n\n  # Put the icons on the opposite side of the pagination controls\n  if block_settings.slideshow_controls_position == 'on_media'\n    if pagination_position == 'left'\n      assign icons_position = 'right'\n    elsif pagination_position == 'right'\n      assign icons_position = 'left'\n    endif\n  endif\n\n  assign sorted_media = '' | split: ','\n  if selected_variant_media\n    assign sorted_media = sorted_media | concat: selected_product.media | where: 'id', selected_variant_media.id\n\n    for media in selected_product.media\n      if block_settings.hide_variants and variant_images contains media.src and sorted_media.size > 0\n        continue\n      endif\n\n      if media.id != selected_variant_media.id\n        assign found_media = selected_product.media | where: 'id', media.id\n        assign sorted_media = sorted_media | concat: found_media\n      endif\n    endfor\n  else\n    assign sorted_media = selected_product.media\n  endif\n  assign has_image_drop = sorted_media | has: 'media_type', 'image'\n\n  # Determine if we're in single column mode (carousel or grid with one column)\n  assign is_single_column = false\n  if media_presentation == 'carousel' or sorted_media.size == 1 or media_presentation == 'grid' and block_settings.media_columns == 'one'\n    assign is_single_column = true\n  endif\n\n  # Check if we need both sizes (for large first image in two-column grid)\n  assign needs_both_sizes = false\n  if media_presentation == 'grid' and block_settings.media_columns == 'two' and block_settings.large_first_image\n    assign needs_both_sizes = true\n  endif\n\n  # Calculate sizes using utility snippet\n  if needs_both_sizes\n    # Calculate sizes for single column (first image)\n    capture sizes_single\n      render 'util-product-media-sizes-attr', block: block, section: section, settings: settings, is_first_image: true, is_single_column: true, needs_both_sizes: true\n    endcapture\n    assign sizes_single = sizes_single | strip\n  endif\n\n  # Calculate sizes value for regular grid/carousel items\n  capture sizes\n    render 'util-product-media-sizes-attr', block: block, section: section, settings: settings, is_first_image: false, is_single_column: is_single_column, needs_both_sizes: needs_both_sizes\n  endcapture\n  assign sizes = sizes | strip\n\n  assign product_media_container_class = 'product-media-container'\n  if block_settings.constrain_to_viewport\n    assign product_media_container_class = product_media_container_class | append: ' constrain-height'\n  endif\n  if block_settings.aspect_ratio != 'adapt'\n    assign product_media_container_class = product_media_container_class | append: ' media-fit-cover'\n  elsif block_settings.constrain_to_viewport\n    assign product_media_container_class = product_media_container_class | append: ' media-fit-' | append: block_settings.media_fit\n  else\n    assign product_media_container_class = product_media_container_class | append: ' media-fit-contain'\n  endif\n\n  if block_settings.aspect_ratio == 'adapt'\n    assign lowest_aspect_ratio = 50\n    assign lowest_aspect_ratio_index = 0\n\n    for media in sorted_media\n      # Find the media with the lowest aspect ratio (tallest)\n\n      if media.preview_image and media.preview_image.aspect_ratio\n        if media.preview_image.aspect_ratio < lowest_aspect_ratio\n          assign lowest_aspect_ratio = media.preview_image.aspect_ratio\n          assign lowest_aspect_ratio_index = forloop.index0\n        endif\n      endif\n    endfor\n  endif\n-%}\n{%- if has_image_drop -%}\n  <script\n    src=\"{{ 'drag-zoom-wrapper.js' | asset_url }}\"\n    type=\"module\"\n  ></script>\n{%- endif -%}\n\n{% style %}\n  {% unless block_settings.aspect_ratio == 'adapt' %}\n    .product-media-container {\n      --media-preview-ratio: {{ block_settings.aspect_ratio }};\n    }\n\n    {% if block_settings.constrain_to_viewport %}\n      .product-media-container.constrain-height {\n        background-color: var(--color-background);\n      }\n\n      .product-media-container.constrain-height:has(.product-media-constraint-wrapper) {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n      }\n\n      /* Mobile constraint wrapper sizing - use width-based approach since max-height is disabled */\n      .product-media-constraint-wrapper {\n        width: 100%;\n        max-width: 100%;\n        flex-shrink: 0;\n      }\n\n      /* Desktop constraint wrapper sizing */\n      @media screen and (min-width: 750px) {\n        .product-media-constraint-wrapper {\n          width: min(100%, calc(var(--constrained-height) * {{ block_settings.aspect_ratio }}));\n        }\n      }\n    {% endif %}\n\n    /* Constrain all deferred-media content to parent bounds when specific aspect ratio is set */\n    .product-media-container:not(.dialog-zoomed-gallery *) .product-media deferred-media,\n    .product-media-container:not(.dialog-zoomed-gallery *) .product-media product-model {\n      width: 100%;\n      height: 100%;\n      top: 0;\n      left: 0;\n    }\n\n    /* Ensure video and iframe elements respect container aspect ratio */\n    .product-media-container:not(.dialog-zoomed-gallery *) .product-media deferred-media video,\n    .product-media-container:not(.dialog-zoomed-gallery *) .product-media deferred-media iframe {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n    }\n\n    /* 3D models need special handling since they don't support object-fit */\n    .product-media-container:not(.dialog-zoomed-gallery *) .product-media product-model model-viewer {\n      width: 100%;\n      height: 100%;\n    }\n\n    /* Clear gallery aspect ratio for zoom dialog - let media display at natural aspect ratios */\n    .dialog-zoomed-gallery .product-media {\n      --gallery-aspect-ratio: var(--ratio);\n    }\n  {% endunless %}\n\n  {% if block_settings.aspect_ratio == 'adapt' and block_settings.constrain_to_viewport %}\n    .media-fit-{{ block_settings.media_fit }} {\n      --product-media-fit: {{ block_settings.media_fit }};\n    }\n\n    /* Media fit for all media elements */\n    .media-fit-{{ block_settings.media_fit }} :is(img, video, iframe, .deferred-media__poster-image) {\n      object-fit: {{ block_settings.media_fit }};\n      width: 100%;\n      height: 100%;\n    }\n\n    /* 3D Models (no object-fit support, just sizing) */\n    .media-fit-{{ block_settings.media_fit }} model-viewer {\n      width: 100%;\n      height: 100%;\n    }\n  {% endif %}\n\n  {% unless block_settings.aspect_ratio == 'adapt' and block_settings.constrain_to_viewport %}\n    .media-fit-cover {\n      --product-media-fit: cover;\n    }\n\n    /* Media fit for all media elements - default to cover */\n    .media-fit-cover :is(img, video, iframe, .deferred-media__poster-image) {\n      object-fit: cover;\n      width: 100%;\n      height: 100%;\n    }\n\n    /* 3D Models (no object-fit support, just sizing) */\n    .media-fit-cover model-viewer {\n      width: 100%;\n      height: 100%;\n    }\n  {% endunless %}\n\n  /* Add background color so carousel arrows' mix-blend-mode works correctly even on transparent areas. */\n  {% if block_settings.media_fit == 'contain' %}\n    .media-fit-contain :is(img, .deferred-media__poster-image) {\n      background-color: var(--color-background);\n    }\n  {% endif %}\n\n  {% capture view_transition_styles_contain %}\n    ::view-transition-old(gallery-item-open),\n    ::view-transition-new(gallery-item-open),\n    ::view-transition-old(gallery-item-close),\n    ::view-transition-new(gallery-item-close) {\n      height: auto;\n      width: 100%;\n      object-fit: contain;\n      top: 50%;\n      transform: translateY(-50%);\n    }\n  {% endcapture %}\n  {% capture view_transition_styles_cover %}\n    ::view-transition-old(gallery-item-open),\n    ::view-transition-new(gallery-item-open),\n    ::view-transition-old(gallery-item-close),\n    ::view-transition-new(gallery-item-close) {\n      height: 100%;\n      width: 100%;\n      object-fit: cover;\n      object-position: var(--gallery-media-focal-point, center);\n    }\n  {% endcapture %}\n  {% if block_settings.aspect_ratio == 'adapt' and block_settings.constrain_to_viewport == false %}\n    {{ view_transition_styles_contain }}\n  {% elsif block_settings.aspect_ratio == 'adapt' and block_settings.constrain_to_viewport == true and block_settings.media_fit == 'contain' %}\n    {{ view_transition_styles_contain }}\n  {% else %}\n    {{ view_transition_styles_cover }}\n  {% endif %}\n\n  :root { --gallery-media-border-radius: {{ block_settings.media_radius }}px; }\n{% endstyle %}\n\n{% if closest.product == blank %}\n  <div\n    class=\"\n      {% if block_settings.extend_media %}\n        media-gallery--extend\n      {% endif %}\n    \"\n    {{ block_shopify_attributes }}\n  >\n    {{ 'product-apparel-1' | placeholder_svg_tag: 'product-media-gallery__placeholder-image' }}\n  </div>\n{% else %}\n  <media-gallery\n    class=\"\n      spacing-style\n      sticky-content\n      {% if media_presentation == 'grid' %}\n        media-gallery--{{ block_settings.media_columns }}-column\n        {% if block_settings.media_columns == \"two\" and block_settings.large_first_image%}media-gallery--large-first-image{% endif %}\n      {% endif %}\n      media-gallery--{{ media_presentation }}\n      {% if block_settings.slideshow_mobile_controls_style == 'hint' %}\n        media-gallery--hint\n      {% endif %}\n      {% if block_settings.extend_media %}\n        media-gallery--extend\n      {% endif %}\n    \"\n    style=\"{% render 'spacing-style', settings: block_settings %} --thumbnail-width: {{ block_settings.thumbnail_width }}px; --media-radius: {{ block_settings.media_radius }}px;{% if block_settings.icons_style contains 'large' %} --slideshow-icon-padding: 0px;{% endif %}--image-gap: {{ block_settings.image_gap }}px;{% unless block_settings.aspect_ratio == 'adapt' %} --gallery-aspect-ratio: {{ block_settings.aspect_ratio }};{% endunless %}\"\n    data-presentation=\"{{ media_presentation }}\"\n    {{ block_shopify_attributes }}\n  >\n    {% capture slides %}\n      {% for media in sorted_media %}\n        {% capture children %}\n          {%- liquid\n              if needs_both_sizes and forloop.first\n                assign media_sizes = sizes_single\n              else\n                assign media_sizes = sizes\n              endif\n          -%}\n          {% if block_settings.aspect_ratio != 'adapt' and block_settings.constrain_to_viewport %}\n            <div\n              class=\"product-media-constraint-wrapper\">\n              {%- render 'product-media', media: media, sizes: media_sizes, is_main_product_media: forloop.first -%}\n            </div>\n          {% else %}\n            {%- render 'product-media', media: media, sizes: media_sizes, is_main_product_media: forloop.first -%}\n          {% endif %}\n        {% endcapture %}\n        {% capture class %}\n          {{ product_media_container_class }} product-media-container--{{ media.media_type }}{% if block_settings.zoom %} product-media-container--zoomable{% endif %}{% if forloop.index0 == lowest_aspect_ratio_index and block_settings.aspect_ratio == 'adapt' %} product-media-container--tallest{% endif %}\n        {% endcapture %}\n        {% if block_settings.aspect_ratio == 'adapt' %}\n          {% capture style %}\n            --media-preview-ratio: {{ media.preview_image.aspect_ratio | default: 1.0 }};\n          {% endcapture %}\n        {% endif %}\n        {% if block_settings.zoom and media.media_type == 'model' %}\n          {%- capture attributes -%}\"{% if settings.transition_to_main_product and forloop.first %} data-view-transition-type=\"product-image-transition\"{% endif %}{% endcapture -%}\n        {% elsif block_settings.zoom %}\n          {%- capture attributes -%}on:click=\"#zoom-dialog-{{ block_id }}/open/{{ forloop.index0 }}\"{% if settings.transition_to_main_product and forloop.first %} data-view-transition-type=\"product-image-transition\"{% endif %}{% endcapture -%}\n        {% endif %}\n\n        {% render 'slideshow-slide',\n          index: forloop.index0,\n          children: children,\n          class: class,\n          style: style,\n          attributes: attributes,\n          media_fit: block_settings.media_fit,\n        %}\n      {% endfor %}\n    {% endcapture %}\n\n    {% if sorted_media.size > 1 %}\n      {% capture controls %}\n        {% if render_slideshow_controls %}\n          {%- render 'slideshow-controls',\n            class: slideshow_controls_class,\n            style: slideshow_controls_style,\n            item_count: sorted_media.size,\n            thumbnails: sorted_media,\n            controls_on_media: controls_on_media,\n            pagination_position: pagination_position,\n            aspect_ratio: block_settings.aspect_ratio,\n            thumbnail_radius: block_settings.thumbnail_radius\n          -%}\n        {% endif %}\n\n        {% if render_mobile_slideshow_controls %}\n          {%- render 'slideshow-controls',\n            class: 'desktop:hidden media-gallery__mobile-controls',\n            style: block_settings.slideshow_mobile_controls_style,\n            item_count: sorted_media.size,\n            thumbnails: sorted_media,\n            controls_on_media: mobile_controls_on_media,\n            pagination_position: 'center',\n            aspect_ratio: block_settings.aspect_ratio,\n            thumbnail_radius: block_settings.thumbnail_radius\n          -%}\n        {% endif %}\n      {% endcapture %}\n    {% endif %}\n\n    {% if render_slideshow_arrows %}\n      {% capture slideshow_arrows %}\n        {% render 'slideshow-arrows', class: 'mobile:hidden', icon_style: block_settings.icons_style %}\n      {% endcapture %}\n    {% endif %}\n\n    {% render 'slideshow',\n      ref: 'slideshow',\n      class: slideshow_class,\n      slides: slides,\n      slide_count: sorted_media.size,\n      slideshow_arrows: slideshow_arrows,\n      arrows_position: icons_position,\n      controls: controls\n    %}\n\n    {% if media_presentation == 'grid' %}\n      <ul\n        class=\"media-gallery__grid list-unstyled\"\n        data-testid=\"media-gallery-grid\"\n      >\n        {% for media in sorted_media %}\n          <li\n            ref=\"media[]\"\n            class=\"{{ product_media_container_class }} product-media-container--{{ media.media_type }}\"\n            style=\"{% if block_settings.aspect_ratio == 'adapt' %} --media-preview-ratio: {{ media.preview_image.aspect_ratio | default: 1.0 }};{% endif %}\"\n            {% if settings.transition_to_main_product and forloop.first %}\n              data-view-transition-type=\"product-image-transition\"\n            {% endif %}\n            {% if media.presentation.focal_point != blank %}\n              data-focal-point=\"{{ media.presentation.focal_point }}\"\n            {% endif %}\n          >\n            {%- if block_settings.zoom and media.media_type == 'image' -%}\n              <button\n                type=\"button\"\n                class=\"button button-unstyled product-media-container__zoom-button\"\n                aria-label=\"{{ 'actions.zoom' | t }}\"\n                on:click=\"/zoom/{{ forloop.index0 }}\"\n                {% if block_settings.zoom %}\n                  on:pointerenter=\"/preloadImage/{{ forloop.index0 }}\"\n                {% endif %}\n              >\n                <span class=\"visually-hidden\">{{ 'actions.open_image_in_full_screen' | t }}</span>\n              </button>\n            {%- endif -%}\n            {%- liquid\n              if needs_both_sizes and forloop.first\n                assign media_sizes = sizes_single\n              else\n                assign media_sizes = sizes\n              endif\n            -%}\n            {% if block_settings.aspect_ratio != 'adapt' and block_settings.constrain_to_viewport %}\n              <div class=\"product-media-constraint-wrapper\">\n                {%- render 'product-media', media: media, sizes: media_sizes, is_main_product_media: forloop.first -%}\n              </div>\n            {% else %}\n              {%- render 'product-media', media: media, sizes: media_sizes, is_main_product_media: forloop.first -%}\n            {% endif %}\n          </li>\n        {% endfor %}\n      </ul>\n    {% endif %}\n\n    {%- if block_settings.zoom -%}\n      <zoom-dialog\n        ref=\"zoomDialogComponent\"\n        id=\"zoom-dialog-{{ block_id }}\"\n      >\n        <dialog\n          class=\"dialog-zoomed-gallery__dialog\"\n          ref=\"dialog\"\n          on:keydown=\"/handleKeyDown\"\n          scroll-lock\n        >\n          <button\n            type=\"button\"\n            class=\"button button-unstyled close-button dialog-zoomed-gallery__close-button\"\n            aria-label=\"{{ 'actions.close' | t }}\"\n            on:click=\"/close\"\n          >\n            <span class=\"visually-hidden\">{{ 'actions.close' | t }}</span>\n            {{ 'icon-close.svg' | inline_asset_content }}\n          </button>\n          <div class=\"dialog-thumbnails-list-container\">\n            <scroll-hint\n              class=\"dialog-thumbnails-list list-unstyled\"\n              ref=\"thumbnails\"\n            >\n              {% if sorted_media.size > 1 %}\n                {%- for media in sorted_media -%}\n                  {% liquid\n                    assign aspect_ratio = block_settings.aspect_ratio\n                    if block_settings.aspect_ratio == 'adapt'\n                      assign aspect_ratio = media.preview_image.aspect_ratio | default: 1.0\n                    endif\n                  %}\n                  <button\n                    type=\"button\"\n                    class=\"button button-unstyled dialog-thumbnails-list__thumbnail\"\n                    aria-label=\"{{ 'accessibility.scroll_to' | t: title: media.alt | default: media.media_type }}\"\n                    on:click=\"/handleThumbnailClick/{{ forloop.index0 }}\"\n                    on:pointerenter=\"/handleThumbnailPointerEnter/{{ forloop.index0 }}\"\n                    style=\"--aspect-ratio: {{ aspect_ratio }}; --gallery-aspect-ratio: {{ aspect_ratio }};\"\n                    {% if forloop.first %}\n                      aria-selected=\"true\"\n                    {% endif %}\n                  >\n                    {% liquid\n                      assign focal_point_style = ''\n                      if media.presentation.focal_point != blank\n                        assign focal_point_style = 'object-position: ' | append: media.presentation.focal_point | append: ';'\n                      endif\n                    %}\n                    {{\n                      media.preview_image\n                      | image_url: width: 1024\n                      | image_tag:\n                        loading: 'lazy',\n                        sizes: 'auto, 110, (min-width: 750px) 160',\n                        widths: '240, 352, 832, 1200',\n                        alt: media.alt,\n                        style: focal_point_style\n                      | escape\n                    }}\n                  </button>\n                {%- endfor -%}\n              {% endif %}\n            </scroll-hint>\n          </div>\n          <ul\n            class=\"dialog-zoomed-gallery list-unstyled\"\n          >\n            {%- for media in sorted_media -%}\n              <li\n                id=\"product-{{ media.id}}-{{ forloop.index }}\"\n                class=\"{{ product_media_container_class | remove: 'media-fit-cover' }} product-media-container--{{ media.media_type }}{% if media.media_type == 'image' %} product-media-container--zoomable{% endif %}\"\n                style=\"{% if block_settings.aspect_ratio == 'adapt' %} --media-preview-ratio: {{ media.preview_image.aspect_ratio | default: 1.0 }};{% endif %}\"\n                ref=\"media[]\"\n                {% if media.media_type == 'image' %}\n                  on:click=\"/close\"\n                {% endif %}\n              >\n                {% if media.media_type == 'image' %}\n                  <drag-zoom-wrapper class=\"product-media__drag-zoom-wrapper\">\n                    {%- render 'product-media',\n                      media: media,\n                      sizes: '100vw',\n                      loading: 'lazy',\n                      is_main_product_media: forloop.first,\n                      image_ref: 'image'\n                    -%}\n                  </drag-zoom-wrapper>\n                {% else %}\n                  {%- render 'product-media',\n                    media: media,\n                    sizes: '100vw',\n                    loading: 'lazy',\n                    is_main_product_media: forloop.first\n                  -%}\n                {% endif %}\n              </li>\n            {%- endfor -%}\n          </ul>\n        </dialog>\n      </zoom-dialog>\n    {%- endif -%}\n\n    {%- if first_3d_model -%}\n      <link\n        id=\"ModelViewerStyle\"\n        rel=\"stylesheet\"\n        href=\"https://cdn.shopify.com/shopifycloud/model-viewer-ui/assets/v1.0/model-viewer-ui.css\"\n        media=\"print\"\n        onload=\"this.media='all'\"\n      >\n      <script>\n        window.ProductModel = {\n          loadShopifyXR() {\n            Shopify.loadFeatures([\n              {\n                name: 'shopify-xr',\n                version: '1.0',\n                onLoad: this.setupShopifyXR.bind(this),\n              },\n            ]);\n          },\n\n          setupShopifyXR(errors) {\n            if (errors) return;\n\n            if (!window.ShopifyXR) {\n              document.addEventListener('shopify_xr_initialized', () => this.setupShopifyXR());\n              return;\n            }\n\n            document.querySelectorAll('[id^=\"ProductModelJSON-\"]').forEach((modelJSON) => {\n              window.ShopifyXR.addModels(JSON.parse(modelJSON.textContent));\n              modelJSON.remove();\n            });\n            window.ShopifyXR.setupXRElements();\n          },\n        };\n\n        window.ProductModel.loadShopifyXR();\n      </script>\n    {%- endif -%}\n  </media-gallery>\n{% endif %}\n\n{% stylesheet %}\n  .dialog-zoomed-gallery__dialog {\n    background-color: var(--color-background);\n  }\n\n  .dialog-zoomed-gallery {\n    cursor: zoom-out;\n  }\n\n  .dialog--preloading {\n    opacity: 0;\n  }\n\n  .product-media__drag-zoom-wrapper {\n    aspect-ratio: inherit;\n    min-height: inherit;\n    min-width: inherit;\n    display: inherit;\n    flex: inherit;\n  }\n\n  @media screen and (max-width: 749px) {\n    .dialog-zoomed-gallery {\n      /* Prevent scroll wheel or swipe scrolling */\n      overscroll-behavior: none;\n      scrollbar-width: none;\n      display: flex;\n      scroll-snap-type: x mandatory;\n      overflow-x: hidden;\n      scroll-behavior: smooth;\n      height: 100%;\n\n      &::-webkit-scrollbar {\n        display: none;\n      }\n    }\n\n    .dialog-zoomed-gallery .product-media-container {\n      flex: 0 0 100%;\n      scroll-snap-align: start;\n      position: relative;\n    }\n\n    .dialog-zoomed-gallery .product-media-container--image .product-media {\n      aspect-ratio: auto;\n      height: 100%;\n      width: 100%;\n      overflow: hidden;\n    }\n\n    .dialog-zoomed-gallery .product-media-container--video,\n    .dialog-zoomed-gallery .product-media-container--external_video {\n      align-content: center;\n    }\n\n    .dialog-zoomed-gallery\n      :is(.product-media-container--video, .product-media-container--external_video, .product-media-container--model)\n      .product-media {\n      aspect-ratio: auto;\n      align-items: center;\n      height: 100%;\n\n      .product-media__image {\n        height: 100%;\n      }\n    }\n\n    .product-media__drag-zoom-wrapper {\n      display: flex;\n      aspect-ratio: auto;\n      height: 100%;\n      width: 100%;\n      overflow: scroll;\n      scrollbar-width: none;\n      justify-content: center;\n\n      &::-webkit-scrollbar {\n        display: none;\n      }\n    }\n\n    .product-media__drag-zoom-wrapper .product-media__image {\n      --product-media-fit: contain;\n\n      object-fit: var(--product-media-fit);\n      overflow: hidden;\n      transform: scale(var(--drag-zoom-scale))\n        translate(var(--drag-zoom-translate-x, 0), var(--drag-zoom-translate-y, 0));\n    }\n\n    .media-gallery--hint {\n      --slideshow-gap: var(--gap-2xs);\n\n      :not(.dialog-zoomed-gallery) > .product-media-container:not(:only-child) {\n        width: 90%;\n\n        .product-media img {\n          object-fit: cover;\n        }\n      }\n    }\n  }\n\n  .dialog-zoomed-gallery__close-button {\n    color: #fff;\n    mix-blend-mode: difference;\n    z-index: var(--layer-raised);\n  }\n\n  .media-gallery__mobile-controls {\n    grid-area: auto;\n  }\n\n  /* Mobile thumbnails styling */\n  @media screen and (max-width: 749px) {\n    .media-gallery__mobile-controls[thumbnails] {\n      --thumbnail-width: 44px;\n    }\n\n    .media-gallery__mobile-controls[thumbnails] .slideshow-controls__thumbnail {\n      width: var(--thumbnail-width);\n      height: auto;\n    }\n  }\n\n  .dialog-zoomed-gallery .product-media-container--zoomable.product-media-container--image {\n    cursor: zoom-out;\n  }\n\n  .product-media-container--zoomable.product-media-container--image {\n    cursor: zoom-in;\n  }\n\n  .dialog-zoomed-gallery .product-media-container--video deferred-media,\n  .dialog-zoomed-gallery .product-media-container--external_video deferred-media {\n    height: auto;\n    aspect-ratio: var(--ratio);\n  }\n\n  .dialog-zoomed-gallery .product-media-container--model .product-media__image {\n    /* Make the height match the height of the model-viewer */\n    height: 100vh;\n  }\n\n  .dialog-zoomed-gallery__dialog {\n    view-transition-name: zoom-dialog-ui;\n  }\n\n  :root:active-view-transition .dialog-zoomed-gallery__dialog {\n    background-color: transparent;\n  }\n\n  ::view-transition-group(zoom-dialog-ui) {\n    z-index: calc(var(--layer-overlay) + 1);\n  }\n\n  ::view-transition-old(gallery-item-open),\n  ::view-transition-new(gallery-item-open) {\n    animation-timing-function: step-start;\n  }\n\n  ::view-transition-old(gallery-item-close),\n  ::view-transition-new(gallery-item-close) {\n    animation-timing-function: step-end;\n  }\n\n  @media screen and (min-width: 750px) {\n    :root:active-view-transition .product-media__image {\n      background-color: transparent;\n    }\n  }\n\n  ::view-transition-group(gallery-item-open),\n  ::view-transition-group(gallery-item-close) {\n    z-index: var(--layer-overlay);\n    border-radius: var(--gallery-media-border-radius);\n    overflow: clip;\n  }\n\n  ::view-transition-group(gallery-item-open) {\n    animation-timing-function: var(--spring-d300-b0-easing);\n    animation-duration: var(--spring-d300-b0-duration);\n  }\n\n  ::view-transition-group(gallery-item-close) {\n    animation-timing-function: var(--spring-d220-b0-easing);\n    animation-duration: var(--spring-d220-b0-duration);\n  }\n\n  @media screen and (max-width: 749px) {\n    ::view-transition-group(gallery-item-open),\n    ::view-transition-group(gallery-item-close) {\n      animation-timing-function: step-start;\n      animation-duration: 0.1s;\n    }\n\n    ::view-transition-new(gallery-item-open) {\n      animation: fade-in var(--spring-d180-b0-duration) var(--spring-d180-b0-easing) forwards;\n      animation-timing-function: var(--spring-d180-b0-easing);\n      animation-duration: var(--spring-d180-b0-duration);\n    }\n\n    ::view-transition-old(gallery-item-close) {\n      animation: fade-out 0.08s linear forwards;\n    }\n  }\n\n  @keyframes fade-in {\n    from {\n      scale: 0.98;\n      opacity: 0.8;\n    }\n  }\n\n  @keyframes fade-out {\n    to {\n      opacity: 0;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/product-media.liquid",
    "content": "{%- doc -%}\n  Renders a product media component.\n\n  @param {object} media - The product media object.\n  @param {boolean} [preview_image_only] - Renders only the preview image without controls.\n  @param {string} [widths] - Image widths for responsive images.\n  @param {string} [sizes] - Image sizes for responsive images.\n  @param {string} [loading] - The loading attribute for the image.\n  @param {object} [block] - The block object.\n  @param {object} [section] - The section object.\n  @param {object} [selected_product] - The currently selected product.\n  @param {boolean} [first_3d_model] - Indicates if this is the first 3D model.\n  @param {boolean} [is_main_product_media] - Indicates if this is the main product image.\n  @param {string} [image_ref] - Optional ref attribute for the image element.\n\n  @example\n  {% render 'product-media', media: media, preview_image_only: false, loading: 'lazy' %}\n{%- enddoc -%}\n\n{% liquid\n  assign widths = widths | default: '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n  assign ref_image_to_transition = ''\n  if settings.transition_to_main_product\n    assign ref_image_to_transition = 'imagesToTransition[]'\n  endif\n%}\n\n<div\n  class=\"product-media\"\n  style=\"--ratio: {{ media.aspect_ratio }}\"\n  data-media-id=\"{{ media.id }}\"\n>\n  {% liquid\n    assign high_res_url = media.preview_image | image_url: width: 3840\n    assign fetch_priority = 'auto'\n    if is_main_product_media\n      assign fetch_priority = 'high'\n    endif\n    assign focal_point_style = '--focal-point: ' | append: media.presentation.focal_point | append: ';'\n  %}\n  {{\n    media.preview_image\n    | image_url: width: 3840\n    | image_tag:\n      widths: widths,\n      alt: media.alt,\n      sizes: sizes,\n      loading: loading,\n      class: 'product-media__image',\n      ref: ref_image_to_transition,\n      data_max_resolution: high_res_url,\n      fetchpriority: fetch_priority,\n      style: focal_point_style,\n      ref: image_ref\n  }}\n\n  {% unless preview_image_only %}\n    {%- case media.media_type -%}\n      {% when 'model' %}\n        <product-model\n          data-media-id=\"{{ media.id }}\"\n        >\n          <button\n            class=\"button deferred-media__poster-button button-unstyled\"\n            ref=\"deferredMediaPlayButton\"\n            on:click=\"/showDeferredMedia\"\n          >\n            {{\n              media.preview_image\n              | image_url: width: 3840\n              | image_tag:\n                widths: widths,\n                alt: media.alt,\n                sizes: sizes,\n                loading: loading,\n                class: 'deferred-media__poster-image'\n            }}\n            <span class=\"deferred-media__poster-icon\">\n              <span class=\"visually-hidden\">{{ 'accessibility.play_model' | t }}</span>\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                aria-hidden=\"true\"\n                focusable=\"false\"\n                class=\"icon\"\n                fill=\"none\"\n                viewBox=\"0 0 18 21\"\n              >\n                {% render 'icon', icon: '3d-model' %}\n              </svg>\n            </span>\n          </button>\n\n          <template>\n            {% # Should I be using media_tag here instead like on Dawn? 🤔 %}\n            {{ media | model_viewer_tag }}\n          </template>\n        </product-model>\n        <button\n          class=\"button button-secondary button-shopify-xr\"\n          type=\"button\"\n          data-shopify-xr\n          data-shopify-model3d-id=\"{{ media.id }}\"\n          data-shopify-title=\"{{ selected_product.title | escape }}\"\n          data-shopify-xr-hidden\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            aria-hidden=\"true\"\n            focusable=\"false\"\n            class=\"icon icon-default\"\n            fill=\"none\"\n            viewBox=\"0 0 18 21\"\n          >\n            {% render 'icon', icon: '3d-model' %}\n          </svg>\n          {{ 'actions.view_in_your_space' | t }}\n        </button>\n\n        {%- if first_3d_model -%}\n          <script\n            type=\"application/json\"\n            id=\"ProductModelJSON-{{ selected_product.id }}\"\n          >\n            {{ selected_product.media | where: 'media_type', 'model' | json }}\n          </script>\n        {%- endif -%}\n      {% when 'video', 'external_video' %}\n        {%- render 'video',\n          video: media,\n          video_loop: block.settings.video_loop,\n          widths: widths,\n          sizes: sizes,\n          loading: loading,\n          disable_controls: true,\n          section_id: section.id\n        -%}\n    {% endcase %}\n  {% endunless %}\n</div>\n\n{% stylesheet %}\n  .product-media {\n    aspect-ratio: var(--gallery-aspect-ratio, var(--ratio));\n    min-height: 0;\n    min-width: 0;\n  }\n\n  .product-media__image {\n    object-position: var(--focal-point, center center);\n  }\n\n  /*** Media border-radius feature ****/\n  @media screen and (min-width: 750px) {\n    .media-gallery--carousel slideshow-container,\n    .media-gallery--grid .product-media > * {\n      border-radius: var(--media-radius, 0);\n      overflow: hidden;\n    }\n\n    /* When the CAROUSEL is on the LEFT side */\n    .product-information:not(.product-information--media-right)\n      .media-gallery--carousel.media-gallery--extend\n      slideshow-container {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n    }\n\n    /* When the CAROUSEL is on the RIGHT side */\n    .product-information.product-information--media-right\n      .media-gallery--carousel.media-gallery--extend\n      slideshow-container {\n      border-top-right-radius: 0;\n      border-bottom-right-radius: 0;\n    }\n\n    /* When the GRID is on the LEFT side */\n    .product-information:not(.product-information--media-right) {\n      /* One column */\n      .media-gallery--grid.media-gallery--extend:not(.media-gallery--two-column) .product-media > *,\n      /* Two column, small first image */\n      .media-gallery--grid.media-gallery--extend.media-gallery--two-column:not(.media-gallery--large-first-image)\n        .product-media-container:nth-of-type(odd)\n        .product-media\n        > *,\n      /* Two column, large first image */\n      .media-gallery--grid.media-gallery--extend.media-gallery--two-column.media-gallery--large-first-image\n        .product-media-container:is(:first-of-type, :nth-of-type(even))\n        .product-media\n        > * {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n      }\n    }\n\n    /* When the GRID is on the RIGHT side */\n    .product-information.product-information--media-right {\n      /* One column */\n      .media-gallery--grid.media-gallery--extend:not(.media-gallery--two-column) .product-media > *,\n      /* Two column, small first image */\n      .media-gallery--grid.media-gallery--extend.media-gallery--two-column:not(.media-gallery--large-first-image)\n        .product-media-container:nth-of-type(even)\n        .product-media\n        > *,\n      /* Two column, large first image */\n      .media-gallery--grid.media-gallery--extend.media-gallery--two-column.media-gallery--large-first-image\n        .product-media-container:is(:first-of-type, :nth-of-type(odd))\n        .product-media\n        > * {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n      }\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/quantity-selector.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render the quantity selector for a product.\n  It is used in the product page, the cart page and the quick order list.\n\n  @param {object} product - the product to render the quantity selector for\n  @param {object} [variant] - the specific variant to use (for cart items), if not provided uses selected_or_first_available_variant\n  @param {number} [in_cart_quantity] - the quantity in the cart to set the input value\n  @param {number} [line_index] - the index of the forloop representing the line on which the quantity selector is rendered\n  @param {string} [class] - custom class for the quantity selector, optional\n  @param {boolean} [can_update_quantity] - whether the quantity can be updated, defaults to true\n  @param {number} [min] - override the minimum quantity (e.g., 0 for quick order list)\n{%- enddoc -%}\n\n{% liquid\n  if variant\n    assign variant = variant\n  else\n    assign variant = product.selected_or_first_available_variant\n  endif\n  assign component_name = 'quantity-selector-component'\n  if line_index != null\n    assign component_name = 'cart-quantity-selector-component'\n  endif\n\n  if min != null\n    assign min_quantity = min\n  else\n    assign min_quantity = variant.quantity_rule.min | default: 1\n  endif\n%}\n\n<div\n  class=\"quantity-selector-wrapper\"\n  ref=\"quantitySelectorWrapper\"\n>\n  <{{ component_name }}\n    class=\"quantity-selector{% if class %} {{ class }}{% endif %}\"\n    data-variant-id=\"{{ variant.id }}\"\n    {% if line_index == null %}\n      {{- block.shopify_attributes -}}\n      ref=\"quantitySelector\"\n    {% else %}\n      ref=\"quantitySelectors[]\"\n    {% endif %}\n  >\n    <button\n      class=\"button quantity-minus button-unstyled\"\n      type=\"button\"\n      name=\"minus\"\n      on:click=\"/decreaseQuantity\"\n      ref=\"minusButton\"\n      {% if can_update_quantity == false %}\n        disabled\n      {% endif %}\n    >\n      <span class=\"visually-hidden\">{{ 'accessibility.decrease_quantity' | t }}</span\n      ><span class=\"svg-wrapper icon-plus\">\n        {{- 'icon-minus.svg' | inline_asset_content -}}\n      </span>\n    </button>\n    <input\n      type=\"number\"\n      name=\"{% if line_index %}updates[]{% else %}quantity{% endif %}\"\n      value=\"{{ in_cart_quantity | default: variant.quantity_rule.min | default: 1 }}\"\n      data-cart-quantity=\"{{ cart | item_count_for_variant: variant.id }}\"\n      min=\"{{ min_quantity }}\"\n      data-min=\"{{ variant.quantity_rule.min | default: 1 }}\"\n      on:blur=\"/setQuantity\"\n      on:focus=\"/selectInputValue\"\n      ref=\"quantityInput\"\n      aria-label=\"{{ 'accessibility.quantity' | t }}\"\n      {% if line_index %}\n        data-cart-line=\"{{ line_index | plus: 1 }}\"\n      {% endif %}\n      {% if variant.quantity_rule.max %}\n        max=\"{{ variant.quantity_rule.max }}\"\n      {% endif %}\n      step=\"{{ variant.quantity_rule.increment | default: 1 }}\"\n      {% if can_update_quantity == false or variant.available == false %}\n        disabled\n      {% endif %}\n    >\n    <button\n      class=\"button quantity-plus button-unstyled\"\n      type=\"button\"\n      name=\"plus\"\n      on:click=\"/increaseQuantity\"\n      ref=\"plusButton\"\n      {% if can_update_quantity == false %}\n        disabled\n      {% endif %}\n    >\n      <span class=\"visually-hidden\">{{ 'accessibility.increase_quantity' | t }}</span\n      ><span class=\"svg-wrapper icon-plus\">\n        {{- 'icon-plus.svg' | inline_asset_content -}}\n      </span>\n    </button>\n  </{{ component_name }}>\n\n  {%- if line_index == null -%}\n    {%- liquid\n      # Check if variant has volume pricing\n      assign has_volume_pricing = false\n      if product.quantity_price_breaks_configured? and variant.quantity_price_breaks.size > 0\n        assign has_volume_pricing = true\n      endif\n    -%}\n\n    {%- if has_volume_pricing -%}\n      {%- # Case: Volume pricing exists - show \"at price / ea\" -%}\n      {%- liquid\n        # Determine if currency code should be shown on product pages\n        assign use_currency = settings.currency_code_enabled_product_pages\n      -%}\n      {%- capture price_breaks_json -%}\n        [{%- for price_break in variant.quantity_price_breaks -%}{%- unless forloop.first -%},{%- endunless -%}{%- if use_currency -%}{\"quantity\":{{ price_break.minimum_quantity }},\"price\":{{ price_break.price | money_with_currency | json }}}{%- else -%}{\"quantity\":{{ price_break.minimum_quantity }},\"price\":{{ price_break.price | money | json }}}{%- endif -%}{%- endfor -%}]\n      {%- endcapture -%}\n\n      {%- liquid\n        # Calculate initial display price\n        assign cart_qty = cart | item_count_for_variant: variant.id\n        assign current_qty = cart_qty | plus: variant.quantity_rule.min\n        if cart_qty > 0\n          assign current_qty = cart_qty | plus: variant.quantity_rule.increment\n        endif\n\n        assign display_price = variant.price\n        for price_break in variant.quantity_price_breaks\n          if current_qty >= price_break.minimum_quantity\n            assign display_price = price_break.price\n            break\n          endif\n        endfor\n      -%}\n\n      <price-per-item\n        class=\"price-per-item\"\n        data-variant-id=\"{{ variant.id }}\"\n        data-variant-price=\"{%- if use_currency -%}{{ variant.price | money_with_currency | escape }}{%- else -%}{{ variant.price | money | escape }}{%- endif -%}\"\n        data-min-quantity=\"{{ variant.quantity_rule.min | default: 1 }}\"\n        data-price-breaks=\"{{ price_breaks_json | strip | escape }}\"\n        data-at-text=\"{{ 'content.price_at' | t | escape }}\"\n        data-each-text=\"{{ 'content.each_abbreviation' | t | escape }}\"\n        ref=\"pricePerItem\"\n      >\n        <span\n          class=\"price-per-item__text\"\n          ref=\"pricePerItemText\"\n        >\n          {{- 'content.price_at' | t }}\n          {%- if use_currency -%}\n            {{- display_price | money_with_currency -}}\n          {%- else -%}\n            {{- display_price | money -}}\n          {%- endif -%}\n          /\n          {{- 'content.each_abbreviation' | t }}\n        </span>\n      </price-per-item>\n    {%- endif -%}\n  {%- endif -%}\n</div>\n\n{% stylesheet %}\n  .quantity-selector-wrapper {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: calc(var(--gap-sm) / 2);\n\n    @media screen and (min-width: 750px) {\n      gap: var(--gap-sm);\n    }\n  }\n\n  .price-per-item {\n    display: block;\n    color: var(--color-foreground);\n    font-size: var(--font-size--sm);\n    font-weight: normal;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/quick-add-modal.liquid",
    "content": "<quick-add-dialog id=\"quick-add-dialog\">\n  <dialog\n    class=\"quick-add-modal dialog-modal color-{{ settings.popover_color_scheme }}\"\n    ref=\"dialog\"\n    scroll-lock\n  >\n    <button\n      ref=\"closeButton\"\n      on:click=\"/closeDialog\"\n      class=\"button button-unstyled close-button quick-add-modal__close\"\n      aria-label=\"{{ 'accessibility.close_dialog' | t }}\"\n    >\n      {{- 'icon-close.svg' | inline_asset_content -}}\n    </button>\n\n    <div\n      id=\"quick-add-modal-content\"\n      class=\"quick-add-modal__content\"\n    ></div>\n  </dialog>\n</quick-add-dialog>\n\n{% stylesheet %}\n  #quick-add-dialog {\n    display: contents;\n  }\n\n  @media screen and (min-width: 750px) {\n    .quick-add-modal {\n      width: var(--quick-add-modal-width);\n      height: var(--quick-add-modal-height);\n      max-width: none;\n    }\n  }\n\n  .quick-add-modal {\n    padding: 0;\n    border: var(--style-border-popover);\n    overflow: hidden;\n    box-shadow: 0 5px 30px rgb(0 0 0 / var(--opacity-15));\n\n    @media screen and (max-width: 749px) {\n      position: fixed;\n      margin: auto 0 0 0;\n      min-height: unset;\n      max-width: 100%;\n      border-radius: 0;\n      overflow: clip;\n      height: fit-content;\n    }\n  }\n\n  .quick-add-modal[open] {\n    @media screen and (max-width: 750px) {\n      border-top-left-radius: var(--style-border-radius-popover);\n      border-top-right-radius: var(--style-border-radius-popover);\n    }\n  }\n\n  .quick-add-modal[open] {\n    @media screen and (min-width: 750px) {\n      display: flex;\n    }\n  }\n\n  .quick-add-modal .view-more-details__wrapper {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .quick-add-modal[open] {\n    animation: modalSlideInTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  .quick-add-modal.dialog-closing {\n    animation: modalSlideOutTop var(--animation-speed) var(--animation-easing) forwards;\n  }\n\n  .quick-add-modal__close {\n    position: absolute;\n    top: var(--margin-2xs);\n    right: var(--margin-2xs);\n    transition: transform 0.15s var(--animation-timing-bounce);\n    z-index: var(--layer-raised);\n    overflow: visible;\n    transform-origin: center;\n  }\n\n  .quick-add-modal__close:active {\n    transform: scale(0.99) translateY(1px);\n  }\n\n  .quick-add-modal__close {\n    &:focus-visible {\n      outline: none;\n    }\n\n    &:focus-visible::after {\n      content: '';\n      position: absolute;\n      inset: 0;\n      border-radius: calc(var(--style-border-radius-popover) - var(--margin-2xs));\n      outline: var(--focus-outline-width) solid currentColor;\n    }\n  }\n\n  .quick-add-modal__content {\n    display: grid;\n    grid-template-columns: repeat(7, 1fr);\n    grid-template-rows: 100% 1fr;\n    position: relative;\n    overflow-y: auto;\n    max-height: 100vh;\n    flex-grow: 1;\n\n    @media screen and (max-width: 749px) {\n      grid-template-columns: repeat(4, 1fr);\n      grid-template-rows: auto;\n      padding-inline: var(--padding-xl);\n      padding-block: var(--padding-xl);\n      gap: var(--gap-lg);\n      flex: 1;\n      min-height: 0;\n      overflow-y: auto;\n      height: auto; /* Prevent a bug in Safari where height:fit-content is not respected */\n      max-height: 100vh;\n    }\n  }\n\n  .quick-add-modal__content .media-gallery--grid .media-gallery__grid {\n    grid-template-columns: 1fr;\n  }\n\n  .quick-add-modal__content .media-gallery--grid.media-gallery--two-column .product-media-container:first-child {\n    grid-column: auto;\n  }\n\n  .quick-add-modal__content {\n    /* One column */\n    .media-gallery--grid:not(.media-gallery--two-column) .product-media > *,\n      /* Two column, small first image */\n      .media-gallery--grid.media-gallery--two-column:not(.media-gallery--large-first-image)\n      .product-media-container:nth-of-type(odd)\n      .product-media > *,\n      /* Two column, large first image */\n      .media-gallery--grid.media-gallery--two-column.media-gallery--large-first-image\n        .product-media-container:is(:first-of-type, :nth-of-type(even))\n        .product-media > *,\n        /* Carousel */\n      .media-gallery--carousel slideshow-container {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n    }\n  }\n\n  .quick-add-modal__content .view-more-details__wrapper {\n    display: flex;\n    justify-content: flex-start;\n    width: 100%;\n  }\n\n  .view-more-details__wrapper .view-more-details {\n    display: flex;\n    align-items: center;\n    width: fit-content;\n  }\n\n  .quick-add-modal__content .product-header {\n    @media screen and (max-width: 749px) {\n      display: flex;\n      flex-direction: column;\n      grid-column: 2 / -1;\n      grid-row: 1;\n      padding-right: var(--padding-2xl);\n    }\n  }\n\n  .quick-add-modal__content .product-header a:not(product-price *) {\n    @media screen and (max-width: 749px) {\n      font-size: var(--font-size--md);\n      font-weight: 500;\n      color: inherit;\n      width: fit-content;\n    }\n  }\n\n  .quick-add-modal__content variant-picker,\n  .quick-add-modal__content product-form-component {\n    @media screen and (max-width: 749px) {\n      grid-column: 1 / -1;\n    }\n  }\n\n  .quick-add-modal__content .product-media-container__zoom-button {\n    cursor: default;\n  }\n\n  .quick-add-modal__content .product-details {\n    grid-column: 4 / -1;\n    grid-row: 1 / span 2;\n    display: flex;\n    flex-direction: column;\n    justify-content: stretch;\n    height: 100%;\n    min-height: 0;\n    overflow-y: auto;\n    position: relative;\n\n    dialog[open] & {\n      animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both;\n      animation-delay: 0.1s;\n    }\n\n    @media screen and (max-width: 749px) {\n      grid-column: 2 / span 2;\n      grid-row: span 1;\n      max-height: 100%;\n      height: 100%;\n    }\n  }\n\n  @property --quick-add-modal-mask-start {\n    syntax: '<length>';\n    initial-value: 0px;\n    inherits: false;\n  }\n\n  @property --quick-add-modal-mask-end {\n    syntax: '<length>';\n    initial-value: 0px;\n    inherits: true;\n  }\n\n  @keyframes detect-scroll {\n    from,\n    to {\n      --can-scroll: ;\n    }\n  }\n\n  @supports (animation-timeline: scroll(self)) {\n    dialog[open] .quick-add-modal__content .product-details {\n      mask-image: linear-gradient(to bottom, transparent 0%, #000 var(--quick-add-modal-mask-start), #000 100%);\n      animation: 0.3s var(--animation-timing-fade-in) 0.1s both fadeSlideIn, scrollStart 1s linear both,\n        scrollEnd 1s linear both, detect-scroll 1ms linear none;\n      animation-timeline: auto, scroll(self), scroll(self), scroll(self);\n      animation-range: normal, 0px 48px, calc(100% - 48px) 100%, 0% 100%;\n    }\n  }\n\n  @keyframes scrollStart {\n    from {\n      --quick-add-modal-mask-start: 0px;\n    }\n    to {\n      --quick-add-modal-mask-start: 48px;\n    }\n  }\n\n  @keyframes scrollEnd {\n    from {\n      --quick-add-modal-mask-end: 0px;\n    }\n    to {\n      --quick-add-modal-mask-end: 48px;\n    }\n  }\n\n  .quick-add-modal__content .product-details > .group-block {\n    flex-grow: 1;\n    width: auto;\n  }\n\n  .quick-add-modal__content > * {\n    min-height: 0;\n  }\n\n  .quick-add-modal__content .product-details :is(.view-product-title, .buy-buttons-block) {\n    flex: 0 0 auto;\n  }\n  .quick-add-modal__content .product-details :is(.buy-buttons-block) {\n    margin-top: auto;\n    position: sticky;\n    bottom: 0;\n    padding-bottom: var(--padding-3xl);\n    background-color: var(--color-background);\n    z-index: var(--layer-raised);\n\n    &::before {\n      --quick-add-modal-mask-end-progressive-enhanced: 0px;\n\n      position: absolute;\n      content: '';\n      display: block;\n      inset: auto 0 100% 0;\n      pointer-events: none;\n      height: min(var(--gap-2xl), var(--gap));\n      background-color: inherit;\n      mask-image: linear-gradient(\n        to top,\n        #000 0%,\n        #000 calc(var(--gap-2xs)),\n        transparent calc(100% - var(--quick-add-modal-mask-end-progressive-enhanced)),\n        transparent\n      );\n    }\n  }\n\n  @supports (animation-timeline: scroll(self)) {\n    .quick-add-modal__content .product-details :is(.buy-buttons-block)::before {\n      --mask-if-scroll: var(--can-scroll) var(--quick-add-modal-mask-end);\n      --mask-if-no-scroll: 48px;\n      --quick-add-modal-mask-end-progressive-enhanced: var(--mask-if-scroll, var(--mask-if-no-scroll));\n      height: calc(var(--gap-2xs) + 48px);\n    }\n  }\n\n  .quick-add-modal__content .product-details .variant-picker {\n    flex: 0 0 auto;\n\n    padding-block: min(var(--gap-2xl), var(--gap));\n    margin-block-end: calc(var(--focus-outline-offset) + var(--focus-outline-width));\n  }\n\n  .quick-add-modal__content .variant-option--swatches {\n    padding-inline-start: var(--padding-2xs);\n  }\n\n  .quick-add-modal__content .variant-option--swatches legend {\n    margin-inline-start: calc(-1 * var(--padding-2xs));\n  }\n\n  .quick-add-modal__content:not(:has(.product-information__media)) .product-details {\n    grid-column: 1 / -1;\n  }\n\n  .quick-add-modal__content .view-product-title {\n    display: flex;\n    padding-block: 0;\n    margin-block-end: 12px;\n\n    /* Prevent overlap between title and close button */\n    padding-inline-end: calc(var(--padding-2xl) + calc(var(--minimum-touch-target) / 2));\n  }\n\n  .quick-add-modal__content .view-product-title a {\n    color: inherit;\n    text-decoration: none;\n    text-align: left;\n    font-size: var(--font-size--2xl);\n    font-weight: 600;\n    line-height: 1.2;\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: 2;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    transition: color 0.2s var(--animation-easing);\n  }\n\n  .quick-add-modal__content .product-details product-price {\n    --text-align: left;\n  }\n\n  .quick-add-modal__content .product-details product-price.text-block--align-center {\n    margin-inline: 0;\n  }\n\n  .quick-add-modal__content .product-details product-price.text-center {\n    --text-align: left;\n  }\n\n  .quick-add-modal__content .product-details product-price > * {\n    text-align: left;\n  }\n\n  .quick-add-modal__content\n    .product-details\n    *:not(\n      .group-block,\n      .group-block-content,\n      .buy-buttons-block,\n      .buy-buttons-block *,\n      .view-product-title,\n      .view-product-title *,\n      variant-picker,\n      variant-picker *,\n      product-price,\n      product-price *,\n      product-inventory,\n      product-inventory *,\n      .view-more-details__wrapper,\n      .view-more-details__wrapper *\n    ) {\n    @media screen and (min-width: 750px) {\n      /* stylelint-disable-next-line declaration-no-important */\n      display: none !important;\n    }\n  }\n\n  .quick-add-modal__content\n    .group-block:not(\n      :has(\n          .buy-buttons-block,\n          .buy-buttons-block *,\n          .view-product-title,\n          .view-product-title *,\n          variant-picker,\n          variant-picker *,\n          product-price,\n          product-price *,\n          product-inventory,\n          product-inventory *,\n          .view-more-details__wrapper,\n          .view-more-details__wrapper *\n        ),\n      .buy-buttons-block\n    ) {\n    display: none;\n  }\n\n  @media screen and (min-width: 750px) {\n    .quick-add-modal__content .group-block-content {\n      gap: 0;\n    }\n\n    .quick-add-modal__content .media-gallery__grid {\n      gap: min(var(--gap-2xs), var(--image-gap));\n      border-radius: var(--style-border-radius-popover, 0);\n    }\n\n    .quick-add-modal__content .media-gallery--grid .product-media img {\n      border-radius: 0;\n    }\n  }\n\n  .quick-add-modal__content .product-details > .group-block {\n    padding-block: var(--padding-3xl) 0;\n  }\n\n  .quick-add-modal__content :where(.product-details > .group-block > .group-block-content > *) {\n    padding-inline: var(--padding-3xl);\n  }\n\n  .quick-add-modal__content slideshow-slide:not([aria-hidden='false']) {\n    content-visibility: auto;\n  }\n\n  .quick-add-modal__content .product-information__media {\n    width: 100%;\n    grid-column: 1 / span 1;\n    grid-row: 1;\n    position: relative;\n    top: 0;\n    animation: fadeIn 0.4s var(--animation-timing-fade-in) both;\n\n    @media screen and (min-width: 750px) {\n      position: sticky;\n      grid-column: 1 / 4;\n      width: var(--quick-add-modal-gallery-width);\n      overflow-y: auto;\n      -ms-overflow-style: none;\n      scrollbar-width: none;\n    }\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n\n  .quick-add-modal__content .product-information__media media-gallery {\n    pointer-events: none;\n\n    @media screen and (min-width: 750px) {\n      position: absolute;\n      inset: 0;\n    }\n  }\n\n  .quick-add-modal media-gallery {\n    padding: 0;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-arrows {\n    display: none;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-container {\n    display: block;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slides {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-2xs);\n    overflow: visible;\n    scroll-snap-type: none;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slide {\n    width: 100%;\n    flex: none;\n    scroll-snap-align: unset;\n    position: relative;\n    transform: none;\n    opacity: 1;\n    visibility: visible;\n    transition: opacity 0.3s var(--animation-easing);\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slide[aria-hidden='true'] {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slide:nth-child(1) {\n    animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slide:nth-child(2) {\n    animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both;\n    animation-delay: 0.05s;\n  }\n\n  .quick-add-modal__content .product-information__media slideshow-slide:nth-child(3) {\n    animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both;\n    animation-delay: 0.1s;\n  }\n\n  .quick-add-modal__content .product-information__media :is(slideshow-controls, slideshow-controls[thumbnails]) {\n    display: none;\n  }\n\n  .quick-add-modal__content .sticky-content,\n  .quick-add-modal__content .sticky-content--desktop {\n    top: 0;\n  }\n\n  .quick-add-modal__content .text-block.rte:not(product-price),\n  .quick-add-modal__content .view-more-details__wrapper {\n    display: none;\n  }\n\n  @keyframes fadeSlideIn {\n    from {\n      opacity: 0;\n      transform: translateY(10px);\n    }\n\n    to {\n      opacity: 1;\n      transform: translateY(0);\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/quick-add.liquid",
    "content": "{%- doc -%}\n  Renders a quick add component.\n\n  @param {object} product - The product object\n  @param {string} section_id - The section ID\n  @param {object} [block] - The block object\n  @param {string} [color_scheme] - The color scheme to use\n{%- enddoc -%}\n\n{% liquid\n  assign product_form_id = 'QuickAdd-ProductForm-' | append: product.id | append: '-' | append: block.id\n  assign add_to_cart_text = 'actions.add' | t\n  assign choose_options_text = 'actions.choose' | t\n  assign color_scheme = color_scheme | default: settings.quick_add_color_scheme\n\n  # Logic to determine which variant to use (matching swatch selection logic from product-card)\n  assign variant = product.selected_or_first_available_variant\n\n  if variant.available\n    assign can_add_to_cart = true\n  else\n    assign can_add_to_cart = false\n  endif\n\n  assign quick_add_button = 'choose'\n  if product.variants_count == 1 or product.options.size == 1 and product.selected_variant\n    assign quick_add_button = 'add'\n  endif\n%}\n\n<quick-add-component\n  class=\"quick-add color-{{ color_scheme }} \"\n  ref=\"quickAdd\"\n  data-product-title=\"{{ product.title }}\"\n  data-quick-add-button=\"{{ quick_add_button }}\"\n  data-product-options-count=\"{{ product.options.size }}\"\n>\n  <product-form-component\n    data-section-id=\"{{ section_id }}\"\n    data-product-id=\"{{ product.id }}\"\n    on:submit=\"/handleSubmit\"\n    class=\"quick-add__product-form-component\"\n  >\n    <div\n      class=\"visually-hidden\"\n      aria-live=\"assertive\"\n      role=\"status\"\n      aria-atomic=\"true\"\n      ref=\"liveRegion\"\n    ></div>\n    {%- form 'product', product, id: product_form_id, novalidate: 'novalidate', data-type: 'add-to-cart-form' -%}\n      <input\n        type=\"hidden\"\n        name=\"id\"\n        ref=\"variantId\"\n        value=\"{{ variant.id }}\"\n        {% if variant.available == false %}\n          disabled\n        {% endif %}\n      >\n      <input\n        type=\"hidden\"\n        name=\"quantity\"\n        value=\"{% if variant.quantity_rule.min %}{{ variant.quantity_rule.min }}{% else %}1{% endif %}\"\n      >\n      {% comment %}\n        Both Add and Choose buttons are rendered in the DOM, but only one is shown based on the data-quick-add-button attribute.\n\n        Logic for Add vs. Choose buttons:\n          Display \"Add\" button and add directly to cart if:\n            - There is only one variant on the product\n            - There is only one product option, and it is displayed as swatches on the product card, and a swatch is selected\n          Display \"Choose\" button and show the quick-add modal if:\n            - There is only one product option, and it is displayed as swatches on the product card, and no swatch is selected\n            - There is more than one product option\n      {% endcomment %}\n      {% render 'add-to-cart-button',\n        add_to_cart_text: add_to_cart_text,\n        class: 'button quick-add__button quick-add__button--add add-to-cart-button',\n        can_add_to_cart: can_add_to_cart,\n        icon_only_on_mobile: true,\n        product: product\n      %}\n\n      <button\n        class=\"button quick-add__button quick-add__button--choose add-to-cart-button\"\n        {% comment %} type=\"submit\" is the default, so we explicitly set it to \"button\" to prevent the ProductFormComponent.handleSubmit from being triggered {% endcomment %}\n        type=\"button\"\n        name=\"add\"\n        on:click=\"quick-add-component/handleClick\"\n      >\n        <span\n          class=\"add-to-cart-text\"\n        >\n          {% comment %} split the icon and the text with a grid transition {% endcomment %}\n          <span\n            aria-hidden=\"true\"\n            class=\"svg-wrapper add-to-cart-icon\"\n          >\n            {{- 'icon-add-to-cart.svg' | inline_asset_content -}}\n          </span>\n          <span class=\"add-to-cart-text__content is-visually-hidden-mobile\">\n            <span>\n              {% comment %} use a double-nested span to bake the padding into the text {% endcomment %}\n              <span>\n                {{ choose_options_text }}\n              </span>\n            </span>\n          </span>\n        </span>\n      </button>\n    {%- endform -%}\n  </product-form-component>\n</quick-add-component>\n\n{% stylesheet %}\n  /* Quick Add */\n  .quick-add {\n    --quick-add-offset: var(--padding-sm);\n    --quick-add-right: calc(var(--quick-add-offset) + var(--padding-inline-end));\n    --quick-add-bottom: calc(var(--quick-add-offset) + var(--padding-block-end));\n\n    position: absolute;\n    inset: 0;\n    z-index: var(--layer-raised);\n    pointer-events: none;\n\n    @media screen and (min-width: 750px) {\n      --quick-add-offset: var(--padding-md);\n    }\n  }\n\n  .quick-add .variant-option__button-label input[data-option-available='false'] {\n    cursor: not-allowed;\n  }\n\n  .quick-add[class*='color-scheme-'] {\n    background-color: #0000;\n  }\n\n  product-card:is(:hover, :focus-within) .quick-add__button {\n    opacity: 1;\n  }\n\n  .quick-add__button {\n    display: var(--quick-add-mobile-display, none);\n    align-items: center;\n    background: linear-gradient(var(--color-background) 0 100%) padding-box;\n    padding: 0;\n    border-radius: 50px;\n    border: 2px solid hsl(0 0% 0% / 0.15);\n    height: var(--button-size-md);\n    cursor: pointer;\n    opacity: var(--quick-add-mobile-opacity, 0);\n    overflow: hidden;\n    color: var(--color-foreground);\n    pointer-events: all;\n    position: absolute;\n    right: max(var(--quick-add-right), calc((var(--border-radius) + var(--quick-add-right)) * (1 - cos(45deg))));\n    bottom: max(var(--quick-add-bottom), calc((var(--border-radius) + var(--quick-add-bottom)) * (1 - cos(45deg))));\n    backdrop-filter: blur(20px) saturate(180%);\n\n    &:hover {\n      scale: 1.03;\n\n      /* Hover stabilizer: extends hit area to maintain hover state */\n      &::before {\n        content: '';\n        position: absolute;\n        inset: -10px;\n        z-index: -1;\n      }\n    }\n\n    &:active {\n      scale: 0.99;\n    }\n\n    .quick-add[stay-visible] & {\n      display: grid;\n    }\n\n    @media screen and (min-width: 750px) {\n      display: var(--quick-add-display, flex);\n      opacity: 0;\n    }\n  }\n\n  .quick-add__button .add-to-cart-text {\n    background: var(--color-background);\n    overflow: hidden;\n    border-radius: 50px;\n    height: 100%;\n    gap: 0;\n  }\n\n  .quick-add__button .svg-wrapper .checkmark-burst {\n    width: 22px;\n    height: 22px;\n  }\n\n  .quick-add__button .add-to-cart-icon {\n    /* account for border width */\n    height: 100%;\n    width: calc(var(--button-size-md) - 4px);\n  }\n\n  .quick-add__button .add-to-cart-text__content {\n    display: grid;\n    grid-template-columns: 0fr;\n\n    & > span {\n      min-width: 0;\n\n      span {\n        padding-right: var(--padding-sm);\n        opacity: 0;\n        display: inline-block;\n        filter: blur(2px);\n        translate: 0.5ch 0;\n      }\n    }\n  }\n\n  .quick-add__button[data-added='true'] .add-to-cart-text {\n    animation-name: atc-fade-out;\n  }\n\n  .quick-add__button[data-added='true'] .add-to-cart-text--added {\n    translate: 0 0;\n    animation-name: atc-fade-in;\n  }\n\n  .quick-add__product-form-component {\n    height: 100%;\n  }\n\n  .quick-add__product-form-component .shopify-product-form {\n    display: flex;\n    justify-content: flex-end;\n    align-items: flex-end;\n    container-type: inline-size;\n    height: 100%;\n  }\n\n  .quick-add-modal .product-media {\n    width: 100%;\n    height: 100%;\n  }\n\n  .quick-add-modal deferred-media {\n    display: none;\n  }\n\n  .quick-add-modal .media-gallery--carousel slideshow-component {\n    --cursor: default;\n  }\n\n  .quick-add__button:is(:hover, :focus-visible) {\n    .add-to-cart-text__content {\n      grid-template-columns: 1fr;\n\n      span span {\n        opacity: 1;\n        translate: 0 0;\n        filter: blur(0);\n      }\n    }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .quick-add__button .add-to-cart-text__content {\n      grid-template-columns: 1fr;\n\n      span span {\n        opacity: 1;\n        translate: 0 0;\n        filter: blur(0);\n      }\n    }\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .quick-add__button {\n      transition-property: scale, translate, opacity;\n      transition-duration: var(--animation-speed);\n      transition-timing-function: var(--ease-out-cubic);\n    }\n\n    .quick-add__button:is(:hover, :focus-visible) {\n      .add-to-cart-text__content,\n      .add-to-cart-text__content span span {\n        transition-delay: var(--animation-speed);\n      }\n    }\n\n    .quick-add__button .add-to-cart-text__content {\n      transition-property: grid-template-columns;\n      transition-duration: var(--animation-speed);\n      transition-timing-function: var(--ease-out-cubic);\n\n      span span {\n        transition-property: opacity, filter, translate;\n        transition-duration: var(--animation-speed-slow);\n        transition-timing-function: var(--ease-out-quad);\n      }\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/resource-card.liquid",
    "content": "{%- doc -%}\n  Renders a card for displaying various resource types (products, collections, articles, pages).\n\n  @param {object} resource - The product or collection resource to render\n  @param {string} resource_type - The type of resource to render.\n  @param {string} [collection_thumbnails] - The style of the collection card. Can be 'single' or 'multiple'. Defaults to 'single'\n  @param {string} [style] - The style of the card. Can be 'default' or 'overlay'\n  @param {number} [image_width] - The maximum width of the image, value influences the srcset attribute. Defaults to 1200px.\n  @param {string} [image_aspect_ratio] - The aspect ratio to display the image. Defaults to image's natural ratio\n  @param {boolean} [image_hover] - Whether to show a secondary image on hover and focus\n  @param {string} [image_sizes] - The sizes attribute for responsive images. Defaults to 'auto'\n{%- enddoc -%}\n\n{% liquid\n  if image_aspect_ratio == blank or image_aspect_ratio == 'adapt'\n    assign ratio = resource.featured_image.aspect_ratio\n  else\n    assign ratio = image_aspect_ratio\n  endif\n  assign image_width = image_width | default: 1200\n  assign widths = '240, 352, 832, 1200'\n  assign image_sizes = image_sizes | default: 'auto'\n  assign single_thumbnail_collection = false\n  if resource_type == 'collection' and collection_thumbnails != 'multiple'\n    assign single_thumbnail_collection = true\n  endif\n\n  if resource_type == 'product' and settings.transition_to_main_product\n    assign featured_media_url = resource.selected_or_first_available_variant.featured_image | image_url: width: image_width\n    if featured_media_url == blank\n      assign featured_media_url = resource.featured_media.preview_image | image_url: width: image_width\n    endif\n  endif\n%}\n\n{%- if resource_type == 'product' and settings.transition_to_main_product -%}\n  <product-card-link\n    data-product-id=\"{{ resource.id }}\"\n    data-featured-media-url=\"{{ featured_media_url }}\"\n    data-product-transition=\"true\"\n    on:click=\"/handleViewTransition\"\n  >\n{%- endif -%}\n<div\n  class=\"resource-card{% if style == 'overlay' %} resource-card--overlay{% endif %}\"\n  data-resource-type=\"{{ resource_type }}\"\n>\n  <a\n    class=\"resource-card__link\"\n    href=\"{{ resource.url }}\"\n  >\n    <span class=\"visually-hidden\">\n      {{ resource.title }}\n    </span>\n  </a>\n  <div\n    class=\"resource-card__media\"\n    style=\"--resource-card-aspect-ratio: {{ ratio }};\"\n    {% if resource_type == 'product' and settings.transition_to_main_product %}\n      ref=\"cardGallery\"\n      data-view-transition-to-main-product\n    {% endif %}\n  >\n    {%- if resource_type == 'product' or single_thumbnail_collection -%}\n      {% comment %}\n        In a search context, product.featured_media is updated to reflect the most appropriate variant\n        Use featured_media.preview_image over featured_image\n\n        resource.featured_image is needed for collections with a single thumbnail\n      {% endcomment %}\n      {% assign featured_image = resource.featured_media.preview_image | default: resource.featured_image %}\n      {% liquid\n        assign primary_focal_point_style = ''\n        if resource.media[0].presentation.focal_point != blank\n          assign primary_focal_point_style = 'object-position: ' | append: resource.media[0].presentation.focal_point | append: ';'\n        endif\n      %}\n      {%- if featured_image != blank -%}\n        {% liquid\n          assign ref_image_to_transition = ''\n          if settings.transition_to_main_product\n            assign ref_image_to_transition = 'imagesToTransition[]'\n          endif\n        %}\n        {{\n          featured_image\n          | image_url: width: image_width\n          | image_tag:\n            loading: 'lazy',\n            class: 'resource-card__image',\n            widths: widths,\n            sizes: image_sizes,\n            ref: ref_image_to_transition,\n            data-media-id: featured_image.id,\n            style: primary_focal_point_style\n        }}\n        {%- if image_hover and resource.media.size > 1 -%}\n          {% liquid\n            assign secondary_focal_point_style = ''\n            if resource.media[1].presentation.focal_point != blank\n              assign secondary_focal_point_style = 'object-position: ' | append: resource.media[1].presentation.focal_point | append: ';'\n            endif\n          %}\n          {{\n            resource.media[1]\n            | image_url: width: image_width\n            | image_tag:\n              loading: 'lazy',\n              class: 'resource-card__image resource-card__image--secondary',\n              widths: widths,\n              sizes: image_sizes,\n              ref: ref_image_to_transition,\n              data-media-id: resource.media[1].id,\n              style: secondary_focal_point_style\n          }}\n        {%- endif -%}\n      {%- else -%}\n        <div\n          aria-hidden=\"true\"\n          class=\"resource-card__image-placeholder\"\n        >\n          {{- resource.title | truncate: 60 -}}\n        </div>\n      {%- endif -%}\n    {%- elsif resource_type == 'collection' -%}\n      {%- if resource.products.size > 0 -%}\n        <div class=\"resource-card__image-wrapper\">\n          {% assign resource_products = resource.products | where: 'featured_image' %}\n          {% for product in resource_products limit: 4 %}\n            {{\n              product.featured_image\n              | image_url: width: image_width\n              | image_tag: loading: 'lazy', class: 'resource-card__collection-image', sizes: image_sizes, widths: widths\n            }}\n          {% endfor %}\n        </div>\n      {%- endif -%}\n    {%- endif -%}\n  </div>\n\n  <div class=\"resource-card__content\">\n    <p class=\"resource-card__title{% if style == 'overlay' %} h5{%else %} paragraph{% endif %}\">\n      {{- resource.title -}}\n    </p>\n\n    {% if resource_type == 'product' %}\n      {% render 'price', product_resource: resource, show_unit_price: true %}\n    {% elsif resource_type == 'collection' and single_thumbnail_collection == false %}\n      <p class=\"resource-card__subtext paragraph\">\n        {{- 'content.search_results_resource_products_count' | t: count: resource.all_products_count -}}\n      </p>\n    {% else %}\n      <p class=\"resource-card__subtext paragraph\">\n        {{- resource.excerpt | default: resource.content | strip_html | truncate: 65 -}}\n      </p>\n    {% endif %}\n  </div>\n</div>\n{%- if resource_type == 'product' and settings.transition_to_main_product -%}\n  </product-card-link>\n{%- endif -%}\n\n{% stylesheet %}\n  .resource-card {\n    --resource-card-secondary-image-opacity: 0;\n    --resource-card-primary-image-opacity: calc(1 - var(--resource-card-secondary-image-opacity));\n\n    display: flex;\n    flex-direction: column;\n    row-gap: var(--padding-xs);\n    position: relative;\n    text-decoration: none;\n    height: 100%;\n    opacity: 0;\n    animation: fadeIn var(--animation-speed-medium) var(--animation-timing-fade-in) forwards;\n  }\n\n  .resource-card__link {\n    position: absolute;\n    inset: 0;\n    z-index: 1;\n  }\n\n  .resource-card__content {\n    display: flex;\n    flex-direction: column;\n    color: var(--color-foreground);\n    gap: var(--padding-3xs);\n\n    .price {\n      font-weight: 500;\n    }\n\n    .volume-pricing-note {\n      display: block;\n      margin-top: var(--padding-3xs);\n      font-family: var(--font-body--family);\n      font-weight: normal;\n      font-size: min(0.85em, var(--font-paragraph--size));\n      line-height: normal;\n      letter-spacing: normal;\n      text-transform: none;\n      color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    }\n  }\n\n  .resource-card[data-resource-type='article'] .resource-card__content,\n  .resource-card[data-resource-type='page'] .resource-card__content {\n    gap: var(--padding-xs);\n  }\n\n  .resource-card__image {\n    aspect-ratio: var(--resource-card-aspect-ratio, auto);\n    object-fit: cover;\n    border-radius: var(--resource-card-corner-radius);\n    opacity: var(--resource-card-primary-image-opacity);\n  }\n\n  .resource-card__image--secondary {\n    position: absolute;\n    top: 0;\n    opacity: var(--resource-card-secondary-image-opacity);\n    border-radius: var(--resource-card-corner-radius);\n  }\n\n  .resource-card__media:empty {\n    display: none;\n  }\n\n  .resource-card__image-placeholder {\n    padding: var(--padding-sm);\n    font-size: var(--font-size--lg);\n    line-height: var(--line-height--display-loose);\n    word-break: break-word;\n    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n    aspect-ratio: var(--resource-card-aspect-ratio, auto);\n    border-radius: var(--resource-card-corner-radius);\n    color: var(--color-foreground);\n  }\n\n  .resource-card__title {\n    margin-block: 0;\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: 2;\n    overflow: hidden;\n    line-height: 1.3;\n    word-break: break-word;\n    overflow-wrap: break-word;\n  }\n\n  .resource-card__title.paragraph {\n    line-height: 1.3;\n  }\n\n  .resource-card--overlay {\n    height: 100%;\n\n    &::before {\n      content: '';\n      position: absolute;\n      inset: 50% 0 0;\n      background: var(--gradient-image-overlay);\n      border-radius: var(--resource-card-corner-radius);\n      pointer-events: none;\n      z-index: var(--layer-flat);\n    }\n  }\n\n  .resource-card--overlay .resource-card__image {\n    height: 100%;\n  }\n\n  .resource-card--overlay .resource-card__content {\n    position: absolute;\n    inset: auto 0 0;\n    padding: var(--padding-lg) var(--padding-lg) var(--padding-sm);\n    z-index: var(--layer-raised);\n  }\n\n  .resource-card--overlay .resource-card__title {\n    color: var(--color-white);\n  }\n\n  /* Collection images */\n  .resource-card__image-wrapper {\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: var(--gap-2xs);\n  }\n\n  .resource-card__collection-image {\n    aspect-ratio: 1 / 1;\n    object-fit: cover;\n    border-radius: calc(var(--card-corner-radius) - (var(--padding-xs) / 2));\n  }\n\n  .resource-card__subtext {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    margin-block-start: 0;\n  }\n\n  .resource-card__subtext.paragraph {\n    font-size: var(--font-size--body-sm);\n    line-height: var(--line-height--body-tight);\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .resource-card:has(.resource-card__image--secondary) {\n    &:hover,\n    &:focus {\n      --resource-card-secondary-image-opacity: 1;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/resource-image.liquid",
    "content": "{%- doc -%}\n  Unified Resource Image Component\n\n  Renders responsive images for resource list contexts (featured-blog, collection-card, etc).\n  Consolidates common image rendering logic across resource components.\n\n  @param {string} content_type - Type of content: 'articles' | 'collections'\n  @param {object} [image_source] - Image object for articles (auto-determined for collections)\n  @param {string} parent_block_id - Parent block ID for CSS targeting\n  @param {object} block_settings - Block settings object\n  @param {object} [section_settings] - Section settings for layout-aware sizing\n  @param {string} [block_attributes] - Block shopify attributes for theme editor\n\n  @example\n  {% render 'resource-image',\n      content_type: 'articles',\n      image_source: article.image,\n      parent_block_id: block.id,\n      block_settings: block.settings,\n      section_settings: section.settings,\n      block_attributes: block.shopify_attributes\n    %}\n  @example\n  {% render 'resource-image',\n      content_type: 'collections',\n      image_source: blank,\n      parent_block_id: block.id,\n      block_settings: block.settings,\n      section_settings: section.settings,\n      block_attributes: block.shopify_attributes\n    %}\n{%- enddoc -%}\n\n{% liquid\n  # Parameter validation and defaults\n  assign content_type = content_type | default: 'collections'\n  assign parent_block_id = parent_block_id | default: ''\n  assign block_settings = block_settings | default: empty\n  assign section_settings = section_settings | default: empty\n  assign block_attributes = block_attributes | default: ''\n\n  # Early return if required parameters missing\n  unless parent_block_id != blank and block_settings != empty\n    echo '<!-- Error: parent_block_id and block_settings parameters required for resource-image snippet -->'\n    break\n  endunless\n\n  # Determine image source based on content type\n  if content_type == 'articles'\n    assign image_resource = image_source\n  elsif content_type == 'collections'\n    assign collection = closest.collection\n    assign image_resource = collection.image\n    if image_resource == blank\n      assign image_resource = collection.products.first.featured_image\n    endif\n  else\n    assign image_resource = image_source\n  endif\n\n  # Calculate aspect ratio\n  assign ratio = 1\n  case block_settings.image_ratio\n    when 'landscape'\n      assign ratio = '16 / 9'\n    when 'portrait'\n      assign ratio = '4 / 5'\n    when 'square'\n      assign ratio = '1 / 1'\n    when 'adapt'\n      assign ratio = image_resource.aspect_ratio\n  endcase\n\n  if ratio == 0 or ratio == null\n    assign ratio = 1\n  endif\n\n  # Generate responsive image attributes\n  assign sizes = '(min-width: 750px) 50vw, 100vw'\n  assign lazy_sizes = 'auto, ' | append: sizes\n  assign loading = 'eager'\n\n  # Layout-aware sizing for resource lists\n  if section_settings.layout_type\n    case section_settings.layout_type\n      when 'grid', 'carousel'\n        assign calculated_width = 100 | divided_by: section_settings.columns | append: 'vw'\n        assign sizes = '(min-width: 750px) [calc-width], 100vw' | replace: '[calc-width]', calculated_width\n      when 'editorial', 'bento'\n        assign loading = 'lazy'\n        assign sizes = lazy_sizes\n    endcase\n  endif\n\n  assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n\n  # Generate placeholder info based on content type\n  if content_type == 'articles'\n    assign placeholder_prefix = 'blog-apparel-'\n    assign placeholder_variants = 3\n  elsif content_type == 'collections'\n    assign placeholder_prefix = 'collection-apparel-'\n    assign placeholder_variants = 4\n  else\n    assign placeholder_prefix = 'detailed-apparel-'\n    assign placeholder_variants = 3\n  endif\n\n  # Calculate placeholder variant from parent block ID\n  assign block_parts = parent_block_id | split: '-'\n  assign content_index = block_parts.last | default: 0\n  assign variant = content_index | modulo: placeholder_variants | plus: 1\n  assign placeholder_name = placeholder_prefix | append: variant\n%}\n\n{% comment %} Apply aspect ratio to parent component {% endcomment %}\n{% style %}\n  {% if content_type == 'articles' %}\n    .featured-blog-posts-card[data-block-id=\"{{ parent_block_id }}\"] {\n      --ratio: {{ ratio }};\n    }\n  {% elsif content_type == 'collections' %}\n    .collection-card[data-block-id=\"{{ parent_block_id }}\"] {\n      --ratio: {{ ratio }};\n    }\n  {% endif %}\n{% endstyle %}\n\n{% if image_resource != blank %}\n  <div\n    class=\"\n      image-block\n      resource-image\n      {% if content_type == 'articles' %}\n        featured-blog-posts-card__image\n      {% elsif content_type == 'collections' %}\n        collection-card__image\n      {% endif %}\n      spacing-style border-style\n      {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n    \"\n    style=\"\n      {%- render 'spacing-style', settings: block_settings -%}\n      {%- render 'border-override', settings: block_settings -%}\n    \"\n    {{ block_attributes }}\n  >\n    {%- if block_settings.toggle_overlay -%}\n      {% render 'overlay', settings: block_settings %}\n    {%- endif -%}\n\n    {{\n      image_resource\n      | image_url: width: 3840\n      | image_tag: widths: widths, class: 'image-block__image', sizes: sizes, loading: loading\n    }}\n  </div>\n{% else %}\n  <div\n    class=\"\n      image-block\n      resource-image resource-image--placeholder\n      {% if content_type == 'articles' %}\n        featured-blog-posts-card__image featured-blog-posts-card__image--placeholder\n      {% elsif content_type == 'collections' %}\n        collection-card__image collection-card__image--placeholder\n      {% endif %}\n      spacing-style border-style\n      {% if block_settings.inherit_color_scheme == false %} color-{{ block_settings.color_scheme }}{% endif %}\n    \"\n    style=\"\n      {%- render 'spacing-style', settings: block_settings -%}\n      {%- render 'border-override', settings: block_settings -%}\n    \"\n    {{ block_attributes }}\n  >\n    {%- if block_settings.toggle_overlay -%}\n      {% render 'overlay', settings: block_settings %}\n    {%- endif -%}\n\n    <div class=\"image-block__image\">\n      {% if content_type == 'articles' %}\n        {{ placeholder_name | placeholder_svg_tag: 'blog-placeholder-svg' }}\n      {% else %}\n        {{ placeholder_name | placeholder_svg_tag }}\n      {% endif %}\n    </div>\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .resource-image {\n    position: relative;\n    display: flex;\n    width: 100%;\n    height: 100%;\n    z-index: var(--layer-base);\n    overflow: hidden;\n    max-width: 100%;\n    max-height: 100%;\n    aspect-ratio: var(--ratio);\n  }\n\n  .resource-image .image-block__image {\n    object-fit: cover;\n    width: 100%;\n    height: 100%;\n  }\n\n  .resource-image--placeholder {\n    width: 100%;\n    height: 100%;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/resource-list-carousel.liquid",
    "content": "{%- doc -%}\n  Renders a carousel of predictive search results cards\n\n  @param {string} ref - The ref of the slideshow\n  @param {object} slides - An array of HTML for the slides to display in the carousel\n  @param {number} slide_count - The number of slides to display in the carousel\n  @param {object} settings - The block or sections settings from the parent block/section.\n  @param {string} [slide_width_max] - The maximum width of the slides in the carousel.\n\n  @example\n  {% render 'resource-list-carousel', slides: slides, slide_count: slide_count, settings: block.settings %}\n{%- enddoc -%}\n\n{% liquid\n  assign slideshow_ref = ref | default: 'resourceListCarousel'\n\n  if settings.section_width == 'page-width'\n    assign slideshow_gutters = 'start end'\n    assign gutter_style = '--gutter-slide-width: var(--util-page-margin-offset);'\n  else\n    assign slideshow_gutters = null\n    assign gutter_style = '--gutter-slide-width: 0px;'\n  endif\n\n  assign show_arrows = false\n  if settings.icons_style != 'none'\n    assign show_arrows = true\n  endif\n%}\n\n{% capture slides %}\n  {% for item in slides limit: slides.size %}\n    {% render 'slideshow-slide'\n      index : forloop.index0,\n      children : item,\n      class : 'resource-list__slide'\n    %}\n  {% endfor %}\n{% endcapture %}\n\n<div\n  class=\"resource-list__carousel\"\n  style=\"{{ gutter_style }} --slide-width-max: {{ slide_width_max | default: '300px' }};\"\n>\n  {% render 'slideshow',\n    ref: slideshow_ref,\n    class: 'resource-list__carousel',\n    slides: slides,\n    show_arrows: show_arrows,\n    icon_style: settings.icons_style,\n    icon_shape: settings.icons_shape,\n    auto_hide_controls: false,\n    infinite: false,\n    initial_slide: 0,\n    slide_count: slide_count,\n    slideshow_gutters: slideshow_gutters\n  %}\n</div>\n"
  },
  {
    "path": "snippets/resource-list.liquid",
    "content": "{%- doc -%}\n  Resource List Component\n\n  Renders a complete resource list with automatic layout switching.\n  Supports grid, bento, carousel, and editorial layouts with mobile fallbacks.\n\n  @param {string} list_items - Raw HTML string of list items for grid layout\n  @param {object} list_items_array - Array of list item HTML strings for complex layouts\n  @param {object} settings - Section settings object containing layout configuration\n  @param {string} [carousel_ref] - Base reference name for carousel components (default: 'resourceListCarousel')\n  @param {number} slide_count - Number of slides for carousel layouts\n  @param {string} content_type - Type of content: 'products' | 'collections' | 'articles'\n  @param {string} [test_id] - Data test ID for the main resource list\n\n  @example\n  {% render 'resource-list',\n      list_items: list_items,\n      list_items_array: list_items_array,\n      settings: section.settings,\n      carousel_ref: 'featuredBlog',\n      slide_count: max_items,\n      content_type: 'articles',\n      test_id: 'collections-list-grid'\n    %}\n\n  Expected `settings` object properties:\n  - layout_type: 'grid' | 'bento' | 'carousel' | 'editorial'\n  - columns: Number of columns for grid/carousel\n  - mobile_columns: Number of columns on mobile\n  - columns_gap: Gap between columns in pixels\n  - rows_gap: Gap between rows in pixels (grid only)\n  - bento_gap: Gap for bento layout in pixels\n  - mobile_card_size: Mobile card size for carousel\n  - carousel_on_mobile: Boolean for mobile carousel fallback\n{%- enddoc -%}\n\n{% liquid\n  assign list_items = list_items | default: ''\n  assign list_items_array = list_items_array | default: empty\n  assign settings = settings | default: empty\n  assign carousel_ref = carousel_ref | default: 'resourceListCarousel'\n  assign slide_count = slide_count | default: 0\n  assign content_type = content_type | default: 'collections'\n  assign test_id = test_id | default: ''\n\n  unless settings != empty\n    echo '<!-- Error: settings parameter required for resource-list snippet -->'\n    break\n  endunless\n\n  assign layout_type = settings.layout_type | default: 'grid'\n  assign columns = settings.columns | default: 3\n  assign mobile_columns = settings.mobile_columns | default: 2\n  assign columns_gap = settings.columns_gap | default: 16\n  assign rows_gap = settings.rows_gap | default: 16\n  assign bento_gap = settings.bento_gap | default: 16\n  assign mobile_card_size = settings.mobile_card_size | default: '60cqw'\n  assign slide_width_max = '450px'\n\n  case layout_type\n    when 'grid'\n      assign resource_list_classes = 'resource-list--grid'\n      capture resource_list_styles\n        echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;'\n        echo '--resource-list-row-gap-desktop: ' | append: rows_gap | append: 'px;'\n        echo '--resource-list-columns: repeat(' | append: columns | append: ', 1fr);'\n        echo '--resource-list-columns-mobile: repeat(' | append: mobile_columns | append: ', 1fr);'\n        echo '--column-count-mobile: ' | append: mobile_columns | append: ';'\n      endcapture\n\n    when 'bento'\n      assign resource_list_classes = 'resource-list--bento'\n      capture resource_list_styles\n        echo '--resource-list-column-gap-desktop: ' | append: bento_gap | append: 'px;'\n        echo '--bento-gap: var(--resource-list-column-gap);'\n      endcapture\n\n    when 'carousel'\n      assign resource_list_classes = 'resource-list__carousel'\n      capture resource_list_styles\n        echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;'\n        echo '--column-count: ' | append: columns | append: ';'\n        echo '--column-count-mobile: 1;'\n        echo '--mobile-card-size: ' | append: mobile_card_size | append: ';'\n      endcapture\n\n    when 'editorial'\n      assign resource_list_classes = 'resource-list--editorial'\n      capture resource_list_styles\n        echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;'\n      endcapture\n  endcase\n\n  # Trim whitespace from styles\n  assign resource_list_styles = resource_list_styles | strip\n%}\n\n<div\n  class=\"\n    resource-list\n    {% if settings.layout_type == 'carousel' %}\n      force-full-width\n    {% endif %}\n    {% if settings.carousel_on_mobile and settings.layout_type != 'carousel' %}\n      hidden--mobile\n    {% endif %}\n    {{ resource_list_classes }}\n  \"\n  style=\"{{ resource_list_styles }}\"\n  {% if test_id %}\n    data-testid=\"{{ test_id }}\"\n  {% endif %}\n>\n  {% case settings.layout_type %}\n    {% when 'grid' %}\n      {{ list_items }}\n\n    {% when 'bento' %}\n      {% render 'bento-grid', items: list_items_array %}\n\n    {% when 'carousel' %}\n      {% render 'resource-list-carousel',\n        ref: carousel_ref,\n        slides: list_items_array,\n        slide_count: slide_count,\n        settings: settings,\n        slide_width_max: slide_width_max\n      %}\n\n    {% when 'editorial' %}\n      {% case content_type %}\n        {% when 'products' %}\n          {% render 'editorial-product-grid', items: list_items_array %}\n        {% when 'articles' %}\n          {% render 'editorial-blog-grid', items: list_items_array %}\n        {% else %}\n          {% render 'editorial-collection-grid', items: list_items_array %}\n      {% endcase %}\n  {% endcase %}\n</div>\n\n{% comment %} Mobile carousel for non-carousel layouts {% endcomment %}\n{% if settings.layout_type != 'carousel' and settings.carousel_on_mobile %}\n  {% liquid\n    assign mobile_carousel_gap = settings.columns_gap | default: 16\n    if settings.layout_type == 'bento'\n      assign mobile_carousel_gap = settings.bento_gap | default: 16\n    endif\n  %}\n\n  <div\n    class=\"\n      resource-list\n      hidden--desktop\n      resource-list__carousel\n      force-full-width\n    \"\n    style=\"\n      --resource-list-column-gap-desktop: {{ mobile_carousel_gap }}px;\n      --column-count: {{ settings.columns | default: 3 }};\n      --column-count-mobile: 1;\n      --mobile-card-size: {{ settings.mobile_card_size | default: '60cqw' }};\n    \"\n  >\n    {% liquid\n      assign carousel_ref_mobile = carousel_ref | append: 'Mobile'\n    %}\n    {% render 'resource-list-carousel',\n      ref: carousel_ref_mobile,\n      slides: list_items_array,\n      slide_count: slide_count,\n      settings: settings,\n      slide_width_max: slide_width_max\n    %}\n  </div>\n{% endif %}\n"
  },
  {
    "path": "snippets/scripts.liquid",
    "content": "<script type=\"importmap\">\n  {\n    \"imports\": {\n      \"@theme/overflow-list\": \"{{ 'overflow-list.js' | asset_url }}\",\n      \"@theme/product-title\": \"{{ 'product-title-truncation.js' | asset_url }}\",\n      \"@theme/component\": \"{{ 'component.js' | asset_url }}\",\n      \"@theme/dialog\": \"{{ 'dialog.js' | asset_url }}\",\n      \"@theme/events\": \"{{ 'events.js' | asset_url }}\",\n      \"@theme/focus\": \"{{ 'focus.js' | asset_url }}\",\n      \"@theme/morph\": \"{{ 'morph.js' | asset_url }}\",\n      \"@theme/paginated-list\": \"{{ 'paginated-list.js' | asset_url }}\",\n      \"@theme/performance\": \"{{ 'performance.js' | asset_url }}\",\n      \"@theme/product-form\": \"{{ 'product-form.js' | asset_url }}\",\n      \"@theme/recently-viewed-products\": \"{{ 'recently-viewed-products.js' | asset_url }}\",\n      \"@theme/scrolling\": \"{{ 'scrolling.js' | asset_url }}\",\n      \"@theme/section-renderer\": \"{{ 'section-renderer.js' | asset_url }}\",\n      \"@theme/section-hydration\": \"{{ 'section-hydration.js' | asset_url }}\",\n      \"@theme/money-formatting\": \"{{ 'money-formatting.js' | asset_url }}\",\n      \"@theme/utilities\": \"{{ 'utilities.js' | asset_url }}\",\n      \"@theme/variant-picker\": \"{{ 'variant-picker.js' | asset_url }}\",\n      \"@theme/media-gallery\": \"{{ 'media-gallery.js' | asset_url }}\",\n      \"@theme/quick-add\": \"{{ 'quick-add.js' | asset_url }}\",\n      \"@theme/paginated-list-aspect-ratio\": \"{{ 'paginated-list-aspect-ratio.js' | asset_url }}\",\n      \"@theme/popover-polyfill\": \"{{ 'popover-polyfill.js' | asset_url }}\",\n      \"@theme/component-quantity-selector\": \"{{ 'component-quantity-selector.js' | asset_url }}\",\n      \"@theme/comparison-slider\": \"{{ 'comparison-slider.js' | asset_url }}\",\n      \"@theme/sticky-add-to-cart\": \"{{ 'sticky-add-to-cart.js' | asset_url }}\",\n      \"@theme/fly-to-cart\": \"{{ 'fly-to-cart.js' | asset_url }}\"\n    }\n  }\n</script>\n\n<script\n  src=\"{{ 'view-transitions.js' | asset_url }}\"\n  async\n  {% if settings.page_transition_enabled or settings.transition_to_main_product %}\n    blocking=\"render\"\n  {% endif %}\n></script>\n\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'utilities.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'component.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'section-renderer.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'section-hydration.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'morph.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n\n{% if template.name == 'collection' or template.name == 'search' %}\n  <link\n    rel=\"modulepreload\"\n    href=\"{{ 'paginated-list-aspect-ratio.js' | asset_url }}\"\n    fetchpriority=\"low\"\n  >\n  <link\n    rel=\"modulepreload\"\n    href=\"{{ 'paginated-list.js' | asset_url }}\"\n    fetchpriority=\"low\"\n  >\n\n  <link\n    rel=\"modulepreload\"\n    href=\"{{ 'product-title-truncation.js' | asset_url }}\"\n    fetchpriority=\"low\"\n  >\n{% endif %}\n\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'focus.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'recently-viewed-products.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'scrolling.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<link\n  rel=\"modulepreload\"\n  href=\"{{ 'events.js' | asset_url }}\"\n  fetchpriority=\"low\"\n>\n<script\n  src=\"{{ 'popover-polyfill.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'overflow-list.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'quick-add.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n{% if settings.show_add_discount_code %}\n  <script\n    src=\"{{ 'cart-discount.js' | asset_url }}\"\n    type=\"module\"\n    fetchpriority=\"low\"\n  ></script>\n{% endif %}\n\n<script\n  src=\"{{ 'dialog.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'variant-picker.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-card.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-form.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'fly-to-cart.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'accordion-custom.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'media.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-price.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-sku.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-title-truncation.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'product-inventory.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'show-more.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'slideshow.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'layered-slideshow.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'anchored-popover.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'floating-panel.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'video-background.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'component-quantity-selector.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'media-gallery.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'rte-formatter.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'volume-pricing.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'price-per-item.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n<script\n  src=\"{{ 'volume-pricing-info.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n{% if localization.available_countries.size > 1 or localization.available_languages.size > 1 %}\n  <script\n    src=\"{{ 'localization.js' | asset_url }}\"\n    type=\"module\"\n    fetchpriority=\"low\"\n  ></script>\n{% endif %}\n\n{% if template == 'product' or template.name == 'product' or request.page_type == 'product' %}\n  <script\n    src=\"{{ 'fly-to-cart.js' | asset_url }}\"\n    type=\"module\"\n    fetchpriority=\"low\"\n  ></script>\n  <script\n    src=\"{{ 'sticky-add-to-cart.js' | asset_url }}\"\n    type=\"module\"\n    fetchpriority=\"low\"\n  ></script>\n  <script type=\"module\">\n    import { RecentlyViewed } from '@theme/recently-viewed-products';\n    RecentlyViewed.addProduct('{{ product.id }}');\n  </script>\n{% endif %}\n\n<script\n  src=\"{{ 'auto-close-details.js' | asset_url }}\"\n  defer=\"defer\"\n></script>\n\n<script>\n  const Theme = {\n    translations: {\n      placeholder_image: `{{ 'content.placeholder_image' | t }}`,\n      added: `{{ 'actions.added' | t }}`,\n      recipient_form_fields_visible: `{{ 'content.recipient_form_fields_visible' | t }}`,\n      recipient_form_fields_hidden: `{{ 'content.recipient_form_fields_hidden' | t }}`,\n      recipient_form_error: `{{ 'content.recipient_form_error' | t }}`,\n      items_added_to_cart_one: `{{ 'content.items_added_to_cart.one' | t }}`,\n      items_added_to_cart_other: `{{ 'content.items_added_to_cart.other' | t }}`,\n    },\n    routes: {\n      cart_add_url: '{{ routes.cart_add_url | append: '.js' }}',\n      cart_change_url: '{{ routes.cart_change_url }}',\n      cart_update_url: '{{ routes.cart_update_url }}',\n      cart_url: '{{ routes.cart_url }}',\n      predictive_search_url: '{{ routes.predictive_search_url }}',\n      search_url: '{{ routes.search_url }}',\n    },\n    template: {\n      name: '{{ template }}',\n    },\n  };\n</script>\n"
  },
  {
    "path": "snippets/search-modal.liquid",
    "content": "<script\n  src=\"{{ 'dialog.js' | asset_url }}\"\n  type=\"module\"\n></script>\n\n<script\n  src=\"{{ 'predictive-search.js' | asset_url }}\"\n  type=\"module\"\n  fetchpriority=\"low\"\n></script>\n\n<dialog-component\n  id=\"search-modal\"\n  class=\"search-modal\"\n  {{ block.shopify_attributes }}\n>\n  <dialog\n    ref=\"dialog\"\n    on:click=\"/closeDialogOnClickOutside\"\n    on:keydown=\"/closeDialogOnEscapePress\"\n    class=\"search-modal__content dialog-modal\"\n    scroll-lock\n    aria-labelledby=\"search-modal-heading\"\n  >\n    <h2\n      id=\"search-modal-heading\"\n      class=\"visually-hidden\"\n    >\n      {{ 'content.search' | t }}\n    </h2>\n    <predictive-search-component\n      class=\"predictive-search color-{{ settings.popover_color_scheme }}{% if class != blank %} {{ class | strip }}{% endif %}\"\n      style=\"--product-corner-radius: {{ settings.product_corner_radius | default: 8 | append: 'px' }}; --card-corner-radius: {{ settings.card_corner_radius | default: 8 | append: 'px' }};{% if settings.card_title_case == 'uppercase' %} --title-case: uppercase;{% endif %}\"\n      data-section-id=\"predictive-search\"\n      data-testid=\"{{ 'search-component--modal' }}\"\n      role=\"search\"\n      aria-label=\"{{ 'content.search_input_label' | t }}\"\n    >\n      <form\n        action=\"{{ routes.search_url }}\"\n        method=\"get\"\n        role=\"search\"\n        class=\"predictive-search-form\"\n        ref=\"form\"\n        on:keydown=\"/onSearchKeyDown\"\n      >\n        <div\n          class=\"predictive-search-form__header\"\n        >\n          <div class=\"predictive-search-form__header-inner\">\n            <label\n              for=\"{{ 'cmdk-input' | default: 'Search' }}\"\n              class=\"visually-hidden\"\n            >\n              {{- 'content.search_input_label' | t -}}\n            </label>\n            <input\n              class=\"search-input\"\n              id=\"{{ 'cmdk-input' | default: 'Search' }}\"\n              type=\"search\"\n              name=\"q\"\n              role=\"combobox\"\n              aria-expanded=\"false\"\n              aria-owns=\"predictive-search-results\"\n              aria-controls=\"predictive-search-results\"\n              aria-haspopup=\"listbox\"\n              aria-autocomplete=\"list\"\n              autocomplete=\"off\"\n              placeholder=\"{{ 'content.search_input_placeholder' | t }}\"\n              ref=\"searchInput\"\n              on:input=\"/search\"\n              on:keydown=\"/onSearchKeyDown\"\n            >\n            <input\n              name=\"options[prefix]\"\n              type=\"hidden\"\n              value=\"last\"\n            >\n            <span class=\"svg-wrapper predictive-search__icon\">\n              {{ 'icon-search.svg' | inline_asset_content }}\n            </span>\n            <button\n              type=\"button\"\n              class=\"button-unstyled predictive-search__reset-button\"\n              ref=\"resetButton\"\n              hidden\n              on:click=\"/resetSearch\"\n            >\n              {{ 'actions.clear' | t }}\n            </button>\n          </div>\n          <button\n            type=\"button\"\n            class=\"button predictive-search__close-modal-button\"\n            aria-label=\"{{ 'accessibility.close_dialog' | t }}\"\n            on:click=\"dialog-component/closeDialog\"\n            ref=\"closeModalButton\"\n          >\n            <span class=\"svg-wrapper\">\n              {{ 'icon-close.svg' | inline_asset_content }}\n            </span>\n          </button>\n        </div>\n\n        <div class=\"predictive-search-form__content-wrapper\">\n          <div\n            class=\"predictive-search-form__content\"\n            tabindex=\"-1\"\n            ref=\"predictiveSearchResults\"\n            on:click=\"/handleModalClick\"\n          >\n            {% render 'predictive-search-empty-state',\n              load_empty_state: true,\n              shadow_opacity: 0.1,\n              products_test_id: 'products-list-default--modal'\n            %}\n          </div>\n\n          <div class=\"predictive-search-form__footer\">\n            <button\n              class=\"button predictive-search__search-button\"\n              ref=\"viewAllButton\"\n            >\n              {{ 'content.search_results_view_all' | t }}\n            </button>\n          </div>\n        </div>\n      </form>\n    </predictive-search-component>\n  </dialog>\n</dialog-component>\n\n{% stylesheet %}\n  /* Search modal style */\n  .search-modal {\n    --search-border-radius: var(--style-border-radius-popover);\n    --search-border-width: var(--style-border-width);\n  }\n\n  .search-modal__content {\n    /* Approx set the top so when the content is at max height, the modal is centered */\n    --modal-top-margin: calc(50dvh - var(--modal-max-height) / 2 - 2rem);\n    --modal-width: 66dvw;\n\n    padding: 0;\n    border: var(--style-border-popover);\n\n    @media screen and (min-width: 750px) {\n      width: var(--modal-width);\n      margin-block-start: var(--modal-top-margin);\n      overflow: hidden;\n    }\n  }\n\n  /* Hide the default dialog backdrop on small screens */\n  @media screen and (max-width: 749px) {\n    .search-modal__content::backdrop {\n      display: none;\n    }\n  }\n\n  .dialog-modal[open].search-modal__content {\n    transform-origin: bottom center;\n    animation: search-element-slide-in-bottom 300ms var(--ease-out-quad) forwards;\n    border-radius: var(--search-border-radius);\n    box-shadow: var(--shadow-popover);\n\n    @media screen and (max-width: 749px) {\n      border-radius: 0;\n    }\n  }\n\n  .dialog-modal.search-modal__content.dialog-closing {\n    animation: search-element-slide-out-bottom 200ms var(--ease-out-quad) forwards;\n  }\n\n  .search-modal__content[open] {\n    display: flex;\n  }\n\n  .search-modal__content :is(.predictive-search-dropdown, .predictive-search-form__content-wrapper) {\n    position: relative;\n  }\n\n  .dialog-modal\n    .predictive-search-form__header:has(\n      .predictive-search__reset-button:not(.predictive-search__reset-button[hidden])\n    )::before {\n    content: '';\n    position: absolute;\n    right: calc(var(--padding-sm) + var(--minimum-touch-target));\n    top: 0;\n    bottom: 0;\n    width: var(--border-width-sm);\n    background-color: var(--color-border);\n  }\n\n  .dialog-modal\n    .predictive-search-form__header:has(.predictive-search__reset-button:not(.predictive-search__reset-button[hidden]))\n    > .predictive-search__close-modal-button {\n    &::before {\n      content: none;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .dialog-modal\n      .predictive-search-form__header:has(\n        .predictive-search__reset-button:not(.predictive-search__reset-button[hidden])\n      )::before {\n      right: calc(var(--padding-2xl) * 2);\n    }\n  }\n\n  predictive-search-component {\n    --resource-card-corner-radius: var(--product-corner-radius);\n\n    display: flex;\n    width: 100%;\n    position: relative;\n    margin-inline: auto;\n    align-items: center;\n    background-color: var(--color-background);\n    z-index: var(--layer-heightened);\n  }\n\n  .predictive-search-form__footer {\n    display: none;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n\n    @media screen and (min-width: 750px) {\n      --to-top-gradient-background: linear-gradient(\n        to top,\n        rgb(var(--color-background-rgb) / var(--opacity-90)),\n        rgb(var(--color-background-rgb) / var(--opacity-80)),\n        rgb(var(--color-background-rgb) / var(--opacity-40)),\n        transparent\n      );\n\n      padding-block: var(--padding-xs) var(--padding-lg);\n      background-image: var(--to-top-gradient-background);\n    }\n  }\n\n  predictive-search-component:has([data-search-results]):not(:has(.predictive-search-results__no-results))\n    .predictive-search-form__footer {\n    display: block;\n  }\n\n  .predictive-search-form {\n    position: relative;\n    width: 100%;\n    align-self: flex-start;\n  }\n\n  .predictive-search-form__content {\n    max-height: 50dvh;\n    overflow-y: auto;\n    background-color: var(--color-background);\n\n    /* Firefox */\n    scrollbar-width: none;\n\n    /* Webkit browsers */\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n\n  .predictive-search-form__content-wrapper {\n    position: absolute;\n    top: 100%;\n    width: 100%;\n    left: 0;\n    z-index: var(--layer-raised);\n    display: flex;\n    flex-direction: column;\n    border-radius: 0 0 var(--search-border-radius) var(--search-border-radius);\n    transition: box-shadow var(--animation-speed) var(--animation-easing);\n    transform: translateZ(0);\n    will-change: transform, opacity;\n    overflow: hidden;\n\n    @media screen and (max-width: 749px) {\n      border-radius: 0;\n    }\n\n    @media screen and (min-width: 750px) {\n      max-height: var(--modal-max-height);\n    }\n  }\n\n  /* Add new rule to apply bottom padding only when search button exists */\n  .predictive-search-form__content-wrapper:has([data-search-results]):not(:has(.predictive-search-results__no-results))\n    > .predictive-search-form__content {\n    padding-block-end: var(--padding-6xl);\n  }\n\n  .predictive-search-form__header-inner {\n    background: var(--color-background);\n    border: var(--search-border-width) solid var(--color-border);\n    color: var(--color-foreground);\n    border-radius: var(--style-border-radius-popover);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n\n    @media screen and (max-width: 749px) {\n      border-radius: var(--style-border-radius-inputs);\n      border: none;\n    }\n  }\n\n  .predictive-search-form__header-inner:focus-within {\n    outline-offset: var(--focus-outline-offset);\n\n    @media screen and (min-width: 750px) {\n      outline: var(--focus-outline-width) solid var(--color-primary);\n    }\n  }\n\n  .predictive-search-form__header {\n    display: flex;\n    position: sticky;\n    top: 0;\n    z-index: var(--layer-heightened);\n    width: 100%;\n    align-items: center;\n    background-color: var(--color-input-background);\n    border: var(--search-border-width) solid var(--color-border);\n    border-radius: var(--style-border-radius-inputs);\n\n    @media screen and (max-width: 749px) {\n      padding: var(--padding-2xs) var(--padding-sm);\n    }\n  }\n\n  .predictive-search-form__header:focus-within,\n  .predictive-search-form__header-inner:focus-within,\n  .predictive-search-form__header-inner:has(.search-input:is(:focus, :focus-visible)) {\n    outline: none;\n    box-shadow: none;\n    /* stylelint-disable-next-line declaration-no-important */\n    border-color: var(--color-border) !important;\n  }\n\n  input.search-input {\n    border-radius: var(--style-border-radius-inputs);\n    padding-block: var(--padding-sm);\n    font-size: var(--font-size--md);\n    width: 100%;\n    color: var(--color-foreground);\n    padding-inline: calc(var(--margin-lg) + var(--icon-size-lg)) 0;\n    background: transparent;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    outline: none;\n    border: 0;\n  }\n\n  .search-input::placeholder {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .search-input,\n  .search-input:is(:focus, :focus-visible, :focus-within),\n  .predictive-search-form__header *:is(:focus, :focus-visible) {\n    outline: none;\n    box-shadow: none;\n  }\n\n  .search-input:hover {\n    background-color: transparent;\n  }\n\n  .predictive-search__icon {\n    position: absolute;\n    left: var(--margin-xl);\n    top: auto;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-60));\n\n    @media screen and (min-width: 750px) {\n      left: var(--margin-md);\n    }\n  }\n\n  .predictive-search__icon > svg {\n    width: var(--icon-size-md);\n    height: var(--icon-size-md);\n  }\n\n  .predictive-search__reset-button {\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n    padding: 0;\n    margin-inline-end: var(--margin-md);\n    background: transparent;\n    color: var(--color-foreground);\n    opacity: 0.68;\n    transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-out),\n      visibility var(--animation-speed-medium) var(--animation-timing-fade-out);\n\n    &:hover {\n      color: var(--color-foreground);\n    }\n\n    &:active {\n      transform: scale(0.9);\n      transition: transform 100ms var(--animation-timing-active);\n    }\n\n    @media screen and (min-width: 750px) {\n      margin-inline-end: var(--margin-2xs);\n    }\n  }\n\n  .predictive-search__reset-button[hidden] {\n    opacity: 0;\n    pointer-events: none;\n    visibility: hidden;\n  }\n\n  .predictive-search__reset-button-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--icon-size-lg);\n    height: var(--icon-size-lg);\n    transition: background-color var(--animation-speed-medium) ease-in-out,\n      transform var(--animation-speed-medium) var(--animation-timing-bounce);\n    border-radius: 50%;\n\n    &:hover {\n      background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8));\n    }\n  }\n\n  .predictive-search__reset-button:active .predictive-search__reset-button-icon {\n    transform: scale(0.85);\n    transition-timing-function: var(--animation-timing-active);\n    transition-duration: 100ms;\n  }\n\n  .predictive-search__reset-button svg {\n    width: var(--icon-size-md);\n    height: var(--icon-size-md);\n  }\n\n  .predictive-search__reset-button-text {\n    display: none;\n  }\n\n  .predictive-search__search-button {\n    margin: auto;\n    z-index: var(--layer-raised);\n    transition: transform var(--animation-speed-medium) var(--animation-timing-bounce),\n      box-shadow var(--animation-speed-medium) var(--animation-timing-hover);\n    transform-origin: center;\n\n    &:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 4px 8px rgb(0 0 0 / var(--opacity-5));\n    }\n\n    &:active {\n      transform: scale(0.97);\n      transition: transform 100ms var(--animation-timing-active);\n      box-shadow: none;\n    }\n  }\n\n  .predictive-search__close-modal-button {\n    --button-color: var(--color-foreground);\n    --button-background-color: transparent;\n\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n    margin-inline-start: var(--margin-sm);\n    padding: 0;\n    box-shadow: none;\n\n    &:active {\n      transform: scale(0.8);\n      transition: transform 100ms var(--animation-timing-active);\n    }\n\n    .svg-wrapper,\n    svg {\n      width: var(--icon-size-xs);\n      height: var(--icon-size-xs);\n    }\n  }\n\n  .predictive-search__close-modal-button:hover {\n    --button-color: var(--color-foreground);\n    --button-background-color: transparent;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/search.liquid",
    "content": "{%- doc -%}\n  Renders the search action button.\n\n  @param {string} [style] - The style of the search action.\n  @param {string} [class] - Additional classes for the search action.\n  @param {string} [display_style] - The display style ('icon' or 'text').\n\n  @example\n  {% render 'search', style: 'default', class: 'custom-class', display_style: 'icon' %}\n{%- enddoc -%}\n\n{% unless style == 'none' %}\n  <search-button\n    class=\"search-action{% if display_style == 'text' %} search-action--text{% endif %}{% if class != blank %} {{ class | strip }}{% endif %}\"\n  >\n    <button\n      on:click=\"#search-modal/showDialog\"\n      class=\"button-unstyled header-actions__action{% if display_style == 'text' %} header-actions__text-style{% endif %}\"\n      aria-label=\"{{ 'content.search_input_label' | t }}\"\n      aria-haspopup=\"dialog\"\n    >\n      <span class=\"{% if display_style == 'icon' %}hidden{% else %}mobile:hidden{% endif %}\">\n        {{ 'content.search' | t }}\n      </span>\n\n      <span class=\"svg-wrapper {% if display_style != 'icon' %}desktop:hidden{% endif %}\">\n        {{ 'icon-search.svg' | inline_asset_content }}\n      </span>\n    </button>\n  </search-button>\n{% endunless %}\n\n{% stylesheet %}\n  .search-action {\n    --search-border-radius: var(--style-border-radius-inputs);\n    --search-border-width: var(--style-border-width-inputs);\n\n    display: flex;\n  }\n\n  @media screen and (max-width: 749px) {\n    .search-action--hidden-on-drawer {\n      display: none;\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    [data-menu-style='drawer'] .search-action--hidden-on-drawer {\n      display: none;\n    }\n\n    [data-menu-style='menu'] .search-action--hidden-on-menu {\n      display: none;\n    }\n  }\n\n  [data-menu-style='menu'] .header__column--left .search-action {\n    @media screen and (min-width: 750px) {\n      margin-inline: calc(var(--padding-lg) * -1);\n    }\n  }\n\n  .header__column--right .search-action {\n    @media screen and (min-width: 750px) {\n      margin-inline: calc(var(--gap-md) * -1) calc(var(--gap-xs) * -1);\n    }\n  }\n\n  @media screen and (min-width: 750px) {\n    .header__column--right .search-action--text {\n      margin-inline: 0;\n    }\n\n    [data-menu-style='menu'] .header__column--left .search-action--text {\n      margin-inline: 0;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/section.liquid",
    "content": "{%- doc -%}\n  Renders a wrapper section\n\n  @param {section} section - The section object\n  @param {string} children - The children of the section\n{%- enddoc -%}\n\n<div class=\"section-background color-{{ section.settings.color_scheme }}\"></div>\n<div\n  class=\"section section--{{ section.settings.section_width }} color-{{ section.settings.color_scheme }}\"\n  data-testid=\"ui-test-section\"\n\n  {% if request.visual_preview_mode %}\n    data-shopify-visual-preview\n  {% endif %}\n\n  style=\"\n    {% if section.settings.section_height == 'custom' %}\n      --section-min-height: {{ section.settings.section_height_custom }}svh;\n    {% elsif section.settings.section_height == 'full-screen' %}\n      --section-min-height: 100svh;\n    {% elsif section.settings.section_height != '' %}\n      --section-min-height: var(--section-height-{{ section.settings.section_height }});\n    {% endif %}\n\n    {% if section.settings.section_height != '' %}\n     --section-preview-height: 600px;\n     {% endif %}\n  \"\n>\n  <div class=\"custom-section-background\">\n    {% render 'background-media',\n      background_media: section.settings.background_media,\n      background_video: section.settings.video,\n      background_video_position: section.settings.video_position,\n      background_image: section.settings.background_image,\n      background_image_position: section.settings.background_image_position\n    %}\n  </div>\n\n  <div\n    class=\"border-style custom-section-content\"\n    style=\"{% render 'border-override', settings: section.settings %}\"\n  >\n    {% if section.settings.toggle_overlay %}\n      {% render 'overlay', settings: section.settings, layer: '0' %}\n    {% endif %}\n\n    <div\n      class=\"\n        spacing-style\n        layout-panel-flex\n        layout-panel-flex--{{ section.settings.content_direction }}\n        section-content-wrapper\n        {% if section.settings.vertical_on_mobile %} mobile-column{% endif %}\n      \"\n      style=\"\n        {% render 'layout-panel-style', settings: section.settings %}\n        {% render 'spacing-style', settings: section.settings %}\n      \"\n      data-testid=\"section-content\"\n    >\n      {{ children }}\n    </div>\n  </div>\n</div>\n\n{% stylesheet %}\n  .section-wrapper {\n    --section-height-offset: 0px;\n  }\n\n  .section[data-shopify-visual-preview] {\n    min-height: var(--section-preview-height);\n    padding-top: 0;\n  }\n\n  .section[data-shopify-visual-preview] .custom-section-background {\n    display: none;\n  }\n\n  body:has(> #header-group > .header-section > #header-component[transparent]):not(\n      :has(> #header-group > .header-section + .shopify-section)\n    )\n    > main\n    > .section-wrapper:first-child {\n    --section-height-offset: var(--header-group-height, 0);\n  }\n\n  .custom-section-background {\n    grid-column: 1 / -1;\n  }\n\n  .custom-section-content {\n    z-index: var(--layer-flat);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/size-style.liquid",
    "content": "{%- comment -%}\n  Intended for blocks and sections that provide values for all the referenced settings.\n  Accepts:\n     settings: {block.settings || section.settings}\n{%- endcomment -%}\n\n{%- if settings.width == 'custom' -%}\n  --size-style-width:\n  {{- settings.custom_width }}%;\n{%- elsif settings.width == 'fill' -%}\n  --size-style-width: 100%;\n{%- else -%}\n  --size-style-width: {{ settings.width }};\n{%- endif -%}\n\n{%- if settings.height == 'custom' -%}\n  --size-style-height:\n  {{- settings.custom_height }}%;\n{%- elsif settings.height == 'fill' -%}\n  --size-style-height: 100%;\n{%- else -%}\n  --size-style-height: {{ settings.height }};\n{%- endif -%}\n\n{% if settings.width_mobile == 'custom' %}\n  --size-style-width-mobile:\n  {{- settings.custom_width_mobile }}%; --size-style-width-mobile-min:\n  {{- settings.custom_width_mobile }}%;\n{%- elsif settings.width_mobile == 'fill' -%}\n  --size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem;\n{%- elsif settings.width_mobile == 'fit-content' -%}\n  --size-style-width-mobile: {{ settings.width_mobile }}; --size-style-width-mobile-min: {{ settings.width_mobile }};\n{%- endif -%}\n"
  },
  {
    "path": "snippets/skip-to-content-link.liquid",
    "content": "{%- doc -%}\n  Renders a skip to content link, visible on focus only.\n  Parent element must have position: relative to ensure proper positioning.\n\n  @param {string} href - The URL to skip to, usually an id like \"#MainContent\".\n  @param {string} text - The text to display, in the form of a translation key for a locale file.\n\n  @example\n  {% render 'skip-to-content-link', href: '#MainContent', text: 'Skip to main content' %}\n{%- enddoc -%}\n\n<a\n  class=\"skip-to-content-link button-secondary\"\n  href=\"{{ href }}\"\n>\n  {{ text | t }}\n</a>\n\n{% stylesheet %}\n  .skip-to-content-link {\n    position: absolute;\n    left: -99999px;\n  }\n\n  .skip-to-content-link:focus {\n    z-index: var(--layer-temporary);\n    overflow: auto;\n    width: auto;\n    height: auto;\n    padding: var(--padding-lg) var(--padding-4xl);\n    left: var(--margin-lg);\n    top: var(--margin-lg);\n    background-color: var(--color-background);\n    box-shadow: 0 0 0 var(--focus-outline-offset) var(--color-background);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/sku.liquid",
    "content": "{%- doc -%}\n  This snippet is used to render a product SKU.\n  It is used in the sku block.\n\n  @param {product} product_resource - The product to render\n{%- enddoc -%}\n\n{%- liquid\n  assign sku = product_resource.selected_or_first_available_variant.sku\n-%}\n\n<div ref=\"skuContainer\">\n  <span\n    class=\"sku\"\n    ref=\"sku\"\n    data-testid=\"product-sku\"\n  >\n    {{- sku -}}\n  </span>\n</div>\n"
  },
  {
    "path": "snippets/slideshow-arrow.liquid",
    "content": "{%- doc -%}\n  Renders a slideshow arrow control\n\n  @param {string} action - { 'previous' | 'next' } The action to perform when the arrow is clicked.\n  @param {string} [icon_style] - { 'arrow' | 'chevron' } The style of the icon, defaults to 'arrow'.\n  @param {string} [icon_shape] - { 'none' | 'circle' | 'square' } The shape of the icon background, defaults to 'none'.\n  @param {string} [icon_size] - { 'small' | 'medium' | 'large' } The size of the icon, defaults to 'medium'.\n\n  @example\n  {%- render 'slideshow-arrow', action: 'previous' -%}\n{%- enddoc -%}\n\n{%- liquid\n  assign icon_name = 'arrow'\n  assign style = icon_style | default: 'arrow'\n  assign shape = icon_shape | default: 'none'\n\n  if icon_style contains 'chevron'\n    assign icon_name = 'caret'\n  endif\n\n  if icon_style contains 'large'\n    assign icon_size = 'large'\n  endif\n-%}\n\n<button\n  class=\"\n    slideshow-control slideshow-control--{{ action }}\n    {% if icon_size %} slideshow-control--{{ icon_size }}{% endif %}\n    {% if shape != 'none' %} slideshow-control--shape-{{ shape }}{% endif %}\n    slideshow-control--style-{{ style }}\n    button button-unstyled button-unstyled--transparent\n    {% if action == 'previous' %} flip-x{% endif %}\n  \"\n  {% # theme-check-disable %}\n  aria-label=\"{{ 'accessibility.slideshow_' | append: action | t }}\"\n  {% # theme-check-enable %}\n  on:click=\"/{{ action }}\"\n  ref=\"{{ action }}\"\n>\n  <span class=\"svg-wrapper icon-{{ icon_name }}\">\n    {%- if icon_name == 'caret' -%}\n      {{- 'icon-caret.svg' | inline_asset_content -}}\n    {%- else -%}\n      {{- 'icon-arrow.svg' | inline_asset_content -}}\n    {%- endif -%}\n  </span>\n</button>\n\n{% stylesheet %}\n  .slideshow-control--large {\n    .icon-caret {\n      --icon-stroke-width: 1px;\n    }\n\n    .icon-caret {\n      --icon-stroke-width: 1px;\n    }\n\n    .svg-wrapper,\n    svg {\n      width: var(--slideshow-controls-icon);\n      height: var(--slideshow-controls-icon);\n    }\n  }\n\n  /* Slideshow control shape styles */\n  .slideshow-control.slideshow-control--shape-square,\n  .slideshow-control.slideshow-control--shape-circle {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    aspect-ratio: 1 / 1;\n    background-color: var(--color-primary-button-background);\n    color: var(--color-primary-button-text);\n  }\n\n  .slideshow-control.slideshow-control--shape-circle {\n    border-radius: 50%;\n  }\n\n  .slideshow-control.slideshow-control--shape-square {\n    border-radius: 0;\n  }\n\n  .slideshow-control .icon-caret {\n    rotate: -90deg;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/slideshow-arrows.liquid",
    "content": "{%- doc -%}\n  Renders arrow controls for a slideshow component.\n  Assumes arrows are placed on top of media.\n  When icon shape is 'none', component uses mixed-blend-mode to ensure visibility.\n\n  @param {string} [class] - The class name to apply to the slideshow-arrows component\n  @param {string} [icon_style] - The style of the icon, defaults to 'arrow'\n  @param {string} [icon_shape] - The shape of the icon background (none, circle, square), defaults to 'none'\n  @param {string} [arrows_position] - { 'left' | 'center' | 'right' } The position of the arrows, defaults to 'center'\n\n  @example\n  {%- render 'slideshow-arrows' -%}\n{%- enddoc -%}\n\n{%- liquid\n  if arrows_position == null\n    assign arrows_position = 'center'\n  endif\n-%}\n\n<slideshow-arrows\n  position=\"{{ arrows_position }}\"\n  {% if class %}\n    class=\"{{ class }}\"\n  {% endif %}\n>\n  {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: icon_shape -%}\n  {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: icon_shape -%}\n</slideshow-arrows>\n"
  },
  {
    "path": "snippets/slideshow-controls.liquid",
    "content": "{%- doc -%}\n  Renders controls for a slider component\n\n  @param {string} [style] - { 'dots' | 'counter' | 'thumbnails' | 'none' } The display style of the controls\n  @param {boolean} [autoplay] - Whether the controls will display an autoplay option\n  @param {number} [item_count] - The total number of slides\n  @param {boolean} [show_arrows] - Whether the controls will display arrows\n  @param {boolean} [arrows_on_media] - Whether the controls will display as floating icons on the media\n  @param {boolean} [controls_on_media] - Whether the controls will display as floating controls on the media\n  @param {media[]} [thumbnails] - Array of media to be displayed as thumbnails, sorted.\n  @param {string} [pagination_position] - { 'left' | 'center' | 'right' } Sets the pagination position, defaults to 'center' if none passed\n  @param {string} [icon_style] - The style of the icon, defaults to 'arrow'\n  @param {string} [shape] - The shape of the control, defaults to 'square'\n  @param {string} [aspect_ratio] - The aspect ratio of thumbnails, if applicable. defaults to 'adapt'\n  @param {number} [thumbnail_radius] - The border radius for thumbnails in pixels\n  @param {string} [class] - Additional classes to apply to the controls\n  @param {boolean} [secondary] - Whether the controls are secondary\n\n  @example\n  {%- render 'slideshow-controls', style: 'dots', item_count: 10 -%}\n{%- enddoc -%}\n\n{%- liquid\n  if aspect_ratio == null\n    assign aspect_ratio = 'adapt'\n  endif\n\n  if pagination_position == null\n    assign pagination_position = 'center'\n  endif\n\n  assign show_arrows_separately = false\n  if style == 'thumbnails' and arrows_on_media == false\n    assign show_arrows_separately = true\n    # Specific case - we want to show the arrows with the thumbnails if everything is off media and centered.\n    if controls_on_media == false and pagination_position == 'center'\n      assign show_arrows_separately = false\n    endif\n  elsif controls_on_media == true and arrows_on_media == false\n    assign show_arrows_separately = true\n  endif\n\n  if pagination_position == 'left' or pagination_position == 'right'\n    assign scroll_mode = 'vertical'\n  else\n    assign scroll_mode = 'horizontal'\n  endif\n-%}\n\n{% unless style == 'none' %}\n  <slideshow-controls\n    {% unless secondary %}\n      ref=\"slideshowControls\"\n    {% endunless %}\n    pagination-position=\"{{ pagination_position }}\"\n    scroll-mode=\"{{ scroll_mode }}\"\n    {% if controls_on_media %}\n      controls-on-media\n    {% endif %}\n    {% if arrows_on_media or icon_style == 'none' %}\n      icons-on-media\n    {% endif %}\n    {% if style == 'thumbnails' %}\n      thumbnails\n    {% endif %}\n    {% if class %}\n      class=\"{{ class }}\"\n    {% endif %}\n    {% if thumbnail_radius %}\n      style=\"--thumbnail-radius: {{ thumbnail_radius }}px;\"\n    {% endif %}\n  >\n    {% if show_arrows_separately == false and show_arrows and pagination_position != 'left' %}\n      <div class=\"slideshow-controls__arrows\">\n        {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%}\n\n        {% if pagination_position == 'right' %}\n          {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%}\n        {% endif %}\n      </div>\n    {% endif %}\n\n    {% if autoplay %}\n      <button\n        type=\"button\"\n        class=\"slideshow-control button-secondary button-unstyled icon-pause\"\n        aria-label=\"{{ 'accessibility.slideshow_pause' | t }}\"\n        on:click=\"/pause\"\n      >\n        {{- 'icon-pause.svg' | inline_asset_content -}}\n      </button>\n      <button\n        type=\"button\"\n        class=\"slideshow-control button-secondary button-unstyled icon-play\"\n        aria-label=\"{{ 'accessibility.slideshow_play' | t }}\"\n        on:click=\"/play\"\n      >\n        {{- 'icon-play.svg' | inline_asset_content -}}\n      </button>\n    {% endif %}\n\n    {% case style %}\n      {% when 'thumbnails' %}\n        <scroll-hint\n          ref=\"thumbnailsContainer\"\n          class=\"slideshow-controls__thumbnails-container\"\n        >\n          <div class=\"slideshow-controls__thumbnails\">\n            {% for media in thumbnails %}\n              <button\n                class=\"slideshow-control button button-unstyled slideshow-controls__thumbnail\"\n                aria-label=\"{{ 'accessibility.slide_status' | t: index: forloop.index, length: forloop.length }}\"\n                on:click=\"/select/{{ forloop.index0 }}\"\n                style=\"--aspect-ratio: {% if aspect_ratio == 'adapt' %}{{ media.preview_image.aspect_ratio | default: 1.0 }}{% else %}{{ aspect_ratio }}{% endif %};\"\n                ref=\"thumbnails[]\"\n                {% if forloop.first %}\n                  aria-selected=\"true\"\n                {% endif %}\n              >\n                {% liquid\n                  assign focal_point_style = ''\n                  if media.presentation.focal_point != blank\n                    assign focal_point_style = 'object-position: ' | append: media.presentation.focal_point | append: ';'\n                  endif\n                %}\n                {{\n                  media.preview_image\n                  | image_url: width: 144\n                  | image_tag: loading: 'lazy', alt: media.alt, style: focal_point_style\n                  | escape\n                }}\n\n                {% if media.media_type == 'video' or media.media_type == 'external_video' %}\n                  <span class=\"slideshow-controls__thumbnail-badge\">\n                    {{ 'icon-play.svg' | inline_asset_content }}\n                  </span>\n                {% elsif media.media_type == 'model' %}\n                  <span class=\"slideshow-controls__thumbnail-badge\">\n                    <svg\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                      aria-hidden=\"true\"\n                      focusable=\"false\"\n                      class=\"icon\"\n                      fill=\"none\"\n                      viewBox=\"0 0 18 21\"\n                    >\n                      {% render 'icon', icon: '3d-model' %}\n                    </svg>\n                  </span>\n                {% endif %}\n              </button>\n            {% endfor %}\n          </div>\n        </scroll-hint>\n      {% when 'counter' %}\n        <div class=\"slideshow-controls__counter\">\n          <span ref=\"current\">1</span><span class=\"slash\">/</span>{{ item_count -}}\n        </div>\n      {% when 'dots' %}\n        <ol class=\"slideshow-controls__{{ style }}\">\n          {% for i in (1..item_count) %}\n            <li>\n              <button\n                class=\"slideshow-control button button-unstyled\"\n                style=\"animation-timeline: --slide-{{ forloop.index0 }}\"\n                aria-label=\"{{ 'accessibility.slide_status' | t: index: forloop.index, length: forloop.length }}\"\n                on:click=\"/select/{{ forloop.index0 }}\"\n                ref=\"dots[]\"\n                {% if forloop.first %}\n                  aria-selected=\"true\"\n                {% endif %}\n              >\n                {{ forloop.index }}\n              </button>\n            </li>\n          {% endfor %}\n        </ol>\n    {% endcase %}\n\n    {% if show_arrows_separately == false and show_arrows and pagination_position != 'right' %}\n      <div class=\"slideshow-controls__arrows\">\n        {% if pagination_position == 'left' %}\n          {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%}\n        {% endif %}\n\n        {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%}\n      </div>\n    {% endif %}\n  </slideshow-controls>\n\n  {% if show_arrows_separately and show_arrows %}\n    <div class=\"slideshow-controls__arrows\">\n      {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%}\n      {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%}\n    </div>\n  {% endif %}\n{% endunless %}\n\n{% stylesheet %}\n  slideshow-controls {\n    flex-shrink: 0;\n    display: flex;\n    justify-content: space-between;\n    scrollbar-width: none;\n    min-height: var(--minimum-touch-target);\n    grid-area: controls;\n\n    &[controls-on-media] {\n      position: absolute;\n      bottom: 0;\n    }\n  }\n\n  slideshow-controls::-webkit-scrollbar {\n    display: none;\n  }\n\n  slideshow-controls button {\n    --color: rgb(var(--color-foreground-rgb) / var(--opacity-30));\n    --color-active: var(--color-foreground);\n    --color-hover: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n\n    display: inline-block;\n    height: var(--minimum-touch-target);\n    width: var(--minimum-touch-target);\n    cursor: pointer;\n  }\n\n  slideshow-controls .icon {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-xs);\n  }\n\n  slideshow-controls[pagination-position='center'] {\n    align-items: center;\n    justify-content: center;\n  }\n\n  slideshow-controls[pagination-position='center'][thumbnails] {\n    width: 100%;\n  }\n\n  slideshow-controls[pagination-position='center']:not([controls-on-media], [thumbnails], [icons-on-media]) {\n    justify-content: space-between;\n  }\n\n  @media screen and (min-width: 750px) {\n    slideshow-controls[thumbnails]:is([pagination-position='right'], [pagination-position='left']) {\n      display: flex;\n      flex-direction: column;\n      height: 0;\n      min-height: 100%;\n\n      .slideshow-controls__thumbnails-container {\n        overflow: hidden auto;\n      }\n\n      &:not([controls-on-media]) {\n        .slideshow-controls__thumbnails-container {\n          position: sticky;\n          top: var(--sticky-header-offset, 0);\n        }\n\n        .slideshow-controls__thumbnails {\n          padding-block-start: var(--focus-outline-offset);\n        }\n      }\n    }\n\n    slideshow-controls:is([pagination-position='right'], [pagination-position='left']) .slideshow-controls__thumbnails {\n      flex-direction: column;\n    }\n\n    slideshow-controls:not([controls-on-media]) {\n      &:is([pagination-position='left'], [pagination-position='right']) .slideshow-controls__thumbnails {\n        padding-block: var(--padding-2xs);\n      }\n\n      &[pagination-position='right'] .slideshow-controls__thumbnails {\n        padding-inline-end: var(--slideshow-thumbnails-padding-inline, var(--focus-outline-offset));\n      }\n\n      &[pagination-position='left'] .slideshow-controls__thumbnails {\n        padding-inline-start: var(--slideshow-thumbnails-padding-inline, var(--focus-outline-offset));\n      }\n    }\n  }\n\n  slideshow-controls:not([controls-on-media])[icons-on-media] {\n    &[pagination-position='right'] {\n      justify-content: flex-end;\n    }\n\n    &[pagination-position='left'] {\n      justify-content: flex-start;\n    }\n  }\n\n  slideshow-controls[controls-on-media] {\n    z-index: var(--layer-raised);\n\n    &:has(.slideshow-controls__dots, .slideshow-controls__counter) {\n      --color-foreground: #fff;\n      --color-foreground-rgb: var(--color-white-rgb);\n    }\n\n    &[pagination-position='right'] {\n      right: 0;\n    }\n\n    &[pagination-position='left'] {\n      left: 0;\n    }\n\n    &[pagination-position='center'] {\n      width: 100%;\n    }\n\n    &:not([thumbnails])[pagination-position='left'] {\n      width: fit-content;\n      align-self: flex-start;\n    }\n\n    &:not([thumbnails])[pagination-position='right'] {\n      width: fit-content;\n      align-self: flex-end;\n    }\n  }\n\n  .slideshow-controls__arrows {\n    display: flex;\n    justify-content: space-between;\n    height: var(--minimum-touch-target);\n    grid-area: arrows;\n\n    button {\n      padding: 0 var(--padding-xs);\n    }\n  }\n\n  .slideshow-controls__dots,\n  .slideshow-controls__counter {\n    display: inline-flex;\n    justify-content: center;\n    align-items: center;\n    margin: 0;\n    list-style: none;\n\n    button {\n      --color: rgb(var(--color-foreground-rgb) / var(--opacity-30));\n      --color-active: var(--color-foreground);\n      --color-hover: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n    }\n  }\n\n  slideshow-controls:has(.slideshow-controls__dots),\n  slideshow-component[autoplay] slideshow-controls {\n    mix-blend-mode: difference;\n  }\n\n  .slideshow-controls__dots {\n    gap: 0.6rem;\n    padding: var(--padding-sm) var(--padding-lg);\n    border-radius: 3rem;\n    overflow: hidden;\n\n    button {\n      --size: 0.56rem;\n\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: calc(var(--size) * 2);\n      height: calc(var(--size) * 2);\n      margin: calc(var(--size) / -2);\n      font-size: 0;\n      border-radius: calc(var(--size));\n\n      &::after {\n        content: '';\n        display: block;\n        background-color: var(--color);\n        height: var(--size);\n        width: var(--size);\n        border-radius: calc(var(--size) / 2);\n        box-shadow: inset 0 0 0 1.5px hsl(0 0% 0% / 0.15);\n\n        @supports not (view-timeline-axis: inline) {\n          &[aria-selected='true'] {\n            --color: var(--color-active);\n          }\n        }\n\n        &:hover {\n          --color: var(--color-hover);\n        }\n      }\n\n      &[aria-selected='true'] {\n        --color: var(--color-active);\n\n        &::after {\n          box-shadow: inset 0 0 0 1.5px hsl(0 0% 0% / 0.4);\n        }\n      }\n    }\n  }\n\n  .slideshow-controls__dots,\n  .slideshow-controls__counter {\n    &:only-child {\n      margin-inline: auto;\n    }\n  }\n\n  .slideshow-controls__counter {\n    color: var(--color-foreground);\n    background-color: rgb(0 0 0 / 40%);\n    width: auto;\n    border-radius: 2rem;\n    padding: 0.3rem var(--padding-sm);\n    margin-inline: var(--margin-sm);\n    backdrop-filter: blur(10px);\n    font-variant-numeric: tabular-nums;\n    font-size: var(--font-size--xs);\n\n    .slash {\n      color: rgb(var(--color-foreground-rgb) / var(--opacity-40));\n      padding-inline: var(--padding-2xs);\n      margin-block-start: -0.1rem;\n    }\n  }\n\n  .slideshow-control[disabled] {\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n\n  /* Slideshow Thumbnails */\n  .slideshow-controls__thumbnails-container {\n    display: flex;\n    width: 100%;\n    max-height: 100%;\n    overflow-x: scroll;\n    scrollbar-width: none;\n  }\n\n  .slideshow-controls__thumbnails {\n    display: inline-flex;\n    padding-inline: var(--slideshow-thumbnails-padding-inline, var(--padding-sm));\n    padding-block: var(--slideshow-thumbnails-padding-block, var(--padding-sm));\n    gap: var(--gap-xs);\n    margin-inline: auto;\n    height: fit-content;\n\n    .slideshow-control {\n      border-radius: var(--thumbnail-radius, var(--media-radius));\n      width: clamp(44px, 7vw, var(--thumbnail-width));\n      height: auto;\n      aspect-ratio: var(--aspect-ratio);\n\n      img {\n        height: 100%;\n        object-fit: cover;\n        border-radius: var(--thumbnail-radius, var(--media-radius));\n      }\n\n      &:is([aria-selected='true']) {\n        outline: var(--focus-outline-width) solid currentcolor;\n        outline-offset: calc(var(--focus-outline-offset) / 2);\n        border: var(--style-border-width) solid rgb(var(--color-border-rgb) / var(--media-border-opacity));\n      }\n    }\n  }\n\n  .slideshow-controls__thumbnail {\n    position: relative;\n  }\n\n  .slideshow-controls__thumbnail-badge {\n    position: absolute;\n    top: var(--padding-2xs);\n    right: var(--padding-2xs);\n    width: clamp(16px, 10%, 20px);\n    height: clamp(16px, 10%, 20px);\n    background-color: var(--color-background);\n    border-radius: var(--style-border-radius-xs);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    box-shadow: 0 0 0 1px rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  .slideshow-controls__thumbnail-badge svg {\n    width: 60%;\n    height: 60%;\n    fill: var(--color-foreground);\n    opacity: 0.6;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/slideshow-slide.liquid",
    "content": "{%- doc -%}\n  Renders a slideshow slide component.\n\n  @param {number} index - the zero-based index of the slide\n  @param {string} [children] - The content of the slideshow slide\n  @param {string} [class] - HTML class attribute of the slideshow slide\n  @param {string} [style] - HTML style attribute of the slideshow slide\n  @param {string} [attributes] - Additional HTML attributes to add to the slideshow slide\n  @param {boolean} [hidden] - Hidden slides will not be shown in the slideshow\n  @param {string} [slide_size] - The size of the slide (small, medium, large)\n  @param {string} [slide_id] - The unique id assigned to the slide amongst all slides in the slideshow\n  @param {string} [media_fit] - { 'cover', 'contain' } - CSS property for how the media should be fit in the slide\n  @param {boolean} [navigate_to_slide] - Whether the user can click to navigate to the slide\n\n  @example\n  {% render 'slideshow-slide', index: 0, children: imageElement, slide_id: 'slide-1', hidden: false, media_fit: 'cover' %}\n{%- enddoc -%}\n\n{%- liquid\n  assign class = class | strip | strip_newlines\n  assign style = style | strip | strip_newlines\n\n  assign grid_template_rows = '--grid-template-rows: 50dvh 1fr;'\n  assign grid_template_rows_desktop = '--grid-template-rows-desktop: 70dvh 1fr;'\n\n  case slide_size\n    when 'small'\n      assign grid_template_rows = grid_template_rows | replace: '50dvh', '30dvh'\n      assign grid_template_rows_desktop = grid_template_rows_desktop | replace: '70dvh', '40dvh'\n    when 'medium'\n      assign grid_template_rows = grid_template_rows | replace: '50dvh', '35dvh'\n      assign grid_template_rows_desktop = grid_template_rows_desktop | replace: '70dvh', '50dvh'\n    when 'large'\n      assign grid_template_rows = grid_template_rows | replace: '50dvh', '40dvh'\n      assign grid_template_rows_desktop = grid_template_rows_desktop | replace: '70dvh', '60dvh'\n  endcase\n-%}\n\n<slideshow-slide\n  ref=\"slides[]\"\n  aria-hidden=\"{% if index == 0 %}false{% else %}true{% endif %}\"\n  style=\"--slideshow-timeline: --slide-{{ index }}; --product-media-fit: {{ media_fit | default: 'cover' }}; {{ grid_template_rows }} {{ grid_template_rows_desktop }}\"\n  {% if class != blank %}\n    class=\"{{ class }}\"\n  {% endif %}\n  {{ attributes }}\n  {% if style != blank %}\n    style=\"{{ style }}\"\n  {% endif %}\n  {% if slide_id != blank %}\n    slide-id=\"{{ slide_id }}\"\n  {% endif %}\n  {% if hidden == true %}\n    hidden\n  {% endif %}\n  {% if navigate_to_slide %}\n    on:click=\"/select/{{ index }}\"\n  {% endif %}\n  {{ attributes }}\n>\n  {{ children }}\n</slideshow-slide>\n"
  },
  {
    "path": "snippets/slideshow.liquid",
    "content": "{%- doc -%}\n  Renders a slideshow component.\n  Condiional <slideshow-arrows> component and slideshow controls.\n\n  @param {object[]} slides - the slides of the slideshow\n  @param {string} [ref] - the ref of the slideshow component\n  @param {string} [class] - HTML class attribute of the slideshow component\n  @param {string} [controls] - the controls of the slideshow component\n  @param {string} [style] - HTML style attribute of the slideshow component\n  @param {boolean} [autoplay] - whether the slideshow will autoplay\n  @param {number} [autoplay_speed] - the speed of the slideshow autoplay\n  @param {boolean} [auto_hide_controls] - whether to hide slideshow-controls when the scroller is smaller than the viewport\n  @param {boolean} [infinite] - whether the slideshow will loop\n  @param {number} [initial_slide] - the 0-based index of the initial slide, defaults to 0\n  @param {string} [slideshow_gutters] - the gutter positions to render. Set width with CSS variables --gutter-slide-width\n  @param {number} [slide_count] - the total number of slides\n  @param {string} [slide_size] - the height of the slides\n  @param {string} [slide_position] - the vertical position of the slides, defaults to 'top'\n  @param {boolean} [show_arrows] - whether the slideshow will render a slideshow-arrows component\n  @param {string} [slideshow_arrows] - a custom slideshow-arrows component to render instead of the default\n  @param {string} [icon_style] - The style of the icon, defaults to 'arrow'\n  @param {string} [icon_shape] - The shape of the icon background (none, circle, square), defaults to 'none'\n  @param {string} [arrows_position] - The position of the arrows, defaults to 'bottom'\n  @param {string} [attributes] - Additional attributes to add to the slideshow component\n  @param {boolean} [header] - The title of the slideshow\n\n  @example\n  {% render 'slideshow', slides: slides, slide_count: collection.products.size, ref: 'mobileSlideshow' %}\n{%- enddoc -%}\n\n{%- liquid\n  assign class = class | strip | strip_newlines\n\n  if slide_position == 'stretch'\n    assign class = class | append: ' slideshow--stretch-content' | strip\n  endif\n\n  assign slide_min_height = '--slide-min-height: auto;'\n  assign slide_min_height_desktop = '--slide-min-height-desktop: auto;'\n\n  case slide_size\n    when 'small'\n      assign slide_min_height = slide_min_height | replace: 'auto', '17.5rem'\n      assign slide_min_height_desktop = slide_min_height_desktop | replace: 'auto', '26.25rem'\n    when 'medium'\n      assign slide_min_height = slide_min_height | replace: 'auto', '21.25rem'\n      assign slide_min_height_desktop = slide_min_height_desktop | replace: 'auto', '35rem'\n    when 'large'\n      assign slide_min_height = slide_min_height | replace: 'auto', '25rem'\n      assign slide_min_height_desktop = slide_min_height_desktop | replace: 'auto', '45rem'\n  endcase\n\n  case slide_position\n    when 'center'\n      assign align_items = '--slideshow-align-items: center;'\n    when 'bottom'\n      assign align_items = '--slideshow-align-items: flex-end;'\n    when 'top'\n      assign align_items = '--slideshow-align-items: flex-start;'\n    when 'stretch'\n      assign align_items = '--slideshow-align-items: stretch;'\n  endcase\n\n  assign style = style | strip | strip_newlines | append: align_items | append: slide_min_height | append: slide_min_height_desktop\n-%}\n\n{%- liquid\n  assign timeline_scope = ''\n\n  for index in (1..slide_count)\n    assign index0 = index | minus: 1\n    assign scope = '--slide-index, ' | replace: 'index', index0\n    assign timeline_scope = timeline_scope | append: scope\n  endfor\n\n  assign timeline_scope = timeline_scope | strip | split: ',' | compact | join: ','\n-%}\n\n<slideshow-component\n  {% if ref != blank %}\n    ref=\"{{ ref }}\"\n  {% endif %}\n  {% if class != blank %}\n    class=\"{{ class }}\"\n  {% endif %}\n  style=\"--slideshow-timeline: {{ timeline_scope }};{{ style }}\"\n  {% if autoplay == true %}\n    autoplay=\"{{ autoplay_speed }}\" aria-live=\"polite\"\n  {% endif %}\n  initial-slide=\"{{ initial_slide | default: 0 }}\"\n  {% if auto_hide_controls %}\n    auto-hide-controls\n  {% endif %}\n  {% unless infinite == false %}\n    infinite\n  {% endunless %}\n\n  {{ attributes }}\n>\n  {% if header != blank %}\n    {{ header }}\n  {% endif %}\n  <slideshow-container ref=\"slideshowContainer\">\n    {% if show_arrows %}\n      {% render 'slideshow-arrows', icon_style: icon_style, icon_shape: icon_shape, arrows_position: arrows_position %}\n    {% endif %}\n    {% if slideshow_arrows %}\n      {{ slideshow_arrows }}\n    {% endif %}\n    <slideshow-slides\n      tabindex=\"-1\"\n      ref=\"scroller\"\n      {% if slideshow_gutters %}\n        gutters=\"{{ slideshow_gutters }}\"\n      {% endif %}\n    >\n      {{ slides }}\n    </slideshow-slides>\n  </slideshow-container>\n  {{ controls }}\n</slideshow-component>\n\n{% stylesheet %}\n  slideshow-slides {\n    align-items: var(--slideshow-align-items, normal);\n  }\n\n  .slideshow--stretch-content slideshow-slides > * {\n    height: auto;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/sorting.liquid",
    "content": "{%- doc -%}\n  Renders the sorting component.\n\n  @param {object} results - The results of the search\n  @param {string} sort_by - The current sort by\n  @param {string} filter_style - The filter style\n  @param {string} [suffix] - { 'desktop' | 'mobile' | 'overflow' } Used on `form` attributes to connect inputs to a form[id]\n  @param {string} [sort_position] - { 'desktop' | 'mobile' } Used in a data-testID selector for automated testing\n  @param {boolean} should_use_select_on_mobile - Whether to use a select element for the sorting component on mobile\n  @param {string} section_id - The section ID\n{%- enddoc -%}\n\n<sorting-filter-component\n  class=\"sorting-filter{% if filter_style == 'horizontal' %} sorting-filter__horizontal{% endif %}\"\n  on:change=\"/updateFilterAndSorting\"\n  on:keydown=\"/handleKeyDown\"\n  {% if sort_position != blank %}\n    data-testid=\"sorting-filter-component-{{ sort_position }}\"\n  {% endif %}\n  data-should-use-select-on-mobile=\"{{ should_use_select_on_mobile }}\"\n>\n  {% liquid\n    assign default_sort_by = results.default_sort_by\n    for option in results.sort_options\n      if option.value == sort_by\n        assign status = option.name\n      endif\n    endfor\n  %}\n\n  <div class=\"sorting-filter__container {% if should_use_select_on_mobile %} desktop:hidden {% else %} hidden {% endif %}\">\n    <label\n      for=\"sort-select-{{ section_id }}\"\n      class=\"facets__label\"\n    >\n      {{- 'actions.sort' | t -}}\n    </label>\n    <div class=\"sorting-filter__select-wrapper\">\n      <select\n        id=\"sort-select-{{ section_id }}\"\n        name=\"sort_by\"\n        class=\"sorting-filter__select\"\n        {% if should_use_select_on_mobile == false %}\n          disabled\n        {% endif %}\n      >\n        {% for option in results.sort_options %}\n          <option\n            value=\"{{ option.value }}\"\n            {% if option.value == sort_by %}\n              selected\n            {% endif %}\n          >\n            {{ option.name }}\n          </option>\n        {% endfor %}\n      </select>\n      <svg\n        aria-hidden=\"true\"\n        focusable=\"false\"\n        class=\"icon icon-caret\"\n        width=\"8\"\n        height=\"13\"\n        viewBox=\"0 0 8 13\"\n      >\n        {%- render 'icon', icon: 'double-sided-caret' -%}\n      </svg>\n    </div>\n  </div>\n\n  <accordion-custom\n    {% if filter_style == 'horizontal' %}\n      data-disable-animation-on-desktop=\"true\"\n      data-close-with-escape=\"true\"\n    {% endif %}\n  >\n    <details\n      ref=\"details\"\n      id=\"Sorting-{{ section_id }}\"\n      data-default-sort-by=\"{{ default_sort_by }}\"\n      class=\"facets__panel {% if should_use_select_on_mobile %} mobile:hidden {% endif %}\"\n      data-auto-close-details=\"desktop,mobile\"\n      on:toggle=\"/handleToggle\"\n    >\n      <summary\n        class=\"facets__summary\"\n        role=\"button\"\n        aria-expanded=\"false\"\n        aria-controls=\"sorting-options-{{ section_id }}\"\n        ref=\"summary\"\n      >\n        <span\n          class=\"facets__label\"\n          id=\"sort-label-{{ section_id }}\"\n        >\n          {{- 'actions.sort' | t -}}\n        </span>\n        <span\n          class=\"facets__status h6 desktop:hidden\"\n        >\n          {{- status -}}\n        </span>\n        <span class=\"svg-wrapper icon-caret icon-animated\">\n          {{- 'icon-caret.svg' | inline_asset_content -}}\n        </span>\n      </summary>\n      <floating-panel-component\n        id=\"sorting-options-{{ section_id }}\"\n        class=\"sorting-filter__options color-{{ settings.popover_color_scheme }}\"\n        role=\"listbox\"\n        aria-labelledby=\"sort-label-{{ section_id }}\"\n        ref=\"listbox\"\n      >\n        <div class=\"sorting-filter__options-inner\">\n          {% for option in results.sort_options %}\n            <label\n              for=\"sort-option-{{ option.value }}-{{ section_id }}\"\n            >\n              <div\n                class=\"sorting-filter__option\"\n                role=\"option\"\n                aria-selected=\"{% if option.value == sort_by %}true{% else %}false{% endif %}\"\n                tabindex=\"{% if option.value == sort_by %}0{% else %}-1{% endif %}\"\n              >\n                <input\n                  type=\"radio\"\n                  name=\"sort_by\"\n                  id=\"sort-option-{{ option.value }}-{{ section_id }}\"\n                  {% if suffix != blank %}\n                    form=\"FacetFiltersForm--{{ section_id }}-{{ suffix }}\"\n                  {% endif %}\n                  value=\"{{ option.value }}\"\n                  class=\"sorting-filter__input\"\n                  data-option-name=\"{{ option.name }}\"\n                  {% if option.value == sort_by %}\n                    checked\n                  {% endif %}\n                  aria-hidden=\"true\"\n                >\n                <span class=\"svg-wrapper icon-checkmark sorting-filter__checkmark\">\n                  {{- 'icon-checkmark.svg' | inline_asset_content -}}\n                </span>\n                <span class=\"sorting-filter__label\">{{ option.name }}</span>\n              </div>\n            </label>\n          {% endfor %}\n        </div>\n      </floating-panel-component>\n    </details>\n  </accordion-custom>\n</sorting-filter-component>\n\n{% stylesheet %}\n  .sorting-filter__container {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding-inline: var(--drawer-padding) 0;\n    padding-block: var(--padding-sm);\n    margin-inline-end: var(--margin-md);\n    position: relative;\n  }\n\n  .sorting-filter__container .facets__label {\n    font-size: var(--font-h4--size);\n  }\n\n  .sorting-filter__select-wrapper {\n    display: flex;\n    position: relative;\n    border-radius: var(--variant-picker-button-radius);\n    align-items: center;\n    overflow: clip;\n    padding: var(--padding-2xs) var(--padding-xs);\n  }\n\n  .sorting-filter__select-wrapper:has(:focus-visible) {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .sorting-filter__select-wrapper:has(:focus-visible) .sorting-filter__select {\n    outline: none;\n  }\n\n  .sorting-filter__container .sorting-filter__select {\n    appearance: none;\n    border: 0;\n    margin: 0;\n    cursor: pointer;\n    width: 100%;\n    padding-inline-end: var(--icon-size-2xs);\n    text-align: right;\n\n    /* Needed for Safari */\n    text-align-last: right;\n  }\n\n  .sorting-filter__select .icon {\n    position: absolute;\n    right: var(--padding-md);\n    top: 50%;\n    transform: translateY(-50%);\n    width: var(--icon-size-2xs);\n    height: var(--icon-size-2xs);\n    pointer-events: none;\n  }\n\n  .sorting-filter {\n    @media screen and (min-width: 750px) {\n      z-index: var(--facets-upper-z-index);\n    }\n  }\n\n  .sorting-filter__options {\n    display: grid;\n    grid-template-rows: 0fr;\n    opacity: 0;\n    position: absolute;\n    top: 100%;\n    right: 0;\n    color: var(--color-foreground);\n    z-index: var(--facets-upper-z-index);\n    box-shadow: var(--shadow-popover);\n    border: var(--style-border-popover);\n    background-color: var(--color-background);\n    border-radius: var(--style-border-radius-popover);\n    width: max-content;\n    min-width: var(--facets-panel-min-width);\n    min-height: 0;\n\n    transition: grid-template-rows var(--animation-speed-slow) var(--animation-easing),\n      opacity var(--animation-speed-slow) var(--animation-easing);\n  }\n\n  details[open] .sorting-filter__options {\n    opacity: 1;\n    grid-template-rows: 1fr;\n  }\n\n  .sorting-filter__options-inner {\n    display: flex;\n    flex-direction: column;\n    grid-row: 1 / span 2;\n    gap: var(--gap-sm);\n    padding: calc(var(--drawer-padding) / 2);\n    color: var(--color-foreground);\n    overflow: clip;\n    scrollbar-width: none;\n    -ms-overflow-style: none;\n\n    &::-webkit-scrollbar {\n      display: none;\n    }\n\n    @media screen and (min-width: 750px) {\n      gap: 0;\n    }\n  }\n\n  .sorting-filter__option {\n    cursor: pointer;\n    display: grid;\n    grid-template-columns: var(--icon-size-sm) 1fr;\n    gap: var(--margin-2xs);\n    align-items: center;\n    min-width: 180px;\n    max-width: 16em;\n    padding: var(--padding-2xs) calc(var(--drawer-padding) / 2) var(--padding-2xs) var(--padding-2xs);\n\n    &:hover {\n      border-radius: calc(var(--style-border-radius-popover) / 2);\n      background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8));\n    }\n\n    &:focus {\n      border-radius: calc(var(--style-border-radius-popover) / 2);\n    }\n  }\n\n  .sorting-filter__input {\n    display: none;\n\n    &:checked + .sorting-filter__checkmark + .sorting-filter__label {\n      font-weight: 500;\n    }\n  }\n\n  .sorting-filter__checkmark {\n    visibility: hidden;\n  }\n\n  *:checked ~ .sorting-filter__checkmark {\n    visibility: visible;\n  }\n\n  .sorting-filter__label {\n    cursor: pointer;\n    pointer-events: none;\n  }\n\n  .facets-toggle--no-filters .sorting-filter__select-wrapper {\n    @media screen and (max-width: 749px) {\n      padding-inline-start: 0;\n    }\n  }\n\n  .facets-mobile-wrapper .sorting-filter .facets__panel {\n    padding-inline: 0;\n    position: relative;\n  }\n\n  .facets-mobile-wrapper .sorting-filter .facets__status {\n    display: none;\n  }\n\n  .facets-mobile-wrapper:has(> :nth-child(2)) .sorting-filter .sorting-filter__options {\n    left: 0;\n    right: unset;\n  }\n\n  .facets-mobile-wrapper .sorting-filter .facets__label {\n    margin-inline-end: var(--margin-2xs);\n    font-size: var(--font-paragraph--size);\n    color: var(--color-foreground-muted);\n  }\n\n  .facets-toggle .sorting-filter__container {\n    @media screen and (max-width: 749px) {\n      padding: 0;\n    }\n  }\n\n  .facets-toggle .sorting-filter__container .facets__label {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .facets-toggle .sorting-filter::before {\n    @media screen and (max-width: 749px) {\n      display: none;\n    }\n  }\n\n  .facets--drawer .sorting-filter {\n    @media screen and (min-width: 750px) {\n      display: none;\n    }\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/spacing-padding.liquid",
    "content": "{%- comment -%}\n  Intended for blocks and sections that provide values for all the referenced settings.\n\n  <div style=\"{%  render 'spacing-padding', settings: section.settings %}\">\n\n   Accepts:\n      settings: {block.settings || section.settings}\n{%- endcomment -%}\n\n--padding-block-start: {{ settings.padding-block-start | default: 0 }}px; --padding-block-end:{{- settings.padding-block-end | default: 0 -}}px; \n--padding-inline-start:{{ settings.padding-inline-start | default: 0 }}px; --padding-inline-end:{{- settings.padding-inline-end | default: 0 -}}px; \n"
  },
  {
    "path": "snippets/spacing-style.liquid",
    "content": "{%- doc -%}\n  Renders CSS variables for spacing (padding and margin) styles with responsive scaling.\n  Intended for blocks and sections that provide values for all the referenced settings.\n\n  @param {object} settings - The block or section settings object containing spacing values\n\n  @example\n  <div class=\"spacing-style\" style=\"{% render 'spacing-style', settings: section.settings %}\">\n{%- enddoc -%}\n{%- liquid\n  assign scale_min = 20\n  assign keys = 'padding-block-start,padding-block-end,padding-inline-start,padding-inline-end' | split: ','\n\n  for key in keys\n    assign value = settings[key]\n\n    if value != blank\n      echo '--'\n      echo key\n      echo ': '\n\n      if value > scale_min\n        echo 'max('\n        echo scale_min\n        echo 'px, calc(var(--spacing-scale) * '\n        echo value\n        echo 'px))'\n      else\n        echo value\n        echo 'px'\n      endif\n\n      echo ';'\n    endif\n  endfor\n-%}\n"
  },
  {
    "path": "snippets/strikethrough-variant.liquid",
    "content": "{% unless product_option.available %}\n  <svg\n    viewBox=\"0 0 100 46\"\n    preserveAspectRatio=\"xMidYMid slice\"\n    class=\"variant-option__strikethrough\"\n  >\n    {% # 25deg %}\n    <line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"46\" vector-effect=\"non-scaling-stroke\" />\n    {% # duplicate line for motion overlay %}\n    <line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"46\" vector-effect=\"non-scaling-stroke\" />\n  </svg>\n{% endunless %}\n"
  },
  {
    "path": "snippets/stylesheets.liquid",
    "content": "{{ 'overflow-list.css' | asset_url | preload_tag: as: 'style' }}\n{{ 'base.css' | asset_url | stylesheet_tag: preload: true }}\n"
  },
  {
    "path": "snippets/submenu-font-styles.liquid",
    "content": "{%- comment -%}\n  Derives CSS variables from the menu typography settings for 2nd and 3rd level menu items.\n  Accepts:\n     settings: {block.settings}\n{%- endcomment -%}\n\n--menu-parent-font-family: var(--font-{{ settings.type_font_primary_link }}--family); --menu-parent-font-style:\nvar(--font-\n{{- settings.type_font_primary_link -}}\n--style); --menu-parent-font-weight: var(--font-\n{{- settings.type_font_primary_link -}}\n--weight); --menu-parent-font-case:\n{% if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif %};\n{% case settings.menu_font_style %}\n  {% when 'regular' %}\n    --menu-parent-font-size: var(--menu-font-md--size); --menu-parent-font-line-height:\n    var(--menu-font-md--line-height); --menu-parent-font-color: var(--color-foreground);\n    --menu-parent-active-font-color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  {% when 'inverse' %}\n    --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height:\n    var(--menu-font-sm--line-height); --menu-parent-font-color: rgb(var(--color-foreground-rgb) /\n    var(--opacity-subdued-text)); --menu-parent-active-font-color: var(--color-foreground);\n  {% when 'inverse_large' %}\n    --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height:\n    var(--menu-font-sm--line-height); --menu-parent-font-color: rgb(var(--color-foreground-rgb) /\n    var(--opacity-subdued-text)); --menu-parent-active-font-color: var(--color-foreground);\n{% endcase %}\n--menu-child-font-family: var(--font-{{ settings.type_font_primary_link }}--family); --menu-child-font-style:\nvar(--font-\n{{- settings.type_font_primary_link -}}\n--style); --menu-child-font-weight: var(--font-\n{{- settings.type_font_primary_link -}}\n--weight); --menu-child-font-case:\n{% if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif %};\n{% case settings.menu_font_style %}\n  {% when 'regular' %}\n    --menu-child-font-size: var(--menu-font-sm--size); --menu-child-font-line-height: var(--menu-font-sm--line-height);\n    --menu-child-font-color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n    --menu-child-active-font-color: var(--color-foreground);\n  {% when 'inverse' %}\n    --menu-child-font-size: var(--menu-font-md--size); --menu-child-font-line-height: var(--menu-font-md--line-height);\n    --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: rgb(var(--color-foreground-rgb) /\n    var(--opacity-subdued-text));\n  {% when 'inverse_large' %}\n    --menu-child-font-size: var(--menu-font-xl--size); --menu-child-font-line-height: var(--menu-font-xl--line-height);\n    --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: rgb(var(--color-foreground-rgb) /\n    var(--opacity-subdued-text));\n{% endcase %}\n"
  },
  {
    "path": "snippets/swatch.liquid",
    "content": "{%- doc -%}\n  Renders a swatch either from a variant image object or a swatch object.\n\n  @param {object} swatch - a swatch object\n  @param {object} [variant_image] - an alternate image when there is no swatch value\n  @param {string} [mode] - one of 'unscaled', 'filter', 'pill'\n\n  @example\n  {% render 'swatch', swatch: swatch, variant_image: variant_image, mode: 'unscaled' %}\n{%- enddoc -%}\n\n{% liquid\n  assign swatch_value = null\n  assign extra_classes = ''\n  if settings.show_variant_image and variant_image\n    assign swatch_image_width = settings.variant_swatch_width | times: 2\n    assign swatch_image_url = variant_image | image_url: width: swatch_image_width\n    assign swatch_value = 'url(' | append: swatch_image_url | append: ')'\n    assign extra_classes = extra_classes | append: ' swatch--variant-image'\n  elsif swatch.image\n    assign swatch_image_url = swatch.image | image_url: width: 80\n    assign swatch_value = 'url(' | append: swatch_image_url | append: ')'\n  elsif swatch.color\n    assign swatch_value = 'rgb(' | append: swatch.color.rgb | append: ')'\n  endif\n\n  case mode\n    when 'unscaled'\n      assign extra_classes = extra_classes | append: ' swatch--unscaled'\n    when 'filter'\n      assign extra_classes = extra_classes | append: ' swatch--filter'\n    when 'pill'\n      assign extra_classes = extra_classes | append: ' swatch--pill'\n  endcase\n%}\n\n<span\n  class=\"\n    swatch\n    {{ extra_classes }}\n    {% if swatch_value == null %} swatch--unavailable{% endif %}\n  \"\n  style=\"\n    --swatch-background: {{ swatch_value }};\n    {% if swatch.image and settings.show_variant_image == false %} --swatch-focal-point: {{ swatch.image.presentation.focal_point }};{% endif %}\n  \"\n>\n</span>\n"
  },
  {
    "path": "snippets/tax-info.liquid",
    "content": "{%- comment -%}\n  Intended for use in a block similar to the text block.\n\n  Accepts:\n    has_discounts_enabled: {boolean} - whether discounts are enabled\n{%- endcomment -%}\n\n<small>\n  {%- if cart.duties_included and cart.taxes_included -%}\n    {%- if shop.shipping_policy.body == blank -%}\n      {%- if has_discounts_enabled -%}\n        {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts' | t }}\n      {%- else -%}\n        {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy' | t }}\n      {%- endif -%}\n    {%- else -%}\n      {%- if has_discounts_enabled -%}\n        {{\n          'content.duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- else -%}\n        {{\n          'content.duties_and_taxes_included_shipping_at_checkout_with_policy_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- endif -%}\n    {%- endif -%}\n  {%- elsif cart.duties_included == false and cart.taxes_included -%}\n    {%- if shop.shipping_policy.body == blank -%}\n      {%- if has_discounts_enabled -%}\n        {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts' | t }}\n      {%- else -%}\n        {{ 'content.taxes_included_shipping_at_checkout_without_policy' | t }}\n      {%- endif -%}\n    {%- else -%}\n      {%- if has_discounts_enabled -%}\n        {{\n          'content.duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- else -%}\n        {{ 'content.taxes_included_shipping_at_checkout_with_policy_html' | t: link: shop.shipping_policy.url }}\n      {%- endif -%}\n    {%- endif -%}\n  {%- elsif cart.duties_included and cart.taxes_included == false -%}\n    {%- if shop.shipping_policy.body == blank -%}\n      {%- if has_discounts_enabled -%}\n        {{ 'content.duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts' | t }}\n      {%- else -%}\n        {{ 'content.duties_included_taxes_at_checkout_shipping_at_checkout_without_policy' | t }}\n      {%- endif -%}\n    {%- else -%}\n      {%- if has_discounts_enabled -%}\n        {{\n          'content.duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- else -%}\n        {{\n          'content.duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- endif -%}\n    {%- endif -%}\n  {%- elsif cart.duties_included == false and cart.taxes_included == false -%}\n    {%- if shop.shipping_policy.body == blank -%}\n      {%- if has_discounts_enabled -%}\n        {{ 'content.taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts' | t }}\n      {%- else -%}\n        {{ 'content.taxes_at_checkout_shipping_at_checkout_without_policy' | t }}\n      {%- endif -%}\n    {%- else -%}\n      {%- if has_discounts_enabled -%}\n        {{\n          'content.taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html'\n          | t: link: shop.shipping_policy.url\n        }}\n      {%- else -%}\n        {{ 'content.taxes_at_checkout_shipping_at_checkout_with_policy_html' | t: link: shop.shipping_policy.url }}\n      {%- endif -%}\n    {%- endif -%}\n  {%- endif -%}\n</small>\n"
  },
  {
    "path": "snippets/text.liquid",
    "content": "{%- doc -%}\n  Intended for use in a block similar to the text block.\n\n  @param {string} [class] - custom class to define in addition to text-block classes\n  @param {string} [fallback_text] - fallback text if settings.text does not exist\n  @param {object} [block] - The block object\n  @param {string} [width] - width of the text block\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n  assign plain_text = block_settings.text | strip_newlines | strip\n  assign visible_text = plain_text | strip_html\n  assign text_width = width | default: block_settings.width\n\n  if block_settings.font_size contains 'heading-lg' or block_settings.font_size contains 'heading-xl'\n    assign type = 'display'\n  elsif block_settings.font_size contains 'heading'\n    assign type = 'heading'\n  else\n    assign type = 'body'\n  endif\n  if block_settings.type_preset == 'rte' or block_settings.type_preset == 'paragraph'\n    assign is_rte = true\n  endif\n\n  capture text_block_classes\n    if text_width == '100%'\n      echo 'text-block--align-' | append: block_settings.alignment\n      if block_settings.max_width == 'none'\n        echo ' text-block--full-width '\n      endif\n    endif\n    if block_settings.type_preset == 'custom'\n      echo ' custom-typography '\n      if block_settings.font_size != ''\n        echo ' custom-font-size '\n      endif\n      if block_settings.color != ''\n        echo ' custom-color '\n      endif\n    endif\n    if block_settings.background\n      echo ' text-block--background '\n    endif\n    if is_rte\n      echo ' rte '\n    endif\n  endcapture\n%}\n\n{% capture attributes %}\n  class=\"{{ class }} spacing-style text-block text-block--{{ block.id }} {{ block_settings.type_preset }}\n    {{ text_block_classes }}\n  \"\n\n  style=\"\n    {% render 'spacing-padding', settings: block_settings %}\n    {% render 'typography-style', settings: block_settings %}\n    --width: {{ text_width }};\n    --max-width: var(--max-width--{{ type }}-{{ block_settings.max_width }});\n    {% if text_width == \"100%\" %}\n      --text-align: {{ block_settings.alignment }};\n    {% endif %}\n    {% if block_settings.background %}\n      --text-background-color: {{ block_settings.background_color | default: 'rgb(255 255 255 / 1.0)' }};\n      --text-corner-radius: {{ block_settings.corner_radius }}px;\n      --text-padding: max(var(--padding-2xs), calc((var(--text-corner-radius) + var(--padding-xs)) * (1 - cos(45deg))));\n    {% endif %}\n  \"\n\n  {{ block.shopify_attributes }}\n{% endcapture %}\n\n{% liquid\n  # {{ attributes }} must be on the immediate HTML parent of the text to preserve\n  # the click-to-edit connection in the theme editor. Any break between the text,\n  # including if-statements, will break the connection.\n\n  assign element = 'div'\n  if is_rte\n    assign element = 'rte-formatter'\n  endif\n%}\n\n{% if fallback_text != blank and visible_text == blank %}\n  <div {{ attributes | strip_newlines | strip }}>\n    {{ fallback_text }}\n  </div>\n{% elsif plain_text != blank %}\n  <{{ element }} {{ attributes | strip_newlines | strip }}>\n    {{ block.settings.text }}\n  </{{ element }}>\n{% endif %}\n\n{% stylesheet %}\n  :root {\n    --text-align-default: left;\n  }\n\n  [style*='--horizontal-alignment: center'] .text-block {\n    --text-align-default: center;\n  }\n\n  [style*='--horizontal-alignment: flex-end'] .text-block {\n    --text-align-default: right;\n  }\n\n  [style*='--horizontal-alignment: flex-start'] > .text-block {\n    --text-align-default: left;\n  }\n\n  [style*='--horizontal-alignment: center'] > .text-block {\n    --text-align-default: center;\n  }\n\n  [style*='--horizontal-alignment: flex-end'] > .text-block {\n    --text-align-default: right;\n  }\n\n  .text-block {\n    width: var(--width);\n    max-width: 100%;\n    display: flex;\n    flex-direction: column;\n    align-items: var(--horizontal-alignment);\n  }\n\n  .text-block > * {\n    width: var(--width);\n    max-inline-size: min(100%, var(--max-width, 100%));\n    text-align: var(--text-align, var(--text-align-default));\n    text-wrap: var(--text-wrap);\n  }\n\n  .text-block:not(.text-block--full-width).rte,\n  .text-block:not(.text-block--full-width).paragraph {\n    /* Safari doesn't support pretty, so fallback to balance */\n    text-wrap: balance;\n    text-wrap: pretty;\n  }\n\n  .text-block:not(.text-block--full-width):is(.h1, .h2, .h3, .h4, .h5, .h6) {\n    text-wrap: balance;\n  }\n\n  /* Hide underline unless text is using paragraph styles. */\n  .text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) a {\n    text-decoration-color: transparent;\n  }\n\n  .text-block h1,\n  .text-block.h1 > * {\n    margin-block: var(--font-h1--spacing);\n  }\n\n  .text-block h2,\n  .text-block.h2 > * {\n    margin-block: var(--font-h2--spacing);\n  }\n\n  .text-block h3,\n  .text-block.h3 > * {\n    margin-block: var(--font-h3--spacing);\n  }\n\n  .text-block h4,\n  .text-block.h4 > * {\n    margin-block: var(--font-h4--spacing);\n  }\n\n  .text-block h5,\n  .text-block.h5 > * {\n    margin-block: var(--font-h5--spacing);\n  }\n\n  .text-block h6,\n  .text-block.h6 > * {\n    margin-block: var(--font-h6--spacing);\n  }\n\n  .text-block p,\n  .text-block.p > * {\n    margin-block: var(--font-paragraph--spacing);\n  }\n\n  .text-block > *:first-child {\n    margin-block-start: 0;\n  }\n\n  .text-block > *:last-child {\n    margin-block-end: 0;\n  }\n\n  .text-block--align-center,\n  .text-block--align-center > * {\n    margin-inline: auto;\n  }\n\n  .text-block--align-right,\n  .text-block--align-right > * {\n    margin-inline-start: auto;\n  }\n\n  .text-block--background {\n    background-color: var(--text-background-color);\n    border-radius: var(--text-corner-radius);\n\n    /* To avoid text being cropped when using a border radius we add a minimum padding. */\n    padding-block-start: max(var(--text-padding), var(--padding-block-start, 0));\n    padding-block-end: max(var(--text-padding), var(--padding-block-end, 0));\n    padding-inline-start: max(var(--text-padding), var(--padding-inline-start, 0));\n    padding-inline-end: max(var(--text-padding), var(--padding-inline-end, 0));\n  }\n\n  .custom-color,\n  .custom-color > :is(h1, h2, h3, h4, h5, h6, p, *) {\n    color: var(--color);\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/theme-editor.liquid",
    "content": "<script\n  src=\"{{ 'theme-editor.js' | asset_url }}\"\n  type=\"module\"\n  defer=\"defer\"\n></script>\n"
  },
  {
    "path": "snippets/theme-styles-variables.liquid",
    "content": "{% style %}\n  {%- liquid\n    assign rendered_fonts = ''\n\n    assign primary_font = settings.type_body_font\n    assign primary_font_bold = primary_font | font_modify: 'weight', 'bold'\n    assign primary_font_italic = primary_font | font_modify: 'style', 'italic'\n    assign primary_font_bold_italic = primary_font_bold | font_modify: 'style', 'italic'\n\n    assign primary_font_face_id = '[primary_font_family]-[primary_font_weight]-[primary_font_style]|' | replace: '[primary_font_family]', primary_font.family | replace: '[primary_font_weight]', primary_font.weight | replace: '[primary_font_style]', primary_font.style\n    assign primary_font_bold_face_id = '[primary_font_bold_family]-[primary_font_bold_weight]-[primary_font_bold_style]|' | replace: '[primary_font_bold_family]', primary_font_bold.family | replace: '[primary_font_bold_weight]', primary_font_bold.weight | replace: '[primary_font_bold_style]', primary_font_bold.style\n    assign primary_font_italic_face_id = '[primary_font_italic_family]-[primary_font_italic_weight]-[primary_font_italic_style]|' | replace: '[primary_font_italic_family]', primary_font_italic.family | replace: '[primary_font_italic_weight]', primary_font_italic.weight | replace: '[primary_font_italic_style]', primary_font_italic.style\n    assign primary_font_bold_italic_face_id = '[primary_font_bold_italic_family]-[primary_font_bold_italic_weight]-[primary_font_bold_italic_style]|' | replace: '[primary_font_bold_italic_family]', primary_font_bold_italic.family | replace: '[primary_font_bold_italic_weight]', primary_font_bold_italic.weight | replace: '[primary_font_bold_italic_style]', primary_font_bold_italic.style\n\n    assign secondary_font = settings.type_subheading_font\n    assign secondary_font_bold = secondary_font | font_modify: 'weight', 'bold'\n    assign secondary_font_italic = secondary_font | font_modify: 'style', 'italic'\n    assign secondary_font_bold_italic = secondary_font_bold | font_modify: 'style', 'italic'\n\n    assign secondary_font_face_id = '[secondary_font_family]-[secondary_font_weight]-[secondary_font_style]|' | replace: '[secondary_font_family]', secondary_font.family | replace: '[secondary_font_weight]', secondary_font.weight | replace: '[secondary_font_style]', secondary_font.style\n    assign secondary_font_bold_face_id = '[secondary_font_bold_family]-[secondary_font_bold_weight]-[secondary_font_bold_style]|' | replace: '[secondary_font_bold_family]', secondary_font_bold.family | replace: '[secondary_font_bold_weight]', secondary_font_bold.weight | replace: '[secondary_font_bold_style]', secondary_font_bold.style\n    assign secondary_font_italic_face_id = '[secondary_font_italic_family]-[secondary_font_italic_weight]-[secondary_font_italic_style]|' | replace: '[secondary_font_italic_family]', secondary_font_italic.family | replace: '[secondary_font_italic_weight]', secondary_font_italic.weight | replace: '[secondary_font_italic_style]', secondary_font_italic.style\n    assign secondary_font_bold_italic_face_id = '[secondary_font_bold_italic_family]-[secondary_font_bold_italic_weight]-[secondary_font_bold_italic_style]|' | replace: '[secondary_font_bold_italic_family]', secondary_font_bold_italic.family | replace: '[secondary_font_bold_italic_weight]', secondary_font_bold_italic.weight | replace: '[secondary_font_bold_italic_style]', secondary_font_bold_italic.style\n\n    assign tertiary_font = settings.type_heading_font\n    assign tertiary_font_bold = tertiary_font | font_modify: 'weight', 'bold'\n    assign tertiary_font_italic = tertiary_font | font_modify: 'style', 'italic'\n    assign tertiary_font_bold_italic = tertiary_font_bold | font_modify: 'style', 'italic'\n\n    assign tertiary_font_face_id = '[tertiary_font_family]-[tertiary_font_weight]-[tertiary_font_style]|' | replace: '[tertiary_font_family]', tertiary_font.family | replace: '[tertiary_font_weight]', tertiary_font.weight | replace: '[tertiary_font_style]', tertiary_font.style\n    assign tertiary_font_bold_face_id = '[tertiary_font_bold_family]-[tertiary_font_bold_weight]-[tertiary_font_bold_style]|' | replace: '[tertiary_font_bold_family]', tertiary_font_bold.family | replace: '[tertiary_font_bold_weight]', tertiary_font_bold.weight | replace: '[tertiary_font_bold_style]', tertiary_font_bold.style\n    assign tertiary_font_italic_face_id = '[tertiary_font_italic_family]-[tertiary_font_italic_weight]-[tertiary_font_italic_style]|' | replace: '[tertiary_font_italic_family]', tertiary_font_italic.family | replace: '[tertiary_font_italic_weight]', tertiary_font_italic.weight | replace: '[tertiary_font_italic_style]', tertiary_font_italic.style\n    assign tertiary_font_bold_italic_face_id = '[tertiary_font_bold_italic_family]-[tertiary_font_bold_italic_weight]-[tertiary_font_bold_italic_style]|' | replace: '[tertiary_font_bold_italic_family]', tertiary_font_bold_italic.family | replace: '[tertiary_font_bold_italic_weight]', tertiary_font_bold_italic.weight | replace: '[tertiary_font_bold_italic_style]', tertiary_font_bold_italic.style\n\n    assign accent_font = settings.type_accent_font\n    assign accent_font_bold = accent_font | font_modify: 'weight', 'bold'\n    assign accent_font_italic = accent_font | font_modify: 'style', 'italic'\n    assign accent_font_bold_italic = accent_font_bold | font_modify: 'style', 'italic'\n\n    assign accent_font_face_id = '[accent_font_family]-[accent_font_weight]-[accent_font_style]|' | replace: '[accent_font_family]', accent_font.family | replace: '[accent_font_weight]', accent_font.weight | replace: '[accent_font_style]', accent_font.style\n    assign accent_font_bold_face_id = '[accent_font_bold_family]-[accent_font_bold_weight]-[accent_font_bold_style]|' | replace: '[accent_font_bold_family]', accent_font_bold.family | replace: '[accent_font_bold_weight]', accent_font_bold.weight | replace: '[accent_font_bold_style]', accent_font_bold.style\n    assign accent_font_italic_face_id = '[accent_font_italic_family]-[accent_font_italic_weight]-[accent_font_italic_style]|' | replace: '[accent_font_italic_family]', accent_font_italic.family | replace: '[accent_font_italic_weight]', accent_font_italic.weight | replace: '[accent_font_italic_style]', accent_font_italic.style\n    assign accent_font_bold_italic_face_id = '[accent_font_bold_italic_family]-[accent_font_bold_italic_weight]-[accent_font_bold_italic_style]|' | replace: '[accent_font_bold_italic_family]', accent_font_bold_italic.family | replace: '[accent_font_bold_italic_weight]', accent_font_bold_italic.weight | replace: '[accent_font_bold_italic_style]', accent_font_bold_italic.style\n\n    unless rendered_fonts contains primary_font_face_id\n      echo primary_font | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: primary_font_face_id\n    endunless\n\n    unless rendered_fonts contains primary_font_bold_face_id\n      echo primary_font_bold | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: primary_font_bold_face_id\n    endunless\n\n    unless rendered_fonts contains primary_font_italic_face_id\n      echo primary_font_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: primary_font_italic_face_id\n    endunless\n\n    unless rendered_fonts contains primary_font_bold_italic_face_id\n      echo primary_font_bold_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: primary_font_bold_italic_face_id\n    endunless\n\n    unless rendered_fonts contains secondary_font_face_id\n      echo secondary_font | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: secondary_font_face_id\n    endunless\n\n    unless rendered_fonts contains secondary_font_bold_face_id\n      echo secondary_font_bold | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: secondary_font_bold_face_id\n    endunless\n\n    unless rendered_fonts contains secondary_font_italic_face_id\n      echo secondary_font_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: secondary_font_italic_face_id\n    endunless\n\n    unless rendered_fonts contains secondary_font_bold_italic_face_id\n      echo secondary_font_bold_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: secondary_font_bold_italic_face_id\n    endunless\n\n    unless rendered_fonts contains tertiary_font_face_id\n      echo tertiary_font | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: tertiary_font_face_id\n    endunless\n\n    unless rendered_fonts contains tertiary_font_bold_face_id\n      echo tertiary_font_bold | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: tertiary_font_bold_face_id\n    endunless\n\n    unless rendered_fonts contains tertiary_font_italic_face_id\n      echo tertiary_font_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: tertiary_font_italic_face_id\n    endunless\n\n    unless rendered_fonts contains tertiary_font_bold_italic_face_id\n      echo tertiary_font_bold_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: tertiary_font_bold_italic_face_id\n    endunless\n\n    unless rendered_fonts contains accent_font_face_id\n      echo accent_font | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: accent_font_face_id\n    endunless\n\n    unless rendered_fonts contains accent_font_bold_face_id\n      echo accent_font_bold | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: accent_font_bold_face_id\n    endunless\n\n    unless rendered_fonts contains accent_font_italic_face_id\n      echo accent_font_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: accent_font_italic_face_id\n    endunless\n\n    unless rendered_fonts contains accent_font_bold_italic_face_id\n      echo accent_font_bold_italic | font_face: font_display: 'swap'\n      assign rendered_fonts = rendered_fonts | append: accent_font_bold_italic_face_id\n    endunless\n  %}\n\n  :root {\n    /* Page Layout */\n    --sidebar-width: 25rem;\n    --narrow-content-width: 36rem;\n    --normal-content-width: 42rem;\n    --wide-content-width: 46rem;\n    --narrow-page-width: 90rem;\n    --normal-page-width: 120rem;\n    --wide-page-width: 150rem;\n\n    /* Section Heights */\n    --section-height-small: 15rem;\n    --section-height-medium: 25rem;\n    --section-height-large: 35rem;\n\n    @media screen and (min-width: 40em) {\n      --section-height-small: 40svh;\n      --section-height-medium: 55svh;\n      --section-height-large: 70svh;\n    }\n\n    @media screen and (min-width: 60em) {\n      --section-height-small: 50svh;\n      --section-height-medium: 65svh;\n      --section-height-large: 80svh;\n    }\n\n    /* Letter spacing */\n    --letter-spacing-sm: 0.06em;\n    --letter-spacing-md: 0.13em;\n\n    /* Font families */\n    --font-body--family: {{ settings.type_body_font.family }}, {{ settings.type_body_font.fallback_families }};\n    --font-body--style: {{ settings.type_body_font.style }};\n    --font-body--weight: {{ settings.type_body_font.weight }};\n    --font-subheading--family: {{ settings.type_subheading_font.family }}, {{ settings.type_subheading_font.fallback_families }};\n    --font-subheading--style: {{ settings.type_subheading_font.style }};\n    --font-subheading--weight: {{ settings.type_subheading_font.weight }};\n    --font-heading--family: {{ settings.type_heading_font.family }}, {{ settings.type_heading_font.fallback_families }};\n    --font-heading--style: {{ settings.type_heading_font.style }};\n    --font-heading--weight: {{ settings.type_heading_font.weight }};\n    --font-accent--family: {{ settings.type_accent_font.family }}, {{ settings.type_accent_font.fallback_families }};\n    --font-accent--style: {{ settings.type_accent_font.style }};\n    --font-accent--weight: {{ settings.type_accent_font.weight }};\n\n    /* Margin sizes */\n    --font-heading--spacing: 0.25em;\n    --font-h1--spacing: var(--font-heading--spacing);\n    --font-h2--spacing: var(--font-heading--spacing);\n    --font-h3--spacing: var(--font-heading--spacing);\n    --font-h4--spacing: var(--font-heading--spacing);\n    --font-h5--spacing: var(--font-heading--spacing);\n    --font-h6--spacing: var(--font-heading--spacing);\n    --font-paragraph--spacing: 0.5em;\n\n    /* Heading colors */\n    --font-h1--color: var(--color-foreground-heading);\n    --font-h2--color: var(--color-foreground-heading);\n    --font-h3--color: var(--color-foreground-heading);\n    --font-h4--color: var(--color-foreground-heading);\n    --font-h5--color: var(--color-foreground-heading);\n    --font-h6--color: var(--color-foreground-heading);\n\n    /** Z-Index / Layering */\n    --layer-section-background: -2;\n    --layer-lowest: -1;\n    --layer-base: 0;\n    --layer-flat: 1;\n    --layer-raised: 2;\n    --layer-heightened: 4;\n    --layer-sticky: 8;\n    --layer-window-overlay: 10;\n    --layer-header-menu: 12;\n    --layer-overlay: 16;\n    --layer-menu-drawer: 18;\n    --layer-temporary: 20;\n\n    /* Max-width / Measure */\n    --max-width--body-normal: 32.5em;\n    --max-width--body-narrow: 22.75em;\n\n    --max-width--heading-normal: 32.5em;\n    --max-width--heading-narrow: 19.5em;\n\n    --max-width--display-normal: 13em;\n    --max-width--display-narrow: 9.75em;\n    --max-width--display-tight: 3.25em;\n\n    /* Letter-spacing / Tracking */\n    --letter-spacing--display-tight: -0.03em;\n    --letter-spacing--display-normal: 0em;\n    --letter-spacing--display-loose: 0.03em;\n\n    --letter-spacing--heading-tight: -0.03em;\n    --letter-spacing--heading-normal: 0em;\n    --letter-spacing--heading-loose: 0.03em;\n\n    --letter-spacing--body-tight: -0.03em;\n    --letter-spacing--body-normal: 0em;\n    --letter-spacing--body-loose: 0.03em;\n\n    /* Line height / Leading */\n    --line-height: 1;\n\n    --line-height--display-tight: 1;\n    --line-height--display-normal: 1.1;\n    --line-height--display-loose: 1.2;\n\n    --line-height--heading-tight: 1.15;\n    --line-height--heading-normal: 1.25;\n    --line-height--heading-loose: 1.35;\n\n    --line-height--body-tight: 1.2;\n    --line-height--body-normal: 1.4;\n    --line-height--body-loose: 1.6;\n\n    /* Typography presets */\n    {% liquid\n      assign font_sizes = \"paragraph, h1, h2, h3, h4, h5, h6\" | split: \", \"\n      assign fluid_size_cutoff = 48\n      assign absolute_font_size_min = 10\n\n      comment\n        Build an array of font sizes and sort it\n      endcomment\n      assign font_size_values = ''\n      for font_size in font_sizes\n        assign size_setting = 'type_size_[font_size]' | replace: '[font_size]', font_size\n        assign size_setting_value = settings[size_setting] | times: 1\n\n        comment\n          If the font size is less than 100, pad it with a 0\n          This is because we end up with an array of strings, which | sort filter can't order \"correctly\")\n        endcomment\n        if size_setting_value < 100\n          assign size_setting_value = '0[size_setting_value]' | replace: '[size_setting_value]', size_setting_value\n        endif\n\n        assign font_size_values = font_size_values | append: '[size_setting_value],' | replace: '[size_setting_value]', size_setting_value\n      endfor\n\n      assign font_size_values = font_size_values | split: ',' | uniq | sort_natural\n\n      comment\n        For each font size S, find the next smaller size S-1, and determine the minimum for S\n        The calculation depends on the size of S-1 (over or under the cutoff)\n      endcomment\n      for font_size in font_sizes\n        assign size_setting = 'type_size_[font_size]' | replace: '[font_size]', font_size\n        assign font_size_value = settings[size_setting] | times: 1\n        assign font_size_string = '[font_size_value]' | replace: '[font_size_value]', font_size_value\n        assign index = font_size_values | find_index: font_size_string\n\n        if font_size_value >= fluid_size_cutoff\n\n          comment\n            Calculate the minimum size for each font size\n          endcomment\n          assign fluid_font_size_min = font_size_value\n\n          if index == 0\n            assign fluid_font_size_min = absolute_font_size_min\n          else\n            assign next_font_size_index = index | minus: 1\n            assign next_font_size_value = font_size_values[next_font_size_index]\n            assign next_font_size_value_number = next_font_size_value | times: 1\n\n            comment\n              If the next bigger font size under the fluid cutoff, we use keep a 4px buffer\n            endcomment\n            if next_font_size_value_number < fluid_size_cutoff\n              assign fluid_font_size_min = next_font_size_value_number | plus: 4\n              if font_size_value < fluid_font_size_min\n                assign fluid_font_size_min = font_size_value\n              endif\n            else\n              assign fluid_font_size_min = next_font_size_value | times: 1\n            endif\n          endif\n\n          comment\n            Calculate the fluid and maximum size for each font size\n          endcomment\n          assign fluid_size_min_rem = fluid_font_size_min | divided_by: 16.0\n          assign fluid_size = font_size_value | times: 0.1\n          assign fluid_size_max_rem = font_size_value | divided_by: 16.0\n\n          echo '--font-size--[font_size]: clamp([fluid_size_min_rem]rem, [fluid_size]vw, [fluid_size_max_rem]rem);' | replace: '[font_size]', font_size | replace: '[fluid_size_min_rem]', fluid_size_min_rem | replace: '[fluid_size]', fluid_size | replace: '[fluid_size_max_rem]', fluid_size_max_rem\n        else\n          assign fluid_size_rem = font_size_value | divided_by: 16.0\n          echo '--font-size--[font_size]: [fluid_size_rem]rem;' | replace: '[font_size]', font_size | replace: '[fluid_size_rem]', fluid_size_rem\n        endif\n      endfor\n\n      assign type_presets = \"paragraph, h1, h2, h3, h4, h5, h6\" | split: \", \"\n\n      for preset_name in type_presets\n        assign preset_size = '--font-size--[preset_name]' | replace: '[preset_name]', preset_name\n        assign preset_line_height = 'type_line_height_[preset_name]' | replace: '[preset_name]', preset_name\n\n        if preset_name == 'paragraph'\n          assign preset_font = '--font-body--family'\n          assign preset_style = '--font-body--style'\n          assign preset_weight = '400'\n          assign preset_case = '--font-body--case'\n          assign preset_letter_spacing = 'body-normal'\n\n          echo '--font-[preset_name]--weight: [preset_weight];' | replace: '[preset_name]', preset_name | replace: '[preset_weight]', preset_weight\n          echo '--font-[preset_name]--letter-spacing: var(--letter-spacing--[preset_letter_spacing]);' | replace: '[preset_name]', preset_name | replace: '[preset_letter_spacing]', preset_letter_spacing\n        else\n          assign preset_font_id = 'type_font_[preset_name]' | replace: '[preset_name]', preset_name\n          assign preset_font = '--font-[preset_font]--family' | replace: '[preset_font]', settings[preset_font_id]\n          assign preset_style = '--font-[preset_font]--style' | replace: '[preset_font]', settings[preset_font_id]\n          assign preset_weight = '--font-[preset_font]--weight' | replace: '[preset_font]', settings[preset_font_id]\n          assign preset_case = 'type_case_[preset_name]' | replace: '[preset_name]', preset_name\n          assign preset_letter_spacing = 'type_letter_spacing_[preset_name]' | replace: '[preset_name]', preset_name\n\n          echo '--font-[preset_name]--weight: var([preset_weight]);' | replace: '[preset_name]', preset_name | replace: '[preset_weight]', preset_weight\n          echo '--font-[preset_name]--letter-spacing: var(--letter-spacing--[preset_letter_spacing]);' | replace: '[preset_name]', preset_name | replace: '[preset_letter_spacing]', settings[preset_letter_spacing]\n        endif\n\n        echo '--font-[preset_name]--size: var([preset_size]);' | replace: '[preset_name]', preset_name | replace: '[preset_size]', preset_size\n        echo '--font-[preset_name]--family: var([preset_font]);' | replace: '[preset_name]', preset_name | replace: '[preset_font]', preset_font\n        echo '--font-[preset_name]--style: var([preset_style]);' | replace: '[preset_name]', preset_name | replace: '[preset_style]', preset_style\n        echo '--font-[preset_name]--case: [preset_case];' | replace: '[preset_name]', preset_name | replace: '[preset_case]', settings[preset_case]\n        echo '--font-[preset_name]--line-height: var(--line-height--[preset_line_height]);' | replace: '[preset_name]', preset_name | replace: '[preset_line_height]', settings[preset_line_height]\n      endfor\n    %}\n\n    /* Hardcoded font sizes */\n    --font-size--3xs: 0.625rem;\n    --font-size--2xs: 0.75rem;\n    --font-size--xs: 0.8125rem;\n    --font-size--sm: 0.875rem;\n    --font-size--md: 1rem;\n    --font-size--lg: 1.125rem;\n    --font-size--xl: 1.25rem;\n    --font-size--2xl: 1.5rem;\n    --font-size--3xl: 2rem;\n    --font-size--4xl: 2.5rem;\n    --font-size--5xl: 3rem;\n    --font-size--6xl: 3.5rem;\n\n    /* Menu font sizes */\n    --menu-font-sm--size: 0.875rem;\n    --menu-font-sm--line-height: calc(1.1 + 0.5 * min(16 / 14));\n    --menu-font-md--size: 1rem;\n    --menu-font-md--line-height: calc(1.1 + 0.5 * min(16 / 16));\n    --menu-font-lg--size: 1.125rem;\n    --menu-font-lg--line-height: calc(1.1 + 0.5 * min(16 / 18));\n    --menu-font-xl--size: 1.25rem;\n    --menu-font-xl--line-height: calc(1.1 + 0.5 * min(16 / 20));\n    --menu-font-2xl--size: 1.75rem;\n    --menu-font-2xl--line-height: calc(1.1 + 0.5 * min(16 / 28));\n\n    /* Colors */\n    --color-error: #8B0000;\n    --color-success: #006400;\n    --color-white: #FFFFFF;\n    --color-white-rgb: 255 255 255;\n    --color-black: #000000;\n    --color-instock: #3ED660;\n    --color-lowstock: #EE9441;\n    --color-outofstock: #C8C8C8;\n\n    /* Opacity */\n    --opacity-5: 0.05;\n    --opacity-8: 0.08;\n    --opacity-10: 0.1;\n    --opacity-15: 0.15;\n    --opacity-20: 0.2;\n    --opacity-25: 0.25;\n    --opacity-30: 0.3;\n    --opacity-40: 0.4;\n    --opacity-50: 0.5;\n    --opacity-60: 0.6;\n    --opacity-70: 0.7;\n    --opacity-80: 0.8;\n    --opacity-85: 0.85;\n    --opacity-90: 0.9;\n    --opacity-subdued-text: var(--opacity-70);\n\n    --shadow-button: 0 2px 3px rgb(0 0 0 / 20%);\n    --gradient-image-overlay: linear-gradient(to top, rgb(0 0 0 / 0.5), transparent);\n\n    /* Spacing */\n    --margin-3xs: 0.125rem;\n    --margin-2xs: 0.3rem;\n    --margin-xs: 0.5rem;\n    --margin-sm: 0.7rem;\n    --margin-md: 0.8rem;\n    --margin-lg: 1rem;\n    --margin-xl: 1.25rem;\n    --margin-2xl: 1.5rem;\n    --margin-3xl: 1.75rem;\n    --margin-4xl: 2rem;\n    --margin-5xl: 3rem;\n    --margin-6xl: 5rem;\n\n    --scroll-margin: 50px;\n\n    --padding-3xs: 0.125rem;\n    --padding-2xs: 0.25rem;\n    --padding-xs: 0.5rem;\n    --padding-sm: 0.7rem;\n    --padding-md: 0.8rem;\n    --padding-lg: 1rem;\n    --padding-xl: 1.25rem;\n    --padding-2xl: 1.5rem;\n    --padding-3xl: 1.75rem;\n    --padding-4xl: 2rem;\n    --padding-5xl: 3rem;\n    --padding-6xl: 4rem;\n\n    --gap-3xs: 0.125rem;\n    --gap-2xs: 0.3rem;\n    --gap-xs: 0.5rem;\n    --gap-sm: 0.7rem;\n    --gap-md: 0.9rem;\n    --gap-lg: 1rem;\n    --gap-xl: 1.25rem;\n    --gap-2xl: 2rem;\n    --gap-3xl: 3rem;\n\n    --spacing-scale-sm: 0.6;\n    --spacing-scale-md: 0.7;\n    --spacing-scale-default: 1.0;\n\n    /* Checkout buttons gap */\n    --checkout-button-gap: 10px;\n\n    /* Borders */\n    --style-border-width: 1px;\n    --style-border-radius-xs: 0.2rem;\n    --style-border-radius-sm: 0.6rem;\n    --style-border-radius-md: 0.8rem;\n    --style-border-radius-50: 50%;\n    --style-border-radius-lg: 1rem;\n    --style-border-radius-pills: {{ settings.pills_border_radius }}px;\n    --style-border-radius-inputs: {{ settings.inputs_border_radius }}px;\n    --style-border-radius-buttons-primary: {{ settings.button_border_radius_primary }}px;\n    --style-border-radius-buttons-secondary: {{ settings.button_border_radius_secondary }}px;\n    --style-border-width-primary: {{ settings.primary_button_border_width }}px;\n    --style-border-width-secondary: {{ settings.secondary_button_border_width }}px;\n    --style-border-width-inputs: {{ settings.input_border_width }}px;\n    --style-border-radius-popover: {{ settings.popover_border_radius }}px;\n    --style-border-popover: {{ settings.popover_border_width }}px {{ settings.popover_border }} rgb(var(--color-border-rgb) / {{ settings.popover_border_opacity }}%);\n    --style-border-drawer: {{ settings.drawer_border_width }}px {{ settings.drawer_border }} rgb(var(--color-border-rgb) / {{ settings.drawer_border_opacity }}%);\n    --style-border-swatch-opacity: {{ settings.variant_swatch_border_opacity }}%;\n    --style-border-swatch-width: {{ settings.variant_swatch_border_width }}px;\n    --style-border-swatch-style: {{ settings.variant_swatch_border_style }};\n\n    /* Animation */\n    --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1);\n    --ease-out-quad: cubic-bezier(0.32, 0.72, 0, 1);\n    --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n    --animation-speed-fast: 0.0625s;\n    --animation-speed: 0.125s;\n    --animation-speed-slow: 0.2s;\n    --animation-speed-medium: 0.15s;\n    --animation-easing: ease-in-out;\n    --animation-slideshow-easing: cubic-bezier(0.4, 0, 0.2, 1);\n    --drawer-animation-speed: 0.2s;\n    --animation-values-slow: var(--animation-speed-slow) var(--animation-easing);\n    --animation-values: var(--animation-speed) var(--animation-easing);\n    --animation-values-fast: var(--animation-speed-fast) var(--animation-easing);\n    --animation-values-allow-discrete: var(--animation-speed) var(--animation-easing) allow-discrete;\n    --animation-timing-hover: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n    --animation-timing-active: cubic-bezier(0.5, 0, 0.75, 0);\n    --animation-timing-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);\n    --animation-timing-default: cubic-bezier(0, 0, 0.2, 1);\n    --animation-timing-fade-in: cubic-bezier(0.16, 1, 0.3, 1);\n    --animation-timing-fade-out: cubic-bezier(0.4, 0, 0.2, 1);\n    /* Spring definitions suffixed with perceptual duration (d<ms>) and bounce (b<%>)*/\n    --spring-d300-b0-easing: linear(0, 0.0033 0.81%, 0.027 2.42%, 0.0916 4.84%, 0.4745 15.32%, 0.6422 20.97%, 0.7175, 0.7789, 0.8283 30.64%, 0.876, 0.9111 38.71%, 0.941, 0.9611 48.39%, 0.9707, 0.978 54.84%, 0.9885 62.1%, 0.9949 70.97%, 0.9982 82.26%, 0.9997 100%);\n    --spring-d300-b0-duration: 0.4980s;\n    --spring-d280-b0-easing: linear(0, 0.0044, 0.0164 1.85%, 0.085 4.63%, 0.4571 14.81%, 0.575 18.52%, 0.6505, 0.7148 24.07%, 0.7849, 0.8393, 0.8809 35.18%, 0.9189, 0.9453 44.44%, 0.9662, 0.9793 55.55%, 0.9894 62.95%, 0.995 71.28%, 0.9982 82.39%, 0.9997 99.98%);\n    --spring-d280-b0-duration: 0.4648s;\n    --spring-d260-b0-easing: linear(0, 0.0058, 0.0216 2.15%, 0.0748 4.29%, 0.4646 15.03%, 0.5673, 0.655, 0.7279, 0.7872, 0.8349, 0.8727 34.36%, 0.9107, 0.9379 42.95%, 0.9609 48.31%, 0.9778 54.76%, 0.9887 62.27%, 0.9948 70.86%, 0.9983 82.67%, 0.9997 99.85%);\n    --spring-d260-b0-duration: 0.4316s;\n    --spring-d220-b0-easing: linear(\n      0,\n      0.0093 1.37%,\n      0.0696 4.12%,\n      0.4667 15.09%,\n      0.6322 20.58%,\n      0.6986 23.32%,\n      0.7793 27.44%,\n      0.8219 30.18%,\n      0.8721,\n      0.9089 38.42%,\n      0.9427,\n      0.9644,\n      0.978 54.88%,\n      0.9881 61.74%,\n      0.9944 69.97%,\n      0.998 80.95%,\n      0.9996 98.78%\n    );\n    --spring-d220-b0-duration: 0.3818s;\n    --spring-d180-b0-easing: linear(0, 0.0234, 0.0805 4.48%, 0.4865 15.68%, 0.6211 20.16%, 0.7696 26.88%, 0.8064 29.12%, 0.8646, 0.9063, 0.9358, 0.9563 47.04%, 0.9757, 0.9867 60.48%, 0.9941 69.44%, 0.9979 80.64%, 0.9996 98.56%);\n    --spring-d180-b0-duration: 0.2988s;\n\n    /* View transitions */\n    /* View transition old */\n    --view-transition-old-main-content: var(--animation-speed) var(--animation-easing) both fadeOut;\n\n    /* View transition new */\n    --view-transition-new-main-content: var(--animation-speed) var(--animation-easing) both fadeIn, var(--animation-speed) var(--animation-easing) both slideInTopViewTransition;\n\n    /* Focus */\n    --focus-outline-width: 0.09375rem;\n    --focus-outline-offset: 0.2em;\n\n    /* Badges */\n    --badge-blob-padding-block: 1px;\n    --badge-blob-padding-inline: 12px 8px;\n    --badge-rectangle-padding-block: 1px;\n    --badge-rectangle-padding-inline: 6px;\n    @media screen and (min-width: 750px) {\n      --badge-blob-padding-block: 4px;\n      --badge-blob-padding-inline: 16px 12px;\n      --badge-rectangle-padding-block: 4px;\n      --badge-rectangle-padding-inline: 10px;\n    }\n\n    /* Icons */\n    --icon-size-2xs: 0.6rem;\n    --icon-size-xs: 0.85rem;\n    --icon-size-sm: 1.25rem;\n    --icon-size-md: 1.375rem;\n    --icon-size-lg: 1.5rem;\n    --icon-stroke-width: {% if settings.icon_stroke == 'thin' %}1px{% elsif settings.icon_stroke == 'heavy' %}2px{% else %}1.5px{% endif %};\n\n    /* Input */\n    --input-email-min-width: 200px;\n    --input-search-max-width: 650px;\n    --input-padding-y: 0.8rem;\n    --input-padding-x: 0.8rem;\n    --input-padding: var(--input-padding-y) var(--input-padding-x);\n    --input-box-shadow-width: var(--style-border-width-inputs);\n    --input-box-shadow: 0 0 0 var(--input-box-shadow-width) var(--color-input-border);\n    --input-box-shadow-focus: 0 0 0 calc(var(--input-box-shadow-width) + 0.5px) var(--color-input-border);\n    --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n    --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n    --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));\n    --input-textarea-min-height: 55px;\n\n    /* Checkbox */\n    --checkbox-size: 22px;\n    --checkbox-border-radius: 7px;\n    --checkbox-border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55));\n    --checkbox-label-padding: 8px;\n\n    @media screen and (min-width: 750px) {\n      --checkbox-size: 16px;\n      --checkbox-border-radius: 5px;\n      --checkbox-label-padding: 6px;\n    }\n\n    /* Button size */\n    --button-size-sm: 30px;\n    --button-size-md: 36px;\n    --button-size: var(--minimum-touch-target);\n    --button-padding-inline: 24px;\n    --button-padding-block: 16px;\n\n    /* Button font-family */\n    --button-font-family-primary: var(--font-{{ settings.type_font_button_primary }}--family);\n    --button-font-family-secondary: var(--font-{{ settings.type_font_button_secondary }}--family);\n\n    /* Button text case */\n    --button-text-case: {{ settings.button_text_case }};\n    --button-text-case-primary: {{ settings.button_text_case_primary }};\n    --button-text-case-secondary: {{ settings.button_text_case_secondary }};\n\n    /* Borders */\n    --border-color: rgb(var(--color-border-rgb) / var(--opacity-50));\n    --border-width-sm: 1px;\n    --border-width-md: 2px;\n    --border-width-lg: 5px;\n    --border-radius-sm: 0.25rem;\n\n    /* Drawers */\n    --drawer-inline-padding: 25px;\n    --drawer-menu-inline-padding: 2.5rem;\n    --drawer-header-block-padding: 20px;\n    --drawer-content-block-padding: 10px;\n    --drawer-header-desktop-top: 0rem;\n    --drawer-padding: calc(var(--padding-sm) + 7px);\n    --drawer-height: 100dvh;\n    --drawer-width: 95vw;\n    --drawer-max-width: 500px;\n\n    /* Variant Picker Swatches */\n    --variant-picker-swatch-width-unitless: {{ settings.variant_swatch_width }};\n    --variant-picker-swatch-height-unitless: {{ settings.variant_swatch_height }};\n    --variant-picker-swatch-width: {{ settings.variant_swatch_width | append: 'px' }};\n    --variant-picker-swatch-height: {{ settings.variant_swatch_height | append: 'px' }};\n    --variant-picker-swatch-radius: {{ settings.variant_swatch_radius | append: 'px' }};\n    --variant-picker-border-width: {{ settings.variant_swatch_border_width | append: 'px' }};\n    --variant-picker-border-style: {{ settings.variant_swatch_border_style }};\n    --variant-picker-border-opacity: {{ settings.variant_swatch_border_opacity | append: '%' }};\n\n    /* Variant Picker Buttons */\n    --variant-picker-button-radius: {{ settings.variant_button_radius | append: 'px' }};\n    --variant-picker-button-border-width: {{ settings.variant_button_border_width | append: 'px' }};\n\n    /* Slideshow */\n    --slideshow-controls-size: 3.5rem;\n    --slideshow-controls-icon: 2rem;\n    --peek-next-slide-size: 3rem;\n\n    /* Utilities */\n    --backdrop-opacity: 0.15;\n    --backdrop-color-rgb: var(--color-shadow-rgb);\n    --minimum-touch-target: 44px;\n    --disabled-opacity: 0.5;\n    --skeleton-opacity: 0.025;\n\n    /* Shapes */\n    --shape--circle: circle(50% at center);\n    --shape--sunburst: polygon(100% 50%,94.62% 55.87%,98.3% 62.94%,91.57% 67.22%,93.3% 75%,85.7% 77.39%,85.36% 85.36%,77.39% 85.7%,75% 93.3%,67.22% 91.57%,62.94% 98.3%,55.87% 94.62%,50% 100%,44.13% 94.62%,37.06% 98.3%,32.78% 91.57%,25% 93.3%,22.61% 85.7%,14.64% 85.36%,14.3% 77.39%,6.7% 75%,8.43% 67.22%,1.7% 62.94%,5.38% 55.87%,0% 50%,5.38% 44.13%,1.7% 37.06%,8.43% 32.78%,6.7% 25%,14.3% 22.61%,14.64% 14.64%,22.61% 14.3%,25% 6.7%,32.78% 8.43%,37.06% 1.7%,44.13% 5.38%,50% 0%,55.87% 5.38%,62.94% 1.7%,67.22% 8.43%,75% 6.7%,77.39% 14.3%,85.36% 14.64%,85.7% 22.61%,93.3% 25%,91.57% 32.78%,98.3% 37.06%,94.62% 44.13%);\n    --shape--diamond: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);\n    --shape--blob: polygon(85.349% 11.712%, 87.382% 13.587%, 89.228% 15.647%, 90.886% 17.862%, 92.359% 20.204%, 93.657% 22.647%, 94.795% 25.169%, 95.786% 27.752%, 96.645% 30.382%, 97.387% 33.048%, 98.025% 35.740%, 98.564% 38.454%, 99.007% 41.186%, 99.358% 43.931%, 99.622% 46.685%, 99.808% 49.446%, 99.926% 52.210%, 99.986% 54.977%, 99.999% 57.744%, 99.975% 60.511%, 99.923% 63.278%, 99.821% 66.043%, 99.671% 68.806%, 99.453% 71.565%, 99.145% 74.314%, 98.724% 77.049%, 98.164% 79.759%, 97.433% 82.427%, 96.495% 85.030%, 95.311% 87.529%, 93.841% 89.872%, 92.062% 91.988%, 89.972% 93.796%, 87.635% 95.273%, 85.135% 96.456%, 82.532% 97.393%, 79.864% 98.127%, 77.156% 98.695%, 74.424% 99.129%, 71.676% 99.452%, 68.918% 99.685%, 66.156% 99.844%, 63.390% 99.942%, 60.624% 99.990%, 57.856% 99.999%, 55.089% 99.978%, 52.323% 99.929%, 49.557% 99.847%, 46.792% 99.723%, 44.031% 99.549%, 41.273% 99.317%, 38.522% 99.017%, 35.781% 98.639%, 33.054% 98.170%, 30.347% 97.599%, 27.667% 96.911%, 25.024% 96.091%, 22.432% 95.123%, 19.907% 93.994%, 17.466% 92.690%, 15.126% 91.216%, 12.902% 89.569%, 10.808% 87.761%, 8.854% 85.803%, 7.053% 83.703%, 5.418% 81.471%, 3.962% 79.119%, 2.702% 76.656%, 1.656% 74.095%, 0.846% 71.450%, 0.294% 68.740%, 0.024% 65.987%, 0.050% 63.221%, 0.343% 60.471%, 0.858% 57.752%, 1.548% 55.073%, 2.370% 52.431%, 3.283% 49.819%, 4.253% 47.227%, 5.249% 44.646%, 6.244% 42.063%, 7.211% 39.471%, 8.124% 36.858%, 8.958% 34.220%, 9.711% 31.558%, 10.409% 28.880%, 11.083% 26.196%, 11.760% 23.513%, 12.474% 20.839%, 13.259% 18.186%, 14.156% 15.569%, 15.214% 13.012%, 16.485% 10.556%, 18.028% 8.261%, 19.883% 6.211%, 22.041% 4.484%, 24.440% 3.110%, 26.998% 2.057%, 29.651% 1.275%, 32.360% 0.714%, 35.101% 0.337%, 37.859% 0.110%, 40.624% 0.009%, 43.391% 0.016%, 46.156% 0.113%, 48.918% 0.289%, 51.674% 0.533%, 54.425% 0.837%, 57.166% 1.215%, 59.898% 1.654%, 62.618% 2.163%, 65.322% 2.750%, 68.006% 3.424%, 70.662% 4.197%, 73.284% 5.081%, 75.860% 6.091%, 78.376% 7.242%, 80.813% 8.551%, 83.148% 10.036%, 85.349% 11.712%);\n\n    /* Buy buttons */\n    --height-buy-buttons: calc(var(--padding-lg) * 2 + var(--icon-size-sm));\n\n    /* Card image width and height variables */\n    --card-width-small: 10rem;\n\n    --height-small: 10rem;\n    --height-medium: 11.5rem;\n    --height-large: 13rem;\n    --height-full: 100vh;\n\n    @media screen and (min-width: 750px) {\n      --height-small: 17.5rem;\n      --height-medium: 21.25rem;\n      --height-large: 25rem;\n    }\n\n    /* Modal */\n    --modal-max-height: 65dvh;\n    --quick-add-modal-height: min(38.5rem, 96vh);\n    --quick-add-modal-width: min(54rem, 96vw);\n    --quick-add-modal-gallery-width: 24rem;\n\n    /* Card styles for search */\n    --card-bg-hover: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n    --card-border-hover: rgb(var(--color-foreground-rgb) / var(--opacity-30));\n    --card-border-focus: rgb(var(--color-foreground-rgb) / var(--opacity-10));\n\n    /* Cart */\n    --cart-primary-font-family: var(--font-body--family);\n    --cart-primary-font-style: var(--font-body--style);\n    --cart-primary-font-weight: var(--font-body--weight);\n    --cart-secondary-font-family: var(--font-{{ settings.cart_price_font }}--family);\n    --cart-secondary-font-style: var(--font-{{ settings.cart_price_font }}--style);\n    --cart-secondary-font-weight: var(--font-{{ settings.cart_price_font }}--weight);\n  }\n{% endstyle %}\n"
  },
  {
    "path": "snippets/typography-style.liquid",
    "content": "{%- doc -%}\n  Sets inline CSS variables for typography styles, including color, font size, weight, family, line height, and letter spacing.\n  Intended for use on the style attribute of an element.\n\n  @param {object} settings - The block or section settings object containing typography values\n  @param {string} [type] - The type of text element to inherit styles from, options: display, heading, body\n  @param {string} [preset] - The type preset from the global settings.type_preset\n\n  @example\n  <div style=\"{% render 'typography-style', settings: section.settings %}\">\n    ...\n  </div>\n{%- enddoc -%}\n\n{% assign preset = preset | default: settings.type_preset %}\n\n{%- capture variables -%}\n  {%- if preset != 'rte' and settings.color != \"\" -%}\n    --color: {{ settings.color }};\n  {%- endif -%}\n  {%- if preset == 'custom' -%}\n    {% liquid\n      unless type\n        comment\n          When choosing to customize the font, picking a specific font size\n          determines the type of text block.\n        endcomment\n        if settings.font_size != ''\n          assign font_size_value = settings.font_size | split: 'rem' | first | times: 1.0\n\n          if font_size_value > 4.5\n            assign type = 'display'\n          elsif font_size_value > 3.5\n            assign type = 'heading'\n          else\n            assign type = 'body'\n          endif\n        endif\n      endunless\n    %}\n    {%- if settings.font_size != blank -%}\n      {%- liquid\n        assign font_size_rem = settings.font_size | split: 'rem' | first | times: 1.0\n        assign fluid_size_cutoff_rem = 3.0\n\n        if font_size_rem >= fluid_size_cutoff_rem\n          assign target_viewport = 1400\n          assign vw_value = font_size_rem | times: 16 | divided_by: target_viewport | times: 100\n\n          assign scale_factor = font_size_rem | divided_by: fluid_size_cutoff_rem\n          assign base_min_rem = 3.0\n          assign scaling_bonus_rem = scale_factor | minus: 1 | times: 0.25\n          assign dynamic_min_rem = base_min_rem | plus: scaling_bonus_rem\n        endif\n      -%}\n      {%- if font_size_rem >= fluid_size_cutoff_rem -%}\n        --font-size: clamp({{ dynamic_min_rem }}rem, {{ vw_value }}vw, {{ settings.font_size }});\n      {%- else -%}\n        --font-size: {{ settings.font_size }};\n      {%- endif -%}\n    {%- endif -%}\n    {%- if settings.weight != blank -%}\n      --font-weight: {{ settings.weight }};\n    {% else %}\n      --font-weight: {{ settings.font | replace: 'family', 'weight' }};\n    {%- endif -%}\n    --font-family: {{ settings.font }};\n    --text-transform: {{ settings.case }};\n    --text-wrap: {{ settings.wrap | default: 'pretty' }};\n    {% if settings.type_preset == 'custom' and settings.font_size == blank %}\n      --line-height--display: var(--line-height--display-{{ settings.line_height }});\n      --line-height--heading: var(--line-height--heading-{{ settings.line_height }});\n      --line-height--body: var(--line-height--body-{{ settings.line_height }});\n    {% else %}\n      --line-height: var(--line-height--{{ type }}-{{ settings.line_height }});\n    {% endif %}\n    --letter-spacing: var(--letter-spacing--{{ type }}-{{ settings.letter_spacing }});\n  {%- endif -%}\n{%- endcapture -%}\n{{- variables | strip | strip_newlines -}}\n"
  },
  {
    "path": "snippets/unit-price.liquid",
    "content": "{%- doc -%}\n  Renders the unit price, including its measurement.\n\n  @param {object} price - The unit price (money or string).\n  @param {object} measurement - The unit_price_measurement object.\n\n  @example\n  {% render 'unit-price', price: variant.unit_price, measurement: variant.unit_price_measurement %}\n\n  @example\n  {% render 'unit-price', price: line_item.unit_price | money_with_currency, measurement: line_item.unit_price_measurement }\n{%- enddoc -%}\n<small class=\"unit-price\">\n  <span class=\"visually-hidden\">{{ 'accessibility.unit_price' | t }}</span>\n  {{ price | unit_price_with_measurement: measurement }}\n</small>\n"
  },
  {
    "path": "snippets/util-autofill-img-size-attr.liquid",
    "content": "{%- doc -%}\n  Echo a sizes attribute for an <img> tag based on a minimum image size.\n\n  @param {number} card_size - The minimum pixel-width of the product card.\n  @param {number} [card_gap] - The pixel-width of the gap between product cards.\n\n  @example\n  {% capture size_attribute %}\n    {% render 'util-autofill-img-size-attr' card_size: 400 %}\n  {% endcapture %}\n  {% assign size_attribute = size_attribute | strip %}\n  {{ image_url | image_tag: sizes: size_attribute }}\n{%- enddoc -%}\n\n{% liquid\n  # Defense: ensure card_size and card_gap are numbers\n  assign card_size = card_size | strip | replace: 'px', '' | plus: 0\n\n  if card_gap\n    assign card_gap = card_gap | strip | replace: 'px', '' | plus: 0\n  else\n    assign card_gap = 0\n  endif\n\n  assign card_size_with_gap = card_size | plus: card_gap\n\n  assign max_breakpoint = 2000\n\n  assign min_breakpoint = 750\n\n  # Calculate maximum number of columns at max width\n  assign max_cols = max_breakpoint | divided_by: card_size_with_gap | floor\n\n  assign sizes_attr = ''\n\n  # Calculate breakpoints dynamically based on card size\n  # Start with max columns and work down\n  for i in (1..max_cols)\n    # Current number of columns we're calculating for\n    assign current_cols = max_cols | minus: i | plus: 1\n\n    # Skip if we're down to 1 column\n    if current_cols < 2\n      break\n    endif\n\n    # Calculate the minimum width needed for this many columns\n    assign min_width_needed = current_cols | times: card_size_with_gap\n\n    if min_width_needed < min_breakpoint\n      break\n    endif\n\n    assign percentage = 100 | divided_by: current_cols\n\n    # Build up the sizes attribute\n    if sizes_attr != ''\n      assign sizes_attr = sizes_attr | append: ', '\n    endif\n    assign sizes_attr = sizes_attr | append: '(min-width: ' | append: min_width_needed | append: 'px) ' | append: percentage | append: 'vw'\n  endfor\n\n  # Add tablet size (50vw) and mobile size (100vw) fallbacks\n  if sizes_attr != ''\n    assign sizes_attr = sizes_attr | append: ', '\n  endif\n  assign sizes_attr = sizes_attr | append: '(min-width: ' | append: min_breakpoint | append: 'px) 50vw'\n\n  assign sizes_attr = sizes_attr | append: ', 100vw'\n\n  # Echo the sizes attribute\n  echo sizes_attr\n%}\n"
  },
  {
    "path": "snippets/util-mega-menu-img-sizes-attr.liquid",
    "content": "{%- doc -%}\n  Calculate the sizes attribute for mega menu images based on menu type and grid configuration.\n\n  @param {string} menu_content_type - Type of menu: 'collection_images', 'featured_products', or 'featured_collections'\n  @param {object} settings - Theme settings object containing page width configuration\n  @param {number} [grid_columns] - Number of grid columns for the mega menu\n  @param {number} [grid_columns_tablet] - Number of grid columns for tablet view\n  @param {number} [grid_columns_collection_images] - Grid columns when menu_content_type is 'collection_images' with < 5 items\n  @param {number} [parent_links_size] - Number of parent links (for collection images special case)\n  @param {number} [columns_per_item] - Columns each item occupies (2 for collection images, 1 for products)\n\n  @example\n  {% capture image_sizes %}\n    {% render 'util-mega-menu-img-sizes-attr',\n      menu_content_type: 'collection_images',\n      settings: settings,\n      grid_columns: 8,\n      grid_columns_tablet: 4,\n      columns_per_item: 2\n    %}\n  {% endcapture %}\n\n  {{ image | image_url: width: 1024 | image_tag: sizes: image_sizes }}\n{%- enddoc -%}\n\n{% liquid\n  # Early exit for featured collections\n  if menu_content_type == 'featured_collections'\n    echo '300px'\n    break\n  endif\n\n  # Define breakpoints and max widths based on page width setting\n  case settings.page_width\n    when 'narrow'\n      assign page_max_width = '90rem'\n      assign breakpoint = '95rem'\n    when 'normal'\n      assign page_max_width = '120rem'\n      assign breakpoint = '125rem'\n    when 'wide'\n      assign page_max_width = '150rem'\n      assign breakpoint = '155rem'\n  endcase\n\n  # Common values\n  # Gap between items in pixels (numeric for calculations)\n  # Page margins (with unit for direct use in calc())\n  assign gap = 20\n  assign margins = '80px'\n  assign grid_tablet = grid_columns_tablet | default: 4\n\n  # Set up grid configuration based on menu type\n  case menu_content_type\n    when 'collection_images'\n      assign cols_per_item = columns_per_item | default: 2\n      assign grid_desktop = grid_columns | default: 8\n\n      # Special case: fewer than 5 collection images\n      if parent_links_size < 5\n        assign grid_desktop = grid_columns_collection_images | default: grid_desktop\n      endif\n\n    when 'featured_products'\n      assign cols_per_item = 1\n      assign grid_desktop = grid_columns | default: 6\n  endcase\n\n  # Calculate gaps for each breakpoint\n  assign items_desktop = grid_desktop | divided_by: cols_per_item\n  assign items_tablet = grid_tablet | divided_by: cols_per_item\n  assign gaps_desktop_px = items_desktop | minus: 1 | times: gap | append: 'px'\n  assign gaps_tablet_px = items_tablet | minus: 1 | times: gap | append: 'px'\n%}\n\n{%- capture sizes -%}\n  {%- comment -%} Large viewports with fixed page width {%- endcomment -%}\n  (min-width: {{ breakpoint }}) calc(({{ page_max_width }} - {{ margins }} - {{ gaps_desktop_px }}) * {{ cols_per_item }} / {{ grid_desktop }}),\n\n  {%- comment -%} Desktop viewports {%- endcomment -%}\n  (min-width: 990px) calc((100vw - {{ margins }} - {{ gaps_desktop_px }}) * {{ cols_per_item }} / {{ grid_desktop }}),\n\n  {%- comment -%} Tablet {%- endcomment -%}\n  calc((100vw - {{ margins }} - {{ gaps_tablet_px }}) / {{ grid_tablet }})\n{%- endcapture -%}\n\n{{ sizes | strip_newlines | strip }}\n"
  },
  {
    "path": "snippets/util-product-grid-card-size.liquid",
    "content": "{%- doc -%}\n  Output the minimum product card size for cards in a product grid (main collection and search results).\n\n  @param {object} section - Section object that contains the product card block.\n\n  @example\n  {% capture product_card_size %}\n    {% render 'util-product-grid-card-size' section: section %}\n  {% endcapture %}\n{%- enddoc -%}\n\n{% liquid\n  if section.settings.layout_type == 'organic'\n    if section.settings.product_grid_width == 'centered'\n      assign product_card_size = '250px'\n    else\n      assign product_card_size = '260px'\n    endif\n  elsif section.settings.product_grid_width == 'centered'\n    # Hardcoded values for product card size when width set to 'centered'\n    case section.settings.product_card_size\n      when 'small'\n        assign product_card_size = '165px'\n      when 'medium'\n        assign product_card_size = '250px'\n      when 'large'\n        assign product_card_size = '340px'\n      when 'extra-large'\n        assign product_card_size = '480px'\n    endcase\n  else\n    # Hardcoded values for product card size when width set to 'full-width'\n    case section.settings.product_card_size\n      when 'small'\n        assign product_card_size = '180px'\n      when 'medium'\n        assign product_card_size = '260px'\n      when 'large'\n        assign product_card_size = '365px'\n      when 'extra-large'\n        assign product_card_size = '530px'\n    endcase\n  endif\n  echo product_card_size\n%}\n"
  },
  {
    "path": "snippets/util-product-media-sizes-attr.liquid",
    "content": "{%- doc -%}\n  Calculate the sizes attribute for product media images in the product media gallery.\n\n  @param {object} block - Block object containing media gallery settings\n  @param {object} section - Section object containing layout settings\n  @param {object} settings - Theme settings object containing page width configuration\n  @param {boolean} [is_first_image] - Whether this is the first image (for large_first_image mode)\n  @param {boolean} [is_single_column] - Whether the layout is single column (carousel or one-column grid)\n  @param {boolean} [needs_both_sizes] - Whether we need to calculate different sizes for first and other images\n\n  @example\n  {% capture media_sizes %}\n    {% render 'util-product-media-sizes-attr', block: block, section: section, settings: settings, is_single_column: is_single_column %}\n  {% endcapture %}\n  {% assign media_sizes = media_sizes | strip %}\n  {{ media | image_url: width: 800 | image_tag: sizes: media_sizes }}\n{%- enddoc -%}\n\n{%- liquid\n  assign block_settings = block.settings\n  # Constants\n  assign page_margin = '40px'\n  # Section gap divided by 2 (used for single column layouts)\n  assign gap_half = section.settings.gap | divided_by: 2 | append: 'px'\n  # Section gap divided by 4 (used for two column layouts where each column gets half of the half gap)\n  assign gap_quarter = section.settings.gap | divided_by: 4 | append: 'px'\n  # Image gap divided by 2 (space between images in grid)\n  assign image_gap_half = block_settings.image_gap | divided_by: 2 | append: 'px'\n\n  assign is_single_column = is_single_column | default: false\n  assign needs_both_sizes = needs_both_sizes | default: false\n\n  # Determine which size calculation to use\n  assign calculate_single_column = false\n  assign calculate_grid_column = false\n\n  if needs_both_sizes\n    if is_first_image\n      assign calculate_single_column = true\n    else\n      assign calculate_grid_column = true\n    endif\n  elsif is_single_column\n    assign calculate_single_column = true\n  else\n    assign calculate_grid_column = true\n  endif\n\n  # Set up default sizes\n  if calculate_single_column\n    # Default for carousel or single column grid (or first image in large_first_image mode)\n    if section.settings.equal_columns == false\n      assign default_sizes = '(min-width: 750px) calc(100vw - 25rem - [gap_half]), 100vw' | replace: '[gap_half]', gap_half\n    else\n      assign default_sizes = '(min-width: 750px) calc(50vw - [gap_half]), 100vw' | replace: '[gap_half]', gap_half\n    endif\n  else\n    # Default for two column grid - includes image gap and quarter section gap\n    if section.settings.equal_columns == false\n      assign default_sizes = '(min-width: 750px) calc((100vw - 25rem) / 2 - [gap_quarter] - [image_gap_half]), 100vw' | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half\n    else\n      assign default_sizes = '(min-width: 750px) calc(50vw / 2 - [gap_quarter] - [image_gap_half]), 100vw' | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half\n    endif\n  endif\n\n  # Override for center-aligned content\n  if section.settings.content_width == 'content-center-aligned'\n    # Define breakpoints and base sizes based on page width\n    # Breakpoints are the page width setting + margin (where 2 x margin is 80px = 5rem)\n    case settings.page_width\n      when 'narrow'\n        assign breakpoint = '95rem'\n        assign media_base_size_equal_columns = '45rem'\n        assign media_base_size_unequal_columns = '65rem'\n      when 'normal'\n        assign breakpoint = '125rem'\n        assign media_base_size_equal_columns = '60rem'\n        assign media_base_size_unequal_columns = '95rem'\n      when 'wide'\n        assign breakpoint = '155rem'\n        assign media_base_size_equal_columns = '75rem'\n        assign media_base_size_unequal_columns = '125rem'\n    endcase\n\n    # Select the appropriate base size\n    if section.settings.equal_columns\n      assign media_base_size = media_base_size_equal_columns\n    else\n      assign media_base_size = media_base_size_unequal_columns\n    endif\n\n    # Calculate large screen size base\n    if block_settings.extend_media\n      assign large_size_base = '[media_base_size] + (100vw - [breakpoint])' | replace: '[media_base_size]', media_base_size | replace: '[breakpoint]', breakpoint\n    else\n      assign large_size_base = media_base_size\n    endif\n\n    # Calculate medium screen size\n    if section.settings.equal_columns\n      assign medium_base = '50vw'\n    else\n      assign medium_base = '100vw - 25rem'\n    endif\n\n    # Build calculation based on column type\n    if calculate_grid_column\n      # Grid column calculation - includes image gap\n      assign medium_base = '([medium_base]) / 2' | replace: '[medium_base]', medium_base\n      # Build the complete large size expression\n      assign large_size_expr = '([large_size_base]) / 2 - [image_gap_half]' | replace: '[large_size_base]', large_size_base | replace: '[image_gap_half]', image_gap_half\n      assign large_size = 'calc([large_size_expr])' | replace: '[large_size_expr]', large_size_expr\n\n      if block_settings.extend_media\n        assign medium_size = 'calc([medium_base] - [page_margin] - [gap_quarter] - [image_gap_half] + [page_margin])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half\n      else\n        assign medium_size = 'calc([medium_base] - [page_margin] - [gap_quarter] - [image_gap_half])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half\n      endif\n      assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], 100vw' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size\n    else\n      # Single column calculation\n      if block_settings.extend_media\n        assign large_size = 'calc([large_size_base])' | replace: '[large_size_base]', large_size_base\n      else\n        assign large_size = large_size_base\n      endif\n\n      if block_settings.extend_media\n        assign medium_size = 'calc([medium_base] - [page_margin] - [gap_half])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_half]', gap_half\n      else\n        assign medium_size = 'calc([medium_base] - [page_margin] - [gap_half] - [page_margin])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_half]', gap_half\n      endif\n      assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], 100vw' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size\n    endif\n  else\n    # Use default sizes\n    assign sizes = default_sizes\n  endif\n\n  # Echo the sizes attribute\n  echo sizes\n-%}\n"
  },
  {
    "path": "snippets/variant-main-picker.liquid",
    "content": "{%- doc -%}\n  Renders a default variant picker, used to display the variant picker in the variants block.\n\n  @param {object} product_resource - The product object.\n  @param {object} [block] - The block object\n{%- enddoc -%}\n\n{% assign block_settings = block.settings %}\n\n{% unless product_resource.has_only_default_variant %}\n  {% liquid\n    assign button_background_brightness = section.settings.color_scheme.settings.foreground | color_brightness\n    if button_background_brightness < 105\n      assign strikethrough_color_mix = '#000'\n    else\n      assign strikethrough_color_mix = '#fff'\n    endif\n  %}\n  <variant-picker\n    class=\"variant-picker spacing-style variant-picker--{{ block_settings.alignment }}\"\n    style=\"--color-strikethrough-mix: {{ strikethrough_color_mix }}; {% render 'spacing-style', settings: block_settings %}\"\n    data-section-id=\"{{ section.id }}\"\n    data-product-id=\"{{ product_resource.id }}\"\n    data-block-id=\"{{ block.id }}\"\n    data-product-url=\"{{ product_resource.url }}\"\n    ref=\"mainVariantPicker\"\n    {% if product.id == product_resource.id %}\n      data-template-product-match=\"true\"\n    {% endif %}\n    {{ block.shopify_attributes }}\n    {% if request.visual_preview_mode %}\n      data-shopify-visual-preview\n    {% endif %}\n  >\n    <form class=\"variant-picker__form\">\n      {%- for product_option in product_resource.options_with_values -%}\n        {%- liquid\n          assign swatch_count = product_option.values | map: 'swatch' | compact | size\n          assign variant_style = block_settings.variant_style\n\n          if swatch_count > 0 and block_settings.show_swatches\n            if block_settings.variant_style == 'dropdown'\n              assign variant_style = 'swatch_dropdown'\n            else\n              assign variant_style = 'swatch'\n            endif\n          endif\n\n          if variant_style == 'buttons' and settings.variant_button_width == 'equal-width-buttons'\n            assign fieldset_id = section.id | append: '-' | append: product_resource.id | append: '-' | append: product_option.name | handleize\n            assign option_id_attribute = 'data-option-id=\"' | append: fieldset_id | append: '\"'\n            assign longest_value = 0\n          endif\n        -%}\n\n        {%- if product_option.values.size == 1 and variant_style != 'swatch' -%}\n          <div\n            class=\"variant-option\"\n            data-testid=\"variant-option-single\"\n          >\n            {{- product_option.name | escape -}}\n            <span\n              class=\"variant-option__swatch-value\"\n              data-testid=\"variant-option-single-value\"\n            >\n              {{- product_option.selected_value -}}\n            </span>\n          </div>\n        {%- elsif variant_style == 'swatch' or block_settings.variant_style == 'buttons' -%}\n          {%- assign fieldset_index = forloop.index0 -%}\n          <fieldset\n            class=\"variant-option variant-option--buttons{% if variant_style == 'swatch' %} variant-option--swatches{% else %} variant-option--{{ settings.variant_button_width }}{% endif %}\"\n            data-fieldset-index=\"{{ fieldset_index }}\"\n            ref=\"fieldsets[]\"\n            {{ option_id_attribute }}\n          >\n            <legend>\n              {{ product_option.name | escape -}}\n              {%- if variant_style == 'swatch' -%}\n                <span class=\"variant-option__swatch-value\">{{ product_option.selected_value }}</span>\n              {%- endif %}\n            </legend>\n            {%- for product_option_value in product_option.values -%}\n              {% if product_option_value.size > longest_value and option_id_attribute %}\n                {% assign longest_value = product_option_value.size %}\n              {% endif %}\n              <label\n                class=\"variant-option__button-label{% if variant_style == 'swatch' %} variant-option__button-label--has-swatch{% endif %}\"\n              >\n                <input\n                  type=\"radio\"\n                  name=\"{{ product_option.name | escape }}-{{ block.id }}-{{ product_resource.id }}\"\n                  value=\"{{ product_option_value | escape }}\"\n                  aria-label=\"{{ product_option_value.name }}\"\n                  {% if product_option_value.available == false %}\n                    aria-disabled=\"true\"\n                  {% endif %}\n                  data-previous-checked=\"false\"\n                  data-fieldset-index=\"{{ fieldset_index }}\"\n                  data-input-index=\"{{ forloop.index0 }}\"\n                  data-input-id=\"{{ product_option.position }}-{{ forloop.index0 }}\"\n                  data-option-value-id=\"{{ product_option_value.id }}\"\n                  data-option-available=\"{{ product_option_value.available }}\"\n                  data-connected-product-url=\"{{ product_option_value.product_url }}\"\n                  {% if product_option_value.variant.id %}\n                    data-variant-id=\"{{ product_option_value.variant.id }}\"\n                  {% endif %}\n                  {% if product_option_value.selected %}\n                    data-current-checked=\"true\"\n                    checked\n                  {% else %}\n                    data-current-checked=\"false\"\n                  {% endif %}\n                >\n                {% if variant_style == 'swatch' %}\n                  {% liquid\n                    assign featured_media = product_option_value.variant.featured_media\n\n                    # If the variant has no featured media, and we have a combined listing product, then fall back to\n                    # using the featured media of the child product that is linked to this option value.\n                    if featured_media == blank and product_option_value.product_url\n                      assign featured_media = product_option_value.variant.product.featured_media\n                    endif\n                  %}\n\n                  {% render 'swatch',\n                    swatch: product_option_value.swatch,\n                    variant_image: featured_media,\n                    mode: 'unscaled'\n                  %}\n                {% else %}\n                  {% if product_option_value.available == true %}\n                    <span\n                      class=\"variant-option__button-label__pill\"\n                      data-key=\"variant-option-pill\"\n                    ></span>\n                  {% endif %}\n                  <span\n                    class=\"variant-option__button-label__text\"\n                    data-key=\"variant-option-text\"\n                  >\n                    {{- product_option_value | escape -}}\n                  </span>\n                {% endif %}\n                {% render 'strikethrough-variant', product_option: product_option_value %}\n              </label>\n            {%- endfor -%}\n            {% if option_id_attribute %}\n              {% style %}\n                [data-option-id=\"{{ fieldset_id }}\"] {\n                  --variant-ch: {{ longest_value | times: 0.65 }}em;\n                }\n              {% endstyle %}\n            {% endif %}\n          </fieldset>\n        {%- elsif block_settings.variant_style == 'dropdowns' -%}\n          {%\n            # There is an opportunity to build a custom select component that will allow us to style the select element further (animation for dropdown, swatches shown in the dropdown options, etc)\n            # It's too bad as it mean rebuilding baked in behaviours but I think we've already done that for the locale selectors\n            # in dawn. So it might mean more time spent in setting it up but worth it for future updates/styling.\n          %}\n          {% liquid\n            assign property_being_updated = false\n            if settings.variant_swatch_width != settings.variant_swatch_height\n              assign property_being_updated = true\n              # (original width / original height) x new height (20px at the moment) = new width\n              assign new_width = settings.variant_swatch_width | times: 1.0 | divided_by: settings.variant_swatch_height | times: 20\n            endif\n          %}\n\n          <div class=\"variant-option variant-option--dropdowns\">\n            <label for=\"Option-{{ block.id }}-{{ forloop.index0 }}\">{{ product_option.name | escape }}</label>\n            <div\n              class=\"variant-option__select-wrapper\"\n              style=\"\n                {%- if property_being_updated  -%}\n                  --variant-picker-swatch-width: clamp(10px,{{ new_width }}px, 50px);\n                {%- endif -%}\n              \"\n            >\n              <select\n                id=\"Option-{{ block.id }}-{{ forloop.index0 }}\"\n                name=\"options[{{ product_option.name | escape }}]\"\n                class=\"variant-option__select\"\n              >\n                {%- for product_option_value in product_option.values -%}\n                  <option\n                    value=\"{{ product_option_value | escape }}\"\n                    data-input-id=\"{{ product_option.position }}-{{ forloop.index0 }}\"\n                    data-option-value-id=\"{{ product_option_value.id }}\"\n                    data-variant-id=\"{{ product_option_value.variant.id }}\"\n                    data-connected-product-url=\"{{ product_option_value.product_url }}\"\n                    {% if product_option_value.selected %}\n                      selected=\"selected\"\n                    {% endif %}\n                  >\n                    {% if product_option_value.available == false %}\n                      {{ product_option_value | escape }} - {{ 'content.unavailable' | t }}\n                    {% else %}\n                      {{ product_option_value | escape }}\n                    {% endif %}\n                  </option>\n                {%- endfor -%}\n              </select>\n              <svg\n                aria-hidden=\"true\"\n                focusable=\"false\"\n                class=\"icon icon-caret\"\n                viewBox=\"0 0 10 6\"\n              >\n                {%- render 'icon', icon: 'caret' -%}\n              </svg>\n            </div>\n          </div>\n        {%- endif -%}\n      {%- endfor -%}\n\n      <script type=\"application/json\">\n        {{ product_resource.selected_or_first_available_variant | json }}\n      </script>\n    </form>\n  </variant-picker>\n{% endunless %}\n\n{% stylesheet %}\n  /* Variant picker container styles - unique to main variant picker */\n  .variant-picker {\n    width: 100%;\n  }\n\n  .variant-picker__form {\n    width: 100%;\n  }\n\n  .variant-picker[data-shopify-visual-preview] {\n    min-width: 300px;\n    padding-inline-start: max(4px, var(--padding-inline-start));\n  }\n\n  /* Dropdown variant option styles */\n  .variant-option__select-wrapper {\n    display: flex;\n    position: relative;\n    border: var(--style-border-width-inputs) solid var(--color-border);\n    border-radius: var(--style-border-radius-inputs);\n    align-items: center;\n    margin-top: var(--margin-2xs);\n    overflow: clip;\n  }\n\n  .variant-option__select-wrapper:has(.swatch) {\n    --variant-picker-swatch-width: 20px;\n    --variant-picker-swatch-height: 20px;\n  }\n\n  .variant-option__select-wrapper:hover {\n    border-color: var(--color-variant-hover-border);\n  }\n\n  .variant-option__select:focus-visible {\n    outline: var(--focus-outline-width) solid currentcolor;\n    outline-offset: var(--focus-outline-offset);\n  }\n\n  .variant-option__select {\n    padding-block: var(--padding-md);\n    padding-inline: var(--padding-lg) calc(var(--padding-lg) + var(--icon-size-2xs));\n    appearance: none;\n    border: 0;\n    width: 100%;\n    margin: 0;\n    cursor: pointer;\n  }\n\n  .variant-option__select-wrapper .icon {\n    position: absolute;\n    right: var(--padding-md);\n    top: 50%;\n    transform: translateY(-50%);\n    width: var(--icon-size-2xs);\n    height: var(--icon-size-2xs);\n    pointer-events: none;\n  }\n\n  .variant-option__select--has-swatch {\n    padding-inline-start: calc((2 * var(--padding-sm)) + var(--variant-picker-swatch-width));\n  }\n\n  .variant-option__select-wrapper .swatch {\n    position: absolute;\n    top: 50%;\n    left: var(--padding-md);\n    transform: translateY(-50%);\n  }\n\n  /* Variant picker alignment modifiers */\n  .variant-picker--center,\n  .variant-picker--center .variant-option {\n    text-align: center;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n  }\n\n  .variant-picker--right,\n  .variant-picker--right .variant-option {\n    text-align: right;\n    justify-content: right;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/variant-swatches.liquid",
    "content": "{%- doc -%}\n  Renders a swatches variant picker, used within the product-swatches block.\n  A swatch will rendered in a pre-selected state if the context allows it.\n  Allowed contexts are search and filtered collections.\n\n  @param {object} product_resource - The product object, which contains variants and options.\n  @param {boolean} [has_option_selected] - Whether to render the swatches in a pre-selected state.\n\n  @example\n  {% render 'variant-swatches', product_resource: product %}\n{%- enddoc -%}\n\n{% stylesheet %}\n  swatches-variant-picker-component {\n    display: flex;\n    width: 100%;\n    flex-direction: row;\n    justify-content: var(--product-swatches-alignment-mobile);\n\n    @media screen and (min-width: 750px) {\n      justify-content: var(--product-swatches-alignment);\n    }\n\n    --overflow-list-padding-block: calc(\n        var(--product-swatches-padding-block-start) + var(--focus-outline-offset) + var(--focus-outline-width)\n      )\n      calc(var(--product-swatches-padding-block-end) + var(--focus-outline-offset) + var(--focus-outline-width));\n    --overflow-list-padding-inline: calc(\n        var(--product-swatches-padding-inline-start) + var(--focus-outline-offset) + (1.5 * var(--focus-outline-width))\n      )\n      calc(var(--product-swatches-padding-inline-end) + var(--focus-outline-offset) + var(--focus-outline-width));\n\n    overflow-list::part(list) {\n      gap: var(--gap-sm);\n    }\n  }\n\n  .hidden-swatches__count {\n    display: flex;\n    align-self: center;\n    align-items: center;\n    justify-content: center;\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-40-60));\n    background-color: transparent;\n    padding: 0;\n    border: 0;\n    border-radius: 0;\n\n    &::before {\n      /* This doesn't work in Safari without the counter-reset. https://stackoverflow.com/a/40179718 */\n      counter-reset: overflow-count var(--overflow-count);\n      content: '+' counter(overflow-count);\n      line-height: 1;\n      cursor: pointer;\n    }\n  }\n\n  .hidden-swatches__count:hover {\n    color: var(--color-foreground-rgb);\n  }\n{% endstylesheet %}\n\n{% liquid\n  # Allow pre-selection of a swatch if there is a selected variant\n  # product.selected_variant is automatically set in filtered collection, filtered search and some unfiltered search contexts based on result relevance.\n  # Applying a filter updates the displayed image, so a swatch can help communicate the change.\n  assign allow_preselection = false\n\n  if product_resource.selected_variant or has_option_selected\n    assign allow_preselection = true\n  endif\n%}\n\n<swatches-variant-picker-component\n  data-product-id=\"{{ product_resource.id }}\"\n  data-product-url=\"{{ product_resource.url }}\"\n  ref=\"swatchesVariantPicker\"\n>\n  <form>\n    {% comment %}\n      Find the first product option that has swatches.\n      Then render individual swatches with information on the most relevant variant image to be used in:\n      - a data-media-id attribute to show relevant media in a card-gallery on hover/click.\n      - the swatch content, optionally based on theme settings.\n    {% endcomment %}\n    {%- for product_option in product_resource.options_with_values -%}\n      {%- liquid\n        assign swatch_count = product_option.values | map: 'swatch' | compact | size\n      -%}\n\n      {% if swatch_count == 0 %}\n        {% continue %}\n      {% endif %}\n\n      {%- liquid\n        # Identify which option position this swatch option is\n        # Use product_option.position which is the actual position among ALL options\n        assign swatch_option_position = product_option.position\n        assign swatch_option_key = 'option' | append: swatch_option_position\n      -%}\n\n      <fieldset class=\"variant-option variant-option--buttons variant-option--swatches\">\n        {% capture children %}\n          {%- for product_option_value in product_option.values -%}\n            {% liquid\n              comment\n                Identify the most relevant variant image to show in a card-gallery, and optionally as the swatch content.\n                The `product_option_value.variant` can be nil when no valid variant is associated with the combination of the current option-value and the other option values.\n                e.g. a product option Color: \"Red\" does not exist for the product option Size: \"Small\".\n                In this case, we look for the first available variant in that option (e.g. Color) that has a featured media.\n              endcomment\n\n              assign featured_media = product_option_value.variant.featured_media\n\n              if featured_media == blank\n                if product_option_value.variant == blank\n                  for variant in product_resource.variants\n                    if variant.available and variant[swatch_option_key] == product_option_value.name and variant.featured_media\n                      assign featured_media = variant.featured_media\n                      assign first_available_variant = variant\n                      break\n                    endif\n                  endfor\n                elsif product_option_value.product_url\n                  # If the variant has no featured media, and we have a combined listing product (product_url exists),\n                  # then fall back to using the featured media of the child product that is linked to this option value.\n                  assign featured_media = product_option_value.variant.product.featured_media\n                endif\n              endif\n            %}\n\n            <li class=\"variant-option__swatch\">\n              <label\n                data-media-id=\"{{ featured_media.id }}\"\n                class=\"variant-option__button-label variant-option__button-label--has-swatch\"\n                on:pointerenter=\"product-card/previewVariant/{{ featured_media.id }}\"\n                on:pointerleave=\"product-card/resetVariant\"\n              >\n                <input\n                  type=\"radio\"\n                  name=\"{{ product_option.name | escape }}-{{ product_resource.id }}-swatch\"\n                  value=\"{{ product_option_value | escape }}\"\n                  aria-label=\"{{ product_option_value.name }}\"\n                  data-input-id=\"{{ product_option.position }}-{{ forloop.index0 }}\"\n                  data-option-media-id=\"{{ featured_media.id }}\"\n                  data-option-value-id=\"{{ product_option_value.id }}\"\n                  data-option-available=\"{{ product_option_value.available }}\"\n                  data-connected-product-url=\"{{ product_option_value.product_url }}\"\n                  {% if allow_preselection and product_option_value.selected %}\n                    checked\n                  {% endif %}\n                  data-variant-id=\"{{ first_available_variant.id | default: product_option_value.variant.id }}\"\n                  data-first-available-or-first-variant-id=\"{{ first_available_variant.id | default: product_option_value.variant.id }}\"\n                >\n                {% render 'swatch',\n                  swatch: product_option_value.swatch,\n                  variant_image: featured_media,\n                %}\n                {% render 'strikethrough-variant', product_option: product_option_value %}\n              </label>\n            </li>\n          {%- endfor -%}\n          <li\n            slot=\"more\"\n          >\n            <button\n              class=\"hidden-swatches__count\"\n              aria-label=\"{{ 'actions.show_all_options' | t }}\"\n              on:click=\"/showAllSwatches\"\n            ></button>\n          </li>\n        {% endcapture %}\n\n        {% render 'overflow-list', children: children, ref: 'overflowList' %}\n      </fieldset>\n    {%- endfor -%}\n    <script type=\"application/json\">\n      {{ product_resource.selected_or_first_available_variant | json }}\n    </script>\n  </form>\n</swatches-variant-picker-component>\n"
  },
  {
    "path": "snippets/video.liquid",
    "content": "{%- doc -%}\n  Renders a video element, from a video object (<video> element) or a video URL (<iframe> element)\n\n  Shared parameters:\n\n  @param {boolean} [video_autoplay] - Whether the video should autoplay\n  @param {boolean} [video_loop] - Whether the video should loop\n  @param {string} [video_class] - Additional classes for the video element\n  @param {string} [video_style] - Additional inline styles\n  @param {object} [video_preview_image] - Preview image to show before video plays\n  @param {string} [widths] - Responsive widths\n  @param {string} [sizes] - Responsive sizes\n  @param {string} [loading] - Loading attribute\n  @param {string} [additional_attributes] - Any additional HTML attributes\n  @param {string} [video_type] - 'youtube' or 'vimeo'\n  @param {boolean} [disable_controls] - Whether to disable controls. If true, only play/pause will be usable.\n  @param {object} video - The Shopify video object or a string containing a YouTube ID or Vimeo ID\n  @param {string} section_id - The section ID\n  @param {object} [block] - The block object\n\n  Video from URL:\n\n  @param {boolean} [video_from_url] - Set to true to use a video from URL instead of a Shopify video object\n  @param {string} [video_alt] - The video alt text\n\n  @example\n  {% render 'video', video: section.settings.video, video_autoplay: true, video_loop: true, section_id: section.id %}\n{%- enddoc -%}\n\n{% liquid\n  assign block_settings = block.settings\n  assign video_alt = video_alt | default: video.alt\n  assign alt = 'blocks.load_video' | t: description: video_alt | escape\n  assign video_preview_image = video_preview_image | default: video.preview_image\n  assign video_autoplay = video_autoplay | default: block_settings.video_autoplay\n  assign video_loop = video_loop | default: block_settings.video_loop\n  assign media_width_desktop = 100 | divided_by: 2 | append: 'vw'\n  assign media_width_mobile = '100vw'\n  assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile\n  assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840'\n%}\n\n{% if video_from_url %}\n  {% liquid\n    if video_type == 'youtube'\n      assign video_src = 'https://www.youtube.com/embed/VIDEO_ID?' | replace: 'VIDEO_ID', video\n\n      if video_autoplay == false and video_preview_image != blank\n        assign video_src = video_src | append: '&autoplay=1'\n      endif\n\n      if video_autoplay\n        assign video_src = video_src | append: '&autoplay=1&mute=1'\n      endif\n\n      if video_loop\n        assign video_src = video_src | append: '&playlist=' | append: video | append: '&loop=1'\n      endif\n      if disable_controls\n        assign video_src = video_src | append: '&controls=0'\n        assign video_src = video_src | append: '&enablejsapi=1'\n      endif\n      assign class = 'js-youtube'\n    else\n      assign video_src = 'https://player.vimeo.com/video/VIDEO_ID?' | replace: 'VIDEO_ID', video\n\n      if video_autoplay == false and video_preview_image != blank\n        assign video_src = video_src | append: '&autoplay=1'\n      endif\n\n      if video_autoplay\n        assign video_src = video_src | append: '&autoplay=1&muted=1'\n      endif\n      if video_loop\n        assign video_src = video_src | append: '&loop=1'\n      endif\n      if disable_controls\n        assign video_src = video_src | append: '&controls=0'\n        assign video_src = video_src | append: '&api=1'\n      endif\n      assign class = 'js-vimeo'\n    endif\n  %}\n  {% capture video_iframe %}\n      <iframe\n        src=\"{{ video_src }}\"\n        class=\"{{ class }}\"\n        allow=\"autoplay; encrypted-media\"\n        allowfullscreen\n        title=\"{{ video_alt | escape }}\"\n      ></iframe>\n  {% endcapture %}\n{% else %}\n  {% liquid\n    if disable_controls\n      assign controls = false\n      assign enable_js_api = true\n    else\n      assign controls = true\n      assign enable_js_api = false\n    endif\n  %}\n\n  {% capture video_tag %}\n    {% if video.host == 'youtube' %}\n      {{\n        video\n        | external_video_url: autoplay: true, loop: video_loop, playlist: video.external_id, mute: '1', controls: controls, enablejsapi: enable_js_api\n        | external_video_tag: data-video-type: 'youtube'\n      }}\n    {% elsif video.host == 'vimeo' %}\n      {{\n        video\n        | external_video_url: autoplay: true, loop: video_loop, muted: '1', controls: controls, api: enable_js_api\n        | external_video_tag: data-video-type: 'vimeo'\n      }}\n    {% else %}\n      {{ video | video_tag: image_size: '2500x', autoplay: true, loop: video_loop, muted: true, controls: controls }}\n    {% endif %}\n  {% endcapture %}\n{% endif %}\n\n{% if video != blank %}\n  <deferred-media\n    class=\"{{ video_class }}\"\n    style=\"{{ video_style }}\"\n    {% if video_autoplay %}\n      autoplay\n    {% endif %}\n    {{ additional_attributes }}\n  >\n    {% if video_preview_image != blank %}\n      <button\n        class=\"button deferred-media__poster-button button-unstyled\"\n        ref=\"deferredMediaPlayButton\"\n        aria-label=\"{{ alt }}\"\n        type=\"button\"\n        on:click=\"/showDeferredMedia\"\n        style=\"--video-aspect-ratio: {{ video.aspect_ratio }}\"\n      >\n        {{\n          video_preview_image\n          | image_url: width: 3840\n          | image_tag: widths: widths, sizes: sizes, loading: loading, class: 'deferred-media__poster-image'\n        }}\n\n        <span class=\"deferred-media__poster-icon icon-play\">\n          <span class=\"visually-hidden\">{{ 'accessibility.play_video' | t }}</span>\n          {{- 'icon-play.svg' | inline_asset_content -}}\n        </span>\n      </button>\n    {% endif %}\n\n    {% if disable_controls %}\n      <button\n        class=\"button button-unstyled deferred-media__poster-button video-interaction-hint hidden\"\n        ref=\"toggleMediaButton\"\n        type=\"button\"\n        on:click=\"/toggleMedia\"\n      >\n        <span class=\"deferred-media__poster-icon icon-play hidden\">\n          <span class=\"visually-hidden\">{{ 'accessibility.play_video' | t }}</span>\n          {{- 'icon-play.svg' | inline_asset_content -}}\n        </span>\n        <span class=\"deferred-media__poster-icon icon-pause hidden\">\n          <span class=\"visually-hidden\">{{ 'accessibility.pause_video' | t }}</span>\n          {{- 'icon-pause.svg' | inline_asset_content -}}\n        </span>\n      </button>\n    {% endif %}\n\n    <template>\n      {% if video_from_url %}\n        {{ video_iframe }}\n      {% else %}\n        {{ video_tag }}\n      {% endif %}\n    </template>\n\n    {% if video_autoplay or video_preview_image == blank %}\n      {% if video_from_url %}\n        {{ video_iframe }}\n      {% else %}\n        {{ video_tag }}\n      {% endif %}\n    {% endif %}\n  </deferred-media>\n{% else %}\n  <div\n    {{ additional_attributes }}\n    class=\"{%- if video_class -%}{{ video_class }} {%- endif -%}video-placeholder-wrapper\"\n    style=\"{%- if video_style -%}{{ video_style }} {%- endif -%}--video-placeholder-width: {{ block_settings.custom_width | default: 100 }}%;\"\n  >\n    {% if video_preview_image != blank and video_autoplay == false %}\n      {{ video_preview_image | image_url: width: 3840 | image_tag: widths: widths, sizes: sizes, loading: loading }}\n    {% else %}\n      {{ 'hero-apparel-3' | placeholder_svg_tag }}\n    {% endif %}\n    <span class=\"video-placeholder-wrapper__poster-icon icon-play\">\n      <span class=\"visually-hidden\">{{ 'accessibility.play_video' | t }}</span>\n      {{- 'icon-play.svg' | inline_asset_content -}}\n    </span>\n  </div>\n{% endif %}\n\n{% stylesheet %}\n  .video-interaction-hint {\n    opacity: 0;\n    transition: opacity 0.3s ease;\n    z-index: var(--layer-flat);\n  }\n\n  .video-interaction-hint:hover {\n    opacity: 1;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "snippets/volume-pricing-info.liquid",
    "content": "{% doc %}\n  Renders volume pricing information with quantity rules in a popover.\n  Only renders if variant has quantity rules or volume pricing.\n\n  @param {variant} variant - The variant object to display pricing for\n  @param {string} [unique_id] - Optional unique identifier to append to popover ID (e.g., cart line index)\n  @param {number} [quantity] - The current quantity (for highlighting active tier)\n  @param {boolean} [show_label] - Shows label \"Volume Pricing Available\"\n\n  @example\n  {% render 'volume-pricing-info',\n    variant: item.variant,\n    unique_id: item.index,\n    quantity: item.quantity\n  %}\n{% enddoc %}\n\n{%- liquid\n  assign has_quantity_rules = false\n  if variant.quantity_rule.min > 1 or variant.quantity_rule.increment > 1 or variant.quantity_rule.max != null\n    assign has_quantity_rules = true\n  endif\n\n  assign has_volume_pricing = false\n  if variant.quantity_price_breaks.size > 0\n    assign has_volume_pricing = true\n  endif\n\n  assign current_quantity = quantity | default: variant.quantity_rule.min | default: 1\n-%}\n\n{%- if has_quantity_rules or has_volume_pricing -%}\n  {%- liquid\n    assign popover_id = 'VolumePricingInfo-' | append: variant.id\n    assign anchor_name = '--volume-pricing-trigger-' | append: variant.id\n\n    assign use_currency = false\n    if unique_id != blank\n      assign popover_id = popover_id | append: '-' | append: unique_id\n      assign anchor_name = anchor_name | append: '-' | append: unique_id\n      if settings.currency_code_enabled_cart_items\n        assign use_currency = true\n      endif\n    else\n      if settings.currency_code_enabled_product_pages\n        assign use_currency = true\n      endif\n    endif\n  -%}\n  <anchored-popover-component\n    data-hover-triggered=\"true\"\n    class=\"volume-pricing-info\"\n    id=\"volume-pricing-anchor-{{ popover_id }}\"\n  >\n    <button\n      type=\"button\"\n      class=\"volume-pricing-info__button button-unstyled{% if show_label %} volume-pricing-info__button--with-label{% endif %}\"\n      aria-label=\"{{ 'accessibility.view_pricing_info' | t }}\"\n      ref=\"trigger\"\n      popovertarget=\"{{ popover_id }}\"\n      style=\"anchor-name: {{ anchor_name }};\"\n    >\n      <span class=\"svg-wrapper\">{{- 'icon-info.svg' | inline_asset_content -}}</span>\n      {% if show_label %}\n        {{ 'content.volume_pricing_available' | t }}\n      {% endif %}\n    </button>\n\n    <div\n      id=\"{{ popover_id }}\"\n      class=\"volume-pricing-info__popover\"\n      ref=\"popover\"\n      popover=\"auto\"\n      style=\"position-anchor: {{ anchor_name }};\"\n    >\n      <volume-pricing-info>\n        {%- if has_quantity_rules -%}\n          <div class=\"volume-pricing-info__rules\">\n            {%- if variant.quantity_rule.increment > 1 -%}\n              <span>{{ 'products.product.quantity_increments' | t: increment: variant.quantity_rule.increment }}</span>\n            {%- endif -%}\n            {%- if variant.quantity_rule.min > 1 or variant.quantity_rule.max != null -%}\n              <span>\n                {{- 'products.product.quantity_minimum' | t: minimum: variant.quantity_rule.min | default: 1 -}}\n                {%- if variant.quantity_rule.max != null %}\n                  • {{ 'products.product.quantity_maximum' | t: maximum: variant.quantity_rule.max -}}\n                {%- endif -%}\n              </span>\n            {%- endif -%}\n          </div>\n        {%- endif -%}\n\n        {%- if has_volume_pricing -%}\n          <div class=\"volume-pricing-info__table\">\n            {%- assign min_qty = variant.quantity_rule.min | default: 1 -%}\n            {%- assign first_break = variant.quantity_price_breaks.first.minimum_quantity -%}\n\n            <div\n              class=\"volume-pricing-info__row{% if current_quantity >= min_qty and current_quantity < first_break %} volume-pricing-info__row--active{% endif %}\"\n              data-quantity=\"{{ min_qty }}\"\n            >\n              <span class=\"volume-pricing-info__quantity\">{{ min_qty }}+</span>\n              {%- capture price_text -%}{%- if use_currency -%}{{ variant.price | money_with_currency | strip }}/{{ 'content.each_abbreviation' | t }}{%- else -%}{{ variant.price | money | strip }}/{{ 'content.each_abbreviation' | t }}{%- endif -%}{%- endcapture -%}\n              <span class=\"volume-pricing-info__price\"\n                ><span class=\"volume-pricing-info__checkmark\">{{- 'icon-checkmark.svg' | inline_asset_content -}}</span>\n                {{- price_text | strip -}}\n              </span>\n            </div>\n\n            {%- for price_break in variant.quantity_price_breaks -%}\n              {%- assign next_tier = variant.quantity_price_breaks[forloop.index].minimum_quantity -%}\n              {%- assign is_last = forloop.last -%}\n              {%- assign is_active = false -%}\n              {%- if is_last -%}\n                {%- if current_quantity >= price_break.minimum_quantity -%}\n                  {%- assign is_active = true -%}\n                {%- endif -%}\n              {%- elsif current_quantity >= price_break.minimum_quantity and current_quantity < next_tier -%}\n                {%- assign is_active = true -%}\n              {%- endif -%}\n\n              <div\n                class=\"volume-pricing-info__row{% if is_active %} volume-pricing-info__row--active{% endif %}\"\n                data-quantity=\"{{ price_break.minimum_quantity }}\"\n              >\n                <span class=\"volume-pricing-info__quantity\">{{ price_break.minimum_quantity }}+</span>\n                {%- capture price_text -%}{%- if use_currency -%}{{ price_break.price | money_with_currency | strip }}/{{ 'content.each_abbreviation' | t }}{%- else -%}{{ price_break.price | money | strip }}/{{ 'content.each_abbreviation' | t }}{%- endif -%}{%- endcapture -%}\n                <span class=\"volume-pricing-info__price\"\n                  ><span class=\"volume-pricing-info__checkmark\">\n                    {{- 'icon-checkmark.svg' | inline_asset_content -}}\n                  </span>\n                  {{- price_text | strip -}}\n                </span>\n              </div>\n            {%- endfor -%}\n          </div>\n        {%- endif -%}\n      </volume-pricing-info>\n    </div>\n  </anchored-popover-component>\n{%- endif -%}\n\n{% stylesheet %}\n  .volume-pricing-info {\n    display: inline-flex;\n  }\n\n  .volume-pricing-info__button {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--minimum-touch-target);\n    height: var(--minimum-touch-target);\n    color: var(--color-foreground-secondary);\n    cursor: pointer;\n    transition: color var(--animation-speed) var(--animation-easing);\n    flex-shrink: 0;\n  }\n\n  .volume-pricing-info__button:hover {\n    color: var(--color-foreground);\n  }\n\n  .volume-pricing-info__button .svg-wrapper {\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n  }\n\n  .volume-pricing-info__button--with-label {\n    width: auto;\n    gap: var(--gap-sm);\n  }\n\n  .volume-pricing-info__popover {\n    --volume-pricing-popover-max-width: 320px;\n    --volume-pricing-popover-spacing: 8px;\n    --volume-pricing-popover-viewport-margin: 16px;\n\n    min-inline-size: 280px;\n    max-inline-size: var(--volume-pricing-popover-max-width);\n    background: var(--color-background);\n    border: var(--style-border-popover);\n    border-radius: var(--style-border-radius-popover, 0);\n    box-shadow: var(--shadow-popover);\n    overflow: hidden;\n    padding: 0;\n    margin: 0;\n    transition-property: display, opacity, translate;\n    transition-duration: 0.3s;\n    transition-timing-function: var(--ease-out-quad);\n    transition-behavior: allow-discrete;\n    translate: 0 20px;\n    opacity: 0;\n  }\n\n  /* Native anchor positioning for supported browsers */\n  .volume-pricing-info__popover {\n    inset: unset;\n    top: calc(anchor(bottom) + var(--volume-pricing-popover-spacing));\n    left: anchor(left);\n  }\n\n  @supports (position-try-fallbacks: --top-left) {\n    .volume-pricing-info__popover {\n      position-try-fallbacks: --top-left;\n    }\n\n    @position-try --top-left {\n      top: calc(anchor(top) - var(--volume-pricing-popover-spacing));\n      bottom: auto;\n      transform: translateY(-100%);\n    }\n  }\n\n  /* Fallback positioning using custom properties */\n  @supports not (position-anchor: --volume-pricing-trigger) {\n    .volume-pricing-info__popover {\n      position: fixed;\n      top: calc(var(--anchor-bottom) * 1px + var(--volume-pricing-popover-spacing));\n      left: max(\n        var(--volume-pricing-popover-viewport-margin),\n        min(\n          var(--anchor-left) * 1px,\n          100vw - var(--volume-pricing-popover-max-width) - var(--volume-pricing-popover-viewport-margin)\n        )\n      );\n    }\n  }\n\n  .volume-pricing-info__popover:popover-open {\n    translate: 0 0;\n    opacity: 1;\n  }\n\n  @starting-style {\n    .volume-pricing-info__popover:popover-open {\n      translate: 0 20px;\n      opacity: 0;\n    }\n  }\n\n  .volume-pricing-info__rules {\n    display: flex;\n    flex-direction: column;\n    gap: var(--gap-2xs);\n    padding: var(--padding-md);\n    font-size: var(--font-size--xs);\n  }\n\n  .volume-pricing-info__rules,\n  .volume-pricing-info__rules > span {\n    color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));\n  }\n\n  .volume-pricing-info__table {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .volume-pricing-info__row {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: var(--padding-sm) var(--padding-md);\n    font-size: var(--font-size--sm);\n    background: var(--color-background);\n    border-inline-start: 3px solid transparent;\n    transition: border-color var(--animation-speed) var(--animation-easing);\n  }\n\n  .volume-pricing-info__row:nth-child(odd) {\n    background: rgb(var(--color-foreground-rgb) / var(--opacity-5));\n  }\n\n  .volume-pricing-info__row--active {\n    border-inline-start-color: var(--color-foreground);\n    font-weight: var(--font-weight-medium);\n  }\n\n  .volume-pricing-info__quantity {\n    color: var(--color-foreground);\n  }\n\n  .volume-pricing-info__price {\n    display: flex;\n    align-items: center;\n    color: var(--color-foreground);\n  }\n\n  .volume-pricing-info__checkmark {\n    display: none;\n    width: var(--icon-size-sm);\n    height: var(--icon-size-sm);\n    color: var(--color-primary);\n  }\n\n  .volume-pricing-info__row--active .volume-pricing-info__checkmark {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n  }\n{% endstylesheet %}\n"
  },
  {
    "path": "templates/404.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"main\": {\n      \"type\": \"main-404\",\n      \"blocks\": {\n        \"text_GqmVFf\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.text\",\n          \"settings\": {\n            \"text\": \"<h1>Page not found</h1>\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"center\",\n            \"type_preset\": \"h3\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"text_Ua9XAW\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.text\",\n          \"settings\": {\n            \"text\": \"<p>The link may be incorrect, or the page has been removed. </p>\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"center\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 16,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"button_PAQMwR\": {\n          \"type\": \"button\",\n          \"name\": \"t:names.button\",\n          \"settings\": {\n            \"label\": \"Continue shopping\",\n            \"link\": \"shopify://collections/all\",\n            \"open_in_new_tab\": false,\n            \"style_class\": \"button\",\n            \"width\": \"fit-content\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fit-content\",\n            \"custom_width_mobile\": 100\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\n        \"text_GqmVFf\",\n        \"text_Ua9XAW\",\n        \"button_PAQMwR\"\n      ],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"section_width\": \"page-width\",\n        \"section_height\": \"small\",\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 20,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 100,\n        \"padding-block-end\": 100\n      }\n    },\n    \"product_list_iA96Tq\": {\n      \"type\": \"product-list\",\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"align_baseline\": false,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_WJEa9Q\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"<p>Discover something new</p>\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-primary--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"text_WJEa9Q\"\n          ]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_card_gallery_wxYqE3\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_83YMDL\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_A6DYPt\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_card_gallery_wxYqE3\",\n            \"product_title_83YMDL\",\n            \"price_A6DYPt\"\n          ]\n        }\n      },\n      \"name\": \"t:names.featured_collection\",\n      \"settings\": {\n        \"collection\": \"all\",\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 4,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"mobile_card_size\": \"60cqw\",\n        \"columns_gap\": 12,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"horizontal_alignment\": \"center\",\n        \"gap\": 36,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"main\",\n    \"product_list_iA96Tq\"\n  ]\n}\n"
  },
  {
    "path": "templates/article.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"section\": {\n      \"type\": \"main-blog-post\",\n      \"blocks\": {\n        \"blog-post-title\": {\n          \"type\": \"text\",\n          \"name\": \"Title\",\n          \"static\": true,\n          \"settings\": {\n            \"text\": \"<h1>{{ article.title }}</h1>\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"center\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"blog-post-details\": {\n          \"type\": \"_blog-post-info-text\",\n          \"name\": \"Details\",\n          \"static\": true,\n          \"settings\": {\n            \"show_date\": true,\n            \"show_author\": false,\n            \"type_preset\": \"\",\n            \"alignment\": \"center\",\n            \"show_alignment\": true,\n            \"padding-block-start\": 24,\n            \"padding-block-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"blog-post-image\": {\n          \"type\": \"_blog-post-featured-image\",\n          \"name\": \"Featured image\",\n          \"static\": true,\n          \"settings\": {\n            \"image_ratio\": \"landscape\",\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"blog-post-content\": {\n          \"type\": \"_blog-post-content\",\n          \"static\": true,\n          \"settings\": {},\n          \"blocks\": {}\n        }\n      },\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"gap\": 32,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 80\n      }\n    }\n  },\n  \"order\": [\n    \"section\"\n  ]\n}\n"
  },
  {
    "path": "templates/blog.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"main\": {\n      \"type\": \"main-blog\",\n      \"blocks\": {\n        \"title\": {\n          \"type\": \"text\",\n          \"name\": \"Title\",\n          \"settings\": {\n            \"text\": \"<h1>{{ closest.blog.title }}</h1>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"narrow\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 48,\n            \"padding-block-end\": 48,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"static-blog-post-card\": {\n          \"type\": \"_blog-post-card\",\n          \"static\": true,\n          \"settings\": {\n            \"alignment\": \"left\"\n          },\n          \"blocks\": {\n            \"heading\": {\n              \"type\": \"_heading\",\n              \"name\": \"t:names.title\",\n              \"static\": true,\n              \"settings\": {\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-primary--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"\",\n                \"text\": \"\",\n                \"read_only\": true,\n                \"alignment\": \"left\",\n                \"show_alignment\": false,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 10,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"blog-post-details\": {\n              \"type\": \"_blog-post-info-text\",\n              \"name\": \"t:names.details\",\n              \"static\": true,\n              \"settings\": {\n                \"show_date\": true,\n                \"show_author\": false,\n                \"type_preset\": \"\",\n                \"alignment\": \"left\",\n                \"show_alignment\": false,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"image\": {\n              \"type\": \"_blog-post-image\",\n              \"static\": true,\n              \"settings\": {\n                \"height\": \"large\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 4\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": []\n        }\n      },\n      \"block_order\": [\n        \"title\"\n      ],\n      \"settings\": {\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 0,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"main\"\n  ]\n}\n"
  },
  {
    "path": "templates/cart.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"cart-section\": {\n      \"type\": \"main-cart\",\n      \"blocks\": {\n        \"cart-page-title\": {\n          \"type\": \"_cart-title\",\n          \"static\": true,\n          \"settings\": {\n            \"title\": \"Cart\",\n            \"show_count\": true,\n            \"type_preset\": \"h4\",\n            \"alignment\": \"left\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"cart-page-items\": {\n          \"type\": \"_cart-products\",\n          \"static\": true,\n          \"settings\": {\n            \"gap\": 24,\n            \"image_ratio\": \"portrait\",\n            \"dividers\": true,\n            \"vendor\": false,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"cart-page-summary\": {\n          \"type\": \"_cart-summary\",\n          \"static\": true,\n          \"settings\": {\n            \"extend_summary\": true,\n            \"inherit_color_scheme\": false,\n            \"color_scheme\": \"scheme-2\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {}\n        }\n      },\n      \"settings\": {\n        \"section_width\": \"page-width\",\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 24,\n        \"padding-block-end\": 0\n      }\n    },\n    \"product_list_NNFgcy\": {\n      \"type\": \"product-list\",\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_list_text_fifeh4\": {\n              \"type\": \"_product-list-text\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"text\": \"<h3>You may also like</h3>\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_list_button_eibbma\": {\n              \"type\": \"_product-list-button\",\n              \"name\": \"t:names.product_list_button\",\n              \"settings\": {\n                \"label\": \"View all\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_list_text_fifeh4\",\n            \"product_list_button_eibbma\"\n          ]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_card_gallery_PEPpfq\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_WNMpHe\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_yXfkPX\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_card_gallery_PEPpfq\",\n            \"product_title_WNMpHe\",\n            \"price_yXfkPX\"\n          ]\n        }\n      },\n      \"name\": \"t:names.featured_collection\",\n      \"settings\": {\n        \"collection\": \"all\",\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 4,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"mobile_card_size\": \"60cqw\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"horizontal_alignment\": \"flex-start\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"cart-section\",\n    \"product_list_NNFgcy\"\n  ]\n}\n"
  },
  {
    "path": "templates/collection.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"section\": {\n      \"type\": \"section\",\n      \"blocks\": {\n        \"text_tqQTNE\": {\n          \"type\": \"text\",\n          \"name\": \"Title\",\n          \"settings\": {\n            \"text\": \"<h1>{{ closest.collection.title }}</h1>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"text_twGGkJ\": {\n          \"type\": \"text\",\n          \"name\": \"Description\",\n          \"settings\": {\n            \"text\": \"{{ closest.collection.description }}\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\n        \"text_tqQTNE\",\n        \"text_twGGkJ\"\n      ],\n      \"name\": \"Collection heading\",\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"align_baseline\": false,\n        \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 12,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"section_height_custom\": 50,\n        \"color_scheme\": \"scheme-1\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"toggle_overlay\": false,\n        \"overlay_color\": \"#00000026\",\n        \"overlay_style\": \"solid\",\n        \"gradient_direction\": \"to top\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    },\n    \"main\": {\n      \"type\": \"main-collection\",\n      \"blocks\": {\n        \"filters\": {\n          \"type\": \"filters\",\n          \"static\": true,\n          \"settings\": {\n            \"enable_filtering\": true,\n            \"filter_style\": \"horizontal\",\n            \"filter_width\": \"centered\",\n            \"text_label_case\": \"default\",\n            \"show_swatch_label\": false,\n            \"show_filter_label\": false,\n            \"enable_sorting\": true,\n            \"enable_grid_density\": true,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"padding-block-start\": 8,\n            \"padding-block-end\": 8,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0,\n            \"facets_margin_bottom\": 8,\n            \"facets_margin_right\": 20\n          },\n          \"blocks\": {}\n        },\n        \"product-card\": {\n          \"type\": \"_product-card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"card-gallery\": {\n              \"type\": \"_product-card-gallery\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_4nY4eT\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_EzJzMm\": {\n              \"type\": \"price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"swatches\": {\n              \"type\": \"swatches\",\n              \"name\": \"t:names.swatches\",\n              \"settings\": {\n                \"product_swatches_alignment\": \"flex-start\",\n                \"product_swatches_padding_top\": 4,\n                \"product_swatches_padding_bottom\": 0,\n                \"product_swatches_padding_left\": 0,\n                \"product_swatches_padding_right\": 0\n              }\n            }\n          },\n          \"block_order\": [\n            \"card-gallery\",\n            \"product_title_4nY4eT\",\n            \"price_EzJzMm\",\n            \"swatches\"\n          ]\n        }\n      },\n      \"settings\": {\n        \"layout_type\": \"grid\",\n        \"product_card_size\": \"medium\",\n        \"mobile_product_card_size\": \"small\",\n        \"product_grid_width\": \"centered\",\n        \"full_width_on_mobile\": true,\n        \"columns_gap_horizontal\": 16,\n        \"columns_gap_vertical\": 24,\n        \"padding-inline-start\": 0,\n        \"padding-inline-end\": 0,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 0,\n        \"padding-block-end\": 32\n      }\n    }\n  },\n  \"order\": [\n    \"section\",\n    \"main\"\n  ]\n}\n"
  },
  {
    "path": "templates/gift_card.liquid",
    "content": "{% layout none %}\n\n<!doctype html>\n<html lang=\"{{ request.locale.iso_code }}\">\n  <head>\n    {%- render 'stylesheets' -%}\n    {{ 'template-giftcard.css' | asset_url | stylesheet_tag }}\n\n    <script type=\"importmap\">\n      {\n        \"imports\": {\n          \"@theme/component\": \"{{ 'component.js' | asset_url }}\",\n          \"@theme/utilities\": \"{{ 'utilities.js' | asset_url }}\",\n          \"@theme/qr-code-generator\": \"{{ 'qr-code-generator.js' | asset_url }}\"\n        }\n      }\n    </script>\n\n    <script\n      src=\"{{ 'qr-code-image.js' | asset_url }}\"\n      type=\"module\"\n      fetchpriority=\"low\"\n    ></script>\n    <script\n      src=\"{{ 'copy-to-clipboard.js' | asset_url }}\"\n      type=\"module\"\n      fetchpriority=\"low\"\n    ></script>\n    <meta charset=\"utf-8\">\n    <meta\n      http-equiv=\"X-UA-Compatible\"\n      content=\"IE=edge\"\n    >\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width,initial-scale=1\"\n    >\n    <meta\n      name=\"theme-color\"\n      content=\"{{ settings.color_schemes.scheme-1.settings.background }}\"\n    >\n    <link\n      rel=\"canonical\"\n      href=\"{{ canonical_url }}\"\n    >\n\n    {%- if settings.favicon != blank -%}\n      <link\n        rel=\"icon\"\n        type=\"image/png\"\n        href=\"{{ settings.favicon | image_url: width: 32, height: 32 }}\"\n      >\n    {%- endif -%}\n\n    {%- assign formatted_balance = gift_card.balance | money_without_trailing_zeros | strip_html -%}\n\n    <title>{{ 'gift_cards.issued.title' | t: value: formatted_balance, shop: shop.name }}</title>\n\n    <meta\n      name=\"description\"\n      content=\"{{ 'gift_cards.issued.subtext' | t }}\"\n    >\n\n    {{ content_for_header }}\n\n    {% # theme-check-disable AssetPreload %}\n    {%- unless settings.type_body_font.system? -%}\n      <link\n        rel=\"preload\"\n        as=\"font\"\n        href=\"{{ settings.type_body_font | font_url }}\"\n        type=\"font/woff2\"\n        crossorigin\n        fetchpriority=\"low\"\n      >\n    {%- endunless -%}\n    {%- unless settings.type_subheading_font.system? -%}\n      <link\n        rel=\"preload\"\n        as=\"font\"\n        href=\"{{ settings.type_subheading_font | font_url }}\"\n        type=\"font/woff2\"\n        crossorigin\n        fetchpriority=\"low\"\n      >\n    {%- endunless -%}\n    {%- unless settings.type_heading_font.system? -%}\n      <link\n        rel=\"preload\"\n        as=\"font\"\n        href=\"{{ settings.type_heading_font | font_url }}\"\n        type=\"font/woff2\"\n        crossorigin\n        fetchpriority=\"low\"\n      >\n    {%- endunless -%}\n    {%- unless settings.type_accent_font.system? -%}\n      <link\n        rel=\"preload\"\n        as=\"font\"\n        href=\"{{ settings.type_accent_font | font_url }}\"\n        type=\"font/woff2\"\n        crossorigin\n        fetchpriority=\"low\"\n      >\n    {%- endunless -%}\n    {% # theme-check-enable AssetPreload %}\n    {%- render 'theme-styles-variables' -%}\n    {%- render 'color-schemes' -%}\n  </head>\n\n  <body class=\"gift-card\">\n    <header>\n      <div class=\"gift-card__text-wrapper\">\n        <h1>{{ shop.name }}</h1>\n      </div>\n    </header>\n\n    <main class=\"gift-card__main\">\n      <div class=\"gift-card__image-wrapper\">\n        {%- if settings.logo != blank -%}\n          {%- assign logo_alt = settings.logo.alt | default: shop.name | escape -%}\n          {{ settings.logo | image_url: width: 324 | image_tag: class: 'gift-card__image', alt: logo_alt }}\n        {%- else %}\n          <img\n            class=\"gift-card__image gift-card__image-generic\"\n            src=\"{{ 'gift-card/card.svg' | shopify_asset_url }}\"\n            alt=\"\"\n            height=\"200\"\n            width=\"334\"\n            loading=\"eager\"\n          >\n        {%- endif %}\n      </div>\n      <div class=\"gift-card__price\">\n        <h2>\n          {{ gift_card.balance | money_with_currency }}\n        </h2>\n        {%- if gift_card.enabled == false or gift_card.expired -%}\n          <p class=\"gift-card__badge gift-card__badge--expired\">{{ 'gift_cards.issued.expired' | t }}</p>\n        {%- endif -%}\n      </div>\n      {% if gift_card.expires_on %}\n        {%- assign gift_card_expiration_date = gift_card.expires_on | date: '%B %e, %Y' -%}\n        <p class=\"gift-card__text-wrapper\">\n          {{ 'gift_cards.issued.expiration_date' | t: expires_on: gift_card_expiration_date }}\n        </p>\n      {% endif %}\n      <div class=\"gift-card__text-wrapper\">\n        <p>{{ 'gift_cards.issued.how_to_use_gift_card' | t }}</p>\n        <h3\n          class=\"gift-card__code\"\n        >\n          {{ gift_card.code | format_code }}\n        </h3>\n      </div>\n      <qr-code-image\n        class=\"gift-card__qr-code\"\n        data-identifier=\"{{ gift_card.qr_identifier }}\"\n        width=\"72\"\n        height=\"72\"\n        alt=\"{{ 'gift_cards.issued.qr_image_alt' | t }}\"\n      ></qr-code-image>\n      <div class=\"gift-card__buttons buttons-container\">\n        {%- if gift_card.pass_url -%}\n          <a\n            href=\"{{ gift_card.pass_url }}\"\n            class=\"gift-card__buttons-full-width\"\n          >\n            <img\n              src=\"{{ 'gift-card/add-to-apple-wallet.svg' | shopify_asset_url }}\"\n              width=\"120\"\n              height=\"40\"\n              alt=\"{{ 'gift_cards.issued.add_to_apple_wallet' | t }}\"\n              loading=\"lazy\"\n            >\n          </a>\n        {%- endif -%}\n        <copy-to-clipboard-component\n          class=\"gift-card__buttons-full-width gift-card__copy-button\"\n          text-to-copy=\"{{ gift_card.code }}\"\n        >\n          <span\n            class=\"form__message visually-hidden\"\n            ref=\"copySuccessMessage\"\n            role=\"status\"\n          >\n            <span class=\"svg-wrapper icon-success\">\n              {{ 'icon-checkmark.svg' | inline_asset_content }}\n            </span>\n            {{ 'gift_cards.issued.copy_code_success' | t }}\n          </span>\n          <button\n            class=\"button gift-card__buttons-full-width\"\n            on:click=\"/copyToClipboard\"\n          >\n            {{ 'gift_cards.issued.copy_code' | t }}\n          </button>\n        </copy-to-clipboard-component>\n        <a\n          href=\"{{ shop.url }}\"\n          class=\"gift-card__buttons-full-width button button-secondary\"\n          target=\"_blank\"\n          rel=\"noopener\"\n          aria-describedby=\"a11y-new-window-message\"\n        >\n          {{ 'gift_cards.issued.shop_link' | t }}\n        </a>\n      </div>\n    </main>\n\n    <div hidden>\n      <span id=\"a11y-new-window-message\">{{ 'accessibility.new_window' | t }}</span>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "templates/index.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"hero_jVaWmY\": {\n      \"type\": \"hero\",\n      \"blocks\": {\n        \"text_YLPk4p\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.heading\",\n          \"settings\": {\n            \"text\": \"<p>Browse our latest products</p>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-body--family)\",\n            \"font_size\": \"1rem\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"var(--color-foreground-heading)\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"button_H9gpTf\": {\n          \"type\": \"button\",\n          \"name\": \"t:names.button\",\n          \"settings\": {\n            \"label\": \"Shop all\",\n            \"link\": \"shopify://collections/all\",\n            \"open_in_new_tab\": false,\n            \"style_class\": \"button-secondary\",\n            \"width\": \"fit-content\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fit-content\",\n            \"custom_width_mobile\": 100\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\n        \"text_YLPk4p\",\n        \"button_H9gpTf\"\n      ],\n      \"name\": \"t:names.hero\",\n      \"settings\": {\n        \"media_type_1\": \"image\",\n        \"media_type_2\": \"image\",\n        \"link\": \"\",\n        \"open_in_new_tab\": false,\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"space-between\",\n        \"vertical_alignment\": \"flex-end\",\n        \"align_baseline\": true,\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"flex-end\",\n        \"gap\": 24,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"medium\",\n        \"section_height_custom\": 50,\n        \"color_scheme\": \"scheme-6\",\n        \"toggle_overlay\": true,\n        \"overlay_color\": \"#12121266\",\n        \"overlay_style\": \"solid\",\n        \"gradient_direction\": \"to bottom\",\n        \"blurred_reflection\": false,\n        \"reflection_opacity\": 75,\n        \"padding-block-start\": 100,\n        \"padding-block-end\": 72\n      }\n    },\n    \"product_list_fa6P9H\": {\n      \"type\": \"product-list\",\n      \"blocks\": {\n        \"static-header\": {\n          \"type\": \"_product-list-content\",\n          \"name\": \"t:names.header\",\n          \"static\": true,\n          \"settings\": {\n            \"content_direction\": \"row\",\n            \"vertical_on_mobile\": false,\n            \"horizontal_alignment\": \"space-between\",\n            \"vertical_alignment\": \"flex-end\",\n            \"align_baseline\": true,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_list_text_YFtzcL\": {\n              \"type\": \"_product-list-text\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"text\": \"<h3>{{ closest.collection.title }}</h3>\",\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h4\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_list_button_MWeP9V\": {\n              \"type\": \"_product-list-button\",\n              \"name\": \"t:names.product_list_button\",\n              \"settings\": {\n                \"label\": \"View all\",\n                \"open_in_new_tab\": false,\n                \"style_class\": \"link\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_list_text_YFtzcL\",\n            \"product_list_button_MWeP9V\"\n          ]\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_card_gallery_677WP3\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_YXxMTj\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_JQzVV4\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_card_gallery_677WP3\",\n            \"product_title_YXxMTj\",\n            \"price_JQzVV4\"\n          ]\n        }\n      },\n      \"name\": \"t:names.featured_collection\",\n      \"settings\": {\n        \"collection\": \"all\",\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 8,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"mobile_card_size\": \"60cqw\",\n        \"columns_gap\": 8,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"horizontal_alignment\": \"flex-start\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"hero_jVaWmY\",\n    \"product_list_fa6P9H\"\n  ]\n}\n"
  },
  {
    "path": "templates/list-collections.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"collection_list_Wfgh3m\": {\n      \"type\": \"main-collection-list\",\n      \"blocks\": {\n        \"group_4FtiAg\": {\n          \"type\": \"group\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"link\": \"\",\n            \"open_in_new_tab\": false,\n            \"content_direction\": \"column\",\n            \"vertical_on_mobile\": true,\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"center\",\n            \"align_baseline\": false,\n            \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n            \"vertical_alignment_flex_direction_column\": \"center\",\n            \"gap\": 12,\n            \"width\": \"fit-content\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fit-content\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"custom_height\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"toggle_overlay\": false,\n            \"overlay_color\": \"#00000026\",\n            \"overlay_style\": \"solid\",\n            \"gradient_direction\": \"to top\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 48,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"text_fRMQMR\": {\n              \"type\": \"text\",\n              \"name\": \"t:names.text\",\n              \"settings\": {\n                \"text\": \"<h1>Shop by collection</h1>\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"h2\",\n                \"font\": \"var(--font-primary--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 16,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"text_fRMQMR\"\n          ]\n        },\n        \"static-collection-card\": {\n          \"type\": \"_collection-card\",\n          \"name\": \"t:names.collection_card\",\n          \"static\": true,\n          \"settings\": {\n            \"placement\": \"below_image\",\n            \"horizontal_alignment\": \"flex-start\",\n            \"vertical_alignment\": \"flex-start\",\n            \"collection_card_gap\": 8,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0\n          },\n          \"blocks\": {\n            \"collection_title_7YgBPU\": {\n              \"type\": \"collection-title\",\n              \"name\": \"t:names.collection_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"collection-card-image\": {\n              \"type\": \"_collection-card-image\",\n              \"name\": \"t:names.collection_card_image\",\n              \"static\": true,\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"toggle_overlay\": false,\n                \"overlay_color\": \"#00000026\",\n                \"overlay_style\": \"solid\",\n                \"gradient_direction\": \"to top\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"collection_title_7YgBPU\"\n          ]\n        }\n      },\n      \"block_order\": [\n        \"group_4FtiAg\"\n      ],\n      \"name\": \"t:names.collection_list\",\n      \"settings\": {\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"columns\": 3,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 12,\n        \"bento_gap\": 8,\n        \"rows_gap\": 24,\n        \"max_collections\": 4,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 12,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"collection_list_Wfgh3m\"\n  ]\n}\n"
  },
  {
    "path": "templates/page.contact.json",
    "content": "{\n  \"sections\": {\n    \"main\": {\n      \"type\": \"main-page\",\n      \"blocks\": {\n        \"title\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.title\",\n          \"settings\": {\n            \"text\": \"<h1>{{ closest.page.title }}</h1>\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"center\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"content\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.content\",\n          \"settings\": {\n            \"text\": \"{{ closest.page.content }}\",\n            \"width\": \"100%\",\n            \"max_width\": \"narrow\",\n            \"alignment\": \"center\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\"title\", \"content\"],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"gap\": 32,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 0\n      }\n    },\n    \"form\": {\n      \"type\": \"section\",\n      \"blocks\": {\n        \"contact_form_UwiCkQ\": {\n          \"type\": \"contact-form\",\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 50,\n            \"width_mobile\": \"custom\",\n            \"custom_width_mobile\": 100,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"submit-button\": {\n              \"type\": \"contact-form-submit-button\",\n              \"static\": true,\n              \"settings\": {\n                \"label\": \"Submit\",\n                \"style_class\": \"button\",\n                \"width\": \"fit-content\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fit-content\",\n                \"custom_width_mobile\": 100\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": []\n        }\n      },\n      \"block_order\": [\"contact_form_UwiCkQ\"],\n      \"name\": \"t:names.contact_form\",\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"flex-start\",\n        \"vertical_alignment\": \"center\",\n        \"align_baseline\": false,\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 32,\n        \"section_width\": \"page-width\",\n        \"section_height\": \"\",\n        \"section_height_custom\": 50,\n        \"color_scheme\": \"scheme-1\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"toggle_overlay\": false,\n        \"overlay_color\": \"#00000026\",\n        \"overlay_style\": \"solid\",\n        \"gradient_direction\": \"to top\",\n        \"padding-block-start\": 32,\n        \"padding-block-end\": 84\n      }\n    }\n  },\n  \"order\": [\"main\", \"form\"]\n}\n"
  },
  {
    "path": "templates/page.json",
    "content": "{\n  \"sections\": {\n    \"main\": {\n      \"type\": \"main-page\",\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"text\",\n          \"name\": \"Title\",\n          \"settings\": {\n            \"text\": \"<h1>{{ closest.page.title }}</h1>\",\n            \"width\": \"100%\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"page-content\": {\n          \"type\": \"page-content\",\n          \"settings\": {},\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\"heading\", \"page-content\"],\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"gap\": 32,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 80\n      }\n    }\n  },\n  \"order\": [\"main\"]\n}\n"
  },
  {
    "path": "templates/password.json",
    "content": "{\n  \"layout\": \"password\",\n  \"sections\": {\n    \"main\": {\n      \"type\": \"password\",\n      \"blocks\": {\n        \"logo\": {\n          \"type\": \"logo\",\n          \"name\": \"Logo\",\n          \"settings\": {\n            \"inverse\": false,\n            \"font\": \"heading\",\n            \"unit\": \"pixel\",\n            \"percent_width\": 100,\n            \"pixel_height\": 24,\n            \"custom_mobile_size\": false,\n            \"unit_mobile\": \"percent\",\n            \"percent_width_mobile\": 80,\n            \"pixel_height_mobile\": 120,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 32,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"text\": {\n          \"type\": \"text\",\n          \"name\": \"Text\",\n          \"settings\": {\n            \"text\": \"<h1>Opening soon</h1>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h3\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"text-2\": {\n          \"type\": \"text\",\n          \"name\": \"Text\",\n          \"settings\": {\n            \"text\": \"<p>Sign up for our newsletter to be the first to know when we launch.</p>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"rte\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 32,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"email-signup\": {\n          \"type\": \"email-signup\",\n          \"name\": \"Email Signup\",\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 50,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border_style\": \"all\",\n            \"border_width\": 1,\n            \"border_radius\": 14,\n            \"input_type_preset\": \"paragraph\",\n            \"style_class\": \"button\",\n            \"display_type\": \"text\",\n            \"label\": \"Sign up\",\n            \"integrated_button\": false,\n            \"button_type_preset\": \"paragraph\",\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        }\n      },\n      \"block_order\": [\"logo\", \"text\", \"text-2\", \"email-signup\"],\n      \"name\": \"Password\",\n      \"settings\": {\n        \"content_direction\": \"column\",\n        \"vertical_on_mobile\": true,\n        \"horizontal_alignment\": \"center\",\n        \"vertical_alignment\": \"center\",\n        \"align_baseline\": false,\n        \"horizontal_alignment_flex_direction_column\": \"center\",\n        \"vertical_alignment_flex_direction_column\": \"center\",\n        \"gap\": 12,\n        \"section_width\": \"page-width\",\n        \"color_scheme\": \"\",\n        \"background_media\": \"none\",\n        \"video_position\": \"cover\",\n        \"background_image_position\": \"cover\",\n        \"border\": \"none\",\n        \"border_width\": 1,\n        \"border_opacity\": 100,\n        \"border_radius\": 0,\n        \"padding-block-start\": 100,\n        \"padding-block-end\": 100\n      }\n    }\n  },\n  \"order\": [\"main\"]\n}\n"
  },
  {
    "path": "templates/product.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"main\": {\n      \"type\": \"product-information\",\n      \"blocks\": {\n        \"media-gallery\": {\n          \"type\": \"_product-media-gallery\",\n          \"static\": true,\n          \"settings\": {\n            \"media_presentation\": \"grid\",\n            \"media_columns\": \"two\",\n            \"image_gap\": 4,\n            \"large_first_image\": false,\n            \"icons_style\": \"arrow\",\n            \"slideshow_controls_style\": \"counter\",\n            \"slideshow_mobile_controls_style\": \"dots\",\n            \"thumbnail_position\": \"right\",\n            \"thumbnail_width\": 44,\n            \"aspect_ratio\": \"adapt\",\n            \"constrain_to_viewport\": true,\n            \"media_fit\": \"contain\",\n            \"media_radius\": 0,\n            \"extend_media\": false,\n            \"zoom\": true,\n            \"video_loop\": false,\n            \"hide_variants\": true,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"product-details\": {\n          \"type\": \"_product-details\",\n          \"static\": true,\n          \"settings\": {\n            \"width\": \"fill\",\n            \"custom_width\": 100,\n            \"width_mobile\": \"fill\",\n            \"custom_width_mobile\": 100,\n            \"height\": \"fit\",\n            \"details_position\": \"flex-start\",\n            \"gap\": 28,\n            \"sticky_details_desktop\": true,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"scheme-1\",\n            \"background_media\": \"none\",\n            \"video_position\": \"cover\",\n            \"background_image_position\": \"cover\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 24,\n            \"padding-block-end\": 24,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"group_icgrde\": {\n              \"type\": \"group\",\n              \"name\": \"Header\",\n              \"settings\": {\n                \"link\": \"\",\n                \"open_in_new_tab\": false,\n                \"content_direction\": \"column\",\n                \"vertical_on_mobile\": true,\n                \"horizontal_alignment\": \"flex-start\",\n                \"vertical_alignment\": \"center\",\n                \"align_baseline\": false,\n                \"horizontal_alignment_flex_direction_column\": \"flex-start\",\n                \"vertical_alignment_flex_direction_column\": \"center\",\n                \"gap\": 12,\n                \"width\": \"fill\",\n                \"custom_width\": 100,\n                \"width_mobile\": \"fill\",\n                \"custom_width_mobile\": 100,\n                \"height\": \"fit\",\n                \"custom_height\": 100,\n                \"inherit_color_scheme\": true,\n                \"color_scheme\": \"\",\n                \"background_media\": \"none\",\n                \"video_position\": \"cover\",\n                \"background_image_position\": \"cover\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"placeholder\": \"\",\n                \"toggle_overlay\": false,\n                \"overlay_color\": \"#00000026\",\n                \"overlay_style\": \"solid\",\n                \"gradient_direction\": \"to top\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {\n                \"text_xpVMaM\": {\n                  \"type\": \"text\",\n                  \"name\": \"t:names.title\",\n                  \"settings\": {\n                    \"text\": \"<h1>{{ closest.product.title }}</h1>\",\n                    \"width\": \"fit-content\",\n                    \"max_width\": \"normal\",\n                    \"alignment\": \"left\",\n                    \"type_preset\": \"h3\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"1rem\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"wrap\": \"pretty\",\n                    \"color\": \"var(--color-foreground)\",\n                    \"background\": false,\n                    \"background_color\": \"#00000026\",\n                    \"corner_radius\": 0,\n                    \"padding-block-start\": 0,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  },\n                  \"blocks\": {}\n                },\n                \"price_tVjtKg\": {\n                  \"type\": \"price\",\n                  \"settings\": {\n                    \"show_sale_price_first\": true,\n                    \"show_installments\": false,\n                    \"show_tax_info\": false,\n                    \"type_preset\": \"paragraph\",\n                    \"width\": \"100%\",\n                    \"alignment\": \"left\",\n                    \"font\": \"var(--font-body--family)\",\n                    \"font_size\": \"1rem\",\n                    \"line_height\": \"normal\",\n                    \"letter_spacing\": \"normal\",\n                    \"case\": \"none\",\n                    \"color\": \"var(--color-foreground)\",\n                    \"padding-block-start\": 4,\n                    \"padding-block-end\": 0,\n                    \"padding-inline-start\": 0,\n                    \"padding-inline-end\": 0\n                  },\n                  \"blocks\": {}\n                }\n              },\n              \"block_order\": [\n                \"text_xpVMaM\",\n                \"price_tVjtKg\"\n              ]\n            },\n            \"divider_VJhene\": {\n              \"type\": \"_divider\",\n              \"name\": \"t:names.divider\",\n              \"settings\": {\n                \"thickness\": 1,\n                \"corner_radius\": \"square\",\n                \"width_percent\": 100,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"variant_picker_R3rGDr\": {\n              \"type\": \"variant-picker\",\n              \"settings\": {\n                \"variant_style\": \"buttons\",\n                \"show_swatches\": false,\n                \"alignment\": \"left\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"buy_buttons_eYQEYi\": {\n              \"type\": \"buy-buttons\",\n              \"settings\": {\n                \"stacking\": true,\n                \"show_pickup_availability\": false,\n                \"gift_card_form\": true,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {\n                \"quantity\": {\n                  \"type\": \"quantity\",\n                  \"static\": true,\n                  \"settings\": {},\n                  \"blocks\": {}\n                },\n                \"add-to-cart\": {\n                  \"type\": \"add-to-cart\",\n                  \"static\": true,\n                  \"settings\": {\n                    \"style_class\": \"button\"\n                  },\n                  \"blocks\": {}\n                },\n                \"accelerated-checkout\": {\n                  \"type\": \"accelerated-checkout\",\n                  \"static\": true,\n                  \"settings\": {},\n                  \"blocks\": {}\n                }\n              },\n              \"block_order\": []\n            },\n            \"text_aEtTtq\": {\n              \"type\": \"text\",\n              \"name\": \"Product description\",\n              \"settings\": {\n                \"text\": \"{{ closest.product.description }}\",\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-primary--family)\",\n                \"font_size\": \"\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"group_icgrde\",\n            \"divider_VJhene\",\n            \"variant_picker_R3rGDr\",\n            \"buy_buttons_eYQEYi\",\n            \"text_aEtTtq\"\n          ]\n        }\n      },\n      \"settings\": {\n        \"content_width\": \"content-center-aligned\",\n        \"desktop_media_position\": \"left\",\n        \"equal_columns\": false,\n        \"limit_details_width\": false,\n        \"gap\": 48,\n        \"color_scheme\": \"\",\n        \"padding-block-start\": 0,\n        \"padding-block-end\": 0\n      }\n    },\n    \"product_recommendations_qggXJq\": {\n      \"type\": \"product-recommendations\",\n      \"blocks\": {\n        \"text_cbcgyb\": {\n          \"type\": \"text\",\n          \"name\": \"t:names.header\",\n          \"settings\": {\n            \"text\": \"<h3>You may also like </h3>\",\n            \"width\": \"fit-content\",\n            \"max_width\": \"normal\",\n            \"alignment\": \"left\",\n            \"type_preset\": \"h4\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"background\": false,\n            \"background_color\": \"#00000026\",\n            \"corner_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"static-product-card\": {\n          \"type\": \"_product-card\",\n          \"name\": \"t:names.product_card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 8,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 8,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_card_gallery_DNizbJ\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_M7MJkb\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"100%\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_gLWgA6\": {\n              \"type\": \"price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_card_gallery_DNizbJ\",\n            \"product_title_M7MJkb\",\n            \"price_gLWgA6\"\n          ]\n        }\n      },\n      \"block_order\": [\n        \"text_cbcgyb\"\n      ],\n      \"name\": \"t:names.product_recommendations\",\n      \"settings\": {\n        \"product\": \"{{ closest.product }}\",\n        \"recommendation_type\": \"related\",\n        \"layout_type\": \"grid\",\n        \"carousel_on_mobile\": false,\n        \"max_products\": 4,\n        \"columns\": 4,\n        \"mobile_columns\": \"2\",\n        \"columns_gap\": 12,\n        \"rows_gap\": 24,\n        \"icons_style\": \"arrow\",\n        \"icons_shape\": \"none\",\n        \"section_width\": \"page-width\",\n        \"gap\": 28,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 48,\n        \"padding-block-end\": 48\n      }\n    }\n  },\n  \"order\": [\n    \"main\",\n    \"product_recommendations_qggXJq\"\n  ]\n}\n"
  },
  {
    "path": "templates/search.json",
    "content": "/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n */\n {\n  \"sections\": {\n    \"search\": {\n      \"type\": \"search-header\",\n      \"blocks\": {\n        \"heading\": {\n          \"type\": \"_heading\",\n          \"static\": true,\n          \"settings\": {\n            \"type_preset\": \"h2\",\n            \"font\": \"var(--font-primary--family)\",\n            \"font_size\": \"\",\n            \"line_height\": \"normal\",\n            \"letter_spacing\": \"normal\",\n            \"case\": \"none\",\n            \"wrap\": \"pretty\",\n            \"color\": \"\",\n            \"text\": \"\",\n            \"read_only\": true,\n            \"alignment\": \"left\",\n            \"show_alignment\": true,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {}\n        },\n        \"search\": {\n          \"type\": \"_search-input\",\n          \"static\": true,\n          \"settings\": {\n            \"width\": \"custom\",\n            \"custom_width\": 50,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\"\n          },\n          \"blocks\": {}\n        }\n      },\n      \"settings\": {\n        \"alignment\": \"flex-start\",\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 0\n      }\n    },\n    \"main\": {\n      \"type\": \"search-results\",\n      \"blocks\": {\n        \"filters\": {\n          \"type\": \"filters\",\n          \"static\": true,\n          \"settings\": {\n            \"enable_filtering\": true,\n            \"filter_style\": \"horizontal\",\n            \"filter_width\": \"centered\",\n            \"text_label_case\": \"default\",\n            \"show_swatch_label\": false,\n            \"show_filter_label\": false,\n            \"enable_sorting\": true,\n            \"enable_grid_density\": true,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"padding-block-start\": 8,\n            \"padding-block-end\": 8,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0,\n            \"facets_margin_bottom\": 8,\n            \"facets_margin_right\": 20\n          },\n          \"blocks\": {}\n        },\n        \"product-card\": {\n          \"type\": \"_product-card\",\n          \"static\": true,\n          \"settings\": {\n            \"product_card_gap\": 4,\n            \"inherit_color_scheme\": true,\n            \"color_scheme\": \"\",\n            \"border\": \"none\",\n            \"border_width\": 1,\n            \"border_opacity\": 100,\n            \"border_radius\": 0,\n            \"padding-block-start\": 0,\n            \"padding-block-end\": 0,\n            \"padding-inline-start\": 0,\n            \"padding-inline-end\": 0\n          },\n          \"blocks\": {\n            \"product_card_gallery_cFExAi\": {\n              \"type\": \"_product-card-gallery\",\n              \"name\": \"t:names.product_card_media\",\n              \"settings\": {\n                \"image_ratio\": \"adapt\",\n                \"border\": \"none\",\n                \"border_width\": 1,\n                \"border_opacity\": 100,\n                \"border_radius\": 0,\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"product_title_j7qXTx\": {\n              \"type\": \"product-title\",\n              \"name\": \"t:names.product_title\",\n              \"settings\": {\n                \"width\": \"fit-content\",\n                \"max_width\": \"normal\",\n                \"alignment\": \"left\",\n                \"type_preset\": \"rte\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"wrap\": \"pretty\",\n                \"color\": \"var(--color-foreground)\",\n                \"background\": false,\n                \"background_color\": \"#00000026\",\n                \"corner_radius\": 0,\n                \"padding-block-start\": 4,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            },\n            \"price_fYkUgG\": {\n              \"type\": \"price\",\n              \"name\": \"t:names.product_price\",\n              \"settings\": {\n                \"show_sale_price_first\": true,\n                \"show_installments\": false,\n                \"show_tax_info\": false,\n                \"type_preset\": \"h6\",\n                \"width\": \"100%\",\n                \"alignment\": \"left\",\n                \"font\": \"var(--font-body--family)\",\n                \"font_size\": \"1rem\",\n                \"line_height\": \"normal\",\n                \"letter_spacing\": \"normal\",\n                \"case\": \"none\",\n                \"color\": \"var(--color-foreground)\",\n                \"padding-block-start\": 0,\n                \"padding-block-end\": 0,\n                \"padding-inline-start\": 0,\n                \"padding-inline-end\": 0\n              },\n              \"blocks\": {}\n            }\n          },\n          \"block_order\": [\n            \"product_card_gallery_cFExAi\",\n            \"product_title_j7qXTx\",\n            \"price_fYkUgG\"\n          ]\n        }\n      },\n      \"settings\": {\n        \"layout_type\": \"grid\",\n        \"product_card_size\": \"medium\",\n        \"mobile_product_card_size\": \"small\",\n        \"product_grid_width\": \"centered\",\n        \"full_width_on_mobile\": true,\n        \"columns_gap_horizontal\": 16,\n        \"columns_gap_vertical\": 24,\n        \"padding-inline-start\": 0,\n        \"padding-inline-end\": 0,\n        \"color_scheme\": \"scheme-1\",\n        \"padding-block-start\": 40,\n        \"padding-block-end\": 40\n      }\n    }\n  },\n  \"order\": [\n    \"search\",\n    \"main\"\n  ]\n}\n"
  }
]