ima-claude 2.9.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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +463 -0
  3. package/dist/cli.js +1064 -0
  4. package/package.json +49 -0
  5. package/platforms/claude/adapter.ts +115 -0
  6. package/platforms/junie/adapter.ts +254 -0
  7. package/platforms/junie/agents-template.md +113 -0
  8. package/platforms/junie/hook-translations.md +84 -0
  9. package/platforms/shared/detector.ts +27 -0
  10. package/platforms/shared/installer.ts +202 -0
  11. package/platforms/shared/types.ts +78 -0
  12. package/plugins/ima-claude/.claude-plugin/plugin.json +25 -0
  13. package/plugins/ima-claude/agents/explorer.md +30 -0
  14. package/plugins/ima-claude/agents/implementer.md +30 -0
  15. package/plugins/ima-claude/agents/memory.md +42 -0
  16. package/plugins/ima-claude/agents/reviewer.md +53 -0
  17. package/plugins/ima-claude/agents/tester.md +33 -0
  18. package/plugins/ima-claude/agents/wp-developer.md +46 -0
  19. package/plugins/ima-claude/hooks/README.md +145 -0
  20. package/plugins/ima-claude/hooks/atlassian_prereqs.py +112 -0
  21. package/plugins/ima-claude/hooks/block_sed_edits.py +59 -0
  22. package/plugins/ima-claude/hooks/bootstrap.sh +90 -0
  23. package/plugins/ima-claude/hooks/bootstrap_utility_check.py +94 -0
  24. package/plugins/ima-claude/hooks/composer_autoload_check.py +70 -0
  25. package/plugins/ima-claude/hooks/docs_organization.py +104 -0
  26. package/plugins/ima-claude/hooks/enforce_rg_over_grep.py +56 -0
  27. package/plugins/ima-claude/hooks/fp_utility_check.py +90 -0
  28. package/plugins/ima-claude/hooks/hook_logger.py +69 -0
  29. package/plugins/ima-claude/hooks/hooks.json +239 -0
  30. package/plugins/ima-claude/hooks/jira_issue_fetch.py +79 -0
  31. package/plugins/ima-claude/hooks/jquery_in_wordpress.py +92 -0
  32. package/plugins/ima-claude/hooks/memory_bootstrap.py +79 -0
  33. package/plugins/ima-claude/hooks/memory_store_reminder.py +75 -0
  34. package/plugins/ima-claude/hooks/prompt_coach.py +125 -0
  35. package/plugins/ima-claude/hooks/prompt_coach_digest.md +48 -0
  36. package/plugins/ima-claude/hooks/prompt_coach_system.md +30 -0
  37. package/plugins/ima-claude/hooks/sequential_thinking_check.py +81 -0
  38. package/plugins/ima-claude/hooks/serena_over_grep.py +96 -0
  39. package/plugins/ima-claude/hooks/serena_over_read.py +66 -0
  40. package/plugins/ima-claude/hooks/serena_project_check.py +133 -0
  41. package/plugins/ima-claude/hooks/sql_injection_check.py +73 -0
  42. package/plugins/ima-claude/hooks/task_master_after_plan.py +31 -0
  43. package/plugins/ima-claude/hooks/task_master_before_impl.py +93 -0
  44. package/plugins/ima-claude/hooks/tavily_extract_advanced.py +48 -0
  45. package/plugins/ima-claude/hooks/vestige_before_external.py +86 -0
  46. package/plugins/ima-claude/hooks/webfetch_to_tavily.py +42 -0
  47. package/plugins/ima-claude/hooks/websearch_to_tavily.py +41 -0
  48. package/plugins/ima-claude/hooks/wp_security_check.py +150 -0
  49. package/plugins/ima-claude/personalities/README.md +45 -0
  50. package/plugins/ima-claude/personalities/enable-40k.md +69 -0
  51. package/plugins/ima-claude/personalities/enable-templars.md +69 -0
  52. package/plugins/ima-claude/skills/.research-summary.md +340 -0
  53. package/plugins/ima-claude/skills/architect/SKILL.md +304 -0
  54. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +200 -0
  55. package/plugins/ima-claude/skills/discourse/SKILL.md +440 -0
  56. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +192 -0
  57. package/plugins/ima-claude/skills/discourse-admin/references/api-endpoints.md +441 -0
  58. package/plugins/ima-claude/skills/discourse-admin/references/gotchas.md +107 -0
  59. package/plugins/ima-claude/skills/discourse-admin/references/staging-defaults.md +98 -0
  60. package/plugins/ima-claude/skills/discourse-admin/scripts/discourse-admin.py +319 -0
  61. package/plugins/ima-claude/skills/docs-organize/SKILL.md +254 -0
  62. package/plugins/ima-claude/skills/docs-organize/templates/active-README.md +50 -0
  63. package/plugins/ima-claude/skills/docs-organize/templates/archive-README.md +57 -0
  64. package/plugins/ima-claude/skills/docs-organize/templates/docs-README.md +43 -0
  65. package/plugins/ima-claude/skills/docs-organize/templates/phase-archive-README.md +83 -0
  66. package/plugins/ima-claude/skills/docs-organize/templates/section-README.md +48 -0
  67. package/plugins/ima-claude/skills/docs-organize/templates/transient-README.md +79 -0
  68. package/plugins/ima-claude/skills/docs-organize/templates/transient-gitignore +9 -0
  69. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +496 -0
  70. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +258 -0
  71. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +278 -0
  72. package/plugins/ima-claude/skills/ima-bootstrap/references/bootstrap-patterns.md +356 -0
  73. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +273 -0
  74. package/plugins/ima-claude/skills/ima-bootstrap/references/theme-integration.md +212 -0
  75. package/plugins/ima-claude/skills/ima-brand/SKILL.md +108 -0
  76. package/plugins/ima-claude/skills/ima-brand/references/brand-identity.md +140 -0
  77. package/plugins/ima-claude/skills/ima-brand/references/digital-standards.md +180 -0
  78. package/plugins/ima-claude/skills/ima-brand/references/visual-system.md +173 -0
  79. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +175 -0
  80. package/plugins/ima-claude/skills/ima-forms-expert/references/container-components.md +154 -0
  81. package/plugins/ima-claude/skills/ima-forms-expert/references/examples.md +328 -0
  82. package/plugins/ima-claude/skills/ima-forms-expert/references/field-components.md +298 -0
  83. package/plugins/ima-claude/skills/ima-forms-expert/references/form-factory.md +193 -0
  84. package/plugins/ima-claude/skills/ima-forms-expert/references/quick-reference.md +153 -0
  85. package/plugins/ima-claude/skills/ima-forms-expert/references/validation-engine.md +336 -0
  86. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +178 -0
  87. package/plugins/ima-claude/skills/jquery/SKILL.md +413 -0
  88. package/plugins/ima-claude/skills/js-fp/SKILL.md +463 -0
  89. package/plugins/ima-claude/skills/js-fp/core-principles.md +487 -0
  90. package/plugins/ima-claude/skills/js-fp/examples/pure-functions.js +260 -0
  91. package/plugins/ima-claude/skills/js-fp/examples/tests/pure-functions.test.js +262 -0
  92. package/plugins/ima-claude/skills/js-fp/references/anti-patterns.md +120 -0
  93. package/plugins/ima-claude/skills/js-fp/references/performance-patterns.md +116 -0
  94. package/plugins/ima-claude/skills/js-fp/references/testing-patterns.md +134 -0
  95. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +280 -0
  96. package/plugins/ima-claude/skills/js-fp-api/examples/crud-endpoint.js +258 -0
  97. package/plugins/ima-claude/skills/js-fp-api/references/middleware-patterns.md +134 -0
  98. package/plugins/ima-claude/skills/js-fp-api/references/security-sql.md +110 -0
  99. package/plugins/ima-claude/skills/js-fp-api/references/validation-patterns.md +165 -0
  100. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +447 -0
  101. package/plugins/ima-claude/skills/js-fp-react/examples/ProductCard.tsx +65 -0
  102. package/plugins/ima-claude/skills/js-fp-react/references/hooks-advanced.md +136 -0
  103. package/plugins/ima-claude/skills/js-fp-react/references/performance-patterns.md +175 -0
  104. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +322 -0
  105. package/plugins/ima-claude/skills/js-fp-vue/references/complete-examples.md +397 -0
  106. package/plugins/ima-claude/skills/js-fp-vue/references/composables-advanced.md +282 -0
  107. package/plugins/ima-claude/skills/js-fp-vue/references/reactivity-patterns.md +348 -0
  108. package/plugins/ima-claude/skills/js-fp-vue/references/testing.md +314 -0
  109. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +301 -0
  110. package/plugins/ima-claude/skills/js-fp-wordpress/references/ajax-patterns.md +192 -0
  111. package/plugins/ima-claude/skills/js-fp-wordpress/references/event-patterns.md +136 -0
  112. package/plugins/ima-claude/skills/js-fp-wordpress/references/wp-integration.md +248 -0
  113. package/plugins/ima-claude/skills/livecanvas/SKILL.md +209 -0
  114. package/plugins/ima-claude/skills/livecanvas/references/livecanvas-features.md +311 -0
  115. package/plugins/ima-claude/skills/livecanvas/references/loops-and-logic.md +730 -0
  116. package/plugins/ima-claude/skills/livecanvas/references/picostrap.md +227 -0
  117. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +339 -0
  118. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +109 -0
  119. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +182 -0
  120. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +233 -0
  121. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +149 -0
  122. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +174 -0
  123. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +118 -0
  124. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +259 -0
  125. package/plugins/ima-claude/skills/php-authnet/SKILL.md +275 -0
  126. package/plugins/ima-claude/skills/php-authnet/references/api-reference.md +624 -0
  127. package/plugins/ima-claude/skills/php-authnet/references/sandbox-testing.md +424 -0
  128. package/plugins/ima-claude/skills/php-fp/SKILL.md +333 -0
  129. package/plugins/ima-claude/skills/php-fp/examples/pure-functions.php +403 -0
  130. package/plugins/ima-claude/skills/php-fp/examples/tests/PureFunctionsTest.php +515 -0
  131. package/plugins/ima-claude/skills/php-fp/references/core-principles.md +277 -0
  132. package/plugins/ima-claude/skills/php-fp/references/testing-patterns.md +374 -0
  133. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +216 -0
  134. package/plugins/ima-claude/skills/php-fp-wordpress/references/fp-patterns.md +275 -0
  135. package/plugins/ima-claude/skills/php-fp-wordpress/references/plugin-architecture.md +295 -0
  136. package/plugins/ima-claude/skills/php-fp-wordpress/references/security-examples.md +203 -0
  137. package/plugins/ima-claude/skills/php-fp-wordpress/references/testing-strategy.md +259 -0
  138. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +716 -0
  139. package/plugins/ima-claude/skills/playwright/SKILL.md +434 -0
  140. package/plugins/ima-claude/skills/playwright/references/accessibility-testing.md +153 -0
  141. package/plugins/ima-claude/skills/playwright/references/ci-cd.md +268 -0
  142. package/plugins/ima-claude/skills/playwright/references/network-mocking.md +270 -0
  143. package/plugins/ima-claude/skills/playwright/references/visual-regression.md +215 -0
  144. package/plugins/ima-claude/skills/py-fp/SKILL.md +663 -0
  145. package/plugins/ima-claude/skills/py-fp/examples/pure-functions.py +185 -0
  146. package/plugins/ima-claude/skills/py-fp/examples/tests/test_pure_functions.py +244 -0
  147. package/plugins/ima-claude/skills/py-fp/references/core-principles.md +381 -0
  148. package/plugins/ima-claude/skills/py-fp/references/testing-patterns.md +283 -0
  149. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +327 -0
  150. package/plugins/ima-claude/skills/quasar-fp/metadata.json +85 -0
  151. package/plugins/ima-claude/skills/quasar-fp/references/component-patterns.md +257 -0
  152. package/plugins/ima-claude/skills/quasar-fp/references/theme-integration.md +233 -0
  153. package/plugins/ima-claude/skills/quasar-fp/references/utility-classes.md +237 -0
  154. package/plugins/ima-claude/skills/quickstart/SKILL.md +129 -0
  155. package/plugins/ima-claude/skills/rails/SKILL.md +359 -0
  156. package/plugins/ima-claude/skills/resume-session/SKILL.md +68 -0
  157. package/plugins/ima-claude/skills/rg/SKILL.md +205 -0
  158. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +336 -0
  159. package/plugins/ima-claude/skills/save-session/SKILL.md +81 -0
  160. package/plugins/ima-claude/skills/scorecard/SKILL.md +96 -0
  161. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +127 -0
  162. package/plugins/ima-claude/skills/skill-analyzer/references/advanced-checklist.md +44 -0
  163. package/plugins/ima-claude/skills/skill-analyzer/references/core-checklist.md +60 -0
  164. package/plugins/ima-claude/skills/skill-analyzer/scripts/analyze_skill.py +418 -0
  165. package/plugins/ima-claude/skills/skill-creator/LICENSE.txt +202 -0
  166. package/plugins/ima-claude/skills/skill-creator/SKILL.md +343 -0
  167. package/plugins/ima-claude/skills/skill-creator/references/output-patterns.md +82 -0
  168. package/plugins/ima-claude/skills/skill-creator/references/workflows.md +28 -0
  169. package/plugins/ima-claude/skills/skill-creator/scripts/init_skill.py +303 -0
  170. package/plugins/ima-claude/skills/skill-creator/scripts/package_skill.py +110 -0
  171. package/plugins/ima-claude/skills/skill-creator/scripts/quick_validate.py +103 -0
  172. package/plugins/ima-claude/skills/task-master/SKILL.md +51 -0
  173. package/plugins/ima-claude/skills/task-planner/SKILL.md +228 -0
  174. package/plugins/ima-claude/skills/task-runner/SKILL.md +192 -0
  175. package/plugins/ima-claude/skills/unit-testing/SKILL.md +198 -0
  176. package/plugins/ima-claude/skills/unit-testing/references/mock-patterns.md +181 -0
  177. package/plugins/ima-claude/skills/unit-testing/references/tdd-workflow.md +177 -0
  178. package/plugins/ima-claude/skills/unit-testing/references/test-strategy.md +126 -0
  179. package/plugins/ima-claude/skills/wp-local/SKILL.md +246 -0
  180. package/plugins/ima-claude/skills/wp-local/references/configuration.md +198 -0
  181. package/plugins/ima-claude/skills/wp-local/references/wp-cli-reference.md +406 -0
  182. package/plugins/ima-claude/skills/wp-local/scripts/wp-local.sh +61 -0
@@ -0,0 +1,356 @@
1
+ # Bootstrap 5.3 Patterns Reference
2
+
3
+ Extended reference for Bootstrap patterns beyond the quick reference in SKILL.md.
4
+
5
+ ---
6
+
7
+ ## Sass Customization
8
+
9
+ ### Variable Override Pattern
10
+
11
+ Variables must be set **before** Bootstrap's `_variables.scss` is imported. Bootstrap uses `!default` so first-defined wins.
12
+
13
+ ```scss
14
+ // 1. Functions first
15
+ @import "bootstrap5/functions";
16
+
17
+ // 2. YOUR overrides (before Bootstrap variables)
18
+ $primary: #040C53;
19
+ $font-family-base: 'Open Sans', sans-serif;
20
+
21
+ // 3. Bootstrap variables (respects your overrides)
22
+ @import "bootstrap5/variables";
23
+ @import "bootstrap5/variables-dark";
24
+
25
+ // 4. Maps (after variables, before mixins)
26
+ @import "bootstrap5/maps";
27
+ @import "bootstrap5/mixins";
28
+ @import "bootstrap5/root";
29
+ ```
30
+
31
+ ### Adding Custom Theme Colors
32
+
33
+ ```scss
34
+ // After @import "variables" but before @import "maps"
35
+ $custom-colors: (
36
+ "brand-teal": #00B8B8,
37
+ "brand-sky": #A2CFF0
38
+ );
39
+ $theme-colors: map-merge($theme-colors, $custom-colors);
40
+ ```
41
+
42
+ This generates `.text-brand-teal`, `.bg-brand-teal`, `.btn-brand-teal` etc.
43
+
44
+ ### Extending the Utility API
45
+
46
+ Add custom utilities via the `$utilities` map (before `utilities/api` import):
47
+
48
+ ```scss
49
+ $utilities: map-merge(
50
+ $utilities,
51
+ (
52
+ "custom-property": (
53
+ property: custom-property,
54
+ class: custom,
55
+ values: (
56
+ 1: value-1,
57
+ 2: value-2,
58
+ )
59
+ )
60
+ )
61
+ );
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Grid System Details
67
+
68
+ ### Basic Grid
69
+ ```html
70
+ <div class="container">
71
+ <div class="row">
72
+ <div class="col-md-8">Main content</div>
73
+ <div class="col-md-4">Sidebar</div>
74
+ </div>
75
+ </div>
76
+ ```
77
+
78
+ ### Auto-Layout Columns
79
+ ```html
80
+ <div class="row">
81
+ <div class="col">Equal</div> <!-- auto-size -->
82
+ <div class="col">Equal</div>
83
+ <div class="col">Equal</div>
84
+ </div>
85
+ ```
86
+
87
+ ### Responsive Breakpoints (VIEWPORT-based)
88
+
89
+ | Breakpoint | Class infix | Dimensions |
90
+ |-----------|-------------|------------|
91
+ | Extra small | (none) | <576px |
92
+ | Small | `sm` | ≥576px |
93
+ | Medium | `md` | ≥768px |
94
+ | Large | `lg` | ≥992px |
95
+ | Extra large | `xl` | ≥1200px |
96
+ | Extra extra large | `xxl` | ≥1400px |
97
+
98
+ **Important limitation:** These breakpoints respond to the browser viewport, NOT the
99
+ parent container. A `.col-md-6` in a narrow sidebar on a desktop will NOT stack — the
100
+ viewport is still wide. For container-responsive layouts, use the IMA Container Grid
101
+ (`.ima-row` + `.ima-col-sm-6`) from `ima-brand/sass/_container-grid.scss`.
102
+
103
+ ### Gutters
104
+ - Default: `1.5rem` (24px)
105
+ - Remove: `class="g-0"` on `.row`
106
+ - Custom: `gx-{0-5}` (horizontal), `gy-{0-5}` (vertical), `g-{0-5}` (both)
107
+
108
+ ### Nesting
109
+ ```html
110
+ <div class="row">
111
+ <div class="col-md-8">
112
+ <div class="row"> <!-- Nested row -->
113
+ <div class="col-6">Nested left</div>
114
+ <div class="col-6">Nested right</div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ ```
119
+
120
+ ---
121
+
122
+ ## Responsive Patterns
123
+
124
+ ### Hide/Show by Breakpoint
125
+ ```html
126
+ <!-- Hidden on mobile, visible from md up -->
127
+ <div class="d-none d-md-block">Desktop only</div>
128
+
129
+ <!-- Visible on mobile, hidden from md up -->
130
+ <div class="d-block d-md-none">Mobile only</div>
131
+
132
+ <!-- Visible only on md -->
133
+ <div class="d-none d-md-block d-lg-none">Tablet only</div>
134
+ ```
135
+
136
+ ### Responsive Text Alignment
137
+ ```html
138
+ <p class="text-center text-md-start">Centered on mobile, left on desktop</p>
139
+ ```
140
+
141
+ ### Responsive Flex
142
+ ```html
143
+ <div class="d-flex flex-column flex-md-row">
144
+ <!-- Stacked on mobile, side by side on desktop -->
145
+ </div>
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Forms
151
+
152
+ ### Standard Form Layout
153
+ ```html
154
+ <form>
155
+ <div class="mb-3">
156
+ <label for="email" class="form-label">Email</label>
157
+ <input type="email" class="form-control" id="email">
158
+ </div>
159
+ <div class="mb-3">
160
+ <label for="msg" class="form-label">Message</label>
161
+ <textarea class="form-control" id="msg" rows="3"></textarea>
162
+ </div>
163
+ <button type="submit" class="btn btn-primary">Submit</button>
164
+ </form>
165
+ ```
166
+
167
+ ### Inline Form
168
+ ```html
169
+ <form class="row row-cols-lg-auto g-3 align-items-center">
170
+ <div class="col-12">
171
+ <input type="text" class="form-control" placeholder="Search">
172
+ </div>
173
+ <div class="col-12">
174
+ <button type="submit" class="btn btn-primary">Go</button>
175
+ </div>
176
+ </form>
177
+ ```
178
+
179
+ ### Form Validation
180
+ ```html
181
+ <form class="needs-validation" novalidate>
182
+ <div class="mb-3">
183
+ <input type="text" class="form-control" required>
184
+ <div class="valid-feedback">Looks good!</div>
185
+ <div class="invalid-feedback">Required field.</div>
186
+ </div>
187
+ </form>
188
+ ```
189
+
190
+ ### Select, Checkbox, Radio
191
+ ```html
192
+ <select class="form-select">
193
+ <option selected>Choose...</option>
194
+ <option value="1">One</option>
195
+ </select>
196
+
197
+ <div class="form-check">
198
+ <input class="form-check-input" type="checkbox" id="check1">
199
+ <label class="form-check-label" for="check1">Check me</label>
200
+ </div>
201
+
202
+ <div class="form-check">
203
+ <input class="form-check-input" type="radio" name="radio1" id="radio1">
204
+ <label class="form-check-label" for="radio1">Option 1</label>
205
+ </div>
206
+ ```
207
+
208
+ ### Input Groups
209
+ ```html
210
+ <div class="input-group mb-3">
211
+ <span class="input-group-text">@</span>
212
+ <input type="text" class="form-control" placeholder="Username">
213
+ </div>
214
+ ```
215
+
216
+ ---
217
+
218
+ ## Navbar Patterns
219
+
220
+ ### Standard Responsive Navbar
221
+ ```html
222
+ <nav class="navbar navbar-expand-lg navbar-light bg-light">
223
+ <div class="container">
224
+ <a class="navbar-brand" href="#">Brand</a>
225
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navContent">
226
+ <span class="navbar-toggler-icon"></span>
227
+ </button>
228
+ <div class="collapse navbar-collapse" id="navContent">
229
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
230
+ <li class="nav-item"><a class="nav-link active" href="#">Home</a></li>
231
+ <li class="nav-item"><a class="nav-link" href="#">About</a></li>
232
+ <li class="nav-item dropdown">
233
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown">Services</a>
234
+ <ul class="dropdown-menu">
235
+ <li><a class="dropdown-item" href="#">Service 1</a></li>
236
+ </ul>
237
+ </li>
238
+ </ul>
239
+ </div>
240
+ </div>
241
+ </nav>
242
+ ```
243
+
244
+ ---
245
+
246
+ ## Common Component Patterns
247
+
248
+ ### Alert with Dismiss
249
+ ```html
250
+ <div class="alert alert-warning alert-dismissible fade show" role="alert">
251
+ <strong>Warning!</strong> Something needs attention.
252
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
253
+ </div>
254
+ ```
255
+
256
+ ### Badge
257
+ ```html
258
+ <span class="badge text-bg-primary">New</span>
259
+ <span class="badge rounded-pill text-bg-danger">4</span>
260
+ ```
261
+
262
+ ### List Group
263
+ ```html
264
+ <ul class="list-group">
265
+ <li class="list-group-item active">Active item</li>
266
+ <li class="list-group-item">Regular item</li>
267
+ <li class="list-group-item list-group-item-action">Clickable</li>
268
+ </ul>
269
+ ```
270
+
271
+ ### Offcanvas
272
+ ```html
273
+ <button class="btn btn-primary" data-bs-toggle="offcanvas" data-bs-target="#sidebar">Menu</button>
274
+ <div class="offcanvas offcanvas-start" id="sidebar" tabindex="-1">
275
+ <div class="offcanvas-header">
276
+ <h5 class="offcanvas-title">Menu</h5>
277
+ <button class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
278
+ </div>
279
+ <div class="offcanvas-body">Content</div>
280
+ </div>
281
+ ```
282
+
283
+ ### Toast
284
+ ```html
285
+ <div class="toast-container position-fixed bottom-0 end-0 p-3">
286
+ <div class="toast" role="alert">
287
+ <div class="toast-header">
288
+ <strong class="me-auto">Notification</strong>
289
+ <button class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
290
+ </div>
291
+ <div class="toast-body">Message here.</div>
292
+ </div>
293
+ </div>
294
+ ```
295
+
296
+ ---
297
+
298
+ ## CSS Custom Properties (Bootstrap 5.3)
299
+
300
+ Bootstrap 5.3 exposes theme values as CSS custom properties on `:root`:
301
+
302
+ ```css
303
+ :root {
304
+ --bs-primary: #040C53; /* IMA mapped */
305
+ --bs-secondary: #0296A1; /* IMA mapped */
306
+ --bs-body-font-family: 'Open Sans', sans-serif;
307
+ --bs-body-font-size: 1rem;
308
+ --bs-body-color: #000;
309
+ }
310
+ ```
311
+
312
+ Use in custom CSS when SCSS variables aren't available:
313
+ ```css
314
+ .custom-element {
315
+ color: var(--bs-primary);
316
+ font-family: var(--bs-body-font-family);
317
+ }
318
+ ```
319
+
320
+ ---
321
+
322
+ ## JavaScript Integration
323
+
324
+ ### Data Attributes (preferred, no JS needed)
325
+ ```html
326
+ <button data-bs-toggle="modal" data-bs-target="#myModal">Open</button>
327
+ <button data-bs-toggle="collapse" data-bs-target="#content">Toggle</button>
328
+ <button data-bs-toggle="tooltip" title="Help text">Hover me</button>
329
+ ```
330
+
331
+ ### Programmatic API
332
+ ```javascript
333
+ // Modal
334
+ const modal = new bootstrap.Modal('#myModal');
335
+ modal.show();
336
+ modal.hide();
337
+
338
+ // Toast (must be initialized)
339
+ const toast = new bootstrap.Toast(document.getElementById('myToast'));
340
+ toast.show();
341
+
342
+ // Tooltip (must be initialized)
343
+ const tooltipList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
344
+ tooltipList.forEach(el => new bootstrap.Tooltip(el));
345
+ ```
346
+
347
+ ### Events
348
+ ```javascript
349
+ document.getElementById('myModal').addEventListener('shown.bs.modal', () => {
350
+ // Modal is fully visible
351
+ });
352
+
353
+ document.getElementById('myModal').addEventListener('hidden.bs.modal', () => {
354
+ // Modal is fully hidden
355
+ });
356
+ ```
@@ -0,0 +1,273 @@
1
+ # IMA Brand System Reference
2
+
3
+ Based on IMA Brand Book v4.0 (September 2025). Plugin: `ima-brand` v4.0.0.
4
+
5
+ **Plugin location**: `wp-content/plugins/ima-brand/`
6
+ **Import in SCSS**: `@import "../../../plugins/ima-brand/sass/brand";`
7
+
8
+ ---
9
+
10
+ ## Color Palette
11
+
12
+ ### Primary Colors
13
+
14
+ | Name | Hex | Variable | Usage |
15
+ |------|-----|----------|-------|
16
+ | Trustworthy Indigo | `#040C53` | `$ima-brand-primary` | Headers, titles, emphasis |
17
+ | Aquatic Pulse | `#0296A1` | `$ima-brand-secondary` | Buttons, CTAs, links |
18
+ | Bright Teal | `#00B8B8` | `$ima-brand-accent-teal` | Highlights, hover states |
19
+ | Guidance Sky | `#A2CFF0` | `$ima-brand-sky` | Light backgrounds, accents |
20
+
21
+ ### Secondary Colors
22
+
23
+ | Name | Hex | Variable | Usage |
24
+ |------|-----|----------|-------|
25
+ | Vital Gold | `#FFCC00` | `$ima-brand-gold` | Warnings, prescriber tags |
26
+ | Red Ribbon | `#DD153B` | `$ima-brand-red` | Errors, urgent items |
27
+ | Plum Velvet | `#7B024D` | `$ima-brand-plum` | Accent color |
28
+
29
+ ### Grayscale
30
+
31
+ | Name | Hex | Variable | Usage |
32
+ |------|-----|----------|-------|
33
+ | Calm Stone | `#919396` | `$ima-brand-gray` | Form labels, secondary text |
34
+ | Clarity Wash | `#F2F3F5` | `$ima-brand-gray-light` | Backgrounds, cards |
35
+ | Slate Neutral | `#8A93A5` | `$ima-brand-slate` | Alternative gray |
36
+ | Gravel | `#494949` | `$ima-brand-gray-dark` | Dark gray |
37
+ | White | `#FFFFFF` | `$ima-brand-white` | White text/backgrounds |
38
+ | Black | `#000000` | `$ima-brand-black` | Black text |
39
+
40
+ ### Special
41
+
42
+ | Name | Value | Variable |
43
+ |------|-------|----------|
44
+ | Accessible Teal | `#007BB4` | `$ima-brand-teal-accessible` |
45
+ | Brand Gradient | `150deg, #00066F → #00B8B8` | `$ima-gradient` |
46
+
47
+ ### Semantic Tag Colors
48
+
49
+ | Tag | Hex | Variable |
50
+ |-----|-----|----------|
51
+ | Telehealth | `#040C53` | `$ima-tag-telehealth` |
52
+ | Prescriber | `#FFCC00` | `$ima-tag-prescriber` |
53
+ | Family | `#A2CFF0` | `$ima-tag-family` |
54
+
55
+ ---
56
+
57
+ ## Typography
58
+
59
+ ### Font Families
60
+ - **Lato** (`$ima-font-family-primary`): Headings, buttons, labels — Bold/Black weights
61
+ - **Proxima Nova / Open Sans** (`$ima-font-family-secondary`): Body text, forms — Regular/Bold weights
62
+
63
+ ### Font Weights
64
+ | Variable | Value |
65
+ |----------|-------|
66
+ | `$ima-font-weight-light` | 300 |
67
+ | `$ima-font-weight-normal` | 400 |
68
+ | `$ima-font-weight-semibold` | 600 |
69
+ | `$ima-font-weight-bold` | 700 |
70
+ | `$ima-font-weight-black` | 900 |
71
+
72
+ ### Font Size Scale
73
+ | Variable | Size | Usage |
74
+ |----------|------|-------|
75
+ | `$ima-font-size-xs` | 14px | Form labels |
76
+ | `$ima-font-size-sm` | 16px | Body text |
77
+ | `$ima-font-size-base` | 18px | Buttons, links |
78
+ | `$ima-font-size-md` | 20px | Section headers |
79
+ | `$ima-font-size-lg` | 28px | Subsection titles |
80
+ | `$ima-font-size-xl` | 32px | Doctor titles |
81
+ | `$ima-font-size-xxl` | 40px | Page headers |
82
+
83
+ ### Line Heights
84
+ - `$ima-line-height-base`: 1 (headers)
85
+ - `$ima-line-height-comfortable`: 1.5 (body text)
86
+
87
+ ---
88
+
89
+ ## Typography Mixins
90
+
91
+ ```scss
92
+ @include ima-page-header; // Lato Bold 40px, uppercase, primary color
93
+ @include ima-section-header; // Lato Bold 20px, primary color
94
+ @include ima-provider-title; // Lato Semi Bold 32px, primary color
95
+ @include ima-provider-title-bold; // Lato Bold 1.4em
96
+ @include ima-form-label; // Open Sans 14px, gray
97
+ @include ima-button-text; // Lato Bold 18px, uppercase
98
+ @include ima-body-text; // Proxima Nova Regular 16px
99
+ @include ima-h1; // Lato Black 40px
100
+ @include ima-h2; // Lato Bold 32px
101
+ @include ima-h3; // Lato Regular 28px, red
102
+ @include ima-footer-menu; // Lato Bold 18px, white
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Component Mixins
108
+
109
+ ### Buttons
110
+ ```scss
111
+ @include ima-button-primary; // Aquatic Pulse bg, white text, 20px/40px padding, 10px radius
112
+ @include ima-button-primary-wide; // Same, 80px horizontal padding
113
+ @include ima-button-outline; // Transparent bg, primary border
114
+ ```
115
+ - Hover: Bright Teal (#00B8B8) background
116
+ - Font: Lato Bold 18px, uppercase
117
+
118
+ ### Forms
119
+ ```scss
120
+ @include ima-form-field; // 15px radius, 1px gray border, 16px padding, teal focus
121
+ @include ima-form-label; // Open Sans 14px, gray (#919396)
122
+ ```
123
+
124
+ ### Cards
125
+ ```scss
126
+ @include ima-card; // Light gray bg (#F2F3F5), 10px radius, 24px padding, NO shadow
127
+ @include ima-card-white; // White bg, 1px gray border, 10px radius, 24px padding
128
+ ```
129
+
130
+ ### Tags/Badges
131
+ ```scss
132
+ @include ima-tag-telehealth; // Dark blue bg, white text, 5px radius
133
+ @include ima-tag-prescriber; // Gold bg, black text
134
+ @include ima-tag-family; // Sky blue bg, black text
135
+ ```
136
+ - Padding: 4px 16px, Lato Bold 14px uppercase
137
+
138
+ ### Layout
139
+ ```scss
140
+ @include ima-gradient-bg; // Brand gradient background
141
+
142
+ // Utility classes (in HTML):
143
+ .ima-section // 48px vertical, 24px horizontal padding
144
+ .ima-container-sm // 720px max-width, centered
145
+ .ima-container-md // 960px max-width, centered
146
+ .ima-container-lg // 1140px max-width, centered
147
+ ```
148
+
149
+ ### Container Query Grid
150
+
151
+ Container-responsive 12-column grid using CSS Container Queries (`@container`).
152
+ Columns respond to their **parent container's width**, not the viewport — works correctly
153
+ in sidebars, modals, cards, and any narrow context on wide screens.
154
+
155
+ ```html
156
+ <!-- Stacked by default, side-by-side when container ≥ 400px -->
157
+ <div class="ima-row">
158
+ <div class="ima-col-sm-6">First Name</div>
159
+ <div class="ima-col-sm-6">Last Name</div>
160
+ </div>
161
+
162
+ <!-- Three columns when container is wide enough -->
163
+ <div class="ima-row">
164
+ <div class="ima-col-md-4">Col 1</div>
165
+ <div class="ima-col-md-4">Col 2</div>
166
+ <div class="ima-col-md-4">Col 3</div>
167
+ </div>
168
+
169
+ <!-- Always 50% (no breakpoint) -->
170
+ <div class="ima-row">
171
+ <div class="ima-col-6">Left</div>
172
+ <div class="ima-col-6">Right</div>
173
+ </div>
174
+ ```
175
+
176
+ **Container breakpoints** (based on parent width):
177
+
178
+ | Class prefix | Container width | Use case |
179
+ |-------------|----------------|----------|
180
+ | `ima-col-sm-` | ≥ 400px | Sidebar forms, narrow widgets |
181
+ | `ima-col-md-` | ≥ 600px | Medium columns, cards |
182
+ | `ima-col-lg-` | ≥ 800px | Wide columns, full-width areas |
183
+ | `ima-col-` | Always | Fixed layout (no breakpoint) |
184
+
185
+ **When to use which grid:**
186
+ - **Bootstrap** `.row` + `.col-md-*` → Page-level layouts (responds to viewport)
187
+ - **IMA** `.ima-row` + `.ima-col-sm-*` → Reusable components (responds to container)
188
+
189
+ **SCSS variables** (all `!default`, overridable):
190
+ ```scss
191
+ $ima-cq-columns: 12;
192
+ $ima-cq-gap: 1rem;
193
+ $ima-cq-breakpoints: (sm: 400px, md: 600px, lg: 800px);
194
+ ```
195
+
196
+ Source: `ima-brand/sass/_container-grid.scss`
197
+
198
+ ---
199
+
200
+ ## Spacing Variables
201
+
202
+ | Variable | Value |
203
+ |----------|-------|
204
+ | `$ima-spacer` | 1rem (16px) |
205
+ | `$ima-spacing-0` | 0 |
206
+ | `$ima-spacing-1` | 4px |
207
+ | `$ima-spacing-2` | 8px |
208
+ | `$ima-spacing-3` | 16px |
209
+ | `$ima-spacing-4` | 24px |
210
+ | `$ima-spacing-5` | 48px |
211
+
212
+ ## Border Radius
213
+
214
+ | Variable | Value | Usage |
215
+ |----------|-------|-------|
216
+ | `$ima-border-radius-sm` | 5px | Tags, small badges |
217
+ | `$ima-border-radius-md` | 10px | Buttons, cards |
218
+ | `$ima-border-radius-lg` | 15px | Form fields |
219
+ | `$ima-border-radius-xl` | 20px | Large/digital buttons |
220
+
221
+ ## Component Spacing
222
+
223
+ | Variable | Value |
224
+ |----------|-------|
225
+ | `$ima-button-padding-x` | 40px |
226
+ | `$ima-button-padding-y` | 20px |
227
+ | `$ima-button-padding-x-alt` | 80px (wide) |
228
+ | `$ima-form-field-padding` | 16px |
229
+ | `$ima-form-field-margin-bottom` | 24px |
230
+ | `$ima-card-padding` | 24px |
231
+
232
+ ---
233
+
234
+ ## Bootstrap Integration
235
+
236
+ The IMA brand plugin maps to Bootstrap's theme colors:
237
+
238
+ ```scss
239
+ $primary: $ima-brand-primary; // #040C53
240
+ $secondary: $ima-brand-secondary; // #0296A1
241
+ $success: #28A745;
242
+ $warning: $ima-brand-gold; // #FFCC00
243
+ $danger: $ima-brand-red; // #DD153B
244
+ $info: $ima-brand-teal-accessible; // #007BB4
245
+ $light: $ima-brand-gray-light; // #F2F3F5
246
+ $dark: $ima-brand-primary; // #040C53
247
+ ```
248
+
249
+ This means `.btn-primary`, `.bg-primary`, `.text-primary` etc. all use IMA brand colors automatically.
250
+
251
+ ---
252
+
253
+ ## WCAG Accessibility
254
+
255
+ | Element | Ratio | Level |
256
+ |---------|-------|-------|
257
+ | Header 1 (Lato Black) | 16.5:1 | AAA |
258
+ | Header 2 (Lato Bold) | 5.04:1 | AA |
259
+ | Header 3 (Lato Regular) | 4.94:1 | AA |
260
+ | Body Text (Proxima Nova) | 9:1 | AAA |
261
+
262
+ High-contrast teal alternative: `$ima-brand-teal-accessible` (#007BB4)
263
+
264
+ ---
265
+
266
+ ## Design Notes
267
+
268
+ 1. **No drop shadows** on cards (per brand feedback)
269
+ 2. **Uppercase buttons** standard (text-transform: uppercase)
270
+ 3. **Form radius: 15px**, button radius: 10px-20px (20px for digital/lg)
271
+ 4. **Form labels**: Open Sans 14px gray (not Lato)
272
+ 5. **Page headers**: uppercase
273
+ 6. **Font-weight fixes** included for Chrome/Brave consistency