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.
- package/LICENSE +21 -0
- package/README.md +463 -0
- package/dist/cli.js +1064 -0
- package/package.json +49 -0
- package/platforms/claude/adapter.ts +115 -0
- package/platforms/junie/adapter.ts +254 -0
- package/platforms/junie/agents-template.md +113 -0
- package/platforms/junie/hook-translations.md +84 -0
- package/platforms/shared/detector.ts +27 -0
- package/platforms/shared/installer.ts +202 -0
- package/platforms/shared/types.ts +78 -0
- package/plugins/ima-claude/.claude-plugin/plugin.json +25 -0
- package/plugins/ima-claude/agents/explorer.md +30 -0
- package/plugins/ima-claude/agents/implementer.md +30 -0
- package/plugins/ima-claude/agents/memory.md +42 -0
- package/plugins/ima-claude/agents/reviewer.md +53 -0
- package/plugins/ima-claude/agents/tester.md +33 -0
- package/plugins/ima-claude/agents/wp-developer.md +46 -0
- package/plugins/ima-claude/hooks/README.md +145 -0
- package/plugins/ima-claude/hooks/atlassian_prereqs.py +112 -0
- package/plugins/ima-claude/hooks/block_sed_edits.py +59 -0
- package/plugins/ima-claude/hooks/bootstrap.sh +90 -0
- package/plugins/ima-claude/hooks/bootstrap_utility_check.py +94 -0
- package/plugins/ima-claude/hooks/composer_autoload_check.py +70 -0
- package/plugins/ima-claude/hooks/docs_organization.py +104 -0
- package/plugins/ima-claude/hooks/enforce_rg_over_grep.py +56 -0
- package/plugins/ima-claude/hooks/fp_utility_check.py +90 -0
- package/plugins/ima-claude/hooks/hook_logger.py +69 -0
- package/plugins/ima-claude/hooks/hooks.json +239 -0
- package/plugins/ima-claude/hooks/jira_issue_fetch.py +79 -0
- package/plugins/ima-claude/hooks/jquery_in_wordpress.py +92 -0
- package/plugins/ima-claude/hooks/memory_bootstrap.py +79 -0
- package/plugins/ima-claude/hooks/memory_store_reminder.py +75 -0
- package/plugins/ima-claude/hooks/prompt_coach.py +125 -0
- package/plugins/ima-claude/hooks/prompt_coach_digest.md +48 -0
- package/plugins/ima-claude/hooks/prompt_coach_system.md +30 -0
- package/plugins/ima-claude/hooks/sequential_thinking_check.py +81 -0
- package/plugins/ima-claude/hooks/serena_over_grep.py +96 -0
- package/plugins/ima-claude/hooks/serena_over_read.py +66 -0
- package/plugins/ima-claude/hooks/serena_project_check.py +133 -0
- package/plugins/ima-claude/hooks/sql_injection_check.py +73 -0
- package/plugins/ima-claude/hooks/task_master_after_plan.py +31 -0
- package/plugins/ima-claude/hooks/task_master_before_impl.py +93 -0
- package/plugins/ima-claude/hooks/tavily_extract_advanced.py +48 -0
- package/plugins/ima-claude/hooks/vestige_before_external.py +86 -0
- package/plugins/ima-claude/hooks/webfetch_to_tavily.py +42 -0
- package/plugins/ima-claude/hooks/websearch_to_tavily.py +41 -0
- package/plugins/ima-claude/hooks/wp_security_check.py +150 -0
- package/plugins/ima-claude/personalities/README.md +45 -0
- package/plugins/ima-claude/personalities/enable-40k.md +69 -0
- package/plugins/ima-claude/personalities/enable-templars.md +69 -0
- package/plugins/ima-claude/skills/.research-summary.md +340 -0
- package/plugins/ima-claude/skills/architect/SKILL.md +304 -0
- package/plugins/ima-claude/skills/compound-bridge/SKILL.md +200 -0
- package/plugins/ima-claude/skills/discourse/SKILL.md +440 -0
- package/plugins/ima-claude/skills/discourse-admin/SKILL.md +192 -0
- package/plugins/ima-claude/skills/discourse-admin/references/api-endpoints.md +441 -0
- package/plugins/ima-claude/skills/discourse-admin/references/gotchas.md +107 -0
- package/plugins/ima-claude/skills/discourse-admin/references/staging-defaults.md +98 -0
- package/plugins/ima-claude/skills/discourse-admin/scripts/discourse-admin.py +319 -0
- package/plugins/ima-claude/skills/docs-organize/SKILL.md +254 -0
- package/plugins/ima-claude/skills/docs-organize/templates/active-README.md +50 -0
- package/plugins/ima-claude/skills/docs-organize/templates/archive-README.md +57 -0
- package/plugins/ima-claude/skills/docs-organize/templates/docs-README.md +43 -0
- package/plugins/ima-claude/skills/docs-organize/templates/phase-archive-README.md +83 -0
- package/plugins/ima-claude/skills/docs-organize/templates/section-README.md +48 -0
- package/plugins/ima-claude/skills/docs-organize/templates/transient-README.md +79 -0
- package/plugins/ima-claude/skills/docs-organize/templates/transient-gitignore +9 -0
- package/plugins/ima-claude/skills/ember-discourse/SKILL.md +496 -0
- package/plugins/ima-claude/skills/functional-programmer/SKILL.md +258 -0
- package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +278 -0
- package/plugins/ima-claude/skills/ima-bootstrap/references/bootstrap-patterns.md +356 -0
- package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +273 -0
- package/plugins/ima-claude/skills/ima-bootstrap/references/theme-integration.md +212 -0
- package/plugins/ima-claude/skills/ima-brand/SKILL.md +108 -0
- package/plugins/ima-claude/skills/ima-brand/references/brand-identity.md +140 -0
- package/plugins/ima-claude/skills/ima-brand/references/digital-standards.md +180 -0
- package/plugins/ima-claude/skills/ima-brand/references/visual-system.md +173 -0
- package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +175 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/container-components.md +154 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/examples.md +328 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/field-components.md +298 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/form-factory.md +193 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/quick-reference.md +153 -0
- package/plugins/ima-claude/skills/ima-forms-expert/references/validation-engine.md +336 -0
- package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +178 -0
- package/plugins/ima-claude/skills/jquery/SKILL.md +413 -0
- package/plugins/ima-claude/skills/js-fp/SKILL.md +463 -0
- package/plugins/ima-claude/skills/js-fp/core-principles.md +487 -0
- package/plugins/ima-claude/skills/js-fp/examples/pure-functions.js +260 -0
- package/plugins/ima-claude/skills/js-fp/examples/tests/pure-functions.test.js +262 -0
- package/plugins/ima-claude/skills/js-fp/references/anti-patterns.md +120 -0
- package/plugins/ima-claude/skills/js-fp/references/performance-patterns.md +116 -0
- package/plugins/ima-claude/skills/js-fp/references/testing-patterns.md +134 -0
- package/plugins/ima-claude/skills/js-fp-api/SKILL.md +280 -0
- package/plugins/ima-claude/skills/js-fp-api/examples/crud-endpoint.js +258 -0
- package/plugins/ima-claude/skills/js-fp-api/references/middleware-patterns.md +134 -0
- package/plugins/ima-claude/skills/js-fp-api/references/security-sql.md +110 -0
- package/plugins/ima-claude/skills/js-fp-api/references/validation-patterns.md +165 -0
- package/plugins/ima-claude/skills/js-fp-react/SKILL.md +447 -0
- package/plugins/ima-claude/skills/js-fp-react/examples/ProductCard.tsx +65 -0
- package/plugins/ima-claude/skills/js-fp-react/references/hooks-advanced.md +136 -0
- package/plugins/ima-claude/skills/js-fp-react/references/performance-patterns.md +175 -0
- package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +322 -0
- package/plugins/ima-claude/skills/js-fp-vue/references/complete-examples.md +397 -0
- package/plugins/ima-claude/skills/js-fp-vue/references/composables-advanced.md +282 -0
- package/plugins/ima-claude/skills/js-fp-vue/references/reactivity-patterns.md +348 -0
- package/plugins/ima-claude/skills/js-fp-vue/references/testing.md +314 -0
- package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +301 -0
- package/plugins/ima-claude/skills/js-fp-wordpress/references/ajax-patterns.md +192 -0
- package/plugins/ima-claude/skills/js-fp-wordpress/references/event-patterns.md +136 -0
- package/plugins/ima-claude/skills/js-fp-wordpress/references/wp-integration.md +248 -0
- package/plugins/ima-claude/skills/livecanvas/SKILL.md +209 -0
- package/plugins/ima-claude/skills/livecanvas/references/livecanvas-features.md +311 -0
- package/plugins/ima-claude/skills/livecanvas/references/loops-and-logic.md +730 -0
- package/plugins/ima-claude/skills/livecanvas/references/picostrap.md +227 -0
- package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +339 -0
- package/plugins/ima-claude/skills/mcp-context7/SKILL.md +109 -0
- package/plugins/ima-claude/skills/mcp-memory/SKILL.md +182 -0
- package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +233 -0
- package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +149 -0
- package/plugins/ima-claude/skills/mcp-serena/SKILL.md +174 -0
- package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +118 -0
- package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +259 -0
- package/plugins/ima-claude/skills/php-authnet/SKILL.md +275 -0
- package/plugins/ima-claude/skills/php-authnet/references/api-reference.md +624 -0
- package/plugins/ima-claude/skills/php-authnet/references/sandbox-testing.md +424 -0
- package/plugins/ima-claude/skills/php-fp/SKILL.md +333 -0
- package/plugins/ima-claude/skills/php-fp/examples/pure-functions.php +403 -0
- package/plugins/ima-claude/skills/php-fp/examples/tests/PureFunctionsTest.php +515 -0
- package/plugins/ima-claude/skills/php-fp/references/core-principles.md +277 -0
- package/plugins/ima-claude/skills/php-fp/references/testing-patterns.md +374 -0
- package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +216 -0
- package/plugins/ima-claude/skills/php-fp-wordpress/references/fp-patterns.md +275 -0
- package/plugins/ima-claude/skills/php-fp-wordpress/references/plugin-architecture.md +295 -0
- package/plugins/ima-claude/skills/php-fp-wordpress/references/security-examples.md +203 -0
- package/plugins/ima-claude/skills/php-fp-wordpress/references/testing-strategy.md +259 -0
- package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +716 -0
- package/plugins/ima-claude/skills/playwright/SKILL.md +434 -0
- package/plugins/ima-claude/skills/playwright/references/accessibility-testing.md +153 -0
- package/plugins/ima-claude/skills/playwright/references/ci-cd.md +268 -0
- package/plugins/ima-claude/skills/playwright/references/network-mocking.md +270 -0
- package/plugins/ima-claude/skills/playwright/references/visual-regression.md +215 -0
- package/plugins/ima-claude/skills/py-fp/SKILL.md +663 -0
- package/plugins/ima-claude/skills/py-fp/examples/pure-functions.py +185 -0
- package/plugins/ima-claude/skills/py-fp/examples/tests/test_pure_functions.py +244 -0
- package/plugins/ima-claude/skills/py-fp/references/core-principles.md +381 -0
- package/plugins/ima-claude/skills/py-fp/references/testing-patterns.md +283 -0
- package/plugins/ima-claude/skills/quasar-fp/SKILL.md +327 -0
- package/plugins/ima-claude/skills/quasar-fp/metadata.json +85 -0
- package/plugins/ima-claude/skills/quasar-fp/references/component-patterns.md +257 -0
- package/plugins/ima-claude/skills/quasar-fp/references/theme-integration.md +233 -0
- package/plugins/ima-claude/skills/quasar-fp/references/utility-classes.md +237 -0
- package/plugins/ima-claude/skills/quickstart/SKILL.md +129 -0
- package/plugins/ima-claude/skills/rails/SKILL.md +359 -0
- package/plugins/ima-claude/skills/resume-session/SKILL.md +68 -0
- package/plugins/ima-claude/skills/rg/SKILL.md +205 -0
- package/plugins/ima-claude/skills/ruby-fp/SKILL.md +336 -0
- package/plugins/ima-claude/skills/save-session/SKILL.md +81 -0
- package/plugins/ima-claude/skills/scorecard/SKILL.md +96 -0
- package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +127 -0
- package/plugins/ima-claude/skills/skill-analyzer/references/advanced-checklist.md +44 -0
- package/plugins/ima-claude/skills/skill-analyzer/references/core-checklist.md +60 -0
- package/plugins/ima-claude/skills/skill-analyzer/scripts/analyze_skill.py +418 -0
- package/plugins/ima-claude/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/ima-claude/skills/skill-creator/SKILL.md +343 -0
- package/plugins/ima-claude/skills/skill-creator/references/output-patterns.md +82 -0
- package/plugins/ima-claude/skills/skill-creator/references/workflows.md +28 -0
- package/plugins/ima-claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/plugins/ima-claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/plugins/ima-claude/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/plugins/ima-claude/skills/task-master/SKILL.md +51 -0
- package/plugins/ima-claude/skills/task-planner/SKILL.md +228 -0
- package/plugins/ima-claude/skills/task-runner/SKILL.md +192 -0
- package/plugins/ima-claude/skills/unit-testing/SKILL.md +198 -0
- package/plugins/ima-claude/skills/unit-testing/references/mock-patterns.md +181 -0
- package/plugins/ima-claude/skills/unit-testing/references/tdd-workflow.md +177 -0
- package/plugins/ima-claude/skills/unit-testing/references/test-strategy.md +126 -0
- package/plugins/ima-claude/skills/wp-local/SKILL.md +246 -0
- package/plugins/ima-claude/skills/wp-local/references/configuration.md +198 -0
- package/plugins/ima-claude/skills/wp-local/references/wp-cli-reference.md +406 -0
- 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
|