schema: ai-cjm-component-contract/v1 id: text-link version: 1.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: a.text-link, .text-link span, .method-step-links a, .task-panel__footer-head a supports: - anatomy - variant:inline - variant:standalone - size:default - state:default - id: production-dom url: https://aicjm.ru/edu/ locator: a.text-link, .method-step-links a and article prose links supports: - approved-example - content anatomy: - id: label required: true role: Осмысленный текст ссылки. - id: external-marker required: false role: Маркер внешнего перехода. variants: - id: inline status: stable description: Ссылка внутри текста. evidence_refs: - production-style - id: standalone 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: candidate basis: normative-gap description: Proposed hover contract for text-link; 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: - action.primary - action.primary-hover - focus.ring transition: Enter on pointer hover and return to default on pointer exit. acceptance: - hover behavior, semantics, token refs and transition pass the text-link manual state check. focus-visible: status: candidate basis: normative-gap description: Proposed focus-visible contract for text-link; approval is required before production use. behavior: Render focus.ring without changing layout or relying on hover. semantics: Keep the native element in DOM order and expose keyboard focus visibly. token_refs: - action.primary - action.primary-hover - focus.ring transition: Enter for keyboard-origin focus and return to default on blur. acceptance: - focus-visible behavior, semantics, token refs and transition pass the text-link manual state check. active: status: candidate basis: normative-gap description: Proposed active contract for text-link; 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: - action.primary - action.primary-hover - 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 text-link manual state check. selected: status: not-applicable basis: not-applicable description: selected is not owned by text-link. open: status: not-applicable basis: not-applicable description: open is not owned by text-link. disabled: status: not-applicable basis: not-applicable description: disabled is not owned by text-link. loading: status: not-applicable basis: not-applicable description: loading is not owned by text-link. success: status: not-applicable basis: not-applicable description: success is not owned by text-link. error: status: not-applicable basis: not-applicable description: error is not owned by text-link. empty: status: not-applicable basis: not-applicable description: empty is not owned by text-link. responsive: mode: inline-wrap-preserving-cue reading_order: DOM order remains authoritative in every mode. rules: - Inline links wrap with surrounding text and keep their underline or arrow cue. - Standalone links remain content-sized and do not become buttons on narrow screens. accessibility: pattern: native-link semantics: - Use an a element with a valid destination and a label understandable out of context. keyboard: - Tab reaches the link and Enter follows it. focus: - Focus-visible uses focus.ring without moving adjacent text. motion: - Arrow decoration may change without being required to understand the link. tokens: - action.primary - action.primary-hover - focus.ring - motion.duration.feedback content: required: - Название цели или результата перехода. constraints: - Текст понятен вне соседнего предложения. - URL не подменяет подпись. do: - Сохранять стандартную семантику ссылки. dont: - Не использовать цвет как единственный признак ссылки в длинном тексте. examples: approved: status: stable description: Компонент text-link в указанном scoped production locator. evidence: https://aicjm.ru/edu/ prohibited: description: Не использовать цвет как единственный признак ссылки в длинном тексте. acceptance: - id: text-link-1 criterion: Enter активирует ссылку. method: manual - id: text-link-2 criterion: Focus-visible сохраняет читаемость. method: manual