@vpxa/aikit 0.1.20 → 0.1.22
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/package.json +1 -1
- package/packages/cli/dist/commands/init/scaffold.d.ts +3 -3
- package/packages/cli/dist/commands/init/scaffold.js +1 -1
- package/packages/cli/dist/commands/init/user.js +4 -4
- package/packages/core/dist/types.d.ts +2 -0
- package/packages/flows/dist/adapters/claude-plugin.js +1 -1
- package/packages/flows/dist/adapters/copilot.js +1 -1
- package/packages/flows/dist/builtins.js +1 -1
- package/packages/flows/dist/loader.js +1 -1
- package/packages/flows/dist/types.d.ts +2 -2
- package/packages/indexer/dist/smart-index-scheduler.d.ts +4 -1
- package/packages/indexer/dist/smart-index-scheduler.js +1 -1
- package/packages/server/dist/index.js +1 -1
- package/packages/server/dist/tool-metadata.js +1 -1
- package/packages/server/dist/tools/flow.tools.js +1 -1
- package/packages/store/dist/lance-store.d.ts +2 -0
- package/packages/store/dist/lance-store.js +1 -1
- package/scaffold/definitions/bodies.mjs +8 -8
- package/scaffold/definitions/plugins.mjs +92 -0
- package/scaffold/definitions/protocols.mjs +2 -2
- package/scaffold/flows/aikit-advanced/README.md +10 -10
- package/scaffold/flows/aikit-advanced/flow.json +6 -6
- package/scaffold/flows/aikit-advanced/{skills/design/SKILL.md → steps/design/README.md} +30 -0
- package/scaffold/flows/aikit-advanced/{skills/execute/SKILL.md → steps/execute/README.md} +19 -0
- package/scaffold/flows/aikit-advanced/{skills/plan/SKILL.md → steps/plan/README.md} +20 -0
- package/scaffold/flows/aikit-advanced/{skills/spec/SKILL.md → steps/spec/README.md} +19 -0
- package/scaffold/flows/aikit-advanced/{skills/task/SKILL.md → steps/task/README.md} +18 -0
- package/scaffold/flows/aikit-advanced/{skills/verify/SKILL.md → steps/verify/README.md} +21 -0
- package/scaffold/flows/aikit-basic/README.md +8 -8
- package/scaffold/flows/aikit-basic/flow.json +4 -4
- package/scaffold/flows/aikit-basic/{skills/assess/SKILL.md → steps/assess/README.md} +25 -0
- package/scaffold/flows/aikit-basic/{skills/design/SKILL.md → steps/design/README.md} +32 -0
- package/scaffold/flows/aikit-basic/{skills/implement/SKILL.md → steps/implement/README.md} +24 -0
- package/scaffold/flows/aikit-basic/{skills/verify/SKILL.md → steps/verify/README.md} +25 -0
- package/scaffold/general/agents/Orchestrator.agent.md +6 -6
- package/scaffold/general/agents/Planner.agent.md +2 -2
- package/scaffold/general/agents/_shared/code-agent-base.md +2 -2
- package/scaffold/general/skills/adr-skill/SKILL.md +6 -6
- package/scaffold/general/skills/aikit/SKILL.md +10 -10
- package/scaffold/general/skills/brainstorming/SKILL.md +11 -13
- package/scaffold/general/skills/c4-architecture/SKILL.md +1 -0
- package/scaffold/general/skills/requirements-clarity/SKILL.md +5 -3
- package/scaffold/general/skills/session-handoff/SKILL.md +2 -0
- package/scaffold/general/skills/brainstorming/scripts/frame-template.html +0 -365
- package/scaffold/general/skills/brainstorming/scripts/helper.js +0 -216
- package/scaffold/general/skills/brainstorming/scripts/server.cjs +0 -9
- package/scaffold/general/skills/brainstorming/scripts/server.src.cjs +0 -249
- package/scaffold/general/skills/brainstorming/visual-companion.md +0 -430
|
@@ -43,7 +43,7 @@ core → store → embeddings → chunker → indexer → analyzers → tools
|
|
|
43
43
|
### Start (do ALL)
|
|
44
44
|
```
|
|
45
45
|
flow_status({}) # Check/resume active flow FIRST
|
|
46
|
-
# If flow active →
|
|
46
|
+
# If flow active → flow_read_instruction({ step }) → follow step instructions
|
|
47
47
|
status({}) # Check AI Kit health + onboard state
|
|
48
48
|
# If onboard not run → onboard({ path: "." }) # First-time codebase analysis
|
|
49
49
|
flow_list({}) # See available flows
|
|
@@ -189,7 +189,7 @@ Lane actions: `create` (copy files to lane), `list`, `status` (modified/added/de
|
|
|
189
189
|
| `flow_start` | `aikit flow start` | Start a named flow |
|
|
190
190
|
| `flow_step` | `aikit flow step` | Advance, skip, or redo the current step |
|
|
191
191
|
| `flow_status` | `aikit flow status` | Check if a flow is active and view the current step |
|
|
192
|
-
| `
|
|
192
|
+
| `flow_read_instruction` | `aikit flow read-instruction` | Read the current step's instruction file content directly |
|
|
193
193
|
| `flow_reset` | `aikit flow reset` | Clear flow state to start over |
|
|
194
194
|
|
|
195
195
|
### Presentation (1)
|
|
@@ -219,8 +219,8 @@ Flows are multi-step guided workflows that structure complex tasks. Each step ha
|
|
|
219
219
|
flow_list() # See available flows
|
|
220
220
|
flow_info({ flow: "aikit:basic" }) # View steps, skills, agents
|
|
221
221
|
flow_start({ flow: "aikit:basic" }) # Start — sets current step to first
|
|
222
|
-
|
|
223
|
-
# ... do the work described in the
|
|
222
|
+
flow_read_instruction({ step: "assess" }) # Read current step's instructions
|
|
223
|
+
# ... do the work described in the instruction ...
|
|
224
224
|
flow_step({ action: "next" }) # Advance to next step
|
|
225
225
|
flow_step({ action: "skip" }) # Skip current step
|
|
226
226
|
flow_step({ action: "redo" }) # Redo current step
|
|
@@ -241,14 +241,14 @@ artifacts_dir: .spec
|
|
|
241
241
|
steps:
|
|
242
242
|
- id: design
|
|
243
243
|
name: Design
|
|
244
|
-
|
|
244
|
+
instruction: steps/design/README.md
|
|
245
245
|
description: "Create the design document"
|
|
246
246
|
produces: [design.md]
|
|
247
247
|
requires: []
|
|
248
248
|
agents: [Planner]
|
|
249
249
|
- id: implement
|
|
250
250
|
name: Implement
|
|
251
|
-
|
|
251
|
+
instruction: steps/implement/README.md
|
|
252
252
|
description: "Implement the design"
|
|
253
253
|
produces: [code]
|
|
254
254
|
requires: [design]
|
|
@@ -271,7 +271,7 @@ install: []
|
|
|
271
271
|
### Agent-Flow Integration
|
|
272
272
|
|
|
273
273
|
- All code agents have a "Flows" section instructing them to check `flow_status()` first
|
|
274
|
-
- If a flow is active, the agent follows the current step's
|
|
274
|
+
- If a flow is active, the agent follows the current step's instruction via `flow_read_instruction()`
|
|
275
275
|
- After completing a step's work, advance with `flow_step({ action: "next" })`
|
|
276
276
|
- The **Orchestrator** selects and starts flows; other agents follow them
|
|
277
277
|
- The **Orchestrator** specifies `aikit` skill loading — all agents should load `aikit` skill to access flow tools
|
|
@@ -528,7 +528,7 @@ Flows are structured multi-step workflows that guide agents through complex task
|
|
|
528
528
|
| `flow_info` | Get flow details including steps and skill paths |
|
|
529
529
|
| `flow_start` | Start a named flow |
|
|
530
530
|
| `flow_step` | Advance: `next`, `skip`, or `redo` current step |
|
|
531
|
-
| `
|
|
531
|
+
| `flow_read_instruction` | Read the current step's instruction file content directly |
|
|
532
532
|
| `flow_reset` | Clear flow state to start over |
|
|
533
533
|
|
|
534
534
|
### Flow Selection
|
|
@@ -545,7 +545,7 @@ Flows are structured multi-step workflows that guide agents through complex task
|
|
|
545
545
|
### Flow Lifecycle
|
|
546
546
|
|
|
547
547
|
1. **Start**: `flow_list({})` → choose flow → `flow_start({ flow: "<name>" })`
|
|
548
|
-
2. **Each step**: `
|
|
548
|
+
2. **Each step**: `flow_read_instruction({ step: "<name>" })` → follow step instructions → complete work
|
|
549
549
|
3. **Advance**: `flow_step({ action: "next" })` → repeat from step 2
|
|
550
|
-
4. **Resume**: `flow_status({})` → if active, `
|
|
550
|
+
4. **Resume**: `flow_status({})` → if active, `flow_read_instruction` for current step → continue
|
|
551
551
|
5. **Reset**: `flow_reset({})` if you need to start over
|
|
@@ -90,7 +90,7 @@ digraph brainstorming_simple {
|
|
|
90
90
|
|
|
91
91
|
1. **Explore project context** — check files, docs, recent commits
|
|
92
92
|
2. **Assess scope** — if multiple independent subsystems, decompose before detailing (see below)
|
|
93
|
-
3. **Offer visual
|
|
93
|
+
3. **Offer visual presentation support** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. Use `present({ format: "html" })` to display brainstorming results as a rich visual dashboard.
|
|
94
94
|
4. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
|
|
95
95
|
5. **Propose 2-3 approaches via Decision Protocol** — launch ALL 4 Researcher variants in parallel to independently generate approaches. Synthesize their output into deduplicated options with trade-offs and your recommendation. Present agreements and disagreements to the user. *(See "Decision Protocol Integration" below.)*
|
|
96
96
|
6. **Present design** — in sections scaled to their complexity, get user approval after each section
|
|
@@ -122,7 +122,7 @@ digraph brainstorming_advanced {
|
|
|
122
122
|
"Assess scope" [shape=diamond];
|
|
123
123
|
"Decompose into sub-projects" [shape=box];
|
|
124
124
|
"Visual questions ahead?" [shape=diamond];
|
|
125
|
-
"Offer Visual
|
|
125
|
+
"Offer Visual Presentation\n(own message)" [shape=box];
|
|
126
126
|
"Ask clarifying questions" [shape=box];
|
|
127
127
|
"Decision Protocol:\n4 Researchers in parallel" [shape=box, style=bold];
|
|
128
128
|
"Synthesize approaches" [shape=box];
|
|
@@ -138,9 +138,9 @@ digraph brainstorming_advanced {
|
|
|
138
138
|
"Assess scope" -> "Decompose into sub-projects" [label="too large"];
|
|
139
139
|
"Assess scope" -> "Visual questions ahead?" [label="right-sized"];
|
|
140
140
|
"Decompose into sub-projects" -> "Visual questions ahead?" [label="first sub-project"];
|
|
141
|
-
"Visual questions ahead?" -> "Offer Visual
|
|
141
|
+
"Visual questions ahead?" -> "Offer Visual Presentation\n(own message)" [label="yes"];
|
|
142
142
|
"Visual questions ahead?" -> "Ask clarifying questions" [label="no"];
|
|
143
|
-
"Offer Visual
|
|
143
|
+
"Offer Visual Presentation\n(own message)" -> "Ask clarifying questions";
|
|
144
144
|
"Ask clarifying questions" -> "Decision Protocol:\n4 Researchers in parallel";
|
|
145
145
|
"Decision Protocol:\n4 Researchers in parallel" -> "Synthesize approaches";
|
|
146
146
|
"Synthesize approaches" -> "Present design sections";
|
|
@@ -242,18 +242,16 @@ Wait for the user's response. If they request changes, make them and re-run the
|
|
|
242
242
|
- **Incremental validation** — Present design, get approval before moving on
|
|
243
243
|
- **Be flexible** — Go back and clarify when something doesn't make sense
|
|
244
244
|
|
|
245
|
-
## Visual
|
|
245
|
+
## Visual Presentation Support (Advanced Mode Only)
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
Use the `present` MCP tool for showing mockups, diagrams, and visual options during brainstorming. It is available as a tool, not a separate mode. Choosing this means you can present rich visual output when it helps; it does NOT mean every question should become visual.
|
|
248
248
|
|
|
249
|
-
**Offering
|
|
250
|
-
> "Some of what we're working on might be easier to explain
|
|
249
|
+
**Offering visual presentation:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
|
|
250
|
+
> "Some of what we're working on might be easier to explain visually. I can use `present({ format: \"html\" })` to show mockups, diagrams, comparisons, and other visuals as we go. Want me to use that when helpful?"
|
|
251
251
|
|
|
252
252
|
**This offer MUST be its own message.** Do not combine it with clarifying questions, context summaries, or any other content. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
|
|
253
253
|
|
|
254
|
-
**Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use
|
|
254
|
+
**Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use visual output or plain chat. The test: **would the user understand this better by seeing it than reading it?**
|
|
255
255
|
|
|
256
|
-
- **Use
|
|
257
|
-
- **Use
|
|
258
|
-
|
|
259
|
-
If they agree to the companion, read `visual-companion.md` for the detailed setup and usage guide.
|
|
256
|
+
- **Use `present({ format: "html" })`** for visual content — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
|
|
257
|
+
- **Use regular chat** for text content — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
|
|
@@ -12,6 +12,7 @@ Generate software architecture documentation using C4 model diagrams in Mermaid
|
|
|
12
12
|
1. **Understand scope** - Determine which C4 level(s) are needed based on audience
|
|
13
13
|
2. **Analyze codebase** - Explore the system to identify components, containers, and relationships
|
|
14
14
|
3. **Generate diagrams** - Create Mermaid C4 diagrams at appropriate abstraction levels
|
|
15
|
+
> **Tip:** Use `present({ format: "html" })` to render diagrams as interactive visual output, rather than raw Mermaid code blocks. This provides a better viewing experience for stakeholders.
|
|
15
16
|
4. **Document** - Write diagrams to markdown files with explanatory context
|
|
16
17
|
|
|
17
18
|
## C4 Diagram Levels
|
|
@@ -70,7 +70,7 @@ When invoked, detect vague requirements:
|
|
|
70
70
|
1. Parse and understand core requirement
|
|
71
71
|
2. Generate feature name (kebab-case format)
|
|
72
72
|
3. Determine document version (default `1.0` unless user specifies otherwise)
|
|
73
|
-
4. Ensure
|
|
73
|
+
4. Ensure `.spec/{feature_name}/` exists for PRD output
|
|
74
74
|
5. Perform initial clarity assessment (0-100)
|
|
75
75
|
|
|
76
76
|
**Assessment Rubric**:
|
|
@@ -85,6 +85,8 @@ Technical Specificity: /25 points
|
|
|
85
85
|
- Integration points identified: 8 pts
|
|
86
86
|
- Constraints specified: 9 pts
|
|
87
87
|
|
|
88
|
+
|
|
89
|
+
If you present this rubric or a requirements scorecard to the user, use `present({ format: 'html' })` to display a rich dashboard when visual formatting would help.
|
|
88
90
|
Implementation Completeness: /25 points
|
|
89
91
|
- Edge cases considered: 8 pts
|
|
90
92
|
- Error handling mentioned: 9 pts
|
|
@@ -191,9 +193,9 @@ Once clarity score ≥ 90, generate comprehensive PRD.
|
|
|
191
193
|
|
|
192
194
|
**Output File**:
|
|
193
195
|
|
|
194
|
-
1. **Final PRD**:
|
|
196
|
+
1. **Final PRD**: `.spec/{feature_name}/requirements.md`
|
|
195
197
|
|
|
196
|
-
Use
|
|
198
|
+
Use `create_file` to save this file. Derive `{version}` from the document version recorded in the PRD (default `1.0`).
|
|
197
199
|
|
|
198
200
|
## PRD Document Structure
|
|
199
201
|
|
|
@@ -20,6 +20,8 @@ Determine which mode applies:
|
|
|
20
20
|
**Proactive suggestion?** After substantial work (5+ file edits, complex debugging, major decisions), suggest:
|
|
21
21
|
> "We've made significant progress. Consider creating a handoff document to preserve this context for future sessions. Say 'create handoff' when ready."
|
|
22
22
|
|
|
23
|
+
> **aikit Integration:** If the project uses the aikit MCP server, complement file-based handoffs with `remember({ title: "Session checkpoint: ...", content: "...", category: "conventions" })` to persist key decisions in the knowledge base. Use `search({ query: "SESSION CHECKPOINT" })` at session start to retrieve past checkpoints.
|
|
24
|
+
|
|
23
25
|
## CREATE Workflow
|
|
24
26
|
|
|
25
27
|
### Step 1: Generate Scaffold
|
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>Brainstorming</title>
|
|
7
|
-
<style>
|
|
8
|
-
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
9
|
-
|
|
10
|
-
:root {
|
|
11
|
-
--bg: #0d1117;
|
|
12
|
-
--surface: #161b22;
|
|
13
|
-
--border: #30363d;
|
|
14
|
-
--text: #e6edf3;
|
|
15
|
-
--text-muted: #8b949e;
|
|
16
|
-
--accent: #58a6ff;
|
|
17
|
-
--accent-glow: rgba(88, 166, 255, 0.15);
|
|
18
|
-
--success: #3fb950;
|
|
19
|
-
--radius: 8px;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
body {
|
|
23
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
24
|
-
background: var(--bg);
|
|
25
|
-
color: var(--text);
|
|
26
|
-
line-height: 1.6;
|
|
27
|
-
min-height: 100vh;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.frame-header {
|
|
31
|
-
padding: 16px 24px;
|
|
32
|
-
border-bottom: 1px solid var(--border);
|
|
33
|
-
display: flex;
|
|
34
|
-
align-items: center;
|
|
35
|
-
gap: 12px;
|
|
36
|
-
}
|
|
37
|
-
.frame-header .logo {
|
|
38
|
-
font-size: 14px;
|
|
39
|
-
font-weight: 600;
|
|
40
|
-
color: var(--text-muted);
|
|
41
|
-
letter-spacing: 0.5px;
|
|
42
|
-
text-transform: uppercase;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.frame-content {
|
|
46
|
-
max-width: 960px;
|
|
47
|
-
margin: 0 auto;
|
|
48
|
-
padding: 32px 24px;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* Selection indicator bar */
|
|
52
|
-
#selection-indicator {
|
|
53
|
-
position: fixed;
|
|
54
|
-
bottom: 0;
|
|
55
|
-
left: 0;
|
|
56
|
-
right: 0;
|
|
57
|
-
background: var(--surface);
|
|
58
|
-
border-top: 1px solid var(--border);
|
|
59
|
-
padding: 12px 24px;
|
|
60
|
-
display: none;
|
|
61
|
-
align-items: center;
|
|
62
|
-
justify-content: center;
|
|
63
|
-
gap: 8px;
|
|
64
|
-
font-size: 14px;
|
|
65
|
-
color: var(--accent);
|
|
66
|
-
z-index: 100;
|
|
67
|
-
}
|
|
68
|
-
#selection-indicator.visible { display: flex; }
|
|
69
|
-
#selection-indicator .check { font-size: 18px; }
|
|
70
|
-
|
|
71
|
-
/* Typography */
|
|
72
|
-
h2 {
|
|
73
|
-
font-size: 24px;
|
|
74
|
-
font-weight: 600;
|
|
75
|
-
margin-bottom: 8px;
|
|
76
|
-
color: var(--text);
|
|
77
|
-
}
|
|
78
|
-
h3 {
|
|
79
|
-
font-size: 18px;
|
|
80
|
-
font-weight: 600;
|
|
81
|
-
margin-bottom: 4px;
|
|
82
|
-
color: var(--text);
|
|
83
|
-
}
|
|
84
|
-
h4 {
|
|
85
|
-
font-size: 14px;
|
|
86
|
-
font-weight: 600;
|
|
87
|
-
margin-bottom: 8px;
|
|
88
|
-
color: var(--text);
|
|
89
|
-
}
|
|
90
|
-
.subtitle {
|
|
91
|
-
font-size: 16px;
|
|
92
|
-
color: var(--text-muted);
|
|
93
|
-
margin-bottom: 24px;
|
|
94
|
-
}
|
|
95
|
-
.section {
|
|
96
|
-
margin-bottom: 32px;
|
|
97
|
-
}
|
|
98
|
-
.label {
|
|
99
|
-
font-size: 11px;
|
|
100
|
-
font-weight: 600;
|
|
101
|
-
text-transform: uppercase;
|
|
102
|
-
letter-spacing: 0.8px;
|
|
103
|
-
color: var(--text-muted);
|
|
104
|
-
margin-bottom: 8px;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* Options (A/B/C choices) */
|
|
108
|
-
.options {
|
|
109
|
-
display: flex;
|
|
110
|
-
flex-direction: column;
|
|
111
|
-
gap: 12px;
|
|
112
|
-
margin: 16px 0;
|
|
113
|
-
}
|
|
114
|
-
.option {
|
|
115
|
-
display: flex;
|
|
116
|
-
align-items: flex-start;
|
|
117
|
-
gap: 16px;
|
|
118
|
-
padding: 16px 20px;
|
|
119
|
-
background: var(--surface);
|
|
120
|
-
border: 2px solid var(--border);
|
|
121
|
-
border-radius: var(--radius);
|
|
122
|
-
cursor: pointer;
|
|
123
|
-
transition: border-color 0.15s, background 0.15s;
|
|
124
|
-
}
|
|
125
|
-
.option:hover {
|
|
126
|
-
border-color: var(--accent);
|
|
127
|
-
background: var(--accent-glow);
|
|
128
|
-
}
|
|
129
|
-
.option.selected {
|
|
130
|
-
border-color: var(--accent);
|
|
131
|
-
background: var(--accent-glow);
|
|
132
|
-
}
|
|
133
|
-
.option .letter {
|
|
134
|
-
flex-shrink: 0;
|
|
135
|
-
width: 32px;
|
|
136
|
-
height: 32px;
|
|
137
|
-
display: flex;
|
|
138
|
-
align-items: center;
|
|
139
|
-
justify-content: center;
|
|
140
|
-
border-radius: 50%;
|
|
141
|
-
background: var(--border);
|
|
142
|
-
font-weight: 700;
|
|
143
|
-
font-size: 14px;
|
|
144
|
-
color: var(--text-muted);
|
|
145
|
-
transition: background 0.15s, color 0.15s;
|
|
146
|
-
}
|
|
147
|
-
.option.selected .letter {
|
|
148
|
-
background: var(--accent);
|
|
149
|
-
color: var(--bg);
|
|
150
|
-
}
|
|
151
|
-
.option .content { flex: 1; }
|
|
152
|
-
.option .content p {
|
|
153
|
-
color: var(--text-muted);
|
|
154
|
-
font-size: 14px;
|
|
155
|
-
margin-top: 4px;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* Cards (visual designs) */
|
|
159
|
-
.cards {
|
|
160
|
-
display: grid;
|
|
161
|
-
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
162
|
-
gap: 16px;
|
|
163
|
-
margin: 16px 0;
|
|
164
|
-
}
|
|
165
|
-
.card {
|
|
166
|
-
background: var(--surface);
|
|
167
|
-
border: 2px solid var(--border);
|
|
168
|
-
border-radius: var(--radius);
|
|
169
|
-
overflow: hidden;
|
|
170
|
-
cursor: pointer;
|
|
171
|
-
transition: border-color 0.15s, transform 0.15s;
|
|
172
|
-
}
|
|
173
|
-
.card:hover {
|
|
174
|
-
border-color: var(--accent);
|
|
175
|
-
transform: translateY(-2px);
|
|
176
|
-
}
|
|
177
|
-
.card.selected {
|
|
178
|
-
border-color: var(--accent);
|
|
179
|
-
}
|
|
180
|
-
.card-image {
|
|
181
|
-
padding: 20px;
|
|
182
|
-
background: rgba(255,255,255,0.02);
|
|
183
|
-
min-height: 180px;
|
|
184
|
-
display: flex;
|
|
185
|
-
align-items: center;
|
|
186
|
-
justify-content: center;
|
|
187
|
-
}
|
|
188
|
-
.card-body {
|
|
189
|
-
padding: 16px;
|
|
190
|
-
}
|
|
191
|
-
.card-body p {
|
|
192
|
-
color: var(--text-muted);
|
|
193
|
-
font-size: 14px;
|
|
194
|
-
margin-top: 4px;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/* Mockup container */
|
|
198
|
-
.mockup {
|
|
199
|
-
background: var(--surface);
|
|
200
|
-
border: 1px solid var(--border);
|
|
201
|
-
border-radius: var(--radius);
|
|
202
|
-
overflow: hidden;
|
|
203
|
-
margin: 16px 0;
|
|
204
|
-
}
|
|
205
|
-
.mockup-header {
|
|
206
|
-
padding: 8px 16px;
|
|
207
|
-
font-size: 12px;
|
|
208
|
-
font-weight: 600;
|
|
209
|
-
color: var(--text-muted);
|
|
210
|
-
background: rgba(255,255,255,0.03);
|
|
211
|
-
border-bottom: 1px solid var(--border);
|
|
212
|
-
}
|
|
213
|
-
.mockup-body {
|
|
214
|
-
padding: 20px;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/* Split view */
|
|
218
|
-
.split {
|
|
219
|
-
display: grid;
|
|
220
|
-
grid-template-columns: 1fr 1fr;
|
|
221
|
-
gap: 16px;
|
|
222
|
-
margin: 16px 0;
|
|
223
|
-
}
|
|
224
|
-
@media (max-width: 700px) {
|
|
225
|
-
.split { grid-template-columns: 1fr; }
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/* Pros/Cons */
|
|
229
|
-
.pros-cons {
|
|
230
|
-
display: grid;
|
|
231
|
-
grid-template-columns: 1fr 1fr;
|
|
232
|
-
gap: 16px;
|
|
233
|
-
margin: 16px 0;
|
|
234
|
-
}
|
|
235
|
-
.pros, .cons {
|
|
236
|
-
padding: 16px;
|
|
237
|
-
border-radius: var(--radius);
|
|
238
|
-
}
|
|
239
|
-
.pros {
|
|
240
|
-
background: rgba(63, 185, 80, 0.08);
|
|
241
|
-
border: 1px solid rgba(63, 185, 80, 0.3);
|
|
242
|
-
}
|
|
243
|
-
.cons {
|
|
244
|
-
background: rgba(248, 81, 73, 0.08);
|
|
245
|
-
border: 1px solid rgba(248, 81, 73, 0.3);
|
|
246
|
-
}
|
|
247
|
-
.pros h4 { color: #3fb950; }
|
|
248
|
-
.cons h4 { color: #f85149; }
|
|
249
|
-
.pros-cons ul {
|
|
250
|
-
list-style: none;
|
|
251
|
-
padding: 0;
|
|
252
|
-
}
|
|
253
|
-
.pros-cons li {
|
|
254
|
-
padding: 4px 0;
|
|
255
|
-
font-size: 14px;
|
|
256
|
-
color: var(--text-muted);
|
|
257
|
-
}
|
|
258
|
-
.pros-cons li::before {
|
|
259
|
-
margin-right: 8px;
|
|
260
|
-
font-weight: 600;
|
|
261
|
-
}
|
|
262
|
-
.pros li::before { content: '+'; color: #3fb950; }
|
|
263
|
-
.cons li::before { content: '−'; color: #f85149; }
|
|
264
|
-
|
|
265
|
-
/* Mock elements (wireframe building blocks) */
|
|
266
|
-
.mock-nav {
|
|
267
|
-
background: var(--surface);
|
|
268
|
-
border: 1px solid var(--border);
|
|
269
|
-
border-radius: var(--radius);
|
|
270
|
-
padding: 12px 20px;
|
|
271
|
-
font-size: 14px;
|
|
272
|
-
color: var(--text-muted);
|
|
273
|
-
margin-bottom: 12px;
|
|
274
|
-
}
|
|
275
|
-
.mock-sidebar {
|
|
276
|
-
width: 200px;
|
|
277
|
-
flex-shrink: 0;
|
|
278
|
-
background: var(--surface);
|
|
279
|
-
border: 1px solid var(--border);
|
|
280
|
-
border-radius: var(--radius);
|
|
281
|
-
padding: 16px;
|
|
282
|
-
font-size: 13px;
|
|
283
|
-
color: var(--text-muted);
|
|
284
|
-
margin-right: 12px;
|
|
285
|
-
}
|
|
286
|
-
.mock-content {
|
|
287
|
-
flex: 1;
|
|
288
|
-
background: var(--surface);
|
|
289
|
-
border: 1px solid var(--border);
|
|
290
|
-
border-radius: var(--radius);
|
|
291
|
-
padding: 20px;
|
|
292
|
-
font-size: 14px;
|
|
293
|
-
color: var(--text-muted);
|
|
294
|
-
min-height: 200px;
|
|
295
|
-
}
|
|
296
|
-
.mock-button {
|
|
297
|
-
padding: 8px 20px;
|
|
298
|
-
background: var(--accent);
|
|
299
|
-
color: var(--bg);
|
|
300
|
-
border: none;
|
|
301
|
-
border-radius: 6px;
|
|
302
|
-
font-size: 14px;
|
|
303
|
-
font-weight: 600;
|
|
304
|
-
cursor: pointer;
|
|
305
|
-
}
|
|
306
|
-
.mock-button:hover { opacity: 0.9; }
|
|
307
|
-
.mock-input {
|
|
308
|
-
padding: 8px 12px;
|
|
309
|
-
background: var(--surface);
|
|
310
|
-
border: 1px solid var(--border);
|
|
311
|
-
border-radius: 6px;
|
|
312
|
-
color: var(--text);
|
|
313
|
-
font-size: 14px;
|
|
314
|
-
width: 100%;
|
|
315
|
-
max-width: 300px;
|
|
316
|
-
}
|
|
317
|
-
.mock-input::placeholder { color: var(--text-muted); }
|
|
318
|
-
.placeholder {
|
|
319
|
-
background: rgba(255,255,255,0.03);
|
|
320
|
-
border: 1px dashed var(--border);
|
|
321
|
-
border-radius: var(--radius);
|
|
322
|
-
padding: 40px 20px;
|
|
323
|
-
text-align: center;
|
|
324
|
-
color: var(--text-muted);
|
|
325
|
-
font-size: 14px;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/* General list styling inside content */
|
|
329
|
-
.frame-content ul, .frame-content ol {
|
|
330
|
-
padding-left: 20px;
|
|
331
|
-
margin: 8px 0;
|
|
332
|
-
}
|
|
333
|
-
.frame-content li {
|
|
334
|
-
margin: 4px 0;
|
|
335
|
-
color: var(--text-muted);
|
|
336
|
-
font-size: 14px;
|
|
337
|
-
}
|
|
338
|
-
.frame-content p {
|
|
339
|
-
margin: 8px 0;
|
|
340
|
-
}
|
|
341
|
-
.frame-content a {
|
|
342
|
-
color: var(--accent);
|
|
343
|
-
text-decoration: none;
|
|
344
|
-
}
|
|
345
|
-
.frame-content a:hover { text-decoration: underline; }
|
|
346
|
-
|
|
347
|
-
</style>
|
|
348
|
-
</head>
|
|
349
|
-
<body>
|
|
350
|
-
<div class="frame-header">
|
|
351
|
-
<span class="logo">Brainstorming</span>
|
|
352
|
-
</div>
|
|
353
|
-
<div class="frame-content">
|
|
354
|
-
<!-- CONTENT -->
|
|
355
|
-
</div>
|
|
356
|
-
<div id="selection-indicator">
|
|
357
|
-
<span class="check">✓</span>
|
|
358
|
-
<span id="selection-text">Selected</span>
|
|
359
|
-
</div>
|
|
360
|
-
<script>
|
|
361
|
-
const BRAINSTORM_DIR = __BRAINSTORM_DIR__;
|
|
362
|
-
<!-- HELPER_SCRIPT -->
|
|
363
|
-
</script>
|
|
364
|
-
</body>
|
|
365
|
-
</html>
|