# 04. Layout Engine

## Назначение
Layout Engine отвечает за композицию страницы из секций по данным конфигурации и управляет только структурой и позиционированием, без доменной бизнес-логики.

## Поведение системы
- Engine читает page.sections.
- Секции сортируются по order.
- Для каждой секции применяется layout-стратегия.
- Виджеты размещаются внутри секции согласно layout-параметрам.

## Обязательные свойства JSON
- section.id
- section.type
- section.order
- section.widgets

## Опциональные свойства JSON
- section.layout.strategy
- section.layout.columns
- section.layout.gap
- section.layout.align
- section.visibility.desktop/tablet/mobile
- section.featureFlag

## Строгие правила
- Layout определяется только конфигурацией.
- Виджет не может переопределять секционный grid/columns на уровне страницы.
- Если section.visible=false, секция не рендерится.
- Секция должна рендериться в стандартном каркасе: section + page container.

## Пример JSON секции
```json
{
  "id": "section-featured-products",
  "type": "product-collection",
  "order": 2,
  "layout": {
    "strategy": "grid",
    "columns": 4,
    "gap": "16px",
    "align": "stretch"
  },
  "visibility": {
    "desktop": true,
    "tablet": true,
    "mobile": true
  },
  "widgets": [
    {
      "id": "widget-featured",
      "type": "product-carousel",
      "version": "1.0.0"
    }
  ]
}
```

## Ответственность Frontend
- Корректно применять сортировку и layout-параметры.
- Гарантировать единые отступы и контейнеры секций.
- Безопасно деградировать при частично некорректном layout.

## Ответственность Backend
- Отдавать корректные layout-атрибуты в bootstrap.
- Не смешивать контентные данные с layout-инструкциями.
- Поддерживать непротиворечивость секций внутри страницы.
