claude-dev-env 1.82.0 → 1.84.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 (217) hide show
  1. package/CLAUDE.md +16 -13
  2. package/_shared/pr-loop/audit-contract.md +24 -12
  3. package/_shared/pr-loop/scripts/CLAUDE.md +1 -0
  4. package/_shared/pr-loop/scripts/README.md +1 -0
  5. package/_shared/pr-loop/scripts/_claude_permissions_common.py +16 -5
  6. package/_shared/pr-loop/scripts/code_rules_gate.py +2 -3
  7. package/_shared/pr-loop/scripts/pr_loop_shared_constants/CLAUDE.md +1 -0
  8. package/_shared/pr-loop/scripts/pr_loop_shared_constants/reviewer_availability_constants.py +12 -0
  9. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +0 -2
  10. package/_shared/pr-loop/scripts/reviewer_availability.py +182 -0
  11. package/_shared/pr-loop/scripts/reviews_disabled.py +2 -0
  12. package/_shared/pr-loop/scripts/terminology_sweep.py +9 -33
  13. package/_shared/pr-loop/scripts/tests/CLAUDE.md +2 -0
  14. package/_shared/pr-loop/scripts/tests/test__claude_permissions_common.py +212 -0
  15. package/_shared/pr-loop/scripts/tests/test_agent_config_carveout.py +18 -0
  16. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +18 -0
  17. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +37 -0
  18. package/_shared/pr-loop/scripts/tests/test_reviewer_availability.py +159 -0
  19. package/_shared/pr-loop/scripts/tests/test_reviewer_availability_constants.py +36 -0
  20. package/_shared/pr-loop/scripts/tests/test_reviews_disabled.py +14 -0
  21. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +14 -4
  22. package/agents/clean-coder.md +3 -0
  23. package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +1 -1
  24. package/bin/install.mjs +16 -8
  25. package/bin/install.test.mjs +17 -6
  26. package/commands/CLAUDE.md +0 -1
  27. package/docs/CODE_RULES.md +1 -1
  28. package/hooks/blocking/CLAUDE.md +2 -4
  29. package/hooks/blocking/code_rules_constants_config.py +164 -1
  30. package/hooks/blocking/code_rules_docstrings.py +428 -15
  31. package/hooks/blocking/code_rules_enforcer.py +33 -0
  32. package/hooks/blocking/code_rules_imports_logging.py +867 -1
  33. package/hooks/blocking/code_rules_magic_values.py +5 -0
  34. package/hooks/blocking/code_rules_naming_collection.py +152 -6
  35. package/hooks/blocking/code_rules_shared.py +34 -0
  36. package/hooks/blocking/code_rules_string_magic.py +68 -0
  37. package/hooks/blocking/duplicate_rmtree_helper_blocker.py +4 -4
  38. package/hooks/blocking/pre_tool_use_dispatcher.py +3 -3
  39. package/hooks/blocking/reviewer_spawn_gate.py +182 -0
  40. package/hooks/blocking/stale_comment_reference_blocker.py +267 -0
  41. package/hooks/blocking/state_description_blocker.py +96 -5
  42. package/hooks/blocking/test_code_rules_config_duplicate_path_anchor.py +132 -0
  43. package/hooks/blocking/test_code_rules_enforcer_cap_meta.py +2 -0
  44. package/hooks/blocking/test_code_rules_enforcer_docstring_delegation_summary.py +385 -0
  45. package/hooks/blocking/test_code_rules_enforcer_docstring_prose_wall_illustration.py +197 -0
  46. package/hooks/blocking/test_code_rules_enforcer_docstring_runon_sentence.py +27 -0
  47. package/hooks/blocking/test_code_rules_enforcer_join_separator_magic.py +67 -0
  48. package/hooks/blocking/test_code_rules_enforcer_module_docstring_roster.py +40 -0
  49. package/hooks/blocking/test_code_rules_enforcer_naive_datetime.py +213 -0
  50. package/hooks/blocking/test_code_rules_enforcer_referenced_underscore_loop.py +169 -0
  51. package/hooks/blocking/test_code_rules_enforcer_split_constants_config.py +33 -0
  52. package/hooks/blocking/test_code_rules_enforcer_split_shared.py +23 -0
  53. package/hooks/blocking/test_code_rules_js_bare_flag_return_directive.py +266 -0
  54. package/hooks/blocking/test_code_rules_js_sibling_return_object_key_drift.py +490 -0
  55. package/hooks/blocking/test_code_rules_logging_adjacent_literals.py +171 -0
  56. package/hooks/blocking/test_code_rules_magic_values.py +54 -0
  57. package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +0 -6
  58. package/hooks/blocking/test_pr_converge_bugteam_enforcer_state_tolerance.py +184 -0
  59. package/hooks/blocking/test_pre_tool_use_dispatcher.py +9 -3
  60. package/hooks/blocking/test_reviewer_spawn_gate.py +230 -0
  61. package/hooks/blocking/test_shared_stdin_adoption.py +5 -30
  62. package/hooks/blocking/test_stale_comment_reference_blocker.py +236 -0
  63. package/hooks/blocking/test_state_description_blocker.py +135 -0
  64. package/hooks/hooks.json +5 -0
  65. package/hooks/hooks_constants/CLAUDE.md +3 -4
  66. package/hooks/hooks_constants/blocking_check_limits.py +46 -0
  67. package/hooks/hooks_constants/code_rules_enforcer_constants.py +41 -0
  68. package/hooks/hooks_constants/code_rules_path_utils_constants.py +1 -1
  69. package/hooks/hooks_constants/duplicate_rmtree_helper_blocker_constants.py +0 -1
  70. package/hooks/hooks_constants/post_tool_use_dispatcher_constants.py +0 -5
  71. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +4 -0
  72. package/hooks/hooks_constants/reviewer_spawn_gate_constants.py +41 -0
  73. package/hooks/hooks_constants/stale_comment_reference_blocker_constants.py +76 -0
  74. package/hooks/hooks_constants/state_description_blocker_constants.py +8 -0
  75. package/hooks/validation/post_tool_use_dispatcher.py +1 -1
  76. package/hooks/validation/test_post_tool_use_dispatcher.py +51 -35
  77. package/hooks/workflow/CLAUDE.md +2 -8
  78. package/package.json +1 -1
  79. package/rules/CLAUDE.md +5 -2
  80. package/rules/claude-md-orphan-file.md +5 -0
  81. package/rules/docstring-prose-matches-implementation.md +10 -1
  82. package/rules/env-var-table-code-drift.md +5 -0
  83. package/rules/es-exe-file-search.md +17 -0
  84. package/rules/no-historical-clutter.md +12 -1
  85. package/rules/orphan-css-class.md +5 -0
  86. package/rules/package-inventory-stale-entry.md +10 -0
  87. package/rules/paired-test-coverage.md +5 -0
  88. package/rules/plain-illustrative-docstrings.md +40 -1
  89. package/rules/verify-before-asking.md +7 -0
  90. package/rules/verify-runtime-state.md +40 -0
  91. package/rules/windows-filesystem-safe.md +8 -0
  92. package/rules/workers-done-before-complete.md +33 -0
  93. package/rules/workflow-substitution-slots.md +5 -0
  94. package/skills/CLAUDE.md +7 -2
  95. package/skills/autoconverge/SKILL.md +48 -61
  96. package/skills/autoconverge/reference/closing-report.md +6 -6
  97. package/skills/autoconverge/reference/convergence.md +17 -15
  98. package/skills/autoconverge/reference/gotchas.md +6 -3
  99. package/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +2 -9
  100. package/skills/autoconverge/workflow/converge.contract.test.mjs +153 -10
  101. package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +55 -19
  102. package/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +16 -9
  103. package/skills/autoconverge/workflow/converge.mjs +167 -106
  104. package/skills/autoconverge/workflow/render_report.py +7 -11
  105. package/skills/bugteam/CLAUDE.md +1 -1
  106. package/skills/bugteam/PROMPTS.md +7 -6
  107. package/skills/bugteam/SKILL.md +25 -72
  108. package/skills/bugteam/reference/CLAUDE.md +1 -3
  109. package/skills/bugteam/reference/README.md +1 -1
  110. package/skills/bugteam/reference/audit-and-teammates.md +1 -1
  111. package/skills/bugteam/reference/obstacles/fix-publish-summary.md +1 -1
  112. package/skills/bugteam/reference/team-setup.md +8 -7
  113. package/skills/bugteam/scripts/CLAUDE.md +0 -6
  114. package/skills/bugteam/scripts/README.md +0 -4
  115. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
  116. package/skills/code/SKILL.md +2 -0
  117. package/skills/copilot-review/CLAUDE.md +1 -1
  118. package/skills/copilot-review/SKILL.md +25 -23
  119. package/skills/everything-search/SKILL.md +5 -0
  120. package/skills/findbugs/CLAUDE.md +2 -2
  121. package/skills/findbugs/SKILL.md +22 -83
  122. package/skills/fixbugs/SKILL.md +2 -4
  123. package/skills/log-audit/CLAUDE.md +20 -0
  124. package/skills/log-audit/SKILL.md +68 -0
  125. package/skills/log-audit/reference/CLAUDE.md +9 -0
  126. package/skills/log-audit/reference/charter.md +52 -0
  127. package/skills/log-audit/scripts/CLAUDE.md +27 -0
  128. package/skills/log-audit/scripts/cluster_recurrences.py +261 -0
  129. package/skills/log-audit/scripts/collect_log_window.py +199 -0
  130. package/skills/log-audit/scripts/log_audit_constants/CLAUDE.md +12 -0
  131. package/skills/log-audit/scripts/log_audit_constants/cluster_recurrences_constants.py +23 -0
  132. package/skills/log-audit/scripts/log_audit_constants/collect_log_window_constants.py +24 -0
  133. package/skills/log-audit/scripts/log_audit_constants/mine_copilot_findings_constants.py +49 -0
  134. package/skills/log-audit/scripts/mine_copilot_findings.py +302 -0
  135. package/skills/log-audit/scripts/test_cluster_recurrences.py +160 -0
  136. package/skills/log-audit/scripts/test_collect_log_window.py +111 -0
  137. package/skills/log-audit/scripts/test_mine_copilot_findings.py +126 -0
  138. package/skills/monitor-open-prs/SKILL.md +2 -2
  139. package/skills/post-audit-findings/SKILL.md +84 -0
  140. package/skills/pr-converge/CLAUDE.md +2 -0
  141. package/skills/pr-converge/SKILL.md +72 -59
  142. package/skills/pr-converge/reference/CLAUDE.md +1 -1
  143. package/skills/pr-converge/reference/convergence-gates.md +16 -19
  144. package/skills/pr-converge/reference/examples.md +5 -5
  145. package/skills/pr-converge/reference/fix-protocol.md +16 -43
  146. package/skills/pr-converge/reference/obstacles/fix-publish-summary.md +1 -1
  147. package/skills/pr-converge/reference/per-tick.md +24 -45
  148. package/skills/pr-converge/reference/state-schema.md +15 -0
  149. package/skills/pr-converge/scripts/README.md +3 -5
  150. package/skills/pr-fix-protocol/SKILL.md +70 -0
  151. package/skills/pr-loop-lifecycle/SKILL.md +73 -0
  152. package/skills/{bugteam → pr-loop-lifecycle}/reference/teardown-publish-permissions.md +22 -24
  153. package/skills/pr-scope-resolve/SKILL.md +48 -0
  154. package/skills/qbug/CLAUDE.md +4 -4
  155. package/skills/qbug/SKILL.md +46 -144
  156. package/skills/qbug/test_qbug_skill_audit_schema.py +2 -2
  157. package/skills/qbug/test_qbug_skill_post_fix_audit.py +1 -1
  158. package/skills/reviewer-gates/SKILL.md +96 -0
  159. package/skills/session-log/CLAUDE.md +7 -7
  160. package/skills/session-log/SKILL.md +27 -44
  161. package/skills/test_markdown_link_integrity.py +103 -0
  162. package/commands/doc-gist.md +0 -16
  163. package/hooks/blocking/_md_to_html_blocker_test_support.py +0 -65
  164. package/hooks/blocking/conftest.py +0 -30
  165. package/hooks/blocking/md_path_exemptions.py +0 -224
  166. package/hooks/blocking/md_to_html_blocker.py +0 -155
  167. package/hooks/blocking/test_md_to_html_blocker_exemptions.py +0 -434
  168. package/hooks/blocking/test_md_to_html_blocker_extensions.py +0 -157
  169. package/hooks/blocking/test_md_to_html_blocker_path_resolution.py +0 -336
  170. package/hooks/hooks_constants/doc_gist_auto_publish_constants.py +0 -18
  171. package/hooks/hooks_constants/html_companion_constants.py +0 -20
  172. package/hooks/hooks_constants/md_to_html_blocker_constants.py +0 -76
  173. package/hooks/hooks_constants/test_md_to_html_blocker_constants.py +0 -125
  174. package/hooks/workflow/doc_gist_auto_publish.py +0 -144
  175. package/hooks/workflow/md_to_html_companion.py +0 -358
  176. package/hooks/workflow/test_doc_gist_auto_publish.py +0 -117
  177. package/hooks/workflow/test_md_to_html_companion.py +0 -613
  178. package/skills/bugteam/reference/audit-contract.md +0 -163
  179. package/skills/bugteam/scripts/_bugteam_permissions_common.py +0 -455
  180. package/skills/bugteam/scripts/bugteam_scripts_constants/claude_permissions_common_constants.py +0 -69
  181. package/skills/bugteam/scripts/grant_project_claude_permissions.py +0 -280
  182. package/skills/bugteam/scripts/revoke_project_claude_permissions.py +0 -266
  183. package/skills/bugteam/scripts/test__bugteam_permissions_common.py +0 -160
  184. package/skills/bugteam/scripts/test_agent_config_carveout.py +0 -356
  185. package/skills/bugteam/scripts/test_bugteam_permissions_common.py +0 -140
  186. package/skills/doc-gist/CLAUDE.md +0 -25
  187. package/skills/doc-gist/SKILL.md +0 -97
  188. package/skills/doc-gist/references/CLAUDE.md +0 -9
  189. package/skills/doc-gist/references/examples/01-exploration-code-approaches.html +0 -453
  190. package/skills/doc-gist/references/examples/02-exploration-visual-designs.html +0 -515
  191. package/skills/doc-gist/references/examples/03-code-review-pr.html +0 -638
  192. package/skills/doc-gist/references/examples/04-code-understanding.html +0 -491
  193. package/skills/doc-gist/references/examples/05-design-system.html +0 -629
  194. package/skills/doc-gist/references/examples/06-component-variants.html +0 -605
  195. package/skills/doc-gist/references/examples/07-prototype-animation.html +0 -455
  196. package/skills/doc-gist/references/examples/08-prototype-interaction.html +0 -396
  197. package/skills/doc-gist/references/examples/09-slide-deck.html +0 -592
  198. package/skills/doc-gist/references/examples/10-svg-illustrations.html +0 -492
  199. package/skills/doc-gist/references/examples/11-status-report.html +0 -528
  200. package/skills/doc-gist/references/examples/12-incident-report.html +0 -596
  201. package/skills/doc-gist/references/examples/13-flowchart-diagram.html +0 -395
  202. package/skills/doc-gist/references/examples/14-research-feature-explainer.html +0 -381
  203. package/skills/doc-gist/references/examples/15-research-concept-explainer.html +0 -368
  204. package/skills/doc-gist/references/examples/16-implementation-plan.html +0 -702
  205. package/skills/doc-gist/references/examples/17-pr-writeup.html +0 -595
  206. package/skills/doc-gist/references/examples/18-editor-triage-board.html +0 -573
  207. package/skills/doc-gist/references/examples/19-editor-feature-flags.html +0 -663
  208. package/skills/doc-gist/references/examples/20-editor-prompt-tuner.html +0 -722
  209. package/skills/doc-gist/references/examples/21-decision-signoff.html +0 -546
  210. package/skills/doc-gist/references/examples/CLAUDE.md +0 -25
  211. package/skills/doc-gist/references/examples/README.md +0 -5
  212. package/skills/doc-gist/scripts/CLAUDE.md +0 -27
  213. package/skills/doc-gist/scripts/doc_gist_scripts_constants/CLAUDE.md +0 -10
  214. package/skills/doc-gist/scripts/doc_gist_scripts_constants/gist_upload_constants.py +0 -16
  215. package/skills/doc-gist/scripts/gist_upload.py +0 -177
  216. package/skills/doc-gist/scripts/test_gist_upload.py +0 -51
  217. /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>