@jaimevalasek/aioson 1.6.0 → 1.7.0
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/CHANGELOG.md +49 -0
- package/README.md +729 -232
- package/docs/design-previews/pt.squarespace.com-homepage.html +889 -0
- package/docs/integrations/sdlc-genius-boundary.md +76 -0
- package/docs/integrations/sdlc-genius-eval-matrix.md +75 -0
- package/docs/integrations/sdlc-genius-install-checklist.md +93 -0
- package/docs/integrations/sdlc-genius-review-samples.md +86 -0
- package/docs/pt/README.md +3 -0
- package/docs/pt/agentes.md +1 -0
- package/docs/pt/comandos-cli.md +888 -2
- package/docs/pt/design-hybrid-forge.md +255 -6
- package/docs/pt/devlog-pipeline.md +270 -0
- package/docs/pt/fluxo-artefatos.md +178 -0
- package/docs/pt/hooks-session-guard.md +454 -0
- package/docs/pt/monitor-de-contexto.md +59 -5
- package/docs/pt/sdd-automation-scripts.md +557 -0
- package/docs/pt/site-forge.md +309 -0
- package/docs/pt/spec-learnings-pipeline.md +265 -0
- package/package.json +1 -1
- package/src/a2a/client.js +165 -0
- package/src/a2a/server.js +223 -0
- package/src/cli.js +235 -1
- package/src/commands/agent-audit.js +397 -0
- package/src/commands/agent-export-skill.js +229 -0
- package/src/commands/artifact-validate.js +189 -0
- package/src/commands/brief-gen.js +405 -0
- package/src/commands/brief-validate.js +65 -0
- package/src/commands/classify.js +256 -0
- package/src/commands/context-compact.js +49 -0
- package/src/commands/context-health.js +175 -0
- package/src/commands/context-monitor.js +71 -0
- package/src/commands/context-trim.js +177 -0
- package/src/commands/detect-test-runner.js +55 -0
- package/src/commands/devlog-export-brains.js +27 -0
- package/src/commands/devlog-process.js +292 -0
- package/src/commands/devlog-watch.js +131 -0
- package/src/commands/feature-close.js +165 -0
- package/src/commands/gate-check.js +228 -0
- package/src/commands/hooks-emit.js +253 -0
- package/src/commands/hooks-install.js +347 -0
- package/src/commands/learning-auto-promote.js +195 -0
- package/src/commands/learning-evolve.js +18 -9
- package/src/commands/learning-export.js +103 -0
- package/src/commands/learning-rollback.js +164 -0
- package/src/commands/live.js +25 -1
- package/src/commands/pattern-detect.js +33 -0
- package/src/commands/preflight-context.js +30 -0
- package/src/commands/preflight.js +208 -0
- package/src/commands/pulse-update.js +130 -0
- package/src/commands/runner-daemon.js +274 -0
- package/src/commands/runner-plan.js +70 -0
- package/src/commands/runner-queue-from-plan.js +166 -0
- package/src/commands/runner-queue.js +189 -0
- package/src/commands/runner-run.js +129 -0
- package/src/commands/runtime.js +47 -1
- package/src/commands/self-implement-loop.js +256 -0
- package/src/commands/session-guard.js +218 -0
- package/src/commands/sizing.js +165 -0
- package/src/commands/skill.js +65 -0
- package/src/commands/spec-checkpoint.js +177 -0
- package/src/commands/spec-status.js +79 -0
- package/src/commands/spec-sync.js +190 -0
- package/src/commands/spec-tasks.js +288 -0
- package/src/commands/squad-autorun.js +1220 -0
- package/src/commands/squad-bus.js +217 -0
- package/src/commands/squad-card.js +149 -0
- package/src/commands/squad-daemon.js +134 -0
- package/src/commands/squad-dependency-graph.js +164 -0
- package/src/commands/squad-review.js +106 -0
- package/src/commands/squad-scaffold.js +55 -0
- package/src/commands/squad-tool-register.js +157 -0
- package/src/commands/state-save.js +122 -0
- package/src/commands/update.js +2 -0
- package/src/commands/verify-gate.js +572 -0
- package/src/commands/workflow-execute.js +241 -0
- package/src/constants.js +9 -0
- package/src/install-profile.js +2 -2
- package/src/install-wizard.js +3 -2
- package/src/installer.js +6 -0
- package/src/lib/health-check.js +158 -0
- package/src/lib/hook-protocol.js +76 -0
- package/src/mcp/apps/squad-dashboard/app.js +163 -0
- package/src/mcp/apps/squad-dashboard/index.html +261 -0
- package/src/mcp/apps/squad-dashboard/mcp-manifest.json +23 -0
- package/src/mcp/resources/squad-state.js +130 -0
- package/src/preflight-engine.js +443 -0
- package/src/runner/cascade.js +97 -0
- package/src/runner/cli-launcher.js +109 -0
- package/src/runner/plan-importer.js +63 -0
- package/src/runner/queue-store.js +159 -0
- package/src/runtime-store.js +61 -3
- package/src/squad/agent-teams-adapter.js +264 -0
- package/src/squad/brief-validator.js +350 -0
- package/src/squad/bus-bridge.js +140 -0
- package/src/squad/context-compactor.js +265 -0
- package/src/squad/cross-ai-synthesizer.js +250 -0
- package/src/squad/hooks-generator.js +196 -0
- package/src/squad/inter-squad-events.js +175 -0
- package/src/squad/intra-bus.js +345 -0
- package/src/squad/learning-extractor.js +213 -0
- package/src/squad/pattern-detector.js +365 -0
- package/src/squad/preflight-context.js +296 -0
- package/src/squad/recovery-context.js +242 -71
- package/src/squad/reflection.js +365 -0
- package/src/squad/squad-scaffold.js +177 -0
- package/src/squad/state-manager.js +310 -0
- package/src/squad/task-decomposer.js +652 -0
- package/src/squad/verify-gate.js +303 -0
- package/src/updater.js +4 -5
- package/src/worker-runner.js +186 -1
- package/template/.aioson/agents/analyst.md +62 -1
- package/template/.aioson/agents/architect.md +61 -1
- package/template/.aioson/agents/design-hybrid-forge.md +14 -0
- package/template/.aioson/agents/dev.md +242 -24
- package/template/.aioson/agents/deyvin.md +66 -8
- package/template/.aioson/agents/discovery-design-doc.md +44 -0
- package/template/.aioson/agents/genome.md +14 -0
- package/template/.aioson/agents/neo.md +78 -1
- package/template/.aioson/agents/orache.md +50 -4
- package/template/.aioson/agents/orchestrator.md +197 -1
- package/template/.aioson/agents/pm.md +35 -0
- package/template/.aioson/agents/product.md +50 -5
- package/template/.aioson/agents/profiler-enricher.md +14 -0
- package/template/.aioson/agents/profiler-forge.md +14 -0
- package/template/.aioson/agents/profiler-researcher.md +14 -0
- package/template/.aioson/agents/qa.md +172 -21
- package/template/.aioson/agents/setup.md +79 -9
- package/template/.aioson/agents/sheldon.md +131 -6
- package/template/.aioson/agents/site-forge.md +1753 -0
- package/template/.aioson/agents/squad.md +162 -0
- package/template/.aioson/agents/tester.md +53 -0
- package/template/.aioson/agents/ux-ui.md +34 -1
- package/template/.aioson/brains/README.md +128 -0
- package/template/.aioson/brains/_index.json +16 -0
- package/template/.aioson/brains/scripts/query.js +103 -0
- package/template/.aioson/brains/site-forge/visual-patterns.brain.json +205 -0
- package/template/.aioson/config.md +143 -13
- package/template/.aioson/constitution.md +33 -0
- package/template/.aioson/context/project-pulse.md +34 -0
- package/template/.aioson/docs/LAYERS.md +79 -0
- package/template/.aioson/docs/README.md +76 -0
- package/template/.aioson/docs/example-external-api-context.md +72 -0
- package/template/.aioson/locales/en/agents/architect.md +17 -0
- package/template/.aioson/locales/en/agents/dev.md +79 -13
- package/template/.aioson/locales/en/agents/orache.md +6 -0
- package/template/.aioson/locales/en/agents/orchestrator.md +24 -0
- package/template/.aioson/locales/en/agents/product.md +50 -0
- package/template/.aioson/locales/en/agents/sheldon.md +115 -0
- package/template/.aioson/locales/en/agents/squad.md +14 -0
- package/template/.aioson/locales/en/agents/tester.md +6 -0
- package/template/.aioson/locales/es/agents/analyst.md +2 -0
- package/template/.aioson/locales/es/agents/architect.md +19 -0
- package/template/.aioson/locales/es/agents/dev.md +64 -4
- package/template/.aioson/locales/es/agents/deyvin.md +2 -0
- package/template/.aioson/locales/es/agents/discovery-design-doc.md +2 -0
- package/template/.aioson/locales/es/agents/genome.md +2 -0
- package/template/.aioson/locales/es/agents/neo.md +2 -0
- package/template/.aioson/locales/es/agents/orache.md +2 -0
- package/template/.aioson/locales/es/agents/orchestrator.md +26 -0
- package/template/.aioson/locales/es/agents/pair.md +2 -0
- package/template/.aioson/locales/es/agents/pm.md +2 -0
- package/template/.aioson/locales/es/agents/product.md +52 -0
- package/template/.aioson/locales/es/agents/profiler-enricher.md +2 -0
- package/template/.aioson/locales/es/agents/profiler-forge.md +2 -0
- package/template/.aioson/locales/es/agents/profiler-researcher.md +2 -0
- package/template/.aioson/locales/es/agents/qa.md +2 -0
- package/template/.aioson/locales/es/agents/setup.md +2 -0
- package/template/.aioson/locales/es/agents/sheldon.md +117 -0
- package/template/.aioson/locales/es/agents/squad.md +16 -0
- package/template/.aioson/locales/es/agents/tester.md +9 -0
- package/template/.aioson/locales/es/agents/ux-ui.md +2 -0
- package/template/.aioson/locales/fr/agents/analyst.md +2 -0
- package/template/.aioson/locales/fr/agents/architect.md +19 -0
- package/template/.aioson/locales/fr/agents/dev.md +64 -4
- package/template/.aioson/locales/fr/agents/deyvin.md +2 -0
- package/template/.aioson/locales/fr/agents/discovery-design-doc.md +2 -0
- package/template/.aioson/locales/fr/agents/genome.md +2 -0
- package/template/.aioson/locales/fr/agents/neo.md +2 -0
- package/template/.aioson/locales/fr/agents/orache.md +2 -0
- package/template/.aioson/locales/fr/agents/orchestrator.md +26 -0
- package/template/.aioson/locales/fr/agents/pair.md +2 -0
- package/template/.aioson/locales/fr/agents/pm.md +2 -0
- package/template/.aioson/locales/fr/agents/product.md +52 -0
- package/template/.aioson/locales/fr/agents/profiler-enricher.md +2 -0
- package/template/.aioson/locales/fr/agents/profiler-forge.md +2 -0
- package/template/.aioson/locales/fr/agents/profiler-researcher.md +2 -0
- package/template/.aioson/locales/fr/agents/qa.md +2 -0
- package/template/.aioson/locales/fr/agents/setup.md +2 -0
- package/template/.aioson/locales/fr/agents/sheldon.md +117 -0
- package/template/.aioson/locales/fr/agents/squad.md +16 -0
- package/template/.aioson/locales/fr/agents/tester.md +9 -0
- package/template/.aioson/locales/fr/agents/ux-ui.md +2 -0
- package/template/.aioson/locales/pt-BR/agents/analyst.md +64 -3
- package/template/.aioson/locales/pt-BR/agents/architect.md +42 -0
- package/template/.aioson/locales/pt-BR/agents/dev.md +147 -14
- package/template/.aioson/locales/pt-BR/agents/deyvin.md +47 -0
- package/template/.aioson/locales/pt-BR/agents/neo.md +62 -1
- package/template/.aioson/locales/pt-BR/agents/orchestrator.md +158 -2
- package/template/.aioson/locales/pt-BR/agents/pm.md +95 -1
- package/template/.aioson/locales/pt-BR/agents/product.md +145 -18
- package/template/.aioson/locales/pt-BR/agents/qa.md +16 -0
- package/template/.aioson/locales/pt-BR/agents/setup.md +101 -18
- package/template/.aioson/locales/pt-BR/agents/sheldon.md +132 -1
- package/template/.aioson/locales/pt-BR/agents/squad.md +14 -0
- package/template/.aioson/locales/pt-BR/agents/tester.md +449 -0
- package/template/.aioson/rules/README.md +69 -0
- package/template/.aioson/rules/data-format-convention.md +136 -0
- package/template/.aioson/rules/example-monetary-values.md +30 -0
- package/template/.aioson/schemas/squad-manifest.schema.json +124 -3
- package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -0
- package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +66 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +368 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -0
- package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +165 -0
- package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +1 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/analyst.md +30 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/architect.md +23 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/dev.md +47 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/deyvin.md +27 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +35 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/product.md +25 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/qa.md +30 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/sheldon.md +25 -0
- package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +4 -1
- package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +15 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +32 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +20 -0
- package/template/.aioson/skills/process/simplify/SKILL.md +173 -0
- package/template/.aioson/skills/static/context-budget-guide.md +46 -0
- package/template/.aioson/skills/static/harness-sensors.md +74 -0
- package/template/.aioson/skills/static/multi-agent-patterns.md +43 -0
- package/template/.aioson/skills/static/react-motion-patterns.md +22 -0
- package/template/.aioson/skills/static/static-html-patterns/checklists.md +43 -0
- package/template/.aioson/skills/static/static-html-patterns/css-tokens.md +609 -0
- package/template/.aioson/skills/static/static-html-patterns/motion.md +193 -0
- package/template/.aioson/skills/static/static-html-patterns/premium.md +711 -0
- package/template/.aioson/skills/static/static-html-patterns/structure.md +209 -0
- package/template/.aioson/skills/static/static-html-patterns/utilities.md +190 -0
- package/template/.aioson/skills/static/static-html-patterns.md +58 -1913
- package/template/.aioson/skills/static/threejs-patterns.md +929 -0
- package/template/.aioson/skills/static/web-research-cache.md +112 -0
- package/template/.aioson/tasks/implementation-plan.md +21 -1
- package/template/.claude/commands/aioson/agent/design-hybrid-forge.md +5 -0
- package/template/.claude/commands/aioson/agent/orache.md +5 -0
- package/template/.claude/commands/aioson/agent/sheldon.md +5 -0
- package/template/.claude/commands/aioson/agent/site-forge.md +5 -0
- package/template/AGENTS.md +55 -3
- package/template/CLAUDE.md +30 -0
- package/template/OPENCODE.md +4 -0
- package/template/researchs/.gitkeep +0 -0
|
@@ -98,9 +98,9 @@
|
|
|
98
98
|
"title": { "type": "string" },
|
|
99
99
|
"type": {
|
|
100
100
|
"type": "string",
|
|
101
|
-
"enum": ["worker", "agent", "clone", "assistant", "human-gate"],
|
|
101
|
+
"enum": ["worker", "agent", "clone", "assistant", "human-gate", "research", "reviewer", "skill"],
|
|
102
102
|
"default": "agent",
|
|
103
|
-
"description": "Executor type: worker (deterministic script, no LLM), agent (LLM with defined role), clone (cognitive replica of real person), assistant (domain specialist with behavioral profile), human-gate (human approval checkpoint)"
|
|
103
|
+
"description": "Executor type: worker (deterministic script, no LLM), agent (LLM with defined role), clone (cognitive replica of real person), assistant (domain specialist with behavioral profile), human-gate (human approval checkpoint), research (web research with cache, no LLM), reviewer (cross-AI review synthesis), skill (external Agent Skills Standard skill)"
|
|
104
104
|
},
|
|
105
105
|
"role": { "type": "string" },
|
|
106
106
|
"file": { "type": "string" },
|
|
@@ -121,6 +121,14 @@
|
|
|
121
121
|
"type": "string",
|
|
122
122
|
"description": "Script path for worker executors"
|
|
123
123
|
},
|
|
124
|
+
"skill": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Agent Skills Standard skill identifier (for type: 'skill'). E.g. '@anthropic/code-review'"
|
|
127
|
+
},
|
|
128
|
+
"source": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "Skill source path or package. E.g. 'npm:@org/skill', './skills/my-skill/'"
|
|
131
|
+
},
|
|
124
132
|
"domain": {
|
|
125
133
|
"type": "string",
|
|
126
134
|
"description": "Specialized domain for assistant executors"
|
|
@@ -198,11 +206,85 @@
|
|
|
198
206
|
"order": { "type": "integer", "minimum": 1 },
|
|
199
207
|
"file": { "type": "string", "description": "Path to the task .md file" },
|
|
200
208
|
"input": { "type": "string", "description": "What this task receives" },
|
|
201
|
-
"output": { "type": "string", "description": "What this task produces" }
|
|
209
|
+
"output": { "type": "string", "description": "What this task produces" },
|
|
210
|
+
"review_loop": {
|
|
211
|
+
"type": "boolean",
|
|
212
|
+
"default": false,
|
|
213
|
+
"description": "Enable evaluator-optimizer loop: dev implements, qa evaluates, repeat up to max_review_iterations"
|
|
214
|
+
},
|
|
215
|
+
"review_criteria": {
|
|
216
|
+
"type": "array",
|
|
217
|
+
"items": { "type": "string" },
|
|
218
|
+
"description": "Criteria the evaluator uses to PASS/FAIL the output (used with review_loop: true)"
|
|
219
|
+
},
|
|
220
|
+
"max_review_iterations": {
|
|
221
|
+
"type": "integer",
|
|
222
|
+
"minimum": 1,
|
|
223
|
+
"maximum": 5,
|
|
224
|
+
"default": 3,
|
|
225
|
+
"description": "Maximum dev→qa iterations before escalating to human (used with review_loop: true)"
|
|
226
|
+
},
|
|
227
|
+
"voting": {
|
|
228
|
+
"type": "object",
|
|
229
|
+
"description": "Sampling-and-Voting: run N parallel instances and reach consensus. Best for critical decisions.",
|
|
230
|
+
"properties": {
|
|
231
|
+
"instances": {
|
|
232
|
+
"type": "integer",
|
|
233
|
+
"minimum": 2,
|
|
234
|
+
"maximum": 10,
|
|
235
|
+
"default": 3,
|
|
236
|
+
"description": "Number of parallel instances to spawn"
|
|
237
|
+
},
|
|
238
|
+
"threshold": {
|
|
239
|
+
"type": "number",
|
|
240
|
+
"minimum": 0.5,
|
|
241
|
+
"maximum": 1,
|
|
242
|
+
"default": 0.66,
|
|
243
|
+
"description": "Minimum consensus fraction to accept result (0.66 = 66%)"
|
|
244
|
+
},
|
|
245
|
+
"on_no_consensus": {
|
|
246
|
+
"type": "string",
|
|
247
|
+
"enum": ["escalate", "use_majority", "fail"],
|
|
248
|
+
"default": "escalate",
|
|
249
|
+
"description": "What to do when consensus < threshold"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
202
253
|
}
|
|
203
254
|
},
|
|
204
255
|
"description": "Granular tasks within this executor, executed in order"
|
|
205
256
|
},
|
|
257
|
+
"research": {
|
|
258
|
+
"type": "object",
|
|
259
|
+
"description": "Configuration for research executor type (type: 'research')",
|
|
260
|
+
"properties": {
|
|
261
|
+
"topic": { "type": "string", "description": "Cache key / topic slug (e.g. 'youtube-shorts-2026')" },
|
|
262
|
+
"urls": {
|
|
263
|
+
"type": "array",
|
|
264
|
+
"items": { "type": "string" },
|
|
265
|
+
"description": "URLs to scrape for this research topic"
|
|
266
|
+
},
|
|
267
|
+
"cache_hours": { "type": "integer", "default": 168, "description": "Cache TTL in hours (default 168 = 7 days)" },
|
|
268
|
+
"cache_dir": { "type": "string", "default": "researchs/", "description": "Base directory for research cache" },
|
|
269
|
+
"max_sources": { "type": "integer", "default": 5, "description": "Maximum number of URLs to scrape" }
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"cross_ai": {
|
|
273
|
+
"type": "boolean",
|
|
274
|
+
"description": "If true (for reviewer type), send to multiple AI CLIs and synthesize responses"
|
|
275
|
+
},
|
|
276
|
+
"review": {
|
|
277
|
+
"type": "object",
|
|
278
|
+
"description": "Configuration for reviewer executor type",
|
|
279
|
+
"properties": {
|
|
280
|
+
"detect_clis": {
|
|
281
|
+
"type": "array",
|
|
282
|
+
"items": { "type": "string", "enum": ["claude", "gemini", "codex"] }
|
|
283
|
+
},
|
|
284
|
+
"exclude_current": { "type": "boolean", "default": true },
|
|
285
|
+
"synthesize_to": { "type": "string", "description": "Output path for REVIEWS.md" }
|
|
286
|
+
}
|
|
287
|
+
},
|
|
206
288
|
"formats": {
|
|
207
289
|
"type": "array",
|
|
208
290
|
"items": { "type": "string" },
|
|
@@ -705,5 +787,44 @@
|
|
|
705
787
|
}
|
|
706
788
|
}
|
|
707
789
|
},
|
|
790
|
+
"depends_on": {
|
|
791
|
+
"type": "array",
|
|
792
|
+
"description": "Inter-squad dependencies: this squad will consume published events from these squads before starting a run",
|
|
793
|
+
"items": {
|
|
794
|
+
"type": "object",
|
|
795
|
+
"required": ["squad", "event"],
|
|
796
|
+
"properties": {
|
|
797
|
+
"squad": {
|
|
798
|
+
"type": "string",
|
|
799
|
+
"pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$",
|
|
800
|
+
"description": "Slug of the squad whose events this squad depends on"
|
|
801
|
+
},
|
|
802
|
+
"event": {
|
|
803
|
+
"type": "string",
|
|
804
|
+
"description": "Event pattern to subscribe to (e.g. 'episode.created', 'review.*', '*')"
|
|
805
|
+
},
|
|
806
|
+
"input_mapping": {
|
|
807
|
+
"type": "object",
|
|
808
|
+
"description": "Maps event payload fields to task context fields",
|
|
809
|
+
"additionalProperties": { "type": "string" }
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
},
|
|
814
|
+
"hooks": {
|
|
815
|
+
"type": "object",
|
|
816
|
+
"description": "Hook scripts that gate squad execution (exit 0=allow, exit 2=deny)",
|
|
817
|
+
"properties": {
|
|
818
|
+
"pre_run": {
|
|
819
|
+
"type": "string",
|
|
820
|
+
"description": "Shell command to run before squad:autorun starts. Exit code 2 aborts the run."
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
"subscriptions": {
|
|
825
|
+
"type": "array",
|
|
826
|
+
"description": "Event patterns this squad subscribes to (consumed at the start of each autorun). Short form of depends_on[*].event.",
|
|
827
|
+
"items": { "type": "string" }
|
|
828
|
+
},
|
|
708
829
|
"additionalProperties": true
|
|
709
830
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "pt.squarespace.com",
|
|
3
|
+
"name": "Squarespace Design System",
|
|
4
|
+
"source": "https://pt.squarespace.com/",
|
|
5
|
+
"extractedAt": "2026-03-31",
|
|
6
|
+
"theme": "light-dark",
|
|
7
|
+
"baseUnit": "4px",
|
|
8
|
+
"referenceSkill": null,
|
|
9
|
+
"type": "extracted",
|
|
10
|
+
"designPillars": [
|
|
11
|
+
"Sharp minimalism — zero border-radius",
|
|
12
|
+
"Bold typographic hierarchy — Clarkson font family",
|
|
13
|
+
"High contrast — black/white with teal accents"
|
|
14
|
+
],
|
|
15
|
+
"colors": {
|
|
16
|
+
"primary": "#000000",
|
|
17
|
+
"accent": "#1E4C41",
|
|
18
|
+
"background": "#FFFFFF",
|
|
19
|
+
"surface": "#F5F5F4"
|
|
20
|
+
},
|
|
21
|
+
"fonts": {
|
|
22
|
+
"display": "Clarkson, Helvetica, sans-serif",
|
|
23
|
+
"body": "Helvetica Neue, Helvetica, Arial, sans-serif",
|
|
24
|
+
"serif": "Clarkson Serif, Georgia, serif"
|
|
25
|
+
},
|
|
26
|
+
"breakpoints": {
|
|
27
|
+
"desktop": 1440,
|
|
28
|
+
"tablet": 768,
|
|
29
|
+
"mobile": 390
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Squarespace (pt.squarespace.com) Design System
|
|
2
|
+
|
|
3
|
+
> Extracted from https://pt.squarespace.com/ on 2026-03-31.
|
|
4
|
+
> Deep analysis completed 2026-04-01 via static file extraction (CSS/JS/fonts/media from saved site).
|
|
5
|
+
> Visual clone skill — do not use in unrelated projects without adapting the tokens.
|
|
6
|
+
|
|
7
|
+
## Identity
|
|
8
|
+
|
|
9
|
+
**Theme:** light (with dark hero/footer sections)
|
|
10
|
+
**Personality:** Clean, professional SaaS aesthetic with strong typographic hierarchy, minimal decoration, and bold black-white contrast punctuated by occasional teal accents.
|
|
11
|
+
|
|
12
|
+
## Design pillars
|
|
13
|
+
|
|
14
|
+
1. **Sharp minimalism** — Zero border-radius throughout; geometric precision dominates
|
|
15
|
+
2. **Bold typographic hierarchy** — Large headlines (Clarkson 300), clear size differentiation
|
|
16
|
+
3. **High contrast** — Black and white with teal accent; no gradients, no shadows
|
|
17
|
+
|
|
18
|
+
## Animation philosophy
|
|
19
|
+
|
|
20
|
+
**CSS-first, zero third-party libraries.** No GSAP, no Framer Motion, no AOS, no Lottie.
|
|
21
|
+
All animations are pure `@keyframes` + class toggling + `IntersectionObserver`.
|
|
22
|
+
|
|
23
|
+
Signature effects:
|
|
24
|
+
- CTA hover: `mix-blend-mode: difference` pseudo-element (not a color transition)
|
|
25
|
+
- Mobile menu: `clip-path: polygon()` swipe animation (not `translateX`)
|
|
26
|
+
- Link underline: `background-position` animated on two linear-gradients
|
|
27
|
+
- Scroll reveals: `IntersectionObserver` adds `.in-view`, CSS handles transition
|
|
28
|
+
|
|
29
|
+
## Local assets available
|
|
30
|
+
|
|
31
|
+
These files were extracted from the saved site and are ready to use directly:
|
|
32
|
+
|
|
33
|
+
**Fonts** (`public/fonts/`):
|
|
34
|
+
- `clarkson-300.woff2` — Clarkson Light (hero headlines)
|
|
35
|
+
- `clarkson-400.woff2` — Clarkson Regular (body, nav)
|
|
36
|
+
- `clarkson-500.woff2` — Clarkson Medium (CTAs, labels)
|
|
37
|
+
- `clarkson-serif-300.woff2` — Clarkson Serif Light
|
|
38
|
+
- `clarkson-serif-400.woff2` — Clarkson Serif Regular
|
|
39
|
+
|
|
40
|
+
**Videos** (`public/videos/pt.squarespace.com/`):
|
|
41
|
+
- `video-desktop.webm` + `.mp4` — Hero background video (1280×720)
|
|
42
|
+
- `video-mobile.webm` + `.mp4` — Hero background video, portrait-optimized
|
|
43
|
+
- `templates.webm` + `.mp4` — Template showcase animation
|
|
44
|
+
- `blueprint-ai.webm` + `.mp4` — AI blueprint feature demo
|
|
45
|
+
- `design-intelligence-3.mp4` — Design intelligence card video
|
|
46
|
+
- `conversion-centered.mp4` — Final CTA section video
|
|
47
|
+
|
|
48
|
+
> Reference files — replace with your own assets before publishing.
|
|
49
|
+
|
|
50
|
+
## When to use
|
|
51
|
+
|
|
52
|
+
Activate when building projects that need a professional, clean SaaS website aesthetic inspired by Squarespace's homepage — minimal, typography-forward, with dark hero sections and teal accents.
|
|
53
|
+
|
|
54
|
+
## Activation
|
|
55
|
+
|
|
56
|
+
Load `references/design-tokens.md` before writing any component.
|
|
57
|
+
Load `references/motion.md` before implementing any animation or interaction.
|
|
58
|
+
Load `references/components.md` to get the real class naming conventions and hover mechanics.
|
|
59
|
+
|
|
60
|
+
## Skill files
|
|
61
|
+
|
|
62
|
+
- `references/design-tokens.md` — CSS custom properties (colors, typography, spacing, real easing curves)
|
|
63
|
+
- `references/components.md` — Component patterns, real class names, CTA hover mechanics
|
|
64
|
+
- `references/patterns.md` — Page layout patterns with real section IDs
|
|
65
|
+
- `references/motion.md` — All 12 extracted @keyframes, exact timings, animation usage map
|
|
66
|
+
- `references/websites.md` — Complete page topology including all 11 sections
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# Components — pt.squarespace.com
|
|
2
|
+
|
|
3
|
+
## Button
|
|
4
|
+
|
|
5
|
+
### Variants
|
|
6
|
+
|
|
7
|
+
| Variant | Description | Token Usage |
|
|
8
|
+
|---------|-------------|-------------|
|
|
9
|
+
| `primary` | Solid white bg, dark text | `bg: white`, `color: black` |
|
|
10
|
+
| `secondary` | Ghost/outline style | `border: 1px solid var(--border)` |
|
|
11
|
+
| `inline` | Text with arrow suffix | `color: var(--text-primary)` |
|
|
12
|
+
| `cta--light` | For dark backgrounds | `bg: white`, `color: black` |
|
|
13
|
+
| `cta--dark` | For light backgrounds | `bg: black`, `color: white` |
|
|
14
|
+
|
|
15
|
+
### States
|
|
16
|
+
|
|
17
|
+
- **default:** Base colors per variant
|
|
18
|
+
- **hover (primary/secondary):** `mix-blend-mode: difference` pseudo-element scales in — NOT a color transition. The white pseudo-element with blend mode creates a color inversion effect.
|
|
19
|
+
- **active:** Slight scale (0.98) if any
|
|
20
|
+
- **disabled:** `opacity: 0.5`, `pointer-events: none`
|
|
21
|
+
- **loading:** Spinner or text change
|
|
22
|
+
|
|
23
|
+
### CTA Hover Mechanic — mix-blend-mode: difference
|
|
24
|
+
|
|
25
|
+
**This is Squarespace's real CTA effect.** Do NOT implement as a simple `background-color` transition:
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
.cta--primary,
|
|
29
|
+
.cta--secondary {
|
|
30
|
+
position: relative;
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.cta--primary::after,
|
|
35
|
+
.cta--secondary::after {
|
|
36
|
+
content: '';
|
|
37
|
+
mix-blend-mode: difference;
|
|
38
|
+
background-color: white;
|
|
39
|
+
transform-origin: 0;
|
|
40
|
+
width: 100%;
|
|
41
|
+
height: 100%;
|
|
42
|
+
position: absolute;
|
|
43
|
+
top: 0;
|
|
44
|
+
left: 0;
|
|
45
|
+
transform: scaleX(0);
|
|
46
|
+
transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.cta--primary:hover::after,
|
|
50
|
+
.cta--secondary:hover::after {
|
|
51
|
+
transform: scaleX(1);
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Effect:** The white fill + `difference` blend mode inverts the button colors — a black button with white text becomes white with black text without any `color:` change.
|
|
56
|
+
|
|
57
|
+
### DOM Structure
|
|
58
|
+
```html
|
|
59
|
+
<a class="cta cta--primary cta--light">Button Text</a>
|
|
60
|
+
<!-- or -->
|
|
61
|
+
<button class="cta cta--primary">Button Text</button>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Tokens Applied
|
|
65
|
+
- `font-family: var(--font-display)`
|
|
66
|
+
- `font-size: var(--text-sm)`
|
|
67
|
+
- `font-weight: var(--font-medium)`
|
|
68
|
+
- `padding: var(--space-3) var(--space-4)`
|
|
69
|
+
- `border-radius: var(--radius-none)` (0px)
|
|
70
|
+
- `transition: var(--transition-all)`
|
|
71
|
+
- `cursor: pointer`
|
|
72
|
+
|
|
73
|
+
### Tertiary CTA — Sliding Underline (.cta--tertiary)
|
|
74
|
+
|
|
75
|
+
Text links with an animated dual-gradient underline. The underline slides in from left on hover and out to right on mouse-leave:
|
|
76
|
+
|
|
77
|
+
```css
|
|
78
|
+
.cta--tertiary {
|
|
79
|
+
background-image:
|
|
80
|
+
linear-gradient(currentColor, currentColor),
|
|
81
|
+
linear-gradient(currentColor, currentColor);
|
|
82
|
+
background-size: 100% 1px, 0% 1px;
|
|
83
|
+
background-repeat: no-repeat;
|
|
84
|
+
background-position: -200% 100%, -100% 100%;
|
|
85
|
+
animation: 0.5s cubic-bezier(0.645, 0.045, 0.355, 1) forwards ctaUnderlineSlideOut;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.cta--tertiary:hover {
|
|
89
|
+
animation: 0.5s cubic-bezier(0.645, 0.045, 0.355, 1) forwards ctaUnderlineSlideIn;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Requires `@keyframes ctaUnderlineSlideIn / ctaUnderlineSlideOut` from `motion.md`.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Navigation
|
|
98
|
+
|
|
99
|
+
### Variants
|
|
100
|
+
|
|
101
|
+
| Variant | Description |
|
|
102
|
+
|---------|-------------|
|
|
103
|
+
| `desktop` | Horizontal links, logo left, CTAs right |
|
|
104
|
+
| `mobile` | Hamburger + slide-out drawer |
|
|
105
|
+
|
|
106
|
+
### States
|
|
107
|
+
|
|
108
|
+
- **default:** Transparent background initially
|
|
109
|
+
- **scrolled:** Solid background (e.g. `bg: white`) kicks in after ~50px scroll
|
|
110
|
+
- **mobile-open:** Hamburger becomes X, drawer wipes in from right via `clip-path` animation (NOT `translateX`)
|
|
111
|
+
|
|
112
|
+
### Mobile Menu — clip-path Swipe
|
|
113
|
+
|
|
114
|
+
The mobile drawer does NOT use `transform: translateX`. It uses `clip-path: polygon()` animation:
|
|
115
|
+
|
|
116
|
+
```css
|
|
117
|
+
/* Open */
|
|
118
|
+
.global-navigation__mobile-menu--open {
|
|
119
|
+
animation: 0.6s cubic-bezier(0.165, 0.84, 0.44, 1) forwards swipeIn;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Close */
|
|
123
|
+
.global-navigation__mobile-menu--close {
|
|
124
|
+
animation: 0.6s cubic-bezier(0.165, 0.84, 0.44, 1) forwards swipeOut;
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Requires `@keyframes swipeIn / swipeOut` from `motion.md`. The menu covers full viewport, background `rgb(0, 0, 0)` with white links.
|
|
129
|
+
|
|
130
|
+
### Accordion (Mobile Nav)
|
|
131
|
+
|
|
132
|
+
Sub-menus use CSS grid transition — no JS height calculation:
|
|
133
|
+
|
|
134
|
+
```css
|
|
135
|
+
.global-navigation__accordion-content {
|
|
136
|
+
display: grid;
|
|
137
|
+
grid-template-rows: 0fr;
|
|
138
|
+
transition: grid-template-rows 0.7s cubic-bezier(0.165, 0.84, 0.44, 1),
|
|
139
|
+
padding 0.7s cubic-bezier(0.165, 0.84, 0.44, 1);
|
|
140
|
+
}
|
|
141
|
+
.global-navigation__accordion-content--open {
|
|
142
|
+
grid-template-rows: 1fr;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### DOM Structure
|
|
147
|
+
```html
|
|
148
|
+
<header class="global-navigation">
|
|
149
|
+
<a class="global-navigation__logo-link">Logo</a>
|
|
150
|
+
<nav class="global-navigation__links">
|
|
151
|
+
<a class="cta cta--inline">Products</a>
|
|
152
|
+
<a class="cta cta--inline">Solutions</a>
|
|
153
|
+
<button class="cta cta--inline">Resources</button>
|
|
154
|
+
</nav>
|
|
155
|
+
<div class="global-navigation__cta">
|
|
156
|
+
<a class="cta cta--inline">Login</a>
|
|
157
|
+
<a class="cta cta--primary cta--light">Get Started</a>
|
|
158
|
+
</div>
|
|
159
|
+
<button class="global-navigation__hamb">☰</button>
|
|
160
|
+
</header>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Tokens Applied
|
|
164
|
+
- `font-family: var(--font-body)`
|
|
165
|
+
- `font-size: var(--text-base)`
|
|
166
|
+
- `font-weight: var(--font-normal)`
|
|
167
|
+
- `padding: var(--space-4) var(--space-4)`
|
|
168
|
+
- `gap: var(--space-4)`
|
|
169
|
+
- `transition: top var(--transition-medium) var(--ease-sqsp-cta)`
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Link
|
|
174
|
+
|
|
175
|
+
### Variants
|
|
176
|
+
|
|
177
|
+
| Variant | Description | Context |
|
|
178
|
+
|---------|-------------|---------|
|
|
179
|
+
| `nav-link` | Navigation links | Header |
|
|
180
|
+
| `footer-link` | Footer links | Footer |
|
|
181
|
+
| `cta--inline` | Inline CTA with arrow | Various |
|
|
182
|
+
|
|
183
|
+
### States
|
|
184
|
+
|
|
185
|
+
- **default:** `color: var(--text-primary)` or `var(--text-inverse)`
|
|
186
|
+
- **hover:** `color: var(--text-muted)`, optional underline
|
|
187
|
+
|
|
188
|
+
### Tokens Applied
|
|
189
|
+
- `font-family: var(--font-body)`
|
|
190
|
+
- `font-size: var(--text-base)`
|
|
191
|
+
- `font-weight: var(--font-normal)`
|
|
192
|
+
- `transition: var(--transition-colors)`
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Input
|
|
197
|
+
|
|
198
|
+
### Variants
|
|
199
|
+
|
|
200
|
+
| Variant | Description |
|
|
201
|
+
|---------|-------------|
|
|
202
|
+
| `text` | Standard text input |
|
|
203
|
+
| `domain` | Domain search input with search button |
|
|
204
|
+
|
|
205
|
+
### States
|
|
206
|
+
|
|
207
|
+
- **default:** `border: 1px solid var(--border)`
|
|
208
|
+
- **focus:** Border color changes to accent
|
|
209
|
+
- **error:** Border color `var(--error)`
|
|
210
|
+
- **disabled:** `opacity: 0.5`
|
|
211
|
+
|
|
212
|
+
### DOM Structure
|
|
213
|
+
```html
|
|
214
|
+
<div class="input-wrapper">
|
|
215
|
+
<input type="text" class="input input--domain" placeholder="Digite seu domínio">
|
|
216
|
+
</div>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Tokens Applied
|
|
220
|
+
- `background: var(--bg-base)`
|
|
221
|
+
- `border: 1px solid var(--border)`
|
|
222
|
+
- `border-radius: var(--radius-none)`
|
|
223
|
+
- `padding: var(--space-3)`
|
|
224
|
+
- `font-family: var(--font-body)`
|
|
225
|
+
- `font-size: var(--text-base)`
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Card
|
|
230
|
+
|
|
231
|
+
### Variants
|
|
232
|
+
|
|
233
|
+
| Variant | Description |
|
|
234
|
+
|---------|-------------|
|
|
235
|
+
| `feature-card` | Icon + title + description |
|
|
236
|
+
| `stat-card` | Large number + label |
|
|
237
|
+
| `pricing-card` | Price + features + CTA |
|
|
238
|
+
|
|
239
|
+
### States
|
|
240
|
+
|
|
241
|
+
- **default:** No shadow, flat design
|
|
242
|
+
- **hover:** May have subtle color shift
|
|
243
|
+
|
|
244
|
+
### Tokens Applied
|
|
245
|
+
- `background: var(--bg-surface)` or transparent
|
|
246
|
+
- `border-radius: var(--radius-none)`
|
|
247
|
+
- `box-shadow: var(--shadow-sm)` (none typically)
|
|
248
|
+
- `padding: var(--space-5)`
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Card Carousel (Platform / One Platform section)
|
|
253
|
+
|
|
254
|
+
A horizontally scrollable row of cards that loop. Each card holds a `<video>` or `<img>` with an absolute text label.
|
|
255
|
+
|
|
256
|
+
### DOM Structure
|
|
257
|
+
```html
|
|
258
|
+
<div class="card-carousel">
|
|
259
|
+
<div class="card-carousel__track">
|
|
260
|
+
<div class="card-carousel__card">
|
|
261
|
+
<video autoplay muted loop playsinline preload="none">
|
|
262
|
+
<source src="/videos/website-editing.webm" type="video/webm">
|
|
263
|
+
</video>
|
|
264
|
+
<span class="card-carousel__label">Edição de website</span>
|
|
265
|
+
</div>
|
|
266
|
+
<!-- repeat cards -->
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Key CSS
|
|
272
|
+
```css
|
|
273
|
+
.card-carousel__card {
|
|
274
|
+
position: relative;
|
|
275
|
+
flex-shrink: 0;
|
|
276
|
+
border-radius: var(--radius-none);
|
|
277
|
+
overflow: hidden;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.card-carousel__label {
|
|
281
|
+
position: absolute;
|
|
282
|
+
bottom: var(--space-4);
|
|
283
|
+
left: var(--space-4);
|
|
284
|
+
font-family: var(--font-display);
|
|
285
|
+
font-size: var(--text-sm);
|
|
286
|
+
color: var(--text-inverse);
|
|
287
|
+
background: rgba(0, 0, 0, 0.55);
|
|
288
|
+
padding: var(--space-2) var(--space-3);
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Cards use `preload="none"` — only hero video is eager-loaded.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Section
|
|
297
|
+
|
|
298
|
+
### Hero Section
|
|
299
|
+
- Full viewport dark background (`background: var(--bg-inverse)`)
|
|
300
|
+
- Video background: `<video autoPlay muted loop playsInline preload="auto">` with WebM + MP4 sources
|
|
301
|
+
- Dark overlay: `rgba(0, 0, 0, 0.52)` absolute layer over video
|
|
302
|
+
- Centered content
|
|
303
|
+
- Large headline: `font-family: var(--font-display)`, `font-size: var(--text-3xl)`, `font-weight: var(--font-light)`
|
|
304
|
+
- Single CTA button (`.cta--primary.cta--light`)
|
|
305
|
+
|
|
306
|
+
### Content Section
|
|
307
|
+
- Max-width container
|
|
308
|
+
- Light background
|
|
309
|
+
- H2 headline
|
|
310
|
+
- Grid or flex content layout
|
|
311
|
+
|
|
312
|
+
### CTA Section
|
|
313
|
+
- Colored background (teal or dark)
|
|
314
|
+
- Centered headline + CTA
|
|
315
|
+
- White text
|
|
316
|
+
|
|
317
|
+
### Footer
|
|
318
|
+
- Dark background (`bg: var(--bg-inverse)`)
|
|
319
|
+
- 4-column grid of links
|
|
320
|
+
- Bottom row with legal text
|
|
321
|
+
- `padding: var(--space-16) var(--space-8)`
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Typography Components
|
|
326
|
+
|
|
327
|
+
### Display Heading (H1)
|
|
328
|
+
```css
|
|
329
|
+
font-family: var(--font-display);
|
|
330
|
+
font-size: var(--text-3xl);
|
|
331
|
+
font-weight: var(--font-light);
|
|
332
|
+
color: var(--text-inverse);
|
|
333
|
+
line-height: var(--leading-tight);
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Section Heading (H2)
|
|
337
|
+
```css
|
|
338
|
+
font-family: var(--font-display);
|
|
339
|
+
font-size: var(--text-xl);
|
|
340
|
+
font-weight: var(--font-normal);
|
|
341
|
+
color: var(--text-primary);
|
|
342
|
+
line-height: var(--leading-normal);
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Serif Heading (H3)
|
|
346
|
+
```css
|
|
347
|
+
font-family: var(--font-serif);
|
|
348
|
+
font-size: var(--text-lg);
|
|
349
|
+
font-weight: var(--font-normal);
|
|
350
|
+
color: var(--text-inverse);
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Body Text
|
|
354
|
+
```css
|
|
355
|
+
font-family: var(--font-body);
|
|
356
|
+
font-size: var(--text-base);
|
|
357
|
+
font-weight: var(--font-normal);
|
|
358
|
+
color: var(--text-primary);
|
|
359
|
+
line-height: var(--leading-relaxed);
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Caption/Muted
|
|
363
|
+
```css
|
|
364
|
+
font-family: var(--font-body);
|
|
365
|
+
font-size: var(--text-sm);
|
|
366
|
+
font-weight: var(--font-normal);
|
|
367
|
+
color: var(--text-muted);
|
|
368
|
+
```
|