schema: ai-cjm-component-contract/v1 id: legal-content version: 1.0.0 status: stable owner: AI CJM Design purpose: Публикует юридический документ с понятным маршрутом, датой и читаемым телом. use_when: - Показывается privacy, consent, requisites или legal index. evidence: - id: production-style url: https://aicjm.ru/edu/legal/legal.css?v=20260811-selected-canon locator: .legal-layout, .legal-layout aside, .legal-layout aside a.is-active, .legal-layout article, .legal-table-wrap, @media blocks supports: - anatomy - variant:document - variant:index - size:default - state:default - id: production-dom url: https://aicjm.ru/edu/legal/privacy/ locator: main.legal-page .legal-layout > aside + article supports: - approved-example - content anatomy: - id: title required: true role: Название документа. - id: metadata required: true role: Версия или дата актуальности. - id: navigation required: false role: Связанные legal documents. - id: body required: true role: Нумерованные разделы. - id: contact required: false role: Канал юридического обращения. variants: - id: document status: stable description: Один legal document. evidence_refs: - production-style - id: index status: stable description: Список legal documents. evidence_refs: - production-style sizes: - id: default status: stable description: Размер определяется содержимым и перечисленными semantic/component tokens; raw dimensions запрещены. evidence_refs: - production-style states: default: status: stable basis: observed description: default is observed at the exact production locator in evidence_refs. evidence_refs: - production-style hover: status: not-applicable basis: not-applicable description: Hover is owned by text-link descendants. focus-visible: status: not-applicable basis: not-applicable description: Focus-visible is owned by text-link descendants. active: status: not-applicable basis: not-applicable description: active is not owned by legal-content. selected: status: not-applicable basis: not-applicable description: selected is not owned by legal-content. open: status: not-applicable basis: not-applicable description: open is not owned by legal-content. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by legal-content. loading: status: not-applicable basis: not-applicable description: loading is not owned by legal-content. success: status: not-applicable basis: not-applicable description: success is not owned by legal-content. error: status: not-applicable basis: not-applicable description: error is not owned by legal-content. empty: status: not-applicable basis: not-applicable description: empty is not owned by legal-content. responsive: mode: aside-document-to-linear-document reading_order: DOM order remains authoritative in every mode. rules: - Keep document navigation before the legal body in DOM order. - At narrow mode stack aside above article and allow wide tables to scroll in a labelled region. - Never hide clauses, requisites or source links for compact mode. accessibility: pattern: legal-document-with-nav semantics: - Use nav/aside plus article; clauses have stable heading anchors; data tables include headers and captions. keyboard: - Tab traverses document navigation and links; scrollable tables are keyboard reachable. focus: - Anchor navigation moves focus to the target heading without obscuring it under the header. motion: - No legal content is hidden behind motion or disclosure by default. tokens: - surface.page - surface.card - text.primary - text.secondary - action.primary - border.default - type.size.body - type.line-height.body - type.size.heading-medium - layout.container-max content: required: - Утверждённый legal text. - Дата или версия. - Точные реквизиты. constraints: - Не перефразировать legal text агентом. - Изменения проходят legal owner. do: - Сохранять нумерацию и anchors. dont: - Не смешивать promotional CTA с телом документа. examples: approved: status: stable description: Компонент legal-content в указанном scoped production locator. evidence: https://aicjm.ru/edu/legal/privacy/ prohibited: description: Не смешивать promotional CTA с телом документа. acceptance: - id: legal-content-1 criterion: Print/zoom не обрезают текст. method: manual - id: legal-content-2 criterion: Связанные legal links валидны. method: manual