schema: ai-cjm-component-contract/v1 id: primary-nav version: 1.0.0 status: stable owner: AI CJM Design purpose: Перемещает между ключевыми разделами и показывает текущий маршрут. use_when: - Есть два и более равноправных пункта навигации. evidence: - id: production-style url: https://aicjm.ru/edu/shared/site-header.css?v=20260811-home-section-links locator: .site-header__nav a, .site-header__nav a:hover, .site-header__nav a:focus-visible, .site-header__nav a[aria-current="page"] supports: - anatomy - variant:header - size:default - state:default - state:hover - state:focus-visible - state:selected - id: production-dom url: https://aicjm.ru/edu/ locator: aicjm-site-header nav.site-header__nav and aicjm-site-footer .site-footer__links supports: - approved-example - content - id: production-footer-style url: https://aicjm.ru/edu/shared/site-footer.css?v=20260810-shared-footer locator: .site-footer__links, .site-footer__links section, .site-footer__links a, .site-footer__links a:focus-visible supports: - variant:footer anatomy: - id: list required: true role: Семантический список ссылок. - id: item required: true role: Один маршрут. - id: current-indicator required: false role: Текущая страница или секция. variants: - id: header status: stable description: Основная навигация. evidence_refs: - production-style - id: footer status: stable description: Вторичная навигация. evidence_refs: - production-footer-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: stable basis: observed description: hover is observed at the exact production locator in evidence_refs. evidence_refs: - production-style 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: candidate basis: normative-gap description: Proposed active contract for primary-nav; approval is required before production use. behavior: Render transient press feedback while preserving native activation. semantics: No persistent ARIA state; use native button/link activation semantics. token_refs: - text.primary - action.primary - focus.ring transition: Enter during pointer/key press and resolve to hover, focus-visible or default on release. acceptance: - active behavior, semantics, token refs and transition pass the primary-nav manual state check. selected: status: stable basis: observed description: selected is observed at the exact production locator in evidence_refs. evidence_refs: - production-style open: status: not-applicable basis: not-applicable description: open is not owned by primary-nav. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by primary-nav. loading: status: not-applicable basis: not-applicable description: loading is not owned by primary-nav. success: status: not-applicable basis: not-applicable description: success is not owned by primary-nav. error: status: not-applicable basis: not-applicable description: error is not owned by primary-nav. empty: status: not-applicable basis: not-applicable description: empty is not owned by primary-nav. responsive: mode: inline-to-vertical-links reading_order: DOM order remains authoritative in every mode. rules: - Use one inline link row when it fits without wrapping. - Inside compact header use one vertical list with full-row link targets and retained aria-current. - Footer navigation may wrap by groups but keeps source order. accessibility: pattern: navigation-links semantics: - Use a labelled nav; expose the current page with aria-current=page. keyboard: - Tab and Shift+Tab move through links; Enter activates the focused link. focus: - Never implement roving tabindex for ordinary navigation links. motion: - Link state changes do not require motion. tokens: - text.primary - action.primary - focus.ring - motion.duration.feedback - motion.easing.standard content: required: - Короткие названия реальных маршрутов. constraints: - Название пункта помещается в одну строку. - Текущий пункт соответствует URL или якорю. do: - Использовать nav, ul и ссылки. dont: - Не имитировать ссылку div-элементом. examples: approved: status: stable description: Компонент primary-nav в указанном scoped production locator. evidence: https://aicjm.ru/edu/ prohibited: description: Не имитировать ссылку div-элементом. acceptance: - id: primary-nav-1 criterion: Все маршруты доступны с клавиатуры. method: manual - id: primary-nav-2 criterion: Текущий маршрут имеет aria-current. method: manual