| name | frontend-style-encapsulation |
| description | 当修改前端样式、shared UI、设置界面、响应式/紧凑布局、输入焦点、配色、Tailwind/CSS/container query,或裁决 reusable component 的样式 owner 时使用。 |
前端样式内聚
样式是组件合同的一部分。先判断视觉状态属于组件、组件 variant、主题、宿主布局还是一次性页面编排;固有状态和容器响应默认归组件,宿主只负责位置、token 和业务数据。全局 CSS 只承载主题、reset、字体、scrollbar、token 等基础设施。
Shared UI 边界
- 基础组件纯展示、业务无关,只处理样式、布局、状态、可访问性和通用交互;不读业务 store/query、路由和业务文案,也不理解 marketplace/provider/agent/session。
- props 使用
variant/size/tone/isActive/isLoading/disabled/label 等 UI 语义;业务实体、业务 action 和状态机留在 feature component。
- 重复按钮、链接、标签、空态、提示、列表骨架、卡片壳和工具栏动作优先进入 shared UI owner,再由业务层取数、翻译、权限判断和编排。
- 颜色表达稳定语义:primary、destructive、muted 等;背景与前景成对验收,不以单个低饱和色值证明协调。
实现合同
- 响应式优先依据真实约束容器,而非 viewport;正常、窄和极窄状态按任务相关子集验证。
- 紧凑模式依次保留核心动作、收起次要文字、隐藏低频控制;文字收起后仍有图标、aria-label、tooltip 或 popover 表达含义/当前值。
- 文本输入容器聚焦前后 border width/color、background、shadow 和 ring 完全不变。填充型输入使用
border-0,不以透明边框占位;描边型保持静态描边。
- 不用宿主全局 selector 反向依赖 reusable component 内部 DOM;局部状态用组件 class、variant、container query 或包内样式入口。
- 新样式贴近 DOM owner。必须全局化时说明原因,并只依赖稳定语义类/主题层,不依赖临时 DOM 层级。
设置界面
触达设置/配置页时以 docs/designs/2026-07-18-settings-visual-system.design.md 为视觉合同:
- 统一使用 shared settings primitives 和
SettingsPage 画布,业务页不自拼根级宽度、居中、间距或分栏高度;结构差异用组件 variant。
- 普通结构是“分区 -> 分组 -> 设置行”,不为每项套 Card。一行一个意图:左侧标题/说明、右侧控件,窄容器转上下。
- 页面画布无描边;分组用浅背景和圆角,行间最多一条低对比分隔;容器嵌套不超过两层,选中优先填充。
- 列表—详情页复用
ConfigSplitPage:整体最多一条外边界,列表与详情最多一条分隔,列表项默认无边框。
- shared primitive 只用 token,保持业务无关;业务标题和说明走 i18n。后端 schema/uiHint 的派生标签不得覆盖前端用户文案,静态 locale 扫描不能替代 DOM 验收。
- MCP 商品、release notes、警告/错误和代码块可有独立语义表面,但不反向成为普通设置项默认样式。
验证
- 文本输入:真实 DOM 比较聚焦前后 border/background/shadow;填充型 border width 为
0px。
- 已有用户认可原型:相同关键视口整页截图对照层级、间距、尺寸、边界、滚动 owner 和交互态;偏差要收敛或明确有意取舍。
- 主题:真实整页逐一切换,检查 shell、header、navigation、content、文字和控件;先消除固定色与 token 的 owner 冲突。
- 设置页:覆盖桌面、窄桌面、侧面板后的窄容器和相关移动端,检查边框预算、信息层级与操作可达。
- 配色:在相关明暗主题记录背景/前景计算值并看实际组合。
- 用户可见布局不能只靠单测;使用浏览器截图、真实 DOM/CSS 或最贴近链路的构建证据。真实页面阻塞时说明缺口和替代证据。