minecodex 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 (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/apps/dashboard/app.js +387 -0
  4. package/apps/dashboard/favicon.svg +18 -0
  5. package/apps/dashboard/index.html +70 -0
  6. package/apps/dashboard/styles.css +297 -0
  7. package/features/images/README.md +106 -0
  8. package/features/images/codex-feature.json +24 -0
  9. package/features/images/src/http-server.mjs +302 -0
  10. package/features/images/src/image-library.mjs +582 -0
  11. package/features/images/src/main.mjs +52 -0
  12. package/features/images/src/prompt-index.mjs +182 -0
  13. package/features/images/src/save-as.mjs +40 -0
  14. package/features/images/src/thread-metadata.mjs +93 -0
  15. package/features/images/web/app.js +1045 -0
  16. package/features/images/web/index.html +162 -0
  17. package/features/images/web/styles.css +994 -0
  18. package/features/model-slider/README.md +30 -0
  19. package/features/model-slider/THIRD_PARTY_NOTICES.md +24 -0
  20. package/features/model-slider/assets/providers/anthropic.svg +1 -0
  21. package/features/model-slider/assets/providers/deepseek.svg +1 -0
  22. package/features/model-slider/assets/providers/gemini.svg +1 -0
  23. package/features/model-slider/assets/providers/grok.svg +1 -0
  24. package/features/model-slider/assets/providers/hunyuan.svg +1 -0
  25. package/features/model-slider/assets/providers/kimi.svg +1 -0
  26. package/features/model-slider/assets/providers/minimax.svg +1 -0
  27. package/features/model-slider/assets/providers/openai.svg +1 -0
  28. package/features/model-slider/assets/providers/qwen.svg +1 -0
  29. package/features/model-slider/assets/providers/xiaomimimo.svg +1 -0
  30. package/features/model-slider/assets/providers/zhipu.svg +1 -0
  31. package/features/model-slider/assets/ui/sparkles.svg +18 -0
  32. package/features/model-slider/assets/ui/star-off.svg +17 -0
  33. package/features/model-slider/assets/ui/star.svg +15 -0
  34. package/features/model-slider/codex-feature.json +56 -0
  35. package/features/model-slider/vendor/cc-switch-LICENSE +21 -0
  36. package/features/model-slider/vendor/lucide-LICENSE +35 -0
  37. package/features/notes/README.md +106 -0
  38. package/features/notes/assets/icons/circle.svg +15 -0
  39. package/features/notes/assets/icons/ellipsis.svg +17 -0
  40. package/features/notes/assets/icons/external-link.svg +17 -0
  41. package/features/notes/assets/icons/list-todo.svg +19 -0
  42. package/features/notes/assets/icons/message-square-quote.svg +17 -0
  43. package/features/notes/assets/icons/paperclip.svg +15 -0
  44. package/features/notes/assets/icons/star-off.svg +17 -0
  45. package/features/notes/assets/icons/star.svg +15 -0
  46. package/features/notes/assets/icons/sticky-note.svg +16 -0
  47. package/features/notes/assets/icons/trash-2.svg +19 -0
  48. package/features/notes/codex-feature.json +90 -0
  49. package/features/notes/src/http-server.mjs +541 -0
  50. package/features/notes/src/main.mjs +54 -0
  51. package/features/notes/src/product.mjs +771 -0
  52. package/features/notes/web/app.js +1495 -0
  53. package/features/notes/web/codex-artifact-document.svg +1 -0
  54. package/features/notes/web/codex-attachment.svg +1 -0
  55. package/features/notes/web/codex-build.svg +1 -0
  56. package/features/notes/web/codex-code.svg +1 -0
  57. package/features/notes/web/codex-cplusplus.svg +1 -0
  58. package/features/notes/web/codex-css.svg +1 -0
  59. package/features/notes/web/codex-document.svg +1 -0
  60. package/features/notes/web/codex-file.svg +1 -0
  61. package/features/notes/web/codex-folder.svg +1 -0
  62. package/features/notes/web/codex-hashes.svg +1 -0
  63. package/features/notes/web/codex-html.svg +1 -0
  64. package/features/notes/web/codex-image.svg +1 -0
  65. package/features/notes/web/codex-java.svg +1 -0
  66. package/features/notes/web/codex-javascript.svg +1 -0
  67. package/features/notes/web/codex-json.svg +1 -0
  68. package/features/notes/web/codex-notebook.svg +1 -0
  69. package/features/notes/web/codex-pdf.svg +1 -0
  70. package/features/notes/web/codex-pencil.svg +3 -0
  71. package/features/notes/web/codex-php.svg +1 -0
  72. package/features/notes/web/codex-plus.svg +3 -0
  73. package/features/notes/web/codex-presentation.svg +1 -0
  74. package/features/notes/web/codex-python.svg +1 -0
  75. package/features/notes/web/codex-react.svg +1 -0
  76. package/features/notes/web/codex-rust.svg +1 -0
  77. package/features/notes/web/codex-shell.svg +1 -0
  78. package/features/notes/web/codex-skill.svg +1 -0
  79. package/features/notes/web/codex-spreadsheet.svg +1 -0
  80. package/features/notes/web/codex-task.svg +3 -0
  81. package/features/notes/web/codex-terminal.svg +1 -0
  82. package/features/notes/web/codex-toml.svg +1 -0
  83. package/features/notes/web/codex-typescript.svg +1 -0
  84. package/features/notes/web/codex-view-all.svg +3 -0
  85. package/features/notes/web/index.html +15 -0
  86. package/features/notes/web/styles.css +1155 -0
  87. package/package.json +67 -0
  88. package/packages/cli/bin/mcx.mjs +7 -0
  89. package/packages/cli/src/browser-exchange.mjs +31 -0
  90. package/packages/cli/src/commands.mjs +389 -0
  91. package/packages/cli/src/config.mjs +101 -0
  92. package/packages/cli/src/control-server.mjs +371 -0
  93. package/packages/cli/src/npm-adapter.mjs +40 -0
  94. package/packages/cli/src/paths.mjs +33 -0
  95. package/packages/cli/src/platform.mjs +368 -0
  96. package/packages/cli/src/runtime-manager.mjs +338 -0
  97. package/packages/runtime-host/README.md +171 -0
  98. package/packages/runtime-host/src/codex-runtime.mjs +4311 -0
  99. package/packages/runtime-host/src/feature-registry.mjs +827 -0
  100. package/packages/runtime-host/src/main.mjs +98 -0
  101. package/packages/runtime-host/src/pid-file.mjs +23 -0
@@ -0,0 +1,1155 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ --notes-bg: var(--codex-surface-primary, var(--color-token-main-surface-primary, #fff));
4
+ --notes-summary-bg: var(--codex-dropdown-background, var(--color-token-dropdown-background, var(--notes-bg)));
5
+ --notes-bg-elevated: var(--codex-surface-elevated, var(--color-token-dropdown-background, var(--color-background-elevated-primary-opaque, var(--color-background-panel, #fff))));
6
+ --notes-text: var(--codex-text-primary, var(--color-token-foreground, var(--color-text-foreground, #151515)));
7
+ --notes-text-secondary: var(--codex-text-secondary, var(--color-token-text-secondary, var(--color-text-foreground-secondary, #666)));
8
+ --notes-text-tertiary: var(--codex-text-tertiary, var(--color-token-text-tertiary, var(--color-text-foreground-tertiary, #8a8a8a)));
9
+ --notes-border: var(--codex-border, var(--color-token-border, var(--color-border, rgba(0, 0, 0, 0.1))));
10
+ --notes-hover: var(--codex-list-hover, var(--color-token-list-hover-background, rgba(13, 13, 13, 0.05)));
11
+ --notes-accent: var(--codex-accent, var(--color-text-accent, var(--codex-base-accent, #0f766e)));
12
+ --notes-input-bg: var(--color-token-input-background, rgba(255, 255, 255, 0.96));
13
+ --notes-input-border: var(--color-token-input-border, rgba(13, 13, 13, 0.111));
14
+ --notes-input-text: var(--color-token-input-foreground, var(--notes-text));
15
+ --notes-input-placeholder: var(--color-token-input-placeholder-foreground, rgba(13, 13, 13, 0.484));
16
+ --notes-button-bg: var(--color-background-primary-solid, var(--color-token-button-background, #0d0d0d));
17
+ --notes-button-text: var(--color-text-primary-solid, var(--color-token-button-foreground, #fff));
18
+ --notes-button-tertiary-text: var(--color-text-button-tertiary, var(--notes-text-tertiary));
19
+ --notes-button-tertiary-hover: var(--color-background-button-tertiary-hover, var(--notes-hover));
20
+ --notes-danger: var(--codex-danger, #c93b3b);
21
+ --notes-focus: var(--codex-focus, var(--color-token-focus-border, var(--color-border-focus, color-mix(in srgb, var(--notes-accent), transparent 38%))));
22
+ --notes-radius: var(--codex-radius, var(--radius-lg, 8px));
23
+ --notes-shadow: var(--codex-shadow, var(--shadow-xl, 0 8px 28px rgba(0, 0, 0, 0.12)));
24
+ font-family: var(--font-sans-default, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
25
+ /* Keep host rem-based radius and spacing tokens on Codex's 16px root basis. */
26
+ font-size: 16px;
27
+ color: var(--notes-text);
28
+ background: transparent;
29
+ }
30
+
31
+ @media (prefers-color-scheme: dark) {
32
+ :root {
33
+ --notes-bg: var(--codex-surface-primary, var(--color-token-main-surface-primary, #181818));
34
+ --notes-summary-bg: var(--codex-dropdown-background, var(--color-token-dropdown-background, var(--notes-bg)));
35
+ --notes-bg-elevated: var(--codex-surface-elevated, var(--color-token-dropdown-background, var(--color-background-elevated-primary-opaque, var(--color-background-panel, #252525))));
36
+ --notes-text: var(--codex-text-primary, var(--color-token-foreground, var(--color-text-foreground, #f2f2f2)));
37
+ --notes-text-secondary: var(--codex-text-secondary, var(--color-token-text-secondary, var(--color-text-foreground-secondary, #b5b5b5)));
38
+ --notes-text-tertiary: var(--codex-text-tertiary, var(--color-token-text-tertiary, var(--color-text-foreground-tertiary, #858585)));
39
+ --notes-border: var(--codex-border, var(--color-token-border, var(--color-border, rgba(255, 255, 255, 0.11))));
40
+ --notes-hover: var(--codex-list-hover, var(--color-token-list-hover-background, rgba(255, 255, 255, 0.075)));
41
+ --notes-accent: var(--codex-accent, var(--color-text-accent, var(--codex-base-accent, #5eead4)));
42
+ --notes-input-bg: var(--color-token-input-background, rgba(45, 45, 45, 0.96));
43
+ --notes-input-border: var(--color-token-input-border, rgba(255, 255, 255, 0.156));
44
+ --notes-input-text: var(--color-token-input-foreground, var(--notes-text));
45
+ --notes-input-placeholder: var(--color-token-input-placeholder-foreground, rgba(255, 255, 255, 0.498));
46
+ --notes-button-bg: var(--color-background-primary-solid, var(--color-token-button-background, #fff));
47
+ --notes-button-text: var(--color-text-primary-solid, var(--color-token-button-foreground, #2d2d2d));
48
+ }
49
+ }
50
+
51
+ *,
52
+ *::before,
53
+ *::after {
54
+ box-sizing: border-box;
55
+ }
56
+
57
+ html,
58
+ body,
59
+ #app {
60
+ width: 100%;
61
+ min-height: 100%;
62
+ margin: 0;
63
+ }
64
+
65
+ body {
66
+ background: var(--notes-bg);
67
+ color: var(--notes-text);
68
+ font-size: var(--text-base, 14px);
69
+ overflow: hidden;
70
+ }
71
+
72
+ body[data-surface="summary"] {
73
+ height: 100vh;
74
+ min-height: 0;
75
+ background: var(--notes-summary-bg);
76
+ }
77
+
78
+ body[data-surface="summary"] #app {
79
+ height: 100%;
80
+ min-height: 0;
81
+ }
82
+
83
+ body:not([data-surface="summary"]) {
84
+ overflow: auto;
85
+ }
86
+
87
+ button,
88
+ input,
89
+ textarea {
90
+ font: inherit;
91
+ }
92
+
93
+ button,
94
+ summary {
95
+ color: inherit;
96
+ }
97
+
98
+ button:focus-visible,
99
+ summary:focus-visible,
100
+ input:focus-visible,
101
+ textarea:focus-visible,
102
+ [tabindex]:focus-visible {
103
+ outline: 2px solid var(--notes-focus);
104
+ outline-offset: 1px;
105
+ }
106
+
107
+ button {
108
+ border: 0;
109
+ background: none;
110
+ cursor: pointer;
111
+ }
112
+
113
+ .summary-shell {
114
+ width: 100%;
115
+ max-height: 100vh;
116
+ padding: 6px 0 0;
117
+ overflow: hidden;
118
+ border-radius: var(--codex-summary-panel-radius, 25px);
119
+ corner-shape: var(--codex-summary-panel-corner-shape, var(--codex-corner-shape, superellipse(1.5)));
120
+ background: var(--notes-summary-bg);
121
+ }
122
+
123
+ .summary-scroll {
124
+ display: flex;
125
+ max-height: calc(100vh - 6px);
126
+ flex-direction: column;
127
+ gap: 12px;
128
+ overflow-x: hidden;
129
+ overflow-y: auto;
130
+ padding: 4px 0 6px;
131
+ overscroll-behavior: contain;
132
+ font-size: var(--codex-summary-row-font-size, 16px);
133
+ font-weight: var(--codex-summary-font-weight, 445);
134
+ line-height: var(--codex-summary-row-line-height, 24px);
135
+ }
136
+
137
+ .summary-section {
138
+ position: relative;
139
+ display: flex;
140
+ flex: 0 0 auto;
141
+ flex-direction: column;
142
+ padding-bottom: 12px;
143
+ }
144
+
145
+ .summary-section:not(:last-child)::after {
146
+ position: absolute;
147
+ right: 14px;
148
+ bottom: 0;
149
+ left: 14px;
150
+ height: 0.5px;
151
+ background: var(--notes-border);
152
+ content: "";
153
+ }
154
+
155
+ .summary-section:last-child {
156
+ padding-bottom: 0;
157
+ }
158
+
159
+ .section-header,
160
+ .page-section-title {
161
+ min-height: 28px;
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: space-between;
165
+ gap: 8px;
166
+ padding: 0 10px 2px 14px;
167
+ color: var(--codex-summary-section-title-color, var(--notes-text-tertiary));
168
+ font-size: var(--codex-summary-section-title-font-size, 14px);
169
+ /* The embedded surface rasterizes 445 more heavily than the host layer. */
170
+ font-weight: var(--codex-summary-section-title-font-weight, 400);
171
+ line-height: var(--codex-summary-section-title-line-height, 21px);
172
+ flex: 0 0 auto;
173
+ }
174
+
175
+ .summary-section .section-header {
176
+ position: sticky;
177
+ top: 0;
178
+ z-index: 2;
179
+ height: 28px;
180
+ min-height: 28px;
181
+ background: var(--notes-summary-bg);
182
+ }
183
+
184
+ .flat-list {
185
+ list-style: none;
186
+ padding: 0 8px;
187
+ margin: 0;
188
+ }
189
+
190
+ .summary-section > .flat-list {
191
+ padding: 0 14px;
192
+ margin-top: 2px;
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 2px;
196
+ }
197
+
198
+ .row,
199
+ .empty-row,
200
+ .view-all {
201
+ min-height: 29px;
202
+ }
203
+
204
+ .summary-section .row,
205
+ .summary-section .empty-row,
206
+ .summary-section .view-all {
207
+ height: 29px;
208
+ }
209
+
210
+ .row {
211
+ position: relative;
212
+ isolation: isolate;
213
+ display: flex;
214
+ align-items: center;
215
+ gap: 4px;
216
+ padding: 4px 0;
217
+ border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
218
+ color: var(--notes-text);
219
+ font-size: var(--codex-summary-row-font-size, 16px);
220
+ font-weight: var(--codex-summary-font-weight, 445);
221
+ line-height: var(--codex-summary-row-line-height, 24px);
222
+ }
223
+
224
+ .row::before {
225
+ content: "";
226
+ position: absolute;
227
+ inset: 0 -8px;
228
+ z-index: -1;
229
+ border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
230
+ }
231
+
232
+ .row:hover::before,
233
+ .row:has(:focus-visible)::before,
234
+ .prompt-row:has(.row-menu[open])::before {
235
+ background: var(--notes-hover);
236
+ }
237
+
238
+ .row.is-dragging {
239
+ opacity: 0.2;
240
+ }
241
+
242
+ .todo-row[draggable="true"] {
243
+ cursor: grab;
244
+ }
245
+
246
+ .todo-row.is-dragging,
247
+ .todo-row.is-dragging * {
248
+ cursor: grabbing;
249
+ }
250
+
251
+ .todo-drag-preview {
252
+ position: fixed;
253
+ z-index: 4;
254
+ top: -1000px;
255
+ left: -1000px;
256
+ width: var(--todo-drag-preview-width);
257
+ height: 31px;
258
+ min-height: 0;
259
+ overflow: hidden;
260
+ border: 1px solid var(--color-token-border, var(--notes-border));
261
+ border-radius: var(--radius-lg, 12.5px);
262
+ color: var(--notes-text);
263
+ background: var(--color-token-bg-primary, #f7f7f7);
264
+ box-shadow: var(--shadow-lg, 0 4px 8px -2px #0000001a);
265
+ opacity: 0.7;
266
+ pointer-events: none;
267
+ }
268
+
269
+ .todo-drag-preview-content {
270
+ width: 100%;
271
+ max-width: none;
272
+ height: 29px;
273
+ min-height: 0;
274
+ margin: 0;
275
+ padding: 0 8px;
276
+ border-radius: 0;
277
+ background: transparent;
278
+ opacity: 1;
279
+ }
280
+
281
+ .todo-drag-preview-content::before {
282
+ display: none;
283
+ }
284
+
285
+ .todo-row {
286
+ --todo-drop-indicator-color: var(--color-token-text-link-foreground, var(--color-text-accent, var(--notes-accent)));
287
+ --todo-drop-indicator-surface: var(--notes-bg);
288
+ }
289
+
290
+ .summary-shell .todo-row {
291
+ --todo-drop-indicator-surface: var(--notes-summary-bg);
292
+ }
293
+
294
+ .summary-shell .todo-drop-indicator {
295
+ left: -8px;
296
+ }
297
+
298
+ .todo-drop-indicator {
299
+ position: absolute;
300
+ right: 0;
301
+ left: 0;
302
+ z-index: 3;
303
+ display: none;
304
+ height: 0;
305
+ pointer-events: none;
306
+ }
307
+
308
+ .todo-row[data-drop-position="before"] > .todo-drop-indicator {
309
+ top: 0;
310
+ display: block;
311
+ }
312
+
313
+ .todo-row[data-drop-position="after"] > .todo-drop-indicator {
314
+ bottom: 0;
315
+ display: block;
316
+ }
317
+
318
+ .todo-drop-indicator::before {
319
+ position: absolute;
320
+ top: -1px;
321
+ right: 8px;
322
+ left: 8px;
323
+ height: 2px;
324
+ border-radius: 999px;
325
+ background: var(--todo-drop-indicator-color);
326
+ content: "";
327
+ }
328
+
329
+ .todo-drop-indicator::after {
330
+ position: absolute;
331
+ top: -4px;
332
+ left: 4px;
333
+ width: 8px;
334
+ height: 8px;
335
+ border: 2px solid var(--todo-drop-indicator-color);
336
+ border-radius: 50%;
337
+ background: var(--todo-drop-indicator-surface);
338
+ content: "";
339
+ }
340
+
341
+ .row-primary {
342
+ flex: 1 1 auto;
343
+ min-width: 0;
344
+ padding: 0;
345
+ overflow: hidden;
346
+ text-overflow: ellipsis;
347
+ white-space: nowrap;
348
+ color: inherit;
349
+ text-align: left;
350
+ font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
351
+ line-height: var(--codex-summary-label-line-height, 21px);
352
+ }
353
+
354
+ .row-actions {
355
+ flex: 0 0 auto;
356
+ display: flex;
357
+ align-items: center;
358
+ gap: 2px;
359
+ opacity: 0;
360
+ pointer-events: none;
361
+ }
362
+
363
+ .row:hover .row-actions,
364
+ .row:has(:focus-visible) .row-actions,
365
+ .prompt-row:has(.row-menu[open]) .row-actions {
366
+ opacity: 1;
367
+ pointer-events: auto;
368
+ }
369
+
370
+ .text-button,
371
+ .quiet-button,
372
+ .primary-button,
373
+ .page-action {
374
+ min-height: 24px;
375
+ display: inline-flex;
376
+ align-items: center;
377
+ justify-content: center;
378
+ white-space: nowrap;
379
+ }
380
+
381
+ .text-button,
382
+ .primary-button,
383
+ .page-action {
384
+ min-height: var(--spacing-token-button-composer, 28px);
385
+ border-radius: var(--radius-lg, 12.5px);
386
+ padding: 4px 9px;
387
+ font-size: var(--text-base, 14px);
388
+ font-weight: var(--codex-summary-font-weight, 445);
389
+ line-height: 18px;
390
+ transition: background-color 120ms ease, color 120ms ease, opacity 120ms ease;
391
+ }
392
+
393
+ .page-action {
394
+ gap: 4px;
395
+ padding-inline: 8px;
396
+ corner-shape: var(--codex-corner-shape, superellipse(1.5));
397
+ color: var(--notes-text);
398
+ background: var(--notes-hover);
399
+ }
400
+
401
+ .page-action:hover {
402
+ background: color-mix(in srgb, var(--notes-text) 10%, transparent);
403
+ }
404
+
405
+ .page-action:active {
406
+ background: color-mix(in srgb, var(--notes-text) 14%, transparent);
407
+ }
408
+
409
+ .icon.page-action-icon {
410
+ width: 16px;
411
+ height: 16px;
412
+ }
413
+
414
+ .text-button,
415
+ .quiet-button {
416
+ color: var(--notes-text-secondary);
417
+ }
418
+
419
+ .text-button:hover,
420
+ .quiet-button:hover {
421
+ color: var(--notes-text);
422
+ background: var(--notes-button-tertiary-hover);
423
+ }
424
+
425
+ .quiet-button {
426
+ width: 24px;
427
+ padding: 0;
428
+ }
429
+
430
+ .summary-shell .quiet-button {
431
+ width: 28px;
432
+ min-height: 28px;
433
+ border-radius: var(--codex-summary-control-radius, var(--radius-md, 10px));
434
+ }
435
+
436
+ .summary-shell .quiet-button:hover {
437
+ background: var(--notes-hover);
438
+ }
439
+
440
+ .summary-shell .section-header .quiet-button {
441
+ color: var(--codex-summary-icon-tertiary, var(--notes-text-tertiary));
442
+ }
443
+
444
+ .row-actions .quiet-button {
445
+ width: 28px;
446
+ min-height: 28px;
447
+ border-radius: var(--codex-summary-control-radius, var(--radius-md, 10px));
448
+ color: var(--color-token-text-tertiary, var(--notes-text-tertiary));
449
+ }
450
+
451
+ .row-actions .quiet-button:hover {
452
+ background: var(--notes-hover);
453
+ }
454
+
455
+ .row-actions .icon-trash-2 {
456
+ width: var(--codex-summary-delete-icon-size, 16px);
457
+ height: var(--codex-summary-delete-icon-size, 16px);
458
+ }
459
+
460
+ .file-row .row-actions .icon-trash-2 {
461
+ width: var(--codex-summary-file-action-icon-size, 15px);
462
+ height: var(--codex-summary-file-action-icon-size, 15px);
463
+ }
464
+
465
+ .file-row .row-actions .icon-external-link {
466
+ width: var(--codex-summary-file-action-icon-size, 15px);
467
+ height: var(--codex-summary-file-action-icon-size, 15px);
468
+ }
469
+
470
+ .prompt-row .row-actions .icon {
471
+ width: var(--codex-summary-prompt-action-icon-size, 15px);
472
+ height: var(--codex-summary-prompt-action-icon-size, 15px);
473
+ }
474
+
475
+ .todo-row .row-actions .icon-edit-pencil,
476
+ .prompt-row .row-actions .icon-edit-pencil {
477
+ width: var(--codex-summary-edit-icon-size, 16px);
478
+ height: var(--codex-summary-edit-icon-size, 16px);
479
+ }
480
+
481
+ .icon {
482
+ width: var(--codex-summary-icon-size, 18px);
483
+ height: var(--codex-summary-icon-size, 18px);
484
+ display: inline-block;
485
+ flex: 0 0 auto;
486
+ background-color: currentColor;
487
+ -webkit-mask: var(--icon-url) center / contain no-repeat;
488
+ mask: var(--icon-url) center / contain no-repeat;
489
+ }
490
+
491
+ .icon-circle { --icon-url: url("/icons/circle.svg"); }
492
+ .icon-circle-check { --icon-url: url("/icons/circle-check.svg"); }
493
+ .icon-ellipsis { --icon-url: url("/icons/ellipsis.svg"); }
494
+ .icon-external-link { --icon-url: url("/icons/external-link.svg"); }
495
+ .icon-attachment { --icon-url: url("/icons/attachment.svg"); }
496
+ .icon-list-todo { --icon-url: url("/icons/list-todo.svg"); }
497
+ .icon-message-square-quote { --icon-url: url("/icons/message-square-quote.svg"); }
498
+ .icon-paperclip { --icon-url: url("/icons/paperclip.svg"); }
499
+ .icon-edit-pencil { --icon-url: url("/icons/edit-pencil.svg"); }
500
+ .icon-star { --icon-url: url("/icons/star.svg"); }
501
+ .icon-star-off { --icon-url: url("/icons/star-off.svg"); }
502
+ .icon-plus { --icon-url: url("/icons/plus.svg"); }
503
+ .icon-trash-2 { --icon-url: url("/icons/trash-2.svg"); }
504
+ .icon-file-artifact-document { --icon-url: url("/icons/file-artifact-document.svg"); }
505
+ .icon-file-build { --icon-url: url("/icons/file-build.svg"); }
506
+ .icon-file-code { --icon-url: url("/icons/file-code.svg"); }
507
+ .icon-file-cplusplus { --icon-url: url("/icons/file-cplusplus.svg"); }
508
+ .icon-file-css { --icon-url: url("/icons/file-css.svg"); }
509
+ .icon-file-document { --icon-url: url("/icons/file-document.svg"); }
510
+ .icon-file-file { --icon-url: url("/icons/file-file.svg"); }
511
+ .icon-file-folder { --icon-url: url("/icons/file-folder.svg"); }
512
+ .icon-file-hashes { --icon-url: url("/icons/file-hashes.svg"); }
513
+ .icon-file-html { --icon-url: url("/icons/file-html.svg"); }
514
+ .icon-file-image { --icon-url: url("/icons/file-image.svg"); }
515
+ .icon-file-java { --icon-url: url("/icons/file-java.svg"); }
516
+ .icon-file-javascript { --icon-url: url("/icons/file-javascript.svg"); }
517
+ .icon-file-json { --icon-url: url("/icons/file-json.svg"); }
518
+ .icon-file-notebook { --icon-url: url("/icons/file-notebook.svg"); }
519
+ .icon-file-pdf { --icon-url: url("/icons/file-pdf.svg"); }
520
+ .icon-file-php { --icon-url: url("/icons/file-php.svg"); }
521
+ .icon-file-presentation { --icon-url: url("/icons/file-presentation.svg"); }
522
+ .icon-file-python { --icon-url: url("/icons/file-python.svg"); }
523
+ .icon-file-react { --icon-url: url("/icons/file-react.svg"); }
524
+ .icon-file-rust { --icon-url: url("/icons/file-rust.svg"); }
525
+ .icon-file-shell { --icon-url: url("/icons/file-shell.svg"); }
526
+ .icon-file-skill { --icon-url: url("/icons/file-skill.svg"); }
527
+ .icon-file-spreadsheet { --icon-url: url("/icons/file-spreadsheet.svg"); }
528
+ .icon-file-terminal { --icon-url: url("/icons/file-terminal.svg"); }
529
+ .icon-file-toml { --icon-url: url("/icons/file-toml.svg"); }
530
+ .icon-file-typescript { --icon-url: url("/icons/file-typescript.svg"); }
531
+
532
+ .primary-button {
533
+ color: var(--notes-button-text);
534
+ background: var(--notes-button-bg);
535
+ }
536
+
537
+ .primary-button:hover {
538
+ opacity: 0.86;
539
+ }
540
+
541
+ .primary-button:active {
542
+ opacity: 0.72;
543
+ }
544
+
545
+ .subtle {
546
+ color: var(--notes-button-tertiary-text);
547
+ }
548
+
549
+ .view-all {
550
+ width: calc(100% - 28px);
551
+ margin: 2px 14px 0;
552
+ display: flex;
553
+ align-items: center;
554
+ gap: 4px;
555
+ padding: 4px 0;
556
+ border-radius: var(--codex-summary-row-radius, var(--radius-sm, 7.5px));
557
+ color: var(--color-token-conversation-summary-trailing, var(--notes-text-tertiary));
558
+ text-align: left;
559
+ font-size: var(--codex-summary-row-font-size, 16px);
560
+ font-weight: var(--codex-summary-font-weight, 445);
561
+ line-height: var(--codex-summary-row-line-height, 24px);
562
+ }
563
+
564
+ .view-all:hover {
565
+ color: var(--notes-text);
566
+ }
567
+
568
+ .view-all-icon {
569
+ margin-right: 8px;
570
+ }
571
+
572
+ .view-all-label {
573
+ min-width: 0;
574
+ flex: 1 1 auto;
575
+ font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
576
+ line-height: var(--codex-summary-label-line-height, 21px);
577
+ }
578
+
579
+ .empty-row {
580
+ display: flex;
581
+ align-items: center;
582
+ padding: 4px 0;
583
+ color: var(--notes-text);
584
+ font-size: var(--codex-summary-label-font-size, var(--text-base, 14px));
585
+ line-height: var(--codex-summary-label-line-height, 21px);
586
+ }
587
+
588
+ .check-control {
589
+ width: 18px;
590
+ height: 18px;
591
+ display: grid;
592
+ place-items: center;
593
+ flex: 0 0 auto;
594
+ margin-right: 8px;
595
+ cursor: pointer;
596
+ }
597
+
598
+ .check-control input {
599
+ position: absolute;
600
+ opacity: 0;
601
+ pointer-events: none;
602
+ }
603
+
604
+ .check-control input:focus-visible + .todo-check-icon {
605
+ outline: 2px solid var(--notes-focus);
606
+ outline-offset: 2px;
607
+ }
608
+
609
+ .todo-check-icon {
610
+ width: var(--codex-summary-todo-unchecked-size, 16px);
611
+ height: var(--codex-summary-todo-unchecked-size, 16px);
612
+ box-sizing: border-box;
613
+ border: 1.3px solid var(--color-token-text-tertiary, var(--notes-text-tertiary));
614
+ border-radius: 50%;
615
+ }
616
+
617
+ .check-control input:checked + .todo-check-icon {
618
+ width: var(--codex-summary-icon-size, 18px);
619
+ height: var(--codex-summary-icon-size, 18px);
620
+ border: 0;
621
+ border-radius: 0;
622
+ background: var(--notes-accent);
623
+ -webkit-mask: url("/icons/circle-check.svg") center / contain no-repeat;
624
+ mask: url("/icons/circle-check.svg") center / contain no-repeat;
625
+ }
626
+
627
+ .is-completed .todo-label {
628
+ color: var(--notes-text-tertiary);
629
+ text-decoration: line-through;
630
+ }
631
+
632
+ .star-mark {
633
+ width: var(--codex-summary-prompt-star-icon-size, var(--codex-summary-file-icon-size, 16px));
634
+ height: var(--codex-summary-prompt-star-icon-size, var(--codex-summary-file-icon-size, 16px));
635
+ flex: 0 0 auto;
636
+ color: currentColor;
637
+ }
638
+
639
+ .prompt-star-leading {
640
+ color: var(--color-token-text-secondary, var(--notes-text-secondary));
641
+ }
642
+
643
+ .file-kind {
644
+ width: var(--codex-summary-file-icon-size, 16px);
645
+ height: var(--codex-summary-file-icon-size, 16px);
646
+ display: block;
647
+ flex: 0 0 auto;
648
+ color: currentColor;
649
+ }
650
+
651
+ .file-kind.is-color {
652
+ object-fit: contain;
653
+ }
654
+
655
+ .file-row {
656
+ color: var(--color-token-text-secondary, var(--notes-text-secondary));
657
+ }
658
+
659
+ .summary-leading {
660
+ width: var(--codex-summary-icon-size, 18px);
661
+ height: var(--codex-summary-icon-size, 18px);
662
+ display: flex;
663
+ align-items: center;
664
+ justify-content: center;
665
+ flex: 0 0 auto;
666
+ margin-right: 8px;
667
+ }
668
+
669
+ .file-leading {
670
+ position: relative;
671
+ }
672
+
673
+ .file-thumbnail {
674
+ width: 18px;
675
+ height: 18px;
676
+ display: block;
677
+ flex: 0 0 auto;
678
+ box-sizing: border-box;
679
+ border: 1px solid var(--color-token-border-default, var(--notes-border));
680
+ border-radius: 3px;
681
+ object-fit: cover;
682
+ }
683
+
684
+ .file-thumbnail-fallback {
685
+ display: none;
686
+ align-items: center;
687
+ justify-content: center;
688
+ }
689
+
690
+ .file-leading.is-fallback .file-thumbnail {
691
+ display: none;
692
+ }
693
+
694
+ .file-leading.is-fallback .file-thumbnail-fallback {
695
+ display: flex;
696
+ }
697
+
698
+ .row-menu {
699
+ position: relative;
700
+ }
701
+
702
+ .prompt-row:has(.row-menu[open]) {
703
+ z-index: 1;
704
+ }
705
+
706
+ .row-menu summary {
707
+ list-style: none;
708
+ cursor: pointer;
709
+ }
710
+
711
+ .row-menu summary::-webkit-details-marker {
712
+ display: none;
713
+ }
714
+
715
+ .row-menu[open] > summary {
716
+ color: var(--notes-text);
717
+ background: var(--notes-hover);
718
+ }
719
+
720
+ .menu-popover {
721
+ position: absolute;
722
+ z-index: 20;
723
+ top: calc(100% + 2px);
724
+ right: 0;
725
+ width: max-content;
726
+ min-width: var(--codex-summary-menu-min-width, 160px);
727
+ padding: var(--codex-summary-menu-padding, 4px);
728
+ border: 0;
729
+ border-radius: var(--codex-summary-menu-radius, var(--radius-xl, 15px));
730
+ background: color-mix(in srgb, var(--notes-bg-elevated) 90%, transparent);
731
+ box-shadow: var(--codex-summary-menu-shadow, 0 0 0 0.5px rgba(13, 13, 13, 0.075), 0 8px 16px -4px rgba(0, 0, 0, 0.12));
732
+ -webkit-backdrop-filter: blur(4px);
733
+ backdrop-filter: blur(4px);
734
+ font-size: var(--codex-summary-menu-font-size, var(--text-sm, 13px));
735
+ font-weight: var(--codex-summary-font-weight, 445);
736
+ line-height: var(--codex-summary-menu-line-height, var(--text-sm--line-height, 18.5714px));
737
+ }
738
+
739
+ .menu-popover button {
740
+ width: 100%;
741
+ min-height: var(--codex-summary-menu-item-height, 28.5714px);
742
+ display: flex;
743
+ align-items: center;
744
+ gap: var(--codex-summary-menu-icon-gap, 6px);
745
+ border-radius: var(--codex-summary-menu-item-radius, var(--radius-lg, 12.5px));
746
+ padding: 5px 8px;
747
+ color: var(--notes-text);
748
+ text-align: left;
749
+ }
750
+
751
+ .summary-shell .prompt-row .menu-popover .menu-item-icon {
752
+ width: var(--codex-summary-menu-icon-size, 16px);
753
+ height: var(--codex-summary-menu-icon-size, 16px);
754
+ color: currentColor;
755
+ opacity: var(--codex-summary-menu-icon-opacity, 0.75);
756
+ }
757
+
758
+ .menu-popover button:hover,
759
+ .menu-popover button:focus-visible {
760
+ outline: none;
761
+ background: var(--notes-hover);
762
+ }
763
+
764
+ .menu-popover button:hover .menu-item-icon,
765
+ .menu-popover button:focus-visible .menu-item-icon {
766
+ opacity: 1;
767
+ }
768
+
769
+ body[data-surface="editor"],
770
+ body[data-surface="editor"] #app {
771
+ height: 100vh;
772
+ min-height: 0;
773
+ overflow: hidden;
774
+ background: transparent;
775
+ }
776
+
777
+ .editor-modal-shell {
778
+ width: 100%;
779
+ height: 100vh;
780
+ padding: 4px;
781
+ overflow: hidden;
782
+ border-radius: var(--codex-dialog-radius, 20px);
783
+ corner-shape: var(--codex-dialog-corner-shape, round);
784
+ color: var(--notes-text);
785
+ background: var(--notes-summary-bg);
786
+ font-size: var(--text-base, 14px);
787
+ font-weight: var(--codex-summary-font-weight, 445);
788
+ line-height: 21px;
789
+ }
790
+
791
+ .modal-editor {
792
+ display: flex;
793
+ height: 100%;
794
+ min-height: 0;
795
+ flex-direction: column;
796
+ }
797
+
798
+ .modal-editor-title {
799
+ display: flex;
800
+ min-height: 36px;
801
+ flex: 0 0 36px;
802
+ align-items: center;
803
+ gap: 8px;
804
+ padding: 7px 12px 8px;
805
+ font-weight: inherit;
806
+ }
807
+
808
+ .modal-editor-title-icon {
809
+ width: var(--codex-dialog-title-icon-size, 18px);
810
+ height: var(--codex-dialog-title-icon-size, 18px);
811
+ color: var(--notes-text);
812
+ }
813
+
814
+ .modal-editor-fields {
815
+ display: flex;
816
+ min-height: 0;
817
+ flex: 1 1 auto;
818
+ flex-direction: column;
819
+ }
820
+
821
+ .modal-editor-fields input,
822
+ .modal-editor-fields textarea {
823
+ width: 100%;
824
+ min-height: 0;
825
+ border: 0;
826
+ border-radius: 0;
827
+ outline: none;
828
+ color: var(--notes-input-text);
829
+ background: transparent;
830
+ font-size: var(--text-base, 14px);
831
+ font-weight: inherit;
832
+ line-height: 21px;
833
+ }
834
+
835
+ .modal-editor-fields input:focus-visible,
836
+ .modal-editor-fields textarea:focus-visible {
837
+ outline: none;
838
+ box-shadow: inset 0 0 0 2px var(--notes-focus);
839
+ }
840
+
841
+ .modal-command:focus-visible {
842
+ outline: 2px solid var(--notes-focus);
843
+ outline-offset: 1px;
844
+ }
845
+
846
+ .modal-editor-fields input {
847
+ height: 36px;
848
+ flex: 0 0 36px;
849
+ padding: 7px 12px 8px;
850
+ }
851
+
852
+ .modal-editor-fields textarea {
853
+ flex: 1 1 auto;
854
+ padding: 8px 12px;
855
+ resize: none;
856
+ }
857
+
858
+ .modal-actions {
859
+ display: flex;
860
+ flex: 0 0 auto;
861
+ flex-direction: column;
862
+ gap: 4px;
863
+ padding: 4px 0;
864
+ border-top: 0.5px solid var(--notes-border);
865
+ }
866
+
867
+ .modal-command {
868
+ display: flex;
869
+ width: 100%;
870
+ min-height: 31px;
871
+ align-items: center;
872
+ justify-content: space-between;
873
+ padding: 5px 8px;
874
+ border-radius: var(--radius-lg, 12.5px);
875
+ corner-shape: var(--codex-corner-shape, superellipse(1.5));
876
+ color: var(--notes-text);
877
+ background: transparent;
878
+ font-weight: inherit;
879
+ line-height: 21px;
880
+ text-align: left;
881
+ }
882
+
883
+ .modal-command.is-default {
884
+ background: color-mix(in srgb, var(--notes-text) 5%, transparent);
885
+ }
886
+
887
+ .modal-command:disabled {
888
+ cursor: not-allowed;
889
+ opacity: var(--codex-dialog-command-disabled-opacity, 0.4);
890
+ }
891
+
892
+ .modal-command.is-default:disabled {
893
+ background: transparent;
894
+ }
895
+
896
+ .modal-command:disabled:hover,
897
+ .modal-command:disabled:focus-visible {
898
+ background: transparent;
899
+ }
900
+
901
+ .modal-command:hover,
902
+ .modal-command:focus-visible {
903
+ background: color-mix(in srgb, var(--notes-text) 10%, transparent);
904
+ }
905
+
906
+ .modal-command kbd {
907
+ min-width: 38px;
908
+ padding: 2px 7px;
909
+ border-radius: 10px;
910
+ color: var(--notes-text-secondary);
911
+ background: color-mix(in srgb, var(--notes-text) 10%, transparent);
912
+ font-family: inherit;
913
+ font-size: 12px;
914
+ font-weight: inherit;
915
+ line-height: 16px;
916
+ text-align: center;
917
+ }
918
+
919
+ input,
920
+ textarea {
921
+ width: 100%;
922
+ border: 1px solid var(--notes-input-border);
923
+ border-radius: var(--radius-md, 10px);
924
+ padding: 6px 10px;
925
+ color: var(--notes-input-text);
926
+ background: var(--notes-input-bg);
927
+ font-size: var(--text-base, 14px);
928
+ font-weight: var(--codex-summary-font-weight, 445);
929
+ line-height: 20px;
930
+ }
931
+
932
+ input::placeholder,
933
+ textarea::placeholder {
934
+ color: var(--notes-input-placeholder);
935
+ opacity: 1;
936
+ }
937
+
938
+ textarea {
939
+ resize: vertical;
940
+ min-height: 96px;
941
+ }
942
+
943
+ .full-shell {
944
+ width: 100%;
945
+ padding: 22px 16px 64px;
946
+ }
947
+
948
+ .page-header {
949
+ display: flex;
950
+ justify-content: space-between;
951
+ align-items: center;
952
+ gap: 20px;
953
+ padding: 4px 0 20px;
954
+ border-bottom: 0.5px solid var(--notes-border);
955
+ }
956
+
957
+ .page-header h1 {
958
+ margin: 0;
959
+ font-size: 22px;
960
+ line-height: 1.2;
961
+ letter-spacing: -0.02em;
962
+ }
963
+
964
+ .drop-hint {
965
+ margin: 6px 0 0;
966
+ color: var(--notes-text-secondary);
967
+ font-size: 13px;
968
+ line-height: 1.45;
969
+ }
970
+
971
+ .page-section {
972
+ margin-top: 18px;
973
+ }
974
+
975
+ .todo-page > .page-section:first-child,
976
+ .prompts-page > .page-section:first-of-type,
977
+ .files-page > .page-section:first-of-type {
978
+ margin-top: 0;
979
+ }
980
+
981
+ .prompts-page-actions {
982
+ display: flex;
983
+ min-height: var(--spacing-token-button-composer, 28px);
984
+ align-items: center;
985
+ justify-content: flex-end;
986
+ margin-bottom: 18px;
987
+ }
988
+
989
+ .prompts-page > .page-section + .page-section {
990
+ margin-top: 30px;
991
+ }
992
+
993
+ .page-section-title {
994
+ padding: 0 0 8px;
995
+ }
996
+
997
+ .page-section-title h2 {
998
+ margin: 0;
999
+ color: inherit;
1000
+ font: inherit;
1001
+ }
1002
+
1003
+ .page-section-heading {
1004
+ display: flex;
1005
+ min-width: 0;
1006
+ align-items: center;
1007
+ gap: 12px;
1008
+ }
1009
+
1010
+ .page-section-count {
1011
+ color: inherit;
1012
+ font: inherit;
1013
+ }
1014
+
1015
+ .full-list {
1016
+ padding: 2px 0;
1017
+ border-top: 0.5px solid var(--notes-border);
1018
+ }
1019
+
1020
+ .full-list .row {
1021
+ min-height: 36px;
1022
+ padding-inline: 7px;
1023
+ }
1024
+
1025
+ .prompts-page .prompt-row {
1026
+ min-height: 0;
1027
+ align-items: center;
1028
+ padding: 8px;
1029
+ }
1030
+
1031
+ .prompts-page .prompt-row.is-multiline {
1032
+ padding-block: 12px;
1033
+ }
1034
+
1035
+ .prompts-page .prompt-row + .prompt-row {
1036
+ border-top: 0.5px solid var(--notes-border);
1037
+ }
1038
+
1039
+ .prompts-page .prompt-label {
1040
+ display: -webkit-box;
1041
+ overflow: hidden;
1042
+ text-overflow: ellipsis;
1043
+ white-space: normal;
1044
+ -webkit-box-orient: vertical;
1045
+ -webkit-line-clamp: 4;
1046
+ }
1047
+
1048
+ .prompts-page .prompt-row .row-actions {
1049
+ align-self: center;
1050
+ }
1051
+
1052
+ .completed-section {
1053
+ margin-top: 30px;
1054
+ }
1055
+
1056
+ .drop-hint {
1057
+ padding: 10px 12px;
1058
+ border: 0.5px dashed var(--notes-border);
1059
+ border-radius: var(--notes-radius);
1060
+ transition: border-color 120ms ease, background 120ms ease;
1061
+ }
1062
+
1063
+ body.is-file-dragging .drop-hint,
1064
+ body.is-file-dragging .summary-shell {
1065
+ border-color: var(--notes-accent);
1066
+ background: color-mix(in srgb, var(--notes-accent), transparent 92%);
1067
+ }
1068
+
1069
+ .status-state {
1070
+ min-height: 220px;
1071
+ display: grid;
1072
+ place-content: center;
1073
+ justify-items: center;
1074
+ gap: 10px;
1075
+ color: var(--notes-text-secondary);
1076
+ }
1077
+
1078
+ .status-state p {
1079
+ margin: 0;
1080
+ }
1081
+
1082
+ .spinner {
1083
+ width: 16px;
1084
+ height: 16px;
1085
+ border: 2px solid var(--notes-border);
1086
+ border-top-color: var(--notes-accent);
1087
+ border-radius: 50%;
1088
+ animation: spin 700ms linear infinite;
1089
+ }
1090
+
1091
+ @keyframes spin {
1092
+ to { transform: rotate(360deg); }
1093
+ }
1094
+
1095
+ .toast {
1096
+ position: fixed;
1097
+ left: 50%;
1098
+ bottom: 14px;
1099
+ z-index: 40;
1100
+ max-width: calc(100% - 28px);
1101
+ padding: 7px 10px;
1102
+ border: 0.5px solid var(--notes-border);
1103
+ border-radius: 8px;
1104
+ color: var(--notes-text);
1105
+ background: var(--notes-bg-elevated);
1106
+ box-shadow: var(--notes-shadow);
1107
+ opacity: 0;
1108
+ transform: translate(-50%, 5px);
1109
+ pointer-events: none;
1110
+ transition: opacity 120ms ease, transform 120ms ease;
1111
+ white-space: nowrap;
1112
+ overflow: hidden;
1113
+ text-overflow: ellipsis;
1114
+ }
1115
+
1116
+ .toast.is-visible {
1117
+ opacity: 1;
1118
+ transform: translate(-50%, 0);
1119
+ }
1120
+
1121
+ .toast[data-tone="danger"] {
1122
+ color: var(--notes-danger);
1123
+ }
1124
+
1125
+ ::-webkit-scrollbar {
1126
+ width: 10px;
1127
+ }
1128
+
1129
+ ::-webkit-scrollbar-thumb {
1130
+ border: 3px solid transparent;
1131
+ border-radius: 999px;
1132
+ background-clip: padding-box;
1133
+ background-color: var(--color-token-scrollbar-slider-background, color-mix(in srgb, var(--notes-text-tertiary), transparent 45%));
1134
+ }
1135
+
1136
+ ::-webkit-scrollbar-thumb:hover {
1137
+ background-color: var(--color-token-scrollbar-slider-hover-background, var(--color-token-scrollbar-slider-background, var(--notes-text-tertiary)));
1138
+ }
1139
+
1140
+ ::-webkit-scrollbar-thumb:active {
1141
+ background-color: var(--color-token-scrollbar-slider-active-background, var(--color-token-scrollbar-slider-hover-background, var(--notes-text-tertiary)));
1142
+ }
1143
+
1144
+ @media (max-width: 520px) {
1145
+ .full-shell {
1146
+ padding: 16px 16px 48px;
1147
+ }
1148
+ }
1149
+
1150
+ @media (hover: none) {
1151
+ .row-actions {
1152
+ opacity: 1;
1153
+ pointer-events: auto;
1154
+ }
1155
+ }