{"id":8512,"date":"2025-10-23T03:39:31","date_gmt":"2025-10-23T03:39:31","guid":{"rendered":"https:\/\/yumastudiopilates.com\/checkout\/"},"modified":"2025-10-27T14:59:51","modified_gmt":"2025-10-27T14:59:51","slug":"checkout","status":"publish","type":"page","link":"https:\/\/yumastudiopilates.com\/en\/checkout\/","title":{"rendered":"Checkout"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"8512\" class=\"elementor elementor-8512\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d130596 e-con-full e-flex e-con e-parent\" data-id=\"d130596\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c2c335e e-con-full e-flex e-con e-child\" data-id=\"c2c335e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2367832 reveal-left  elementor-widget elementor-widget-heading\" data-id=\"2367832\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">V\u00e9rifier<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a1906d elementor-widget elementor-widget-html\" data-id=\"7a1906d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n\/* Reveal from right *\/\r\n.reveal-right {\r\n  animation: revealRight 1.5s ease-out forwards;\r\n  clip-path: inset(0 0 0 100%);\r\n}\r\n\r\n@keyframes revealRight {\r\n  0% {\r\n    clip-path: inset(0 0 0 100%);\r\n  }\r\n  100% {\r\n    clip-path: inset(0 0 0 0);\r\n  }\r\n}\r\n\r\n\/* Add this to prevent animation from running initially *\/\r\n.reveal-right.paused {\r\n  animation-play-state: paused;\r\n}\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n  \/\/ Function to check if element is in viewport\r\n  function isElementInViewport(el) {\r\n    const rect = el.getBoundingClientRect();\r\n    return (\r\n      rect.top <= (window.innerHeight || document.documentElement.clientHeight) * 0.8 &&\r\n      rect.bottom >= 0\r\n    );\r\n  }\r\n\r\n  \/\/ Function to handle scroll events with staggered animation\r\n  function handleScroll() {\r\n    const revealElements = document.querySelectorAll('.reveal-right.paused');\r\n    \r\n    revealElements.forEach((element, index) => {\r\n      if (isElementInViewport(element)) {\r\n        \/\/ Calculate delay - 200ms base delay + 300ms per element index\r\n        const baseDelay = 200; \/\/ Initial delay before first animation\r\n        const staggerDelay = index * 300; \/\/ Delay between each element\r\n        const totalDelay = baseDelay + staggerDelay;\r\n        \r\n        \/\/ Set a timeout to remove paused class after the calculated delay\r\n        setTimeout(() => {\r\n          element.classList.remove('paused');\r\n        }, totalDelay);\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Add paused class to all reveal-right elements initially\r\n  document.querySelectorAll('.reveal-right').forEach(element => {\r\n    element.classList.add('paused');\r\n  });\r\n\r\n  \/\/ Initial check on page load\r\n  handleScroll();\r\n  \r\n  \/\/ Add scroll event listener with throttling for better performance\r\n  let ticking = false;\r\n  function updateOnScroll() {\r\n    if (!ticking) {\r\n      window.requestAnimationFrame(function() {\r\n        handleScroll();\r\n        ticking = false;\r\n      });\r\n      ticking = true;\r\n    }\r\n  }\r\n  \r\n  window.addEventListener('scroll', updateOnScroll);\r\n  \r\n  \/\/ Add resize event listener\r\n  window.addEventListener('resize', handleScroll);\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfa00cc elementor-widget elementor-widget-html\" data-id=\"dfa00cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n\/* Reveal from left *\/\r\n.reveal-left {\r\n  animation: revealLeft 1s ease-out forwards;\r\n  clip-path: inset(0 100% 0 0);\r\n}\r\n\r\n@keyframes revealLeft {\r\n  0% {\r\n    clip-path: inset(0 100% 0 0);\r\n  }\r\n  100% {\r\n    clip-path: inset(0 0 0 0);\r\n  }\r\n}\r\n\r\n\/* Add this to prevent animation from running initially *\/\r\n.reveal-left.paused {\r\n  animation-play-state: paused;\r\n}\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n  \/\/ Function to check if element is in viewport\r\n  function isElementInViewport(el) {\r\n    const rect = el.getBoundingClientRect();\r\n    return (\r\n      rect.top <= (window.innerHeight || document.documentElement.clientHeight) * 0.8 &&\r\n      rect.bottom >= 0\r\n    );\r\n  }\r\n\r\n  \/\/ Function to handle scroll events\r\n  function handleScroll() {\r\n    const revealElements = document.querySelectorAll('.reveal-left.paused');\r\n    \r\n    revealElements.forEach(element => {\r\n      if (isElementInViewport(element)) {\r\n        \/\/ Remove paused class to let animation play\r\n        element.classList.remove('paused');\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Add paused class to all reveal-left elements initially\r\n  document.querySelectorAll('.reveal-left').forEach(element => {\r\n    element.classList.add('paused');\r\n  });\r\n\r\n  \/\/ Initial check on page load\r\n  handleScroll();\r\n  \r\n  \/\/ Add scroll event listener\r\n  window.addEventListener('scroll', handleScroll);\r\n  \r\n  \/\/ Add resize event listener\r\n  window.addEventListener('resize', handleScroll);\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d023a4e elementor-widget elementor-widget-html\" data-id=\"d023a4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.word-fade-up {\r\n  \/* Removed display: inline-block to avoid overriding existing styles *\/\r\n}\r\n\r\n.word-fade-up .word {\r\n  display: inline-block;\r\n  opacity: 0;\r\n  transform: translateY(30px);\r\n  transition: opacity 0.6s ease, transform 0.9s ease;\r\n}\r\n\r\n.word-fade-up .word.animate {\r\n  opacity: 1;\r\n  transform: translateY(0);\r\n}\r\n\r\n\/* Removed space handling to preserve original formatting *\/\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n  function wrapWordsInSpans(element) {\r\n    \/\/ Create a tree walker to traverse all text nodes\r\n    const walker = document.createTreeWalker(\r\n      element,\r\n      NodeFilter.SHOW_TEXT,\r\n      {\r\n        acceptNode: function(node) {\r\n          \/\/ Skip empty text nodes and script\/style tags\r\n          if (node.parentNode.nodeName === 'SCRIPT' || \r\n              node.parentNode.nodeName === 'STYLE' || \r\n              node.textContent.trim() === '') {\r\n            return NodeFilter.FILTER_REJECT;\r\n          }\r\n          return NodeFilter.FILTER_ACCEPT;\r\n        }\r\n      }\r\n    );\r\n\r\n    \/\/ Process each text node\r\n    let textNode;\r\n    const textNodes = [];\r\n    while (textNode = walker.nextNode()) {\r\n      textNodes.push(textNode);\r\n    }\r\n\r\n    \/\/ Process in reverse to maintain DOM order\r\n    textNodes.reverse().forEach(node => {\r\n      const text = node.textContent;\r\n      const words = text.split(\/(\\s+)\/);\r\n      \r\n      \/\/ Create a document fragment to hold our new nodes\r\n      const fragment = document.createDocumentFragment();\r\n      \r\n      words.forEach(word => {\r\n        if (word.trim() === '') {\r\n          \/\/ This is whitespace, preserve it\r\n          fragment.appendChild(document.createTextNode(word));\r\n        } else {\r\n          \/\/ This is a word, wrap it in a span\r\n          const span = document.createElement('span');\r\n          span.className = 'word';\r\n          span.textContent = word;\r\n          fragment.appendChild(span);\r\n        }\r\n      });\r\n      \r\n      \/\/ Replace the original text node with our fragment\r\n      node.parentNode.replaceChild(fragment, node);\r\n    });\r\n  }\r\n\r\n  function init() {\r\n    document.querySelectorAll('.word-fade-up').forEach(el => {\r\n      if (!el.dataset.wfi) {\r\n        \/\/ Only wrap words, don't modify the element's structure\r\n        wrapWordsInSpans(el);\r\n        el.dataset.wfi = '1';\r\n      }\r\n    });\r\n  }\r\n\r\n  function animate(el) {\r\n    \/\/ Find all word spans within this element\r\n    const words = el.querySelectorAll('.word');\r\n    words.forEach((w, i) => {\r\n      setTimeout(() => w.classList.add('animate'), i * 100);\r\n    });\r\n  }\r\n\r\n  const obs = new IntersectionObserver(entries => {\r\n    entries.forEach(e => {\r\n      if (e.isIntersecting && !e.target.dataset.ani) {\r\n        animate(e.target);\r\n        e.target.dataset.ani = '1';\r\n      }\r\n    });\r\n  }, { threshold: 0.2 });\r\n\r\n  function setup() {\r\n    init();\r\n    document.querySelectorAll('.word-fade-up').forEach(el => obs.observe(el));\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', setup);\r\n  } else {\r\n    setup();\r\n  }\r\n\r\n  \/\/ Watch for dynamically added elements\r\n  new MutationObserver(setup).observe(document.body, { childList: true, subtree: true });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-106332fd e-flex e-con-boxed e-con e-parent\" data-id=\"106332fd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c7656e7 elementor-widget elementor-widget-text-editor\" data-id=\"5c7656e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>[woocommerce_checkout]<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Checkout<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-8512","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/pages\/8512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/comments?post=8512"}],"version-history":[{"count":0,"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/pages\/8512\/revisions"}],"wp:attachment":[{"href":"https:\/\/yumastudiopilates.com\/en\/wp-json\/wp\/v2\/media?parent=8512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}