# Перенос UI-kit в WordPress + Elementor Документ описывает безопасный перенос дизайн-системы и всех макетов DP Trade UI-kit на WordPress с Elementor. Цель: внедрить дизайн-систему поэтапно, не ломая существующие страницы, Header, Footer и WooCommerce, если он используется. Документ построен в три слоя: 1. **Аудит исходников** — какие страницы, компоненты и паттерны есть в макете и что из этого дорого/опасно переносить на Elementor. 2. **Декомпозиция работ** — список Elementor-элементов (Global Styles, CSS-слой, глобальные шаблоны, страницы) с оценкой сложности и зависимостями. 3. **Пошаговый план** — 6 этапов с QA и планом отката. > Основной источник дизайна: `src/*.njk`, `src/css/tokens.css`, `src/css/site.css`, `src/css/v2.css`, `src/css/ui-kit.css`, `src/fonts/`, `src/js/design-switcher.js`. Сборочный результат находится в `_site/`. > Статус на 2026-05-19: production-направление для новых правок — **V2**. V1 сохранен для сравнения, но перенос в Elementor должен ориентироваться на V2-токены: Cormorant Garamond + Manrope, бордовый `#7D021D`, теплый фон `#FFFDFA`, карточный фон `#F5F0E8`, тонкие Cormorant-заголовки и обновленные карточки/mega-menu/footer. --- ## 1. Базовый принцип Не заменяйте существующие настройки Elementor сразу. Сначала добавляйте новые токены рядом со старыми, собирайте тестовую страницу, проверяйте визуально, и только потом переводите реальные шаблоны и страницы на новые значения. Рекомендуемый порядок: 1. Backup сайта и базы данных. 2. Работа на staging-копии или на новой странице. 3. Новые Global Colors с префиксом `DP`. 4. Новые Global Fonts с префиксом `DP`. 5. Тонкий базовый CSS-слой с переменными `--dp-*` и утилитарными классами `dp-*`. 6. Базовые компоненты: кнопки, поля, карточки, теги, хедер/футер (draft-копии). 7. Страница `UI Kit Preview` как живая витрина. 8. Проверка desktop / tablet / mobile. 9. Поэтапная замена Header, Footer, catalog, product, news, about, contacts. --- ## 2. Аудит: что в макете и чего в нём нет ### 2.1 Карта страниц | Страница | Что демонстрирует | Шаблон Elementor | |---|---|---| | `index.html` | Hero, mega-menu, блок «Производители», блок «Новости», блок «Рекомендации» | Home Template (Single Page) | | `catalog.html` | Toolbar, sort select, list-карточки, sidebar-фильтры | Archive Template (WooCommerce или CPT `product`) | | `product.html` | Галерея + карточка товара, meta-list (4 пары label/value), CTA | Single Product Template | | `bottle-cards.html` | Все варианты карточки бутылки (grid, mix, compact, horizontal, по регионам) | Showcase внутри UI Kit Preview | | `about.html` | Page hero, 2-col layout (article + feature grid), карточки с номерами | Page Template «About» | | `contacts.html` | Page hero, контактная форма, info-panel | Page Template «Contacts» | | `contacts-auth.html` | То же с авторизацией/аккаунтом | Page Template «Account» или `My Account` endpoint | | `news-villa-raiano.html`, `news-villa-raiano-v2.html` | Editorial hero, тело статьи, две редакционные верстки | Single Post Template (2 варианта) | | `article-guidelines.html` | Редакционные правила, структурный контент | Single Post / CPT `guideline` | | `ui-kit.html` | Живая витрина с sidebar-навигацией и превью компонентов | Не копировать в production, это витрина для дизайнеров и QA | ### 2.2 Карта компонентов Сложность указана относительно «чистого» Elementor без hand-coded HTML виджетов. | Компонент | Ключевые селекторы | Где встречается | Сложность | |---|---|---|---| | Primary / Secondary / Small button | `.button`, `.button--primary`, `.button--secondary`, `.button--sm` | везде | Лёгко | | Input, search bar, catalog sort | `.input`, `.search-bar`, `.catalog-sort` | header, catalog | Средне | | Tag / Chip / Status | `.tag`, `.tag--filled`, `.tag--outline`, gold-вариант | каталог, карточки | Лёгко | | Primary hero (home) | `.hero`, `.hero-copy`, `.hero-actions` | `index.html` | Сложно | | Page hero (about / contacts / guidelines / news) | `.page-hero`, `.page-hero--about`, `.page-hero--contacts`, `.page-hero--guidelines`, `.page-hero__inner`, `.page-hero__meta` | 5 страниц | Средне | | Mega menu | `.mega-menu`, `.menu-grid`, `.menu-column`, `.visual-column`, `.appellations`, `.appellation-group`, `.country-link` | header | **Сложно** | | Header sticky + blur | `.site-header`, `position: sticky`, `backdrop-filter: blur(18px)` | все страницы | Средне | | Producer card | `.producer-card` | home | Лёгко | | News card (3 варианта фоновых изображений) | `.news-card`, `.news-card__image` | home | Лёгко | | Product card grid | `.product-card`, `.product-media`, `.product-photo`, `.product-footer` | home, catalog, product | Средне | | Product card list | `.product-card--list` (3 колонки: image / info / actions) | catalog | Сложно | | Product card compact list | `.product-card--list-compact` | ui-kit | Средне | | Product card B2B | `.product-card--list-b2b`, `.product-params` | ui-kit | Сложно | | Bottle card + 5 вариантов | `.bottle-card`, `.bottle-card--tuscany/--mosel/--clean/--compact/--horizontal`, `.bottle-card__media`, `.bottle-card__photo` | bottle-cards | Средне | | CSS-бутылка (два `::before`/`::after`) | `.bottle`, `.bottle::before` (пробка), `.bottle::after` (этикетка) | ui-kit, catalog showcase | **Сложно** (требует HTML-виджет) | | Section heading (split) | `.section-heading`, `.section-heading--split` | все секции | Лёгко | | Feature card с номером | `.feature-card` + `01..04` | about | Лёгко | | Info card / contact panel / contact form | `.info-card`, `.contact-panel`, `.contact-form` | about, contacts | Лёгко | | Meta list (4 пары label/value) | `.meta-list`, `.meta-list div`, `.meta-list span` | product | Лёгко | | Article body (editorial) | `.article-body`, `.article-body .lead`, `.article-body h2/h3/p/ul` | news, guidelines | Средне | | Footer | `.site-footer`, `.footer-container`, `.footer-main`, `.footer-brand-block`, `.nav-group`, `.contacts-card`, `.social-links` | все страницы | Лёгко | | Breadcrumbs | `.breadcrumbs` | product V2 | Лёгко | | Pagination | отсутствует в макете | — | нужно добавить отдельно | ### 2.3 Проблемные места для Elementor Ниже — паттерны, которые **нельзя** просто перетащить в стандартные виджеты. Каждый пункт требует либо custom CSS-класса, либо HTML-виджета, либо отдельного Elementor-шаблона. 1. **Mega menu с 4-колоночным асимметричным гридом и мостом-ховером.** `css/site.css:242-369`. Grid `1.05fr 0.82fr 1.25fr 0.88fr`, вложенная секция `.appellations` на 2 колонки, позиционирование `position: absolute; transform: translateX(-50%); width: min(var(--container), calc(100vw - 40px))`, ховер-мост через `::after` высотой 34px, `backdrop-filter: blur(18px)`. Стандартный Elementor Nav Menu/Mega Menu такое не даёт. Решение: **custom HTML виджет** + CSS-классы `dp-megamenu-*` либо Crocoblock JetMenu. 2. **Sticky header с backdrop-filter blur.** `.site-header { position: sticky; top: 0; backdrop-filter: blur(18px); background: rgba(248, 250, 252, 0.94); }`. В Elementor Pro есть `Effects → Sticky`, но blur и alpha-фон задаются только CSS. 3. **CSS-бутылка на `::before`/`::after`.** `.bottle { width: 54px; height: 152px; ... }`, плюс псевдо-пробка и этикетка. Elementor виджет Image такого не даст — нужен HTML-виджет с фиксированной разметкой `
`. 4. **Псевдоэлементы как структурная часть карточек.** `.type-card.is-selected::before` (бейдж), градиентные fond-блоки `.bottle-card__media` с разными заливками под `--tuscany/--mosel/--clean/--compact`. Решение: пять CSS-классов-модификаторов, в Elementor подключать через поле `CSS Classes`. 5. **CSS Grid с асимметричными колонками.** Примеры: `.page-hero__inner` (`0.72fr / 0.28fr`), `.article-layout` (`0.68fr / 0.32fr`), `.about-grid` (`0.58fr / 0.42fr`), `.product-card--list` (`210px / 1fr / 220px`), `.footer-main` (`210px / 1fr / 250px`), `.meta-list` (в product — de-facto 2 колонки). Elementor Container с `display: flex` справится только с простыми кейсами. Для сложных — либо Container c `CSS display: grid` через custom CSS, либо принять, что колонки останутся фиксированной ширины через `%`. 6. **Responsive через `clamp()`.** `h1 { font-size: clamp(40px, 5.6vw, 76px) }` и подобные. Elementor работает через три брейкпоинта. Решение: в Elementor задавайте отдельные desktop/tablet/mobile значения, либо пропишите `clamp()` в Custom CSS для `h1`/`h2` с префиксом `dp-`. 7. **Кастомный select (`.catalog-sort`).** Элементу `