# Блоки темы mebelidomanet

Реестр всех визуальных блоков темы с указанием файлов кода и статуса редизайна. Главная тема — `mebelidomanet` (живёт в корне `views/` + `src/client/`), в отличие от остальных тем в `themes/<name>/`.

Тема **остаётся на Bootstrap 4** — миграцию на Tailwind отменили (много shared-компонентов, которые рендерятся в других темах на BS). Ведём **редизайн в стиле `../mebel-landing`** (тёплая палитра, Fraunces + Manrope, мягкие карточки) на чистом BS + SCSS. Готовые образцы — [hero](main-page/hero.md) и [category-grid](main-page/category-grid.md). Шаблон для нового блока — в `_template.md`.

**Единые правила редизайна** (токены палитры `src/client/_md-tokens.scss`, типо-шкала, вертикальный ритм секций, паттерн подзаголовка) — в [design-system.md](design-system.md). Новые `*-md`-блоки сверяем с ним.

## Легенда статусов

| Статус | Значение |
|---|---|
| `pending` | Редизайн не начат (текущий BS-вид) |
| `in_progress` | Редизайн в работе |
| `done` | Переверстан в стиле mebel-landing |

## layout — глобальные блоки страницы

Видны на всех (или почти всех) страницах. Все, кроме informers и modal-callback, **inline в `views/layouts/main.php`** — не вынесены в partials.

| Блок | Файлы | Статус |
|---|---|---|
| [header-laptop](layout/header-laptop.md) | `views/layouts/main.php:206-464` + `src/client/laptop-header/` | pending |
| [header-mobile](layout/header-mobile.md) | `views/layouts/main.php:139-199` + `src/client/mobile-header/` | pending |
| [mobile-nav](layout/mobile-nav.md) | `views/layouts/main.php:40-136` + `src/client/mobile-nav/` + `src/client/aside-menu/` + `src/client/mobile-nav-trigger/` | pending |
| [breadcrumbs](layout/breadcrumbs.md) | `views/layouts/main.php:467-486` (виджет `BreadcrumbsMicrodata`) + `src/client/breadcrumbs/` | pending |
| [footer-question](layout/footer-question.md) | `views/layouts/main.php:490-511` + `src/client/footer-question/` | pending |
| [footer](layout/footer.md) | `views/layouts/main.php:513-655` + `src/client/footer/` | pending |
| [modal-callback](layout/modal-callback.md) | `views/layouts/_modal-callback.php` | pending |
| [modal-location](layout/modal-location.md) | `src/client/modal-location/modal-location.jsx` (React) + `src/client/modal-location-md/style.scss` | **done** |
| [to-top](layout/to-top.md) | `views/layouts/main.php:674` + `src/scroll-top/` | pending |

## informers — мини-виджеты в шапке

| Блок | Файлы | Статус |
|---|---|---|
| [cart-informer](informers/cart-informer.md) | `views/layouts/_cart-informer.php` + `src/cart/components/counter/` | pending |
| [favorite-informer](informers/favorite-informer.md) | `views/layouts/_favorite-informer.php` + `src/favorite/components/counter/` | pending |

## main-page — блоки главной страницы

Корневая вьюха — `views/site/index.php` (270 строк). Многие блоки **inline в ней**, часть через partials и shared компоненты.

| Блок | Файлы | Статус |
|---|---|---|
| [hero](main-page/hero.md) | `views/site/index.php` (inline `.md-hero`) + `src/client/hero-md/` | **done** |
| [inform-count](main-page/inform-count.md) | `views/site/index.php:55-70` (inline `.md-stats`) + `src/client/inform-md/` | **done** |
| [advantage-carousel](main-page/advantage-carousel.md) | `views/site/index.php:72-110` (inline `.md-adv`, owl→grid) + `src/client/advantage-md/` | **done** |
| [category-grid](main-page/category-grid.md) | `views/site/index.php:129-149` (inline `.md-catalog`) + `views/site/_category-card.php` + `src/client/category-md/` | **done** |
| [product-carousel-tabs](main-page/product-carousel-tabs.md) | `views/site/index.php:160-186` (inline `.md-showcase`, обвязка) + `src/client/product-carousel-md/` + `src/client/product-carousel/index.js`; карточка — shared `views/category/_product.php` (не трогали) | **done** |
| [contact-and-review](main-page/contact-and-review.md) | `views/site/index.php:192-224` (inline `.md-feedback`) + `src/client/feedback-md/` + `src/contact-form/` (shared React) | **done** |
| [factory-carousel](main-page/factory-carousel.md) | `views/site/index.php:228-243` (inline `.md-factory`, owl→grid) + `views/site/_factory-card.php` + `src/client/factory-md/` | **done** |
| [vk-widget](main-page/vk-widget.md) | `views/site/index.php:248-267` (inline `.md-vk`, обрамление; iframe VK не стилизуется) + `src/client/vk-md/` | **done** |

## catalog — каталог и листинг

| Блок | Файлы | Статус |
|---|---|---|
| [category-page](catalog/category-page.md) | `views/category/index.php` + `views/category/detail.php` + `views/category/cabinet.php` + `src/client/category/` | pending |
| [aside-menu](catalog/aside-menu.md) | `views/category/_aside-menu.php` + `src/client/aside-menu/` + `src/client/menu-catalog-sidebar/` | **done** |
| [sub-category](catalog/sub-category.md) | `views/category/_sub-category.php` + `src/client/sub-category/` | **done** |
| [sorting-bar](catalog/sorting-bar.md) | `views/category/_sorting.php` + `src/client/sorting-bar/` (`.md-sorting`, вобрал filter-btn/page-size) | **done** |
| [filter](catalog/filter.md) | `views/_component/filter.php` + `src/client/filter/` (скин темы) + **shared** `src/filter/` (не трогали — другие темы!) | **done** |
| [product-card](catalog/product-card.md) | `views/category/_item.php` + `views/category/_product.php` + `src/client/product-card/` | pending |
| [pagination](catalog/pagination.md) | (yii LinkPager) + `src/client/pagination/` | **done** |
| [tags](catalog/tags.md) | `views/_component/tags.php` + виджет `components/Tags.php` + `src/client/tag/`; обёртка `.md-tags` + `src/client/tags-md/` (главная — облако, листинг — `.md-tags--listing` лента) | **done** |
| [selection](catalog/selection.md) | `views/category/selection.php` | pending |

## product — страница товара

| Блок | Файлы | Статус |
|---|---|---|
| [product-page](product/product-page.md) | `views/product/index.php` + `views/product/import-pm.php` + `views/product/simpleOption.php` + `src/client/product-page/` | pending |
| [product-actions](product/product-actions.md) | `views/product/_actions.php` (купить/в корзину) | pending |
| [product-tabs](product/product-tabs.md) | `views/product/_tabs.php` + `src/client/product-tab/` | pending |
| [product-complectation](product/product-complectation.md) | `views/product/_complectation.php` + `src/client/product-page/_complectation/` (scss+js) + `src/product-modules/` (shared, см. docs/subProducts.md) | **done** |
| [product-collection](product/product-collection.md) | `views/product/_collection.php` | pending |
| [product-related](product/product-related.md) | `views/product/_related.php` | pending |
| [product-similar](product/product-similar.md) | `views/product/_similar.php` | pending |
| [product-reviews](product/product-reviews.md) | `views/product/_review.php` + `src/client/review-all/` + `src/client/main-review/` + `src/client/star-ratings-info/` | pending |
| [modal-quick-buy](product/modal-quick-buy.md) | `views/product/_modal-quick-buy.php` + `src/client/_md-modal.scss` (общий скин) + `src/client/modal-quick-buy/` | **done** |
| [product-files](product/product-files.md) | `views/_component/` (?) + **shared** `src/product-files/` | pending |
| [product-options](product/product-options.md) | (для type=simpleOption) + **shared** `src/product-options/` | pending |

## cart — корзина и оплата

| Блок | Файлы | Статус |
|---|---|---|
| [cart-page](cart/cart-page.md) | `views/cart/index.php` + `views/cart/_product.php` + `src/client/cart-page/` + **shared** `src/cart/` (скин, не трогали) | **done** |
| [cart-form](cart/cart-form.md) | `views/cart/_form.php` (оформление заказа) | pending |
| [cart-empty](cart/cart-empty.md) | `views/cart/empty.php` | pending |
| [cart-detail](cart/cart-detail.md) | `views/cart/detail.php` + `views/cart/_detail_product.php` + `src/client/order-detail-md/style.scss` + **shared** `src/purchase-detail/` (не трогали) | **done** |
| [cart-mini-widget](cart/cart-mini-widget.md) | `src/client/cart-widget/` (попап-корзина) | pending |
| [payment-pages](cart/payment-pages.md) | `views/payment/pay-psb.php` + `views/payment/prepay.php` + **shared** `src/payment/` + `src/sbp/` + `src/payment-sber-link/` | pending |

## pages — статика и спец-страницы

| Блок | Файлы | Статус |
|---|---|---|
| [page-static](pages/page-static.md) | `views/page/about.php` / `delivery.php` / `payment.php` / `prepayment.php` / `news.php` / `news-list.php` / `_menu.php` | pending |
| [page-search](pages/page-search.md) | `views/search/*` + `src/client/page-search/` + `src/client/search/` + **shared** `src/search-box/` | pending |
| [page-favorite](pages/page-favorite.md) | `views/favorite/index.php` + `views/favorite/empty.php` + `src/client/page-favorite/` + **shared** `src/favorite/` | pending |
| [page-factory](pages/page-factory.md) | `views/factory/index.php` + `views/factory/detail.php` + `views/factory/_item.php` + `src/client/factory/` | pending |
| [contact-form](pages/contact-form.md) | `views/site/contact-form.php` + `views/page/contact.php` + `src/client/contact-form/` + **shared** `src/contact-form/` | pending |
| [complain](pages/complain.md) | `views/page/complain.php` + `src/client/complain/` | pending |
| [faq](pages/faq.md) | `views/page/faq.php` + `views/_component/faqAccordion.php` | pending |
| [review](pages/review.md) | `views/page/review.php` + `views/page/_review.php` | pending |

## shared — переиспользуемое между темами

Лежит в `src/<module>/` (не в `src/client/`). Импортируется через alias `@components/<module>`. Используется и mebelidomanet, и темами в `themes/`.

| Модуль | Файлы | Статус |
|---|---|---|
| [cart-module](shared/cart-module.md) | `src/cart/` (Redux + компоненты + counter) | pending |
| [favorite-module](shared/favorite-module.md) | `src/favorite/` | pending |
| [filter-module](shared/filter-module.md) | `src/filter/` — **используется другими темами**, не выпиливать BS! | pending |
| [hero-module](shared/hero-module.md) | `src/hero/` (mustache template + style.scss) | pending |
| [interstellar-hero](shared/interstellar-hero.md) | `src/interstellar-hero/` | pending |
| [payment-module](shared/payment-module.md) | `src/payment/` | pending |
| [payment-sber-link](shared/payment-sber-link.md) | `src/payment-sber-link/` | pending |
| [payment-icons](shared/payment-icons.md) | `src/payment-icons/` | pending |
| [sbp](shared/sbp.md) | `src/sbp/` | pending |
| [poscredit-widget](shared/poscredit-widget.md) | `src/poscredit-widget/` | pending |
| [personal-policy](shared/personal-policy.md) | `src/personal-policy/` (баннер cookies) | pending |
| [modal-flute](shared/modal-flute.md) | `src/modal-flute/` | pending |
| [social-icons](shared/social-icons.md) | `src/social-icons/` + виджет `components/SocialIcons.php` | pending |
| [scroll-top](shared/scroll-top.md) | `src/scroll-top/` | pending |
| [visitor](shared/visitor.md) | `src/visitor/` — см. `docs/visitor.md` | pending |
| [referral](shared/referral.md) | `src/referral/` | pending |
| [confirm-water](shared/confirm-water.md) | `src/confirm-water/` (модалка подтверждения) | pending |
| [image-carousel](shared/image-carousel.md) | `src/image-carousel/` | pending |
| [glightbox](shared/glightbox.md) | `src/glightbox/` | pending |
| [input-number](shared/input-number.md) | `src/input-number/` | pending |
| [btn-to-cart](shared/btn-to-cart.md) | `src/btn-to-cart/` | pending |
| [search-box](shared/search-box.md) | `src/search-box/` | pending |
| [product-files](shared/product-files.md) | `src/product-files/` | pending |
| [product-options](shared/product-options.md) | `src/product-options/` | pending |
| [product-modules](shared/product-modules.md) | `src/product-modules/` (subProducts/комплектации, см. docs/subProducts.md) | pending |
| [purchase-detail](shared/purchase-detail.md) | `src/purchase-detail/` | pending |
| [breadcrumbs-shared](shared/breadcrumbs-shared.md) | `src/breadcrumbs/` | pending |
| [observer](shared/observer.md) | `src/observer/` | pending |
| [store](shared/store.md) | `src/store/` (Redux store) | pending |
| [limited-container](shared/limited-container.md) | `src/limited-container/` | pending |
| [bach-item-carousel](shared/bach-item-carousel.md) | `src/bach-item-carousel/` | pending |
| [big-small-carousel](shared/big-small-carousel.md) | `src/big-small-carousel/` | pending |

## Аналоги в других темах

В каждом файле блока есть frontmatter-поле `themes_with_analog` со списком тем, где есть такой же блок (`themes/<name>/`). Редизайним только `mebelidomanet` — остальные темы остаются как есть (большинство на Bootstrap разных версий). Именно поэтому shared-компоненты (`src/<module>/`) редизайним осторожно: они рендерятся в других темах, ломать их вид нельзя — под mebelidomanet делаем theme-specific обёртки/классы.

## Прогресс редизайна

### Текущий снимок (2026-07-11)

- Всего блоков: **86**
- По статусу: **71 pending**, **1 in_progress** (product-page — переверстаны index.php + simpleOption.php, остался import-pm.php), **14 done** — **вся главная переверстана** (hero, inform-count, advantage-carousel, category-grid, product-carousel-tabs, contact-and-review, factory-carousel, vk-widget) + tags (catalog-блок, но редизайн пока только для home-инстанции на главной) + product-tabs (табы страницы товара) + modal-location + modal-quick-buy (модалки на общем скине `_md-modal.scss`) + cart-detail (страница деталей заказа) + cart-page (корзина, скин shared-виджета)
- По фреймворку: **82 bootstrap**, 4 mixed (React-компоненты с BS-классами)

Распределение по разделам:

| Раздел | Блоков |
|---|---|
| layout | 9 |
| informers | 2 |
| main-page | 8 |
| catalog | 9 |
| product | 11 |
| cart | 6 |
| pages | 8 |
| shared | 33 |

### Команды для пересчёта

```bash
# По статусу редизайна
grep -h "^redesign_status:" docs/blocks/**/*.md | sort | uniq -c

# По CSS-фреймворку
grep -h "^framework:" docs/blocks/**/*.md | sort | uniq -c

# Все блоки в работе сейчас
grep -l "^redesign_status: in_progress" docs/blocks/**/*.md

# Все ГОТОВЫЕ блоки
grep -l "^redesign_status: done" docs/blocks/**/*.md

# Найти блок по файлу кода (например, "main.php:206-464")
grep -rl "main.php:206" docs/blocks/

# Что блок X зависит / что зависит от него (по deps_on)
grep -rl "deps_on:.*cart-informer" docs/blocks/
```

### Правила обновления статуса

Когда берёшь блок в работу:

1. В frontmatter блока поменять `redesign_status: pending` → `in_progress`, обновить `last_updated`.
2. По окончании редизайна конкретного блока — `redesign_status: done`; в файле блока описать, что и как переверстали (по образцу `main-page/hero.md` и `main-page/category-grid.md`).
3. Если в процессе нашлись новые файлы, не учтённые в `files:` — добавить (обычно это новый theme-specific SCSS в `src/client/<name>-md/` и partial).
