# Подтверждение добавления букета

После успешного сохранения корзины в браузере открывается окно с фотографией, названием букета и добавленным количеством. Оно одинаково работает в каталоге, модальной карточке и на отдельной странице товара.

- **Продолжить покупки** закрывает окно и возвращает фокус на кнопку добавления. Escape действует так же. Дополнительного добавления или перехода нет.
- **Перейти к оформлению** в каталоге закрывает карточку товара и открывает форму заказа. Со страницы букета выполняется переход на `/?open_checkout=1` в том же домене; после загрузки каталога открывается форма. Сам заказ создаётся только после отдельной отправки формы покупателем.

Если оформление недоступно по действующим настройкам, открывается корзина с понятным сообщением. Параметры `open_checkout`/`open_cart` удаляются из адреса после обработки; остальные параметры и якорь сохраняются. Относительный адрес сохраняет текущий origin и его корзину (`flowers.local` и `127.0.0.1` имеют отдельные хранилища браузера).

Успешное подтверждение появляется только после записи `localStorage`. Ошибки хранилища, недостаточный остаток, недопустимое количество и лимит 30 разных товаров показывают ошибку без ложного успеха. В каталоге новое состояние присваивается после успешной записи. Один щелчок добавляет товар один раз; выбор оформления не добавляет его повторно.

Общий компонент: `public/assets/cart-feedback.js` и `cart-feedback.css`. Подключён в `public/index.php` и `public/product.php`, обработчики — `app.js` и `product-page.js`. Это native dialog с управлением фокусом, безопасным текстовым выводом имени и локальной фотографией. При сбое компонента на странице товара остаётся сообщение со ссылкой на оформление, в каталоге открывается обычная корзина. Форма заказа, цены, остатки, способы оплаты и серверные проверки сохраняются.

Проверено 19.10.2026: `node tests/cart-feedback.cjs` — **52/52** сценария реальных JS-обработчиков с подменой DOM/хранилища/GET каталога. Проверены переход к оформлению, продолжение покупок, фокус, Escape, ошибки, лимиты, безопасный вывод и запасные сценарии. PHP/JS lint пройден; страницы и новые ассеты доступны через PHP-предпросмотр и Apache с корректными MIME. Визуальная проверка браузером в этой сессии не выполнялась. Реальные заказы, платежи и SMS при проверке не создавались.
