# Модуль: Основа вёрстки **Ответственность**: предоставляет общие design tokens, режимы выпуска и безопасные presentation-примитивы без правил конкретного вида документа. **Расположение**: `.template/lib/presentation/foundation.typ` ## Публичный интерфейс | Символ | Тип | Описание | |--------|-----|----------| | `design-tokens()` | конструктор dictionary | Шрифты, размеры, цвета, интервалы и стандартные поля страницы | | `apply-foundation()` | show-функция | Применяет локальные общие text/par/page defaults к body renderer | | `render-media-slot()` | функция | Отображает ресурс по policy `hide`, `placeholder`, `reserve-space` | | `render-mode()` | чистая функция | Нормализует `final`, `draft`, `clean-copy` | | `watermark-layer()` | функция | Создаёт слой watermark без изменения domain данных | ## Зависимости | Модуль | Что использует | |--------|----------------| | `.template/lib/domain/document.typ` | `RenderOptions` и режим выпуска | | `.template/lib/domain/company.typ` | Brand color и нормализованные ресурсы | ## Инварианты - Foundation не знает, является документ отчётом, письмом, ТКП или договором. - Общие defaults локальны body, не протекают в следующий независимый renderer. - `render-media-slot()` никогда не вызывает `image(none)`. - Размер placeholder и reserve-space задаётся вызывающим компонентом, чтобы не ломать профильную геометрию. - Watermark не влияет на layout flow и счётчики. - Внутри module scope не создаётся state, общий для нескольких документов. ## Намеренно НЕ обрабатывает - Титульный лист отчёта. - Шапку письма и реквизиты договора. - Нумерацию приложений конкретного профиля. - Загрузку файлов и JSON. ## Заметки для агента > Typst 0.15 изменил baseline у `box` и `block`; любые правки foundation требуют visual regression всех профилей. Не переносите сюда profile-specific отступ только потому, что он встречается в двух документах: сначала проверьте, является ли это действительно общим design token.