@salesforce/afv-skills 1.41.0 → 1.43.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.
Files changed (288) hide show
  1. package/package.json +2 -6
  2. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
  3. package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
  4. package/skills/design-systems-slds-validate/SKILL.md +2 -2
  5. package/skills/dx-app-analytics-query/SKILL.md +1 -3
  6. package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
  7. package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
  8. package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
  9. package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
  10. package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
  11. package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
  12. package/skills/dx-devops-request-status/SKILL.md +160 -0
  13. package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
  14. package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
  15. package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
  16. package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
  17. package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
  18. package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
  19. package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
  20. package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
  21. package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
  22. package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
  23. package/skills/dx-org-shape-manage/SKILL.md +152 -0
  24. package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
  25. package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
  26. package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
  27. package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
  28. package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
  29. package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
  30. package/skills/dx-org-switch/SKILL.md +2 -2
  31. package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
  32. package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
  33. package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
  34. package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
  35. package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
  36. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
  37. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
  38. package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
  39. package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
  40. package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
  41. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
  42. package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
  43. package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
  44. package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
  45. package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
  46. package/skills/experience-cms-brand-apply/SKILL.md +4 -1
  47. package/skills/experience-cms-brand-create/SKILL.md +197 -0
  48. package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
  49. package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
  50. package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
  51. package/skills/experience-cms-content-generate/SKILL.md +190 -0
  52. package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
  53. package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
  54. package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
  55. package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
  56. package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
  57. package/skills/experience-cms-content-generate/assets/questions.md +241 -0
  58. package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
  59. package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
  60. package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
  61. package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
  62. package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
  63. package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
  64. package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
  65. package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
  66. package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
  67. package/skills/experience-cms-content-generate/references/principles.md +19 -0
  68. package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
  69. package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
  70. package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
  71. package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
  72. package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
  73. package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
  74. package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
  75. package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
  76. package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
  77. package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
  78. package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
  79. package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
  80. package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
  81. package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
  82. package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
  83. package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
  84. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
  85. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
  86. package/skills/experience-lwc-design-generate/SKILL.md +5 -4
  87. package/skills/experience-lwc-generate/SKILL.md +10 -9
  88. package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
  89. package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
  90. package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
  91. package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
  92. package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
  93. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
  94. package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
  95. package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
  96. package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
  97. package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
  98. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
  99. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
  100. package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
  101. package/skills/integration-connectivity-generate/SKILL.md +11 -10
  102. package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
  103. package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
  104. package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
  105. package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
  106. package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
  107. package/skills/platform-custom-application-generate/SKILL.md +2 -0
  108. package/skills/platform-custom-field-generate/SKILL.md +8 -6
  109. package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
  110. package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
  111. package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
  112. package/skills/platform-custom-setting-generate/SKILL.md +419 -0
  113. package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
  114. package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
  115. package/skills/platform-value-set-generate/SKILL.md +2 -0
  116. package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
  117. package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
  118. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
  119. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
  120. package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
  121. package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
  122. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
  123. package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
  124. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
  125. package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
  126. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
  127. package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
  128. package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
  129. package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
  130. package/skills/service-de-channel-activate/SKILL.md +271 -0
  131. package/skills/service-de-channel-activate/references/gotchas.md +31 -0
  132. package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
  133. package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
  134. package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
  135. package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
  136. package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
  137. package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
  138. package/skills/service-de-channel-create/SKILL.md +369 -0
  139. package/skills/service-de-channel-create/references/apple.md +59 -0
  140. package/skills/service-de-channel-create/references/connect-insert.md +84 -0
  141. package/skills/service-de-channel-create/references/facebook.md +154 -0
  142. package/skills/service-de-channel-create/references/line.md +66 -0
  143. package/skills/service-de-channel-create/references/sms.md +98 -0
  144. package/skills/service-de-channel-create/references/whatsapp.md +98 -0
  145. package/skills/service-de-channel-create/references/worked-examples.md +70 -0
  146. package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
  147. package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
  148. package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
  149. package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
  150. package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
  151. package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
  152. package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
  153. package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
  154. package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
  155. package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
  156. package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
  157. package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
  158. package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
  159. package/skills/service-de-waba-integrate/SKILL.md +227 -0
  160. package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
  161. package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
  162. package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
  163. package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
  164. package/skills/service-email-to-case-configure/SKILL.md +190 -0
  165. package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
  166. package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
  167. package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
  168. package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
  169. package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
  170. package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
  171. package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
  172. package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
  173. package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
  174. package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
  175. package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
  176. package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
  177. package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
  178. package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
  179. package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
  180. package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
  181. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
  182. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
  183. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
  184. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
  185. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
  186. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
  187. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
  188. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
  189. package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
  190. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
  191. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
  192. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
  193. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
  194. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
  195. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
  196. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
  197. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
  198. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
  199. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
  200. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
  201. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
  202. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
  203. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
  204. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
  205. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
  206. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
  207. package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
  208. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
  209. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
  210. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
  211. package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
  212. package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
  213. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
  214. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
  215. package/skills/data360-activate/README.md +0 -38
  216. package/skills/data360-activate/SKILL.md +0 -127
  217. package/skills/data360-connect/README.md +0 -57
  218. package/skills/data360-connect/SKILL.md +0 -163
  219. package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
  220. package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
  221. package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
  222. package/skills/data360-connect/examples/connections/redshift.json +0 -16
  223. package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
  224. package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
  225. package/skills/data360-harmonize/README.md +0 -31
  226. package/skills/data360-harmonize/SKILL.md +0 -126
  227. package/skills/data360-orchestrate/README.md +0 -120
  228. package/skills/data360-orchestrate/SKILL.md +0 -263
  229. package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
  230. package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
  231. package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
  232. package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
  233. package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
  234. package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
  235. package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
  236. package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
  237. package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
  238. package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
  239. package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
  240. package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
  241. package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
  242. package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
  243. package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
  244. package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
  245. package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
  246. package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
  247. package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
  248. package/skills/data360-prepare/README.md +0 -50
  249. package/skills/data360-prepare/SKILL.md +0 -203
  250. package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
  251. package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
  252. package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
  253. package/skills/data360-query/README.md +0 -43
  254. package/skills/data360-query/SKILL.md +0 -128
  255. package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
  256. package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
  257. package/skills/data360-segment/README.md +0 -35
  258. package/skills/data360-segment/SKILL.md +0 -123
  259. package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
  260. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
  261. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
  262. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
  263. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
  264. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
  265. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
  266. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
  267. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
  268. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
  269. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
  270. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
  271. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
  272. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
  273. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
  274. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
  275. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
  276. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
  277. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
  278. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
  279. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
  280. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
  281. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
  282. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
  283. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
  284. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
  285. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
  286. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
  287. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
  288. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: experience-lwc-accessibility-validate
2
+ name: experience-accessibility-validate
3
3
  description: "Use this skill to determine whether a Lightning Web Component (LWC) is accessible and meets WCAG accessibility guidelines. TRIGGER when the user asks \"is my component accessible?\", \"does my LWC meet accessibility guidelines?\", \"is this component WCAG compliant?\", \"find accessibility problems in this LWC\", \"is this LWC keyboard accessible?\", \"does this component work with a screen reader?\", \"does this component have sufficient color contrast?\", \"check ARIA usage in this LWC\", or \"WCAG 2.2 accessibility check\". Also TRIGGER when the user wants to fix or improve accessibility (a11y, WCAG, ARIA) in an LWC's HTML, JS, or CSS — semantic markup, focus, keyboard nav, contrast, screen-reader labels, WCAG 2.2 SC. Produces `a11y-review.md` with WCAG-cited findings. DO NOT TRIGGER for general LWC generation (use `experience-lwc-generate`) or SLDS visual/design review not focused on accessibility (use `design-systems-slds-validate`)."
4
4
  metadata:
5
5
  version: "1.1"
@@ -4,6 +4,9 @@ description: "Extracts, retrieves, and applies CMS brand guidelines (voice, tone
4
4
  metadata:
5
5
  version: "1.0"
6
6
  domains: ["Experience"]
7
+ relatedSkills:
8
+ - "experience-cms-brand-create"
9
+ - "experience-content-media-search"
7
10
  ---
8
11
 
9
12
  # Applying CMS Brand
@@ -24,7 +27,7 @@ Universal skill for searching, extracting, and applying CMS brand guidelines to
24
27
 
25
28
  **DO NOT use this skill when the user wants to:**
26
29
  - Search for images or media (use experience-content-media-search skill)
27
- - Create a new brand from scratch
30
+ - Create a new brand from scratch (use experience-cms-brand-create skill)
28
31
  - Edit brand definitions in CMS
29
32
  - Generate logos or visual brand assets
30
33
 
@@ -0,0 +1,197 @@
1
+ ---
2
+ name: experience-cms-brand-create
3
+ description: "Author a Salesforce Digital Experience brand (a \"brand.json\") so the VS Code Brand Toolkit can load, edit, and preview it. Use this skill whenever someone wants to: create a brand, make a new brand, generate a brand from a description or a color/logo/mood, add a brand to a project so the Brand Toolkit picks it up, scaffold a brand.json, theme a Digital Experience site, or turn a brand idea (\"a dark luxury brand\", \"match our logo\", \"coral + rounded + friendly\") into a loadable brand. Also use it when the user mentions \"Brand Toolkit\", \"theme manager brand\", \"brand token\", \"colorScheme\", \"primaryAccent\", \".digitalExperience/brands\", \"sfdc_cms:title\", or a \"brand.json\" that should show up in the Brand Toolkit. Do NOT use this skill to apply an existing brand's voice, tone, or guidelines to generated content (use experience-cms-brand-apply), to search Salesforce CMS for existing brands, or to search for images, media, or logos (use experience-content-media-search)."
4
+ metadata:
5
+ version: "1.0"
6
+ domains: ["Experience"]
7
+ relatedSkills:
8
+ - "experience-cms-brand-apply"
9
+ - "experience-content-media-search"
10
+ ---
11
+
12
+ # Create a Brand for the Brand Toolkit
13
+
14
+ Generates a Digital Experience **brand** — one `brand.json` file — from a user's
15
+ description, and writes it where the VS Code **Brand Toolkit** will discover it,
16
+ so the user can immediately load, edit, and preview the brand.
17
+
18
+ A brand is a single JSON object of design tokens: colors (`colorScheme`), a font
19
+ catalog and base font (`fontFamily` / `baseFontFamily`), size/spacing/border
20
+ scales, per-role `typography`, and `buttonStyleGroup` definitions. Most of it is
21
+ fixed structure with internal references; **you create a brand by starting from a
22
+ known-good template and changing only the leaf values** (colors, font choice,
23
+ border radius, base size) plus a unique name.
24
+
25
+ The Brand Toolkit owns everything downstream: it computes derived hover colors,
26
+ compiles the `--tm-*` CSS, and manages the active-brand config on Save. Your job
27
+ is just the `brand.json`.
28
+
29
+ > **Related:** This skill *creates* a new brand definition. To *apply* an existing
30
+ > brand's voice, tone, and guidelines to generated content, use the
31
+ > `experience-cms-brand-apply` skill instead.
32
+
33
+ ## Reference material
34
+
35
+ Read each reference when its step arrives — don't inline everything up front:
36
+
37
+ - **`assets/brand-template.json`** — the known-good full brand to clone. This
38
+ is your starting point for EVERY brand. Copy it, then change leaves.
39
+ - **`references/brand-anatomy.md`** — which fields are literals you should edit vs
40
+ references you must leave intact; the `colorScheme` guide; the font catalog and
41
+ which fonts actually render in the preview; the derived-colors rule. Read before
42
+ editing values.
43
+ - **`references/disk-contract.md`** — exactly where the file goes
44
+ (`.digitalExperience/brands/<slug>.brand.json`), the title→slug rule, and what
45
+ the toolkit generates so you don't. Read before writing the file.
46
+
47
+ ## Interactive flow
48
+
49
+ Walk these steps in order. When you have an interactive user, ask before assuming
50
+ and confirm the design back before writing; in a single-turn, headless, or CLI run
51
+ with no user to answer, state the choices you inferred and write in the same run
52
+ rather than waiting for a confirmation that cannot arrive (see Step 3). Steps 1–5
53
+ create the brand file and complete the task. After they finish, an optional
54
+ post-completion action — opening the Brand Toolkit to preview/edit — is described
55
+ in **"After completion"** below; it is not part of the required workflow.
56
+
57
+ ### Step 1: Gather the brand intent
58
+
59
+ Find out what the brand should feel like. If the user already gave a description
60
+ ("a dark, premium fintech brand in deep purple"), extract from it; otherwise ask
61
+ briefly for:
62
+
63
+ - **Name** — a short, human-readable brand name (becomes `sfdc_cms:title`, must be
64
+ unique in the project). If they don't offer one, propose one from the vibe.
65
+ - **Primary/brand color** — the signature accent. Accept a hex, a named color, or
66
+ a description ("Salesforce blue", "warm coral"). Convert to a `#rrggbb` hex.
67
+ - **Light or dark** — does the page background read light or dark? This sets
68
+ `root` and `contrast`.
69
+ - **Personality** (optional) — corners (sharp vs rounded), font feel (clean sans,
70
+ classic serif, techy mono), density. Map these to `borderRadius`, `fontFamily`
71
+ choice, and `baseFontSize`.
72
+
73
+ If a logo or image is provided, sample its dominant color for `primaryAccent` and
74
+ judge light/dark from its background. Keep it to a couple of questions — infer the
75
+ rest from the vibe and confirm in Step 3.
76
+
77
+ ### Step 2: Build the brand from the template
78
+
79
+ 1. Read `assets/brand-template.json` — this is your base. Read
80
+ `references/brand-anatomy.md` so you know which leaves are safe to change.
81
+ 2. Copy the template and override ONLY leaf values:
82
+ - `sfdc_cms:title` → the unique brand name.
83
+ - `colorScheme.root` / `contrast` → per light or dark (e.g. light: `#ffffff` /
84
+ `#000000`; dark: a dark bg / `#ffffff`).
85
+ - `colorScheme.primaryAccent` → the brand color.
86
+ - `colorScheme.primaryAccentContrast` → black or white, whichever is legible on
87
+ the accent.
88
+ - `colorScheme.neutral` → a mid gray that reads on `root`.
89
+ - `baseFontFamily` (and, to match, the `typography.heading.*.fontFamily`
90
+ entries) → a reference to a catalog key whose font actually renders in the
91
+ preview (see the anatomy doc's font list).
92
+ - Optional personality: `borderRadius.round.value`, `borderWeight.thin.value`,
93
+ `baseFontSize.value`, `fontWeight.normal`.
94
+ 3. Do NOT: add `*Derived` color keys, drop or rename any section/key, replace a
95
+ `{!$brand....}` reference with a literal, or use a font name outside the
96
+ renderable catalog. The structure must stay identical to the template.
97
+ 4. Sanity-check contrast: `contrast` on `root`, and `primaryAccentContrast` on
98
+ `primaryAccent`, must be legible. Prefer black/white for the contrast colors.
99
+
100
+ ### Step 3: Confirm the design (or, if headless, state it and proceed)
101
+
102
+ Assemble a compact summary of the concrete choices — name, the four or five hex
103
+ colors (with a note on light/dark), the font, and any corner/size/weight tweaks.
104
+ Then branch on whether a user can actually answer:
105
+
106
+ - **Interactive run (a user can reply):** show the summary and ask the user to
107
+ confirm or adjust. Iterate here rather than after the file is on disk.
108
+ - **Single-turn / headless / CLI / CI run (no user to confirm):** do **not** pause
109
+ for a confirmation that cannot arrive. State the choices you inferred and proceed
110
+ straight to Step 4, writing the file in the same run.
111
+
112
+ When you can't tell which mode you're in, prefer stating your choices and
113
+ proceeding over stalling — a written brand the user can adjust beats a hang.
114
+
115
+ ### Step 4: Write the brand file
116
+
117
+ Follow `references/disk-contract.md`:
118
+
119
+ 1. Derive `<slug>` from the confirmed title using the exact slug rule in that doc.
120
+ 2. Ensure `<workspaceRoot>/.digitalExperience/brands/` exists.
121
+ 3. If `<slug>.brand.json` already exists and this is a NEW brand, append the
122
+ lowest free numeric suffix (`_2`, `_3`, …).
123
+ 4. Write the brand object (unwrapped body, 2-space pretty-printed) to
124
+ `<workspaceRoot>/.digitalExperience/brands/<slug>.brand.json`.
125
+ 5. Do NOT write the `.css` or `activeBrand.json` — the toolkit generates those on
126
+ Save.
127
+
128
+ ### Step 5: Validate the file
129
+
130
+ Run the verification checklist in `references/disk-contract.md` (valid JSON;
131
+ unwrapped body; present + unique `sfdc_cms:title`; slug matches title; no
132
+ hand-authored `*Derived` keys; fonts renderable).
133
+
134
+ ## After completion (optional): Open the Brand Toolkit to preview and edit
135
+
136
+ The numbered workflow above is complete once Step 5 passes — the brand file is the
137
+ deliverable and stands on its own. This section is a **separate, optional action,
138
+ not a workflow step**, and only applies inside VS Code. Opening the Brand Toolkit
139
+ is just a convenience for previewing/editing. **Skip it entirely** (the brand is
140
+ already done — just tell the user where the file was written) when any of these
141
+ hold:
142
+
143
+ - The user isn't working in VS Code, or asked for the brand file only / "just
144
+ create it" / "don't open anything" / a headless, scripted, or CI context.
145
+ - There's no `.digitalExperience` project / VS Code workspace around the file
146
+ (e.g. you wrote to a standalone folder outside a Salesforce DX project).
147
+ - You can't tell you're in an interactive VS Code session (e.g. a plain CLI or
148
+ agent run with no desktop) — **don't** fire the launcher speculatively; a
149
+ `vscode://` deep link can otherwise cold-start or error out. When unsure, ask
150
+ the user whether to open the Brand Toolkit rather than assuming.
151
+
152
+ Only when the user is in VS Code and wants to preview/edit, open the **Brand
153
+ Toolkit** (Theme Preview) panel by running the terminal command that matches the
154
+ user's operating system. All three open the SAME deep link — only the OS launcher
155
+ differs; run exactly one (the one for the current OS):
156
+
157
+ - macOS:
158
+ `open "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
159
+ - Linux:
160
+ `xdg-open "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
161
+ - Windows (PowerShell):
162
+ `Start-Process "vscode://salesforce.salesforcedx-vscode-ui-preview/open-brand-manager"`
163
+
164
+ VS Code routes the link to the Live Preview (ui-preview) extension, which opens
165
+ the Brand Toolkit panel. Then tell the user:
166
+
167
+ > The Brand Toolkit is open in VS Code. Your new brand "<title>" is in the
168
+ > **Local** tab — select it to preview and fine-tune it; the toolkit computes the
169
+ > hover colors and compiles the CSS, and **Save** persists your tweaks.
170
+
171
+ If the panel was already open, the new brand may need a refresh in the Local tab
172
+ to appear. If nothing opens, the deep link requires the Live Preview extension
173
+ (`salesforce.salesforcedx-vscode-ui-preview`) to be installed and active — fall
174
+ back to telling the user to run **SFDX: Open Theme Preview** from the Command
175
+ Palette.
176
+
177
+ ## Guardrails
178
+
179
+ - **Clone the template; don't write a brand from scratch.** A hand-built brand
180
+ almost always drops a key the editors/compiler/preview expect, and the failure
181
+ is silent (wrong-looking preview, no error).
182
+ - **Edit literals, keep references.** Changing a `colorScheme` color re-themes
183
+ every button/accent that references it — that's the point. Replacing a reference
184
+ with a literal breaks that link.
185
+ - **Never author derived colors.** `primaryAccentDerived` /
186
+ `primaryAccentContrastDerived` are computed by the toolkit on load. Omit them.
187
+ - **Only use fonts that render in the preview** (system fonts + "Salesforce
188
+ Sans"). Any other name silently falls back, so the preview misleads.
189
+ - **`sfdc_cms:title` must be unique.** Duplicate titles collapse into one entry in
190
+ the toolkit's local list.
191
+ - **One file only.** Write `<slug>.brand.json`; let the toolkit produce the `.css`
192
+ and `activeBrand.json`.
193
+ - **The brand file is the deliverable; opening the toolkit is optional.** Steps
194
+ 1–5 fully complete the task. Only run the Brand Toolkit launcher (see "After
195
+ completion" above) inside VS Code when the user wants to preview/edit — never
196
+ fire a `vscode://` deep link in a headless, CLI, CI, or non-project context. When
197
+ in doubt, skip it and tell the user where the file is.
@@ -0,0 +1,329 @@
1
+ {
2
+ "sfdc_cms:title": "REPLACE_WITH_UNIQUE_BRAND_NAME",
3
+ "baseFontSize": {
4
+ "value": 16,
5
+ "unit": "px"
6
+ },
7
+ "baseFontFamily": "{!$brand.fontFamily.arial}",
8
+ "fontSize": {
9
+ "xSmall": {
10
+ "value": 0.625,
11
+ "unit": "rem"
12
+ },
13
+ "small": {
14
+ "value": 0.8125,
15
+ "unit": "rem"
16
+ },
17
+ "medium": {
18
+ "value": 1,
19
+ "unit": "rem"
20
+ },
21
+ "large": {
22
+ "value": 1.125,
23
+ "unit": "rem"
24
+ },
25
+ "xLarge": {
26
+ "value": 1.5,
27
+ "unit": "rem"
28
+ },
29
+ "xxLarge": {
30
+ "value": 2,
31
+ "unit": "rem"
32
+ }
33
+ },
34
+ "fontFamily": {
35
+ "arial": {
36
+ "name": "Arial",
37
+ "category": "sans-serif",
38
+ "fallbacks": ["Helvetica"]
39
+ },
40
+ "arialBlack": {
41
+ "name": "Arial Black",
42
+ "category": "sans-serif",
43
+ "fallbacks": ["Gadget"]
44
+ },
45
+ "comicSansMs": {
46
+ "name": "Comic Sans MS",
47
+ "category": "sans-serif",
48
+ "fallbacks": ["cursive"]
49
+ },
50
+ "calibri": {
51
+ "name": "Calibri",
52
+ "category": "sans-serif",
53
+ "fallbacks": ["Candara", "Segoe", "Segoe UI", "Optima", "Arial"]
54
+ },
55
+ "courierNew": {
56
+ "name": "Courier New",
57
+ "category": "monospace"
58
+ },
59
+ "georgia": {
60
+ "name": "Georgia",
61
+ "category": "serif"
62
+ },
63
+ "impact": {
64
+ "name": "Impact",
65
+ "category": "sans-serif",
66
+ "fallbacks": ["Charcoal"]
67
+ },
68
+ "lucidaConsole": {
69
+ "name": "Lucida Console",
70
+ "category": "monospace",
71
+ "fallbacks": ["Monaco"]
72
+ },
73
+ "lucidaSansUnicode": {
74
+ "name": "Lucida Sans Unicode",
75
+ "category": "sans-serif",
76
+ "fallbacks": ["Lucida Grande"]
77
+ },
78
+ "palatinoLinotype": {
79
+ "name": "Palatino Linotype",
80
+ "category": "serif",
81
+ "fallbacks": ["Book Antiqua", "Palatino"]
82
+ },
83
+ "tahoma": {
84
+ "name": "Tahoma",
85
+ "category": "sans-serif",
86
+ "fallbacks": ["Geneva"]
87
+ },
88
+ "timesNewRoman": {
89
+ "name": "Times New Roman",
90
+ "category": "serif",
91
+ "fallbacks": ["Times"]
92
+ },
93
+ "trebuchetMs": {
94
+ "name": "Trebuchet MS",
95
+ "category": "sans-serif"
96
+ },
97
+ "verdana": {
98
+ "name": "Verdana",
99
+ "category": "sans-serif",
100
+ "fallbacks": ["Geneva"]
101
+ }
102
+ },
103
+ "letterSpacing": {
104
+ "normal": "normal",
105
+ "wide": {
106
+ "value": 6,
107
+ "unit": "px"
108
+ },
109
+ "compact": {
110
+ "value": -1,
111
+ "unit": "px"
112
+ }
113
+ },
114
+ "fontWeight": {
115
+ "light": 300,
116
+ "normal": 400,
117
+ "bold": 700
118
+ },
119
+ "spacing": {
120
+ "none": {
121
+ "top": { "value": 0, "unit": "rem" },
122
+ "bottom": { "value": 0, "unit": "rem" },
123
+ "left": { "value": 0, "unit": "rem" },
124
+ "right": { "value": 0, "unit": "rem" }
125
+ },
126
+ "xSmall": {
127
+ "top": { "value": 0.5, "unit": "rem" },
128
+ "bottom": { "value": 0.5, "unit": "rem" },
129
+ "left": { "value": 0.5, "unit": "rem" },
130
+ "right": { "value": 0.5, "unit": "rem" }
131
+ },
132
+ "small": {
133
+ "top": { "value": 0.75, "unit": "rem" },
134
+ "bottom": { "value": 0.75, "unit": "rem" },
135
+ "left": { "value": 0.75, "unit": "rem" },
136
+ "right": { "value": 0.75, "unit": "rem" }
137
+ },
138
+ "medium": {
139
+ "top": { "value": 1, "unit": "rem" },
140
+ "bottom": { "value": 1, "unit": "rem" },
141
+ "left": { "value": 1, "unit": "rem" },
142
+ "right": { "value": 1, "unit": "rem" }
143
+ },
144
+ "large": {
145
+ "top": { "value": 1.5, "unit": "rem" },
146
+ "bottom": { "value": 1.5, "unit": "rem" },
147
+ "left": { "value": 1.5, "unit": "rem" },
148
+ "right": { "value": 1.5, "unit": "rem" }
149
+ },
150
+ "xLarge": {
151
+ "top": { "value": 2, "unit": "rem" },
152
+ "bottom": { "value": 2, "unit": "rem" },
153
+ "left": { "value": 2, "unit": "rem" },
154
+ "right": { "value": 2, "unit": "rem" }
155
+ }
156
+ },
157
+ "colorScheme": {
158
+ "root": "#ffffff",
159
+ "contrast": "#000000",
160
+ "primaryAccent": "#0176d3",
161
+ "primaryAccentContrast": "#ffffff",
162
+ "neutral": "#747474"
163
+ },
164
+ "borderWeight": {
165
+ "none": { "value": 0, "unit": "rem" },
166
+ "thin": { "value": 0.0625, "unit": "rem" },
167
+ "medium": { "value": 0.125, "unit": "rem" },
168
+ "thick": { "value": 0.1875, "unit": "rem" }
169
+ },
170
+ "borderRadius": {
171
+ "square": { "value": 0, "unit": "rem" },
172
+ "round": { "value": 0.25, "unit": "rem" }
173
+ },
174
+ "typography": {
175
+ "heading": {
176
+ "heading1": {
177
+ "fontFamily": "{!$brand.fontFamily.arial}",
178
+ "fontSize": "{!$brand.fontSize.xxLarge}",
179
+ "lineHeight": 1.5,
180
+ "fontWeight": "{!$brand.fontWeight.normal}",
181
+ "letterSpacing": "normal",
182
+ "textTransform": "none"
183
+ },
184
+ "heading2": {
185
+ "fontFamily": "{!$brand.fontFamily.arial}",
186
+ "fontSize": "{!$brand.fontSize.xLarge}",
187
+ "lineHeight": 1.5,
188
+ "fontWeight": "{!$brand.fontWeight.normal}",
189
+ "letterSpacing": "normal",
190
+ "textTransform": "none"
191
+ },
192
+ "heading3": {
193
+ "fontFamily": "{!$brand.fontFamily.arial}",
194
+ "fontSize": "{!$brand.fontSize.large}",
195
+ "lineHeight": 1.5,
196
+ "fontWeight": "{!$brand.fontWeight.normal}",
197
+ "letterSpacing": "normal",
198
+ "textTransform": "none"
199
+ },
200
+ "heading4": {
201
+ "fontFamily": "{!$brand.fontFamily.arial}",
202
+ "fontSize": "{!$brand.fontSize.medium}",
203
+ "lineHeight": 1.5,
204
+ "fontWeight": "{!$brand.fontWeight.normal}",
205
+ "letterSpacing": "normal",
206
+ "textTransform": "none"
207
+ },
208
+ "heading5": {
209
+ "fontFamily": "{!$brand.fontFamily.arial}",
210
+ "fontSize": "{!$brand.fontSize.small}",
211
+ "lineHeight": 1.5,
212
+ "fontWeight": "{!$brand.fontWeight.normal}",
213
+ "letterSpacing": "normal",
214
+ "textTransform": "none"
215
+ },
216
+ "heading6": {
217
+ "fontFamily": "{!$brand.fontFamily.arial}",
218
+ "fontSize": "{!$brand.fontSize.xSmall}",
219
+ "lineHeight": 1.5,
220
+ "fontWeight": "{!$brand.fontWeight.normal}",
221
+ "letterSpacing": "normal",
222
+ "textTransform": "none"
223
+ }
224
+ },
225
+ "paragraph": {
226
+ "paragraph1": {
227
+ "fontFamily": "{!$brand.fontFamily.arial}",
228
+ "fontSize": "{!$brand.fontSize.medium}",
229
+ "lineHeight": 1.5,
230
+ "fontWeight": "{!$brand.fontWeight.normal}",
231
+ "letterSpacing": "normal",
232
+ "textTransform": "none"
233
+ },
234
+ "paragraph2": {
235
+ "fontFamily": "{!$brand.fontFamily.arial}",
236
+ "fontSize": "{!$brand.fontSize.small}",
237
+ "lineHeight": 1.5,
238
+ "fontWeight": "{!$brand.fontWeight.normal}",
239
+ "letterSpacing": "normal",
240
+ "textTransform": "none"
241
+ }
242
+ },
243
+ "button": {
244
+ "button1": {
245
+ "fontFamily": "{!$brand.fontFamily.arial}",
246
+ "fontSize": "{!$brand.fontSize.medium}",
247
+ "lineHeight": 1.5,
248
+ "fontWeight": "{!$brand.fontWeight.normal}",
249
+ "letterSpacing": "normal",
250
+ "textTransform": "none"
251
+ }
252
+ },
253
+ "input": {
254
+ "input1": {
255
+ "fontFamily": "{!$brand.fontFamily.arial}",
256
+ "fontSize": "{!$brand.fontSize.medium}",
257
+ "lineHeight": 1.5,
258
+ "fontWeight": "{!$brand.fontWeight.normal}",
259
+ "letterSpacing": "normal",
260
+ "textTransform": "none"
261
+ }
262
+ },
263
+ "label": {
264
+ "label1": {
265
+ "fontFamily": "{!$brand.fontFamily.arial}",
266
+ "fontSize": "{!$brand.fontSize.small}",
267
+ "lineHeight": 1.5,
268
+ "fontWeight": "{!$brand.fontWeight.normal}",
269
+ "letterSpacing": "normal",
270
+ "textTransform": "none"
271
+ }
272
+ }
273
+ },
274
+ "buttonStyleGroup": {
275
+ "primary": {
276
+ "lightning:buttonColorGroup": {
277
+ "backgroundColor": "{!$brand.colorScheme.primaryAccent}",
278
+ "textColor": "{!$brand.colorScheme.primaryAccentContrast}",
279
+ "borderColor": "{!$brand.colorScheme.primaryAccent}",
280
+ "backgroundHoverColor": "{!$brand.colorScheme.primaryAccentDerived}",
281
+ "textHoverColor": "{!$brand.colorScheme.primaryAccentContrastDerived}",
282
+ "borderHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
283
+ },
284
+ "lightning:borderRadius": "{!$brand.borderRadius.round}",
285
+ "lightning:borderWidth": "{!$brand.borderWeight.thin}",
286
+ "lightning:typography": "{!$brand.typography.button.button1}",
287
+ "lightning:padding": {
288
+ "top": { "value": 0.5, "unit": "rem" },
289
+ "bottom": { "value": 0.5, "unit": "rem" },
290
+ "left": { "value": 1, "unit": "rem" },
291
+ "right": { "value": 1, "unit": "rem" }
292
+ }
293
+ },
294
+ "secondary": {
295
+ "lightning:buttonColorGroup": {
296
+ "backgroundColor": "{!$brand.colorScheme.primaryAccentContrast}",
297
+ "textColor": "{!$brand.colorScheme.primaryAccent}",
298
+ "borderColor": "{!$brand.colorScheme.primaryAccent}",
299
+ "backgroundHoverColor": "{!$brand.colorScheme.primaryAccentContrastDerived}",
300
+ "textHoverColor": "{!$brand.colorScheme.primaryAccentDerived}",
301
+ "borderHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
302
+ },
303
+ "lightning:borderRadius": "{!$brand.borderRadius.round}",
304
+ "lightning:borderWidth": "{!$brand.borderWeight.thin}",
305
+ "lightning:typography": "{!$brand.typography.button.button1}",
306
+ "lightning:padding": {
307
+ "top": { "value": 0.5, "unit": "rem" },
308
+ "bottom": { "value": 0.5, "unit": "rem" },
309
+ "left": { "value": 1, "unit": "rem" },
310
+ "right": { "value": 1, "unit": "rem" }
311
+ }
312
+ },
313
+ "tertiary": {
314
+ "lightning:buttonColorGroup": {
315
+ "textColor": "{!$brand.colorScheme.primaryAccent}",
316
+ "textHoverColor": "{!$brand.colorScheme.primaryAccentDerived}"
317
+ },
318
+ "lightning:borderRadius": "{!$brand.borderRadius.round}",
319
+ "lightning:borderWidth": "{!$brand.borderWeight.none}",
320
+ "lightning:typography": "{!$brand.typography.button.button1}",
321
+ "lightning:padding": {
322
+ "top": { "value": 0.5, "unit": "rem" },
323
+ "bottom": { "value": 0.5, "unit": "rem" },
324
+ "left": { "value": 1, "unit": "rem" },
325
+ "right": { "value": 1, "unit": "rem" }
326
+ }
327
+ }
328
+ }
329
+ }
@@ -0,0 +1,120 @@
1
+ # Brand anatomy — what to edit and what to leave alone
2
+
3
+ A brand is one JSON object (the `contentBody` of a CMS brand, saved **unwrapped**
4
+ — no envelope). Its shape is fixed: the Brand Toolkit's editors, the CSS
5
+ compiler, and the preview all expect every top-level section (`colorScheme`,
6
+ `fontFamily`, `fontSize`, `typography`, `buttonStyleGroup`, …) to be present with
7
+ the same keys as the template. **Start from `assets/brand-template.json` and
8
+ change only leaf values** — never drop a section, rename a key, or invent a new
9
+ one. A missing or misspelled key doesn't error; it silently falls back, so the
10
+ preview looks wrong with no explanation.
11
+
12
+ ## The two kinds of values
13
+
14
+ 1. **Literals** — the actual design values. These are the ONLY things you should
15
+ change to create a new brand:
16
+ - Colors: `colorScheme.*` (hex strings)
17
+ - Base font: `baseFontFamily` (a reference — see below), `baseFontSize.value`
18
+ - Corner rounding: `borderRadius.round.value`
19
+ - Border thickness: `borderWeight.thin.value`, etc.
20
+ - Per-role font sizes, weights, transforms inside `typography.*` if you want
21
+ finer control (usually leave these as references to the shared scale).
22
+
23
+ 2. **References** — strings like `"{!$brand.fontFamily.arial}"` or
24
+ `"{!$brand.colorScheme.primaryAccent}"`. These are POINTERS into other parts
25
+ of the same brand. The toolkit resolves them at load time. This is why editing
26
+ one color (e.g. `colorScheme.primaryAccent`) automatically re-themes every
27
+ button and accent that points at it. **Keep the references intact** — don't
28
+ replace a reference with a hard-coded literal, or you break the live-edit link
29
+ that makes the brand cohesive. To change what a button looks like, change the
30
+ `colorScheme` color it points to, not the button.
31
+
32
+ ## Colors — `colorScheme` (edit these)
33
+
34
+ | Key | Meaning | Typical |
35
+ | ---------------------- | --------------------------------------------------- | ------- |
36
+ | `root` | Page/background color | `#ffffff` (light) / a dark color (dark) |
37
+ | `contrast` | Main text color on `root` | `#000000` (light) / `#ffffff` (dark) |
38
+ | `primaryAccent` | Brand color — primary buttons, links, emphasis | the brand's signature color |
39
+ | `primaryAccentContrast`| Text/icon color that sits ON `primaryAccent` | usually `#ffffff` or `#000000`, whichever reads on the accent |
40
+ | `neutral` | Muted borders, secondary text, dividers | a mid gray |
41
+
42
+ **Do NOT hand-author `primaryAccentDerived` or `primaryAccentContrastDerived`.**
43
+ The toolkit computes them from `primaryAccent`/`primaryAccentContrast` on load (a
44
+ darker hover shade + a WCAG-contrast-checked hover text color) and rewrites them.
45
+ The template intentionally OMITS them; leave them out. The `{!...Derived}`
46
+ references inside `buttonStyleGroup` still resolve correctly because the toolkit
47
+ fills the derived values in before resolving.
48
+
49
+ Contrast matters: `contrast` must be legible on `root`, and `primaryAccentContrast`
50
+ must be legible on `primaryAccent`. When in doubt, pick black or white for the
51
+ contrast colors — whichever has the higher contrast ratio against its background.
52
+
53
+ Use 6-digit `#rrggbb` hex. (The toolkit normalizes to 8-digit `#rrggbbaa`
54
+ internally; 6-digit in and out is fine.)
55
+
56
+ ## Fonts — `fontFamily` + `baseFontFamily` (choose from the catalog)
57
+
58
+ `fontFamily` is a **catalog** of available fonts; `baseFontFamily` and every
59
+ `typography.*.fontFamily` is a **reference** into that catalog
60
+ (`"{!$brand.fontFamily.<key>}"`).
61
+
62
+ To change the brand's font, point `baseFontFamily` (and, if you want headings to
63
+ match, the `typography.heading.*.fontFamily` entries) at a different catalog key.
64
+ Prefer changing `baseFontFamily` and leaving the rest referencing it through the
65
+ scale.
66
+
67
+ **Preview fidelity — important.** The preview only renders web-safe system fonts
68
+ plus "Salesforce Sans". Any other font name falls back to its generic category
69
+ (sans-serif/serif/monospace), so the preview won't show it. Stick to these
70
+ catalog keys, which all render:
71
+
72
+ - Sans-serif: `arial`, `verdana`, `tahoma`, `trebuchetMs`, `calibri`,
73
+ `lucidaSansUnicode`, `arialBlack`, `impact`
74
+ - Serif: `georgia`, `timesNewRoman`, `palatinoLinotype`
75
+ - Monospace: `courierNew`, `lucidaConsole`
76
+
77
+ If a brand truly needs a custom/brand font, keep it as an aspiration in the brand
78
+ name/description, but pick the closest system font from the list above for the
79
+ `fontFamily` value so the preview is honest. Don't add a new `fontFamily` entry
80
+ with a name that has no web source — it will silently fall back.
81
+
82
+ ## Sizes, weights, spacing, borders
83
+
84
+ These are shared scales referenced by name throughout `typography` and
85
+ `buttonStyleGroup`. Sensible edits:
86
+
87
+ - `baseFontSize.value` — the root font size in px (default 16). Bump to 17–18 for
88
+ a more spacious feel.
89
+ - `borderRadius.round.value` — corner rounding in rem. `0` = sharp/square,
90
+ `0.25` = default, `0.5`+ = pill-ish.
91
+ - `borderWeight.thin.value` — default border thickness in rem.
92
+ - `fontWeight.normal` — 400 by default; some brands prefer 300 (lighter) or a
93
+ heavier body.
94
+
95
+ Leave the `spacing`, `letterSpacing`, and `fontSize` scale keys in place — the
96
+ editors and preview reference them by name. Change the `.value` inside a scale
97
+ entry if you must, but don't remove or rename the entries.
98
+
99
+ ## `typography` and `buttonStyleGroup` — mostly references, edit sparingly
100
+
101
+ `typography` maps each text role (heading1–6, paragraph1–2, button, input, label)
102
+ to a font family, size, weight, line-height, letter-spacing, and transform — all
103
+ as references into the scales above. `buttonStyleGroup` (primary/secondary/
104
+ tertiary) maps button colors to `colorScheme` references and picks border radius/
105
+ width/typography.
106
+
107
+ For most brands you should NOT touch these — they inherit correctly from the
108
+ colors and fonts you set above. Edit them only for a deliberate deviation (e.g.
109
+ uppercase buttons via `textTransform: "uppercase"` on `typography.button.button1`,
110
+ or a square primary button via a different `lightning:borderRadius` reference).
111
+ When you do, change the reference target or the literal in place — keep the key
112
+ structure identical to the template.
113
+
114
+ ## The one field that defines identity: `sfdc_cms:title`
115
+
116
+ `sfdc_cms:title` is the brand's display name AND its identity in the toolkit's
117
+ local list. It **must be unique** among the project's local brands — two brands
118
+ with the same title collapse into one entry in the gallery. Give every generated
119
+ brand a distinct, human-readable title (e.g. `"Sunset Coral"`, `"Acme Dark"`).
120
+ See `references/disk-contract.md` for how the title maps to the on-disk filename.