@ash-qw/dsh-theme-prts 0.1.91

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 (50) hide show
  1. package/LICENSE +24 -0
  2. package/README.en.md +103 -0
  3. package/README.md +107 -0
  4. package/THIRD_PARTY_NOTICES.md +48 -0
  5. package/cordis.patch.yml +4 -0
  6. package/lib/client.js +7466 -0
  7. package/lib/index.js +3 -0
  8. package/package.json +64 -0
  9. package/src/assets/faction-emblems/lungmen.png +0 -0
  10. package/src/assets/faction-emblems/penguin-logistics.png +0 -0
  11. package/src/assets/faction-emblems/reunion.png +0 -0
  12. package/src/assets/faction-emblems/rhine-lab.png +0 -0
  13. package/src/assets/faction-emblems/rhodes-island.png +0 -0
  14. package/src/assets/prts-original-avatar.png +0 -0
  15. package/src/assets/rhodes-dsh.svg +6 -0
  16. package/src/assets/topographic-map.svg +72 -0
  17. package/src/assets/topographic-tech.svg +19 -0
  18. package/src/client/assistant-glass-adapter.js +231 -0
  19. package/src/client/composer-glass-adapter.js +210 -0
  20. package/src/client/conversation-control-adapter.js +109 -0
  21. package/src/client/conversation-scale-adapter.js +2243 -0
  22. package/src/client/facility-geometry.js +60 -0
  23. package/src/client/facility-vector.js +230 -0
  24. package/src/client/floating-glass-adapter.js +177 -0
  25. package/src/client/host-geometry-adapter.js +123 -0
  26. package/src/client/index.js +359 -0
  27. package/src/client/layout-stability-diagnostics.js +162 -0
  28. package/src/client/operations-shell-v2.js +248 -0
  29. package/src/client/particle-field-adapter.js +1840 -0
  30. package/src/client/preferences.js +239 -0
  31. package/src/client/rc7-adapter.js +83 -0
  32. package/src/client/resize-shield-adapter.js +64 -0
  33. package/src/client/settings-page.js +62 -0
  34. package/src/client/sidebar-control-adapter.js +317 -0
  35. package/src/client/startup-sequence.js +366 -0
  36. package/src/client/status-projection.js +79 -0
  37. package/src/client/terrain-motion-adapter.js +188 -0
  38. package/src/client/theme-controller-v2.js +134 -0
  39. package/src/client/theme-controller.js +119 -0
  40. package/src/client/theme-settings-workbench.js +583 -0
  41. package/src/client/to-bottom-adapter.js +85 -0
  42. package/src/client/ui-store.js +23 -0
  43. package/src/index.js +4 -0
  44. package/src/styles/conversation-scale.css +471 -0
  45. package/src/styles/facility-vector.css +292 -0
  46. package/src/styles/prts.css +1223 -0
  47. package/src/styles/refinement.css +429 -0
  48. package/src/styles/stabilization.css +161 -0
  49. package/src/styles/startup-sequence.css +496 -0
  50. package/src/styles/theme-settings-workbench.css +803 -0
@@ -0,0 +1,429 @@
1
+ /* P.R.T.S. post-stabilization refinement */
2
+ html[data-dsh-prts] {
3
+ --prts-hero-mark-base: clamp(320px, 42%, 580px);
4
+ --prts-hero-mark-size: min(var(--prts-hero-mark-base), 42dvh);
5
+ }
6
+
7
+ /* The native frame remains the sole authority for session width. */
8
+ html[data-dsh-prts] [data-prts-region="frame"] {
9
+ position: relative;
10
+ }
11
+
12
+ html[data-dsh-prts] [data-prts-region="frame"] > [data-shell-overlay] {
13
+ position: absolute !important;
14
+ z-index: 120;
15
+ inset: 0;
16
+ min-width: 0;
17
+ min-height: 0;
18
+ pointer-events: none;
19
+ }
20
+
21
+ html[data-dsh-prts] [data-prts-region="frame"] > [data-shell-overlay] > * {
22
+ pointer-events: auto;
23
+ }
24
+
25
+ /* Restore the host Settings entry. The Rhodes mark remains the theme-only entry. */
26
+ html[data-dsh-prts] [data-prts-region="sessions"] [data-slot="sidebar.settings"] {
27
+ opacity: 1;
28
+ visibility: visible;
29
+ pointer-events: auto;
30
+ }
31
+
32
+ html[data-dsh-prts] [data-prts-region="sessions"] [data-slot="sidebar.settings"] > button {
33
+ color: var(--prts-ink) !important;
34
+ }
35
+
36
+ /* Workspace hierarchy: remove only the folder glyph and retain the disclosure control. */
37
+ html[data-dsh-prts] [data-prts-workspace-icon] {
38
+ display: none !important;
39
+ }
40
+
41
+ html[data-dsh-prts] [data-prts-workspace-disclosure] {
42
+ position: relative;
43
+ z-index: 4;
44
+ width: 14px;
45
+ flex: 0 0 14px;
46
+ display: grid;
47
+ place-items: center;
48
+ margin-left: calc(var(--prts-spine-width) + 4px);
49
+ color: var(--prts-muted);
50
+ transform: translate3d(var(--prts-row-shift), 0, 0);
51
+ transition: transform 220ms var(--prts-ease-spring), color 160ms ease;
52
+ }
53
+
54
+ /* Docked facility geometry follows the slender reference silhouette. */
55
+ html[data-dsh-prts] [data-prts-workspace-row]::before,
56
+ html[data-dsh-prts] [data-prts-session-row]::before {
57
+ clip-path: polygon(
58
+ 1px 0, calc(100% - 1px) 0, 100% 1px,
59
+ 100% calc(50% - 5px), calc(100% - 2px) calc(50% - 3px), calc(100% - 2px) calc(50% + 3px), 100% calc(50% + 5px),
60
+ 100% calc(100% - 1px), calc(100% - 1px) 100%, 1px 100%, 0 calc(100% - 1px),
61
+ 0 calc(50% + 5px), 2px calc(50% + 3px), 2px calc(50% - 3px), 0 calc(50% - 5px), 0 1px
62
+ ) !important;
63
+ }
64
+
65
+ html[data-dsh-prts] :is([data-prts-workspace-row], [data-prts-session-row]) [data-prts-facility-face] {
66
+ right: var(--prts-row-end-reserve) !important;
67
+ }
68
+
69
+ html[data-dsh-prts] [data-prts-facility-face] {
70
+ border: 0 !important;
71
+ background: var(--prts-line-strong) !important;
72
+ clip-path: polygon(
73
+ 1px 0,
74
+ calc(50% - 25px) 0, calc(50% - 20px) 3.333px, calc(50% + 20px) 3.333px, calc(50% + 25px) 0,
75
+ calc(100% - 1px) 0, 100% 1px,
76
+ 100% calc(50% - 5px), calc(100% - 2px) calc(50% - 3px), calc(100% - 2px) calc(50% + 3px), 100% calc(50% + 5px),
77
+ 100% calc(100% - 1px), calc(100% - 1px) 100%, 1px 100%, 0 calc(100% - 1px),
78
+ 0 calc(50% + 5px), 2px calc(50% + 3px), 2px calc(50% - 3px), 0 calc(50% - 5px), 0 1px
79
+ ) !important;
80
+ }
81
+
82
+ html[data-dsh-prts] [data-prts-facility-face]::after {
83
+ content: "";
84
+ position: absolute;
85
+ inset: 1px;
86
+ background: var(--prts-panel-raised);
87
+ clip-path: polygon(
88
+ 0 0,
89
+ calc(50% - 24px) 0, calc(50% - 19px) 3.333px, calc(50% + 19px) 3.333px, calc(50% + 24px) 0,
90
+ 100% 0,
91
+ 100% calc(50% - 4px), calc(100% - 2px) calc(50% - 2px), calc(100% - 2px) calc(50% + 2px), 100% calc(50% + 4px),
92
+ 100% 100%, 0 100%,
93
+ 0 calc(50% + 4px), 2px calc(50% + 2px), 2px calc(50% - 2px), 0 calc(50% - 4px)
94
+ );
95
+ }
96
+
97
+ html[data-dsh-prts] [data-prts-workspace-actions] {
98
+ width: 57px !important;
99
+ }
100
+
101
+ html[data-dsh-prts] [data-prts-session-actions] {
102
+ width: 28px !important;
103
+ }
104
+
105
+ html[data-dsh-prts] [data-prts-workspace-actions] button,
106
+ html[data-dsh-prts] [data-prts-session-actions] button {
107
+ width: 28px !important;
108
+ min-width: 28px !important;
109
+ position: relative;
110
+ isolation: isolate;
111
+ overflow: hidden;
112
+ border: 0 !important;
113
+ border-radius: 0 !important;
114
+ background: var(--prts-line) !important;
115
+ clip-path: polygon(
116
+ 1px 0, calc(100% - 1px) 0, 100% 1px,
117
+ 100% calc(50% - 5px), calc(100% - 2px) calc(50% - 3px), calc(100% - 2px) calc(50% + 3px), 100% calc(50% + 5px),
118
+ 100% calc(100% - 1px), calc(100% - 1px) 100%, 1px 100%, 0 calc(100% - 1px),
119
+ 0 calc(50% + 5px), 2px calc(50% + 3px), 2px calc(50% - 3px), 0 calc(50% - 5px), 0 1px
120
+ ) !important;
121
+ }
122
+
123
+ html[data-dsh-prts] [data-prts-workspace-actions] button::before,
124
+ html[data-dsh-prts] [data-prts-session-actions] button::before {
125
+ content: "";
126
+ position: absolute;
127
+ z-index: -1;
128
+ inset: 1px;
129
+ background: var(--prts-panel-raised);
130
+ clip-path: polygon(
131
+ 0 0, 100% 0,
132
+ 100% calc(50% - 4px), calc(100% - 2px) calc(50% - 2px), calc(100% - 2px) calc(50% + 2px), 100% calc(50% + 4px),
133
+ 100% 100%, 0 100%,
134
+ 0 calc(50% + 4px), 2px calc(50% + 2px), 2px calc(50% - 2px), 0 calc(50% - 4px)
135
+ );
136
+ pointer-events: none;
137
+ }
138
+
139
+ html[data-dsh-prts] [data-prts-workspace-actions] button:is(:hover, :focus-visible),
140
+ html[data-dsh-prts] [data-prts-session-actions] button:is(:hover, :focus-visible) {
141
+ background: var(--prts-yellow) !important;
142
+ }
143
+
144
+ html[data-dsh-prts] [data-prts-session-time] {
145
+ position: relative;
146
+ z-index: 3;
147
+ flex: 0 0 auto;
148
+ margin-right: 39px;
149
+ padding-left: 8px;
150
+ transform: translate3d(var(--prts-row-shift), 0, 0);
151
+ transition: opacity 120ms ease, transform 220ms var(--prts-ease-spring);
152
+ }
153
+
154
+ html[data-dsh-prts] [data-prts-session-row]:hover [data-prts-session-time] {
155
+ opacity: 0;
156
+ }
157
+
158
+ /* Restore the notched P.R.T.S. composer with one complete layered contour. */
159
+ html[data-dsh-prts] [data-composer-card],
160
+ html[data-dsh-prts] [data-prts-composer-fallback] {
161
+ position: relative;
162
+ isolation: isolate;
163
+ overflow: visible;
164
+ border: 0 !important;
165
+ border-radius: 0 !important;
166
+ background: transparent !important;
167
+ box-shadow: none !important;
168
+ clip-path: none !important;
169
+ backdrop-filter: none;
170
+ -webkit-backdrop-filter: none;
171
+ }
172
+
173
+ html[data-dsh-prts] [data-composer-card]::before,
174
+ html[data-dsh-prts] [data-prts-composer-fallback]::before {
175
+ content: "";
176
+ position: absolute;
177
+ z-index: 0;
178
+ inset: 0;
179
+ background: var(--prts-line-strong);
180
+ clip-path: polygon(
181
+ 3px 0,
182
+ calc(50% - 42px) 0, calc(50% - 37px) 5px, calc(50% + 37px) 5px, calc(50% + 42px) 0,
183
+ calc(100% - 3px) 0, 100% 3px, 100% calc(100% - 3px), calc(100% - 3px) 100%,
184
+ 3px 100%, 0 calc(100% - 3px), 0 3px
185
+ );
186
+ box-shadow: 0 14px 34px rgba(0, 0, 0, .18);
187
+ pointer-events: none;
188
+ }
189
+
190
+ html[data-dsh-prts] [data-composer-card]::after,
191
+ html[data-dsh-prts] [data-prts-composer-fallback]::after {
192
+ content: "";
193
+ position: absolute;
194
+ z-index: 1;
195
+ inset: 1px 1px 3px;
196
+ background: var(--prts-composer-surface, var(--prts-active-glass));
197
+ clip-path: polygon(
198
+ 2px 0,
199
+ calc(50% - 41px) 0, calc(50% - 36px) 5px, calc(50% + 36px) 5px, calc(50% + 41px) 0,
200
+ calc(100% - 2px) 0, 100% 2px, 100% calc(100% - 2px), calc(100% - 2px) 100%,
201
+ 2px 100%, 0 calc(100% - 2px), 0 2px
202
+ );
203
+ backdrop-filter: var(--prts-active-glass-filter);
204
+ -webkit-backdrop-filter: var(--prts-active-glass-filter);
205
+ pointer-events: none;
206
+ }
207
+
208
+ html[data-dsh-prts] [data-composer-card] > :not([data-prts-composer-signal]),
209
+ html[data-dsh-prts] [data-prts-composer-fallback] > :not([data-prts-composer-signal]) {
210
+ position: relative;
211
+ z-index: 2;
212
+ }
213
+
214
+ html[data-dsh-prts] [data-prts-composer-signal] {
215
+ position: absolute;
216
+ z-index: 3;
217
+ inset: 0;
218
+ overflow: visible;
219
+ pointer-events: none;
220
+ }
221
+
222
+ html[data-dsh-prts] [data-prts-composer-signal]::before {
223
+ content: "";
224
+ position: absolute;
225
+ left: 50%;
226
+ background: var(--prts-yellow);
227
+ opacity: .82;
228
+ pointer-events: none;
229
+ transition: transform 160ms var(--prts-ease-snap), opacity 160ms ease;
230
+ }
231
+
232
+ html[data-dsh-prts] [data-prts-composer-signal]::before {
233
+ bottom: 0;
234
+ width: calc(100% - 6px);
235
+ height: 3px;
236
+ transform: translateX(-50%) scaleX(.16);
237
+ }
238
+
239
+ html[data-dsh-prts] [data-composer-card]:focus-within,
240
+ html[data-dsh-prts] [data-prts-composer-fallback]:focus-within {
241
+ --prts-composer-surface: color-mix(in srgb, var(--prts-active-glass) 94%, var(--prts-ink) 6%);
242
+ }
243
+
244
+ html[data-dsh-prts] :is([data-composer-card], [data-prts-composer-fallback]):focus-within [data-prts-composer-signal]::before {
245
+ opacity: 1;
246
+ transform: translateX(-50%) scaleX(1);
247
+ }
248
+
249
+ html[data-dsh-prts] [data-composer-card] textarea:focus-visible,
250
+ html[data-dsh-prts] [data-prts-composer-fallback] textarea:focus-visible {
251
+ outline: none !important;
252
+ }
253
+
254
+ @media (prefers-reduced-motion: reduce) {
255
+ html[data-dsh-prts] [data-prts-composer-signal]::before {
256
+ transition: none;
257
+ }
258
+ }
259
+
260
+
261
+ html[data-dsh-prts] [data-prts-theme-settings] :is(input, textarea, select):focus-visible,
262
+ html[data-dsh-prts] [data-prts-floating-input]:focus-visible {
263
+ outline: none !important;
264
+ border-color: var(--prts-yellow) !important;
265
+ box-shadow: 0 0 0 1px var(--prts-yellow) !important;
266
+ }
267
+
268
+ html[data-dsh-prts] [data-prts-conversation-control="header"] {
269
+ height: 36px;
270
+ min-height: 36px;
271
+ display: inline-flex;
272
+ align-items: center;
273
+ gap: 6px;
274
+ padding: 0 10px;
275
+ }
276
+
277
+ html[data-dsh-prts] [data-prts-conversation-control="header"] svg {
278
+ width: 16px;
279
+ height: 16px;
280
+ flex: 0 0 16px;
281
+ }
282
+
283
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[aria-label*="send" i],
284
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[type="submit"] {
285
+ min-width: 40px !important;
286
+ padding: 0 !important;
287
+ font-size: 11px;
288
+ }
289
+
290
+ html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control="action"] {
291
+ width: 36px !important;
292
+ min-width: 36px !important;
293
+ padding: 0 !important;
294
+ flex: 0 0 36px;
295
+ }
296
+
297
+ /* Chamfered controls use their own polygonal outline and inset material layer. */
298
+ html[data-dsh-prts] :is(
299
+ [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
300
+ [data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
301
+ [data-prts-glass-control],
302
+ [data-prts-conversation-control]:not([data-prts-conversation-control="micro"]),
303
+ [data-produced-files-row] > button[type="button"]
304
+ ) {
305
+ --prts-control-outline: var(--prts-line);
306
+ --prts-control-surface: var(--prts-panel-raised);
307
+ position: relative;
308
+ isolation: isolate;
309
+ overflow: hidden;
310
+ border: 0 !important;
311
+ border-radius: 0 !important;
312
+ background: var(--prts-control-outline) !important;
313
+ color: var(--prts-ink) !important;
314
+ clip-path: polygon(
315
+ 3px 0, calc(100% - 3px) 0, 100% 3px,
316
+ 100% calc(100% - 3px), calc(100% - 3px) 100%,
317
+ 3px 100%, 0 calc(100% - 3px), 0 3px
318
+ ) !important;
319
+ }
320
+
321
+ html[data-dsh-prts] :is(
322
+ [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
323
+ [data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
324
+ [data-prts-glass-control],
325
+ [data-prts-conversation-control]:not([data-prts-conversation-control="micro"]),
326
+ [data-produced-files-row] > button[type="button"]
327
+ )::before {
328
+ content: "";
329
+ position: absolute;
330
+ z-index: -1;
331
+ inset: 1px;
332
+ background: var(--prts-control-surface);
333
+ clip-path: polygon(
334
+ 2px 0, calc(100% - 2px) 0, 100% 2px,
335
+ 100% calc(100% - 2px), calc(100% - 2px) 100%,
336
+ 2px 100%, 0 calc(100% - 2px), 0 2px
337
+ );
338
+ pointer-events: none;
339
+ }
340
+
341
+ html[data-dsh-prts] :is(
342
+ [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
343
+ [data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role="menu"] *):not([role="listbox"] *),
344
+ [data-prts-glass-control],
345
+ [data-prts-conversation-control]:not([data-prts-conversation-control="micro"]),
346
+ [data-produced-files-row] > button[type="button"]
347
+ ):is(:hover, :focus-visible) {
348
+ --prts-control-outline: var(--prts-yellow);
349
+ }
350
+
351
+ html[data-dsh-prts] :is(
352
+ [data-prts-glass-control="model"],
353
+ [data-prts-glass-control="permission"],
354
+ [data-prts-glass-control="preset"],
355
+ [data-prts-conversation-control="utility"],
356
+ [data-produced-files-row] > button[type="button"]
357
+ ) {
358
+ --prts-control-surface: var(--prts-active-glass) !important;
359
+ }
360
+
361
+ html[data-dsh-prts] [data-composer-card] button[aria-label*="send" i],
362
+ html[data-dsh-prts] [data-composer-card] button[type="submit"],
363
+ html[data-dsh-prts] [data-prts-conversation-control="cta"] {
364
+ font-size: 11px;
365
+ --prts-control-outline: var(--prts-yellow) !important;
366
+ --prts-control-surface: var(--prts-yellow) !important;
367
+ color: var(--prts-yellow-ink) !important;
368
+ }
369
+
370
+ html[data-dsh-prts] [data-prts-conversation-control="danger"] {
371
+ --prts-control-outline: var(--prts-red) !important;
372
+ --prts-control-surface: color-mix(in srgb, var(--prts-red) 14%, var(--prts-panel-raised)) !important;
373
+ color: var(--prts-red) !important;
374
+ }
375
+
376
+ /* Empty session: emblem owns the upper field, composer anchors in the lower third. */
377
+ html[data-dsh-prts] [data-prts-hero-active] {
378
+ --prts-hero-narrow-spacer: clamp(24px, 8dvh, 72px);
379
+ --prts-hero-wide-spacer: clamp(96px, 22dvh, 340px);
380
+ min-height: 100%;
381
+ height: calc(100% - 48px) !important;
382
+ overflow-y: auto;
383
+ display: grid;
384
+ grid-template-columns: minmax(0, 1fr);
385
+ grid-template-rows: minmax(0, 1fr) auto min(
386
+ var(--prts-hero-wide-spacer),
387
+ max(var(--prts-hero-narrow-spacer), calc(var(--prts-hero-narrow-spacer) + 63vw - 403.2px))
388
+ );
389
+ align-content: stretch;
390
+ gap: clamp(24px, calc(5vw - 8px), 40px);
391
+ padding: clamp(18px, calc(1.875vw + 6px), 24px) clamp(12px, 3vw, 42px) 0 clamp(18px, 3vw, 42px);
392
+ }
393
+
394
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-card],
395
+ html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback] {
396
+ width: 100%;
397
+ margin-inline: auto;
398
+ padding: 10px 12px;
399
+ }
400
+
401
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] textarea,
402
+ html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback] textarea {
403
+ min-height: 64px;
404
+ line-height: 1.55;
405
+ resize: vertical;
406
+ }
407
+
408
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button,
409
+ html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control] {
410
+ min-height: 36px;
411
+ }
412
+
413
+ html[data-dsh-prts] [data-prts-hero-active]::before {
414
+ margin-top: calc(var(--prts-hero-mark-size) + 44px);
415
+ }
416
+
417
+ html[data-dsh-prts] [data-prts-hero-active] [data-phase="hero"] {
418
+ grid-row: 1;
419
+ min-height: 0;
420
+ align-self: stretch;
421
+ }
422
+
423
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat] {
424
+ grid-row: 2;
425
+ width: min(calc(780px + 32px), 100%);
426
+ min-width: 0 !important;
427
+ align-self: end;
428
+ justify-self: center;
429
+ }
@@ -0,0 +1,161 @@
1
+ /* P.R.T.S. 0.1.53 stabilization layer */
2
+ html[data-dsh-prts] {
3
+ --prts-hero-mark-base: clamp(300px, 38%, 520px);
4
+ --prts-hero-mark-size: min(var(--prts-hero-mark-base), 32dvh);
5
+ }
6
+
7
+ /* The native Harness new-session and sidebar collapse controls remain authoritative. */
8
+ html[data-dsh-prts] [data-prts-region="sessions"] > * > [data-slot="sidebar"] > :first-child > button[aria-label*="new session" i] {
9
+ min-height: 40px;
10
+ display: grid !important;
11
+ place-items: center;
12
+ margin: 0 0 14px;
13
+ border: 1px solid var(--prts-line) !important;
14
+ border-radius: var(--prts-radius-card) !important;
15
+ background: var(--prts-panel-raised) !important;
16
+ color: var(--prts-ink) !important;
17
+ }
18
+
19
+ /* Rail controls: stable contrast in both schemes, labels never consume rail space. */
20
+ html[data-dsh-prts] [data-prts-rail-brand],
21
+ html[data-dsh-prts] [data-prts-nav-rail] > button,
22
+ html[data-dsh-prts] [data-prts-nav-bottom] > button {
23
+ position: relative;
24
+ width: 100%;
25
+ min-width: 0;
26
+ min-height: 48px;
27
+ display: grid;
28
+ place-items: center;
29
+ padding: 0;
30
+ border: 0;
31
+ border-bottom: 1px solid #242b2f;
32
+ border-radius: 0;
33
+ background: transparent;
34
+ color: #aeb8bd !important;
35
+ cursor: pointer;
36
+ clip-path: none;
37
+ }
38
+
39
+ html[data-dsh-prts] [data-prts-rail-brand] {
40
+ height: 64px;
41
+ border-bottom-color: #30383d;
42
+ }
43
+
44
+ html[data-dsh-prts] [data-prts-rail-brand]:is(:hover, :focus-visible),
45
+ html[data-dsh-prts] [data-prts-rail-brand][aria-expanded="true"],
46
+ html[data-dsh-prts] [data-prts-nav-rail] > button:is(:hover, :focus-visible),
47
+ html[data-dsh-prts] [data-prts-nav-bottom] > button:is(:hover, :focus-visible) {
48
+ background: #151a1d;
49
+ color: #f3f6f7 !important;
50
+ }
51
+
52
+ html[data-dsh-prts] [data-prts-rail-brand][aria-expanded="true"]::after {
53
+ content: "";
54
+ position: absolute;
55
+ inset: 7px auto 7px 0;
56
+ width: 2px;
57
+ background: var(--prts-yellow);
58
+ }
59
+
60
+ html[data-dsh-prts] [data-prts-nav-rail] small,
61
+ html[data-dsh-prts] [data-prts-connection-label] {
62
+ position: absolute;
63
+ z-index: 180;
64
+ top: 50%;
65
+ left: calc(100% + 9px);
66
+ width: max-content;
67
+ max-width: 180px;
68
+ padding: 6px 8px;
69
+ border: 1px solid #3d474d;
70
+ border-radius: 3px;
71
+ opacity: 0;
72
+ background: #0e1215;
73
+ color: #eef2f3;
74
+ font: 700 9px/1.2 var(--prts-mono);
75
+ letter-spacing: .04em;
76
+ text-align: left;
77
+ transform: translate3d(-5px, -50%, 0);
78
+ transition: opacity 130ms ease, transform 160ms var(--prts-ease-snap);
79
+ pointer-events: none;
80
+ white-space: nowrap;
81
+ }
82
+
83
+ html[data-dsh-prts] [data-prts-nav-rail] button:is(:hover, :focus-visible) small,
84
+ html[data-dsh-prts] [data-prts-connection-indicator]:is(:hover, :focus-visible) [data-prts-connection-label] {
85
+ opacity: 1;
86
+ transform: translate3d(0, -50%, 0);
87
+ }
88
+
89
+ html[data-dsh-prts] [data-prts-connection-indicator] {
90
+ position: relative;
91
+ min-height: 38px;
92
+ padding: 0;
93
+ color: #9da8ad;
94
+ }
95
+
96
+ html[data-dsh-prts] [data-prts-nav-bottom] svg,
97
+ html[data-dsh-prts] [data-prts-nav-bottom] b {
98
+ display: block;
99
+ color: currentColor;
100
+ }
101
+
102
+
103
+ /* Complete structural outlines; decorative accents are separate edges. */
104
+ html[data-dsh-prts] [data-message-role="user"],
105
+ html[data-dsh-prts] [data-chat-flow-kind="user"] [class$="_bubble"],
106
+ html[data-dsh-prts] [data-composer-card],
107
+ html[data-dsh-prts] [data-prts-composer-fallback],
108
+ html[data-dsh-prts] [data-composer-card] button,
109
+ html[data-dsh-prts] [data-prts-conversation-control],
110
+ html[data-dsh-prts] [data-produced-files-row] > button[type="button"],
111
+ html[data-dsh-prts] [data-prts-to-bottom] {
112
+ border-radius: 3px !important;
113
+ clip-path: none !important;
114
+ }
115
+
116
+
117
+ html[data-dsh-prts] [data-prts-facility-face] {
118
+ right: 0 !important;
119
+ border: 0 !important;
120
+ background: var(--prts-line-strong);
121
+ }
122
+
123
+ html[data-dsh-prts] [data-prts-facility-face]::after {
124
+ content: "";
125
+ position: absolute;
126
+ inset: 1px;
127
+ background: var(--prts-panel-raised);
128
+ clip-path: polygon(
129
+ 3px 0, calc(50% - 25px) 0, calc(50% - 20px) 3.333px, calc(50% + 20px) 3.333px, calc(50% + 25px) 0,
130
+ calc(100% - 3px) 0, 100% 3px, 100% calc(50% - 5px), calc(100% - 2px) calc(50% - 3px), calc(100% - 2px) calc(50% + 3px), 100% calc(50% + 5px),
131
+ 100% calc(100% - 3px), calc(100% - 3px) 100%, 3px 100%, 0 calc(100% - 3px),
132
+ 0 calc(50% + 5px), 2px calc(50% + 3px), 2px calc(50% - 3px), 0 calc(50% - 5px), 0 3px
133
+ );
134
+ }
135
+
136
+ html[data-dsh-prts] [data-prts-workspace-actions] button,
137
+ html[data-dsh-prts] [data-prts-session-actions] button {
138
+ border: 1px solid var(--prts-line-strong) !important;
139
+ border-radius: 3px !important;
140
+ clip-path: none !important;
141
+ }
142
+
143
+ /* Explicit two-row empty state: particle emblem above, composer below. */
144
+ html[data-dsh-prts] [data-prts-hero-active] {
145
+ display: grid;
146
+ grid-template-rows: minmax(220px, 1fr) auto;
147
+ align-content: center;
148
+ gap: clamp(28px, 5dvh, 54px);
149
+ padding-top: 24px;
150
+ padding-bottom: 34px;
151
+ }
152
+
153
+ html[data-dsh-prts] [data-prts-hero-active] [data-phase="hero"] {
154
+ min-height: min(36dvh, 390px);
155
+ align-self: end;
156
+ }
157
+
158
+ html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat] {
159
+ align-self: start;
160
+ justify-self: center;
161
+ }