schema: ai-cjm-component-contract/v1 id: site-footer version: 2.0.0 status: stable owner: AI CJM Design purpose: Завершает страницу legal, contact и secondary navigation. use_when: - Публичный artifact является web-страницей AI CJM. evidence: - id: production-style url: https://aicjm.ru/edu/shared/site-footer.css?v=20260810-shared-footer locator: .site-footer, .site-footer__top, .site-footer__links, .site-footer__links a:focus-visible, .site-footer__bottom, @media blocks supports: - anatomy - variant:full - variant:compact - size:default - state:default - state:focus-visible - id: production-dom url: https://aicjm.ru/edu/ locator: aicjm-site-footer footer.site-footer supports: - approved-example - content anatomy: - id: brand required: true role: Знак и краткий контекст. - id: navigation required: true role: Вторичные ссылки. - id: legal required: true role: Privacy, consent, requisites. - id: contact required: false role: Проверенный контакт. variants: - id: full status: stable description: Полный web footer. 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: candidate basis: normative-gap description: Proposed hover contract for site-footer; approval is required before production use. behavior: Apply a nonessential semantic-token cue while the pointer is over the owned interactive target. semantics: No ARIA change; hover never exposes hidden required content. token_refs: - surface.deep - text.on-deep - text.on-deep-muted transition: Enter on pointer hover and return to default on pointer exit. acceptance: - hover behavior, semantics, token refs and transition pass the site-footer manual state check. focus-visible: status: stable basis: observed description: focus-visible is observed at the exact production locator in evidence_refs. evidence_refs: - production-style active: status: not-applicable basis: not-applicable description: active is not owned by site-footer. selected: status: not-applicable basis: not-applicable description: selected is not owned by site-footer. open: status: not-applicable basis: not-applicable description: open is not owned by site-footer. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by site-footer. loading: status: not-applicable basis: not-applicable description: loading is not owned by site-footer. success: status: not-applicable basis: not-applicable description: success is not owned by site-footer. error: status: not-applicable basis: not-applicable description: error is not owned by site-footer. empty: status: not-applicable basis: not-applicable description: empty is not owned by site-footer. responsive: mode: grouped-grid-to-linear-footer reading_order: DOM order remains authoritative in every mode. rules: - Keep brand/context before navigation groups and legal line last. - Reduce link-group columns, then stack groups in source order. - All legal and contact links remain visible on every web page. accessibility: pattern: contentinfo-navigation semantics: - Use one contentinfo landmark with labelled navigation groups, contacts and legal links. keyboard: - Tab follows visual/source group order; Enter activates links. focus: - Footer links use focus.ring and no focus trap. motion: - Footer meaning does not depend on motion. tokens: - surface.deep - text.on-deep - text.on-deep-muted - border.on-deep - component.logo.text-on-deep - component.logo.weight - focus.ring content: required: - Актуальные legal links. - Проверенные контакты. constraints: - Год не является обязательным доказательством актуальности. - Ссылки существуют в link graph. do: - Группировать ссылки семантическими headings. - Использовать один и тот же полный footer на landing, detail, legal и brandbook pages. - Оставлять геометрию и интерактивные состояния в shared site-footer stylesheet. dont: - Не добавлять social/contact без verified URL. - Не создавать compact или локально стилизованный footer. - Не переопределять `.site-footer*` в CSS страницы-потребителя. examples: approved: status: stable description: Компонент site-footer в указанном scoped production locator. evidence: https://aicjm.ru/edu/ prohibited: description: Не добавлять social/contact без verified URL. acceptance: - id: site-footer-1 criterion: Все legal маршруты доступны. method: manual - id: site-footer-2 criterion: Contrast on deep соответствует token matrix. method: manual - id: site-footer-3 criterion: Consumer page не содержит локальных `.site-footer*` selectors; footer совпадает с production shared component. method: automated