ccgx-workflow 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -5
- package/README.zh-CN.md +35 -5
- package/dist/cli.mjs +1 -1
- package/dist/index.mjs +2 -2
- package/dist/shared/{ccgx-workflow.WgUzkiC3.mjs → ccgx-workflow.SJPbUy5_.mjs} +17 -110
- package/package.json +2 -1
- package/templates/commands/agents/phase-runner.md +321 -321
- package/templates/commands/autonomous.md +792 -792
- package/templates/commands/cancel.md +132 -132
- package/templates/commands/debug.md +226 -226
- package/templates/commands/status.md +206 -206
- package/templates/commands/team.md +484 -0
- package/templates/hooks/ccg-session-state.cjs +510 -510
- package/templates/scripts/ccg-phase-runner-launcher.mjs +467 -467
- package/templates/scripts/invoke-model.mjs +64 -0
- package/templates/skills/domains/ai/SKILL.md +35 -35
- package/templates/skills/domains/ai/agent-dev.md +242 -242
- package/templates/skills/domains/ai/llm-security.md +288 -288
- package/templates/skills/domains/ai/rag-system.md +542 -542
- package/templates/skills/domains/architecture/SKILL.md +43 -43
- package/templates/skills/domains/architecture/api-design.md +225 -225
- package/templates/skills/domains/architecture/cloud-native.md +285 -285
- package/templates/skills/domains/architecture/security-arch.md +297 -297
- package/templates/skills/domains/data-engineering/SKILL.md +208 -208
- package/templates/skills/domains/development/SKILL.md +47 -47
- package/templates/skills/domains/development/cpp.md +246 -246
- package/templates/skills/domains/development/go.md +323 -323
- package/templates/skills/domains/development/java.md +277 -277
- package/templates/skills/domains/development/python.md +288 -288
- package/templates/skills/domains/development/rust.md +313 -313
- package/templates/skills/domains/development/shell.md +313 -313
- package/templates/skills/domains/development/typescript.md +277 -277
- package/templates/skills/domains/devops/SKILL.md +40 -40
- package/templates/skills/domains/devops/database.md +217 -217
- package/templates/skills/domains/devops/devsecops.md +198 -198
- package/templates/skills/domains/devops/git-workflow.md +181 -181
- package/templates/skills/domains/devops/testing.md +283 -283
- package/templates/skills/domains/frontend-design/SKILL.md +244 -244
- package/templates/skills/domains/frontend-design/claymorphism/SKILL.md +121 -121
- package/templates/skills/domains/frontend-design/component-patterns.md +202 -202
- package/templates/skills/domains/frontend-design/glassmorphism/SKILL.md +142 -142
- package/templates/skills/domains/frontend-design/liquid-glass/SKILL.md +139 -139
- package/templates/skills/domains/frontend-design/neubrutalism/SKILL.md +145 -145
- package/templates/skills/domains/frontend-design/state-management.md +680 -680
- package/templates/skills/domains/frontend-design/ui-aesthetics.md +110 -110
- package/templates/skills/domains/frontend-design/ux-principles.md +156 -156
- package/templates/skills/domains/infrastructure/SKILL.md +201 -201
- package/templates/skills/domains/mobile/SKILL.md +225 -225
- package/templates/skills/domains/orchestration/SKILL.md +30 -30
- package/templates/skills/domains/orchestration/multi-agent.md +228 -228
- package/templates/skills/domains/security/SKILL.md +73 -73
- package/templates/skills/domains/security/blue-team.md +436 -436
- package/templates/skills/domains/security/code-audit.md +265 -265
- package/templates/skills/domains/security/pentest.md +226 -226
- package/templates/skills/domains/security/red-team.md +374 -374
- package/templates/skills/domains/security/threat-intel.md +372 -372
- package/templates/skills/domains/security/vuln-research.md +369 -369
- package/templates/skills/tools/lib/shared.js +98 -98
- package/templates/skills/tools/override-refusal/SKILL.md +53 -53
- package/templates/skills/tools/override-refusal/scripts/refusal_rewriter.js +226 -226
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: claymorphism
|
|
3
|
-
description: Claymorphism 黏土态设计(柔软膨胀、大圆角、双向内阴影、偏移外阴影)。
|
|
4
|
-
license: MIT
|
|
5
|
-
user-invocable: false
|
|
6
|
-
disable-model-invocation: false
|
|
7
|
-
context: fork
|
|
8
|
-
paths: "*.tsx,*.jsx,*.vue,*.svelte,*.css,*.scss"
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Claymorphism Design Spec
|
|
12
|
-
|
|
13
|
-
## 3 Core Elements
|
|
14
|
-
|
|
15
|
-
1. **Large Radius** — Generous `border-radius` (20–50px) for a puffy, inflated look
|
|
16
|
-
2. **Dual Inner Shadows** — Light inset from top-left + dark inset from bottom-right to simulate 3D clay surface
|
|
17
|
-
3. **Offset Outer Shadow** — Directional `box-shadow` offset (not centered) to ground the element
|
|
18
|
-
|
|
19
|
-
## CSS Tokens
|
|
20
|
-
|
|
21
|
-
Reference: [references/tokens.css](references/tokens.css)
|
|
22
|
-
|
|
23
|
-
```css
|
|
24
|
-
@import 'references/tokens.css';
|
|
25
|
-
|
|
26
|
-
.clay-card {
|
|
27
|
-
background: var(--clay-bg-card);
|
|
28
|
-
border-radius: var(--clay-radius-lg);
|
|
29
|
-
box-shadow: var(--clay-shadow);
|
|
30
|
-
color: var(--clay-text);
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Component Examples
|
|
35
|
-
|
|
36
|
-
### Card
|
|
37
|
-
```css
|
|
38
|
-
.clay-card {
|
|
39
|
-
background: var(--clay-bg-card);
|
|
40
|
-
border-radius: var(--clay-radius-lg);
|
|
41
|
-
box-shadow: var(--clay-shadow);
|
|
42
|
-
padding: 1.5rem;
|
|
43
|
-
color: var(--clay-text);
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Button
|
|
48
|
-
```css
|
|
49
|
-
.clay-btn {
|
|
50
|
-
background: var(--clay-bg-button);
|
|
51
|
-
border: none;
|
|
52
|
-
border-radius: var(--clay-radius-pill);
|
|
53
|
-
box-shadow: var(--clay-shadow);
|
|
54
|
-
padding: 0.75rem 1.5rem;
|
|
55
|
-
color: var(--clay-text);
|
|
56
|
-
cursor: pointer;
|
|
57
|
-
transition: box-shadow 0.2s;
|
|
58
|
-
}
|
|
59
|
-
.clay-btn:hover {
|
|
60
|
-
box-shadow: var(--clay-shadow-elevated);
|
|
61
|
-
}
|
|
62
|
-
.clay-btn:active {
|
|
63
|
-
box-shadow: var(--clay-shadow-pressed);
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Input
|
|
68
|
-
```css
|
|
69
|
-
.clay-input {
|
|
70
|
-
background: var(--clay-bg);
|
|
71
|
-
border: none;
|
|
72
|
-
border-radius: var(--clay-radius);
|
|
73
|
-
box-shadow: var(--clay-shadow-pressed);
|
|
74
|
-
padding: 0.75rem 1rem;
|
|
75
|
-
color: var(--clay-text);
|
|
76
|
-
}
|
|
77
|
-
.clay-input:focus {
|
|
78
|
-
outline: 2px solid var(--clay-accent);
|
|
79
|
-
outline-offset: 2px;
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Toggle
|
|
84
|
-
```css
|
|
85
|
-
.clay-toggle {
|
|
86
|
-
width: 56px;
|
|
87
|
-
height: 30px;
|
|
88
|
-
background: var(--clay-bg-card);
|
|
89
|
-
border-radius: var(--clay-radius-pill);
|
|
90
|
-
box-shadow: var(--clay-shadow-pressed);
|
|
91
|
-
}
|
|
92
|
-
.clay-toggle-knob {
|
|
93
|
-
width: 24px;
|
|
94
|
-
height: 24px;
|
|
95
|
-
background: var(--clay-bg);
|
|
96
|
-
border-radius: 50%;
|
|
97
|
-
box-shadow: var(--clay-shadow);
|
|
98
|
-
transition: transform 0.2s;
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Dark Mode Notes
|
|
103
|
-
|
|
104
|
-
- Dark mode reduces inner highlight intensity (`rgba(255,255,255,0.05)` vs `0.6`) to avoid glowing artifacts
|
|
105
|
-
- Outer shadow opacity increases to maintain depth on dark backgrounds
|
|
106
|
-
- Background colors shift to warm dark tones — avoid pure black to preserve the clay feel
|
|
107
|
-
- All dark tokens are defined in `[data-theme="dark"]` in `tokens.css`
|
|
108
|
-
|
|
109
|
-
## Accessibility Notes
|
|
110
|
-
|
|
111
|
-
- Ensure **contrast ratio ≥ 4.5:1** for text — clay backgrounds are muted, verify against `--clay-text`
|
|
112
|
-
- Provide visible `:focus` outlines since clay shadows alone don't indicate focus
|
|
113
|
-
- Use `prefers-contrast: more` to flatten shadows and increase text contrast
|
|
114
|
-
|
|
115
|
-
```css
|
|
116
|
-
@media (prefers-contrast: more) {
|
|
117
|
-
.clay-card {
|
|
118
|
-
box-shadow: 0 0 0 2px var(--clay-text);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: claymorphism
|
|
3
|
+
description: Claymorphism 黏土态设计(柔软膨胀、大圆角、双向内阴影、偏移外阴影)。
|
|
4
|
+
license: MIT
|
|
5
|
+
user-invocable: false
|
|
6
|
+
disable-model-invocation: false
|
|
7
|
+
context: fork
|
|
8
|
+
paths: "*.tsx,*.jsx,*.vue,*.svelte,*.css,*.scss"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Claymorphism Design Spec
|
|
12
|
+
|
|
13
|
+
## 3 Core Elements
|
|
14
|
+
|
|
15
|
+
1. **Large Radius** — Generous `border-radius` (20–50px) for a puffy, inflated look
|
|
16
|
+
2. **Dual Inner Shadows** — Light inset from top-left + dark inset from bottom-right to simulate 3D clay surface
|
|
17
|
+
3. **Offset Outer Shadow** — Directional `box-shadow` offset (not centered) to ground the element
|
|
18
|
+
|
|
19
|
+
## CSS Tokens
|
|
20
|
+
|
|
21
|
+
Reference: [references/tokens.css](references/tokens.css)
|
|
22
|
+
|
|
23
|
+
```css
|
|
24
|
+
@import 'references/tokens.css';
|
|
25
|
+
|
|
26
|
+
.clay-card {
|
|
27
|
+
background: var(--clay-bg-card);
|
|
28
|
+
border-radius: var(--clay-radius-lg);
|
|
29
|
+
box-shadow: var(--clay-shadow);
|
|
30
|
+
color: var(--clay-text);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Component Examples
|
|
35
|
+
|
|
36
|
+
### Card
|
|
37
|
+
```css
|
|
38
|
+
.clay-card {
|
|
39
|
+
background: var(--clay-bg-card);
|
|
40
|
+
border-radius: var(--clay-radius-lg);
|
|
41
|
+
box-shadow: var(--clay-shadow);
|
|
42
|
+
padding: 1.5rem;
|
|
43
|
+
color: var(--clay-text);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Button
|
|
48
|
+
```css
|
|
49
|
+
.clay-btn {
|
|
50
|
+
background: var(--clay-bg-button);
|
|
51
|
+
border: none;
|
|
52
|
+
border-radius: var(--clay-radius-pill);
|
|
53
|
+
box-shadow: var(--clay-shadow);
|
|
54
|
+
padding: 0.75rem 1.5rem;
|
|
55
|
+
color: var(--clay-text);
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
transition: box-shadow 0.2s;
|
|
58
|
+
}
|
|
59
|
+
.clay-btn:hover {
|
|
60
|
+
box-shadow: var(--clay-shadow-elevated);
|
|
61
|
+
}
|
|
62
|
+
.clay-btn:active {
|
|
63
|
+
box-shadow: var(--clay-shadow-pressed);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Input
|
|
68
|
+
```css
|
|
69
|
+
.clay-input {
|
|
70
|
+
background: var(--clay-bg);
|
|
71
|
+
border: none;
|
|
72
|
+
border-radius: var(--clay-radius);
|
|
73
|
+
box-shadow: var(--clay-shadow-pressed);
|
|
74
|
+
padding: 0.75rem 1rem;
|
|
75
|
+
color: var(--clay-text);
|
|
76
|
+
}
|
|
77
|
+
.clay-input:focus {
|
|
78
|
+
outline: 2px solid var(--clay-accent);
|
|
79
|
+
outline-offset: 2px;
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Toggle
|
|
84
|
+
```css
|
|
85
|
+
.clay-toggle {
|
|
86
|
+
width: 56px;
|
|
87
|
+
height: 30px;
|
|
88
|
+
background: var(--clay-bg-card);
|
|
89
|
+
border-radius: var(--clay-radius-pill);
|
|
90
|
+
box-shadow: var(--clay-shadow-pressed);
|
|
91
|
+
}
|
|
92
|
+
.clay-toggle-knob {
|
|
93
|
+
width: 24px;
|
|
94
|
+
height: 24px;
|
|
95
|
+
background: var(--clay-bg);
|
|
96
|
+
border-radius: 50%;
|
|
97
|
+
box-shadow: var(--clay-shadow);
|
|
98
|
+
transition: transform 0.2s;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Dark Mode Notes
|
|
103
|
+
|
|
104
|
+
- Dark mode reduces inner highlight intensity (`rgba(255,255,255,0.05)` vs `0.6`) to avoid glowing artifacts
|
|
105
|
+
- Outer shadow opacity increases to maintain depth on dark backgrounds
|
|
106
|
+
- Background colors shift to warm dark tones — avoid pure black to preserve the clay feel
|
|
107
|
+
- All dark tokens are defined in `[data-theme="dark"]` in `tokens.css`
|
|
108
|
+
|
|
109
|
+
## Accessibility Notes
|
|
110
|
+
|
|
111
|
+
- Ensure **contrast ratio ≥ 4.5:1** for text — clay backgrounds are muted, verify against `--clay-text`
|
|
112
|
+
- Provide visible `:focus` outlines since clay shadows alone don't indicate focus
|
|
113
|
+
- Use `prefers-contrast: more` to flatten shadows and increase text contrast
|
|
114
|
+
|
|
115
|
+
```css
|
|
116
|
+
@media (prefers-contrast: more) {
|
|
117
|
+
.clay-card {
|
|
118
|
+
box-shadow: 0 0 0 2px var(--clay-text);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
# 组件模式
|
|
2
|
-
|
|
3
|
-
## 布局模板
|
|
4
|
-
|
|
5
|
-
### 经典布局模式
|
|
6
|
-
圣杯布局(header/nav/main/aside/footer)、卡片网格、侧边栏、仪表盘。优先使用Grid,Flexbox做一维布局。
|
|
7
|
-
|
|
8
|
-
```css
|
|
9
|
-
.layout {
|
|
10
|
-
display: grid;
|
|
11
|
-
grid-template:
|
|
12
|
-
"header header" auto
|
|
13
|
-
"nav main" 1fr
|
|
14
|
-
"nav aside" auto
|
|
15
|
-
"footer footer" auto
|
|
16
|
-
/ 200px 1fr;
|
|
17
|
-
gap: 1rem;
|
|
18
|
-
min-height: 100vh;
|
|
19
|
-
}
|
|
20
|
-
@media (max-width: 768px) {
|
|
21
|
-
.layout {
|
|
22
|
-
grid-template: "header" "nav" "main" "aside" "footer" / 1fr;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Flexbox卡片网格
|
|
28
|
-
```css
|
|
29
|
-
.card-grid {
|
|
30
|
-
display: flex;
|
|
31
|
-
flex-wrap: wrap;
|
|
32
|
-
gap: 1.5rem;
|
|
33
|
-
}
|
|
34
|
-
.card {
|
|
35
|
-
flex: 1 1 300px;
|
|
36
|
-
max-width: 400px;
|
|
37
|
-
padding: 1.5rem;
|
|
38
|
-
border-radius: 8px;
|
|
39
|
-
box-shadow: var(--shadow-2);
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## 响应式设计
|
|
44
|
-
|
|
45
|
-
### 响应式断点策略
|
|
46
|
-
移动优先:320px基准→640px(sm)→768px(md)→1024px(lg)→1280px(xl)。使用em单位断点(除以16)。优先容器查询。
|
|
47
|
-
|
|
48
|
-
```css
|
|
49
|
-
.card-container {
|
|
50
|
-
container-type: inline-size;
|
|
51
|
-
}
|
|
52
|
-
.card {
|
|
53
|
-
padding: 1rem;
|
|
54
|
-
}
|
|
55
|
-
@container (min-width: 400px) {
|
|
56
|
-
.card {
|
|
57
|
-
display: grid;
|
|
58
|
-
grid-template-columns: 150px 1fr;
|
|
59
|
-
gap: 1rem;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## 交互模式
|
|
65
|
-
|
|
66
|
-
### 微交互设计原则
|
|
67
|
-
反馈即时(<100ms)、过渡流畅(200-300ms)、状态清晰(hover/active/focus)、减少认知负担。
|
|
68
|
-
|
|
69
|
-
```css
|
|
70
|
-
.btn {
|
|
71
|
-
transition: all 0.2s ease;
|
|
72
|
-
}
|
|
73
|
-
.btn:hover {
|
|
74
|
-
transform: translateY(-2px);
|
|
75
|
-
box-shadow: var(--shadow-3);
|
|
76
|
-
}
|
|
77
|
-
.btn:active {
|
|
78
|
-
transform: translateY(0);
|
|
79
|
-
}
|
|
80
|
-
.btn:focus-visible {
|
|
81
|
-
outline: 2px solid var(--primary);
|
|
82
|
-
outline-offset: 2px;
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## 动画
|
|
87
|
-
|
|
88
|
-
### CSS关键帧动画
|
|
89
|
-
```css
|
|
90
|
-
@keyframes fadeInUp {
|
|
91
|
-
from {
|
|
92
|
-
opacity: 0;
|
|
93
|
-
transform: translateY(20px);
|
|
94
|
-
}
|
|
95
|
-
to {
|
|
96
|
-
opacity: 1;
|
|
97
|
-
transform: translateY(0);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
.animate-in {
|
|
101
|
-
animation: fadeInUp 0.4s ease-out;
|
|
102
|
-
}
|
|
103
|
-
@media (prefers-reduced-motion: reduce) {
|
|
104
|
-
.animate-in {
|
|
105
|
-
animation: none;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Framer Motion模板
|
|
111
|
-
```javascript
|
|
112
|
-
const fadeInUp = {
|
|
113
|
-
initial: { opacity: 0, y: 20 },
|
|
114
|
-
animate: { opacity: 1, y: 0 },
|
|
115
|
-
transition: { duration: 0.4, ease: "easeOut" }
|
|
116
|
-
};
|
|
117
|
-
const stagger = {
|
|
118
|
-
animate: { transition: { staggerChildren: 0.1 } }
|
|
119
|
-
};
|
|
120
|
-
<motion.div variants={stagger}>
|
|
121
|
-
<motion.div variants={fadeInUp} />
|
|
122
|
-
</motion.div>
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## 表单设计
|
|
126
|
-
|
|
127
|
-
### 表单UX模式
|
|
128
|
-
标签上置、内联验证、清晰错误提示、禁用状态明显、必填标记、合理分组、自动聚焦首字段。
|
|
129
|
-
|
|
130
|
-
```css
|
|
131
|
-
.form-field {
|
|
132
|
-
display: flex;
|
|
133
|
-
flex-direction: column;
|
|
134
|
-
gap: 0.5rem;
|
|
135
|
-
}
|
|
136
|
-
.input {
|
|
137
|
-
padding: 0.75rem;
|
|
138
|
-
border: 1px solid #d1d5db;
|
|
139
|
-
border-radius: 6px;
|
|
140
|
-
font-size: 1rem;
|
|
141
|
-
transition: border-color 0.2s;
|
|
142
|
-
}
|
|
143
|
-
.input:focus {
|
|
144
|
-
outline: none;
|
|
145
|
-
border-color: var(--primary);
|
|
146
|
-
box-shadow: 0 0 0 3px rgba(59,130,246,0.1);
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## 卡片组件
|
|
151
|
-
|
|
152
|
-
### 玻璃拟态卡片
|
|
153
|
-
```css
|
|
154
|
-
.glass-card {
|
|
155
|
-
background: rgba(255, 255, 255, 0.1);
|
|
156
|
-
backdrop-filter: blur(10px);
|
|
157
|
-
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
158
|
-
border-radius: 12px;
|
|
159
|
-
padding: 1.5rem;
|
|
160
|
-
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## 导航模式
|
|
165
|
-
|
|
166
|
-
### 响应式导航栏
|
|
167
|
-
```css
|
|
168
|
-
.nav {
|
|
169
|
-
display: flex;
|
|
170
|
-
justify-content: space-between;
|
|
171
|
-
align-items: center;
|
|
172
|
-
padding: 1rem;
|
|
173
|
-
}
|
|
174
|
-
.nav-links {
|
|
175
|
-
display: flex;
|
|
176
|
-
gap: 2rem;
|
|
177
|
-
}
|
|
178
|
-
@media (max-width: 768px) {
|
|
179
|
-
.nav-links {
|
|
180
|
-
display: none;
|
|
181
|
-
}
|
|
182
|
-
.nav-links.open {
|
|
183
|
-
display: flex;
|
|
184
|
-
flex-direction: column;
|
|
185
|
-
position: absolute;
|
|
186
|
-
top: 100%;
|
|
187
|
-
left: 0;
|
|
188
|
-
right: 0;
|
|
189
|
-
background: white;
|
|
190
|
-
padding: 1rem;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## 审查清单
|
|
196
|
-
|
|
197
|
-
- [ ] 响应式适配
|
|
198
|
-
- [ ] 交互状态完整
|
|
199
|
-
- [ ] 无障碍支持
|
|
200
|
-
- [ ] 性能优化
|
|
201
|
-
- [ ] 浏览器兼容
|
|
202
|
-
- [ ] 动画流畅
|
|
1
|
+
# 组件模式
|
|
2
|
+
|
|
3
|
+
## 布局模板
|
|
4
|
+
|
|
5
|
+
### 经典布局模式
|
|
6
|
+
圣杯布局(header/nav/main/aside/footer)、卡片网格、侧边栏、仪表盘。优先使用Grid,Flexbox做一维布局。
|
|
7
|
+
|
|
8
|
+
```css
|
|
9
|
+
.layout {
|
|
10
|
+
display: grid;
|
|
11
|
+
grid-template:
|
|
12
|
+
"header header" auto
|
|
13
|
+
"nav main" 1fr
|
|
14
|
+
"nav aside" auto
|
|
15
|
+
"footer footer" auto
|
|
16
|
+
/ 200px 1fr;
|
|
17
|
+
gap: 1rem;
|
|
18
|
+
min-height: 100vh;
|
|
19
|
+
}
|
|
20
|
+
@media (max-width: 768px) {
|
|
21
|
+
.layout {
|
|
22
|
+
grid-template: "header" "nav" "main" "aside" "footer" / 1fr;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Flexbox卡片网格
|
|
28
|
+
```css
|
|
29
|
+
.card-grid {
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-wrap: wrap;
|
|
32
|
+
gap: 1.5rem;
|
|
33
|
+
}
|
|
34
|
+
.card {
|
|
35
|
+
flex: 1 1 300px;
|
|
36
|
+
max-width: 400px;
|
|
37
|
+
padding: 1.5rem;
|
|
38
|
+
border-radius: 8px;
|
|
39
|
+
box-shadow: var(--shadow-2);
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 响应式设计
|
|
44
|
+
|
|
45
|
+
### 响应式断点策略
|
|
46
|
+
移动优先:320px基准→640px(sm)→768px(md)→1024px(lg)→1280px(xl)。使用em单位断点(除以16)。优先容器查询。
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
.card-container {
|
|
50
|
+
container-type: inline-size;
|
|
51
|
+
}
|
|
52
|
+
.card {
|
|
53
|
+
padding: 1rem;
|
|
54
|
+
}
|
|
55
|
+
@container (min-width: 400px) {
|
|
56
|
+
.card {
|
|
57
|
+
display: grid;
|
|
58
|
+
grid-template-columns: 150px 1fr;
|
|
59
|
+
gap: 1rem;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 交互模式
|
|
65
|
+
|
|
66
|
+
### 微交互设计原则
|
|
67
|
+
反馈即时(<100ms)、过渡流畅(200-300ms)、状态清晰(hover/active/focus)、减少认知负担。
|
|
68
|
+
|
|
69
|
+
```css
|
|
70
|
+
.btn {
|
|
71
|
+
transition: all 0.2s ease;
|
|
72
|
+
}
|
|
73
|
+
.btn:hover {
|
|
74
|
+
transform: translateY(-2px);
|
|
75
|
+
box-shadow: var(--shadow-3);
|
|
76
|
+
}
|
|
77
|
+
.btn:active {
|
|
78
|
+
transform: translateY(0);
|
|
79
|
+
}
|
|
80
|
+
.btn:focus-visible {
|
|
81
|
+
outline: 2px solid var(--primary);
|
|
82
|
+
outline-offset: 2px;
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 动画
|
|
87
|
+
|
|
88
|
+
### CSS关键帧动画
|
|
89
|
+
```css
|
|
90
|
+
@keyframes fadeInUp {
|
|
91
|
+
from {
|
|
92
|
+
opacity: 0;
|
|
93
|
+
transform: translateY(20px);
|
|
94
|
+
}
|
|
95
|
+
to {
|
|
96
|
+
opacity: 1;
|
|
97
|
+
transform: translateY(0);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
.animate-in {
|
|
101
|
+
animation: fadeInUp 0.4s ease-out;
|
|
102
|
+
}
|
|
103
|
+
@media (prefers-reduced-motion: reduce) {
|
|
104
|
+
.animate-in {
|
|
105
|
+
animation: none;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Framer Motion模板
|
|
111
|
+
```javascript
|
|
112
|
+
const fadeInUp = {
|
|
113
|
+
initial: { opacity: 0, y: 20 },
|
|
114
|
+
animate: { opacity: 1, y: 0 },
|
|
115
|
+
transition: { duration: 0.4, ease: "easeOut" }
|
|
116
|
+
};
|
|
117
|
+
const stagger = {
|
|
118
|
+
animate: { transition: { staggerChildren: 0.1 } }
|
|
119
|
+
};
|
|
120
|
+
<motion.div variants={stagger}>
|
|
121
|
+
<motion.div variants={fadeInUp} />
|
|
122
|
+
</motion.div>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 表单设计
|
|
126
|
+
|
|
127
|
+
### 表单UX模式
|
|
128
|
+
标签上置、内联验证、清晰错误提示、禁用状态明显、必填标记、合理分组、自动聚焦首字段。
|
|
129
|
+
|
|
130
|
+
```css
|
|
131
|
+
.form-field {
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-direction: column;
|
|
134
|
+
gap: 0.5rem;
|
|
135
|
+
}
|
|
136
|
+
.input {
|
|
137
|
+
padding: 0.75rem;
|
|
138
|
+
border: 1px solid #d1d5db;
|
|
139
|
+
border-radius: 6px;
|
|
140
|
+
font-size: 1rem;
|
|
141
|
+
transition: border-color 0.2s;
|
|
142
|
+
}
|
|
143
|
+
.input:focus {
|
|
144
|
+
outline: none;
|
|
145
|
+
border-color: var(--primary);
|
|
146
|
+
box-shadow: 0 0 0 3px rgba(59,130,246,0.1);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 卡片组件
|
|
151
|
+
|
|
152
|
+
### 玻璃拟态卡片
|
|
153
|
+
```css
|
|
154
|
+
.glass-card {
|
|
155
|
+
background: rgba(255, 255, 255, 0.1);
|
|
156
|
+
backdrop-filter: blur(10px);
|
|
157
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
158
|
+
border-radius: 12px;
|
|
159
|
+
padding: 1.5rem;
|
|
160
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 导航模式
|
|
165
|
+
|
|
166
|
+
### 响应式导航栏
|
|
167
|
+
```css
|
|
168
|
+
.nav {
|
|
169
|
+
display: flex;
|
|
170
|
+
justify-content: space-between;
|
|
171
|
+
align-items: center;
|
|
172
|
+
padding: 1rem;
|
|
173
|
+
}
|
|
174
|
+
.nav-links {
|
|
175
|
+
display: flex;
|
|
176
|
+
gap: 2rem;
|
|
177
|
+
}
|
|
178
|
+
@media (max-width: 768px) {
|
|
179
|
+
.nav-links {
|
|
180
|
+
display: none;
|
|
181
|
+
}
|
|
182
|
+
.nav-links.open {
|
|
183
|
+
display: flex;
|
|
184
|
+
flex-direction: column;
|
|
185
|
+
position: absolute;
|
|
186
|
+
top: 100%;
|
|
187
|
+
left: 0;
|
|
188
|
+
right: 0;
|
|
189
|
+
background: white;
|
|
190
|
+
padding: 1rem;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 审查清单
|
|
196
|
+
|
|
197
|
+
- [ ] 响应式适配
|
|
198
|
+
- [ ] 交互状态完整
|
|
199
|
+
- [ ] 无障碍支持
|
|
200
|
+
- [ ] 性能优化
|
|
201
|
+
- [ ] 浏览器兼容
|
|
202
|
+
- [ ] 动画流畅
|