schema: ai-cjm-component-contract/v1 id: proof version: 1.0.0 status: stable owner: AI CJM Design purpose: Подкрепляет обещание реальным человеком, компанией или артефактом. use_when: - Рядом с claim требуется быстрое проверяемое доказательство. evidence: - id: production-style url: https://aicjm.ru/edu/styles.css?v=20260811-edu-canon locator: .proof-line, .proof-faces, .proof-logos, .logo-cloud supports: - anatomy - variant:people - variant:client - size:default - state:default - id: production-dom url: https://aicjm.ru/edu/ locator: .hero .proof-line and section.logo-cloud supports: - approved-example - content anatomy: - id: asset required: true role: Проверенный портрет, логотип или артефакт. - id: statement required: true role: Что именно доказывается. - id: source required: true role: Атрибуция или ссылка. variants: - id: people status: stable description: Группа реальных участников. evidence_refs: - production-style - id: client status: stable description: Клиентский логотип с контекстом. 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 not owned by proof. focus-visible: status: not-applicable basis: not-applicable description: focus-visible is not owned by proof. active: status: not-applicable basis: not-applicable description: active is not owned by proof. selected: status: not-applicable basis: not-applicable description: selected is not owned by proof. open: status: not-applicable basis: not-applicable description: open is not owned by proof. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by proof. loading: status: not-applicable basis: not-applicable description: loading is not owned by proof. success: status: not-applicable basis: not-applicable description: success is not owned by proof. error: status: not-applicable basis: not-applicable description: error is not owned by proof. empty: status: not-applicable basis: not-applicable description: empty is not owned by proof. responsive: mode: cluster-to-wrapped-proof reading_order: DOM order remains authoritative in every mode. rules: - Keep person and client proof groups adjacent while both fit. - Allow groups to wrap as units; never detach labels from avatars or logos. - Hide duplicated marquee assets from the accessibility tree. accessibility: pattern: evidence-group semantics: - Use a labelled list/group; portraits and logos have evidence-appropriate names or empty alt when redundant. keyboard: - Static proof owns no keyboard behavior; linked items use text-link. focus: - Do not place duplicate marquee items in the focus order. motion: - Proof remains understandable when motion is removed. tokens: - surface.card - text.primary - text.secondary - border.default - type.size.body-small - type.weight.label content: required: - Проверяемое доказательство. - Точная атрибуция. constraints: - Asset имеет provenance. - Логотип не перекрашивается без approved master. do: - Связывать доказательство с конкретным claim. dont: - Не использовать случайный stock или вымышленный логотип. examples: approved: status: stable description: Компонент proof в указанном scoped production locator. evidence: https://aicjm.ru/edu/ prohibited: description: Не использовать случайный stock или вымышленный логотип. acceptance: - id: proof-1 criterion: Источник доказательства доступен. method: manual - id: proof-2 criterion: Alt-текст описывает смысл asset. method: manual