schema: ai-cjm-component-contract/v1 id: pagination version: 2.0.0 status: stable owner: AI CJM Design purpose: Продолжает каталог предсказуемо и сообщает объём оставшегося контента. use_when: - Каталог содержит больше объектов, чем показывается в первом наборе. evidence: - id: production-style url: https://aicjm.ru/edu/styles.css?v=20260811-edu-canon locator: .case-more, .case-more:hover, .case-more i supports: - anatomy - variant:default - size:default - state:default - id: production-dom url: https://aicjm.ru/edu/ locator: '#home-cases-more.case-more' supports: - approved-example - content anatomy: - id: label required: true role: Действие и число следующих объектов. - id: progress required: false role: Показано из общего количества. - id: indicator required: true role: Направление продолжения. - id: terminal required: false role: Явное завершение выдачи. variants: - id: default status: stable description: Каноническая композиция v2. evidence_refs: - production-style sizes: - id: default status: stable description: Размер следует токенам и содержимому без локальных чисел. evidence_refs: - production-style states: default: status: stable basis: observed description: pagination default is observed at the exact production locator. evidence_refs: - production-style hover: status: not-applicable basis: not-applicable description: hover is not owned by pagination. focus-visible: status: not-applicable basis: not-applicable description: focus-visible is not owned by pagination. active: status: not-applicable basis: not-applicable description: active is not owned by pagination. selected: status: not-applicable basis: not-applicable description: selected is not owned by pagination. open: status: not-applicable basis: not-applicable description: open is not owned by pagination. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by pagination. loading: status: not-applicable basis: not-applicable description: loading is not owned by pagination. success: status: not-applicable basis: not-applicable description: success is not owned by pagination. error: status: not-applicable basis: not-applicable description: error is not owned by pagination. empty: status: not-applicable basis: not-applicable description: empty is not owned by pagination. responsive: mode: full-width-load-more-control reading_order: 'pagination: DOM order remains authoritative at every viewport.' rules: - Preserve pagination anatomy and primary action in one reading sequence. - Wrap text without horizontal page overflow and preserve evidence labels. accessibility: pattern: catalog-continuation-button semantics: - Expose pagination as the nearest correct native landmark, article or control. keyboard: - Tab reaches real actions in DOM order; Enter or Space follows the native control contract. focus: - Interactive descendants use focus.ring and preserve a visible label. motion: - Reduced motion removes nonessential transitions without hiding state or evidence. tokens: - action.primary - text.secondary - border.default - control.minimum-height - focus.ring content: required: - Действие и число следующих объектов. - Направление продолжения. constraints: - Сообщать размер следующей порции и обновлять результатный статус. - Каждый факт и asset сохраняет provenance. do: - Сообщать размер следующей порции и обновлять результатный статус. dont: - Не скрывать объекты бесконечной прокруткой без управления. examples: approved: status: stable description: Live pagination at the scoped production locator. evidence: https://aicjm.ru/edu/ prohibited: description: Не скрывать объекты бесконечной прокруткой без управления. acceptance: - id: pagination-1 criterion: Все обязательные anatomy parts присутствуют в DOM и видимы. method: automated-and-manual - id: pagination-2 criterion: На mobile сохраняются reading order, target size и отсутствие overflow. method: browser