## ADDED Requirements ### Requirement: Общий фундамент доступен через проверяемые локальные пакеты Общий визуальный фундамент SHALL принадлежать приватным npm workspaces внутри frontend и иметь явную публичную поверхность. Приложение SHALL использовать пакеты через объявленные exports. Собранные артефакты MUST содержать модули, типы, стили и данные согласно контракту каждого пакета и быть пригодными для проверки вне рабочего дерева frontend. Общие пакеты MUST NOT требовать серверных данных, авторизации, маршрутов или состояния WealthLedger. Совместимость пакетов между собой и с приложением SHALL проверяться; workspace links MUST NOT быть единственным подтверждением пригодности артефактов. Независимые релизы и публикация в registry не входят в этот переход. #### Scenario: Приложение потребляет собранную поставку - **WHEN** потребитель устанавливает собранные артефакты в чистом окружении без ссылок на рабочее дерево поставщика - **THEN** публичные модули, типы, стили и данные доступны, общий компонент отображается на заявленной теме без зависимостей от приложения поставщика #### Scenario: Локальная разработка скрыла отсутствующий артефакт - **WHEN** локальная ссылка разрешает импорт, отсутствующий в собранной поставке - **THEN** поставка не признаётся готовой по результату одной локальной сборки; потребление именно собранных артефактов должно быть подтверждено отдельно #### Scenario: Приложение использует локальные пакеты - **WHEN** frontend устанавливает зависимости из своего lockfile и собирается - **THEN** приватные workspaces доступны через публичные exports без публикации в registry; предметные компоненты и API-клиент остаются в приложении ### Requirement: Собственные общие иконки имеют доступный контракт Общие иконки SHALL иметь предсказуемые размеры и возможность получать цвет от потребителя, не определяя бизнес-смысл операции или состояние приложения. Декоративная иконка MUST NOT создавать отдельную точку фокуса или повторять доступное имя соседнего действия. Смысловая иконка без сопровождающего текста MUST иметь доступное имя. Собственное движение иконки SHALL учитывать предпочтение уменьшенного движения; выбор момента запуска по пользовательскому сценарию SHALL оставаться у потребителя. #### Scenario: Иконка находится в именованном действии - **WHEN** собственная иконка дополняет кнопку с доступным именем - **THEN** кнопка сохраняет имя и клавиатурное поведение, а рисунок декоративен и не создаёт дополнительную точку фокуса #### Scenario: Рисунок самостоятельно передаёт смысл - **WHEN** иконка используется без текста и без именованного родительского элемента как самостоятельное изображение - **THEN** потребитель задаёт доступное имя, передающее её назначение #### Scenario: Пользователь уменьшил движение - **WHEN** включено предпочтение уменьшенного движения - **THEN** необязательная анимация общей иконки не выполняется, а значение и доступность действия сохраняются