{ "schemaVersion": 2, "sourceKind": "structured-spec", "slug": "card", "family": "card-shell", "familyRole": "base", "familyParams": {}, "name": "卡片 Card", "confidence": "high", "semanticTypeCandidates": [ "card", "surface", "container" ], "variantDimensions": [ { "name": "style", "values": [ "bordered", "shadowed" ] }, { "name": "padding", "values": [ "16px", "24px" ] }, { "name": "section", "values": [ "title", "content", "actions" ] } ], "representativeVariants": [ { "style": "bordered", "padding": "16px", "label": "边框卡片" }, { "style": "shadowed", "padding": "24px", "label": "阴影卡片" }, { "style": "bordered", "padding": "24px", "section": "title-content-actions", "label": "含标题与操作区" } ], "anatomy": { "container": "卡片容器:圆角8px,边框1px var(--color-border) 或低阴影", "titleArea": "标题区:可含标题与右侧操作", "contentArea": "内容区", "actionArea": "操作区" }, "structurePatterns": { "radius": "var(--radius-large)", "border": "1px solid var(--color-border)", "shadow": "var(--shadow-low)", "padding": "16px / 24px" }, "usageHints": [ "圆角8px,边框1px var(--color-border) 或低阴影", "内边距16px/24px", "结构:标题区、内容区、操作区" ], "doNotInvent": [ "整卡可点击", "整卡 hover 位移/边框变化", "整卡过渡时长", "整卡键盘 focus 行为", "卡片 hover 交互规范" ], "unknowns": [ "卡片网格间距规范" ], "clarificationNotes": [ { "item": "整卡可点击", "kind": "decision", "meaning": "整张卡片是否作为一个可点击整体。", "why": "实现侧 Card.html 整卡无点击处理与 pointer 光标,只有内部链接/按钮可交互。", "decision": "拍板:整卡不可点击;可交互内容必须用内部链接或按钮承载。" }, { "item": "整卡 hover 位移/边框变化", "kind": "decision", "meaning": "鼠标悬停整卡时是否产生位移、边框或阴影之外的反馈。", "why": "实现侧无整卡 hover 规则;规范只定义默认低阴影。", "decision": "拍板:无整卡 hover 反馈;悬停中阴影仅为容器视觉层级,不代表可点击。" }, { "item": "卡片 hover 交互规范", "kind": "boundary", "meaning": "指整张卡片在鼠标悬停和键盘聚焦时是否产生反馈,不是卡片内部链接或按钮自己的 hover 状态。", "why": "现有规范只定义了卡片默认低阴影与悬停中阴影,没有定义整卡是否可点击、边框或位移变化、过渡时长、光标和键盘 focus 的完整状态矩阵。", "decision": "已拍板:整卡不可点击、无整卡 hover;focus-visible 仅作用于卡片内部可聚焦元素。" }, { "item": "卡片网格间距规范", "kind": "open-question", "meaning": "指同一栅格中相邻卡片之间的 gap,以及不同容器宽度下 gap 是否保持不变。", "why": "通用规范只给出组件之间 16px/24px 的间距梯度,CardList 只说明采用栅格,没有给出卡片专用 gap、列数或响应式断点。", "decision": "保持开放:需要确认 CardList 的默认 gap、列数和响应式断点后,才能把实现值升级为正式契约。" } ] }