@1agh/maude 0.15.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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/cli/bin/maude.exe +15 -0
  4. package/cli/bin/maude.mjs +45 -0
  5. package/cli/bin/mdcc.exe +10 -0
  6. package/cli/bin/mdcc.mjs +7 -0
  7. package/cli/cli-wrapper.cjs +67 -0
  8. package/cli/commands/config.mjs +94 -0
  9. package/cli/commands/design.mjs +386 -0
  10. package/cli/commands/help.mjs +57 -0
  11. package/cli/commands/init.mjs +178 -0
  12. package/cli/commands/version.mjs +7 -0
  13. package/cli/install.cjs +113 -0
  14. package/cli/lib/argv.mjs +37 -0
  15. package/cli/lib/argv.test.mjs +46 -0
  16. package/cli/lib/copy-tree.mjs +78 -0
  17. package/package.json +94 -0
  18. package/plugins/design/dev-server/annotations-context-toolbar.tsx +397 -0
  19. package/plugins/design/dev-server/annotations-layer.tsx +1717 -0
  20. package/plugins/design/dev-server/api.ts +674 -0
  21. package/plugins/design/dev-server/bin/_screenshot-playwright.mjs +50 -0
  22. package/plugins/design/dev-server/bin/bootstrap-check.sh +83 -0
  23. package/plugins/design/dev-server/bin/canvas-edit.sh +48 -0
  24. package/plugins/design/dev-server/bin/handoff.sh +27 -0
  25. package/plugins/design/dev-server/bin/screenshot.sh +232 -0
  26. package/plugins/design/dev-server/bin/server-up.sh +135 -0
  27. package/plugins/design/dev-server/bin/slug.sh +22 -0
  28. package/plugins/design/dev-server/bin/smoke.sh +272 -0
  29. package/plugins/design/dev-server/build.ts +267 -0
  30. package/plugins/design/dev-server/canvas-build.ts +219 -0
  31. package/plugins/design/dev-server/canvas-edit.ts +388 -0
  32. package/plugins/design/dev-server/canvas-header.ts +165 -0
  33. package/plugins/design/dev-server/canvas-icons.tsx +131 -0
  34. package/plugins/design/dev-server/canvas-lib-inline.ts +260 -0
  35. package/plugins/design/dev-server/canvas-lib-resolver.ts +85 -0
  36. package/plugins/design/dev-server/canvas-lib.tsx +1995 -0
  37. package/plugins/design/dev-server/canvas-meta.schema.json +181 -0
  38. package/plugins/design/dev-server/canvas-pipeline.ts +270 -0
  39. package/plugins/design/dev-server/canvas-shell.tsx +813 -0
  40. package/plugins/design/dev-server/client/app.jsx +2027 -0
  41. package/plugins/design/dev-server/client/hmr.mjs +85 -0
  42. package/plugins/design/dev-server/client/iframe-lazy.mjs +121 -0
  43. package/plugins/design/dev-server/client/index.html +15 -0
  44. package/plugins/design/dev-server/client/styles/0-reset.css +18 -0
  45. package/plugins/design/dev-server/client/styles/1-tokens.css +297 -0
  46. package/plugins/design/dev-server/client/styles/2-layout.css +35 -0
  47. package/plugins/design/dev-server/client/styles/3-shell.css +906 -0
  48. package/plugins/design/dev-server/client/styles/4-components.css +1268 -0
  49. package/plugins/design/dev-server/client/styles/5-utilities.css +4 -0
  50. package/plugins/design/dev-server/client/styles/_index.css +24 -0
  51. package/plugins/design/dev-server/client/styles.css +1419 -0
  52. package/plugins/design/dev-server/config.schema.json +147 -0
  53. package/plugins/design/dev-server/context-menu.tsx +343 -0
  54. package/plugins/design/dev-server/context.ts +173 -0
  55. package/plugins/design/dev-server/dist/client.bundle.js +20323 -0
  56. package/plugins/design/dev-server/dist/styles.css +2875 -0
  57. package/plugins/design/dev-server/examples/README.md +9 -0
  58. package/plugins/design/dev-server/examples/perf-100-artboards.tsx +113 -0
  59. package/plugins/design/dev-server/fs-watch.ts +63 -0
  60. package/plugins/design/dev-server/handoff.ts +721 -0
  61. package/plugins/design/dev-server/history.ts +125 -0
  62. package/plugins/design/dev-server/hmr-broadcast.ts +114 -0
  63. package/plugins/design/dev-server/http.ts +413 -0
  64. package/plugins/design/dev-server/input-router.tsx +485 -0
  65. package/plugins/design/dev-server/inspect.ts +365 -0
  66. package/plugins/design/dev-server/locator.ts +159 -0
  67. package/plugins/design/dev-server/mem.ts +97 -0
  68. package/plugins/design/dev-server/runtime-bundle.ts +235 -0
  69. package/plugins/design/dev-server/server.mjs +1246 -0
  70. package/plugins/design/dev-server/server.ts +131 -0
  71. package/plugins/design/dev-server/test/_helpers.ts +81 -0
  72. package/plugins/design/dev-server/test/active-state.test.ts +145 -0
  73. package/plugins/design/dev-server/test/annotations-api.test.ts +146 -0
  74. package/plugins/design/dev-server/test/annotations-layer.test.ts +419 -0
  75. package/plugins/design/dev-server/test/binary-smoke.test.ts +47 -0
  76. package/plugins/design/dev-server/test/bundle-smoke.test.ts +29 -0
  77. package/plugins/design/dev-server/test/canvas-build.test.ts +78 -0
  78. package/plugins/design/dev-server/test/canvas-edit.test.ts +139 -0
  79. package/plugins/design/dev-server/test/canvas-header.test.ts +127 -0
  80. package/plugins/design/dev-server/test/canvas-lib-inline.test.ts +146 -0
  81. package/plugins/design/dev-server/test/canvas-lib-resolver.test.ts +112 -0
  82. package/plugins/design/dev-server/test/canvas-meta-api.test.ts +236 -0
  83. package/plugins/design/dev-server/test/canvas-pipeline.test.ts +180 -0
  84. package/plugins/design/dev-server/test/canvas-route.test.ts +176 -0
  85. package/plugins/design/dev-server/test/fs-watch.test.ts +41 -0
  86. package/plugins/design/dev-server/test/handoff-static-frames.test.ts +215 -0
  87. package/plugins/design/dev-server/test/handoff.test.ts +281 -0
  88. package/plugins/design/dev-server/test/history-rollback.test.ts +62 -0
  89. package/plugins/design/dev-server/test/hmr-broadcast.test.ts +108 -0
  90. package/plugins/design/dev-server/test/input-router.test.ts +316 -0
  91. package/plugins/design/dev-server/test/locator.test.ts +214 -0
  92. package/plugins/design/dev-server/test/perf-harness.ts +193 -0
  93. package/plugins/design/dev-server/test/phase-3.6-smoke.test.ts +77 -0
  94. package/plugins/design/dev-server/test/runtime-bundle.test.ts +69 -0
  95. package/plugins/design/dev-server/test/server-lifecycle.test.ts +28 -0
  96. package/plugins/design/dev-server/test/tool-palette.test.tsx +55 -0
  97. package/plugins/design/dev-server/test/use-annotation-selection.test.tsx +77 -0
  98. package/plugins/design/dev-server/test/use-artboard-drag.test.ts +325 -0
  99. package/plugins/design/dev-server/test/use-selection-set.test.tsx +166 -0
  100. package/plugins/design/dev-server/test/use-snap-guides.test.ts +190 -0
  101. package/plugins/design/dev-server/test/use-tool-mode.test.tsx +93 -0
  102. package/plugins/design/dev-server/test/ws-handshake.test.ts +33 -0
  103. package/plugins/design/dev-server/tool-palette.tsx +278 -0
  104. package/plugins/design/dev-server/tsconfig.json +26 -0
  105. package/plugins/design/dev-server/use-annotation-selection.tsx +92 -0
  106. package/plugins/design/dev-server/use-annotations-visibility.tsx +43 -0
  107. package/plugins/design/dev-server/use-artboard-drag.tsx +445 -0
  108. package/plugins/design/dev-server/use-selection-set.tsx +224 -0
  109. package/plugins/design/dev-server/use-snap-guides.tsx +215 -0
  110. package/plugins/design/dev-server/use-tool-mode.tsx +114 -0
  111. package/plugins/design/dev-server/ws.ts +90 -0
  112. package/plugins/design/templates/_shell.html +177 -0
  113. package/plugins/design/templates/canvas.tsx.template +54 -0
  114. package/plugins/design/templates/design-system-inspiration/_MAPPING.md +277 -0
  115. package/plugins/design/templates/design-system-inspiration/_README.md +71 -0
  116. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-banner.html +68 -0
  117. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-empty-state-generous.html +39 -0
  118. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-feature-grid.html +62 -0
  119. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-marketing-card.html +63 -0
  120. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-testimonial.html +80 -0
  121. package/plugins/design/templates/design-system-inspiration/audience-developer/components-code-block.html +71 -0
  122. package/plugins/design/templates/design-system-inspiration/audience-developer/components-diff-view.html +65 -0
  123. package/plugins/design/templates/design-system-inspiration/audience-developer/components-log-stream.html +62 -0
  124. package/plugins/design/templates/design-system-inspiration/audience-developer/components-monospace-table.html +57 -0
  125. package/plugins/design/templates/design-system-inspiration/audience-developer/components-terminal-pane.html +67 -0
  126. package/plugins/design/templates/design-system-inspiration/audience-developer/type-mono.html +57 -0
  127. package/plugins/design/templates/design-system-inspiration/audience-pro/colors-presence.html +74 -0
  128. package/plugins/design/templates/design-system-inspiration/audience-pro/components-command-palette.html +90 -0
  129. package/plugins/design/templates/design-system-inspiration/audience-pro/components-keyboard.html +51 -0
  130. package/plugins/design/templates/design-system-inspiration/audience-pro/components-list.html +89 -0
  131. package/plugins/design/templates/design-system-inspiration/audience-pro/components-shortcuts-overlay.html +85 -0
  132. package/plugins/design/templates/design-system-inspiration/audience-pro/components-toast-menu.html +80 -0
  133. package/plugins/design/templates/design-system-inspiration/core/INDEX.md.tpl +25 -0
  134. package/plugins/design/templates/design-system-inspiration/core/README.orchestration.md.tpl +71 -0
  135. package/plugins/design/templates/design-system-inspiration/core/README.philosophy.md.tpl +77 -0
  136. package/plugins/design/templates/design-system-inspiration/core/SKILL.md.tpl +50 -0
  137. package/plugins/design/templates/design-system-inspiration/core/colors_and_type.css.tpl +111 -0
  138. package/plugins/design/templates/design-system-inspiration/core/config.json.tpl +28 -0
  139. package/plugins/design/templates/design-system-inspiration/core/preview/_layout.css +113 -0
  140. package/plugins/design/templates/design-system-inspiration/core/preview/colors-accent.html +48 -0
  141. package/plugins/design/templates/design-system-inspiration/core/preview/colors-surfaces.html +49 -0
  142. package/plugins/design/templates/design-system-inspiration/core/preview/colors-text.html +52 -0
  143. package/plugins/design/templates/design-system-inspiration/core/preview/components-buttons.html +83 -0
  144. package/plugins/design/templates/design-system-inspiration/core/preview/components-cards.html +79 -0
  145. package/plugins/design/templates/design-system-inspiration/core/preview/components-inputs.html +82 -0
  146. package/plugins/design/templates/design-system-inspiration/core/preview/motion.html +66 -0
  147. package/plugins/design/templates/design-system-inspiration/core/preview/spacing-scale.html +53 -0
  148. package/plugins/design/templates/design-system-inspiration/core/preview/type-scale.html +62 -0
  149. package/plugins/design/templates/design-system-inspiration/foundations/borders.html +39 -0
  150. package/plugins/design/templates/design-system-inspiration/foundations/elevation.html +46 -0
  151. package/plugins/design/templates/design-system-inspiration/foundations/focus.html +48 -0
  152. package/plugins/design/templates/design-system-inspiration/foundations/grid.html +51 -0
  153. package/plugins/design/templates/design-system-inspiration/foundations/iconography.html +73 -0
  154. package/plugins/design/templates/design-system-inspiration/foundations/opacity.html +45 -0
  155. package/plugins/design/templates/design-system-inspiration/foundations/radii.html +40 -0
  156. package/plugins/design/templates/design-system-inspiration/foundations/selection.html +45 -0
  157. package/plugins/design/templates/design-system-inspiration/meta/accessibility.html +62 -0
  158. package/plugins/design/templates/design-system-inspiration/meta/i18n.html +73 -0
  159. package/plugins/design/templates/design-system-inspiration/meta/presence-multiplayer.html +71 -0
  160. package/plugins/design/templates/design-system-inspiration/meta/tokens-index.html +80 -0
  161. package/plugins/design/templates/design-system-inspiration/patterns/patterns-auth.html +78 -0
  162. package/plugins/design/templates/design-system-inspiration/patterns/patterns-data-density.html +61 -0
  163. package/plugins/design/templates/design-system-inspiration/patterns/patterns-error-pages.html +70 -0
  164. package/plugins/design/templates/design-system-inspiration/patterns/patterns-form-layouts.html +70 -0
  165. package/plugins/design/templates/design-system-inspiration/patterns/patterns-onboarding.html +71 -0
  166. package/plugins/design/templates/design-system-inspiration/patterns/patterns-pricing.html +83 -0
  167. package/plugins/design/templates/design-system-inspiration/platform-desktop/components-resize-panels.html +63 -0
  168. package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-index.html +55 -0
  169. package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-showcase.html +302 -0
  170. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-bottom-sheet.html +63 -0
  171. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-pull-to-refresh.html +74 -0
  172. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-segmented-control.html +51 -0
  173. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-tab-bar.html +57 -0
  174. package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-index.html +58 -0
  175. package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-showcase.html +237 -0
  176. package/plugins/design/templates/design-system-inspiration/status/colors-status.html +49 -0
  177. package/plugins/design/templates/design-system-inspiration/status/components-status.html +63 -0
  178. package/plugins/design/templates/design-system-inspiration/status/skeletons.html +74 -0
  179. package/plugins/design/templates/design-system-inspiration/theme-both/colors-themes-side-by-side.html +59 -0
  180. package/plugins/design/templates/design-system-inspiration/universal/components-callout.html +74 -0
  181. package/plugins/design/templates/design-system-inspiration/universal/components-dialogs.html +81 -0
  182. package/plugins/design/templates/design-system-inspiration/universal/components-tables.html +101 -0
  183. package/plugins/design/templates/design-system-inspiration/universal/components-toggles.html +74 -0
  184. package/plugins/design/templates/design-system-inspiration/universal/components-tooltips.html +74 -0
  185. package/plugins/design/templates/design-system-inspiration/universal/empty-state.html.tpl +34 -0
  186. package/plugins/design/templates/design-system-inspiration/universal/logo.html +42 -0
  187. package/plugins/design/templates/ds-specimen.tsx.template +59 -0
  188. package/plugins/flow/.claude-plugin/config.schema.json +398 -0
  189. package/plugins/flow/README.md +45 -0
  190. package/plugins/flow/templates/ai-skeleton/INDEX.md +50 -0
  191. package/plugins/flow/templates/ai-skeleton/README.md +46 -0
  192. package/plugins/flow/templates/ai-skeleton/browser/har/.gitkeep +0 -0
  193. package/plugins/flow/templates/ai-skeleton/browser/snapshots/.gitkeep +0 -0
  194. package/plugins/flow/templates/ai-skeleton/business/README.md +12 -0
  195. package/plugins/flow/templates/ai-skeleton/context/README.md +12 -0
  196. package/plugins/flow/templates/ai-skeleton/decisions/README.md +20 -0
  197. package/plugins/flow/templates/ai-skeleton/design-import/.gitkeep +0 -0
  198. package/plugins/flow/templates/ai-skeleton/dev-logs/.gitkeep +0 -0
  199. package/plugins/flow/templates/ai-skeleton/device/.gitkeep +0 -0
  200. package/plugins/flow/templates/ai-skeleton/docs/README.md +5 -0
  201. package/plugins/flow/templates/ai-skeleton/logs/.gitkeep +0 -0
  202. package/plugins/flow/templates/ai-skeleton/logs/README.md +13 -0
  203. package/plugins/flow/templates/ai-skeleton/plans/README.md +16 -0
  204. package/plugins/flow/templates/ai-skeleton/plans/archive/.gitkeep +0 -0
  205. package/plugins/flow/templates/ai-skeleton/release-guide.md +35 -0
  206. package/plugins/flow/templates/ai-skeleton/reviews/README.md +15 -0
  207. package/plugins/flow/templates/ai-skeleton/scenarios/README.md +26 -0
  208. package/plugins/flow/templates/ai-skeleton/scenarios/_lib/.gitkeep +0 -0
  209. package/plugins/flow/templates/ai-skeleton/state/STATE.md +25 -0
  210. package/plugins/flow/templates/ai-skeleton/templates/HANDOFF.md +32 -0
  211. package/plugins/flow/templates/ai-skeleton/workflows.config.json +74 -0
@@ -0,0 +1,1268 @@
1
+ /* @layer components — system view, tokens grid, comments, gallery. */
2
+ @layer components {
3
+ /* ----- System tab ----- */
4
+ .tab-system {
5
+ background: var(--u-accent-bg);
6
+ border-color: var(--u-accent-line);
7
+ color: var(--u-accent);
8
+ }
9
+ .tab-system:hover { background: var(--u-accent-bg); }
10
+ .tab-system.active { color: var(--u-accent); border-color: var(--u-accent); }
11
+
12
+ /* ----- System view ----- */
13
+ .system-view {
14
+ position: absolute;
15
+ inset: 0;
16
+ display: none;
17
+ overflow-y: auto;
18
+ background: var(--u-bg-0);
19
+ }
20
+ .system-view.active { display: block; }
21
+ .system-view::-webkit-scrollbar { width: 8px; }
22
+ .system-view::-webkit-scrollbar-thumb { background: var(--u-border); border-radius: var(--u-r-sm); }
23
+
24
+ .sv {
25
+ max-width: 1280px;
26
+ margin: 0 auto;
27
+ padding: var(--space-7) var(--space-7) var(--space-9);
28
+ font-family: var(--u-font-mono);
29
+ }
30
+ .sv-empty {
31
+ display: grid;
32
+ place-items: center;
33
+ height: 50vh;
34
+ color: var(--u-fg-3);
35
+ }
36
+
37
+ /* CV-09 header — SKU framing, hairline divider underneath. */
38
+ .sv-header {
39
+ display: grid;
40
+ grid-template-columns: auto 1fr auto;
41
+ align-items: baseline;
42
+ gap: var(--space-5);
43
+ border-bottom: 2px solid var(--u-fg-0);
44
+ padding-bottom: var(--u-s-3);
45
+ margin-bottom: var(--u-s-5);
46
+ }
47
+ .sv-sku {
48
+ font-family: var(--u-font-mono);
49
+ font-size: var(--type-lg);
50
+ font-weight: 700;
51
+ letter-spacing: var(--tracking-sku);
52
+ text-transform: uppercase;
53
+ color: var(--u-fg-0);
54
+ }
55
+ .sv-title {
56
+ font-family: var(--u-font-mono);
57
+ font-size: var(--type-md);
58
+ color: var(--u-fg-1);
59
+ }
60
+ .sv-loc {
61
+ font-family: var(--u-font-mono);
62
+ font-size: 10px;
63
+ letter-spacing: var(--tracking-sku);
64
+ text-transform: uppercase;
65
+ color: var(--u-fg-2);
66
+ }
67
+ .sv-loc code {
68
+ font-family: var(--u-font-mono);
69
+ color: var(--u-accent);
70
+ background: transparent;
71
+ padding: 0;
72
+ }
73
+
74
+ .sv-section {
75
+ margin-bottom: var(--u-s-5);
76
+ }
77
+ .sv-section h2 {
78
+ font-family: var(--u-font-mono);
79
+ font-size: 10px;
80
+ font-weight: 700;
81
+ color: var(--u-fg-2);
82
+ text-transform: uppercase;
83
+ letter-spacing: var(--tracking-sku);
84
+ margin: 0 0 var(--u-s-3);
85
+ padding-bottom: var(--u-s-2);
86
+ border-bottom: 1px solid var(--u-border);
87
+ display: flex;
88
+ justify-content: space-between;
89
+ align-items: baseline;
90
+ }
91
+ .sv-section h2 .sv-h-num {
92
+ color: var(--u-fg-1);
93
+ font-weight: 600;
94
+ font-variant-numeric: tabular-nums;
95
+ }
96
+ .sv-section h3 {
97
+ font-family: var(--u-font-mono);
98
+ font-size: 10px;
99
+ font-weight: 700;
100
+ color: var(--u-fg-2);
101
+ text-transform: uppercase;
102
+ letter-spacing: var(--tracking-sku);
103
+ margin: var(--u-s-3) 0 var(--u-s-2);
104
+ display: flex;
105
+ align-items: baseline;
106
+ gap: var(--u-s-2);
107
+ }
108
+ .sv-count {
109
+ font-family: var(--u-font-mono);
110
+ font-size: 11px;
111
+ color: var(--u-fg-3);
112
+ font-weight: 500;
113
+ font-variant-numeric: tabular-nums;
114
+ }
115
+
116
+ /* CV-09 token surfaces ladder — 6-up grid, hairline gutters, mono labels. */
117
+ .sv-tokens-ladder {
118
+ display: grid;
119
+ grid-template-columns: repeat(6, 1fr);
120
+ gap: 0;
121
+ border: 1px solid var(--u-border);
122
+ }
123
+ .sv-tok-cell {
124
+ border-right: 1px solid var(--u-border);
125
+ border-bottom: 1px solid var(--u-border);
126
+ background: var(--u-bg-1);
127
+ display: flex;
128
+ flex-direction: column;
129
+ }
130
+ .sv-tok-cell:nth-child(6n) { border-right: 0; }
131
+ .sv-tok-cell .sv-tok-swatch {
132
+ height: 56px;
133
+ border-bottom: 1px solid var(--u-border-subtle);
134
+ }
135
+ .sv-tok-cell .sv-tok-meta {
136
+ padding: var(--u-s-1) var(--u-s-2);
137
+ display: flex;
138
+ justify-content: space-between;
139
+ align-items: baseline;
140
+ gap: var(--u-s-1);
141
+ min-width: 0;
142
+ }
143
+ .sv-tok-cell .sv-tok-name {
144
+ font-family: var(--u-font-mono);
145
+ font-size: 10px;
146
+ color: var(--u-fg-0);
147
+ font-weight: 600;
148
+ background: transparent;
149
+ padding: 0;
150
+ overflow: hidden;
151
+ text-overflow: ellipsis;
152
+ }
153
+ .sv-tok-cell .sv-tok-value {
154
+ font-family: var(--u-font-mono);
155
+ font-size: 9px;
156
+ color: var(--u-fg-2);
157
+ font-variant-numeric: tabular-nums;
158
+ white-space: nowrap;
159
+ text-overflow: ellipsis;
160
+ overflow: hidden;
161
+ }
162
+
163
+ /* CV-09 8-step type ladder. Each row: token name · sample at actual size. */
164
+ .sv-type-list { display: block; }
165
+ .sv-type-row {
166
+ display: grid;
167
+ grid-template-columns: 120px 1fr;
168
+ gap: var(--u-s-4);
169
+ align-items: baseline;
170
+ padding: var(--u-s-2) 0;
171
+ border-bottom: 1px solid var(--u-border-subtle);
172
+ }
173
+ .sv-type-tok {
174
+ font-family: var(--u-font-mono);
175
+ font-size: 10px;
176
+ color: var(--u-accent);
177
+ letter-spacing: var(--tracking-sku);
178
+ text-transform: uppercase;
179
+ background: transparent;
180
+ padding: 0;
181
+ }
182
+ .sv-type-sample {
183
+ color: var(--u-fg-0);
184
+ font-family: var(--u-font-mono);
185
+ }
186
+
187
+ .sv-readme {
188
+ font-family: var(--u-font-mono);
189
+ font-size: 12px;
190
+ line-height: 1.6;
191
+ color: var(--u-fg-1);
192
+ background: var(--u-bg-1);
193
+ border: 1px solid var(--u-border);
194
+ border-radius: var(--u-r-md);
195
+ padding: var(--u-s-4);
196
+ white-space: pre-wrap;
197
+ overflow-x: auto;
198
+ max-height: 480px;
199
+ overflow-y: auto;
200
+ }
201
+
202
+ /* Tokens */
203
+ .sv-tokens-group { margin-bottom: var(--u-s-3); }
204
+ .sv-tokens {
205
+ display: grid;
206
+ gap: var(--u-s-2);
207
+ }
208
+ .sv-tokens-color { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
209
+ .sv-tokens-font, .sv-tokens-fontsize { grid-template-columns: 1fr; }
210
+ .sv-tokens-radius, .sv-tokens-shadow { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
211
+ .sv-tokens-space { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
212
+ .sv-tokens-other, .sv-tokens-weight, .sv-tokens-leading, .sv-tokens-motion {
213
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
214
+ }
215
+
216
+ .tok {
217
+ background: var(--u-bg-1);
218
+ border: 1px solid var(--u-border);
219
+ border-radius: var(--u-r-md);
220
+ padding: var(--u-s-2);
221
+ display: flex;
222
+ flex-direction: column;
223
+ gap: var(--u-s-2);
224
+ min-width: 0;
225
+ }
226
+ .tok-meta {
227
+ display: flex;
228
+ flex-direction: column;
229
+ gap: 2px;
230
+ font-size: 11px;
231
+ min-width: 0;
232
+ }
233
+ .tok-meta code {
234
+ font-family: var(--u-font-mono);
235
+ color: var(--u-fg-0);
236
+ font-size: 11px;
237
+ overflow: hidden;
238
+ text-overflow: ellipsis;
239
+ white-space: nowrap;
240
+ }
241
+ .tok-meta span {
242
+ font-family: var(--u-font-mono);
243
+ color: var(--u-fg-3);
244
+ font-size: 10px;
245
+ overflow: hidden;
246
+ text-overflow: ellipsis;
247
+ white-space: nowrap;
248
+ }
249
+
250
+ .tok-color { flex-direction: row; align-items: center; }
251
+ .tok-swatch {
252
+ width: 48px;
253
+ height: 48px;
254
+ border-radius: var(--u-r-sm);
255
+ border: 1px solid var(--u-border-strong);
256
+ flex: none;
257
+ background-image:
258
+ linear-gradient(45deg, var(--u-border-subtle) 25%, transparent 25%),
259
+ linear-gradient(-45deg, var(--u-border-subtle) 25%, transparent 25%),
260
+ linear-gradient(45deg, transparent 75%, var(--u-border-subtle) 75%),
261
+ linear-gradient(-45deg, transparent 75%, var(--u-border-subtle) 75%);
262
+ background-size: 12px 12px;
263
+ background-position: 0 0, 0 6px, 6px -6px, -6px 0;
264
+ }
265
+ .tok-color .tok-swatch { background: inherit; }
266
+
267
+ .tok-text .tok-sample {
268
+ color: var(--u-fg-0);
269
+ font-size: 18px;
270
+ line-height: 1.3;
271
+ overflow: hidden;
272
+ text-overflow: ellipsis;
273
+ white-space: nowrap;
274
+ }
275
+
276
+ .tok-radius { flex-direction: row; align-items: center; }
277
+ .tok-radius .tok-shape {
278
+ width: 48px; height: 48px;
279
+ background: var(--u-bg-3);
280
+ border: 1px solid var(--u-border-strong);
281
+ flex: none;
282
+ }
283
+ .tok-shadow { flex-direction: row; align-items: center; padding: var(--u-s-3); }
284
+ .tok-shadow .tok-shape {
285
+ width: 48px; height: 48px;
286
+ background: var(--u-bg-2);
287
+ border-radius: var(--u-r-md);
288
+ flex: none;
289
+ }
290
+ .tok-space { flex-direction: column; }
291
+ .tok-space .tok-bar {
292
+ height: 8px;
293
+ background: var(--u-accent);
294
+ border-radius: var(--u-r-pill);
295
+ max-width: 100%;
296
+ }
297
+
298
+ /* Galleries (preview / ui_kits) */
299
+ .sv-previews {
300
+ display: grid;
301
+ grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
302
+ gap: var(--u-s-3);
303
+ }
304
+ .sv-previews-ui_kits {
305
+ grid-template-columns: repeat(auto-fill, minmax(560px, 1fr));
306
+ }
307
+ .sv-previews-ui_kits .sv-preview-frame {
308
+ aspect-ratio: 16 / 10;
309
+ }
310
+ .sv-preview-card {
311
+ background: var(--u-bg-1);
312
+ border: 1px solid var(--u-border);
313
+ border-radius: var(--u-r-md);
314
+ overflow: hidden;
315
+ cursor: pointer;
316
+ transition: all 120ms;
317
+ }
318
+ .sv-preview-card:hover {
319
+ border-color: var(--u-accent-line);
320
+ transform: translateY(-1px);
321
+ }
322
+ .sv-preview-frame {
323
+ position: relative;
324
+ aspect-ratio: 16 / 10;
325
+ background: var(--u-bg-0);
326
+ border-bottom: 1px solid var(--u-border);
327
+ overflow: hidden;
328
+ }
329
+ .sv-preview-frame iframe {
330
+ position: absolute;
331
+ top: 0;
332
+ left: 0;
333
+ width: 200%;
334
+ height: 200%;
335
+ border: 0;
336
+ transform: scale(0.5);
337
+ transform-origin: top left;
338
+ /* `pointer-events: none` blocks click-through; .sv-preview-card has its own
339
+ onClick that handles opening the file. Keep iframe interactive-blocked so
340
+ hovers/clicks don't get swallowed by the inner specimen. */
341
+ pointer-events: none;
342
+ background: var(--u-bg-0);
343
+ }
344
+ .sv-preview-foot {
345
+ padding: var(--u-s-2) var(--u-s-3);
346
+ display: flex;
347
+ flex-direction: column;
348
+ gap: 2px;
349
+ }
350
+ .sv-preview-foot strong {
351
+ font-size: 12px;
352
+ color: var(--u-fg-0);
353
+ font-weight: 600;
354
+ }
355
+ .sv-preview-foot code {
356
+ font-family: var(--u-font-mono);
357
+ font-size: 10px;
358
+ color: var(--u-fg-3);
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ }
363
+
364
+ /* Components / list */
365
+ .sv-list {
366
+ list-style: none;
367
+ margin: 0;
368
+ padding: 0;
369
+ display: grid;
370
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
371
+ gap: var(--u-s-1);
372
+ }
373
+ .sv-list li {
374
+ background: var(--u-bg-1);
375
+ border: 1px solid var(--u-border);
376
+ border-radius: var(--u-r-sm);
377
+ padding: var(--u-s-2) var(--u-s-3);
378
+ display: flex;
379
+ flex-direction: column;
380
+ gap: 2px;
381
+ min-width: 0;
382
+ }
383
+ .sv-list code {
384
+ font-family: var(--u-font-mono);
385
+ font-size: 12px;
386
+ color: var(--u-fg-0);
387
+ font-weight: 500;
388
+ }
389
+ .sv-list-path {
390
+ font-family: var(--u-font-mono);
391
+ font-size: 10px;
392
+ color: var(--u-fg-3);
393
+ overflow: hidden;
394
+ text-overflow: ellipsis;
395
+ white-space: nowrap;
396
+ }
397
+
398
+ /* Assets */
399
+ .sv-assets {
400
+ display: grid;
401
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
402
+ gap: var(--u-s-2);
403
+ }
404
+ .sv-asset {
405
+ background: var(--u-bg-1);
406
+ border: 1px solid var(--u-border);
407
+ border-radius: var(--u-r-sm);
408
+ padding: var(--u-s-3);
409
+ margin: 0;
410
+ display: flex;
411
+ flex-direction: column;
412
+ align-items: center;
413
+ gap: var(--u-s-2);
414
+ }
415
+ .sv-asset img {
416
+ max-width: 100%;
417
+ max-height: 80px;
418
+ height: auto;
419
+ width: auto;
420
+ object-fit: contain;
421
+ }
422
+ .sv-asset figcaption {
423
+ font-family: var(--u-font-mono);
424
+ font-size: 10px;
425
+ color: var(--u-fg-3);
426
+ text-align: center;
427
+ overflow: hidden;
428
+ text-overflow: ellipsis;
429
+ white-space: nowrap;
430
+ max-width: 100%;
431
+ }
432
+
433
+ /* ----- Comment bar ----- */
434
+ .comment-bar {
435
+ background: var(--u-bg-1);
436
+ border-top: 1px solid var(--u-border);
437
+ padding: 6px var(--u-s-3);
438
+ display: flex;
439
+ flex-direction: column;
440
+ gap: 4px;
441
+ font-size: 12px;
442
+ }
443
+ .cb-row {
444
+ display: flex;
445
+ align-items: center;
446
+ gap: var(--u-s-2);
447
+ flex-wrap: wrap;
448
+ }
449
+ /* Composer — stacked vertically so the textarea has real estate */
450
+ .composer {
451
+ display: flex;
452
+ flex-direction: column;
453
+ gap: var(--u-s-2);
454
+ padding: var(--u-s-3);
455
+ background: var(--u-bg-2);
456
+ border: 1px solid var(--u-accent-line);
457
+ border-radius: var(--u-r-md);
458
+ margin: 4px 0;
459
+ }
460
+ .composer-head {
461
+ display: flex;
462
+ align-items: baseline;
463
+ gap: var(--u-s-2);
464
+ font-size: 11px;
465
+ color: var(--u-fg-3);
466
+ }
467
+ .composer-selector {
468
+ font-family: var(--u-font-mono);
469
+ font-size: 11px;
470
+ color: var(--u-fg-1);
471
+ background: var(--u-bg-1);
472
+ padding: 2px 8px;
473
+ border-radius: var(--u-r-sm);
474
+ border: 1px solid var(--u-border);
475
+ overflow: hidden;
476
+ text-overflow: ellipsis;
477
+ white-space: nowrap;
478
+ flex: 1;
479
+ min-width: 0;
480
+ }
481
+ .comment-bar textarea.composer-textarea {
482
+ width: 100%;
483
+ background: var(--u-bg-1);
484
+ border: 1px solid var(--u-border);
485
+ border-radius: var(--u-r-sm);
486
+ color: var(--u-fg-0);
487
+ font-family: inherit;
488
+ font-size: 13px;
489
+ line-height: 1.5;
490
+ padding: var(--u-s-3);
491
+ resize: vertical;
492
+ min-height: 100px;
493
+ outline: none;
494
+ }
495
+ .comment-bar textarea.composer-textarea:focus { border-color: var(--u-accent-line); }
496
+ .comment-bar textarea.composer-textarea::placeholder { color: var(--u-fg-3); }
497
+ .composer-actions {
498
+ display: flex;
499
+ justify-content: flex-end;
500
+ gap: 6px;
501
+ }
502
+
503
+ .cb-row.composer {
504
+ align-items: stretch;
505
+ flex-wrap: nowrap;
506
+ }
507
+ .cb-label {
508
+ color: var(--u-fg-3);
509
+ font-size: 11px;
510
+ flex: none;
511
+ align-self: center;
512
+ }
513
+ .cb-label code {
514
+ font-family: var(--u-font-mono);
515
+ font-size: 10px;
516
+ background: var(--u-bg-2);
517
+ padding: 1px 4px;
518
+ border-radius: var(--u-r-xs);
519
+ color: var(--u-fg-1);
520
+ }
521
+ .comment-bar textarea {
522
+ flex: 1;
523
+ background: var(--u-bg-2);
524
+ border: 1px solid var(--u-border);
525
+ border-radius: var(--u-r-sm);
526
+ color: var(--u-fg-0);
527
+ font-family: inherit;
528
+ font-size: 12px;
529
+ padding: var(--u-s-2);
530
+ resize: vertical;
531
+ min-height: 40px;
532
+ outline: none;
533
+ }
534
+ .comment-bar textarea:focus { border-color: var(--u-accent-line); }
535
+ .cb-actions {
536
+ display: flex;
537
+ gap: 4px;
538
+ align-self: flex-end;
539
+ }
540
+ .cb-primary, .cb-secondary {
541
+ border: 1px solid var(--u-border);
542
+ background: var(--u-bg-2);
543
+ color: var(--u-fg-1);
544
+ border-radius: var(--u-r-sm);
545
+ padding: 4px var(--u-s-3);
546
+ font-family: var(--u-font-mono);
547
+ font-size: 11px;
548
+ cursor: pointer;
549
+ }
550
+ .cb-primary {
551
+ background: var(--u-accent);
552
+ color: var(--u-bg-0);
553
+ border-color: var(--u-accent);
554
+ font-weight: 600;
555
+ }
556
+ .cb-primary:hover { background: var(--u-accent-strong); border-color: var(--u-accent-strong); }
557
+ .cb-primary:disabled { opacity: 0.5; cursor: not-allowed; }
558
+ .cb-secondary:hover { background: var(--u-bg-3); color: var(--u-fg-0); }
559
+
560
+ .cb-row.focused {
561
+ background: var(--u-bg-2);
562
+ border-radius: var(--u-r-sm);
563
+ padding: 4px var(--u-s-2);
564
+ }
565
+ .cb-pinno {
566
+ font-family: var(--u-font-mono);
567
+ font-size: 11px;
568
+ background: var(--u-accent);
569
+ color: var(--u-accent-fg);
570
+ border-radius: var(--u-r-sm);
571
+ padding: 1px 6px;
572
+ font-weight: 700;
573
+ flex: none;
574
+ letter-spacing: var(--tracking-sku);
575
+ }
576
+ .cb-text {
577
+ flex: 1;
578
+ color: var(--u-fg-0);
579
+ overflow: hidden;
580
+ text-overflow: ellipsis;
581
+ white-space: nowrap;
582
+ font-size: 12px;
583
+ }
584
+ .cb-target code {
585
+ font-family: var(--u-font-mono);
586
+ font-size: 10px;
587
+ background: var(--u-bg-3);
588
+ padding: 1px 6px;
589
+ border-radius: var(--u-r-xs);
590
+ color: var(--u-fg-2);
591
+ max-width: 240px;
592
+ overflow: hidden;
593
+ text-overflow: ellipsis;
594
+ white-space: nowrap;
595
+ display: inline-block;
596
+ }
597
+
598
+ .cb-row.strip {
599
+ font-size: 11px;
600
+ color: var(--u-fg-3);
601
+ }
602
+ .cb-pin-strip {
603
+ display: flex;
604
+ gap: 4px;
605
+ flex: 1;
606
+ flex-wrap: wrap;
607
+ }
608
+ .cb-pin-chip {
609
+ font-family: var(--u-font-mono);
610
+ font-size: 10px;
611
+ background: var(--u-accent);
612
+ color: var(--u-accent-fg);
613
+ border: 0;
614
+ border-radius: var(--u-r-sm);
615
+ padding: 2px 7px;
616
+ font-weight: 600;
617
+ cursor: pointer;
618
+ transition: transform 100ms;
619
+ letter-spacing: var(--tracking-sku);
620
+ }
621
+ .cb-pin-chip:hover { transform: scale(1.1); }
622
+ .cb-more { font-family: var(--u-font-mono); font-size: 10px; color: var(--u-fg-3); align-self: center; }
623
+
624
+ /* ----- Right sidebar — Comments panel (CV-10) ----- */
625
+ .rsidebar {
626
+ background: var(--u-bg-1);
627
+ border-left: 1px solid var(--u-border);
628
+ display: flex;
629
+ flex-direction: column;
630
+ min-width: 0;
631
+ font-family: var(--u-font-mono);
632
+ }
633
+ .rsidebar-header {
634
+ padding: var(--u-s-2) var(--u-s-3);
635
+ background: var(--u-bg-2);
636
+ border-bottom: 1px solid var(--u-border);
637
+ display: flex;
638
+ align-items: baseline;
639
+ gap: var(--u-s-2);
640
+ }
641
+ .rsidebar-header h2 {
642
+ font-family: var(--u-font-mono);
643
+ font-size: var(--type-md);
644
+ font-weight: 700;
645
+ margin: 0;
646
+ color: var(--u-fg-0);
647
+ display: flex;
648
+ align-items: baseline;
649
+ gap: var(--u-s-2);
650
+ letter-spacing: var(--tracking-tight);
651
+ }
652
+ .rsidebar-header h2 > span:first-child {
653
+ text-transform: lowercase;
654
+ }
655
+ .rsidebar-header h2 .total {
656
+ font-family: var(--u-font-mono);
657
+ font-size: 10px;
658
+ color: var(--u-fg-2);
659
+ font-weight: 500;
660
+ margin-left: auto;
661
+ font-variant-numeric: tabular-nums;
662
+ letter-spacing: var(--tracking-sku);
663
+ text-transform: uppercase;
664
+ }
665
+
666
+ /* CV-10 tabs: ALL · OPEN · RESOLVED with mono counter chips, active underline. */
667
+ .rsidebar-filters {
668
+ display: flex;
669
+ gap: 0;
670
+ background: var(--u-bg-1);
671
+ border-radius: 0;
672
+ border: 0;
673
+ border-bottom: 1px solid var(--u-border);
674
+ padding: 0;
675
+ }
676
+ .rsidebar-filter {
677
+ flex: 1;
678
+ background: var(--u-bg-1);
679
+ border: 0;
680
+ border-right: 1px solid var(--u-border-subtle);
681
+ color: var(--u-fg-2);
682
+ cursor: pointer;
683
+ font-family: var(--u-font-mono);
684
+ font-size: 10px;
685
+ font-weight: 600;
686
+ padding: var(--u-s-2) var(--u-s-2);
687
+ border-radius: 0;
688
+ display: flex;
689
+ align-items: baseline;
690
+ justify-content: center;
691
+ gap: 6px;
692
+ letter-spacing: var(--tracking-sku);
693
+ text-transform: uppercase;
694
+ position: relative;
695
+ transition: color var(--dur-flip) var(--ease-out),
696
+ background var(--dur-flip) var(--ease-out);
697
+ }
698
+ .rsidebar-filter:last-child { border-right: 0; }
699
+ .rsidebar-filter:hover { color: var(--u-fg-0); background: var(--u-bg-2); }
700
+ .rsidebar-filter:focus-visible { outline: none; box-shadow: var(--shadow-focus); z-index: 1; }
701
+ .rsidebar-filter.active {
702
+ background: var(--u-bg-0);
703
+ color: var(--u-fg-0);
704
+ box-shadow: none;
705
+ font-weight: 700;
706
+ }
707
+ .rsidebar-filter.active::after {
708
+ content: "";
709
+ position: absolute;
710
+ left: 0; right: 0; bottom: -1px;
711
+ height: 2px;
712
+ background: var(--u-accent);
713
+ }
714
+ .rsidebar-filter .fc {
715
+ font-family: var(--u-font-mono);
716
+ font-size: 10px;
717
+ color: var(--u-fg-1);
718
+ font-variant-numeric: tabular-nums;
719
+ letter-spacing: 0;
720
+ padding: 0 5px;
721
+ background: var(--u-bg-2);
722
+ border: 1px solid var(--u-border);
723
+ }
724
+ .rsidebar-filter.active .fc {
725
+ background: var(--u-accent);
726
+ color: var(--u-accent-fg);
727
+ border-color: var(--u-accent);
728
+ }
729
+
730
+ .rsidebar-body {
731
+ flex: 1;
732
+ overflow-y: auto;
733
+ padding: 0;
734
+ background: var(--u-bg-0);
735
+ }
736
+ .rsidebar-body::-webkit-scrollbar { width: 6px; }
737
+ .rsidebar-body::-webkit-scrollbar-thumb { background: var(--u-border); border-radius: var(--u-r-sm); }
738
+ .rsidebar-empty {
739
+ padding: var(--u-s-5) var(--u-s-3);
740
+ text-align: center;
741
+ color: var(--u-fg-3);
742
+ font-size: 12px;
743
+ line-height: 1.5;
744
+ }
745
+ .rsidebar-empty kbd {
746
+ font-family: var(--u-font-mono);
747
+ background: var(--u-bg-2);
748
+ border: 1px solid var(--u-border);
749
+ padding: 1px 5px;
750
+ border-radius: var(--u-r-xs);
751
+ font-size: 11px;
752
+ color: var(--u-fg-1);
753
+ }
754
+
755
+ .rs-group {
756
+ margin-bottom: 0;
757
+ }
758
+ .rs-group-h {
759
+ display: flex;
760
+ align-items: baseline;
761
+ gap: var(--u-s-2);
762
+ padding: var(--u-s-2) var(--u-s-3);
763
+ font-size: 10px;
764
+ font-weight: 700;
765
+ color: var(--u-fg-2);
766
+ background: var(--u-bg-1);
767
+ border: 0;
768
+ border-top: 1px solid var(--u-border-subtle);
769
+ border-bottom: 1px solid var(--u-border-subtle);
770
+ width: 100%;
771
+ text-align: left;
772
+ cursor: pointer;
773
+ font-family: var(--u-font-mono);
774
+ letter-spacing: var(--tracking-sku);
775
+ text-transform: uppercase;
776
+ }
777
+ .rs-group-h:hover { color: var(--u-fg-0); background: var(--u-bg-2); }
778
+ .rs-group-h:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
779
+ .rs-group-h .rs-group-name {
780
+ overflow: hidden;
781
+ text-overflow: ellipsis;
782
+ white-space: nowrap;
783
+ flex: 1;
784
+ min-width: 0;
785
+ }
786
+ .rs-group-h .rs-group-count {
787
+ font-family: var(--u-font-mono);
788
+ font-size: 10px;
789
+ color: var(--u-fg-3);
790
+ font-weight: 500;
791
+ }
792
+
793
+ .rs-comment {
794
+ background: var(--u-bg-0);
795
+ border: 0;
796
+ border-bottom: 1px solid var(--u-border-subtle);
797
+ border-left: 2px solid transparent;
798
+ border-radius: 0;
799
+ padding: var(--u-s-2) var(--u-s-3);
800
+ margin: 0;
801
+ cursor: pointer;
802
+ transition: background var(--dur-flip) var(--ease-out),
803
+ border-color var(--dur-flip) var(--ease-out);
804
+ display: flex;
805
+ flex-direction: column;
806
+ gap: var(--u-s-1);
807
+ }
808
+ .rs-comment:hover {
809
+ background: var(--u-bg-1);
810
+ }
811
+ .rs-comment:focus-within {
812
+ outline: none;
813
+ }
814
+ .rs-comment.active-pin {
815
+ background: var(--u-accent-bg);
816
+ border-left-color: var(--u-accent);
817
+ padding-left: calc(var(--u-s-3) - 2px);
818
+ }
819
+ .rs-comment.resolved {
820
+ opacity: 1;
821
+ color: var(--u-fg-2);
822
+ }
823
+ .rs-comment-head {
824
+ display: flex;
825
+ align-items: center;
826
+ gap: var(--u-s-2);
827
+ }
828
+ .rs-num {
829
+ font-family: var(--u-font-mono);
830
+ font-size: 10px;
831
+ background: var(--u-accent);
832
+ color: var(--u-accent-fg);
833
+ border-radius: var(--u-r-sm);
834
+ padding: 1px 6px;
835
+ font-weight: 700;
836
+ flex: none;
837
+ letter-spacing: var(--tracking-sku);
838
+ }
839
+ .rs-comment.resolved .rs-num {
840
+ background: var(--u-status-success);
841
+ color: var(--u-bg-0);
842
+ }
843
+ .rs-time {
844
+ font-family: var(--u-font-mono);
845
+ font-size: 10px;
846
+ color: var(--u-fg-3);
847
+ margin-left: auto;
848
+ flex: none;
849
+ }
850
+ .rs-comment-text {
851
+ font-size: 12px;
852
+ color: var(--u-fg-0);
853
+ line-height: 1.45;
854
+ display: -webkit-box;
855
+ -webkit-line-clamp: 3;
856
+ -webkit-box-orient: vertical;
857
+ overflow: hidden;
858
+ word-break: break-word;
859
+ }
860
+ .rs-comment.resolved .rs-comment-text {
861
+ color: var(--u-fg-2);
862
+ text-decoration: line-through;
863
+ text-decoration-color: var(--u-fg-3);
864
+ }
865
+ .rs-comment-foot {
866
+ display: flex;
867
+ align-items: center;
868
+ gap: var(--u-s-1);
869
+ font-size: 10px;
870
+ }
871
+ .rs-comment-foot code {
872
+ font-family: var(--u-font-mono);
873
+ font-size: 10px;
874
+ background: var(--u-bg-3);
875
+ color: var(--u-fg-2);
876
+ padding: 1px 5px;
877
+ border-radius: var(--u-r-xs);
878
+ overflow: hidden;
879
+ text-overflow: ellipsis;
880
+ white-space: nowrap;
881
+ flex: 1;
882
+ min-width: 0;
883
+ }
884
+ .rs-comment-actions {
885
+ display: flex;
886
+ gap: 4px;
887
+ flex: none;
888
+ }
889
+ .rs-act {
890
+ background: transparent;
891
+ border: 1px solid var(--u-border);
892
+ color: var(--u-fg-2);
893
+ border-radius: var(--u-r-xs);
894
+ padding: 1px 6px;
895
+ font-family: var(--u-font-mono);
896
+ font-size: 10px;
897
+ cursor: pointer;
898
+ line-height: 1.4;
899
+ }
900
+ .rs-act:hover {
901
+ background: var(--u-bg-3);
902
+ color: var(--u-fg-0);
903
+ }
904
+ .rs-act.danger:hover {
905
+ background: var(--u-status-error);
906
+ color: var(--u-accent-fg);
907
+ border-color: var(--u-status-error);
908
+ }
909
+
910
+ /* Header — comments toggle button */
911
+ .actions .rs-toggle {
912
+ position: relative;
913
+ }
914
+ .actions .rs-toggle.active {
915
+ background: var(--u-accent-bg);
916
+ color: var(--u-accent);
917
+ border-color: var(--u-accent-line);
918
+ }
919
+ .actions .rs-toggle .rs-badge {
920
+ position: absolute;
921
+ top: -4px;
922
+ right: -4px;
923
+ background: var(--u-accent);
924
+ color: var(--u-accent-fg);
925
+ border-radius: var(--u-r-sm);
926
+ padding: 0 5px;
927
+ font-family: var(--u-font-mono);
928
+ font-size: 9px;
929
+ font-weight: 700;
930
+ line-height: 1.4;
931
+ letter-spacing: var(--tracking-sku);
932
+ }
933
+
934
+ /* Status bar — add comment button */
935
+ .add-comment {
936
+ background: transparent;
937
+ color: var(--u-accent);
938
+ border: 1px solid var(--u-accent-line);
939
+ border-radius: var(--u-r-xs);
940
+ padding: 1px 8px;
941
+ font-family: var(--u-font-mono);
942
+ font-size: 10px;
943
+ line-height: 1.4;
944
+ cursor: pointer;
945
+ }
946
+ .add-comment:hover {
947
+ background: var(--u-accent-bg);
948
+ color: var(--u-accent);
949
+ }
950
+
951
+ /* ----- Help modal -----
952
+ Hosts the cheatsheet that used to live in the left sidebar. Hard-edge card
953
+ + offset shadow per project DS — no blur, no scrim alpha higher than the
954
+ page bg already provides. */
955
+ .help-modal-backdrop {
956
+ position: fixed;
957
+ inset: 0;
958
+ background: color-mix(in oklch, var(--u-bg-0) 70%, transparent);
959
+ z-index: 200;
960
+ display: grid;
961
+ place-items: center;
962
+ padding: var(--u-s-4);
963
+ }
964
+ .help-modal {
965
+ background: var(--u-bg-1);
966
+ border: 1px solid var(--u-fg-0);
967
+ box-shadow: 8px 8px 0 var(--u-fg-0);
968
+ width: min(720px, 100%);
969
+ max-height: 80vh;
970
+ display: flex;
971
+ flex-direction: column;
972
+ font-family: var(--u-font-mono);
973
+ }
974
+ .help-modal-hd {
975
+ padding: var(--u-s-3) var(--u-s-4);
976
+ border-bottom: 1px solid var(--u-fg-0);
977
+ display: flex;
978
+ align-items: center;
979
+ justify-content: space-between;
980
+ background: var(--u-bg-2);
981
+ }
982
+ .help-modal-hd .title {
983
+ font-weight: 700;
984
+ letter-spacing: var(--tracking-sku);
985
+ text-transform: uppercase;
986
+ font-size: var(--type-xs);
987
+ color: var(--u-fg-0);
988
+ }
989
+ .help-modal-hd .sku {
990
+ font-size: 10px;
991
+ letter-spacing: var(--tracking-sku);
992
+ color: var(--u-fg-2);
993
+ text-transform: uppercase;
994
+ }
995
+ .help-modal-close {
996
+ background: transparent;
997
+ border: 1px solid var(--u-border);
998
+ color: var(--u-fg-1);
999
+ cursor: pointer;
1000
+ width: 22px;
1001
+ height: 22px;
1002
+ display: grid;
1003
+ place-items: center;
1004
+ font-size: 14px;
1005
+ line-height: 1;
1006
+ font-family: var(--u-font-mono);
1007
+ }
1008
+ .help-modal-close:hover { background: var(--u-bg-3); color: var(--u-fg-0); border-color: var(--u-border-strong); }
1009
+ .help-modal-close:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
1010
+ .help-modal-body {
1011
+ padding: var(--u-s-3) var(--u-s-4);
1012
+ overflow-y: auto;
1013
+ font-size: var(--type-xs);
1014
+ color: var(--u-fg-1);
1015
+ }
1016
+ .help-modal-body::-webkit-scrollbar { width: 6px; }
1017
+ .help-modal-body::-webkit-scrollbar-thumb { background: var(--u-border); }
1018
+ .help-modal-body details {
1019
+ margin: 0 0 var(--u-s-2);
1020
+ border-bottom: 1px solid var(--u-border-subtle);
1021
+ padding-bottom: var(--u-s-2);
1022
+ }
1023
+ .help-modal-body details:last-child { border-bottom: 0; }
1024
+ .help-modal-body details > summary {
1025
+ cursor: pointer;
1026
+ padding: var(--u-s-2) 0;
1027
+ font-weight: 700;
1028
+ letter-spacing: var(--tracking-sku);
1029
+ text-transform: uppercase;
1030
+ font-size: 11px;
1031
+ color: var(--u-fg-0);
1032
+ list-style: none;
1033
+ display: flex;
1034
+ align-items: center;
1035
+ gap: var(--u-s-2);
1036
+ }
1037
+ .help-modal-body details > summary::-webkit-details-marker { display: none; }
1038
+ .help-modal-body details > summary::before {
1039
+ content: "▸";
1040
+ color: var(--u-fg-2);
1041
+ font-size: 10px;
1042
+ width: 12px;
1043
+ }
1044
+ .help-modal-body details[open] > summary::before { content: "▾"; }
1045
+ .help-modal-body ul,
1046
+ .help-modal-body ol {
1047
+ margin: 0;
1048
+ padding: 0 0 var(--u-s-2) var(--u-s-4);
1049
+ list-style: none;
1050
+ font-size: 11px;
1051
+ line-height: 1.7;
1052
+ }
1053
+ .help-modal-body li {
1054
+ display: flex;
1055
+ align-items: baseline;
1056
+ gap: var(--u-s-2);
1057
+ padding: 2px 0;
1058
+ }
1059
+ .help-modal-body li > span {
1060
+ color: var(--u-fg-3);
1061
+ font-size: 10px;
1062
+ margin-left: auto;
1063
+ text-align: right;
1064
+ }
1065
+ .help-modal-body kbd {
1066
+ font-family: var(--u-font-mono);
1067
+ font-size: 10px;
1068
+ background: var(--u-bg-2);
1069
+ border: 1px solid var(--u-border);
1070
+ padding: 1px 5px;
1071
+ color: var(--u-fg-0);
1072
+ }
1073
+ .help-modal-body code {
1074
+ font-family: var(--u-font-mono);
1075
+ font-size: 10px;
1076
+ color: var(--u-accent);
1077
+ background: var(--u-accent-bg);
1078
+ padding: 1px 4px;
1079
+ }
1080
+ .help-modal-body code i { font-style: normal; color: var(--u-fg-2); }
1081
+ .help-modal-body ul.cmds li,
1082
+ .help-modal-body ul.files li {
1083
+ flex-direction: column;
1084
+ align-items: flex-start;
1085
+ gap: 2px;
1086
+ }
1087
+ .help-modal-body ul.cmds li > span,
1088
+ .help-modal-body ul.files li > span {
1089
+ margin-left: 0;
1090
+ text-align: left;
1091
+ }
1092
+
1093
+ /* ----- Tree section header (clickable variant for DS row) ----- */
1094
+ .tp-section-hd.clickable {
1095
+ cursor: pointer;
1096
+ user-select: none;
1097
+ background: transparent;
1098
+ border: 0;
1099
+ width: 100%;
1100
+ text-align: left;
1101
+ font-family: var(--u-font-mono);
1102
+ transition: background var(--dur-flip) var(--ease-out);
1103
+ }
1104
+ .tp-section-hd.clickable:hover { background: var(--u-bg-2); }
1105
+ .tp-section-hd.clickable:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
1106
+ .tp-section-hd.clickable.active {
1107
+ background: var(--u-accent-bg);
1108
+ color: var(--u-fg-0);
1109
+ }
1110
+ .tp-section-hd.clickable.active .pill {
1111
+ border-color: var(--u-accent);
1112
+ color: var(--u-accent);
1113
+ }
1114
+
1115
+ /* DS section: split header — title button (opens system view) + chevron
1116
+ button (expands body). Two child buttons share the row, each a focusable
1117
+ target with a distinct aria-label. */
1118
+ .tp-section-hd.ds-split {
1119
+ padding: 0;
1120
+ cursor: default;
1121
+ }
1122
+ .tp-section-hd.ds-split > button {
1123
+ background: transparent;
1124
+ border: 0;
1125
+ padding: 6px var(--u-s-3) 2px;
1126
+ color: inherit;
1127
+ font: inherit;
1128
+ letter-spacing: inherit;
1129
+ text-transform: inherit;
1130
+ cursor: pointer;
1131
+ display: inline-flex;
1132
+ align-items: baseline;
1133
+ gap: 8px;
1134
+ }
1135
+ .tp-section-hd.ds-split > button:focus-visible {
1136
+ outline: none;
1137
+ box-shadow: var(--shadow-focus);
1138
+ position: relative;
1139
+ z-index: 1;
1140
+ }
1141
+ .tp-section-hd.ds-split .ds-open {
1142
+ flex: 1;
1143
+ min-width: 0;
1144
+ justify-content: flex-start;
1145
+ }
1146
+ .tp-section-hd.ds-split .ds-open:hover { background: var(--u-bg-2); }
1147
+ .tp-section-hd.ds-split .chev {
1148
+ padding: 6px 10px 2px;
1149
+ color: var(--u-fg-2);
1150
+ opacity: 0.75;
1151
+ flex: none;
1152
+ }
1153
+ .tp-section-hd.ds-split .chev:hover { opacity: 1; background: var(--u-bg-2); }
1154
+ .tp-section-hd.ds-split.active .ds-open {
1155
+ background: var(--u-accent-bg);
1156
+ color: var(--u-fg-0);
1157
+ }
1158
+ .tp-section-hd.ds-split.active .pill {
1159
+ border-color: var(--u-accent);
1160
+ color: var(--u-accent);
1161
+ }
1162
+
1163
+ /* Sidecar rows nested under a canvas — muted, no leading glyph (chevron
1164
+ already lives on the parent canvas row). */
1165
+ .tp-row.sidecar {
1166
+ opacity: 0.55;
1167
+ }
1168
+ .tp-row.sidecar .glyph { visibility: hidden; }
1169
+ .tp-row.sidecar:hover { opacity: 0.85; }
1170
+
1171
+ /* Canvas-row disclosure chevron — sits in the glyph slot, hover affordance. */
1172
+ .tp-row.canvas-row .canvas-chev { cursor: pointer; }
1173
+ .tp-row.canvas-row .canvas-chev:hover { color: var(--u-fg-0); }
1174
+
1175
+ /* Per-DS folder row inside the DESIGN SYSTEM section. Two child buttons —
1176
+ chevron toggles disclosure, name opens SystemView for that DS. */
1177
+ .tp-row.ds-folder {
1178
+ display: flex;
1179
+ align-items: center;
1180
+ gap: 0;
1181
+ padding: 2px 0;
1182
+ cursor: default;
1183
+ font-weight: 600;
1184
+ color: var(--u-fg-0);
1185
+ }
1186
+ .tp-row.ds-folder > button {
1187
+ background: transparent;
1188
+ border: 0;
1189
+ padding: 0;
1190
+ color: inherit;
1191
+ font: inherit;
1192
+ cursor: pointer;
1193
+ display: inline-flex;
1194
+ align-items: center;
1195
+ }
1196
+ .tp-row.ds-folder > button:focus-visible {
1197
+ outline: none;
1198
+ box-shadow: var(--shadow-focus);
1199
+ position: relative;
1200
+ z-index: 1;
1201
+ }
1202
+ .tp-row.ds-folder .ds-folder-chev {
1203
+ padding: 0 4px;
1204
+ flex: none;
1205
+ }
1206
+ .tp-row.ds-folder .ds-folder-chev .glyph {
1207
+ width: 12px;
1208
+ display: inline-block;
1209
+ text-align: center;
1210
+ color: var(--u-fg-1);
1211
+ font-size: 10px;
1212
+ }
1213
+ .tp-row.ds-folder .ds-folder-chev:hover .glyph { color: var(--u-fg-0); }
1214
+ .tp-row.ds-folder .ds-folder-open {
1215
+ flex: 1;
1216
+ min-width: 0;
1217
+ padding: 0 var(--u-s-3) 0 0;
1218
+ text-align: left;
1219
+ }
1220
+ .tp-row.ds-folder .ds-folder-open .name {
1221
+ overflow: hidden;
1222
+ text-overflow: ellipsis;
1223
+ white-space: nowrap;
1224
+ }
1225
+ .tp-row.ds-folder .ds-folder-open:hover { color: var(--u-accent); }
1226
+ .tp-row.ds-folder.sel { background: var(--u-accent-bg); }
1227
+ .tp-row.ds-folder.sel .ds-folder-open .name { color: var(--u-fg-0); }
1228
+
1229
+ /* Generic section toggle (every non-DS section: PROJECT, UI canvases, RUNTIME).
1230
+ Header is a single button with a leading chevron, the section title, and
1231
+ the optional count pill. Mirrors `.tp-section-hd` typography but adds the
1232
+ button-reset so the whole row is one click target. */
1233
+ .tp-section-hd.section-toggle {
1234
+ background: transparent;
1235
+ border: 0;
1236
+ width: 100%;
1237
+ cursor: pointer;
1238
+ text-align: left;
1239
+ align-items: center;
1240
+ font: inherit;
1241
+ letter-spacing: var(--tracking-sku);
1242
+ text-transform: uppercase;
1243
+ font-family: var(--u-font-mono);
1244
+ color: var(--u-fg-1);
1245
+ font-size: 9px;
1246
+ font-weight: 700;
1247
+ transition: background var(--dur-flip) var(--ease-out);
1248
+ }
1249
+ .tp-section-hd.section-toggle:hover { background: var(--u-bg-2); color: var(--u-fg-0); }
1250
+ .tp-section-hd.section-toggle:focus-visible {
1251
+ outline: none;
1252
+ box-shadow: var(--shadow-focus);
1253
+ }
1254
+ .tp-section-hd.section-toggle .chev {
1255
+ display: inline-block;
1256
+ width: 12px;
1257
+ text-align: center;
1258
+ color: var(--u-fg-2);
1259
+ font-size: 10px;
1260
+ flex: none;
1261
+ }
1262
+ .tp-section-hd.section-toggle .section-label {
1263
+ flex: 1;
1264
+ min-width: 0;
1265
+ overflow: hidden;
1266
+ text-overflow: ellipsis;
1267
+ white-space: nowrap;
1268
+ }