proto-plugin 0.1.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 (209) hide show
  1. package/AGENTS.md +350 -0
  2. package/README.md +279 -0
  3. package/components.json +18 -0
  4. package/package.json +73 -0
  5. package/scripts/download-mobbin-reference-images.mjs +112 -0
  6. package/scripts/lib/host-config.example.sh +48 -0
  7. package/scripts/lib/host-config.sh +25 -0
  8. package/scripts/lib/resolve-host-root.mjs +18 -0
  9. package/scripts/lib/source-path.sh +49 -0
  10. package/scripts/link-source-db.sh +128 -0
  11. package/scripts/link-source.sh +40 -0
  12. package/scripts/publish-package.sh +147 -0
  13. package/scripts/share-prototype.sh +279 -0
  14. package/scripts/sync-from-source.sh +74 -0
  15. package/scripts/verify-prototype-component-ids.mjs +151 -0
  16. package/scripts/verify-prototype-preview-states.mjs +135 -0
  17. package/src/app.ts +4 -0
  18. package/src/components/platform-ui/code-block.tsx +21 -0
  19. package/src/components/platform-ui/controls-panel-options.tsx +71 -0
  20. package/src/components/platform-ui/controls-panel-select.tsx +438 -0
  21. package/src/components/platform-ui/empty-state.tsx +15 -0
  22. package/src/components/platform-ui/icon-button.tsx +18 -0
  23. package/src/components/platform-ui/panel-select.tsx +123 -0
  24. package/src/components/platform-ui/panel.tsx +97 -0
  25. package/src/components/platform-ui/review-dropdown-menu.tsx +35 -0
  26. package/src/components/platform-ui/sidebar.tsx +293 -0
  27. package/src/components/platform-ui/toolbar-icon-button.tsx +34 -0
  28. package/src/components/platform-ui/toolbar.tsx +37 -0
  29. package/src/components/prototype-gallery-client.tsx +57 -0
  30. package/src/components/prototype-provider.tsx +20 -0
  31. package/src/components/prototypes/mini-pill-label.tsx +37 -0
  32. package/src/components/prototypes/prototype-change-log-panel.tsx +207 -0
  33. package/src/components/prototypes/prototype-comment-provider.tsx +61 -0
  34. package/src/components/prototypes/prototype-comment-toolbar.tsx +65 -0
  35. package/src/components/prototypes/prototype-control.tsx +31 -0
  36. package/src/components/prototypes/prototype-controls.tsx +553 -0
  37. package/src/components/prototypes/prototype-create-exploration-modal.tsx +117 -0
  38. package/src/components/prototypes/prototype-create-state-modal.tsx +117 -0
  39. package/src/components/prototypes/prototype-default-state-map-page.tsx +66 -0
  40. package/src/components/prototypes/prototype-design-brief-modal.tsx +128 -0
  41. package/src/components/prototypes/prototype-design-brief-panel.tsx +525 -0
  42. package/src/components/prototypes/prototype-design-context-panel.tsx +65 -0
  43. package/src/components/prototypes/prototype-floating-pill.module.scss +1341 -0
  44. package/src/components/prototypes/prototype-mobbin-gallery.tsx +330 -0
  45. package/src/components/prototypes/prototype-reference-docs.tsx +222 -0
  46. package/src/components/prototypes/prototype-review-chrome.module.scss +630 -0
  47. package/src/components/prototypes/prototype-review-chrome.tsx +1241 -0
  48. package/src/components/prototypes/prototype-review-dropdown-menu-item.tsx +1 -0
  49. package/src/components/prototypes/prototype-review-dropdown-menu-separator.tsx +1 -0
  50. package/src/components/prototypes/prototype-review-panel-menu-item.tsx +1 -0
  51. package/src/components/prototypes/prototype-review-panel-menu-separator.tsx +1 -0
  52. package/src/components/prototypes/prototype-review-panel-select.tsx +4 -0
  53. package/src/components/prototypes/prototype-review-sidebar.tsx +167 -0
  54. package/src/components/prototypes/prototype-share-link-restore.tsx +75 -0
  55. package/src/components/prototypes/prototype-share-mode.tsx +206 -0
  56. package/src/components/prototypes/prototype-spec-panel-content.tsx +538 -0
  57. package/src/components/prototypes/prototype-state-canvas-overlay.module.scss +336 -0
  58. package/src/components/prototypes/prototype-state-canvas-overlay.tsx +1023 -0
  59. package/src/components/prototypes/prototype-state-canvas.tsx +38 -0
  60. package/src/components/prototypes/prototype-state-screenshot-preview.tsx +47 -0
  61. package/src/components/prototypes/prototype-target.tsx +120 -0
  62. package/src/components/prototypes/prototype-tweak-highlight.tsx +132 -0
  63. package/src/components/prototypes/prototype-tweaks.tsx +48 -0
  64. package/src/components/prototypes/prototype-variant-explorer.tsx +347 -0
  65. package/src/components/prototypes/prototype-variant-rationale-panel.tsx +49 -0
  66. package/src/components/prototypes/prototype-variant-tabs.tsx +207 -0
  67. package/src/components/prototypes/prototype-vercel-preview-modal.tsx +120 -0
  68. package/src/components/prototypes/state-map-annotation-tooltip.module.scss +89 -0
  69. package/src/components/prototypes/state-map-annotation-tooltip.tsx +137 -0
  70. package/src/components/prototypes/state-map-wireframe-highlight.module.scss +25 -0
  71. package/src/components/prototypes/state-map-wireframe-highlight.tsx +82 -0
  72. package/src/components/shell/prototype-gallery-shell.tsx +79 -0
  73. package/src/components/shell/prototype-screenshot-capture.tsx +45 -0
  74. package/src/components/shell/prototype-shell.module.scss +194 -0
  75. package/src/components/shell/prototype-shell.tsx +160 -0
  76. package/src/components/shell/prototype-state-screenshot-capture.tsx +68 -0
  77. package/src/components/ui/button.tsx +58 -0
  78. package/src/components/ui/dialog.module.scss +81 -0
  79. package/src/components/ui/dialog.tsx +127 -0
  80. package/src/components/ui/dropdown-menu.tsx +200 -0
  81. package/src/components/ui/input.tsx +22 -0
  82. package/src/components/ui/label.tsx +26 -0
  83. package/src/components/ui/option-select.tsx +81 -0
  84. package/src/components/ui/scroll-area.tsx +48 -0
  85. package/src/components/ui/separator.tsx +31 -0
  86. package/src/components/ui/slider.tsx +28 -0
  87. package/src/components/ui/switch.tsx +29 -0
  88. package/src/components/ui/tabs.tsx +55 -0
  89. package/src/components/ui/toggle-group.tsx +80 -0
  90. package/src/components/ui/tooltip.tsx +32 -0
  91. package/src/config/create-prototype-gallery-page.tsx +65 -0
  92. package/src/config/create-prototype-host-app.tsx +121 -0
  93. package/src/config/create-prototype-page.tsx +41 -0
  94. package/src/config/create-prototype-site-layout.tsx +28 -0
  95. package/src/config/define-prototype-config.ts +7 -0
  96. package/src/config/prototype-icon.tsx +25 -0
  97. package/src/config/prototype-site-layout-client.tsx +35 -0
  98. package/src/config/with-prototype.ts +20 -0
  99. package/src/index.ts +303 -0
  100. package/src/lib/pr-split/build-pr-agent-prompt.ts +68 -0
  101. package/src/lib/pr-split/build-pr-split-prototype-url.ts +12 -0
  102. package/src/lib/pr-split/pr-split-highlight.ts +6 -0
  103. package/src/lib/pr-split/pr-split-types.ts +58 -0
  104. package/src/lib/pr-split/resolve-source-preview-url.ts +45 -0
  105. package/src/lib/pr-split/use-pr-vercel-previews.ts +69 -0
  106. package/src/lib/prototype-comments/core/annotation-channel.ts +41 -0
  107. package/src/lib/prototype-comments/core/annotation-status.ts +60 -0
  108. package/src/lib/prototype-comments/core/annotation-target.ts +567 -0
  109. package/src/lib/prototype-comments/core/capture-theme.ts +41 -0
  110. package/src/lib/prototype-comments/core/capture.ts +11 -0
  111. package/src/lib/prototype-comments/core/comment-capture-blocked.ts +47 -0
  112. package/src/lib/prototype-comments/core/comment-threads.ts +52 -0
  113. package/src/lib/prototype-comments/core/element-identification.ts +615 -0
  114. package/src/lib/prototype-comments/core/export.ts +35 -0
  115. package/src/lib/prototype-comments/core/freeze-animations.ts +266 -0
  116. package/src/lib/prototype-comments/core/identify-element.ts +76 -0
  117. package/src/lib/prototype-comments/core/normalize-viewport.ts +35 -0
  118. package/src/lib/prototype-comments/core/react-detection.ts +704 -0
  119. package/src/lib/prototype-comments/core/restore.ts +7 -0
  120. package/src/lib/prototype-comments/core/screenshot.ts +428 -0
  121. package/src/lib/prototype-comments/core/source-location.ts +906 -0
  122. package/src/lib/prototype-comments/core/storage.ts +80 -0
  123. package/src/lib/prototype-comments/core/types.ts +79 -0
  124. package/src/lib/prototype-comments/core/validation.ts +17 -0
  125. package/src/lib/prototype-comments/hooks/useLayoutShift.ts +61 -0
  126. package/src/lib/prototype-comments/index.ts +58 -0
  127. package/src/lib/prototype-comments/react/CommentCaptureToolbar.tsx +1398 -0
  128. package/src/lib/prototype-comments/react/CommentProvider.tsx +298 -0
  129. package/src/lib/prototype-comments/scss.d.ts +10 -0
  130. package/src/lib/prototype-comments/ui/CommentAnnotationOverlay.tsx +253 -0
  131. package/src/lib/prototype-comments/ui/CommentDetailPage.tsx +56 -0
  132. package/src/lib/prototype-comments/ui/CommentHeaderCount.tsx +28 -0
  133. package/src/lib/prototype-comments/ui/CommentThread.tsx +331 -0
  134. package/src/lib/prototype-comments/ui/CommentsGrid.tsx +780 -0
  135. package/src/lib/prototype-comments/ui/CommentsListPage.tsx +25 -0
  136. package/src/lib/prototype-comments/ui/CommentsSidebar.tsx +77 -0
  137. package/src/lib/prototype-comments/ui/annotation-marker/index.tsx +200 -0
  138. package/src/lib/prototype-comments/ui/annotation-marker/styles.module.scss +194 -0
  139. package/src/lib/prototype-comments/ui/annotation-popup/index.tsx +335 -0
  140. package/src/lib/prototype-comments/ui/annotation-popup/styles.module.scss +469 -0
  141. package/src/lib/prototype-comments/ui/capture-styles.module.scss +2225 -0
  142. package/src/lib/prototype-comments/ui/comment-highlight.ts +48 -0
  143. package/src/lib/prototype-comments/ui/comment-thread.module.scss +203 -0
  144. package/src/lib/prototype-comments/ui/comments-grid-card.module.scss +253 -0
  145. package/src/lib/prototype-comments/ui/comments-sidebar.module.scss +123 -0
  146. package/src/lib/prototype-comments/ui/icon-transitions.module.scss +51 -0
  147. package/src/lib/prototype-comments/ui/icons.tsx +1086 -0
  148. package/src/lib/prototype-comments/ui/is-comment-detail-path.ts +7 -0
  149. package/src/lib/prototypes/capture-prototype-viewport.ts +32 -0
  150. package/src/lib/prototypes/changelog-meta-context.tsx +162 -0
  151. package/src/lib/prototypes/changelog-meta-storage.ts +62 -0
  152. package/src/lib/prototypes/changelog-meta.ts +95 -0
  153. package/src/lib/prototypes/create-prototype-registry.ts +74 -0
  154. package/src/lib/prototypes/create-state-screenshot-thumbnail.ts +46 -0
  155. package/src/lib/prototypes/design-exploration-default-storage.ts +68 -0
  156. package/src/lib/prototypes/design-exploration-default.ts +51 -0
  157. package/src/lib/prototypes/design-exploration-types.ts +203 -0
  158. package/src/lib/prototypes/prototype-comment-registry.tsx +145 -0
  159. package/src/lib/prototypes/prototype-comment-review-bridge.tsx +40 -0
  160. package/src/lib/prototypes/prototype-comment-review-state.ts +57 -0
  161. package/src/lib/prototypes/prototype-component-registry.ts +40 -0
  162. package/src/lib/prototypes/prototype-config-types.ts +34 -0
  163. package/src/lib/prototypes/prototype-preview-state-registry.ts +443 -0
  164. package/src/lib/prototypes/prototype-preview-state-types.ts +89 -0
  165. package/src/lib/prototypes/prototype-review-context.tsx +905 -0
  166. package/src/lib/prototypes/prototype-review-url.ts +134 -0
  167. package/src/lib/prototypes/prototype-share-link.ts +175 -0
  168. package/src/lib/prototypes/prototype-state-canvas-constants.ts +118 -0
  169. package/src/lib/prototypes/prototype-state-canvas-types.ts +159 -0
  170. package/src/lib/prototypes/prototype-state-screenshot.ts +39 -0
  171. package/src/lib/prototypes/prototype-tweak-registry.ts +96 -0
  172. package/src/lib/prototypes/prototype-tweak-types.ts +31 -0
  173. package/src/lib/prototypes/reference-docs.ts +137 -0
  174. package/src/lib/prototypes/screenshot-manifest.ts +33 -0
  175. package/src/lib/prototypes/screenshot-src.ts +7 -0
  176. package/src/lib/prototypes/share-command.ts +8 -0
  177. package/src/lib/prototypes/state-map-annotation.ts +70 -0
  178. package/src/lib/prototypes/use-design-exploration-default.ts +114 -0
  179. package/src/lib/prototypes/use-persisted-local-state.ts +140 -0
  180. package/src/lib/prototypes/use-prototype-comments.ts +63 -0
  181. package/src/lib/prototypes/use-prototype-mobile-viewport-frame.ts +46 -0
  182. package/src/lib/prototypes/use-prototype-state-screenshot-src.ts +71 -0
  183. package/src/lib/prototypes/use-prototype-tool-theme.tsx +115 -0
  184. package/src/lib/prototypes/use-prototype-viewport-frame.ts +34 -0
  185. package/src/lib/prototypes/use-register-prototype-reference-docs.ts +16 -0
  186. package/src/lib/prototypes/use-snap-corner-position.ts +417 -0
  187. package/src/lib/prototypes/use-toolbar-hover-panel.ts +98 -0
  188. package/src/lib/prototypes/variant-set-lucide-icon.tsx +55 -0
  189. package/src/lib/tool-portal.ts +33 -0
  190. package/src/lib/use-copy-to-clipboard.ts +81 -0
  191. package/src/lib/utils.ts +6 -0
  192. package/src/lib/vercel-preview/parse-vercel-github-comment.ts +81 -0
  193. package/src/server/create-host-api-route.ts +100 -0
  194. package/src/server/create-prototype-api-routes.ts +428 -0
  195. package/src/server/gallery/create-gallery-api.ts +56 -0
  196. package/src/server/gallery/folders-route.ts +156 -0
  197. package/src/server/gallery/gallery-env.ts +39 -0
  198. package/src/server/gallery/gallery-route.ts +150 -0
  199. package/src/server/gallery/gallery-types.ts +15 -0
  200. package/src/server/gallery/image-route.ts +59 -0
  201. package/src/server/gallery/item-route.ts +92 -0
  202. package/src/server/pr-vercel-preview-route.ts +162 -0
  203. package/src/server/redis/client.ts +55 -0
  204. package/src/server/redis/prototype-changelog-meta.ts +31 -0
  205. package/src/server/redis/prototype-comments.ts +92 -0
  206. package/src/server/redis/prototype-design-exploration-default.ts +32 -0
  207. package/src/server.ts +51 -0
  208. package/src/styles/globals.css +624 -0
  209. package/tsconfig.json +19 -0
@@ -0,0 +1,1341 @@
1
+ // Keep in sync with prototype-review-chrome.module.scss.
2
+ $morph-ease: cubic-bezier(0.215, 0.61, 0.355, 1);
3
+ $morph-duration: 0.25s;
4
+ $enter-ease: cubic-bezier(0.215, 0.61, 0.355, 1);
5
+ $enter-duration: 150ms;
6
+
7
+ // Half-height pills (22px) — sit to the left of the 44px review toolbar.
8
+ .miniPill {
9
+ box-sizing: border-box;
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ flex-shrink: 0;
14
+ height: 22px;
15
+ max-width: 10rem;
16
+ padding: 0 0.625rem;
17
+ border: none;
18
+ border-radius: 9999px;
19
+ background: #1e1e1e;
20
+ color: #e0e0e0;
21
+ box-shadow:
22
+ 0 2px 8px rgba(0, 0, 0, 0.28),
23
+ 0 0 0 1px #333333;
24
+ font-family: inherit;
25
+ font-size: 0.6875rem;
26
+ font-weight: 500;
27
+ letter-spacing: -0.01em;
28
+ line-height: 1;
29
+ white-space: nowrap;
30
+ overflow: hidden;
31
+ text-overflow: ellipsis;
32
+ gap: 0.375rem;
33
+ cursor: pointer;
34
+ user-select: none;
35
+ -webkit-user-select: none;
36
+ -webkit-tap-highlight-color: transparent;
37
+ transition: background-color 0.2s ease;
38
+
39
+ @media (hover: hover) and (pointer: fine) {
40
+ &:hover {
41
+ background: #333333;
42
+ }
43
+ }
44
+
45
+ &:active {
46
+ background: #3a3a3a;
47
+ }
48
+
49
+ &:focus:not(:focus-visible) {
50
+ outline: none;
51
+ }
52
+
53
+ &:focus-visible {
54
+ outline: 2px solid rgba(255, 255, 255, 0.35);
55
+ outline-offset: 2px;
56
+ }
57
+ }
58
+
59
+ .miniPillActive {
60
+ background: #252525;
61
+ color: #fff;
62
+ }
63
+
64
+ .miniPillEmoji {
65
+ flex-shrink: 0;
66
+ line-height: 1;
67
+ }
68
+
69
+ .miniPillText {
70
+ min-width: 0;
71
+ overflow: hidden;
72
+ text-overflow: ellipsis;
73
+ }
74
+
75
+ .miniPillLabelGroup {
76
+ display: inline-flex;
77
+ min-width: 0;
78
+ align-items: center;
79
+ gap: 0.375rem;
80
+ overflow: hidden;
81
+ }
82
+
83
+ .miniPillSlot {
84
+ display: inline-flex;
85
+ flex-direction: row;
86
+ align-items: center;
87
+ flex: 0 0 auto;
88
+ width: auto;
89
+ max-width: none;
90
+ gap: 0.125rem;
91
+ user-select: none;
92
+ }
93
+
94
+ .miniPillTabsSlot {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ flex: 0 0 auto;
98
+ width: auto;
99
+ max-width: none;
100
+ gap: 0.125rem;
101
+
102
+ > * {
103
+ flex: 0 0 auto;
104
+ width: auto;
105
+ max-width: none;
106
+ }
107
+ }
108
+
109
+ // Inline variant tab controls — no outer chrome (sits beside the active pill label).
110
+ .miniPillTabsInline {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ flex: 0 0 auto;
114
+ width: max-content;
115
+ gap: 0.125rem;
116
+
117
+ .variantsTabsList {
118
+ height: 18px !important;
119
+ min-height: 18px !important;
120
+ padding: 1px !important;
121
+ gap: 1px !important;
122
+ border-radius: 9999px !important;
123
+
124
+ [role="tab"] {
125
+ height: 14px !important;
126
+ min-height: 14px !important;
127
+ max-height: 14px !important;
128
+ padding: 0 0.375rem !important;
129
+ font-size: 0.625rem !important;
130
+ }
131
+ }
132
+ }
133
+
134
+ // Compact variant tabs toolbar — half height of main review bar.
135
+ .variantsToolbarMini {
136
+ box-sizing: border-box;
137
+ display: inline-flex;
138
+ align-items: center;
139
+ flex: 0 0 auto;
140
+ width: max-content;
141
+ gap: 0.25rem;
142
+ height: 22px;
143
+ padding: 0.125rem 0.25rem;
144
+ border-radius: 9999px;
145
+ background: #1e1e1e;
146
+ box-shadow:
147
+ 0 2px 8px rgba(0, 0, 0, 0.28),
148
+ 0 0 0 1px #333333;
149
+
150
+ .variantsTabsList {
151
+ height: 18px !important;
152
+ min-height: 18px !important;
153
+ padding: 1px !important;
154
+ gap: 1px !important;
155
+ border-radius: 9999px !important;
156
+
157
+ [role="tab"] {
158
+ height: 14px !important;
159
+ min-height: 14px !important;
160
+ max-height: 14px !important;
161
+ padding: 0 0.375rem !important;
162
+ font-size: 0.625rem !important;
163
+ }
164
+ }
165
+ }
166
+
167
+ .variantsControlButtonMini {
168
+ display: inline-flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+ flex-shrink: 0;
172
+ width: 18px;
173
+ height: 18px;
174
+ border: none;
175
+ border-radius: 9999px;
176
+ background: rgba(255, 255, 255, 0.06);
177
+ color: rgba(255, 255, 255, 0.55);
178
+ cursor: pointer;
179
+ transition:
180
+ background-color 0.2s ease,
181
+ color 0.2s ease;
182
+
183
+ @media (hover: hover) and (pointer: fine) {
184
+ &:hover {
185
+ background: rgba(255, 255, 255, 0.12);
186
+ color: #e0e0e0;
187
+ }
188
+ }
189
+ }
190
+
191
+ .orbSlot {
192
+ display: flex;
193
+ align-items: center;
194
+ flex-shrink: 0;
195
+ user-select: none;
196
+ }
197
+
198
+ .orbSlotExpanded {
199
+ gap: 0.375rem;
200
+ }
201
+
202
+ .tabsPortal {
203
+ display: flex;
204
+ align-items: center;
205
+ flex-shrink: 0;
206
+ pointer-events: auto;
207
+ }
208
+
209
+ .inlinePicker {
210
+ display: flex;
211
+ align-items: center;
212
+ flex-shrink: 0;
213
+ pointer-events: auto;
214
+ transform-origin: left center;
215
+ animation: inlinePickerEnter $enter-duration $enter-ease forwards;
216
+
217
+ // Dark surface tokens for nested prototype controls.
218
+ --bg-main: #1e1e1e;
219
+ --bg-top: #1e1e1e;
220
+ --bg-subtle: #181818;
221
+ --bg-ground: #121212;
222
+ --bg-layered: #252525;
223
+ --text-primary: #e0e0e0;
224
+ --text-secondary: #888888;
225
+ --text-tertiary: #666666;
226
+ --border-solid: #333333;
227
+ --border-faint: #2a2a2a;
228
+ --border-medium: #404040;
229
+ }
230
+
231
+ // Matches review chrome orb + morph toolbar (44px total height).
232
+ .variantsToolbar {
233
+ box-sizing: border-box;
234
+ display: flex;
235
+ align-items: center;
236
+ gap: 0.375rem;
237
+ height: 44px;
238
+ padding: 0.375rem;
239
+ border-radius: 1.5rem;
240
+ background: #1e1e1e;
241
+ box-shadow:
242
+ 0 2px 8px rgba(0, 0, 0, 0.28),
243
+ 0 0 0 1px #333333;
244
+ }
245
+
246
+ .variantsControlButton {
247
+ display: inline-flex;
248
+ align-items: center;
249
+ justify-content: center;
250
+ flex-shrink: 0;
251
+ width: 34px;
252
+ height: 34px;
253
+ border: none;
254
+ border-radius: 0.5rem;
255
+ background: rgba(255, 255, 255, 0.06);
256
+ color: rgba(255, 255, 255, 0.55);
257
+ cursor: pointer;
258
+ transition:
259
+ background-color 0.2s ease,
260
+ color 0.2s ease;
261
+
262
+ @media (hover: hover) and (pointer: fine) {
263
+ &:hover {
264
+ background: rgba(255, 255, 255, 0.12);
265
+ color: #e0e0e0;
266
+ }
267
+ }
268
+ }
269
+
270
+ .variantsTabsList {
271
+ height: 34px !important;
272
+ min-height: 34px !important;
273
+ padding: 2px !important;
274
+ gap: 2px !important;
275
+ border-radius: 0.5rem !important;
276
+ background: rgba(255, 255, 255, 0.08) !important;
277
+ color: rgba(255, 255, 255, 0.55) !important;
278
+
279
+ > :first-child {
280
+ border-radius: 0.375rem !important;
281
+ background: rgba(255, 255, 255, 0.14) !important;
282
+ box-shadow: none !important;
283
+ }
284
+
285
+ [role="tab"] {
286
+ flex: 0 0 auto !important;
287
+ height: 26px !important;
288
+ min-height: 26px !important;
289
+ max-height: 26px !important;
290
+ padding: 0 0.5rem !important;
291
+ border: none !important;
292
+ border-radius: 0.375rem !important;
293
+ box-shadow: none !important;
294
+ font-size: 0.8125rem !important;
295
+ line-height: 1 !important;
296
+ }
297
+ }
298
+
299
+ .variantsDefaultTab {
300
+ background: #252525 !important;
301
+ color: rgba(255, 255, 255, 0.75) !important;
302
+ }
303
+
304
+ .variantsTab {
305
+ color: rgba(255, 255, 255, 0.55) !important;
306
+
307
+ @media (hover: hover) and (pointer: fine) {
308
+ &:hover:not([data-active]) {
309
+ background: rgba(255, 255, 255, 0.06) !important;
310
+ color: rgba(255, 255, 255, 0.75) !important;
311
+ }
312
+ }
313
+
314
+ &[data-active] {
315
+ color: rgba(255, 255, 255, 0.92) !important;
316
+ }
317
+ }
318
+
319
+ .rationalePopover {
320
+ position: absolute;
321
+ right: 0;
322
+ bottom: calc(100% + 0.5rem);
323
+ z-index: 2;
324
+ max-width: 24rem;
325
+ padding: 0.625rem 0.75rem;
326
+ border-radius: 0.75rem;
327
+ background: #242424;
328
+ color: rgba(255, 255, 255, 0.68);
329
+ text-align: left;
330
+ box-shadow:
331
+ 0 4px 20px rgba(0, 0, 0, 0.35),
332
+ 0 0 0 1px #333333;
333
+ }
334
+
335
+ .rationaleLabel {
336
+ color: #e0e0e0;
337
+ font-weight: 500;
338
+ }
339
+
340
+ @keyframes inlinePickerEnter {
341
+ from {
342
+ opacity: 0;
343
+ }
344
+
345
+ to {
346
+ opacity: 1;
347
+ }
348
+ }
349
+
350
+ .orb {
351
+ display: flex;
352
+ align-items: center;
353
+ flex-shrink: 0;
354
+ border-radius: 9999px;
355
+ background: #1e1e1e;
356
+ box-shadow:
357
+ 0 2px 8px rgba(0, 0, 0, 0.28),
358
+ 0 0 0 1px #333333;
359
+ user-select: none;
360
+ -webkit-user-select: none;
361
+ transition: background-color 0.2s ease;
362
+
363
+ @media (hover: hover) and (pointer: fine) {
364
+ &:hover {
365
+ background: #333333;
366
+ }
367
+ }
368
+
369
+ &:active {
370
+ background: #3a3a3a;
371
+ }
372
+ }
373
+
374
+ // Width morph — matches review chrome .morphToolbar (expand toward main bar).
375
+ .orbMorph {
376
+ box-sizing: border-box;
377
+ overflow: hidden;
378
+ height: 44px;
379
+ justify-content: flex-end;
380
+ transition:
381
+ max-width $morph-duration $morph-ease,
382
+ border-radius $morph-duration $morph-ease,
383
+ opacity $morph-duration $morph-ease,
384
+ background-color 150ms ease;
385
+
386
+ &.orbMorphCollapsed {
387
+ max-width: 0;
388
+ border-radius: 22px;
389
+ opacity: 0;
390
+ pointer-events: none;
391
+ }
392
+
393
+ &.orbMorphExpanded {
394
+ max-width: 20rem;
395
+ border-radius: 9999px;
396
+ opacity: 1;
397
+ }
398
+
399
+ .trigger {
400
+ flex-shrink: 0;
401
+ }
402
+ }
403
+
404
+ .orbPressed {
405
+ background: #252525;
406
+ }
407
+
408
+ .trigger {
409
+ display: inline-flex;
410
+ align-items: center;
411
+ justify-content: center;
412
+ height: 2.75rem;
413
+ padding: 0 1rem;
414
+ border: none;
415
+ border-radius: 9999px;
416
+ background: transparent;
417
+ color: #e0e0e0;
418
+ font-family: inherit;
419
+ font-size: 0.8125rem;
420
+ font-weight: 500;
421
+ letter-spacing: -0.01em;
422
+ white-space: nowrap;
423
+ cursor: pointer;
424
+ user-select: none;
425
+ -webkit-user-select: none;
426
+ -webkit-tap-highlight-color: transparent;
427
+ transition:
428
+ background-color 0.2s ease,
429
+ color 0.2s ease;
430
+
431
+ @media (hover: hover) and (pointer: fine) {
432
+ &:hover {
433
+ background: #252525;
434
+ }
435
+ }
436
+
437
+ &:active {
438
+ background: rgba(255, 255, 255, 0.16);
439
+ }
440
+
441
+ &::selection,
442
+ & *::selection {
443
+ background: transparent !important;
444
+ color: rgba(255, 255, 255, 0.92) !important;
445
+ }
446
+
447
+ &:focus:not(:focus-visible) {
448
+ outline: none;
449
+ }
450
+
451
+ &:focus-visible {
452
+ outline: 2px solid rgba(255, 255, 255, 0.35);
453
+ outline-offset: 2px;
454
+ }
455
+ }
456
+
457
+ .triggerLabel {
458
+ pointer-events: none;
459
+ user-select: none;
460
+ -webkit-user-select: none;
461
+ }
462
+
463
+ // Render label from aria-label so there is no selectable text node.
464
+ .triggerLabelText {
465
+ font-size: 0;
466
+ line-height: 0;
467
+
468
+ &::before {
469
+ content: attr(aria-label);
470
+ font-size: 0.8125rem;
471
+ font-weight: 500;
472
+ letter-spacing: -0.01em;
473
+ line-height: normal;
474
+ color: #e0e0e0;
475
+ }
476
+ }
477
+
478
+ .triggerWithIcon {
479
+ gap: 0.375rem;
480
+
481
+ .triggerIcon {
482
+ flex-shrink: 0;
483
+ opacity: 0.75;
484
+ }
485
+ }
486
+
487
+ .triggerIconOnly {
488
+ width: 2.75rem;
489
+ padding: 0;
490
+
491
+ .triggerIcon {
492
+ opacity: 0.92;
493
+ }
494
+ }
495
+
496
+ .dropdownContent {
497
+ min-width: 12rem;
498
+ padding: 8px;
499
+ border: none;
500
+ border-radius: 0.75rem;
501
+ background: #1e1e1e;
502
+ color: #e0e0e0;
503
+ user-select: none;
504
+ outline: none;
505
+ // Above comment target highlights (capture-styles targetHighlightLayer: 1040).
506
+ z-index: 1051;
507
+ box-shadow:
508
+ 0 4px 20px rgba(0, 0, 0, 0.24),
509
+ 0 0 0 1px #333333;
510
+
511
+ &:focus,
512
+ &:focus-visible {
513
+ outline: none;
514
+ }
515
+
516
+ // Portaled menu items inherit page tokens; scope dark values for hover/focus.
517
+ --bg-layered: #252525;
518
+ --text-primary: #e0e0e0;
519
+ --border-faint: #333333;
520
+ --tw-ring-shadow: 0 0 #0000;
521
+ --tw-ring-offset-shadow: 0 0 #0000;
522
+
523
+ // Attribute is on the same portaled node as .dropdownContent (not an ancestor).
524
+ &[data-prototype-comment-theme="light"] {
525
+ background: #fff;
526
+ color: rgba(0, 0, 0, 0.92);
527
+ box-shadow:
528
+ 0 4px 20px rgba(0, 0, 0, 0.1),
529
+ 0 8px 32px rgba(0, 0, 0, 0.06),
530
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
531
+
532
+ --bg-layered: rgba(0, 0, 0, 0.06);
533
+ --text-primary: rgba(0, 0, 0, 0.92);
534
+ --border-faint: rgba(0, 0, 0, 0.08);
535
+
536
+ .dropdownLabel,
537
+ .panelSelectSectionTitle {
538
+ color: rgba(0, 0, 0, 0.45);
539
+ }
540
+
541
+ .dropdownItem,
542
+ .panelActionItem {
543
+ color: rgba(0, 0, 0, 0.88);
544
+
545
+ &:focus,
546
+ &:focus-visible {
547
+ background: rgba(0, 0, 0, 0.06);
548
+ color: rgba(0, 0, 0, 0.92);
549
+ }
550
+
551
+ @media (hover: hover) and (pointer: fine) {
552
+ &:hover,
553
+ &:focus {
554
+ background: rgba(0, 0, 0, 0.06);
555
+ color: rgba(0, 0, 0, 0.92);
556
+ }
557
+ }
558
+
559
+ &[data-highlighted] {
560
+ background: rgba(0, 0, 0, 0.06) !important;
561
+ color: rgba(0, 0, 0, 0.92) !important;
562
+ }
563
+ }
564
+
565
+ .dropdownItemIcon,
566
+ .panelSelectChevron,
567
+ .panelSelectLabel {
568
+ color: rgba(0, 0, 0, 0.45);
569
+ }
570
+
571
+ .dropdownMenuItem {
572
+ color: rgba(0, 0, 0, 0.82);
573
+
574
+ @media (hover: hover) and (pointer: fine) {
575
+ &:hover {
576
+ background: rgba(0, 0, 0, 0.06);
577
+ color: rgba(0, 0, 0, 0.92);
578
+ }
579
+ }
580
+
581
+ &[data-highlighted] {
582
+ background: rgba(0, 0, 0, 0.06) !important;
583
+ color: rgba(0, 0, 0, 0.92) !important;
584
+ }
585
+ }
586
+
587
+ .dropdownMenuItemSelected,
588
+ .panelActionItemActive {
589
+ background: rgba(0, 0, 0, 0.08);
590
+ color: rgba(0, 0, 0, 0.92);
591
+
592
+ &[data-highlighted] {
593
+ background: rgba(0, 0, 0, 0.1) !important;
594
+ color: rgba(0, 0, 0, 0.92) !important;
595
+ }
596
+ }
597
+
598
+ .dropdownMenuItemCheck {
599
+ color: rgba(0, 0, 0, 0.55);
600
+ }
601
+
602
+ .toolbarIconPickerOption {
603
+ color: rgba(0, 0, 0, 0.55);
604
+
605
+ &:focus-visible {
606
+ background: rgba(0, 0, 0, 0.06);
607
+ color: rgba(0, 0, 0, 0.92);
608
+ }
609
+
610
+ @media (hover: hover) and (pointer: fine) {
611
+ &:hover {
612
+ background: rgba(0, 0, 0, 0.06);
613
+ color: rgba(0, 0, 0, 0.92);
614
+ }
615
+ }
616
+
617
+ &[data-selected="true"] {
618
+ background: rgba(0, 0, 0, 0.08);
619
+ color: rgba(0, 0, 0, 0.92);
620
+ }
621
+ }
622
+
623
+ .dropdownMenuSubTrigger svg:last-child {
624
+ color: rgba(0, 0, 0, 0.45);
625
+ }
626
+
627
+ .dropdownMenuSeparator {
628
+ background: rgba(0, 0, 0, 0.08);
629
+ }
630
+
631
+ .explorationBriefTrigger {
632
+ color: rgba(0, 0, 0, 0.55);
633
+
634
+ @media (hover: hover) and (pointer: fine) {
635
+ &:hover {
636
+ background: rgba(0, 0, 0, 0.06);
637
+ color: rgba(0, 0, 0, 0.92);
638
+ }
639
+ }
640
+
641
+ &:focus-visible {
642
+ outline-color: rgba(0, 0, 0, 0.25);
643
+ }
644
+
645
+ .dropdownItemIcon {
646
+ color: rgba(0, 0, 0, 0.45);
647
+ }
648
+ }
649
+
650
+ .explorationBriefSeparator {
651
+ background: rgba(0, 0, 0, 0.08);
652
+ }
653
+
654
+ .panelSelectTrigger {
655
+ background: rgba(0, 0, 0, 0.04);
656
+ color: rgba(0, 0, 0, 0.92);
657
+
658
+ @media (hover: hover) and (pointer: fine) {
659
+ &:hover {
660
+ background: rgba(0, 0, 0, 0.06);
661
+ }
662
+ }
663
+
664
+ &:focus-visible {
665
+ outline-color: rgba(0, 0, 0, 0.25);
666
+ }
667
+ }
668
+
669
+ .panelSelectList {
670
+ background: rgba(0, 0, 0, 0.03);
671
+ }
672
+ }
673
+ }
674
+
675
+ .dropdownLabel {
676
+ padding: 0.375rem 0.625rem 0.25rem;
677
+ font-size: 0.6875rem;
678
+ font-weight: 500;
679
+ letter-spacing: 0.04em;
680
+ text-transform: uppercase;
681
+ color: rgba(255, 255, 255, 0.45);
682
+ }
683
+
684
+ .dropdownItem {
685
+ display: flex;
686
+ align-items: center;
687
+ justify-content: space-between;
688
+ gap: 0.5rem;
689
+ padding: 0.4375rem 0.625rem;
690
+ border-radius: 0.375rem;
691
+ font-size: 0.8125rem;
692
+ color: rgba(255, 255, 255, 0.88);
693
+ cursor: pointer;
694
+ outline: none;
695
+
696
+ &:focus,
697
+ &:focus-visible {
698
+ outline: none;
699
+ box-shadow: none;
700
+ }
701
+
702
+ @media (hover: hover) and (pointer: fine) {
703
+ &:hover,
704
+ &:focus {
705
+ background: rgba(255, 255, 255, 0.08);
706
+ color: #fff;
707
+ }
708
+ }
709
+ }
710
+
711
+ .dropdownItemIcon {
712
+ flex-shrink: 0;
713
+ color: rgba(255, 255, 255, 0.45);
714
+ }
715
+
716
+ .dropdownMenuItem {
717
+ display: flex;
718
+ align-items: center;
719
+ justify-content: space-between;
720
+ gap: 0.5rem;
721
+ padding: 0.4375rem 0.625rem;
722
+ border: none;
723
+ border-radius: 0.375rem;
724
+ font-family: inherit;
725
+ font-size: 0.8125rem;
726
+ color: rgba(255, 255, 255, 0.82);
727
+ cursor: pointer;
728
+ outline: none;
729
+ background: transparent;
730
+ text-align: left;
731
+
732
+ &:focus,
733
+ &:focus-visible {
734
+ outline: none;
735
+ box-shadow: none;
736
+ }
737
+
738
+ @media (hover: hover) and (pointer: fine) {
739
+ &:hover {
740
+ background: #252525;
741
+ color: rgba(255, 255, 255, 0.98);
742
+ }
743
+ }
744
+
745
+ &[data-highlighted] {
746
+ background: #252525 !important;
747
+ color: rgba(255, 255, 255, 0.98) !important;
748
+ }
749
+ }
750
+
751
+ .dropdownMenuItemSelected {
752
+ background: rgba(255, 255, 255, 0.14);
753
+ color: rgba(255, 255, 255, 0.98);
754
+ font-weight: 500;
755
+
756
+ &[data-highlighted] {
757
+ background: rgba(255, 255, 255, 0.18) !important;
758
+ color: #fff !important;
759
+ }
760
+ }
761
+
762
+ .dropdownMenuItemCheck {
763
+ flex-shrink: 0;
764
+ color: rgba(255, 255, 255, 0.72);
765
+ }
766
+
767
+ .dropdownMenuSubTrigger {
768
+ width: 100%;
769
+
770
+ svg:last-child {
771
+ width: 0.875rem;
772
+ height: 0.875rem;
773
+ margin-left: auto;
774
+ color: rgba(255, 255, 255, 0.45);
775
+ }
776
+ }
777
+
778
+ .dropdownSubContent {
779
+ display: flex;
780
+ flex-direction: column;
781
+ gap: 0.125rem;
782
+ min-width: 9rem;
783
+ padding: 0.25rem;
784
+ border-radius: 0.5rem;
785
+ background: #1e1e1e;
786
+ color: #e0e0e0;
787
+ box-shadow:
788
+ 0 4px 20px rgba(0, 0, 0, 0.24),
789
+ 0 8px 32px rgba(0, 0, 0, 0.16),
790
+ 0 0 0 1px rgba(255, 255, 255, 0.08);
791
+ z-index: 1052;
792
+
793
+ &[data-prototype-comment-theme="light"] {
794
+ background: #fff;
795
+ color: rgba(0, 0, 0, 0.92);
796
+ box-shadow:
797
+ 0 4px 20px rgba(0, 0, 0, 0.1),
798
+ 0 8px 32px rgba(0, 0, 0, 0.06),
799
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
800
+
801
+ .dropdownMenuItem {
802
+ color: rgba(0, 0, 0, 0.82);
803
+
804
+ @media (hover: hover) and (pointer: fine) {
805
+ &:hover {
806
+ background: rgba(0, 0, 0, 0.06);
807
+ color: rgba(0, 0, 0, 0.92);
808
+ }
809
+ }
810
+
811
+ &[data-highlighted] {
812
+ background: rgba(0, 0, 0, 0.06) !important;
813
+ color: rgba(0, 0, 0, 0.92) !important;
814
+ }
815
+ }
816
+
817
+ .dropdownMenuItemSelected {
818
+ background: rgba(0, 0, 0, 0.08);
819
+ color: rgba(0, 0, 0, 0.92);
820
+
821
+ &[data-highlighted] {
822
+ background: rgba(0, 0, 0, 0.1) !important;
823
+ color: rgba(0, 0, 0, 0.92) !important;
824
+ }
825
+ }
826
+
827
+ .dropdownMenuItemCheck {
828
+ color: rgba(0, 0, 0, 0.55);
829
+ }
830
+ }
831
+ }
832
+
833
+ .dropdownMenuSeparator {
834
+ pointer-events: none;
835
+ margin: 0.375rem 0;
836
+ height: 1px;
837
+ background: rgba(255, 255, 255, 0.12);
838
+ outline: none;
839
+ }
840
+
841
+ .dropdownContentIconPicker {
842
+ min-width: 0;
843
+ width: max-content;
844
+ padding: 4px;
845
+ }
846
+
847
+ .controlsPanel {
848
+ display: flex;
849
+ flex-direction: column;
850
+ gap: 0.375rem;
851
+ width: min(18rem, calc(100vw - 2rem));
852
+ padding: 0;
853
+ }
854
+
855
+ .controlsPanelExplorations,
856
+ .controlsPanelMenuList {
857
+ width: max-content;
858
+ min-width: 11.5rem;
859
+ max-width: min(18rem, calc(100vw - 2rem));
860
+ align-items: stretch;
861
+ }
862
+
863
+ .controlsPanelMenuList {
864
+ display: flex;
865
+ flex-direction: column;
866
+ gap: 0.125rem;
867
+ padding: 0;
868
+ }
869
+
870
+ .controlsPanelStates {
871
+ width: max-content;
872
+ min-width: 11.5rem;
873
+ max-width: min(20rem, calc(100vw - 2rem));
874
+ }
875
+
876
+ .toolbarIconPicker {
877
+ display: flex;
878
+ align-items: center;
879
+ gap: 0.25rem;
880
+ width: max-content;
881
+ }
882
+
883
+ .toolbarIconPickerOption {
884
+ display: inline-flex;
885
+ align-items: center;
886
+ justify-content: center;
887
+ width: 34px;
888
+ height: 34px;
889
+ border: none;
890
+ border-radius: 0.5rem;
891
+ background: transparent;
892
+ color: rgba(255, 255, 255, 0.55);
893
+ cursor: pointer;
894
+ outline: none;
895
+ box-shadow: none;
896
+ -webkit-tap-highlight-color: transparent;
897
+ transition:
898
+ background-color 0.15s ease,
899
+ color 0.15s ease;
900
+
901
+ &:focus:not(:focus-visible) {
902
+ outline: none;
903
+ }
904
+
905
+ &:focus-visible {
906
+ outline: none;
907
+ background: rgba(255, 255, 255, 0.08);
908
+ color: rgba(255, 255, 255, 0.92);
909
+ }
910
+
911
+ @media (hover: hover) and (pointer: fine) {
912
+ &:hover {
913
+ background: rgba(255, 255, 255, 0.08);
914
+ color: rgba(255, 255, 255, 0.92);
915
+ }
916
+ }
917
+
918
+ &[data-selected="true"] {
919
+ background: rgba(255, 255, 255, 0.12);
920
+ color: #e0e0e0;
921
+ }
922
+ }
923
+
924
+ .dropdownItemExploration {
925
+ justify-content: space-between;
926
+ gap: 0.75rem;
927
+ width: 100%;
928
+ white-space: nowrap;
929
+ }
930
+
931
+ .explorationBriefPanel {
932
+ display: flex;
933
+ flex-direction: column;
934
+ width: 100%;
935
+ }
936
+
937
+ .explorationBriefTrigger {
938
+ display: flex;
939
+ align-items: center;
940
+ justify-content: space-between;
941
+ gap: 0.75rem;
942
+ width: 100%;
943
+ padding: 0.4375rem 0.625rem;
944
+ border: none;
945
+ border-radius: 0.375rem;
946
+ background: transparent;
947
+ color: rgba(255, 255, 255, 0.55);
948
+ font-family: inherit;
949
+ font-size: 0.8125rem;
950
+ line-height: 1.4;
951
+ text-align: left;
952
+ cursor: pointer;
953
+ outline: none;
954
+ transition: color 0.2s ease, background-color 0.2s ease;
955
+
956
+ @media (hover: hover) and (pointer: fine) {
957
+ &:hover {
958
+ background: #252525;
959
+ color: rgba(255, 255, 255, 0.92);
960
+ }
961
+ }
962
+
963
+ &:focus-visible {
964
+ outline: 2px solid rgba(255, 255, 255, 0.25);
965
+ outline-offset: 0;
966
+ }
967
+ }
968
+
969
+ .explorationBriefSeparator {
970
+ pointer-events: none;
971
+ flex-shrink: 0;
972
+ width: 100%;
973
+ height: 1px;
974
+ margin: 0.125rem 0;
975
+ background: rgba(255, 255, 255, 0.1);
976
+ outline: none;
977
+ }
978
+
979
+ .explorationBriefTriggerLabel {
980
+ min-width: 0;
981
+ overflow: hidden;
982
+ text-overflow: ellipsis;
983
+ white-space: nowrap;
984
+ }
985
+
986
+ .controlsPanelSection {
987
+ display: flex;
988
+ flex-direction: column;
989
+ gap: 0.25rem;
990
+ }
991
+
992
+ .panelSelectSectionTitle {
993
+ padding: 0.375rem 0.625rem 0.125rem;
994
+ font-size: 0.6875rem;
995
+ font-weight: 500;
996
+ color: rgba(255, 255, 255, 0.45);
997
+ }
998
+
999
+ .panelSelect {
1000
+ display: flex;
1001
+ flex-direction: column;
1002
+ gap: 0.25rem;
1003
+ width: 100%;
1004
+ }
1005
+
1006
+ .controlsPanelSelect {
1007
+ width: min(18rem, calc(100vw - 2rem));
1008
+ max-width: 100%;
1009
+ }
1010
+
1011
+ .panelSelectTrigger {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ gap: 0.5rem;
1015
+ width: 100%;
1016
+ padding: 0.4375rem 0.625rem;
1017
+ border: none;
1018
+ border-radius: 0.375rem;
1019
+ background: rgba(255, 255, 255, 0.06);
1020
+ color: #e0e0e0;
1021
+ font-family: inherit;
1022
+ font-size: 0.8125rem;
1023
+ cursor: pointer;
1024
+ outline: none;
1025
+ text-align: left;
1026
+
1027
+ @media (hover: hover) and (pointer: fine) {
1028
+ &:hover {
1029
+ background: #252525;
1030
+ }
1031
+ }
1032
+
1033
+ &:focus-visible {
1034
+ outline: 2px solid rgba(255, 255, 255, 0.35);
1035
+ outline-offset: 2px;
1036
+ }
1037
+ }
1038
+
1039
+ .panelSelectTriggerMiniPill {
1040
+ box-sizing: border-box;
1041
+ display: inline-flex;
1042
+ align-items: center;
1043
+ justify-content: center;
1044
+ flex-shrink: 0;
1045
+ width: auto;
1046
+ max-width: 10rem;
1047
+ height: 22px;
1048
+ gap: 0.375rem;
1049
+ padding: 0 0.625rem;
1050
+ border: none;
1051
+ border-radius: 9999px;
1052
+ background: #1e1e1e;
1053
+ color: #e0e0e0;
1054
+ box-shadow:
1055
+ 0 2px 8px rgba(0, 0, 0, 0.28),
1056
+ 0 0 0 1px #333333;
1057
+ font-family: inherit;
1058
+ font-size: 0.6875rem;
1059
+ font-weight: 500;
1060
+ letter-spacing: -0.01em;
1061
+ line-height: 1;
1062
+ white-space: nowrap;
1063
+ overflow: hidden;
1064
+ text-overflow: ellipsis;
1065
+ cursor: pointer;
1066
+ user-select: none;
1067
+ -webkit-user-select: none;
1068
+ -webkit-tap-highlight-color: transparent;
1069
+ text-align: center;
1070
+ transition: background-color 0.2s ease;
1071
+
1072
+ @media (hover: hover) and (pointer: fine) {
1073
+ &:hover {
1074
+ background: #333333;
1075
+ }
1076
+ }
1077
+
1078
+ &:active {
1079
+ background: #3a3a3a;
1080
+ }
1081
+
1082
+ &:focus,
1083
+ &:focus-visible {
1084
+ outline: none;
1085
+ box-shadow:
1086
+ 0 2px 8px rgba(0, 0, 0, 0.28),
1087
+ 0 0 0 1px #333333;
1088
+ }
1089
+
1090
+ &[data-state="open"] {
1091
+ background: #252525;
1092
+ }
1093
+ }
1094
+
1095
+ .panelSelectMiniPill {
1096
+ width: auto;
1097
+ }
1098
+
1099
+ .panelSelectList {
1100
+ display: flex;
1101
+ flex-direction: column;
1102
+ gap: 0.125rem;
1103
+ padding: 0.125rem;
1104
+ border-radius: 0.375rem;
1105
+ background: rgba(255, 255, 255, 0.04);
1106
+ }
1107
+
1108
+ .panelSelectLabel {
1109
+ flex-shrink: 0;
1110
+ color: rgba(255, 255, 255, 0.55);
1111
+ }
1112
+
1113
+ .panelSelectValue {
1114
+ min-width: 0;
1115
+ flex: 1;
1116
+ overflow: hidden;
1117
+ text-overflow: ellipsis;
1118
+ white-space: nowrap;
1119
+ font-weight: 500;
1120
+ }
1121
+
1122
+ .panelSelectChevron {
1123
+ flex-shrink: 0;
1124
+ color: rgba(255, 255, 255, 0.45);
1125
+ transition: transform 0.2s ease-out;
1126
+
1127
+ @media (prefers-reduced-motion: reduce) {
1128
+ transition: none;
1129
+ }
1130
+ }
1131
+
1132
+ .panelSelectChevronOpen {
1133
+ transform: rotate(180deg);
1134
+ }
1135
+
1136
+ .panelActionItem {
1137
+ display: flex;
1138
+ align-items: center;
1139
+ justify-content: space-between;
1140
+ gap: 0.375rem;
1141
+ width: 100%;
1142
+ padding: 0.4375rem 0.625rem;
1143
+ border: none;
1144
+ border-radius: 0.375rem;
1145
+ background: transparent;
1146
+ color: rgba(255, 255, 255, 0.88);
1147
+ font-family: inherit;
1148
+ font-size: 0.8125rem;
1149
+ cursor: pointer;
1150
+ outline: none;
1151
+ text-align: left;
1152
+
1153
+ &:focus,
1154
+ &:focus-visible {
1155
+ outline: none;
1156
+ box-shadow: none;
1157
+ }
1158
+
1159
+ @media (hover: hover) and (pointer: fine) {
1160
+ &:hover {
1161
+ background: rgba(255, 255, 255, 0.08);
1162
+ color: #fff;
1163
+ }
1164
+ }
1165
+
1166
+ &[data-highlighted] {
1167
+ background: rgba(255, 255, 255, 0.08) !important;
1168
+ color: #fff !important;
1169
+ }
1170
+ }
1171
+
1172
+ .panelActionItemActive {
1173
+ background: rgba(255, 255, 255, 0.14);
1174
+ color: rgba(255, 255, 255, 0.98);
1175
+ font-weight: 500;
1176
+
1177
+ &[data-highlighted] {
1178
+ background: rgba(255, 255, 255, 0.18) !important;
1179
+ color: #fff !important;
1180
+ }
1181
+ }
1182
+
1183
+ .panelActionItemIcon {
1184
+ flex-shrink: 0;
1185
+ opacity: 0.75;
1186
+ }
1187
+
1188
+ .orbPressed {
1189
+ background: #252525;
1190
+ }
1191
+
1192
+ @media (prefers-reduced-motion: reduce) {
1193
+ .orb,
1194
+ .orbMorph,
1195
+ .trigger,
1196
+ .inlinePicker {
1197
+ transition: none;
1198
+ animation: none;
1199
+ }
1200
+
1201
+ .orb:active,
1202
+ .orbMorph:active {
1203
+ transform: none;
1204
+ }
1205
+
1206
+ .orbMorphCollapsed {
1207
+ opacity: 0;
1208
+ }
1209
+ }
1210
+
1211
+ // Light mode for portaled controls menus (paired with data-prototype-comment-theme on content).
1212
+ [data-prototype-comment-theme="light"] {
1213
+ .inlinePicker {
1214
+ --bg-main: #fff;
1215
+ --bg-top: #fafafa;
1216
+ --bg-subtle: #f5f5f5;
1217
+ --bg-ground: rgba(0, 0, 0, 0.04);
1218
+ --bg-layered: rgba(0, 0, 0, 0.06);
1219
+ --text-primary: rgba(0, 0, 0, 0.92);
1220
+ --text-secondary: rgba(0, 0, 0, 0.68);
1221
+ --text-tertiary: rgba(0, 0, 0, 0.45);
1222
+ --border-solid: rgba(0, 0, 0, 0.1);
1223
+ --border-faint: rgba(0, 0, 0, 0.06);
1224
+ --border-medium: rgba(0, 0, 0, 0.14);
1225
+ }
1226
+
1227
+ .variantsToolbar {
1228
+ background: #fff;
1229
+ box-shadow:
1230
+ 0 2px 8px rgba(0, 0, 0, 0.08),
1231
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
1232
+ }
1233
+
1234
+ .variantsControlButton {
1235
+ background: rgba(0, 0, 0, 0.04);
1236
+ color: rgba(0, 0, 0, 0.55);
1237
+
1238
+ @media (hover: hover) and (pointer: fine) {
1239
+ &:hover {
1240
+ background: rgba(0, 0, 0, 0.06);
1241
+ color: rgba(0, 0, 0, 0.92);
1242
+ }
1243
+ }
1244
+ }
1245
+
1246
+ .miniPill,
1247
+ .panelSelectTriggerMiniPill {
1248
+ background: #fff;
1249
+ color: rgba(0, 0, 0, 0.92);
1250
+ box-shadow:
1251
+ 0 2px 8px rgba(0, 0, 0, 0.08),
1252
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
1253
+
1254
+ @media (hover: hover) and (pointer: fine) {
1255
+ &:hover {
1256
+ background: #f5f5f5;
1257
+ }
1258
+ }
1259
+
1260
+ &:active {
1261
+ background: #ebebeb;
1262
+ }
1263
+ }
1264
+
1265
+ .miniPillActive,
1266
+ .panelSelectTriggerMiniPill[data-state="open"] {
1267
+ background: #f5f5f5;
1268
+ color: rgba(0, 0, 0, 0.92);
1269
+ }
1270
+
1271
+ .variantsToolbarMini {
1272
+ background: #fff;
1273
+ box-shadow:
1274
+ 0 2px 8px rgba(0, 0, 0, 0.08),
1275
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
1276
+ }
1277
+
1278
+ .variantsControlButtonMini {
1279
+ background: rgba(0, 0, 0, 0.04);
1280
+ color: rgba(0, 0, 0, 0.55);
1281
+
1282
+ @media (hover: hover) and (pointer: fine) {
1283
+ &:hover {
1284
+ background: rgba(0, 0, 0, 0.06);
1285
+ color: rgba(0, 0, 0, 0.92);
1286
+ }
1287
+ }
1288
+ }
1289
+
1290
+ .orb {
1291
+ background: #fff;
1292
+ box-shadow:
1293
+ 0 2px 8px rgba(0, 0, 0, 0.08),
1294
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
1295
+
1296
+ @media (hover: hover) and (pointer: fine) {
1297
+ &:hover {
1298
+ background: #f5f5f5;
1299
+ }
1300
+ }
1301
+
1302
+ &:active {
1303
+ background: #ebebeb;
1304
+ }
1305
+ }
1306
+
1307
+ .orbPressed {
1308
+ background: #f5f5f5;
1309
+ }
1310
+
1311
+ .trigger {
1312
+ color: rgba(0, 0, 0, 0.92);
1313
+
1314
+ @media (hover: hover) and (pointer: fine) {
1315
+ &:hover {
1316
+ background: rgba(0, 0, 0, 0.06);
1317
+ }
1318
+ }
1319
+
1320
+ &:active {
1321
+ background: rgba(0, 0, 0, 0.1);
1322
+ }
1323
+
1324
+ &::selection,
1325
+ & *::selection {
1326
+ color: rgba(0, 0, 0, 0.92) !important;
1327
+ }
1328
+
1329
+ &:focus-visible {
1330
+ outline-color: rgba(0, 0, 0, 0.25);
1331
+ }
1332
+ }
1333
+
1334
+ .triggerLabelText::before {
1335
+ color: rgba(0, 0, 0, 0.92);
1336
+ }
1337
+
1338
+ .rationaleLabel {
1339
+ color: rgba(0, 0, 0, 0.92);
1340
+ }
1341
+ }