const audienceContent = { home: 'Артезианская вода 19 литров с доставкой на дом и в офис. Привозим по Гагаринскому, Ленинскому, Нахимовскому и Балаклавскому районам, помогаем с возвратной тарой и держим понятные цены без скрытых доплат.', office: 'Доставка воды в офис в Севастополе с регулярным графиком, безналичной оплатой и приоритетными интервалами. Подходит для команд, кафе, студий, фитнес-клубов и клиентских пространств.' } const audienceButtons = document.querySelectorAll('[data-audience]') const heroAudienceText = document.getElementById('heroAudienceText') const mobileToggle = document.getElementById('mobileToggle') const mobilePanel = document.getElementById('mobilePanel') const cartDrawer = document.getElementById('cartDrawer') const cartOpenButton = document.getElementById('cartOpenButton') const mobileCartOpenButton = document.getElementById('mobileCartOpenButton') const cartCloseButton = document.getElementById('cartCloseButton') const modalBackdrop = document.getElementById('orderModal') const modalCloseButton = document.getElementById('modalCloseButton') const viewCartButton = document.getElementById('viewCartButton') const checkoutButton = document.getElementById('checkoutButton') const orderButtons = document.querySelectorAll('[data-open-order]') const addToCartButtons = document.querySelectorAll('.add-to-cart') const faqItems = document.querySelectorAll('.faq-item') const cartCount = document.getElementById('cartCount') const mobileCartCount = document.getElementById('mobileCartCount') const cartItemsCount = document.getElementById('cartItemsCount') const cartTotal = document.getElementById('cartTotal') const cartList = document.getElementById('cartList') const orderForm = document.getElementById('orderForm') const contactForm = document.getElementById('contactForm') const orderItemsField = document.getElementById('orderItemsField') const orderSuccess = document.getElementById('orderSuccess') const contactSuccess = document.getElementById('contactSuccess') const wooCommerceConfig = window.test1WooCommerce || null const cartPanel = cartDrawer?.querySelector('.cart-panel') const modalCard = modalBackdrop?.querySelector('.modal-card') let cart = [] let lastCartTrigger = null let lastModalTrigger = null const getFocusableElements = container => { if (!container) { return [] } return Array.from(container.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')) .filter(element => !element.hasAttribute('hidden') && !element.closest('[hidden]')) } const focusFirstElement = container => { const [first] = getFocusableElements(container) if (first) { first.focus() } } const updateAudience = audience => { heroAudienceText.textContent = audienceContent[audience] audienceButtons.forEach(button => { const isActive = button.dataset.audience === audience button.classList.toggle('active', isActive) button.setAttribute('aria-selected', String(isActive)) }) const typeField = orderForm.elements.customerType typeField.value = audience === 'office' ? 'Для офиса' : 'Для дома' } const openMobileMenu = () => { mobilePanel.classList.add('active') mobileToggle.setAttribute('aria-expanded', 'true') document.body.classList.add('menu-open') } const closeMobileMenu = () => { mobilePanel.classList.remove('active') mobileToggle.setAttribute('aria-expanded', 'false') document.body.classList.remove('menu-open') } const openCart = triggerElement => { lastCartTrigger = triggerElement || document.activeElement cartDrawer.classList.add('open') cartDrawer.setAttribute('aria-hidden', 'false') document.body.classList.add('modal-open') focusFirstElement(cartPanel) } const closeCart = () => { const shouldRestoreFocus = cartDrawer.classList.contains('open') cartDrawer.classList.remove('open') cartDrawer.setAttribute('aria-hidden', 'true') document.body.classList.remove('modal-open') if (shouldRestoreFocus && lastCartTrigger && typeof lastCartTrigger.focus === 'function') { lastCartTrigger.focus() } lastCartTrigger = null } const openModal = triggerElement => { lastModalTrigger = triggerElement || document.activeElement orderItemsField.value = cart.length ? cart.map(item => `${item.name} (${item.volume}) - ${item.price} ₽`).join('\n') : '' modalBackdrop.classList.add('open') modalBackdrop.setAttribute('aria-hidden', 'false') document.body.classList.add('modal-open') focusFirstElement(modalCard) } const closeModal = () => { const shouldRestoreFocus = modalBackdrop.classList.contains('open') modalBackdrop.classList.remove('open') modalBackdrop.setAttribute('aria-hidden', 'true') document.body.classList.remove('modal-open') if (shouldRestoreFocus && lastModalTrigger && typeof lastModalTrigger.focus === 'function') { lastModalTrigger.focus() } lastModalTrigger = null } const renderCart = () => { const total = cart.reduce((sum, item) => sum + item.price, 0) const count = cart.length cartCount.textContent = count mobileCartCount.textContent = count cartItemsCount.textContent = count cartTotal.textContent = `${total} ₽` if (!count) { cartList.innerHTML = '