claude-dev-env 1.83.0 → 1.85.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 (186) hide show
  1. package/_shared/pr-loop/audit-contract.md +24 -12
  2. package/_shared/pr-loop/scripts/_claude_permissions_common.py +16 -5
  3. package/_shared/pr-loop/scripts/code_rules_gate.py +2 -3
  4. package/_shared/pr-loop/scripts/pr_loop_shared_constants/CLAUDE.md +1 -1
  5. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +8 -0
  6. package/_shared/pr-loop/scripts/reviews_disabled.py +2 -0
  7. package/_shared/pr-loop/scripts/terminology_sweep.py +85 -39
  8. package/_shared/pr-loop/scripts/tests/test__claude_permissions_common.py +212 -0
  9. package/_shared/pr-loop/scripts/tests/test_agent_config_carveout.py +18 -0
  10. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +18 -0
  11. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +37 -0
  12. package/_shared/pr-loop/scripts/tests/test_reviews_disabled.py +14 -0
  13. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +94 -4
  14. package/agents/clean-coder.md +3 -0
  15. package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +1 -1
  16. package/bin/install.mjs +16 -8
  17. package/bin/install.test.mjs +17 -6
  18. package/commands/CLAUDE.md +0 -1
  19. package/docs/CODE_RULES.md +1 -1
  20. package/hooks/blocking/CLAUDE.md +0 -4
  21. package/hooks/blocking/claude_md_orphan_file_blocker.py +1 -1
  22. package/hooks/blocking/code_rules_constants_config.py +5 -0
  23. package/hooks/blocking/code_rules_docstrings.py +133 -19
  24. package/hooks/blocking/code_rules_enforcer.py +4 -0
  25. package/hooks/blocking/code_rules_imports_logging.py +10 -6
  26. package/hooks/blocking/code_rules_magic_values.py +5 -0
  27. package/hooks/blocking/code_rules_naming_collection.py +15 -8
  28. package/hooks/blocking/code_rules_paired_test.py +3 -2
  29. package/hooks/blocking/code_rules_shared.py +34 -0
  30. package/hooks/blocking/code_rules_string_magic.py +1 -1
  31. package/hooks/blocking/code_rules_unused_imports.py +2 -2
  32. package/hooks/blocking/duplicate_rmtree_helper_blocker.py +4 -4
  33. package/hooks/blocking/test_code_rules_enforcer_docstring_args_span_scope.py +29 -0
  34. package/hooks/blocking/test_code_rules_enforcer_docstring_prose_wall_illustration.py +197 -0
  35. package/hooks/blocking/test_code_rules_enforcer_docstring_runon_sentence.py +27 -0
  36. package/hooks/blocking/test_code_rules_enforcer_naive_datetime.py +24 -0
  37. package/hooks/blocking/test_code_rules_enforcer_split_constants_config.py +33 -0
  38. package/hooks/blocking/test_code_rules_enforcer_split_shared.py +23 -0
  39. package/hooks/blocking/test_code_rules_magic_values.py +54 -0
  40. package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +0 -6
  41. package/hooks/blocking/test_pr_converge_bugteam_enforcer_state_tolerance.py +184 -0
  42. package/hooks/blocking/test_shared_stdin_adoption.py +5 -30
  43. package/hooks/hooks_constants/CLAUDE.md +0 -3
  44. package/hooks/hooks_constants/blocking_check_limits.py +4 -0
  45. package/hooks/hooks_constants/code_rules_path_utils_constants.py +1 -1
  46. package/hooks/hooks_constants/duplicate_rmtree_helper_blocker_constants.py +0 -1
  47. package/hooks/hooks_constants/post_tool_use_dispatcher_constants.py +0 -5
  48. package/hooks/validation/post_tool_use_dispatcher.py +1 -1
  49. package/hooks/validation/test_post_tool_use_dispatcher.py +51 -35
  50. package/hooks/workflow/CLAUDE.md +2 -8
  51. package/package.json +1 -1
  52. package/rules/CLAUDE.md +1 -1
  53. package/rules/docstring-prose-matches-implementation.md +1 -1
  54. package/rules/env-var-table-code-drift.md +1 -1
  55. package/rules/package-inventory-stale-entry.md +1 -1
  56. package/rules/paired-test-coverage.md +1 -1
  57. package/rules/plain-illustrative-docstrings.md +35 -1
  58. package/skills/CLAUDE.md +6 -1
  59. package/skills/_shared/pr-loop/CLAUDE.md +1 -0
  60. package/skills/_shared/pr-loop/scripts/CLAUDE.md +1 -0
  61. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +1 -0
  62. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +45 -0
  63. package/skills/_shared/pr-loop/scripts/test_write_handoff.py +201 -0
  64. package/skills/_shared/pr-loop/scripts/write_handoff.py +309 -0
  65. package/skills/autoconverge/SKILL.md +82 -58
  66. package/skills/autoconverge/reference/closing-report.md +6 -6
  67. package/skills/autoconverge/reference/convergence.md +17 -15
  68. package/skills/autoconverge/reference/gotchas.md +6 -3
  69. package/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +2 -9
  70. package/skills/autoconverge/workflow/converge.contract.test.mjs +87 -13
  71. package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +1 -1
  72. package/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +16 -9
  73. package/skills/autoconverge/workflow/converge.mjs +71 -74
  74. package/skills/autoconverge/workflow/render_report.py +7 -11
  75. package/skills/bugteam/CLAUDE.md +1 -1
  76. package/skills/bugteam/PROMPTS.md +7 -6
  77. package/skills/bugteam/SKILL.md +25 -72
  78. package/skills/bugteam/reference/CLAUDE.md +1 -3
  79. package/skills/bugteam/reference/README.md +1 -1
  80. package/skills/bugteam/reference/audit-and-teammates.md +1 -1
  81. package/skills/bugteam/reference/obstacles/fix-publish-summary.md +1 -1
  82. package/skills/bugteam/reference/team-setup.md +8 -7
  83. package/skills/bugteam/scripts/CLAUDE.md +0 -6
  84. package/skills/bugteam/scripts/README.md +0 -4
  85. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
  86. package/skills/code/SKILL.md +2 -0
  87. package/skills/copilot-review/CLAUDE.md +1 -1
  88. package/skills/copilot-review/SKILL.md +25 -23
  89. package/skills/findbugs/CLAUDE.md +2 -2
  90. package/skills/findbugs/SKILL.md +22 -83
  91. package/skills/fixbugs/SKILL.md +2 -4
  92. package/skills/log-audit/CLAUDE.md +20 -0
  93. package/skills/log-audit/SKILL.md +68 -0
  94. package/skills/log-audit/reference/CLAUDE.md +9 -0
  95. package/skills/log-audit/reference/charter.md +52 -0
  96. package/skills/log-audit/scripts/CLAUDE.md +27 -0
  97. package/skills/log-audit/scripts/cluster_recurrences.py +261 -0
  98. package/skills/log-audit/scripts/collect_log_window.py +199 -0
  99. package/skills/log-audit/scripts/log_audit_constants/CLAUDE.md +12 -0
  100. package/skills/log-audit/scripts/log_audit_constants/cluster_recurrences_constants.py +23 -0
  101. package/skills/log-audit/scripts/log_audit_constants/collect_log_window_constants.py +24 -0
  102. package/skills/log-audit/scripts/log_audit_constants/mine_copilot_findings_constants.py +49 -0
  103. package/skills/log-audit/scripts/mine_copilot_findings.py +302 -0
  104. package/skills/log-audit/scripts/test_cluster_recurrences.py +160 -0
  105. package/skills/log-audit/scripts/test_collect_log_window.py +111 -0
  106. package/skills/log-audit/scripts/test_mine_copilot_findings.py +126 -0
  107. package/skills/monitor-open-prs/SKILL.md +2 -2
  108. package/skills/post-audit-findings/SKILL.md +84 -0
  109. package/skills/pr-converge/CLAUDE.md +2 -0
  110. package/skills/pr-converge/SKILL.md +99 -60
  111. package/skills/pr-converge/reference/CLAUDE.md +1 -1
  112. package/skills/pr-converge/reference/convergence-gates.md +16 -19
  113. package/skills/pr-converge/reference/examples.md +5 -5
  114. package/skills/pr-converge/reference/fix-protocol.md +16 -43
  115. package/skills/pr-converge/reference/obstacles/fix-publish-summary.md +1 -1
  116. package/skills/pr-converge/reference/per-tick.md +24 -45
  117. package/skills/pr-converge/reference/state-schema.md +27 -0
  118. package/skills/pr-converge/scripts/README.md +3 -5
  119. package/skills/pr-fix-protocol/SKILL.md +70 -0
  120. package/skills/pr-loop-lifecycle/SKILL.md +73 -0
  121. package/skills/{bugteam → pr-loop-lifecycle}/reference/teardown-publish-permissions.md +22 -24
  122. package/skills/pr-scope-resolve/SKILL.md +48 -0
  123. package/skills/qbug/CLAUDE.md +4 -4
  124. package/skills/qbug/SKILL.md +46 -144
  125. package/skills/qbug/test_qbug_skill_audit_schema.py +2 -2
  126. package/skills/qbug/test_qbug_skill_post_fix_audit.py +1 -1
  127. package/skills/reviewer-gates/SKILL.md +96 -0
  128. package/skills/session-log/CLAUDE.md +7 -7
  129. package/skills/session-log/SKILL.md +27 -44
  130. package/skills/test_markdown_link_integrity.py +103 -0
  131. package/commands/doc-gist.md +0 -16
  132. package/hooks/blocking/_md_to_html_blocker_test_support.py +0 -65
  133. package/hooks/blocking/conftest.py +0 -30
  134. package/hooks/blocking/md_path_exemptions.py +0 -224
  135. package/hooks/blocking/md_to_html_blocker.py +0 -155
  136. package/hooks/blocking/test_md_to_html_blocker_exemptions.py +0 -434
  137. package/hooks/blocking/test_md_to_html_blocker_extensions.py +0 -157
  138. package/hooks/blocking/test_md_to_html_blocker_path_resolution.py +0 -336
  139. package/hooks/hooks_constants/doc_gist_auto_publish_constants.py +0 -18
  140. package/hooks/hooks_constants/html_companion_constants.py +0 -20
  141. package/hooks/hooks_constants/md_to_html_blocker_constants.py +0 -76
  142. package/hooks/hooks_constants/test_md_to_html_blocker_constants.py +0 -125
  143. package/hooks/workflow/doc_gist_auto_publish.py +0 -144
  144. package/hooks/workflow/md_to_html_companion.py +0 -358
  145. package/hooks/workflow/test_doc_gist_auto_publish.py +0 -117
  146. package/hooks/workflow/test_md_to_html_companion.py +0 -613
  147. package/skills/bugteam/reference/audit-contract.md +0 -163
  148. package/skills/bugteam/scripts/_bugteam_permissions_common.py +0 -455
  149. package/skills/bugteam/scripts/bugteam_scripts_constants/claude_permissions_common_constants.py +0 -69
  150. package/skills/bugteam/scripts/grant_project_claude_permissions.py +0 -280
  151. package/skills/bugteam/scripts/revoke_project_claude_permissions.py +0 -266
  152. package/skills/bugteam/scripts/test__bugteam_permissions_common.py +0 -160
  153. package/skills/bugteam/scripts/test_agent_config_carveout.py +0 -356
  154. package/skills/bugteam/scripts/test_bugteam_permissions_common.py +0 -140
  155. package/skills/doc-gist/CLAUDE.md +0 -25
  156. package/skills/doc-gist/SKILL.md +0 -97
  157. package/skills/doc-gist/references/CLAUDE.md +0 -9
  158. package/skills/doc-gist/references/examples/01-exploration-code-approaches.html +0 -453
  159. package/skills/doc-gist/references/examples/02-exploration-visual-designs.html +0 -515
  160. package/skills/doc-gist/references/examples/03-code-review-pr.html +0 -638
  161. package/skills/doc-gist/references/examples/04-code-understanding.html +0 -491
  162. package/skills/doc-gist/references/examples/05-design-system.html +0 -629
  163. package/skills/doc-gist/references/examples/06-component-variants.html +0 -605
  164. package/skills/doc-gist/references/examples/07-prototype-animation.html +0 -455
  165. package/skills/doc-gist/references/examples/08-prototype-interaction.html +0 -396
  166. package/skills/doc-gist/references/examples/09-slide-deck.html +0 -592
  167. package/skills/doc-gist/references/examples/10-svg-illustrations.html +0 -492
  168. package/skills/doc-gist/references/examples/11-status-report.html +0 -528
  169. package/skills/doc-gist/references/examples/12-incident-report.html +0 -596
  170. package/skills/doc-gist/references/examples/13-flowchart-diagram.html +0 -395
  171. package/skills/doc-gist/references/examples/14-research-feature-explainer.html +0 -381
  172. package/skills/doc-gist/references/examples/15-research-concept-explainer.html +0 -368
  173. package/skills/doc-gist/references/examples/16-implementation-plan.html +0 -702
  174. package/skills/doc-gist/references/examples/17-pr-writeup.html +0 -595
  175. package/skills/doc-gist/references/examples/18-editor-triage-board.html +0 -573
  176. package/skills/doc-gist/references/examples/19-editor-feature-flags.html +0 -663
  177. package/skills/doc-gist/references/examples/20-editor-prompt-tuner.html +0 -722
  178. package/skills/doc-gist/references/examples/21-decision-signoff.html +0 -546
  179. package/skills/doc-gist/references/examples/CLAUDE.md +0 -25
  180. package/skills/doc-gist/references/examples/README.md +0 -5
  181. package/skills/doc-gist/scripts/CLAUDE.md +0 -27
  182. package/skills/doc-gist/scripts/doc_gist_scripts_constants/CLAUDE.md +0 -10
  183. package/skills/doc-gist/scripts/doc_gist_scripts_constants/gist_upload_constants.py +0 -16
  184. package/skills/doc-gist/scripts/gist_upload.py +0 -177
  185. package/skills/doc-gist/scripts/test_gist_upload.py +0 -51
  186. /package/skills/{doc-gist/scripts/doc_gist_scripts_constants → log-audit/scripts/log_audit_constants}/__init__.py +0 -0
@@ -1,629 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>Birchline — Design System Reference</title>
7
- <style>
8
- :root {
9
- --ivory: #FAF9F5;
10
- --slate: #141413;
11
- --clay: #D97757;
12
- --oat: #E3DACC;
13
- --olive: #788C5D;
14
- --gray-100: #F0EEE6;
15
- --gray-300: #D1CFC5;
16
- --gray-500: #87867F;
17
- --gray-700: #3D3D3A;
18
- --white: #FFFFFF;
19
-
20
- --serif: ui-serif, Georgia, serif;
21
- --sans: system-ui, -apple-system, sans-serif;
22
- --mono: ui-monospace, 'SF Mono', Menlo, monospace;
23
-
24
- --radius-panel: 12px;
25
- --radius-row: 8px;
26
- --border: 1.5px solid var(--gray-300);
27
- }
28
-
29
- * { box-sizing: border-box; }
30
-
31
- body {
32
- margin: 0;
33
- padding: 56px 24px 96px;
34
- background: var(--ivory);
35
- color: var(--slate);
36
- font-family: var(--sans);
37
- font-size: 15px;
38
- line-height: 1.55;
39
- -webkit-font-smoothing: antialiased;
40
- }
41
-
42
- .page {
43
- max-width: 980px;
44
- margin: 0 auto;
45
- }
46
-
47
- header h1 {
48
- font-family: var(--serif);
49
- font-weight: 500;
50
- font-size: 40px;
51
- letter-spacing: -0.01em;
52
- margin: 0 0 6px;
53
- }
54
-
55
- header .sub {
56
- color: var(--gray-500);
57
- font-size: 14px;
58
- margin: 0 0 48px;
59
- }
60
- header .sub code {
61
- font-family: var(--mono);
62
- font-size: 13px;
63
- background: var(--gray-100);
64
- padding: 1px 5px;
65
- border-radius: 4px;
66
- }
67
-
68
- section { margin-bottom: 64px; }
69
-
70
- h2 {
71
- font-family: var(--serif);
72
- font-weight: 500;
73
- font-size: 26px;
74
- margin: 0 0 8px;
75
- letter-spacing: -0.01em;
76
- }
77
- hr.rule {
78
- border: none;
79
- border-top: 1px solid var(--gray-300);
80
- margin: 0 0 28px;
81
- }
82
-
83
- /* ---------- Color ---------- */
84
- .swatch-group {
85
- margin-bottom: 28px;
86
- }
87
- .swatch-group-label {
88
- font-family: var(--mono);
89
- font-size: 11px;
90
- text-transform: uppercase;
91
- letter-spacing: 0.08em;
92
- color: var(--gray-500);
93
- margin-bottom: 12px;
94
- }
95
- .swatch-grid {
96
- display: grid;
97
- grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
98
- gap: 20px 16px;
99
- }
100
- .swatch {}
101
- .swatch .chip {
102
- width: 64px;
103
- height: 64px;
104
- border-radius: var(--radius-row);
105
- border: var(--border);
106
- margin-bottom: 8px;
107
- }
108
- .swatch .chip.no-border { border-color: transparent; }
109
- .swatch .hex {
110
- font-family: var(--mono);
111
- font-size: 12px;
112
- color: var(--gray-700);
113
- display: block;
114
- }
115
- .swatch .token {
116
- font-family: var(--mono);
117
- font-size: 11px;
118
- color: var(--gray-500);
119
- display: block;
120
- }
121
-
122
- /* ---------- Typography ---------- */
123
- .type-scale {
124
- border: var(--border);
125
- border-radius: var(--radius-panel);
126
- background: var(--white);
127
- overflow: hidden;
128
- }
129
- .type-row {
130
- display: flex;
131
- align-items: baseline;
132
- justify-content: space-between;
133
- gap: 24px;
134
- padding: 20px 24px;
135
- border-bottom: 1px solid var(--gray-100);
136
- }
137
- .type-row:last-child { border-bottom: none; }
138
- .type-specimen {
139
- flex: 1;
140
- min-width: 0;
141
- white-space: nowrap;
142
- overflow: hidden;
143
- text-overflow: ellipsis;
144
- color: var(--slate);
145
- }
146
- .type-meta {
147
- font-family: var(--mono);
148
- font-size: 12px;
149
- color: var(--gray-500);
150
- text-align: right;
151
- flex-shrink: 0;
152
- }
153
- .type-meta .name {
154
- color: var(--gray-700);
155
- display: block;
156
- margin-bottom: 2px;
157
- }
158
-
159
- .t-display { font-family: var(--serif); font-size: 48px; line-height: 1.1; font-weight: 500; letter-spacing: -0.02em; }
160
- .t-h1 { font-family: var(--serif); font-size: 32px; line-height: 1.2; font-weight: 500; letter-spacing: -0.01em; }
161
- .t-h2 { font-family: var(--serif); font-size: 24px; line-height: 1.3; font-weight: 500; }
162
- .t-body { font-family: var(--sans); font-size: 16px; line-height: 1.55; font-weight: 430; }
163
- .t-small { font-family: var(--sans); font-size: 14px; line-height: 1.5; font-weight: 430; }
164
- .t-caption { font-family: var(--sans); font-size: 12px; line-height: 1.4; font-weight: 500; color: var(--gray-500); }
165
-
166
- /* ---------- Spacing ---------- */
167
- .spacing-ruler {
168
- display: flex;
169
- align-items: flex-end;
170
- gap: 28px;
171
- padding: 28px 24px;
172
- background: var(--white);
173
- border: var(--border);
174
- border-radius: var(--radius-panel);
175
- overflow-x: auto;
176
- }
177
- .space-token {
178
- display: flex;
179
- flex-direction: column;
180
- align-items: center;
181
- gap: 10px;
182
- flex-shrink: 0;
183
- }
184
- .space-bar {
185
- background: var(--clay);
186
- border-radius: 3px;
187
- height: 14px;
188
- }
189
- .space-label {
190
- font-family: var(--mono);
191
- font-size: 11px;
192
- color: var(--gray-700);
193
- text-align: center;
194
- }
195
- .space-label span {
196
- display: block;
197
- color: var(--gray-500);
198
- }
199
-
200
- /* ---------- Radius & Elevation ---------- */
201
- .token-row {
202
- display: flex;
203
- flex-wrap: wrap;
204
- gap: 20px;
205
- margin-bottom: 28px;
206
- }
207
- .radius-card {
208
- width: 120px;
209
- height: 88px;
210
- background: var(--oat);
211
- border: var(--border);
212
- display: flex;
213
- align-items: flex-end;
214
- padding: 10px 12px;
215
- }
216
- .radius-card .lbl {
217
- font-family: var(--mono);
218
- font-size: 11px;
219
- color: var(--gray-700);
220
- }
221
- .radius-card .lbl span { color: var(--gray-500); display: block; }
222
-
223
- .shadow-card {
224
- width: 160px;
225
- height: 96px;
226
- background: var(--white);
227
- border-radius: var(--radius-panel);
228
- display: flex;
229
- align-items: flex-end;
230
- padding: 12px 14px;
231
- }
232
- .shadow-card .lbl {
233
- font-family: var(--mono);
234
- font-size: 11px;
235
- color: var(--gray-700);
236
- }
237
- .shadow-card .lbl span { color: var(--gray-500); display: block; }
238
-
239
- /* ---------- Core components ---------- */
240
- .component {
241
- margin-bottom: 32px;
242
- }
243
- .component-name {
244
- font-family: var(--mono);
245
- font-size: 12px;
246
- color: var(--gray-500);
247
- margin-bottom: 12px;
248
- }
249
- .component-stage {
250
- display: flex;
251
- flex-wrap: wrap;
252
- align-items: center;
253
- gap: 16px;
254
- padding: 24px;
255
- background: var(--white);
256
- border: var(--border);
257
- border-radius: var(--radius-panel);
258
- }
259
-
260
- /* Button */
261
- .btn {
262
- display: inline-flex;
263
- align-items: center;
264
- justify-content: center;
265
- height: 36px;
266
- padding: 0 16px;
267
- font-family: var(--sans);
268
- font-size: 14px;
269
- font-weight: 500;
270
- border-radius: var(--radius-row);
271
- border: 1.5px solid transparent;
272
- cursor: pointer;
273
- transition: background 0.12s ease, border-color 0.12s ease;
274
- }
275
- .btn-primary { background: var(--clay); color: var(--white); }
276
- .btn-primary:hover { background: #C7684C; }
277
- .btn-secondary { background: var(--white); color: var(--slate); border-color: var(--gray-300); }
278
- .btn-secondary:hover { background: var(--gray-100); }
279
- .btn-ghost { background: transparent; color: var(--gray-700); }
280
- .btn-ghost:hover { background: var(--gray-100); }
281
- .btn-danger { background: #B04A4A; color: var(--white); }
282
- .btn-danger:hover { background: #9A3F3F; }
283
-
284
- /* Input */
285
- .input {
286
- height: 38px;
287
- padding: 0 12px;
288
- font-family: var(--sans);
289
- font-size: 14px;
290
- color: var(--slate);
291
- background: var(--white);
292
- border: var(--border);
293
- border-radius: var(--radius-row);
294
- width: 260px;
295
- outline: none;
296
- transition: border-color 0.12s ease, box-shadow 0.12s ease;
297
- }
298
- .input::placeholder { color: var(--gray-500); }
299
- .input:focus {
300
- border-color: var(--clay);
301
- box-shadow: 0 0 0 3px rgba(217, 119, 87, 0.15);
302
- }
303
-
304
- /* Checkbox */
305
- .checkbox {
306
- display: inline-flex;
307
- align-items: center;
308
- gap: 10px;
309
- font-size: 14px;
310
- cursor: pointer;
311
- user-select: none;
312
- }
313
- .checkbox input {
314
- appearance: none;
315
- width: 18px;
316
- height: 18px;
317
- border: var(--border);
318
- border-radius: 5px;
319
- background: var(--white);
320
- margin: 0;
321
- cursor: pointer;
322
- position: relative;
323
- transition: background 0.12s ease, border-color 0.12s ease;
324
- }
325
- .checkbox input:checked {
326
- background: var(--clay);
327
- border-color: var(--clay);
328
- }
329
- .checkbox input:checked::after {
330
- content: "";
331
- position: absolute;
332
- left: 5px; top: 1px;
333
- width: 5px; height: 10px;
334
- border: solid var(--white);
335
- border-width: 0 2px 2px 0;
336
- transform: rotate(45deg);
337
- }
338
-
339
- /* Badge */
340
- .badge {
341
- display: inline-flex;
342
- align-items: center;
343
- height: 22px;
344
- padding: 0 9px;
345
- font-size: 12px;
346
- font-weight: 500;
347
- border-radius: 999px;
348
- }
349
- .badge-neutral { background: var(--gray-100); color: var(--gray-700); }
350
- .badge-accent { background: rgba(217, 119, 87, 0.14); color: var(--clay); }
351
- .badge-success { background: rgba(120, 140, 93, 0.16); color: var(--olive); }
352
- .badge-warning { background: rgba(199, 142, 63, 0.16); color: #A06A2A; }
353
- </style>
354
- </head>
355
- <body>
356
- <div class="page">
357
-
358
- <header>
359
- <h1>Birchline design system</h1>
360
- <p class="sub">
361
- Generated from <code>src/styles/tokens.ts</code> and <code>src/components/</code> &mdash; use as a portable reference when prompting.
362
- </p>
363
- </header>
364
-
365
- <!-- ===================== COLOR ===================== -->
366
- <section id="color">
367
- <h2>Color</h2>
368
- <hr class="rule">
369
-
370
- <div class="swatch-group">
371
- <div class="swatch-group-label">Primary</div>
372
- <div class="swatch-grid">
373
- <div class="swatch">
374
- <div class="chip no-border" style="background:#D97757"></div>
375
- <span class="hex">#D97757</span>
376
- <span class="token">--clay</span>
377
- </div>
378
- <div class="swatch">
379
- <div class="chip no-border" style="background:#141413"></div>
380
- <span class="hex">#141413</span>
381
- <span class="token">--slate</span>
382
- </div>
383
- <div class="swatch">
384
- <div class="chip" style="background:#FAF9F5"></div>
385
- <span class="hex">#FAF9F5</span>
386
- <span class="token">--ivory</span>
387
- </div>
388
- <div class="swatch">
389
- <div class="chip no-border" style="background:#E3DACC"></div>
390
- <span class="hex">#E3DACC</span>
391
- <span class="token">--oat</span>
392
- </div>
393
- </div>
394
- </div>
395
-
396
- <div class="swatch-group">
397
- <div class="swatch-group-label">Neutral</div>
398
- <div class="swatch-grid">
399
- <div class="swatch">
400
- <div class="chip" style="background:#FFFFFF"></div>
401
- <span class="hex">#FFFFFF</span>
402
- <span class="token">--white</span>
403
- </div>
404
- <div class="swatch">
405
- <div class="chip" style="background:#F0EEE6"></div>
406
- <span class="hex">#F0EEE6</span>
407
- <span class="token">--gray-100</span>
408
- </div>
409
- <div class="swatch">
410
- <div class="chip no-border" style="background:#D1CFC5"></div>
411
- <span class="hex">#D1CFC5</span>
412
- <span class="token">--gray-300</span>
413
- </div>
414
- <div class="swatch">
415
- <div class="chip no-border" style="background:#87867F"></div>
416
- <span class="hex">#87867F</span>
417
- <span class="token">--gray-500</span>
418
- </div>
419
- <div class="swatch">
420
- <div class="chip no-border" style="background:#3D3D3A"></div>
421
- <span class="hex">#3D3D3A</span>
422
- <span class="token">--gray-700</span>
423
- </div>
424
- </div>
425
- </div>
426
-
427
- <div class="swatch-group">
428
- <div class="swatch-group-label">Semantic</div>
429
- <div class="swatch-grid">
430
- <div class="swatch">
431
- <div class="chip no-border" style="background:#788C5D"></div>
432
- <span class="hex">#788C5D</span>
433
- <span class="token">--success</span>
434
- </div>
435
- <div class="swatch">
436
- <div class="chip no-border" style="background:#C78E3F"></div>
437
- <span class="hex">#C78E3F</span>
438
- <span class="token">--warning</span>
439
- </div>
440
- <div class="swatch">
441
- <div class="chip no-border" style="background:#B04A4A"></div>
442
- <span class="hex">#B04A4A</span>
443
- <span class="token">--danger</span>
444
- </div>
445
- <div class="swatch">
446
- <div class="chip no-border" style="background:#5C7CA3"></div>
447
- <span class="hex">#5C7CA3</span>
448
- <span class="token">--info</span>
449
- </div>
450
- </div>
451
- </div>
452
- </section>
453
-
454
- <!-- ===================== TYPOGRAPHY ===================== -->
455
- <section id="typography">
456
- <h2>Typography</h2>
457
- <hr class="rule">
458
-
459
- <div class="type-scale">
460
- <div class="type-row">
461
- <div class="type-specimen t-display">Plan the week ahead</div>
462
- <div class="type-meta">
463
- <span class="name">Display</span>
464
- 48 / 1.1 / 500
465
- </div>
466
- </div>
467
- <div class="type-row">
468
- <div class="type-specimen t-h1">Plan the week ahead</div>
469
- <div class="type-meta">
470
- <span class="name">Heading 1</span>
471
- 32 / 1.2 / 500
472
- </div>
473
- </div>
474
- <div class="type-row">
475
- <div class="type-specimen t-h2">Plan the week ahead</div>
476
- <div class="type-meta">
477
- <span class="name">Heading 2</span>
478
- 24 / 1.3 / 500
479
- </div>
480
- </div>
481
- <div class="type-row">
482
- <div class="type-specimen t-body">Review milestones, assign owners, and surface blockers before they cascade.</div>
483
- <div class="type-meta">
484
- <span class="name">Body</span>
485
- 16 / 1.55 / 430
486
- </div>
487
- </div>
488
- <div class="type-row">
489
- <div class="type-specimen t-small">Review milestones, assign owners, and surface blockers before they cascade.</div>
490
- <div class="type-meta">
491
- <span class="name">Small</span>
492
- 14 / 1.5 / 430
493
- </div>
494
- </div>
495
- <div class="type-row">
496
- <div class="type-specimen t-caption">UPDATED 2 HOURS AGO</div>
497
- <div class="type-meta">
498
- <span class="name">Caption</span>
499
- 12 / 1.4 / 500
500
- </div>
501
- </div>
502
- </div>
503
- </section>
504
-
505
- <!-- ===================== SPACING ===================== -->
506
- <section id="spacing">
507
- <h2>Spacing</h2>
508
- <hr class="rule">
509
-
510
- <div class="spacing-ruler">
511
- <div class="space-token">
512
- <div class="space-bar" style="width:4px"></div>
513
- <div class="space-label">4<span>--sp-1</span></div>
514
- </div>
515
- <div class="space-token">
516
- <div class="space-bar" style="width:8px"></div>
517
- <div class="space-label">8<span>--sp-2</span></div>
518
- </div>
519
- <div class="space-token">
520
- <div class="space-bar" style="width:12px"></div>
521
- <div class="space-label">12<span>--sp-3</span></div>
522
- </div>
523
- <div class="space-token">
524
- <div class="space-bar" style="width:16px"></div>
525
- <div class="space-label">16<span>--sp-4</span></div>
526
- </div>
527
- <div class="space-token">
528
- <div class="space-bar" style="width:24px"></div>
529
- <div class="space-label">24<span>--sp-5</span></div>
530
- </div>
531
- <div class="space-token">
532
- <div class="space-bar" style="width:32px"></div>
533
- <div class="space-label">32<span>--sp-6</span></div>
534
- </div>
535
- <div class="space-token">
536
- <div class="space-bar" style="width:48px"></div>
537
- <div class="space-label">48<span>--sp-7</span></div>
538
- </div>
539
- <div class="space-token">
540
- <div class="space-bar" style="width:64px"></div>
541
- <div class="space-label">64<span>--sp-8</span></div>
542
- </div>
543
- </div>
544
- </section>
545
-
546
- <!-- ===================== RADIUS & ELEVATION ===================== -->
547
- <section id="shape">
548
- <h2>Radius &amp; Elevation</h2>
549
- <hr class="rule">
550
-
551
- <div class="token-row">
552
- <div class="radius-card" style="border-radius:4px">
553
- <div class="lbl">4px<span>--r-xs</span></div>
554
- </div>
555
- <div class="radius-card" style="border-radius:8px">
556
- <div class="lbl">8px<span>--r-sm</span></div>
557
- </div>
558
- <div class="radius-card" style="border-radius:12px">
559
- <div class="lbl">12px<span>--r-md</span></div>
560
- </div>
561
- <div class="radius-card" style="border-radius:20px">
562
- <div class="lbl">20px<span>--r-lg</span></div>
563
- </div>
564
- </div>
565
-
566
- <div class="token-row">
567
- <div class="shadow-card" style="box-shadow:0 1px 2px rgba(20,20,19,0.06)">
568
- <div class="lbl">--shadow-sm<span>0 1px 2px / 6%</span></div>
569
- </div>
570
- <div class="shadow-card" style="box-shadow:0 4px 10px rgba(20,20,19,0.08)">
571
- <div class="lbl">--shadow-md<span>0 4px 10px / 8%</span></div>
572
- </div>
573
- <div class="shadow-card" style="box-shadow:0 12px 28px rgba(20,20,19,0.12)">
574
- <div class="lbl">--shadow-lg<span>0 12px 28px / 12%</span></div>
575
- </div>
576
- </div>
577
- </section>
578
-
579
- <!-- ===================== CORE COMPONENTS ===================== -->
580
- <section id="components">
581
- <h2>Core components</h2>
582
- <hr class="rule">
583
-
584
- <div class="component">
585
- <div class="component-name">&lt;Button /&gt;</div>
586
- <div class="component-stage">
587
- <button class="btn btn-primary">Create task</button>
588
- <button class="btn btn-secondary">Cancel</button>
589
- <button class="btn btn-ghost">Skip</button>
590
- <button class="btn btn-danger">Delete</button>
591
- </div>
592
- </div>
593
-
594
- <div class="component">
595
- <div class="component-name">&lt;Input /&gt;</div>
596
- <div class="component-stage">
597
- <input class="input" type="text" placeholder="Search tasks&hellip;">
598
- <input class="input" type="text" value="Weekly planning">
599
- </div>
600
- </div>
601
-
602
- <div class="component">
603
- <div class="component-name">&lt;Checkbox /&gt;</div>
604
- <div class="component-stage">
605
- <label class="checkbox">
606
- <input type="checkbox">
607
- Notify assignees
608
- </label>
609
- <label class="checkbox">
610
- <input type="checkbox" checked>
611
- Archive on complete
612
- </label>
613
- </div>
614
- </div>
615
-
616
- <div class="component">
617
- <div class="component-name">&lt;Badge /&gt;</div>
618
- <div class="component-stage">
619
- <span class="badge badge-neutral">Draft</span>
620
- <span class="badge badge-accent">In review</span>
621
- <span class="badge badge-success">Done</span>
622
- <span class="badge badge-warning">Overdue</span>
623
- </div>
624
- </div>
625
- </section>
626
-
627
- </div>
628
- </body>
629
- </html>