/** Shopify CDN: Minification failed

Line 238:23 Unexpected "="
Line 242:4 Unexpected "constructor("
Line 243:8 Expected identifier but found "super("
Line 246:4 Unexpected "connectedCallback("
Line 248:22 Unexpected "="
Line 249:12 Expected identifier but found "."
Line 252:17 Unexpected "="
Line 257:12 Expected ":"
Line 258:12 Unexpected "("
Line 259:16 Expected ":"
... and 112 more hidden warnings

**/
/*********************/
/* GTC General */
/*********************/
gtc-trigger{
  cursor: pointer;
}

.gtc\:scroll-lock {
  overflow: hidden;
}

.gtc\:close-button {
  inline-size: 3rem;
  font-size: 3rem;
  aspect-ratio: 1;
  border-radius: 50%;
  display: grid;
  place-content: center;
  padding: 0;
  margin-left: auto;
  cursor: pointer;
}

.gtc\:close-button > * {
  grid-area: 1/1;
  width: 0.5em;
  height: 0.5em;
}

[data-gtc-close] > * {
  pointer-events: none;
}

/*********************/
/* GTC Drawer */
/*********************/

.gtc\:drawer {
  --gtc-drawer-background: rgb( 255, 255, 255);
  --gtc-drawer-border-color: rgb( 204, 204, 204);
  --gtc-drawer-text-primary: rgb( 0, 0, 0);
  --gtc-drawer-spacing: 1rem;

  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  display: flex;
  flex-direction: column;
  width: calc(100vw - var(--gtc-drawer-spacing));
  max-width: 540px;
  background: var(--gtc-drawer-background);

  transform: translateX(100%);
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.22, 1);

  pointer-events: none;
  z-index: 90000;
}

@media screen and (min-width: 700px) {
  .gtc\:drawer {
    --gtc-drawer-spacing: 2rem;
  }
}

.gtc\:drawer.open {
  pointer-events: all;
  transform: translateX(0);
}

.gtc\:drawer__header {
  position: sticky;
  top: 0;
  display: flex;
  gap: 1rem;
  justify-content: space-between;
  align-items: center;
  padding: calc(var(--gtc-drawer-spacing) / 2) var(--gtc-drawer-spacing);
  width: 100%;
  border-bottom: 1px solid var(--gtc-drawer-border-color);

  z-index: 2;
}

.gtc\:drawer__title {
  margin: 0;
}

.gtc\:drawer__body {
  height: 100%;
  padding: var(--gtc-drawer-spacing);
  overflow: auto;
}

.gtc\:drawer__footer {
  padding: 0 var(--gtc-drawer-spacing) var(--gtc-drawer-spacing);
}

/*********************/
/* GTC modal */
/*********************/

.gtc\:modal {
  /* variables */
  --gtc-modal-background: rgb(255, 255, 255);
  --gtc-modal-border-color: rgb(204, 204, 204);
  --gtc-modal-text-primary: rgb(0, 0, 0);
  --gtc-modal-spacing: 1rem;

  display: flex;
  flex-direction: column;
  position: fixed;
  top: 50%;
  left: 50%;
  max-width: 900px;
  width: calc(100% - 4rem);
  max-height: 600px;
  padding: 0;
  overflow: hidden;
  background: var(--gtc-modal-background);
  transform: translateY(5rem) translate(-50%, -50%);
  z-index: 90000;
  border: 1px solid var(--gtc-modal-border-color);
  border-radius: 0;

  box-shadow: 1px 7px 22px 0px rgba(0, 0, 0, 0.75);
  -webkit-box-shadow: 1px 7px 22px 0px rgba(0, 0, 0, 0.75);
  -moz-box-shadow: 1px 7px 22px 0px rgba(0, 0, 0, 0.75);

  opacity: 0;
  visibility: hidden;

  transition: visibility 0.3s cubic-bezier(0.4, 0, 0.22, 1),
    opacity 0.3s cubic-bezier(0.4, 0, 0.22, 1),
    transform 0.3s cubic-bezier(0.4, 0, 0.22, 1);
}

@media screen and (min-width: 700px) {
  .gtc\:modal {
    --gtc-modal-spacing: 2rem;
  }
}

.gtc\:modal.open {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, -50%);
}

.gtc\:modal__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: calc(var(--gtc-modal-spacing) / 2) var(--gtc-modal-spacing);

  border-bottom: 1px solid var(--gtc-modal-border-color);
}

.gtc\:modal__header > * {
  margin-bottom: 0;
}

.gtc\:modal hr {
  width: 100%;
}

.gtc\:modal__container {
  overflow: auto;
  gap: 1rem;
  padding: var(--gtc-modal-spacing);
}

[data-gtc-modal] .text-full {
  display: none;
}

.gtc\:modal .text-full {
  display: block;
}

.gtc\:modal .text-truncated {
  display: none;
}

/*********************/
/* GTC overlay */
/*********************/

.gtc\:overlay {
  display: block;
  position: fixed;
  min-height: 100lvh;
  backdrop-filter: blur(5px);
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;

  z-index: 30;

  opacity: 0;
  visibility: hidden;

  transition: visibility 0.6s cubic-bezier(0.4, 0, 0.22, 1),
    opacity 0.6s cubic-bezier(0.4, 0, 0.22, 1);
  pointer-events: none;
}

body.gtc\:overlay-open .gtc\:overlay {
  opacity: 1;
  visibility: visible;
  pointer-events: all;

  transition: visibility 0.3s cubic-bezier(0.4, 0, 0.22, 1),
    opacity 0.3s cubic-bezier(0.4, 0, 0.22, 1);
}

/*********************/
/* GTC Cart Terms */
/*********************/

let termsModalRendered = false

class GTCTerms extends HTMLElement {

    constructor() {
        super();
    }

    connectedCallback() {

        this.settings = {
            ...JSON.parse(this.getAttribute('settings'))
        };

        this.dom = {
            main: this,
            checkBox: this.querySelector('#GtcTermsCheck')
        }

        this.cartParent = null;
        for (let selector of this.settings.parentSelectors) {
            this.cartParent = this.dom.main.closest(selector);
            if (this.cartParent) {
                break;
            }
        }

        this.cartForm = this.cartParent.querySelector('form[action="/cart"]');

        this.cartSubmit = this.cartParent.querySelector(this.settings.submitSelector);

        this.cartSubmitDefaultClasses = this.cartSubmit.classList.value;

        this.Init();
        this.AddListeners();
    }

    disconnectedCallback() {
        this.RemoveListeners();
    }

    Init() {
        this.Binding();
        this.AddListeners();
    }

    Binding() {
        this.Click = this.Click.bind(this)
    }

    AddListeners() {
        this.addEventListener('click', this.Click);
        this.cartForm.addEventListener('submit', (e) => {
            this.Validate(e);
        })

        document.addEventListener('terms:accepted', () => {
            this.AcceptAndSubmit();
        })

        document.addEventListener('terms:modal:close', () => {
            this.cartSubmit.setAttribute('aria-busy', false);
        })
    }

    RemoveListeners() {
        this.removeEventListener('click', this.Click);
        this.cartForm.removeEventListener('submit', (e) => {
            this.Validate(e);
        })

        document.removeEventListener('terms:accepted', () => {
            this.AcceptAndSubmit();
        })

        document.removeEventListener('terms:modal:close', () => {
            this.cartSubmit.setAttribute('aria-busy', false);
        })
    }

    AcceptAndSubmit() {
        this.dom.checkBox.checked = true;
        this.cartSubmit.click();
    }

    Validate(e) {
        if (!this.dom.checkBox.checked) {
            e.preventDefault();
            setTimeout(() => {
                this.cartSubmit.classList.value = this.cartSubmitDefaultClasses;
            }, 0);

            if (this.cartParent.querySelector('gtc-terms-modal')) {
                this.ModalOpen({ expandOnLoad: false });
            }
            else {
                this.CreateModal({ expandOnLoad: false });
            }
        }
    }

    CreateModal({ expandOnLoad }) { 
        const termsModalTemplate = document.querySelector('#TermsModal');
        this.termsModal = termsModalTemplate.content.cloneNode(true);
        this.cartParent.appendChild(this.termsModal);

        this.ModalOpen({ expandOnLoad });
        termsModalRendered = true;
    }

    ModalOpen({ expandOnLoad }) {
        document.dispatchEvent(new CustomEvent('terms:modal:open', {
            detail: {
                expandOnLoad: expandOnLoad
            }
        }))
    }

    Click(event) {
        if (event.target.getAttribute('href') == this.settings.url) {
            event.preventDefault();
            setTimeout(() => {
                if (this.cartParent.querySelector('gtc-terms-modal')) {
                    this.ModalOpen({ expandOnLoad: true });
                }
                else {
                    this.CreateModal({ expandOnLoad: true });
                }
            }, 0);
        }
    }
}
customElements.define('gtc-terms', GTCTerms)

class GTCTermsModal extends HTMLElement {
    static get observedAttributes() { return ['open', 'expanded']; }
    constructor() {
        super();
    }

    connectedCallback() {

        this.settings = {
            ...JSON.parse(this.getAttribute('settings')),
            expandedTextLoaded: false
        };

        this.dom = {
            main: this,
            expandedContent: this.querySelector('[data-expanded-content]'),
            termsSection: this.querySelector('[data-terms-content-terms]'),
        }

        // Forces repaint, so it animates nicely
        void this.offsetHeight;

        this.Binding();
        this.AddListeners();

        // This eventlistener should not be removed
        document.addEventListener('terms:modal:open', this.Open);
    }

    disconnectedCallback() {
        this.RemoveListeners();
        termsModalRendered = false;
    }

    Binding() {
        this.Keydown = this.Keydown.bind(this);
        this.Open = this.Open.bind(this)
        this.Click = this.Click.bind(this)
    }

    AddListeners() {
        document.addEventListener('click', this.Click);
        document.addEventListener("keydown", this.Keydown);
    }

    RemoveListeners() {
        document.removeEventListener('click', this.Click);
        document.removeEventListener("keydown", this.Keydown);
    }

    Click(event) {
        if (event.target.getAttribute('terms') == 'accept') {
            document.dispatchEvent(new CustomEvent('terms:accepted'));
            this.Close();
        } else if (event.target.getAttribute('terms') == 'decline' || !this.dom.main.contains(event.target)) {
            this.Close();
        } else if (event.target.getAttribute('data-button') === "close") {
            this.Close();
        } else if (event.target.getAttribute('href') == this.settings.url) {
            this.ExpandText(event);
        } else if (event.target.getAttribute('data-button') === "expanded-close") {
            this.CloseText();
        }
    }

    OpenText() {
        this.setAttribute('expanded', true);
        this.dom.termsSection.setAttribute('aria-expanded', true);
    }

    CloseText() {
        this.setAttribute('expanded', false);
        this.dom.termsSection.setAttribute('aria-expanded', false);
    }

    Open(event) {
        document.body.classList.add('gtc:scroll-lock');
        this.setAttribute('open', '');
        this.AddListeners();

        if (event.detail.expandOnLoad === true) {
            this.ExpandText(event);
        }
    }

    Close() {
        document.body.classList.remove('gtc:scroll-lock');
        this.removeAttribute('open', '');
        this.setAttribute('aria-busy', false);
        this.RemoveListeners();
        this.CloseText();
        document.dispatchEvent(new CustomEvent('terms:modal:close'));
    }

    Keydown(event) {
        // If Esc key
        if (event.keyCode !== 27) return;
        this.Close();
    }


    ExpandText(event) {
        event.preventDefault();
        if (this.settings.expandedTextLoaded) {
            this.OpenText();
        } else {
            this.FetchFullTermsText();
        }
    }


    async FetchFullTermsText() {
        const pageContent = await getPageContentHtml(this.settings.url);

        this.dom.expandedContent.insertAdjacentHTML('afterbegin', pageContent);
        this.settings.expandedTextLoaded = true;
        this.OpenText();
    }
}
customElements.define('gtc-terms-modal', GTCTermsModal)