ai-developer-skill-os 9.3.1 → 10.2.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/.agents/AGENTS.md +73 -40
- package/.agents/DEV_PROFILE.md +36 -2
- package/.agents/LICENSE +21 -21
- package/.agents/docs/ARCHITECTURE.md +56 -120
- package/.agents/docs/GOVERNANCE.md +3 -3
- package/.agents/docs/SPEC.md +137 -60
- package/.agents/docs/VERSIONING.md +25 -57
- package/.agents/docs/adr/0005-v10-platform-consolidation.md +50 -0
- package/.agents/docs/schemas/learning.schema.yml +22 -57
- package/.agents/docs/schemas/skill.schema.yml +116 -161
- package/.agents/docs/schemas/workflow.schema.yml +51 -26
- package/.agents/docs/skill-classification.md +1 -1
- package/.agents/registry/graph.json +193 -346
- package/.agents/registry/index.yaml +90 -233
- package/.agents/rules/coding.md +30 -12
- package/.agents/rules/command-safety.md +20 -9
- package/.agents/rules/global.md +234 -28
- package/.agents/rules/prompt-compiler.md +170 -0
- package/.agents/rules/safety.md +1 -1
- package/.agents/rules/security.md +1 -1
- package/.agents/rules/skill-quality.md +18 -3
- package/.agents/skills/_template/SKILL.md +238 -88
- package/.agents/skills/qk-api-data-discovery/SKILL.md +456 -0
- package/.agents/skills/qk-api-data-discovery/references/bronze-record-format.md +47 -0
- package/.agents/skills/qk-api-data-discovery/references/data-contract-yaml.md +72 -0
- package/.agents/skills/qk-api-data-discovery/references/discovery-report-template.md +110 -0
- package/.agents/skills/qk-backend-data/SKILL.md +339 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +328 -248
- package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-cleaner/SKILL.md +399 -0
- package/.agents/skills/qk-code-review/SKILL.md +320 -247
- package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-review/references/ai/{v8-schema-validation.md → schema-validation.md} +2 -2
- package/.agents/skills/qk-code-review/references/cross-cutting/async-concurrency-patterns.md +515 -515
- package/.agents/skills/qk-code-review/references/cross-cutting/error-handling-principles.md +492 -492
- package/.agents/skills/qk-code-review/references/cross-cutting/n-plus-one-queries.md +309 -309
- package/.agents/skills/qk-code-review/references/cross-cutting/sql-injection-prevention.md +307 -307
- package/.agents/skills/qk-code-review/references/cross-cutting/xss-prevention.md +263 -263
- package/.agents/skills/qk-code-review/references/languages/angular.md +768 -768
- package/.agents/skills/qk-code-review/references/languages/c.md +890 -890
- package/.agents/skills/qk-code-review/references/languages/cpp.md +893 -893
- package/.agents/skills/qk-code-review/references/languages/css-less-sass.md +661 -661
- package/.agents/skills/qk-code-review/references/languages/django.md +985 -985
- package/.agents/skills/qk-code-review/references/languages/fastapi.md +580 -580
- package/.agents/skills/qk-code-review/references/languages/go.md +993 -993
- package/.agents/skills/qk-code-review/references/languages/java.md +409 -409
- package/.agents/skills/qk-code-review/references/languages/java8.md +586 -586
- package/.agents/skills/qk-code-review/references/languages/kotlin.md +1018 -1018
- package/.agents/skills/qk-code-review/references/languages/nestjs.md +593 -593
- package/.agents/skills/qk-code-review/references/languages/php.md +684 -684
- package/.agents/skills/qk-code-review/references/languages/python.md +1073 -1073
- package/.agents/skills/qk-code-review/references/languages/qt.md +757 -757
- package/.agents/skills/qk-code-review/references/languages/react.md +871 -871
- package/.agents/skills/qk-code-review/references/languages/ruby.md +964 -964
- package/.agents/skills/qk-code-review/references/languages/rust.md +846 -846
- package/.agents/skills/qk-code-review/references/languages/svelte.md +1064 -1064
- package/.agents/skills/qk-code-review/references/languages/swift.md +936 -936
- package/.agents/skills/qk-code-review/references/languages/typescript.md +1016 -1016
- package/.agents/skills/qk-code-review/references/languages/vue.md +924 -924
- package/.agents/skills/qk-code-review/references/languages/zig.md +440 -440
- package/.agents/skills/qk-devops-release/SKILL.md +294 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +331 -247
- package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/SKILL.md +286 -152
- package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
- package/.agents/skills/qk-product-spec/SKILL.md +262 -0
- package/.agents/skills/qk-prompt-compiler/SKILL.md +444 -0
- package/.agents/skills/qk-ui-engineer/SKILL.md +286 -0
- package/.agents/workflows/_schema.yml +146 -146
- package/.agents/workflows/bug-resolution.yml +155 -121
- package/.agents/workflows/code-review.yml +127 -93
- package/.agents/workflows/context-discovery.yml +128 -94
- package/.agents/workflows/documentation.yml +124 -90
- package/.agents/workflows/feature-delivery.yml +158 -124
- package/.agents/workflows/production-release.yml +207 -173
- package/.agents/workflows/prompt-compilation.yml +126 -0
- package/.agents/workflows/refactor.yml +136 -102
- package/.agents/workflows/security-audit.yml +149 -115
- package/.agents/workflows/shared/quality-gate.yml +3 -1
- package/.agents/workflows/skin-governance.yml +149 -115
- package/.agents/workflows/spec-driven-development.yml +116 -87
- package/CHANGELOG.md +77 -0
- package/README.md +125 -205
- package/bin/install.js +324 -329
- package/package.json +68 -74
- package/tooling/build-registry.js +226 -208
- package/tooling/run-aar.js +55 -126
- package/tooling/sync-versions.js +2 -2
- package/tooling/validate-graph.js +100 -87
- package/tooling/validate-skills.js +32 -14
- package/.agents/README.md +0 -90
- package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
- package/.agents/docs/MIGRATION-STATUS.md +0 -35
- package/.agents/docs/MIGRATION-V8.md +0 -10
- package/.agents/docs/ROADMAP-V8.2.md +0 -78
- package/.agents/docs/V8-CERTIFICATION.md +0 -27
- package/.agents/docs/decisions/ADR-001-v8-migration.md +0 -58
- package/.agents/docs/decisions/ADR-002-workflow-separation.md +0 -50
- package/.agents/docs/decisions/ADR-003-registry-generated.md +0 -54
- package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +0 -27
- package/.agents/registry/capability-graph.yml +0 -390
- package/.agents/registry/skills-index.yml +0 -305
- package/.agents/skills/_template/capability.yaml +0 -34
- package/.agents/skills/_template/evals/scorecard.yaml +0 -19
- package/.agents/skills/qk-access-policy/SKILL.md +0 -206
- package/.agents/skills/qk-access-policy/capability.yaml +0 -23
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
- package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
- package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
- package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
- package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
- package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
- package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
- package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
- package/.agents/skills/qk-code-review/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/SKILL.md +0 -198
- package/.agents/skills/qk-context-loader/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
- package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
- package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
- package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
- package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
- package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-docs/SKILL.md +0 -193
- package/.agents/skills/qk-docs/capability.yaml +0 -23
- package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
- package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
- package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
- package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
- package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
- package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-help/SKILL.md +0 -107
- package/.agents/skills/qk-help/capability.yaml +0 -20
- package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
- package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
- package/.agents/skills/qk-product-specification/SKILL.md +0 -187
- package/.agents/skills/qk-product-specification/capability.yaml +0 -27
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-production-release/SKILL.md +0 -188
- package/.agents/skills/qk-production-release/capability.yaml +0 -27
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-audit/SKILL.md +0 -174
- package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
- package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-health/SKILL.md +0 -202
- package/.agents/skills/qk-project-health/capability.yaml +0 -23
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-project-memory/SKILL.md +0 -303
- package/.agents/skills/qk-project-memory/capability.yaml +0 -23
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-refactor/SKILL.md +0 -243
- package/.agents/skills/qk-refactor/capability.yaml +0 -26
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-security-audit/SKILL.md +0 -280
- package/.agents/skills/qk-security-audit/capability.yaml +0 -29
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
- package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
- package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
- package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
- package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/.agents/skills/qk-ui-builder/references/color.md +0 -115
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
- package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
- package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
- package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
- package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
- package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-upgrade/SKILL.md +0 -301
- package/.agents/skills/qk-upgrade/capability.yaml +0 -24
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
- package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
- package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
- package/.agents/workflows/research.yml +0 -75
- package/.agents/workflows/skill-evolution.yml +0 -97
- package/tooling/fix-refactor.js +0 -8
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# Interaction & States
|
|
2
|
-
|
|
3
|
-
Foundational rules for interactive element states. Every interactive control must define a complete, accessible state set — not just default and hover.
|
|
4
|
-
|
|
5
|
-
## The 8 States
|
|
6
|
-
|
|
7
|
-
Every interactive component should account for:
|
|
8
|
-
|
|
9
|
-
1. **default** — resting, ready to interact.
|
|
10
|
-
2. **hover** — pointer is over (pointer devices only).
|
|
11
|
-
3. **focus** — keyboard / programmatic focus.
|
|
12
|
-
4. **active** — being pressed/clicked.
|
|
13
|
-
5. **disabled** — not interactive, clearly shown.
|
|
14
|
-
6. **loading** — work in progress, feedback given.
|
|
15
|
-
7. **error** — invalid input or failed action, with message.
|
|
16
|
-
8. **success** — completed action, confirmed.
|
|
17
|
-
|
|
18
|
-
```css
|
|
19
|
-
.btn { /* default */ }
|
|
20
|
-
.btn:hover { background: var(--color-accent-hover); }
|
|
21
|
-
.btn:focus-visible { /* focus ring */ }
|
|
22
|
-
.btn:active { transform: translateY(1px); }
|
|
23
|
-
.btn:disabled { /* disabled */ }
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Focus: Visible Ring
|
|
27
|
-
|
|
28
|
-
Always provide a visible focus indicator. **Never** use `outline: none` without a replacement. Use `:focus-visible` so mouse users aren't spammed but keyboard users are clearly shown.
|
|
29
|
-
|
|
30
|
-
```css
|
|
31
|
-
.btn:focus { outline: none; } /* remove default */
|
|
32
|
-
.btn:focus-visible {
|
|
33
|
-
outline: 2px solid var(--color-accent);
|
|
34
|
-
outline-offset: 2px;
|
|
35
|
-
/* or a ring via box-shadow */
|
|
36
|
-
box-shadow: 0 0 0 3px oklch(55% 0.16 250 / 0.4);
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
The focus ring must meet 3:1 contrast against adjacent colors.
|
|
41
|
-
|
|
42
|
-
## Disabled: Not Opacity-Only
|
|
43
|
-
|
|
44
|
-
A disabled control must combine **reduced opacity** with **`cursor: not-allowed`** and remain non-interactive. Opacity alone is insufficient and confusing.
|
|
45
|
-
|
|
46
|
-
```css
|
|
47
|
-
.btn:disabled,
|
|
48
|
-
.btn[aria-disabled="true"] {
|
|
49
|
-
opacity: 0.5;
|
|
50
|
-
cursor: not-allowed;
|
|
51
|
-
pointer-events: none; /* or guard in JS */
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Also dim/hide associated helper text appropriately, and keep the control in the a11y tree (use `aria-disabled` rather than removing the element).
|
|
56
|
-
|
|
57
|
-
## Loading: Skeleton or Spinner
|
|
58
|
-
|
|
59
|
-
While awaiting data or an action, show a **skeleton** or **spinner** — never bare "Loading..." text.
|
|
60
|
-
|
|
61
|
-
```css
|
|
62
|
-
/* Skeleton shimmer */
|
|
63
|
-
.skeleton {
|
|
64
|
-
background: linear-gradient(90deg, var(--color-surface) 25%, var(--color-border) 50%, var(--color-surface) 75%);
|
|
65
|
-
background-size: 200% 100%;
|
|
66
|
-
animation: shimmer 1.2s ease-in-out infinite;
|
|
67
|
-
border-radius: 6px;
|
|
68
|
-
}
|
|
69
|
-
@keyframes shimmer { to { background-position: -200% 0; } }
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
```html
|
|
73
|
-
<!-- Button loading: keep label, add spinner, disable -->
|
|
74
|
-
<button class="btn" disabled aria-busy="true">
|
|
75
|
-
<span class="spinner" aria-hidden="true"></span> Saving
|
|
76
|
-
</button>
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
For data regions, render skeleton placeholders preserving layout to avoid shift (see motion.md: no layout animation).
|
|
80
|
-
|
|
81
|
-
## Error: Clear Message + Retry
|
|
82
|
-
|
|
83
|
-
Error states must surface a **human-readable message** and, when recoverable, a **retry / fix action**.
|
|
84
|
-
|
|
85
|
-
```html
|
|
86
|
-
<div class="field error">
|
|
87
|
-
<label for="email">Email</label>
|
|
88
|
-
<input id="email" aria-invalid="true" aria-describedby="email-err" />
|
|
89
|
-
<p id="email-err" class="error-msg">Enter a valid email like name@example.com.</p>
|
|
90
|
-
</div>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
```css
|
|
94
|
-
.field.error input { border-color: var(--color-error); }
|
|
95
|
-
.error-msg { color: var(--color-error); font-size: var(--text-sm); }
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Convey error with more than color (icon + text) for accessibility.
|
|
99
|
-
|
|
100
|
-
## Success
|
|
101
|
-
|
|
102
|
-
Confirm completed actions with a brief, non-blocking indicator. Keep it subtle and auto-dismiss where appropriate.
|
|
103
|
-
|
|
104
|
-
```css
|
|
105
|
-
.toast.success { background: var(--color-success); color: oklch(99% 0 0); }
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Practical Checklist
|
|
109
|
-
|
|
110
|
-
- [ ] All 8 states defined per interactive component.
|
|
111
|
-
- [ ] Focus uses `:focus-visible` ring, no naked `outline: none`.
|
|
112
|
-
- [ ] Disabled = opacity + `cursor: not-allowed` + inert.
|
|
113
|
-
- [ ] Loading uses skeleton/spinner, not text-only.
|
|
114
|
-
- [ ] Error shows message + retry and isn't color-only.
|
|
115
|
-
- [ ] Success confirmation is present and subtle.
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# Layout & Space
|
|
2
|
-
|
|
3
|
-
Foundational rules for grids, spacing rhythm, and structural layout. The goal is predictable, maintainable layouts built from flow and flex/grid — never magic numbers or absolute offsets.
|
|
4
|
-
|
|
5
|
-
## 4pt Base Spacing Scale
|
|
6
|
-
|
|
7
|
-
All spacing derives from a **4px base**. Use only these steps. Do not use arbitrary values like `7px`, `13px`, `23px`.
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
4px --space-1 tight (icon gaps, inline)
|
|
11
|
-
8px --space-2 small (label→control)
|
|
12
|
-
12px --space-3 control padding, list gaps
|
|
13
|
-
16px --space-4 default gap between elements
|
|
14
|
-
20px --space-5 card internal padding
|
|
15
|
-
24px --space-6 section internal padding
|
|
16
|
-
32px --space-8 gap between related blocks
|
|
17
|
-
40px --space-10 large block separation
|
|
18
|
-
48px --space-12 section separation
|
|
19
|
-
64px --space-16 major section separation
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
:root {
|
|
24
|
-
--space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem;
|
|
25
|
-
--space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem;
|
|
26
|
-
--space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem;
|
|
27
|
-
--space-16: 4rem;
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Grid & Flexbox (NO Absolute Positioning)
|
|
32
|
-
|
|
33
|
-
Lay out with **CSS Grid** and **Flexbox**. Do not use `position: absolute` / `position: fixed` for structural layout (overlays, tooltips, and sticky headers are the only exceptions, and they must be scoped).
|
|
34
|
-
|
|
35
|
-
```css
|
|
36
|
-
/* Page shell */
|
|
37
|
-
.container {
|
|
38
|
-
width: 100%;
|
|
39
|
-
max-width: 1200px;
|
|
40
|
-
margin-inline: auto;
|
|
41
|
-
padding-inline: var(--space-6);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* Responsive card grid */
|
|
45
|
-
.grid {
|
|
46
|
-
display: grid;
|
|
47
|
-
grid-template-columns: repeat(auto-fill, minmax(0, 1fr));
|
|
48
|
-
gap: var(--space-6);
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
```css
|
|
53
|
-
/* Inline control row */
|
|
54
|
-
.row {
|
|
55
|
-
display: flex;
|
|
56
|
-
align-items: center;
|
|
57
|
-
gap: var(--space-3);
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Minimum Whitespace Between Sections
|
|
62
|
-
|
|
63
|
-
Maintain **at least 16px** (`--space-4`) of separation between distinct sections; prefer `--space-12`/`--space-16` between major page sections.
|
|
64
|
-
|
|
65
|
-
```css
|
|
66
|
-
section + section { margin-top: var(--space-12); }
|
|
67
|
-
.card { padding: var(--space-5); }
|
|
68
|
-
.stack > * + * { margin-top: var(--space-4); } /* vertical rhythm */
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Max Content Width
|
|
72
|
-
|
|
73
|
-
- **Desktop:** cap content at **1200px**, centered.
|
|
74
|
-
- **Mobile:** content is **100%** width (minus safe padding). Never force desktop widths onto small screens.
|
|
75
|
-
|
|
76
|
-
```css
|
|
77
|
-
.container { max-width: 1200px; width: 100%; }
|
|
78
|
-
@media (max-width: 640px) {
|
|
79
|
-
.container { max-width: 100%; padding-inline: var(--space-4); }
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## No "Margin: Auto Soup"
|
|
84
|
-
|
|
85
|
-
Do not scatter `margin: auto` to push elements around. Centralize alignment through flex/grid `justify-content` / `align-items` / `gap`. `margin-inline: auto` is permitted **only** for the top-level `.container` centering.
|
|
86
|
-
|
|
87
|
-
```css
|
|
88
|
-
/* Bad: fighting the layout with auto margins */
|
|
89
|
-
.sidebar { margin-left: auto; margin-right: 12px; }
|
|
90
|
-
|
|
91
|
-
/* Good: let the grid place it */
|
|
92
|
-
.layout { display: grid; grid-template-columns: 240px 1fr; gap: var(--space-8); }
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Stack Utility Pattern
|
|
96
|
-
|
|
97
|
-
Prefer an explicit vertical stack helper over chained margins.
|
|
98
|
-
|
|
99
|
-
```css
|
|
100
|
-
.stack { display: flex; flex-direction: column; }
|
|
101
|
-
.stack-4 > * + * { margin-top: var(--space-4); }
|
|
102
|
-
.stack-6 > * + * { margin-top: var(--space-6); }
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Practical Checklist
|
|
106
|
-
|
|
107
|
-
- [ ] All spacing uses the 4pt scale tokens.
|
|
108
|
-
- [ ] Layout via grid/flex; no absolute positioning for structure.
|
|
109
|
-
- [ ] ≥16px between sections; major sections use larger gaps.
|
|
110
|
-
- [ ] Desktop max 1200px, mobile 100%.
|
|
111
|
-
- [ ] No scattered `margin: auto` hacks.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# 01 — Bento Grid
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** asymmetric grid, mixed card sizes, icon-led sections, no equal-height rows.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+-------+-------+
|
|
9
|
-
| | |
|
|
10
|
-
| A | B |
|
|
11
|
-
| | |
|
|
12
|
-
+---+---+-------+
|
|
13
|
-
| C | D |
|
|
14
|
-
+---+---+-------+
|
|
15
|
-
| E |
|
|
16
|
-
+-----------------+
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Rules
|
|
20
|
-
|
|
21
|
-
- Card A: hero metric or primary action (spans 2 cols on desktop)
|
|
22
|
-
- Card B: secondary metric or visual
|
|
23
|
-
- Card C: tertiary content
|
|
24
|
-
- Card D: tertiary content
|
|
25
|
-
- Card E: full-width footer or CTA
|
|
26
|
-
|
|
27
|
-
## Typography
|
|
28
|
-
|
|
29
|
-
- Heading: display style from theme
|
|
30
|
-
- Body: body font from theme
|
|
31
|
-
- Metric numbers: tabular-nums, display weight
|
|
32
|
-
|
|
33
|
-
## Spacing
|
|
34
|
-
|
|
35
|
-
- Grid gap: `--space-6` (24px)
|
|
36
|
-
- Card padding: `--space-5` (20px)
|
|
37
|
-
- Inner padding: `--space-4` (16px)
|
|
38
|
-
|
|
39
|
-
## Anti-Patterns
|
|
40
|
-
|
|
41
|
-
- ❌ 3 equal columns
|
|
42
|
-
- ❌ Card-in-card
|
|
43
|
-
- ❌ All cards same height
|
|
44
|
-
|
|
45
|
-
## Theme Affinity
|
|
46
|
-
|
|
47
|
-
- ✅ Cobalt, Carnival, Lumen
|
|
48
|
-
- ⚠️ Hum (needs more whitespace)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# 02 — Long Document
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** single-column long scroll, generous line length control, anchored section nav, docs/blogs.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------+
|
|
9
|
-
| Sticky Title Bar |
|
|
10
|
-
+------+--------------+
|
|
11
|
-
| TOC | Content |
|
|
12
|
-
| Nav | (headings, |
|
|
13
|
-
| | paragraphs|
|
|
14
|
-
| | code, img)|
|
|
15
|
-
| | |
|
|
16
|
-
+------+--------------+
|
|
17
|
-
| Footer / Pager |
|
|
18
|
-
+---------------------+
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Rules
|
|
22
|
-
|
|
23
|
-
- Content column: max-width 70ch, centered within reading area
|
|
24
|
-
- TOC: sticky, scrollspy active section highlight
|
|
25
|
-
- Headings: sequential h2/h3 hierarchy, no skipped levels
|
|
26
|
-
- Code blocks: full-width within column, syntax highlighted
|
|
27
|
-
- Support reading progress bar at top
|
|
28
|
-
|
|
29
|
-
## Typography
|
|
30
|
-
|
|
31
|
-
- Heading: display or editorial serif from theme
|
|
32
|
-
- Body: body font, 18px base for reading comfort
|
|
33
|
-
- Code: mono, 14px
|
|
34
|
-
|
|
35
|
-
## Spacing
|
|
36
|
-
|
|
37
|
-
- Content padding: `--space-8` (32px)
|
|
38
|
-
- Paragraph spacing: `--space-4` (16px)
|
|
39
|
-
- Section gap: `--space-10` (40px)
|
|
40
|
-
|
|
41
|
-
## Anti-Patterns
|
|
42
|
-
|
|
43
|
-
- ❌ Multi-column body text
|
|
44
|
-
- ❌ Full-bleed images breaking reading rhythm
|
|
45
|
-
- ❌ Missing table of contents on long pages
|
|
46
|
-
|
|
47
|
-
## Theme Affinity
|
|
48
|
-
|
|
49
|
-
- ✅ Hum, Lumen
|
|
50
|
-
- ⚠️ Carnival (needs restraint on decoration)
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# 03 — Marquee Hero
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** full-width hero, motion/marquee or autoplay carousel, high-contrast headline, marketing.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| Nav (transparent) |
|
|
10
|
-
+---------------------------+
|
|
11
|
-
| |
|
|
12
|
-
| BIG HEADLINE |
|
|
13
|
-
| subhead + CTA |
|
|
14
|
-
| |
|
|
15
|
-
| [==== marquee =====] |
|
|
16
|
-
| [ scroll / carousel ] |
|
|
17
|
-
+---------------------------+
|
|
18
|
-
| Trust logos / stats |
|
|
19
|
-
+---------------------------+
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Rules
|
|
23
|
-
|
|
24
|
-
- Hero: full viewport-ish height (min 70vh) on desktop
|
|
25
|
-
- Marquee: infinite horizontal scroll or autoplay carousel, pausable on hover
|
|
26
|
-
- Headline: one dominant message, max 2 lines
|
|
27
|
-
- CTA: primary action, high contrast against hero bg
|
|
28
|
-
- Respect `prefers-reduced-motion` (disable auto-animation)
|
|
29
|
-
|
|
30
|
-
## Typography
|
|
31
|
-
|
|
32
|
-
- Heading: display style, largest scale in system
|
|
33
|
-
- Subhead: body or medium weight, muted
|
|
34
|
-
- Marquee text: mono or uppercase label
|
|
35
|
-
|
|
36
|
-
## Spacing
|
|
37
|
-
|
|
38
|
-
- Hero padding: `--space-10` (40px)
|
|
39
|
-
- Marquee height: 64px
|
|
40
|
-
- CTA margin-top: `--space-6` (24px)
|
|
41
|
-
|
|
42
|
-
## Anti-Patterns
|
|
43
|
-
|
|
44
|
-
- ❌ Multiple competing CTAs
|
|
45
|
-
- ❌ Autoplay that can't be paused
|
|
46
|
-
- ❌ Hero text low contrast over image
|
|
47
|
-
|
|
48
|
-
## Theme Affinity
|
|
49
|
-
|
|
50
|
-
- ✅ Carnival, Cobalt
|
|
51
|
-
- ❌ Hum (too understated for hero theater)
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# 04 — Stat-Led
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** metrics-first, big numbers above the fold, analytics dashboards, KPI summaries.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| Title + Date Range |
|
|
10
|
-
+------+------+------+------+
|
|
11
|
-
| KPI | KPI | KPI | KPI |
|
|
12
|
-
| 123 | 45% | 8.2 | 99 |
|
|
13
|
-
+------+------+------+------+
|
|
14
|
-
| Primary Chart / Table |
|
|
15
|
-
| (trend, breakdown) |
|
|
16
|
-
+---------------------------+
|
|
17
|
-
| Secondary charts row |
|
|
18
|
-
+---------------------------+
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Rules
|
|
22
|
-
|
|
23
|
-
- KPI row: 4 cards on desktop, 2 on tablet, 1 on mobile
|
|
24
|
-
- Each KPI: value (display), label (muted), delta (up/down color)
|
|
25
|
-
- Primary chart: spans full width below KPIs
|
|
26
|
-
- Delta: green for positive, red for negative, semantic colors only
|
|
27
|
-
|
|
28
|
-
## Typography
|
|
29
|
-
|
|
30
|
-
- Heading: display weight, tabular-nums for values
|
|
31
|
-
- KPI value: largest scale, tabular-nums
|
|
32
|
-
- Labels: 13px muted uppercase
|
|
33
|
-
|
|
34
|
-
## Spacing
|
|
35
|
-
|
|
36
|
-
- KPI gap: `--space-4` (16px)
|
|
37
|
-
- Card padding: `--space-5` (20px)
|
|
38
|
-
- Section gap: `--space-6` (24px)
|
|
39
|
-
|
|
40
|
-
## Anti-Patterns
|
|
41
|
-
|
|
42
|
-
- ❌ Decorative number animation without context
|
|
43
|
-
- ❌ Mixing units without labels
|
|
44
|
-
- ❌ Charts without axis or legend
|
|
45
|
-
|
|
46
|
-
## Theme Affinity
|
|
47
|
-
|
|
48
|
-
- ✅ Cobalt, Lumen
|
|
49
|
-
- ⚠️ Hum (needs stronger number contrast)
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# 05 — Workbench
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** sidebar + main content, tool-first, dense information, keyboard-centric.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------+------------------+
|
|
9
|
-
| Sidebar | Main Content |
|
|
10
|
-
| Nav | |
|
|
11
|
-
| Tools | Editor/Canvas |
|
|
12
|
-
| Status | |
|
|
13
|
-
+---------+------------------+
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Rules
|
|
17
|
-
|
|
18
|
-
- Sidebar width: 260px fixed on desktop, collapsible on mobile
|
|
19
|
-
- Main content: fluid, max-width 1200px
|
|
20
|
-
- Toolbar: sticky top of main content
|
|
21
|
-
- Status bar: sticky bottom of main content
|
|
22
|
-
|
|
23
|
-
## Typography
|
|
24
|
-
|
|
25
|
-
- Heading: mono (Lumen) or geometric-sans (Cobalt)
|
|
26
|
-
- Body: body font, 14px base
|
|
27
|
-
- Code: mono, 13px
|
|
28
|
-
|
|
29
|
-
## Spacing
|
|
30
|
-
|
|
31
|
-
- Sidebar padding: `--space-4`
|
|
32
|
-
- Main padding: `--space-6`
|
|
33
|
-
- Toolbar height: 48px
|
|
34
|
-
|
|
35
|
-
## Anti-Patterns
|
|
36
|
-
|
|
37
|
-
- ❌ Centered hero in workbench
|
|
38
|
-
- ❌ Large decorative images
|
|
39
|
-
- ❌ Excessive whitespace
|
|
40
|
-
|
|
41
|
-
## Theme Affinity
|
|
42
|
-
|
|
43
|
-
- ✅ Lumen, Cobalt
|
|
44
|
-
- ❌ Carnival (too playful)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# 06 — Conversational FAQ
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** chat-like Q&A, message bubbles, support docs, expandable answers.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| Search / Ask box |
|
|
10
|
-
+------+--------------------+
|
|
11
|
-
| Q | |
|
|
12
|
-
| [bubble] A (expand) |
|
|
13
|
-
| | ---- |
|
|
14
|
-
| Q | A |
|
|
15
|
-
| [bubble] |
|
|
16
|
-
+------+--------------------+
|
|
17
|
-
| Contact / escalate |
|
|
18
|
-
+---------------------------+
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Rules
|
|
22
|
-
|
|
23
|
-
- Questions: left-aligned or avatar-led bubbles
|
|
24
|
-
- Answers: expandable accordion or inline below question
|
|
25
|
-
- Search: filters questions live as user types
|
|
26
|
-
- Support escalation: visible link when answer insufficient
|
|
27
|
-
- Grouped by topic/category when many questions
|
|
28
|
-
|
|
29
|
-
## Typography
|
|
30
|
-
|
|
31
|
-
- Heading: display for section title
|
|
32
|
-
- Question: medium weight, 15px
|
|
33
|
-
- Answer: body font, 14px, muted
|
|
34
|
-
|
|
35
|
-
## Spacing
|
|
36
|
-
|
|
37
|
-
- Bubble padding: `--space-4` (16px)
|
|
38
|
-
- Bubble gap: `--space-3` (12px)
|
|
39
|
-
- Search margin-bottom: `--space-6` (24px)
|
|
40
|
-
|
|
41
|
-
## Anti-Patterns
|
|
42
|
-
|
|
43
|
-
- ❌ Walls of ungrouped questions
|
|
44
|
-
- ❌ Answers that don't match the question
|
|
45
|
-
- ❌ No search on large FAQ sets
|
|
46
|
-
|
|
47
|
-
## Theme Affinity
|
|
48
|
-
|
|
49
|
-
- ✅ Hum, Lumen
|
|
50
|
-
- ⚠️ Carnival (keep bubble decoration minimal)
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# 07 — Manifesto
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** brand statement, large editorial type, about pages, bold declarative copy.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| |
|
|
10
|
-
| BIG STATEMENT |
|
|
11
|
-
| (one sentence, huge) |
|
|
12
|
-
| |
|
|
13
|
-
+------+--------------------+
|
|
14
|
-
| Lead | Supporting |
|
|
15
|
-
| para | paragraphs, |
|
|
16
|
-
| | values list |
|
|
17
|
-
+---------------------------+
|
|
18
|
-
| Sign-off / signature |
|
|
19
|
-
+---------------------------+
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Rules
|
|
23
|
-
|
|
24
|
-
- Opening statement: single declarative sentence, largest type scale
|
|
25
|
-
- Body: 1 lead paragraph + supporting points
|
|
26
|
-
- Values: short bullet or numbered list, not a table
|
|
27
|
-
- Generous negative space around the statement
|
|
28
|
-
- One signature/sign-off at the end
|
|
29
|
-
|
|
30
|
-
## Typography
|
|
31
|
-
|
|
32
|
-
- Heading: editorial display or serif, very large
|
|
33
|
-
- Lead: body font, 20px, slightly muted
|
|
34
|
-
- Values: medium weight list items
|
|
35
|
-
|
|
36
|
-
## Spacing
|
|
37
|
-
|
|
38
|
-
- Statement padding: `--space-12` (48px)
|
|
39
|
-
- Lead margin: `--space-8` (32px)
|
|
40
|
-
- Values gap: `--space-4` (16px)
|
|
41
|
-
|
|
42
|
-
## Anti-Patterns
|
|
43
|
-
|
|
44
|
-
- ❌ Multiple equal-weight statements
|
|
45
|
-
- ❌ Cluttered hero with images
|
|
46
|
-
- ❌ Corporate buzzword soup without a point
|
|
47
|
-
|
|
48
|
-
## Theme Affinity
|
|
49
|
-
|
|
50
|
-
- ✅ Hum, Carnival
|
|
51
|
-
- ⚠️ Lumen (can feel too technical)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# 08 — Photographic
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** image-heavy, full-bleed photos, portfolios, travel, minimal chrome.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| Minimal Nav (overlay) |
|
|
10
|
-
+---------------------------+
|
|
11
|
-
| |
|
|
12
|
-
| [ FULL-BLEED IMAGE ] |
|
|
13
|
-
| |
|
|
14
|
-
+------+------+-------------+
|
|
15
|
-
| img | img | img |
|
|
16
|
-
+------+------+-------------+
|
|
17
|
-
| Caption / story text |
|
|
18
|
-
+---------------------------+
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Rules
|
|
22
|
-
|
|
23
|
-
- Images: full-bleed or near-full-bleed, high resolution
|
|
24
|
-
- Nav: transparent overlay, becomes solid on scroll
|
|
25
|
-
- Captions: small, muted, placed under or beside image
|
|
26
|
-
- Limit text; let images carry the narrative
|
|
27
|
-
- Lazy-load below-fold images
|
|
28
|
-
|
|
29
|
-
## Typography
|
|
30
|
-
|
|
31
|
-
- Heading: display or editorial, often white over image
|
|
32
|
-
- Caption: 13px muted, body font
|
|
33
|
-
- Body: minimal, max-width 60ch
|
|
34
|
-
|
|
35
|
-
## Spacing
|
|
36
|
-
|
|
37
|
-
- Image gap: `--space-2` (8px) or 0 for bleed
|
|
38
|
-
- Caption margin-top: `--space-3` (12px)
|
|
39
|
-
- Section gap: `--space-10` (40px)
|
|
40
|
-
|
|
41
|
-
## Anti-Patterns
|
|
42
|
-
|
|
43
|
-
- ❌ Heavy UI chrome over photos
|
|
44
|
-
- ❌ Low-res stretched images
|
|
45
|
-
- ❌ Text that competes with imagery
|
|
46
|
-
|
|
47
|
-
## Theme Affinity
|
|
48
|
-
|
|
49
|
-
- ✅ Carnival, Hum
|
|
50
|
-
- ❌ Cobalt (too utilitarian)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# 09 — Quote-Led
|
|
2
|
-
|
|
3
|
-
**Fingerprint:** testimonial-first, large pull quotes, editorial, social proof.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
+---------------------------+
|
|
9
|
-
| |
|
|
10
|
-
| "BIG PULL QUOTE" |
|
|
11
|
-
| — attribution |
|
|
12
|
-
| |
|
|
13
|
-
+------+--------------------+
|
|
14
|
-
| small | supporting |
|
|
15
|
-
| quote | context / logo |
|
|
16
|
-
+------+--------------------+
|
|
17
|
-
| CTA / next quote |
|
|
18
|
-
+---------------------------+
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Rules
|
|
22
|
-
|
|
23
|
-
- Lead quote: largest type, occupies hero space
|
|
24
|
-
- Attribution: name, role, company, muted
|
|
25
|
-
- Secondary quotes: smaller, in a row or grid
|
|
26
|
-
- One dominant quote per screen, no crowding
|
|
27
|
-
- Optional logo lockup beside attribution
|
|
28
|
-
|
|
29
|
-
## Typography
|
|
30
|
-
|
|
31
|
-
- Quote: editorial serif or display, italic optional
|
|
32
|
-
- Attribution: 14px medium, muted
|
|
33
|
-
- Body: body font, minimal
|
|
34
|
-
|
|
35
|
-
## Spacing
|
|
36
|
-
|
|
37
|
-
- Quote padding: `--space-10` (40px)
|
|
38
|
-
- Attribution margin-top: `--space-4` (16px)
|
|
39
|
-
- Quote gap: `--space-6` (24px)
|
|
40
|
-
|
|
41
|
-
## Anti-Patterns
|
|
42
|
-
|
|
43
|
-
- ❌ Multiple equal quotes fighting for attention
|
|
44
|
-
- ❌ Fake-looking testimonials without attribution
|
|
45
|
-
- ❌ Quote text too small to read
|
|
46
|
-
|
|
47
|
-
## Theme Affinity
|
|
48
|
-
|
|
49
|
-
- ✅ Hum, Carnival
|
|
50
|
-
- ⚠️ Lumen (needs warmer tone)
|