@wazir-dev/cli 1.0.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.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,797 @@
|
|
|
1
|
+
# Color Theory in UI/UX Design
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Foundation
|
|
4
|
+
> **Domain:** Design Systems, Accessibility, Visual Design
|
|
5
|
+
> **Last Updated:** 2026-03-07
|
|
6
|
+
> **Sources:** WCAG 2.2, Material Design 3, Apple HIG, Ant Design
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Core Principles
|
|
11
|
+
|
|
12
|
+
### 1.1 Color Models for UI
|
|
13
|
+
|
|
14
|
+
Three color models dominate UI work: RGB/Hex, HSL, and HCT. Each serves a
|
|
15
|
+
different purpose, but **HSL is the preferred model for color manipulation in
|
|
16
|
+
design and CSS** because it maps to human perception.
|
|
17
|
+
|
|
18
|
+
#### RGB / Hex
|
|
19
|
+
|
|
20
|
+
- Machine-native format: screens emit red, green, and blue light.
|
|
21
|
+
- Hex is shorthand for RGB: `#1A73E8` = `R:26 G:115 B:232`.
|
|
22
|
+
- Poor for manipulation -- changing "brightness" requires adjusting all three
|
|
23
|
+
channels simultaneously.
|
|
24
|
+
- Use hex for final token values and handoff specifications.
|
|
25
|
+
|
|
26
|
+
#### HSL (Hue, Saturation, Lightness)
|
|
27
|
+
|
|
28
|
+
- **Hue** (0-360): the color wheel position. 0=red, 120=green, 240=blue.
|
|
29
|
+
- **Saturation** (0-100%): intensity. 0%=gray, 100%=vivid.
|
|
30
|
+
- **Lightness** (0-100%): brightness. 0%=black, 50%=pure color, 100%=white.
|
|
31
|
+
- Advantages for UI work:
|
|
32
|
+
- Generate tints by increasing L while keeping H and S constant.
|
|
33
|
+
- Generate shades by decreasing L.
|
|
34
|
+
- Create hover/active states by shifting L by 5-10%.
|
|
35
|
+
- Build monochromatic palettes by fixing H and varying S and L.
|
|
36
|
+
- Meet contrast requirements by adjusting the L-axis alone.
|
|
37
|
+
- CSS native: `hsl(220, 90%, 52%)` is immediately readable as "vivid blue."
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
/* HSL makes state variants trivial */
|
|
41
|
+
--btn-primary: hsl(220, 90%, 52%);
|
|
42
|
+
--btn-primary-hover: hsl(220, 90%, 45%); /* darken by 7% */
|
|
43
|
+
--btn-primary-active: hsl(220, 90%, 38%); /* darken by 14% */
|
|
44
|
+
--btn-primary-disabled: hsl(220, 20%, 72%); /* desaturate + lighten */
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### HCT (Hue, Chroma, Tone) -- Material Design 3
|
|
48
|
+
|
|
49
|
+
- Google's perceptually uniform color model used in Material Design 3.
|
|
50
|
+
- **Tone** maps linearly to perceived brightness (unlike HSL's L which is
|
|
51
|
+
not perceptually uniform).
|
|
52
|
+
- Tone 0 = black, Tone 100 = white, Tone 40 = typical primary in light mode,
|
|
53
|
+
Tone 80 = typical primary in dark mode.
|
|
54
|
+
- The Material Theme Builder uses HCT to generate tonal palettes from a
|
|
55
|
+
single seed color, producing 13 tones per key color (0, 10, 20, 30, 40,
|
|
56
|
+
50, 60, 70, 80, 90, 95, 99, 100).
|
|
57
|
+
|
|
58
|
+
**Recommendation:** Use HSL for day-to-day CSS manipulation and design tool
|
|
59
|
+
work. Use HCT via Material Theme Builder when generating full design system
|
|
60
|
+
palettes. Store final values as hex tokens for cross-platform consistency.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### 1.2 Material Design 3 Dynamic Color and Tonal Palettes
|
|
65
|
+
|
|
66
|
+
Material Design 3 (M3) introduced a paradigm shift: instead of manually picking
|
|
67
|
+
color swatches, the entire palette is algorithmically generated from a single
|
|
68
|
+
**seed color** using the HCT color model.
|
|
69
|
+
|
|
70
|
+
#### Five Key Color Groups
|
|
71
|
+
|
|
72
|
+
Each scheme derives from five key colors, each producing a tonal palette of
|
|
73
|
+
13 tones:
|
|
74
|
+
|
|
75
|
+
| Key Color | Purpose | Light Tone | Dark Tone |
|
|
76
|
+
|-------------|------------------------------------------------|------------|-----------|
|
|
77
|
+
| Primary | Main brand color, prominent buttons, FABs | Tone 40 | Tone 80 |
|
|
78
|
+
| Secondary | Less prominent components (filter chips, etc.) | Tone 40 | Tone 80 |
|
|
79
|
+
| Tertiary | Contrasting accents, balances primary/secondary | Tone 40 | Tone 80 |
|
|
80
|
+
| Neutral | Surfaces, backgrounds, text | Tone 99 | Tone 10 |
|
|
81
|
+
| Error | Error states (always red-derived) | Tone 40 | Tone 80 |
|
|
82
|
+
|
|
83
|
+
#### M3 Baseline Color Scheme (Default Purple)
|
|
84
|
+
|
|
85
|
+
The M3 baseline theme uses purple as the seed color:
|
|
86
|
+
|
|
87
|
+
| Role | Light Mode | Dark Mode |
|
|
88
|
+
|--------------------|-------------|-------------|
|
|
89
|
+
| Primary | `#6750A4` | `#D0BCFF` |
|
|
90
|
+
| On Primary | `#FFFFFF` | `#381E72` |
|
|
91
|
+
| Primary Container | `#EADDFF` | `#4F378B` |
|
|
92
|
+
| Secondary | `#625B71` | `#CCC2DC` |
|
|
93
|
+
| Tertiary | `#7D5260` | `#EFB8C8` |
|
|
94
|
+
| Error | `#B3261E` | `#F2B8B5` |
|
|
95
|
+
| Surface | `#FFFBFE` | `#1C1B1F` |
|
|
96
|
+
| On Surface | `#1C1B1F` | `#E6E1E5` |
|
|
97
|
+
|
|
98
|
+
#### Dynamic Color (Android 12+)
|
|
99
|
+
|
|
100
|
+
On Android 12 and later, M3 apps can extract colors from the user's wallpaper
|
|
101
|
+
to generate a personalized color scheme. The system creates five tonal palettes
|
|
102
|
+
(Primary, Secondary, Tertiary, Neutral, Neutral Variant) from the wallpaper's
|
|
103
|
+
dominant and complementary colors.
|
|
104
|
+
|
|
105
|
+
**Source:** [Material Design 3 - Color System](https://m3.material.io/styles/color/system/how-the-system-works), [Color Roles](https://m3.material.io/styles/color/roles)
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### 1.3 Color Roles
|
|
110
|
+
|
|
111
|
+
Color roles define the semantic purpose of colors in a UI. They are the
|
|
112
|
+
connective tissue between design tokens and component styling.
|
|
113
|
+
|
|
114
|
+
#### Structural Roles
|
|
115
|
+
|
|
116
|
+
| Role | Usage |
|
|
117
|
+
|----------------|-------------------------------------------------------|
|
|
118
|
+
| **Primary** | Key actions, active states, elevated surface tints |
|
|
119
|
+
| **On Primary** | Text/icons on primary-colored surfaces |
|
|
120
|
+
| **Primary Container** | Less prominent primary elements (chips, cards) |
|
|
121
|
+
| **Secondary** | Supporting elements, filter chips, toggles |
|
|
122
|
+
| **Tertiary** | Accent elements that contrast with primary/secondary |
|
|
123
|
+
| **Surface** | Backgrounds, cards, sheets, dialogs |
|
|
124
|
+
| **On Surface** | Body text, icons on surface backgrounds |
|
|
125
|
+
| **Outline** | Borders, dividers, input field strokes |
|
|
126
|
+
|
|
127
|
+
#### Semantic Roles (Status Colors)
|
|
128
|
+
|
|
129
|
+
Semantic colors communicate meaning independently of brand:
|
|
130
|
+
|
|
131
|
+
| Semantic Role | Default Color Family | Typical Hex (Light) | Usage |
|
|
132
|
+
|---------------|---------------------|--------------------|---------------------------------|
|
|
133
|
+
| **Success** | Green | `#198754` | Confirmations, completed states |
|
|
134
|
+
| **Warning** | Amber / Yellow | `#FFC107` | Caution, non-blocking alerts |
|
|
135
|
+
| **Error** | Red | `#DC3545` | Validation errors, destructive |
|
|
136
|
+
| **Info** | Blue | `#0D6EFD` | Informational, neutral alerts |
|
|
137
|
+
|
|
138
|
+
**Design System Comparison:**
|
|
139
|
+
|
|
140
|
+
| System | Success | Warning | Error | Info |
|
|
141
|
+
|-----------------|-------------|-------------|-------------|-------------|
|
|
142
|
+
| Material Design 3 | Custom | Custom | `#B3261E` | Custom |
|
|
143
|
+
| Ant Design | `#52C41A` | `#FAAD14` | `#FF4D4F` | `#1677FF` |
|
|
144
|
+
| Bootstrap 5 | `#198754` | `#FFC107` | `#DC3545` | `#0D6EFD` |
|
|
145
|
+
| Apple HIG | `.systemGreen` | `.systemYellow` | `.systemRed` | `.systemBlue` |
|
|
146
|
+
|
|
147
|
+
**Source:** [Ant Design Colors](https://ant.design/docs/spec/colors/), [Material Design 3 Color Roles](https://m3.material.io/styles/color/roles)
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### 1.4 Contrast Ratios and WCAG 2.2
|
|
152
|
+
|
|
153
|
+
Accessible contrast is non-negotiable. WCAG 2.2 defines minimum contrast
|
|
154
|
+
ratios measured as luminance ratios between foreground and background colors.
|
|
155
|
+
|
|
156
|
+
#### Required Ratios
|
|
157
|
+
|
|
158
|
+
| Element Type | WCAG AA | WCAG AAA |
|
|
159
|
+
|--------------------------------------|-----------|-----------|
|
|
160
|
+
| Normal text (< 18pt / < 14pt bold) | **4.5:1** | 7:1 |
|
|
161
|
+
| Large text (>= 18pt / >= 14pt bold) | **3:1** | 4.5:1 |
|
|
162
|
+
| UI components and graphical objects | **3:1** | -- |
|
|
163
|
+
| Focus indicators | **3:1** | -- |
|
|
164
|
+
|
|
165
|
+
#### Key Rules
|
|
166
|
+
|
|
167
|
+
- **4.5:1** is the baseline for all body text. No exceptions.
|
|
168
|
+
- **3:1** applies to large text (18px regular or 14px bold and above),
|
|
169
|
+
interactive component boundaries, and meaningful graphical elements.
|
|
170
|
+
- Inactive/disabled components have no contrast requirement.
|
|
171
|
+
- Text that is part of a logo or purely decorative has no requirement.
|
|
172
|
+
- WCAG AAA (7:1 for normal text) is recommended for maximum accessibility
|
|
173
|
+
but not legally required in most jurisdictions.
|
|
174
|
+
|
|
175
|
+
#### Practical Contrast Pairs
|
|
176
|
+
|
|
177
|
+
| Pair | Ratio | Passes AA? |
|
|
178
|
+
|---------------------------------------|---------|------------|
|
|
179
|
+
| `#1A1A1A` on `#FFFFFF` | 17.4:1 | Yes |
|
|
180
|
+
| `#333333` on `#FFFFFF` | 12.6:1 | Yes |
|
|
181
|
+
| `#757575` on `#FFFFFF` | 4.6:1 | Yes (barely)|
|
|
182
|
+
| `#767676` on `#FFFFFF` | 4.54:1 | Yes (minimum passing gray) |
|
|
183
|
+
| `#808080` on `#FFFFFF` | 3.9:1 | No |
|
|
184
|
+
| `#FFFFFF` on `#0D6EFD` (Bootstrap blue)| 4.6:1 | Yes |
|
|
185
|
+
| `#FFFFFF` on `#FFC107` (amber) | 1.6:1 | No |
|
|
186
|
+
|
|
187
|
+
Note: Amber/yellow semantic colors almost never pass contrast for white text.
|
|
188
|
+
Always use dark text on yellow/amber backgrounds.
|
|
189
|
+
|
|
190
|
+
**Source:** [WCAG 2.2 - W3C](https://www.w3.org/TR/WCAG22/), [WebAIM Contrast Guide](https://webaim.org/articles/contrast/)
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 1.5 Color Blindness Considerations
|
|
195
|
+
|
|
196
|
+
Approximately **8% of males and 0.5% of females** have some form of color
|
|
197
|
+
vision deficiency (CVD), totaling over 350 million people worldwide. Red-green
|
|
198
|
+
color blindness (deuteranopia/protanopia) is the most common type.
|
|
199
|
+
|
|
200
|
+
#### The Cardinal Rule
|
|
201
|
+
|
|
202
|
+
> **Never use color as the sole means of conveying information.**
|
|
203
|
+
> -- WCAG 2.2 Success Criterion 1.4.1
|
|
204
|
+
|
|
205
|
+
#### Types of Color Vision Deficiency
|
|
206
|
+
|
|
207
|
+
| Type | Prevalence (Males) | Affected Colors |
|
|
208
|
+
|-----------------|-------------------|---------------------|
|
|
209
|
+
| Deuteranomaly | ~5% | Red-green (most common) |
|
|
210
|
+
| Protanomaly | ~1.3% | Red-green |
|
|
211
|
+
| Deuteranopia | ~1.2% | Red-green (severe) |
|
|
212
|
+
| Protanopia | ~1% | Red-green (severe) |
|
|
213
|
+
| Tritanopia | ~0.01% | Blue-yellow (rare) |
|
|
214
|
+
| Achromatopsia | ~0.003% | Total color blindness|
|
|
215
|
+
|
|
216
|
+
#### Mandatory Redundant Cues
|
|
217
|
+
|
|
218
|
+
Always pair color with at least one additional visual indicator:
|
|
219
|
+
|
|
220
|
+
- **Icons:** Checkmark for success, X for error, triangle for warning.
|
|
221
|
+
- **Text labels:** "Error: Email is required" not just a red border.
|
|
222
|
+
- **Patterns/textures:** In charts and graphs, use stripes, dots, dashes.
|
|
223
|
+
- **Shape changes:** Underline links in addition to coloring them.
|
|
224
|
+
- **Position/grouping:** Error messages placed adjacent to the field.
|
|
225
|
+
|
|
226
|
+
#### Safe Color Combinations for CVD
|
|
227
|
+
|
|
228
|
+
- Blue + Orange (distinguishable by all common CVD types).
|
|
229
|
+
- Blue + Red (distinguishable for tritanopia).
|
|
230
|
+
- Avoid red vs. green as the only differentiator.
|
|
231
|
+
- Use sufficient luminance contrast between adjacent colors.
|
|
232
|
+
|
|
233
|
+
**Source:** [Smashing Magazine - Designing for Colorblindness](https://www.smashingmagazine.com/2024/02/designing-for-colorblindness/), [WCAG 1.4.1](https://www.w3.org/TR/WCAG22/)
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### 1.6 Dark Mode Color Mapping
|
|
238
|
+
|
|
239
|
+
Dark mode is not "invert the colors." It requires a separate, carefully
|
|
240
|
+
designed color strategy that accounts for tonal elevation, desaturation,
|
|
241
|
+
and contrast preservation.
|
|
242
|
+
|
|
243
|
+
#### Foundational Principles
|
|
244
|
+
|
|
245
|
+
1. **Use dark gray, not pure black.** The base dark surface should be
|
|
246
|
+
`#121212` (Material Design recommendation), not `#000000`. Pure black
|
|
247
|
+
creates excessive contrast with white text ("halation") and lacks
|
|
248
|
+
the ability to show elevation through lighter surfaces.
|
|
249
|
+
|
|
250
|
+
2. **Express elevation with surface lightness, not shadows.**
|
|
251
|
+
In dark mode, shadows are invisible against dark backgrounds. Instead,
|
|
252
|
+
use progressively lighter surfaces to indicate elevation:
|
|
253
|
+
|
|
254
|
+
| Elevation (dp) | White Overlay | Resulting Surface |
|
|
255
|
+
|----------------|---------------|---------------------|
|
|
256
|
+
| 0 dp | 0% | `#121212` |
|
|
257
|
+
| 1 dp | 5% | `#1E1E1E` |
|
|
258
|
+
| 2 dp | 7% | `#222222` |
|
|
259
|
+
| 3 dp | 8% | `#242424` |
|
|
260
|
+
| 4 dp | 9% | `#272727` |
|
|
261
|
+
| 6 dp | 11% | `#2C2C2C` |
|
|
262
|
+
| 8 dp | 12% | `#2E2E2E` |
|
|
263
|
+
| 12 dp | 14% | `#333333` |
|
|
264
|
+
| 16 dp | 15% | `#353535` |
|
|
265
|
+
| 24 dp | 16% | `#383838` |
|
|
266
|
+
|
|
267
|
+
3. **Desaturate brand colors.** Highly saturated colors vibrate against
|
|
268
|
+
dark backgrounds, causing visual fatigue. Reduce saturation by 10-20%
|
|
269
|
+
and increase lightness for dark mode variants.
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
Light mode primary: hsl(220, 90%, 52%) -- vivid blue
|
|
273
|
+
Dark mode primary: hsl(220, 75%, 70%) -- desaturated, lighter blue
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
4. **Maintain contrast ratios.** As surfaces get lighter at higher
|
|
277
|
+
elevations, verify that white text still passes 4.5:1 against the
|
|
278
|
+
lightest elevated surface. Surface `#383838` with white text `#FFFFFF`
|
|
279
|
+
yields a ratio of ~10.5:1 (passing).
|
|
280
|
+
|
|
281
|
+
5. **Flip "on" color semantics.** Primary containers become darker in dark
|
|
282
|
+
mode while their content colors become lighter. Surface text swaps
|
|
283
|
+
from dark-on-light to light-on-dark.
|
|
284
|
+
|
|
285
|
+
#### M3 Dark Mode Tone Mapping
|
|
286
|
+
|
|
287
|
+
| Role | Light Tone | Dark Tone | Shift |
|
|
288
|
+
|--------------------|-----------|-----------|---------------|
|
|
289
|
+
| Primary | 40 | 80 | +40 tones |
|
|
290
|
+
| On Primary | 100 | 20 | -80 tones |
|
|
291
|
+
| Primary Container | 90 | 30 | -60 tones |
|
|
292
|
+
| Surface | 99 | 10 | -89 tones |
|
|
293
|
+
| On Surface | 10 | 90 | +80 tones |
|
|
294
|
+
|
|
295
|
+
**Source:** [Material Design 3 - Dark Theme](https://m3.material.io/styles/color/system/how-the-system-works), [Dark UI Design Best Practices](https://nighteye.app/dark-ui-design/)
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
### 1.7 Color Psychology in UI
|
|
300
|
+
|
|
301
|
+
Colors carry psychological associations that influence user perception and
|
|
302
|
+
behavior. These associations are culturally mediated and should not be
|
|
303
|
+
treated as universal laws.
|
|
304
|
+
|
|
305
|
+
#### Western UI Conventions
|
|
306
|
+
|
|
307
|
+
| Color | Association | Common UI Usage |
|
|
308
|
+
|---------|---------------------------|------------------------------------|
|
|
309
|
+
| **Blue** | Trust, stability, calm | Banking, healthcare, enterprise |
|
|
310
|
+
| **Red** | Urgency, danger, passion | Errors, destructive actions, CTAs |
|
|
311
|
+
| **Green** | Success, growth, nature | Success states, "go" actions |
|
|
312
|
+
| **Orange** | Energy, warmth, attention | Warnings, CTAs, promotional |
|
|
313
|
+
| **Purple** | Premium, creativity | Luxury brands, creative tools |
|
|
314
|
+
| **Yellow** | Optimism, caution | Warnings, highlights |
|
|
315
|
+
| **Black** | Sophistication, power | Luxury, editorial, high contrast |
|
|
316
|
+
| **White** | Clean, minimal, space | Backgrounds, breathing room |
|
|
317
|
+
|
|
318
|
+
#### Cultural Variations (Critical for Global Products)
|
|
319
|
+
|
|
320
|
+
| Color | Western | East Asian | Middle Eastern |
|
|
321
|
+
|----------|-------------------|------------------------|-----------------------|
|
|
322
|
+
| **Red** | Danger, urgency | Luck, prosperity (CN) | Evil, danger |
|
|
323
|
+
| **White**| Purity, clean | Mourning, death (JP/CN)| Purity |
|
|
324
|
+
| **Green**| Nature, success | Eternity, fertility | Islam, prosperity |
|
|
325
|
+
| **Yellow**| Caution, warmth | Royalty, sacred (CN) | Happiness |
|
|
326
|
+
| **Blue** | Trust, calm | Immortality | Protection, heaven |
|
|
327
|
+
| **Black**| Elegance, death | Career, knowledge | Mourning, mystery |
|
|
328
|
+
|
|
329
|
+
#### Evidence-Based Insights
|
|
330
|
+
|
|
331
|
+
- HubSpot A/B test: red CTAs outperformed green by 21% -- due to contrast
|
|
332
|
+
against the page's green design, not inherent color superiority.
|
|
333
|
+
- Green-themed interfaces show 23% higher satisfaction in UX studies.
|
|
334
|
+
- Color psychology is contextual. Use it as a heuristic, not a rule.
|
|
335
|
+
Prioritize accessibility and contrast over psychological association.
|
|
336
|
+
|
|
337
|
+
**Source:** [IxDF - Color in UX Design](https://ixdf.org/literature/topics/color), [UX Magazine - Psychology of Color](https://uxmag.com/articles/the-psychology-of-color-in-ui-ux-design)
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## 2. Do's and Don'ts
|
|
342
|
+
|
|
343
|
+
### 2.1 Do's
|
|
344
|
+
|
|
345
|
+
1. **Do use HSL for defining color variants.** Define your base color as HSL,
|
|
346
|
+
then derive hover, active, and disabled states by adjusting L and S.
|
|
347
|
+
Example: base `hsl(220, 85%, 52%)`, hover `hsl(220, 85%, 44%)`.
|
|
348
|
+
|
|
349
|
+
2. **Do use `#1A1A1A` or `#212121` for body text instead of pure `#000000`.**
|
|
350
|
+
Pure black on white causes halation (the text appears to bleed into the
|
|
351
|
+
background). A slight softening to ~10% lightness is easier to read.
|
|
352
|
+
|
|
353
|
+
3. **Do ensure all text passes WCAG AA contrast.** Normal text: 4.5:1.
|
|
354
|
+
Large text (18px+ or 14px+ bold): 3:1. Use tools like WebAIM Contrast
|
|
355
|
+
Checker or Stark plugin for Figma.
|
|
356
|
+
|
|
357
|
+
4. **Do use semantic color tokens, not raw hex values.** Define
|
|
358
|
+
`--color-error` not `--color-red`. This decouples meaning from specific
|
|
359
|
+
hue and makes dark mode mapping straightforward.
|
|
360
|
+
|
|
361
|
+
5. **Do limit your palette to 3-5 intentional colors** (primary, secondary,
|
|
362
|
+
accent/tertiary) plus neutrals and semantic colors. Each additional color
|
|
363
|
+
increases cognitive load and maintenance burden.
|
|
364
|
+
|
|
365
|
+
6. **Do provide 8-10 tonal steps per color.** For each brand color, generate
|
|
366
|
+
a range from very light (tint, ~95% L) to very dark (shade, ~15% L):
|
|
367
|
+
50, 100, 200, 300, 400, 500, 600, 700, 800, 900.
|
|
368
|
+
|
|
369
|
+
7. **Do use the 60-30-10 rule for color distribution.** 60% neutral/surface
|
|
370
|
+
colors, 30% secondary/supporting colors, 10% accent/primary colors.
|
|
371
|
+
This creates visual hierarchy without overwhelming the user.
|
|
372
|
+
|
|
373
|
+
8. **Do pair every color indicator with a non-color cue.** Red error border
|
|
374
|
+
+ error icon + error text label. Green success + checkmark icon + "Saved"
|
|
375
|
+
text.
|
|
376
|
+
|
|
377
|
+
9. **Do desaturate colors for dark mode.** Reduce saturation by 10-20% and
|
|
378
|
+
increase lightness by 15-30% compared to light mode values. Example:
|
|
379
|
+
light `hsl(142, 76%, 36%)` becomes dark `hsl(142, 60%, 55%)`.
|
|
380
|
+
|
|
381
|
+
10. **Do test your palette with color blindness simulators.** Use tools like
|
|
382
|
+
Sim Daltonism (macOS), Color Oracle, or Chrome DevTools' rendering
|
|
383
|
+
emulation (Rendering > Emulate vision deficiency).
|
|
384
|
+
|
|
385
|
+
11. **Do use system semantic colors on native platforms.** iOS: `UIColor.label`,
|
|
386
|
+
`.systemBackground`, `.systemRed`. Android: M3 `colorScheme.primary`,
|
|
387
|
+
`colorScheme.error`. These automatically adapt to light/dark/high-contrast.
|
|
388
|
+
|
|
389
|
+
12. **Do maintain a minimum 3:1 contrast for all interactive component
|
|
390
|
+
boundaries.** Button borders, input outlines, toggle tracks, and focus
|
|
391
|
+
indicators must be distinguishable from their surroundings.
|
|
392
|
+
|
|
393
|
+
13. **Do use dark text (`#1A1A1A` or darker) on yellow/amber backgrounds.**
|
|
394
|
+
White text on yellow/amber never passes WCAG AA. Example: warning banner
|
|
395
|
+
background `#FFF3CD` with text `#664D03`.
|
|
396
|
+
|
|
397
|
+
14. **Do establish a neutral gray scale with at least 5 steps.**
|
|
398
|
+
Example: `#F8F9FA`, `#E9ECEF`, `#ADB5BD`, `#6C757D`, `#212529`.
|
|
399
|
+
Use these for backgrounds, borders, disabled states, and secondary text.
|
|
400
|
+
|
|
401
|
+
15. **Do document color usage guidelines alongside token definitions.**
|
|
402
|
+
Each token should specify: name, hex value, usage context, contrast
|
|
403
|
+
pairing, and light/dark mode variant.
|
|
404
|
+
|
|
405
|
+
### 2.2 Don'ts
|
|
406
|
+
|
|
407
|
+
1. **Don't use pure black (`#000000`) on pure white (`#FFFFFF`) for body
|
|
408
|
+
text.** The maximum contrast ratio (21:1) causes halation -- a visual
|
|
409
|
+
vibration effect where text appears to bleed. Use `#1A1A1A` on `#FFFFFF`
|
|
410
|
+
(17.4:1) or `#333333` on `#FFFFFF` (12.6:1) instead.
|
|
411
|
+
|
|
412
|
+
2. **Don't rely on color alone to convey meaning.** A form field with only
|
|
413
|
+
a red border to indicate an error is invisible to someone with
|
|
414
|
+
protanopia. Always add icons, text labels, or pattern changes.
|
|
415
|
+
|
|
416
|
+
3. **Don't use red and green as the only differentiator.** This is the most
|
|
417
|
+
common color blindness failure. Red vs. green is indistinguishable for
|
|
418
|
+
~8% of male users. Add shapes, labels, or patterns.
|
|
419
|
+
|
|
420
|
+
4. **Don't invert colors for dark mode.** Simply swapping `#000` and `#FFF`
|
|
421
|
+
produces garish, unusable results. Dark mode requires intentional surface
|
|
422
|
+
elevation, desaturation, and tone remapping.
|
|
423
|
+
|
|
424
|
+
5. **Don't use highly saturated colors for large background areas.** A
|
|
425
|
+
full-screen `hsl(220, 100%, 50%)` blue background causes eye strain.
|
|
426
|
+
Reserve full saturation for small accent elements (buttons, badges,
|
|
427
|
+
icons). Backgrounds should use saturation below 20%.
|
|
428
|
+
|
|
429
|
+
6. **Don't place colored text on colored backgrounds without checking
|
|
430
|
+
contrast.** Blue text on a purple background, or red text on a brown
|
|
431
|
+
background, frequently fails contrast requirements even when both colors
|
|
432
|
+
"look different" to the designer.
|
|
433
|
+
|
|
434
|
+
7. **Don't use more than 5-6 distinct hues in a single interface.**
|
|
435
|
+
Every additional hue competes for attention and dilutes the visual
|
|
436
|
+
hierarchy. If you need variety, use tonal variations of existing colors.
|
|
437
|
+
|
|
438
|
+
8. **Don't assume color meanings are universal.** Red means "luck" in
|
|
439
|
+
Chinese culture, "danger" in Western culture, and "evil" in some Middle
|
|
440
|
+
Eastern contexts. Research your target audience's cultural associations.
|
|
441
|
+
|
|
442
|
+
9. **Don't use thin colored lines or small colored dots as the only
|
|
443
|
+
indicator.** Fine elements at 1-2px are nearly impossible to perceive
|
|
444
|
+
for users with low vision, regardless of color. Minimum touch/click
|
|
445
|
+
targets apply to color indicators too.
|
|
446
|
+
|
|
447
|
+
10. **Don't hard-code color values in components.** Use design tokens
|
|
448
|
+
(`var(--color-primary)` in CSS, `ColorScheme.primary` in M3). Hard-coded
|
|
449
|
+
hex values make theming, dark mode, and accessibility adjustments
|
|
450
|
+
impossible to maintain.
|
|
451
|
+
|
|
452
|
+
11. **Don't use transparency/opacity as a substitute for proper color
|
|
453
|
+
tokens.** `rgba(0, 0, 0, 0.5)` on a white background looks different
|
|
454
|
+
than on a blue background. Define explicit colors for each context.
|
|
455
|
+
|
|
456
|
+
12. **Don't ignore the `forced-colors` media query.** Windows High Contrast
|
|
457
|
+
Mode overrides your colors. Elements that rely on custom colors for
|
|
458
|
+
meaning (e.g., colored badges without text) will become invisible.
|
|
459
|
+
Test with `@media (forced-colors: active)`.
|
|
460
|
+
|
|
461
|
+
13. **Don't use color temperature inconsistently.** Mixing warm grays
|
|
462
|
+
(`hsl(30, 10%, 95%)`) with cool grays (`hsl(220, 10%, 95%)`) in the
|
|
463
|
+
same interface creates visual dissonance. Pick one temperature for
|
|
464
|
+
your neutral scale and commit.
|
|
465
|
+
|
|
466
|
+
14. **Don't forget disabled state colors.** Disabled elements should have
|
|
467
|
+
reduced opacity (38-50% of their enabled state) or use a distinct
|
|
468
|
+
muted color. They are exempt from contrast requirements per WCAG, but
|
|
469
|
+
should still be visually identifiable as "something is here."
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 3. Platform Variations
|
|
474
|
+
|
|
475
|
+
### 3.1 iOS (Apple Human Interface Guidelines)
|
|
476
|
+
|
|
477
|
+
#### System Colors
|
|
478
|
+
|
|
479
|
+
Apple provides dynamic system colors that automatically adapt to Light Mode,
|
|
480
|
+
Dark Mode, and Increased Contrast settings:
|
|
481
|
+
|
|
482
|
+
| Semantic Color | Light Mode | Dark Mode |
|
|
483
|
+
|---------------------|-----------------|-----------------|
|
|
484
|
+
| `.systemRed` | `#FF3B30` | `#FF453A` |
|
|
485
|
+
| `.systemOrange` | `#FF9500` | `#FF9F0A` |
|
|
486
|
+
| `.systemYellow` | `#FFCC00` | `#FFD60A` |
|
|
487
|
+
| `.systemGreen` | `#34C759` | `#30D158` |
|
|
488
|
+
| `.systemBlue` | `#007AFF` | `#0A84FF` |
|
|
489
|
+
| `.systemIndigo` | `#5856D6` | `#5E5CE6` |
|
|
490
|
+
| `.systemPurple` | `#AF52DE` | `#BF5AF2` |
|
|
491
|
+
| `.systemPink` | `#FF2D55` | `#FF375F` |
|
|
492
|
+
| `.systemTeal` | `#5AC8FA` | `#64D2FF` |
|
|
493
|
+
| `.systemGray` | `#8E8E93` | `#8E8E93` |
|
|
494
|
+
|
|
495
|
+
Note: Dark mode variants are slightly shifted in hue and increased in
|
|
496
|
+
brightness to maintain vibrancy against dark backgrounds.
|
|
497
|
+
|
|
498
|
+
#### Semantic UI Colors
|
|
499
|
+
|
|
500
|
+
Key semantic colors: `.label` (primary text), `.secondaryLabel`,
|
|
501
|
+
`.tertiaryLabel`, `.systemBackground`, `.secondarySystemBackground`,
|
|
502
|
+
`.separator`, `.link`, `.systemFill`. These adapt automatically to
|
|
503
|
+
light/dark/increased-contrast modes.
|
|
504
|
+
|
|
505
|
+
#### Apple HIG Guidance (2025-2026)
|
|
506
|
+
|
|
507
|
+
- Use system colors over custom colors -- they handle light/dark mode,
|
|
508
|
+
increased contrast, and the Liquid Glass design language (iOS 26).
|
|
509
|
+
- Prefer semantic colors (`.label`, `.systemBackground`) over fixed colors.
|
|
510
|
+
- Increased Contrast accessibility modifies system colors; custom colors
|
|
511
|
+
bypass this. Test with Accessibility Inspector.
|
|
512
|
+
|
|
513
|
+
**Source:** [Apple HIG - Color](https://developer.apple.com/design/human-interface-guidelines/color), [UIColor Standard Colors](https://developer.apple.com/documentation/uikit/uicolor/standard_colors)
|
|
514
|
+
|
|
515
|
+
### 3.2 Android (Material Design 3)
|
|
516
|
+
|
|
517
|
+
#### Dynamic Color (Material You)
|
|
518
|
+
|
|
519
|
+
Starting with Android 12, the system extracts a seed color from the user's
|
|
520
|
+
wallpaper and generates five tonal palettes:
|
|
521
|
+
|
|
522
|
+
1. **Primary** -- from the dominant wallpaper color.
|
|
523
|
+
2. **Secondary** -- from a complementary wallpaper color.
|
|
524
|
+
3. **Tertiary** -- from an analogous or triadic wallpaper color.
|
|
525
|
+
4. **Neutral** -- desaturated variant for surfaces and backgrounds.
|
|
526
|
+
5. **Neutral Variant** -- slightly saturated neutral for outlines.
|
|
527
|
+
|
|
528
|
+
Each palette contains 13 tones (0, 10, 20, 30, 40, 50, 60, 70, 80, 90,
|
|
529
|
+
95, 99, 100).
|
|
530
|
+
|
|
531
|
+
#### Key M3 Color Tokens
|
|
532
|
+
|
|
533
|
+
| Token | Light Default | Dark Default |
|
|
534
|
+
|-----------------------|----------------|----------------|
|
|
535
|
+
| `colorScheme.primary` | Tone 40 | Tone 80 |
|
|
536
|
+
| `colorScheme.onPrimary`| Tone 100 | Tone 20 |
|
|
537
|
+
| `colorScheme.surface` | Tone 99 | Tone 10 |
|
|
538
|
+
| `colorScheme.onSurface`| Tone 10 | Tone 90 |
|
|
539
|
+
| `colorScheme.error` | Tone 40 | Tone 80 |
|
|
540
|
+
| `colorScheme.outline` | Tone 50 | Tone 60 |
|
|
541
|
+
|
|
542
|
+
When dynamic color is unavailable (Android < 12), provide a static baseline
|
|
543
|
+
scheme. Use the Material Theme Builder (m3.material.io) to generate both.
|
|
544
|
+
|
|
545
|
+
**Source:** [Material Design 3 - Dynamic Color](https://m3.material.io/styles/color/static), [Android Developers - Material 3](https://developer.android.com/develop/ui/compose/designsystems/material3)
|
|
546
|
+
|
|
547
|
+
### 3.3 Web (CSS and Browser APIs)
|
|
548
|
+
|
|
549
|
+
#### CSS Custom Properties + `prefers-color-scheme`
|
|
550
|
+
|
|
551
|
+
```css
|
|
552
|
+
:root {
|
|
553
|
+
--color-primary: hsl(220, 85%, 52%);
|
|
554
|
+
--color-surface: hsl(0, 0%, 99%);
|
|
555
|
+
--color-on-surface: hsl(0, 0%, 10%);
|
|
556
|
+
--color-error: hsl(0, 72%, 51%);
|
|
557
|
+
--color-success: hsl(142, 76%, 36%);
|
|
558
|
+
--color-warning: hsl(45, 100%, 51%);
|
|
559
|
+
--color-info: hsl(211, 100%, 50%);
|
|
560
|
+
--color-gray-100: hsl(220, 13%, 91%);
|
|
561
|
+
--color-gray-500: hsl(220, 9%, 46%);
|
|
562
|
+
--color-gray-900: hsl(220, 14%, 10%);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
@media (prefers-color-scheme: dark) {
|
|
566
|
+
:root {
|
|
567
|
+
--color-primary: hsl(220, 75%, 70%);
|
|
568
|
+
--color-surface: hsl(220, 10%, 10%);
|
|
569
|
+
--color-on-surface: hsl(220, 10%, 90%);
|
|
570
|
+
--color-error: hsl(0, 60%, 70%);
|
|
571
|
+
--color-success: hsl(142, 55%, 55%);
|
|
572
|
+
--color-warning: hsl(45, 80%, 60%);
|
|
573
|
+
--color-info: hsl(211, 80%, 65%);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
#### `forced-colors` and `color-scheme`
|
|
579
|
+
|
|
580
|
+
```css
|
|
581
|
+
@media (forced-colors: active) {
|
|
582
|
+
.badge { border: 2px solid currentColor; }
|
|
583
|
+
.icon-only-button { border: 1px solid ButtonText; }
|
|
584
|
+
}
|
|
585
|
+
:root { color-scheme: light dark; }
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
In forced-colors mode (Windows High Contrast), the browser overrides author
|
|
589
|
+
colors with system colors. Elements relying solely on background color for
|
|
590
|
+
meaning become invisible. Always provide structural alternatives (borders,
|
|
591
|
+
text labels). The `color-scheme` property tells the browser to render
|
|
592
|
+
UA-controlled elements (scrollbars, form controls) in the appropriate scheme.
|
|
593
|
+
|
|
594
|
+
#### Modern CSS: OKLCH (2025+)
|
|
595
|
+
|
|
596
|
+
```css
|
|
597
|
+
--color-primary: oklch(0.55 0.22 264);
|
|
598
|
+
--color-primary-light: oklch(from var(--color-primary) calc(l + 0.15) c h);
|
|
599
|
+
--color-primary-dark: oklch(from var(--color-primary) calc(l - 0.15) c h);
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
OKLCH is the emerging standard for perceptually uniform color manipulation
|
|
603
|
+
in CSS, similar to HCT for programmatic palette generation.
|
|
604
|
+
|
|
605
|
+
**Source:** [MDN - prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme), [MDN - forced-colors](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors)
|
|
606
|
+
|
|
607
|
+
---
|
|
608
|
+
|
|
609
|
+
## 4. Common Mistakes in AI-Generated Designs
|
|
610
|
+
|
|
611
|
+
AI design tools (Midjourney, Figma AI, v0, etc.) systematically fail at
|
|
612
|
+
color in predictable ways.
|
|
613
|
+
|
|
614
|
+
### 4.1 The "AI Purple Problem"
|
|
615
|
+
|
|
616
|
+
AI models disproportionately generate purple/indigo schemes because Tailwind
|
|
617
|
+
defaults and Shopify Polaris normalized indigo, and AI training data compounds
|
|
618
|
+
this bias as generated designs feed back into training sets.
|
|
619
|
+
|
|
620
|
+
**Detect:** Unspecified purple/indigo primary = statistical artifact, not a
|
|
621
|
+
brand choice. **Fix:** Specify exact hex values in prompts (`#0066CC`, not
|
|
622
|
+
"blue").
|
|
623
|
+
|
|
624
|
+
### 4.2 Too Many Colors
|
|
625
|
+
|
|
626
|
+
AI uses 7-10 distinct hues where 3-4 suffice, destroying visual hierarchy.
|
|
627
|
+
|
|
628
|
+
**Detect:** Count distinct hues; more than 5 (excluding grays/semantics) is
|
|
629
|
+
too many. **Fix:** Reduce to primary + secondary + optional tertiary. Use
|
|
630
|
+
tonal variations for variety instead of new hues.
|
|
631
|
+
|
|
632
|
+
### 4.3 Poor Contrast
|
|
633
|
+
|
|
634
|
+
AI does not check WCAG ratios. Common failures: light gray text on white,
|
|
635
|
+
white text on yellow buttons, low-contrast input borders, colored text on
|
|
636
|
+
colored backgrounds.
|
|
637
|
+
|
|
638
|
+
**Detect:** Run all text/background pairs through a contrast checker (axe,
|
|
639
|
+
Lighthouse, Stark, WebAIM). **Fix:** For dark text, ensure HSL L <= 45%.
|
|
640
|
+
For light text on dark backgrounds, background L <= 35% and text L >= 85%.
|
|
641
|
+
|
|
642
|
+
### 4.4 No Semantic Meaning
|
|
643
|
+
|
|
644
|
+
AI assigns colors decoratively -- a success message in blue, an error in
|
|
645
|
+
orange, a warning in purple.
|
|
646
|
+
|
|
647
|
+
**Detect:** Check status colors match conventions (green=success, red=error,
|
|
648
|
+
amber=warning, blue=info). **Fix:** Override with your design system's
|
|
649
|
+
semantic tokens.
|
|
650
|
+
|
|
651
|
+
### 4.5 Dark Mode Failures
|
|
652
|
+
|
|
653
|
+
AI commonly uses pure black backgrounds, keeps saturated light-mode colors,
|
|
654
|
+
and fails to show elevation through surface lightness.
|
|
655
|
+
|
|
656
|
+
**Detect:** Base surface should be `#121212`-`#1C1C1E`, not `#000000`. Cards
|
|
657
|
+
must be lighter than background. Saturation should be reduced vs. light mode.
|
|
658
|
+
**Fix:** Apply tonal elevation scale (Section 1.6), desaturate 10-20%.
|
|
659
|
+
|
|
660
|
+
### 4.6 Missing State Variations
|
|
661
|
+
|
|
662
|
+
AI generates only the resting state, ignoring hover, focus, active, disabled,
|
|
663
|
+
and selected states.
|
|
664
|
+
|
|
665
|
+
**Detect:** If all states look identical, they are missing. **Fix:** Generate
|
|
666
|
+
a state matrix with explicit color tokens per state per component.
|
|
667
|
+
|
|
668
|
+
---
|
|
669
|
+
|
|
670
|
+
## 5. Decision Framework
|
|
671
|
+
|
|
672
|
+
### 5.1 How Many Colors to Use
|
|
673
|
+
|
|
674
|
+
#### The 3-5 Color Palette Rule
|
|
675
|
+
|
|
676
|
+
| Count | Composition | Best For |
|
|
677
|
+
|-------|----------------------------------------------------|------------------------|
|
|
678
|
+
| 3 | Primary + Neutral dark + Neutral light | Minimal/editorial UI |
|
|
679
|
+
| 4 | Primary + Secondary + Neutral dark + Neutral light | Most applications |
|
|
680
|
+
| 5 | Primary + Secondary + Tertiary + 2 Neutrals | Complex, data-rich UI |
|
|
681
|
+
|
|
682
|
+
Add semantic colors (success, warning, error, info) on top of the base palette.
|
|
683
|
+
These are functional, not decorative, and do not count toward the "palette."
|
|
684
|
+
|
|
685
|
+
#### Color Budget per Screen
|
|
686
|
+
|
|
687
|
+
- **1 dominant color** (primary): calls to action, active navigation, key
|
|
688
|
+
branding. Covers ~10% of screen area.
|
|
689
|
+
- **1-2 supporting colors** (secondary/tertiary): secondary actions, tags,
|
|
690
|
+
categories. Covers ~30% of screen area.
|
|
691
|
+
- **Neutral palette** (grays): text, backgrounds, borders, dividers. Covers
|
|
692
|
+
~60% of screen area.
|
|
693
|
+
|
|
694
|
+
### 5.2 Warm vs. Cool Palette Selection
|
|
695
|
+
|
|
696
|
+
| Factor | Warm Palette | Cool Palette |
|
|
697
|
+
|-------------------------|---------------------------------|--------------------------------|
|
|
698
|
+
| **Hue range** | 0-60 (reds, oranges, yellows) | 180-300 (blues, greens, purples)|
|
|
699
|
+
| **Psychological effect**| Energetic, urgent, personal | Calm, trustworthy, professional |
|
|
700
|
+
| **Best for** | Food, entertainment, children | Finance, health, enterprise |
|
|
701
|
+
| **Neutral pairing** | Warm grays `hsl(30, 8%, x%)` | Cool grays `hsl(220, 8%, x%)` |
|
|
702
|
+
| **Risk** | Can feel aggressive if over-saturated | Can feel cold/clinical |
|
|
703
|
+
|
|
704
|
+
**Hybrid approach:** Use a cool primary (blue) with a warm accent (orange)
|
|
705
|
+
for contrast. This is why many enterprise products use blue + orange CTAs.
|
|
706
|
+
|
|
707
|
+
### 5.3 When to Use High vs. Low Saturation
|
|
708
|
+
|
|
709
|
+
| Context | Saturation Level | HSL S Value |
|
|
710
|
+
|----------------------------------|-----------------|-------------|
|
|
711
|
+
| Primary CTA buttons | High | 75-95% |
|
|
712
|
+
| Notification badges | High | 80-100% |
|
|
713
|
+
| Active navigation indicators | Medium-high | 60-80% |
|
|
714
|
+
| Card backgrounds | Very low | 5-15% |
|
|
715
|
+
| Page backgrounds | Minimal | 0-10% |
|
|
716
|
+
| Disabled elements | Very low | 10-25% |
|
|
717
|
+
| Dark mode surfaces | Very low | 5-15% |
|
|
718
|
+
| Dark mode accent elements | Medium | 50-70% |
|
|
719
|
+
| Data visualization (charts) | Medium-high | 50-80% |
|
|
720
|
+
| Error/warning backgrounds | Low | 15-30% |
|
|
721
|
+
| Error/warning icons/text | High | 70-90% |
|
|
722
|
+
|
|
723
|
+
**Rule of thumb:** The smaller the element and the more important the
|
|
724
|
+
information it carries, the higher its saturation can be. The larger the
|
|
725
|
+
surface area, the lower the saturation should be.
|
|
726
|
+
|
|
727
|
+
### 5.4 Building a Color System Step by Step
|
|
728
|
+
|
|
729
|
+
1. **Choose a primary hue** based on brand and psychology. Define in HSL.
|
|
730
|
+
2. **Generate tonal scale** (50-900) by varying L from 95% to 10%, H fixed.
|
|
731
|
+
3. **Select secondary/tertiary** via color harmony: analogous (+/-30 deg),
|
|
732
|
+
complementary (+180), split-complementary (+150/+210), triadic (+120/+240).
|
|
733
|
+
4. **Define neutral scale** using primary hue at saturation 5-15%.
|
|
734
|
+
5. **Assign semantics:** success (H~142), warning (H~45), error (H~0), info (H~211).
|
|
735
|
+
6. **Map to tokens:** name by role (`--color-primary-500`), not appearance.
|
|
736
|
+
7. **Create dark mode variants** by remapping tones (500->200, 100->800).
|
|
737
|
+
8. **Validate all pairings** against WCAG AA. Document usage guidelines.
|
|
738
|
+
|
|
739
|
+
---
|
|
740
|
+
|
|
741
|
+
## 6. Quick Reference Checklist
|
|
742
|
+
|
|
743
|
+
Use this checklist when reviewing any UI design for color quality and
|
|
744
|
+
accessibility compliance.
|
|
745
|
+
|
|
746
|
+
### Contrast and Accessibility
|
|
747
|
+
|
|
748
|
+
- [ ] All body text passes WCAG AA contrast (4.5:1 minimum)
|
|
749
|
+
- [ ] All large text (18px+ / 14px+ bold) passes 3:1 contrast
|
|
750
|
+
- [ ] All UI component boundaries pass 3:1 contrast against adjacent colors
|
|
751
|
+
- [ ] Focus indicators are visible with 3:1 contrast against surrounding content
|
|
752
|
+
- [ ] No information is conveyed by color alone (WCAG 1.4.1)
|
|
753
|
+
- [ ] Design tested with color blindness simulator (protanopia, deuteranopia)
|
|
754
|
+
- [ ] `forced-colors` / Windows High Contrast mode tested (web)
|
|
755
|
+
|
|
756
|
+
### Palette and Tokens
|
|
757
|
+
|
|
758
|
+
- [ ] Color palette limited to 3-5 hues plus neutrals
|
|
759
|
+
- [ ] Each color has a tonal scale (minimum 5 steps: 100, 300, 500, 700, 900)
|
|
760
|
+
- [ ] All colors defined as semantic tokens, not raw hex values in components
|
|
761
|
+
- [ ] Semantic status colors follow convention (green=success, red=error, amber=warning, blue=info)
|
|
762
|
+
- [ ] Neutral gray scale uses consistent temperature (all warm or all cool)
|
|
763
|
+
- [ ] 60-30-10 distribution applied (neutrals, supporting, accent)
|
|
764
|
+
|
|
765
|
+
### Dark Mode
|
|
766
|
+
|
|
767
|
+
- [ ] Dark mode uses dark gray base (`#121212`-`#1C1C1E`), not pure black
|
|
768
|
+
- [ ] Elevation expressed through surface lightness, not shadows
|
|
769
|
+
- [ ] Brand colors desaturated 10-20% for dark mode
|
|
770
|
+
- [ ] All dark mode text/surface pairs re-verified for contrast
|
|
771
|
+
- [ ] Dark mode has been designed intentionally, not auto-inverted
|
|
772
|
+
|
|
773
|
+
### Platform Compliance
|
|
774
|
+
|
|
775
|
+
- [ ] iOS: uses system semantic colors where possible (`.label`, `.systemBackground`)
|
|
776
|
+
- [ ] Android: provides fallback color scheme for devices without dynamic color
|
|
777
|
+
- [ ] Web: implements `prefers-color-scheme` media query
|
|
778
|
+
- [ ] Web: tested with `forced-colors: active` media query
|
|
779
|
+
- [ ] Color tokens are cross-platform consistent (same hex values, different APIs)
|
|
780
|
+
|
|
781
|
+
---
|
|
782
|
+
|
|
783
|
+
## References
|
|
784
|
+
|
|
785
|
+
- [WCAG 2.2 - W3C Web Content Accessibility Guidelines](https://www.w3.org/TR/WCAG22/)
|
|
786
|
+
- [WebAIM - Contrast and Color Accessibility](https://webaim.org/articles/contrast/)
|
|
787
|
+
- [Material Design 3 - Color System](https://m3.material.io/styles/color/system/how-the-system-works)
|
|
788
|
+
- [Material Design 3 - Color Roles](https://m3.material.io/styles/color/roles)
|
|
789
|
+
- [Material Design 3 - Dynamic Color](https://m3.material.io/styles/color/static)
|
|
790
|
+
- [Apple HIG - Color](https://developer.apple.com/design/human-interface-guidelines/color)
|
|
791
|
+
- [Apple UIColor Standard Colors](https://developer.apple.com/documentation/uikit/uicolor/standard_colors)
|
|
792
|
+
- [Ant Design - Colors Specification](https://ant.design/docs/spec/colors/)
|
|
793
|
+
- [MDN - prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme)
|
|
794
|
+
- [MDN - forced-colors](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors)
|
|
795
|
+
- [Smashing Magazine - Designing for Colorblindness](https://www.smashingmagazine.com/2024/02/designing-for-colorblindness/)
|
|
796
|
+
- [IxDF - Color in UX Design](https://ixdf.org/literature/topics/color)
|
|
797
|
+
- [Josh W. Comeau - Color Formats in CSS](https://www.joshwcomeau.com/css/color-formats/)
|