@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,577 @@
|
|
|
1
|
+
# Dark Mode & Theming
|
|
2
|
+
|
|
3
|
+
> Discipline module for designing, implementing, and maintaining light/dark themes,
|
|
4
|
+
> custom branded themes, high-contrast accessibility modes, and system-preference-aware
|
|
5
|
+
> color scheme switching across web and native platforms.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. What This Discipline Covers
|
|
10
|
+
|
|
11
|
+
### 1.1 Scope
|
|
12
|
+
|
|
13
|
+
Dark mode and theming encompasses every decision that governs how a product's visual
|
|
14
|
+
appearance adapts to user preference, ambient conditions, and accessibility needs.
|
|
15
|
+
|
|
16
|
+
**Core concerns:**
|
|
17
|
+
|
|
18
|
+
- **Light and dark themes** -- two canonical appearance modes every modern product must
|
|
19
|
+
support. Light mode uses dark content on light backgrounds; dark mode reverses this
|
|
20
|
+
relationship with careful adjustments (not simple inversion).
|
|
21
|
+
- **Custom/branded themes** -- variants tied to brand identity, white-labeling, or user
|
|
22
|
+
personalization (accent colors, density, font choices).
|
|
23
|
+
- **High-contrast mode** -- an accessibility-first appearance that maximizes contrast
|
|
24
|
+
ratios beyond standard requirements for users with low vision.
|
|
25
|
+
- **System theme following** -- respecting the OS or browser preference for light/dark
|
|
26
|
+
appearance while offering an explicit override toggle.
|
|
27
|
+
- **Per-surface theming** -- nested or sectional theme overrides within a single
|
|
28
|
+
viewport (e.g., a dark sidebar inside a light app shell).
|
|
29
|
+
|
|
30
|
+
### 1.2 Why It Matters
|
|
31
|
+
|
|
32
|
+
- **Reduced eye strain**: dark themes lower luminance in low-light conditions.
|
|
33
|
+
- **Battery savings**: on OLED/AMOLED displays, darker pixels consume less power.
|
|
34
|
+
Google confirmed YouTube dark mode reduces battery usage by 15-60%.
|
|
35
|
+
- **Accessibility**: users with photosensitivity, migraine disorders, or low vision
|
|
36
|
+
depend on theme options. WCAG 2.2 and the emerging WCAG 3.0 / APCA standard both
|
|
37
|
+
recognize the need for adaptive color schemes.
|
|
38
|
+
- **User expectation**: over 80% of smartphone users have enabled dark mode at the OS
|
|
39
|
+
level. Failure to support it signals neglect.
|
|
40
|
+
- **Brand expression**: theming architecture enables white-label products, seasonal
|
|
41
|
+
campaigns, and personalization without code changes.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Core Methods & Frameworks
|
|
46
|
+
|
|
47
|
+
### 2.1 Material Design 3 -- Dark Theme
|
|
48
|
+
|
|
49
|
+
M3 fundamentally changed dark themes. The key shift: **surfaces use tonal elevation,
|
|
50
|
+
not shadows**.
|
|
51
|
+
|
|
52
|
+
**Tonal elevation model:**
|
|
53
|
+
|
|
54
|
+
Elevation is expressed through tonal color overlays derived from the primary color
|
|
55
|
+
slot, rather than drop shadows or opacity overlays. Higher-elevation surfaces receive
|
|
56
|
+
an increasingly prominent tint of the primary color.
|
|
57
|
+
|
|
58
|
+
| Elevation Level | Tonal Overlay | Typical Usage |
|
|
59
|
+
|-----------------|---------------|----------------------------------|
|
|
60
|
+
| Level 0 | 0% tint | Page background |
|
|
61
|
+
| Level 1 | +5% primary | Cards, elevated containers |
|
|
62
|
+
| Level 2 | +8% primary | App bars, menus |
|
|
63
|
+
| Level 3 | +11% primary | Navigation drawers, dialogs |
|
|
64
|
+
| Level 4 | +12% primary | Modals, floating action buttons |
|
|
65
|
+
| Level 5 | +14% primary | Highest-elevation surfaces |
|
|
66
|
+
|
|
67
|
+
**M3 surface color roles:**
|
|
68
|
+
|
|
69
|
+
- `surface` -- base container color for cards, sheets, app bars, menus.
|
|
70
|
+
- `surfaceContainerLowest` through `surfaceContainerHighest` -- five predefined tonal
|
|
71
|
+
variations replacing the old single-surface-plus-overlay approach.
|
|
72
|
+
- `surfaceVariant` -- lower-contrast surface for list rows, chips, data tables.
|
|
73
|
+
- `surfaceTint` -- color used internally for tonal elevation overlays (derived from
|
|
74
|
+
primary); do not set directly.
|
|
75
|
+
|
|
76
|
+
**Why tonal elevation matters:** shadows are nearly invisible on dark backgrounds.
|
|
77
|
+
Tonal elevation makes hierarchy legible in both modes. The tonal tint reinforces
|
|
78
|
+
brand identity because it inherits from the primary color.
|
|
79
|
+
|
|
80
|
+
M3 uses the HCT (Hue, Chroma, Tone) color space. Dark themes select higher-tone
|
|
81
|
+
(lighter) variants of each color role. Saturated colors are desaturated to avoid
|
|
82
|
+
"vibration" against dark backgrounds.
|
|
83
|
+
|
|
84
|
+
Source: [Material Design 3 -- Dark Theme](https://m3.material.io/blog/dark-theme-design-tutorial-video),
|
|
85
|
+
[Tone-based Surfaces](https://m3.material.io/blog/tone-based-surface-color-m3/),
|
|
86
|
+
[Color Roles](https://m3.material.io/styles/color/roles).
|
|
87
|
+
|
|
88
|
+
### 2.2 Apple Human Interface Guidelines -- Dark Mode
|
|
89
|
+
|
|
90
|
+
Apple centers dark mode on **semantic colors** that automatically adapt to the current
|
|
91
|
+
appearance.
|
|
92
|
+
|
|
93
|
+
| Semantic Name | Light | Dark | Usage |
|
|
94
|
+
|-------------------------------|-----------------|-----------------|---------------------|
|
|
95
|
+
| `systemBackground` | #FFFFFF | #000000 | Primary background |
|
|
96
|
+
| `secondarySystemBackground` | #F2F2F7 | #1C1C1E | Grouped content bg |
|
|
97
|
+
| `tertiarySystemBackground` | #FFFFFF | #2C2C2E | Elevated grouped bg |
|
|
98
|
+
| `label` | #000000 | #FFFFFF | Primary text |
|
|
99
|
+
| `secondaryLabel` | #3C3C43 (60%) | #EBEBF5 (60%) | Secondary text |
|
|
100
|
+
| `separator` | #3C3C43 (29%) | #545458 (65%) | Thin dividers |
|
|
101
|
+
|
|
102
|
+
**Key Apple principles:**
|
|
103
|
+
|
|
104
|
+
1. Use semantic tokens so the OS handles mode switching automatically.
|
|
105
|
+
2. Leverage "materials" (translucency layers) that adapt to underlying content.
|
|
106
|
+
3. Test with the "Increase Contrast" accessibility setting.
|
|
107
|
+
4. Use medium or semibold weights for small body text in dark mode -- thinner weights
|
|
108
|
+
"bloom" on dark backgrounds.
|
|
109
|
+
5. Apple uses true black (#000000) for OLED primary backgrounds but layers elevated
|
|
110
|
+
surfaces at #1C1C1E and #2C2C2E for depth.
|
|
111
|
+
|
|
112
|
+
Source: [Apple HIG -- Dark Mode](https://developer.apple.com/design/human-interface-guidelines/dark-mode),
|
|
113
|
+
[Apple HIG -- Color](https://developer.apple.com/design/human-interface-guidelines/color).
|
|
114
|
+
|
|
115
|
+
### 2.3 Design Tokens for Theming
|
|
116
|
+
|
|
117
|
+
Tokens are organized in a three-tier architecture:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Tier 1: Primitive tokens --color-gray-900: #121212
|
|
121
|
+
Tier 2: Semantic tokens --color-surface-primary: var(--color-gray-900) /* dark */
|
|
122
|
+
Tier 3: Component tokens --card-bg: var(--color-surface-primary)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Theme switching operates at the semantic layer: swap mappings from semantic tokens to
|
|
126
|
+
primitives, and every component inherits the change automatically.
|
|
127
|
+
|
|
128
|
+
The W3C Design Tokens Community Group released the first stable specification (2025.10)
|
|
129
|
+
in October 2025, providing a vendor-neutral JSON format for cross-tool interop.
|
|
130
|
+
|
|
131
|
+
### 2.4 CSS Custom Properties & `prefers-color-scheme`
|
|
132
|
+
|
|
133
|
+
```css
|
|
134
|
+
:root {
|
|
135
|
+
color-scheme: light dark;
|
|
136
|
+
--surface: #FFFFFF;
|
|
137
|
+
--text: #212121;
|
|
138
|
+
--accent: #1E88E5;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@media (prefers-color-scheme: dark) {
|
|
142
|
+
:root {
|
|
143
|
+
--surface: #121212;
|
|
144
|
+
--text: #E0E0E0;
|
|
145
|
+
--accent: #42A5F5;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Class-based override for manual toggle */
|
|
150
|
+
:root.dark {
|
|
151
|
+
--surface: #121212;
|
|
152
|
+
--text: #E0E0E0;
|
|
153
|
+
--accent: #42A5F5;
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The `color-scheme` property tells the browser to adjust UA-provided UI elements
|
|
158
|
+
(scrollbars, form controls, selection highlights) to match the theme.
|
|
159
|
+
`prefers-color-scheme` is supported in all modern browsers with zero JavaScript.
|
|
160
|
+
|
|
161
|
+
### 2.5 Contrast & Accessibility
|
|
162
|
+
|
|
163
|
+
**WCAG 2.2 (current regulatory standard):**
|
|
164
|
+
|
|
165
|
+
- Normal text: 4.5:1 minimum (AA). Large text (18pt+): 3:1 minimum (AA).
|
|
166
|
+
- UI components and graphical objects: 3:1 minimum.
|
|
167
|
+
|
|
168
|
+
**APCA / WCAG 3.0 (emerging standard):**
|
|
169
|
+
|
|
170
|
+
APCA measures contrast as Lc (Lightness Contrast) values. Key thresholds: Lc 75
|
|
171
|
+
minimum for body text, Lc 90 preferred. APCA recognizes that light-on-dark and
|
|
172
|
+
dark-on-light do NOT have symmetric contrast perception -- critical for dark mode
|
|
173
|
+
design. WCAG 2.x's symmetric formula misses many dark-mode contrast issues.
|
|
174
|
+
|
|
175
|
+
**Note:** WCAG 2.1/2.2 remains the legal standard. Use APCA as a supplementary check.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 3. Deliverables
|
|
180
|
+
|
|
181
|
+
### 3.1 Color Token Mapping: Light <-> Dark
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
Token Name Light Dark Notes
|
|
185
|
+
------------------------------------------------------------------
|
|
186
|
+
surface.primary #FFFFFF #121212 Main background
|
|
187
|
+
surface.secondary #F5F5F5 #1E1E1E Cards, containers
|
|
188
|
+
surface.elevated #FFFFFF #252525 Modals, popovers
|
|
189
|
+
text.primary #212121 #E0E0E0 Headings, body
|
|
190
|
+
text.secondary #757575 #9E9E9E Captions, hints
|
|
191
|
+
text.disabled #BDBDBD #616161 Disabled labels
|
|
192
|
+
accent.primary #1565C0 #64B5F6 Links, CTAs
|
|
193
|
+
status.error #D32F2F #EF5350 Error states
|
|
194
|
+
status.error.bg #FFEBEE #3D1C1C Error containers
|
|
195
|
+
status.warning #E65100 #FFB74D Warnings
|
|
196
|
+
status.success #2E7D32 #66BB6A Success
|
|
197
|
+
border.default #E0E0E0 #383838 Dividers
|
|
198
|
+
shadow.default rgba(0,0,0,.1) rgba(0,0,0,.4) Elevation shadow
|
|
199
|
+
overlay.scrim rgba(0,0,0,.5) rgba(0,0,0,.7) Modal backdrop
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 3.2 Component Appearance Audit
|
|
203
|
+
|
|
204
|
+
Systematic review of every component in both modes:
|
|
205
|
+
|
|
206
|
+
| Component | Light OK | Dark OK | Issues Found |
|
|
207
|
+
|------------------|:--------:|:-------:|------------------------|
|
|
208
|
+
| Button (ghost) | Yes | No | Border invisible |
|
|
209
|
+
| Dropdown | Yes | No | Shadow not visible |
|
|
210
|
+
| Modal | Yes | No | Scrim too transparent |
|
|
211
|
+
| Avatar | Yes | No | Ring lost on dark bg |
|
|
212
|
+
| Chart | Yes | No | Gridlines invisible |
|
|
213
|
+
|
|
214
|
+
### 3.3 Theme Preview
|
|
215
|
+
|
|
216
|
+
Side-by-side captures of key screens (dashboard, forms, empty states) in all themes,
|
|
217
|
+
with contrast ratio annotations on key text/background pairs.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 4. Tools & Techniques
|
|
222
|
+
|
|
223
|
+
### 4.1 Figma Variables for Themes
|
|
224
|
+
|
|
225
|
+
1. Create a color variable collection with "Light" and "Dark" modes.
|
|
226
|
+
2. Define primitive variables (grays, brand, status) with identical values across modes.
|
|
227
|
+
3. Define semantic variables that reference different primitives per mode.
|
|
228
|
+
4. Apply semantic variables to components. Switch modes on frames to preview.
|
|
229
|
+
|
|
230
|
+
**Figma-to-code pipeline:**
|
|
231
|
+
|
|
232
|
+
Figma variables -> **Tokens Studio** plugin (export as W3C JSON) -> **Style Dictionary**
|
|
233
|
+
(transform into CSS custom properties, Swift asset catalogs, Kotlin resources).
|
|
234
|
+
|
|
235
|
+
### 4.2 Design Token Tools
|
|
236
|
+
|
|
237
|
+
| Tool | Role | Key Feature |
|
|
238
|
+
|-------------------|-----------------------------------|----------------------------|
|
|
239
|
+
| Tokens Studio | Figma plugin for token management | Multi-theme modes, Git sync|
|
|
240
|
+
| Style Dictionary | Token transformation engine | Platform-agnostic output |
|
|
241
|
+
| Cobalt UI | W3C format token compiler | Native W3C spec support |
|
|
242
|
+
| Specify | Design data platform | API-driven token delivery |
|
|
243
|
+
|
|
244
|
+
### 4.3 CSS Architecture
|
|
245
|
+
|
|
246
|
+
**Recommended file structure:**
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
styles/
|
|
250
|
+
tokens/primitives.css /* raw color values */
|
|
251
|
+
tokens/semantic-light.css /* semantic mappings for light */
|
|
252
|
+
tokens/semantic-dark.css /* semantic mappings for dark */
|
|
253
|
+
themes/theme-switcher.css /* @media + class-based switching */
|
|
254
|
+
components/button.css /* uses only semantic tokens */
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**FOIT prevention -- inline in `<head>` before stylesheets:**
|
|
258
|
+
|
|
259
|
+
```html
|
|
260
|
+
<script>
|
|
261
|
+
(function() {
|
|
262
|
+
var t = localStorage.getItem('theme');
|
|
263
|
+
if (t === 'dark' || (!t && matchMedia('(prefers-color-scheme:dark)').matches))
|
|
264
|
+
document.documentElement.classList.add('dark');
|
|
265
|
+
})();
|
|
266
|
+
</script>
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 4.4 Contrast Checking Tools
|
|
270
|
+
|
|
271
|
+
| Tool | Standard | Dark Mode Support |
|
|
272
|
+
|------------------|-----------------|-------------------|
|
|
273
|
+
| Stark (Figma) | WCAG 2.2 + APCA | Yes |
|
|
274
|
+
| Polychrom | APCA native | Yes |
|
|
275
|
+
| axe DevTools | WCAG 2.2 | Partial |
|
|
276
|
+
| WebAIM Contrast | WCAG 2.2 | Manual |
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 5. Common Failures
|
|
281
|
+
|
|
282
|
+
### 5.1 Just Inverting Colors
|
|
283
|
+
|
|
284
|
+
Applying `filter: invert(1)` or swapping black/white destroys semantic meaning. Red
|
|
285
|
+
errors become cyan. Brand colors become unrecognizable. Images display as negatives.
|
|
286
|
+
**Fix:** build a proper semantic token layer with intentionally designed values per theme.
|
|
287
|
+
|
|
288
|
+
### 5.2 Pure Black Backgrounds Causing Halation
|
|
289
|
+
|
|
290
|
+
Using `#000000` as the dark background causes **halation**: bright text appears to glow,
|
|
291
|
+
bleed, or smear. The iris opens wider for bright text on pure black, and astigmatism
|
|
292
|
+
(~33% of the population) worsens the effect. OLED screens also exhibit "black smearing"
|
|
293
|
+
during scrolling.
|
|
294
|
+
|
|
295
|
+
**Fix:** use `#121212` to `#1E1E1E` for surfaces. Use `#E0E0E0` for body text, not
|
|
296
|
+
pure `#FFFFFF`. Reserve pure white for headings only.
|
|
297
|
+
|
|
298
|
+
### 5.3 Insufficient Contrast in Dark Mode
|
|
299
|
+
|
|
300
|
+
Muted grays on dark gray frequently fail WCAG AA. Colored text (orange, green, red)
|
|
301
|
+
that passes in light mode often fails in dark mode on dark surfaces.
|
|
302
|
+
|
|
303
|
+
**Fix:** audit every text/background combination independently. Use APCA as a
|
|
304
|
+
supplementary check. Never assume a light-mode pair works in dark mode.
|
|
305
|
+
|
|
306
|
+
### 5.4 Images and Illustrations Not Adapting
|
|
307
|
+
|
|
308
|
+
White-background PNGs on dark surfaces create jarring bright rectangles. Logos with
|
|
309
|
+
dark text on transparent backgrounds become invisible.
|
|
310
|
+
|
|
311
|
+
**Fix:** provide light-on-dark SVG variants. Use `<picture>` with `prefers-color-scheme`
|
|
312
|
+
media. For photos, apply `filter: brightness(0.85)` in dark mode. Use CSS custom
|
|
313
|
+
properties in SVG fills for illustrations.
|
|
314
|
+
|
|
315
|
+
### 5.5 Shadows Not Working in Dark Mode
|
|
316
|
+
|
|
317
|
+
Dark shadows on dark backgrounds are invisible. Elevation hierarchy collapses.
|
|
318
|
+
|
|
319
|
+
**Fix:** use tonal elevation (lighter surface tints) as the primary indicator. If
|
|
320
|
+
shadows are needed, increase opacity and add subtle borders:
|
|
321
|
+
|
|
322
|
+
```css
|
|
323
|
+
.dark .card {
|
|
324
|
+
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
|
|
325
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### 5.6 Not Testing Both Modes Equally
|
|
330
|
+
|
|
331
|
+
Designing primarily in light mode and retroactively creating dark mode leads to
|
|
332
|
+
invisible borders, lost focus rings, and broken illustrations.
|
|
333
|
+
|
|
334
|
+
**Fix:** design simultaneously with Figma variable modes. Include dark mode test cases
|
|
335
|
+
in every QA pass. Run visual regression tests against both themes.
|
|
336
|
+
|
|
337
|
+
### 5.7 Saturated Colors Vibrating
|
|
338
|
+
|
|
339
|
+
Same vivid accents in dark mode "vibrate" against dark backgrounds, causing discomfort.
|
|
340
|
+
|
|
341
|
+
**Fix:** desaturate and lighten accents for dark mode. M3 recommends HCT tones 70-90
|
|
342
|
+
for dark theme accents vs. 30-50 for light.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 6. Integration with Development
|
|
347
|
+
|
|
348
|
+
### 6.1 Web: CSS `prefers-color-scheme`
|
|
349
|
+
|
|
350
|
+
```css
|
|
351
|
+
:root { color-scheme: light dark; --bg: #FFF; --text: #212121; }
|
|
352
|
+
|
|
353
|
+
@media (prefers-color-scheme: dark) {
|
|
354
|
+
:root:not(.light) { --bg: #121212; --text: #E0E0E0; }
|
|
355
|
+
}
|
|
356
|
+
:root.dark { --bg: #121212; --text: #E0E0E0; }
|
|
357
|
+
:root.light { --bg: #FFFFFF; --text: #212121; }
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### 6.2 Tailwind CSS `dark:` Variant
|
|
361
|
+
|
|
362
|
+
```css
|
|
363
|
+
/* Tailwind v4+ */
|
|
364
|
+
@import "tailwindcss";
|
|
365
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
```html
|
|
369
|
+
<div class="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100">
|
|
370
|
+
<p class="text-gray-600 dark:text-gray-400">Body text</p>
|
|
371
|
+
</div>
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 6.3 iOS System Theme API
|
|
375
|
+
|
|
376
|
+
```swift
|
|
377
|
+
// UIKit -- adaptive color
|
|
378
|
+
let color = UIColor { traits in
|
|
379
|
+
traits.userInterfaceStyle == .dark
|
|
380
|
+
? UIColor(red: 0.88, green: 0.88, blue: 0.88, alpha: 1)
|
|
381
|
+
: UIColor(red: 0.13, green: 0.13, blue: 0.13, alpha: 1)
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// SwiftUI
|
|
385
|
+
@Environment(\.colorScheme) var colorScheme
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Use Asset Catalogs with "Any Appearance" and "Dark" variants for automatic resolution.
|
|
389
|
+
|
|
390
|
+
### 6.4 Android System Theme API
|
|
391
|
+
|
|
392
|
+
```kotlin
|
|
393
|
+
// Follow system (default in Android 10+)
|
|
394
|
+
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM)
|
|
395
|
+
|
|
396
|
+
// Resource qualifiers: values-night/colors.xml for dark overrides
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
`setDefaultNightMode` is NOT persisted across process restarts. Restore from
|
|
400
|
+
SharedPreferences/DataStore in `Application.onCreate()`.
|
|
401
|
+
|
|
402
|
+
**Jetpack Compose:**
|
|
403
|
+
|
|
404
|
+
```kotlin
|
|
405
|
+
MaterialTheme(
|
|
406
|
+
colorScheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()
|
|
407
|
+
) { /* content */ }
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### 6.5 Toggle Implementation
|
|
411
|
+
|
|
412
|
+
**Three-state toggle (recommended):** Light | Dark | System (default).
|
|
413
|
+
|
|
414
|
+
**Persistence:**
|
|
415
|
+
|
|
416
|
+
| Platform | Storage | Key |
|
|
417
|
+
|----------|--------------------------|--------------|
|
|
418
|
+
| Web | localStorage (or cookie) | `theme` |
|
|
419
|
+
| iOS | UserDefaults | `appTheme` |
|
|
420
|
+
| Android | DataStore / SharedPrefs | `app_theme` |
|
|
421
|
+
| Flutter | SharedPreferences | `theme_mode` |
|
|
422
|
+
|
|
423
|
+
**System preference change listener (web):**
|
|
424
|
+
|
|
425
|
+
```js
|
|
426
|
+
window.matchMedia('(prefers-color-scheme: dark)')
|
|
427
|
+
.addEventListener('change', (e) => {
|
|
428
|
+
if (localStorage.getItem('theme') === 'system')
|
|
429
|
+
document.documentElement.classList.toggle('dark', e.matches);
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### 6.6 Theme Transition
|
|
434
|
+
|
|
435
|
+
```css
|
|
436
|
+
body, body * {
|
|
437
|
+
transition: background-color 200ms ease, color 200ms ease,
|
|
438
|
+
border-color 200ms ease;
|
|
439
|
+
}
|
|
440
|
+
body.no-transition, body.no-transition * { transition: none !important; }
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
Add `no-transition` on initial load; remove after first paint. Never use
|
|
444
|
+
`transition: all` -- it causes layout thrashing.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## 7. Specific Color Recommendations
|
|
449
|
+
|
|
450
|
+
### 7.1 Dark Mode Surface Palette
|
|
451
|
+
|
|
452
|
+
Do NOT use pure black (#000000). Use this range:
|
|
453
|
+
|
|
454
|
+
| Role | Hex | Usage |
|
|
455
|
+
|---------------------|-----------|-------------------------|
|
|
456
|
+
| Background (base) | `#121212` | Page/app background |
|
|
457
|
+
| Surface (level 1) | `#1E1E1E` | Cards, containers |
|
|
458
|
+
| Surface (level 2) | `#252525` | Elevated cards, drawers |
|
|
459
|
+
| Surface (level 3) | `#2C2C2C` | Dialogs, modals |
|
|
460
|
+
| Surface (level 4) | `#333333` | Tooltips, popovers |
|
|
461
|
+
| Surface (level 5) | `#383838` | Highest elevation |
|
|
462
|
+
|
|
463
|
+
### 7.2 Dark Mode Text Palette
|
|
464
|
+
|
|
465
|
+
| Role | Hex | Usage |
|
|
466
|
+
|----------------|-----------|--------------------------|
|
|
467
|
+
| High emphasis | `#FFFFFF` | Titles, critical labels |
|
|
468
|
+
| Primary | `#E0E0E0` | Headings, body text |
|
|
469
|
+
| Secondary | `#9E9E9E` | Captions, metadata |
|
|
470
|
+
| Placeholder | `#757575` | Input placeholders |
|
|
471
|
+
| Disabled | `#616161` | Disabled labels |
|
|
472
|
+
|
|
473
|
+
### 7.3 Dark Mode Accent Adjustments
|
|
474
|
+
|
|
475
|
+
| Purpose | Light Mode | Dark Mode | Adjustment |
|
|
476
|
+
|-----------|------------|------------|-----------------------|
|
|
477
|
+
| Primary | `#1565C0` | `#64B5F6` | Lighter, desaturated |
|
|
478
|
+
| Error | `#D32F2F` | `#EF5350` | Lighter |
|
|
479
|
+
| Warning | `#E65100` | `#FFB74D` | Significantly lighter |
|
|
480
|
+
| Success | `#2E7D32` | `#66BB6A` | Lighter |
|
|
481
|
+
| Link | `#1565C0` | `#82B1FF` | Lighter, desaturated |
|
|
482
|
+
|
|
483
|
+
### 7.4 Borders and Dividers
|
|
484
|
+
|
|
485
|
+
| Role | Light Mode | Dark Mode |
|
|
486
|
+
|----------------|---------------------|--------------------------|
|
|
487
|
+
| Default border | `rgba(0,0,0,0.12)` | `rgba(255,255,255,0.12)` |
|
|
488
|
+
| Strong border | `rgba(0,0,0,0.24)` | `rgba(255,255,255,0.24)` |
|
|
489
|
+
| Thin divider | `rgba(0,0,0,0.08)` | `rgba(255,255,255,0.08)` |
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
## 8. Quick Reference Checklist
|
|
494
|
+
|
|
495
|
+
### Design Phase
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
[ ] Token architecture: primitive -> semantic -> component
|
|
499
|
+
[ ] Light AND dark values for every semantic token
|
|
500
|
+
[ ] Surfaces use #121212-#1E1E1E, NOT pure #000000
|
|
501
|
+
[ ] Body text uses #E0E0E0, not pure #FFFFFF
|
|
502
|
+
[ ] Accents desaturated and lightened for dark mode
|
|
503
|
+
[ ] Status colors adjusted for dark backgrounds
|
|
504
|
+
[ ] Elevation via tonal surface changes, not shadows alone
|
|
505
|
+
[ ] Borders use semi-transparent white, not gray hex values
|
|
506
|
+
[ ] Every component reviewed in BOTH modes simultaneously
|
|
507
|
+
[ ] Illustrations/diagrams have theme-adaptive variants
|
|
508
|
+
[ ] Logo provided in light-on-dark variant
|
|
509
|
+
[ ] Focus indicators visible in both modes
|
|
510
|
+
[ ] Disabled states distinguishable in both modes
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Contrast Verification
|
|
514
|
+
|
|
515
|
+
```
|
|
516
|
+
[ ] Body text meets WCAG AA (4.5:1) in BOTH modes
|
|
517
|
+
[ ] Large text meets WCAG AA (3:1) in BOTH modes
|
|
518
|
+
[ ] UI components meet 3:1 in BOTH modes
|
|
519
|
+
[ ] APCA Lc checked as supplementary quality gate
|
|
520
|
+
[ ] Placeholder text contrast verified (often fails dark mode)
|
|
521
|
+
[ ] Chart data series distinguishable in both modes
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
### Development
|
|
525
|
+
|
|
526
|
+
```
|
|
527
|
+
[ ] CSS custom properties with semantic layer
|
|
528
|
+
[ ] prefers-color-scheme as foundation
|
|
529
|
+
[ ] Class-based override for manual toggle
|
|
530
|
+
[ ] color-scheme: light dark on :root
|
|
531
|
+
[ ] Three-state toggle (Light / Dark / System)
|
|
532
|
+
[ ] Preference persisted across sessions
|
|
533
|
+
[ ] FOIT prevention script in <head>
|
|
534
|
+
[ ] System preference change listener registered
|
|
535
|
+
[ ] Images adapt (brightness, srcset, or CSS bg)
|
|
536
|
+
[ ] SVGs use currentColor or custom properties
|
|
537
|
+
[ ] Meta theme-color updates on switch
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
### Testing
|
|
541
|
+
|
|
542
|
+
```
|
|
543
|
+
[ ] Every flow tested in light AND dark mode
|
|
544
|
+
[ ] System preference change triggers correct theme
|
|
545
|
+
[ ] Manual toggle overrides system preference
|
|
546
|
+
[ ] No FOIT on page load
|
|
547
|
+
[ ] Visual regression tests in both themes
|
|
548
|
+
[ ] Accessibility audit in both modes
|
|
549
|
+
[ ] OLED device tested for smearing/halation
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
### Platform-Specific
|
|
553
|
+
|
|
554
|
+
```
|
|
555
|
+
iOS: [ ] Semantic UIColors [ ] Asset catalog Dark variants [ ] Increase Contrast tested
|
|
556
|
+
Android: [ ] values-night/ qualifiers [ ] MODE_NIGHT_FOLLOW_SYSTEM default [ ] Preference in onCreate
|
|
557
|
+
Web: [ ] prefers-color-scheme [ ] localStorage persistence [ ] SSR cookie for server rendering
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
## 9. References
|
|
563
|
+
|
|
564
|
+
- [Material Design 3 -- Dark Theme](https://m3.material.io/blog/dark-theme-design-tutorial-video)
|
|
565
|
+
- [Material Design 3 -- Tone-based Surfaces](https://m3.material.io/blog/tone-based-surface-color-m3/)
|
|
566
|
+
- [Material Design 3 -- Color Roles](https://m3.material.io/styles/color/roles)
|
|
567
|
+
- [Apple HIG -- Dark Mode](https://developer.apple.com/design/human-interface-guidelines/dark-mode)
|
|
568
|
+
- [Apple HIG -- Color](https://developer.apple.com/design/human-interface-guidelines/color)
|
|
569
|
+
- [Apple -- Supporting Dark Mode](https://developer.apple.com/documentation/uikit/supporting-dark-mode-in-your-interface)
|
|
570
|
+
- [APCA Contrast Algorithm](https://git.apcacontrast.com/documentation/APCA_in_a_Nutshell.html)
|
|
571
|
+
- [W3C Design Tokens Format 2025.10](https://www.designtokens.org/tr/drafts/format/)
|
|
572
|
+
- [MDN -- prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-color-scheme)
|
|
573
|
+
- [Tailwind CSS -- Dark Mode](https://tailwindcss.com/docs/dark-mode)
|
|
574
|
+
- [Android -- Implement Dark Theme](https://developer.android.com/develop/ui/views/theming/darktheme)
|
|
575
|
+
- [Style Dictionary](https://styledictionary.com/)
|
|
576
|
+
- [Tokens Studio](https://docs.tokens.studio/)
|
|
577
|
+
- [Figma -- Variables Guide](https://help.figma.com/hc/en-us/articles/15339657135383-Guide-to-variables-in-Figma)
|