flock-core 0.5.0b50__py3-none-any.whl → 0.5.0b51__py3-none-any.whl

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.

Potentially problematic release.


This version of flock-core might be problematic. Click here for more details.

Files changed (116) hide show
  1. flock/dashboard/launcher.py +1 -1
  2. flock/frontend/README.md +678 -0
  3. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  4. flock/frontend/index.html +12 -0
  5. flock/frontend/package-lock.json +4347 -0
  6. flock/frontend/package.json +48 -0
  7. flock/frontend/src/App.tsx +79 -0
  8. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +587 -0
  9. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +387 -0
  10. flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +640 -0
  11. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  12. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  13. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  14. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  15. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  16. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  17. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  18. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  19. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  20. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  21. flock/frontend/src/components/controls/PublishControl.css +547 -0
  22. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  23. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  24. flock/frontend/src/components/details/DetailWindowContainer.tsx +62 -0
  25. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  26. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  27. flock/frontend/src/components/details/MessageHistoryTab.tsx +299 -0
  28. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  29. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  30. flock/frontend/src/components/details/RunStatusTab.tsx +307 -0
  31. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  32. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  33. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  34. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  35. flock/frontend/src/components/filters/FilterBar.module.css +29 -0
  36. flock/frontend/src/components/filters/FilterBar.test.tsx +133 -0
  37. flock/frontend/src/components/filters/FilterBar.tsx +33 -0
  38. flock/frontend/src/components/filters/FilterPills.module.css +79 -0
  39. flock/frontend/src/components/filters/FilterPills.test.tsx +173 -0
  40. flock/frontend/src/components/filters/FilterPills.tsx +67 -0
  41. flock/frontend/src/components/filters/TimeRangeFilter.module.css +91 -0
  42. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  43. flock/frontend/src/components/filters/TimeRangeFilter.tsx +105 -0
  44. flock/frontend/src/components/graph/AgentNode.test.tsx +75 -0
  45. flock/frontend/src/components/graph/AgentNode.tsx +322 -0
  46. flock/frontend/src/components/graph/GraphCanvas.tsx +406 -0
  47. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  48. flock/frontend/src/components/graph/MessageNode.test.tsx +62 -0
  49. flock/frontend/src/components/graph/MessageNode.tsx +116 -0
  50. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  51. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  52. flock/frontend/src/components/layout/DashboardLayout.css +407 -0
  53. flock/frontend/src/components/layout/DashboardLayout.tsx +300 -0
  54. flock/frontend/src/components/layout/Header.module.css +88 -0
  55. flock/frontend/src/components/layout/Header.tsx +52 -0
  56. flock/frontend/src/components/modules/EventLogModule.test.tsx +401 -0
  57. flock/frontend/src/components/modules/EventLogModule.tsx +396 -0
  58. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +17 -0
  59. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  60. flock/frontend/src/components/modules/ModuleRegistry.ts +85 -0
  61. flock/frontend/src/components/modules/ModuleWindow.tsx +155 -0
  62. flock/frontend/src/components/modules/registerModules.ts +20 -0
  63. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  64. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  65. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  66. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  67. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  68. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  69. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  70. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  71. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  72. flock/frontend/src/hooks/useModules.ts +139 -0
  73. flock/frontend/src/hooks/usePersistence.ts +139 -0
  74. flock/frontend/src/main.tsx +13 -0
  75. flock/frontend/src/services/api.ts +213 -0
  76. flock/frontend/src/services/indexeddb.test.ts +793 -0
  77. flock/frontend/src/services/indexeddb.ts +794 -0
  78. flock/frontend/src/services/layout.test.ts +437 -0
  79. flock/frontend/src/services/layout.ts +146 -0
  80. flock/frontend/src/services/themeApplicator.ts +140 -0
  81. flock/frontend/src/services/themeService.ts +77 -0
  82. flock/frontend/src/services/websocket.test.ts +595 -0
  83. flock/frontend/src/services/websocket.ts +685 -0
  84. flock/frontend/src/store/filterStore.test.ts +242 -0
  85. flock/frontend/src/store/filterStore.ts +103 -0
  86. flock/frontend/src/store/graphStore.test.ts +186 -0
  87. flock/frontend/src/store/graphStore.ts +414 -0
  88. flock/frontend/src/store/moduleStore.test.ts +253 -0
  89. flock/frontend/src/store/moduleStore.ts +57 -0
  90. flock/frontend/src/store/settingsStore.ts +188 -0
  91. flock/frontend/src/store/streamStore.ts +68 -0
  92. flock/frontend/src/store/uiStore.test.ts +54 -0
  93. flock/frontend/src/store/uiStore.ts +110 -0
  94. flock/frontend/src/store/wsStore.ts +34 -0
  95. flock/frontend/src/styles/index.css +15 -0
  96. flock/frontend/src/styles/scrollbar.css +47 -0
  97. flock/frontend/src/styles/variables.css +488 -0
  98. flock/frontend/src/test/setup.ts +1 -0
  99. flock/frontend/src/types/filters.ts +14 -0
  100. flock/frontend/src/types/graph.ts +55 -0
  101. flock/frontend/src/types/modules.ts +7 -0
  102. flock/frontend/src/types/theme.ts +55 -0
  103. flock/frontend/src/utils/mockData.ts +85 -0
  104. flock/frontend/src/utils/performance.ts +16 -0
  105. flock/frontend/src/utils/transforms.test.ts +860 -0
  106. flock/frontend/src/utils/transforms.ts +323 -0
  107. flock/frontend/src/vite-env.d.ts +17 -0
  108. flock/frontend/tsconfig.json +27 -0
  109. flock/frontend/tsconfig.node.json +11 -0
  110. flock/frontend/vite.config.ts +25 -0
  111. flock/frontend/vitest.config.ts +11 -0
  112. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b51.dist-info}/METADATA +1 -1
  113. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b51.dist-info}/RECORD +116 -6
  114. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b51.dist-info}/WHEEL +0 -0
  115. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b51.dist-info}/entry_points.txt +0 -0
  116. {flock_core-0.5.0b50.dist-info → flock_core-0.5.0b51.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,547 @@
1
+ /* ========================================
2
+ PublishControl Panel Styles
3
+ Matching SettingsPanel Design
4
+ ======================================== */
5
+
6
+ .publish-control-panel {
7
+ position: fixed;
8
+ top: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ width: 400px;
12
+ z-index: 1000;
13
+
14
+ /* Glassmorphism */
15
+ background: var(--color-glass-bg);
16
+ backdrop-filter: blur(var(--blur-lg));
17
+ border-left: var(--border-default);
18
+ box-shadow: var(--shadow-xl);
19
+
20
+ /* Animation */
21
+ animation: slideInRight var(--duration-slow) var(--ease-smooth);
22
+ }
23
+
24
+ .publish-control-panel-inner {
25
+ display: flex;
26
+ flex-direction: column;
27
+ height: 100%;
28
+ overflow: hidden;
29
+ }
30
+
31
+ /* ========================================
32
+ Header
33
+ ======================================== */
34
+
35
+ .publish-control-header {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ padding: var(--space-layout-sm);
40
+ border-bottom: var(--border-subtle);
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ .publish-control-title {
45
+ /* Typography */
46
+ font-size: var(--font-size-h3);
47
+ font-weight: var(--font-weight-semibold);
48
+ color: var(--color-text-primary);
49
+ margin: 0;
50
+ }
51
+
52
+ .publish-control-close-button {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 32px;
57
+ height: 32px;
58
+ padding: 0;
59
+ background: transparent;
60
+ border: none;
61
+ border-radius: var(--radius-md);
62
+ color: var(--color-text-secondary);
63
+ cursor: pointer;
64
+ transition: var(--transition-all);
65
+ }
66
+
67
+ .publish-control-close-button:hover {
68
+ background: var(--color-bg-overlay);
69
+ color: var(--color-text-primary);
70
+ }
71
+
72
+ .publish-control-close-button:active {
73
+ background: var(--color-bg-surface);
74
+ transform: scale(0.95);
75
+ }
76
+
77
+ /* ========================================
78
+ Content Area
79
+ ======================================== */
80
+
81
+ .publish-control-content {
82
+ flex: 1;
83
+ overflow-y: auto;
84
+ padding: var(--space-layout-sm);
85
+ }
86
+
87
+ /* Custom scrollbar */
88
+ .publish-control-content::-webkit-scrollbar {
89
+ width: 8px;
90
+ }
91
+
92
+ .publish-control-content::-webkit-scrollbar-track {
93
+ background: var(--color-bg-base);
94
+ }
95
+
96
+ .publish-control-content::-webkit-scrollbar-thumb {
97
+ background: var(--color-bg-overlay);
98
+ border-radius: var(--radius-full);
99
+ }
100
+
101
+ .publish-control-content::-webkit-scrollbar-thumb:hover {
102
+ background: var(--color-border-default);
103
+ }
104
+
105
+ .publish-control__form {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: var(--space-component-lg);
109
+ }
110
+
111
+ /* ========================================
112
+ Form Fields
113
+ ======================================== */
114
+
115
+ .publish-control__field {
116
+ display: flex;
117
+ flex-direction: column;
118
+ gap: var(--gap-sm);
119
+ }
120
+
121
+ .publish-control__label {
122
+ /* Typography */
123
+ font-size: var(--font-size-body-sm);
124
+ font-weight: var(--font-weight-medium);
125
+ color: var(--color-text-secondary);
126
+ line-height: var(--line-height-normal);
127
+
128
+ /* Spacing */
129
+ margin: 0;
130
+ }
131
+
132
+ /* ========================================
133
+ Select Dropdown
134
+ ======================================== */
135
+
136
+ .publish-control__select {
137
+ /* Layout */
138
+ width: 100%;
139
+ padding: var(--space-component-sm) var(--space-component-md);
140
+ padding-right: var(--spacing-8);
141
+ border-radius: var(--radius-md);
142
+
143
+ /* Typography */
144
+ font-family: var(--font-family-sans);
145
+ font-size: var(--font-size-body-sm);
146
+ line-height: var(--line-height-normal);
147
+
148
+ /* Colors */
149
+ background: var(--color-bg-elevated);
150
+ color: var(--color-text-primary);
151
+ border: var(--border-default);
152
+
153
+ /* Appearance */
154
+ appearance: none;
155
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2394a3b8' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
156
+ background-repeat: no-repeat;
157
+ background-position: right var(--spacing-3) center;
158
+
159
+ /* Effects */
160
+ cursor: pointer;
161
+ transition: var(--transition-colors), var(--transition-shadow);
162
+ }
163
+
164
+ .publish-control__select:hover:not(:disabled) {
165
+ border-color: var(--color-border-strong);
166
+ }
167
+
168
+ .publish-control__select:focus {
169
+ outline: none;
170
+ border-color: var(--color-border-focus);
171
+ box-shadow: var(--shadow-glow-primary);
172
+ }
173
+
174
+ .publish-control__select:disabled {
175
+ background: var(--color-bg-base);
176
+ color: var(--color-text-disabled);
177
+ cursor: not-allowed;
178
+ opacity: 0.6;
179
+ }
180
+
181
+ .publish-control__select--error {
182
+ border-color: var(--color-border-error);
183
+ }
184
+
185
+ .publish-control__select--error:focus {
186
+ box-shadow: var(--shadow-glow-error);
187
+ }
188
+
189
+ /* ========================================
190
+ Text Input
191
+ ======================================== */
192
+
193
+ .publish-control__input {
194
+ /* Layout */
195
+ width: 100%;
196
+ padding: var(--space-component-sm) var(--space-component-md);
197
+ border-radius: var(--radius-md);
198
+
199
+ /* Typography */
200
+ font-family: var(--font-family-sans);
201
+ font-size: var(--font-size-body-sm);
202
+ line-height: var(--line-height-normal);
203
+
204
+ /* Colors */
205
+ background: var(--color-bg-elevated);
206
+ color: var(--color-text-primary);
207
+ border: var(--border-default);
208
+
209
+ /* Effects */
210
+ transition: var(--transition-colors), var(--transition-shadow);
211
+ }
212
+
213
+ .publish-control__input::placeholder {
214
+ color: var(--color-text-muted);
215
+ }
216
+
217
+ .publish-control__input:hover:not(:disabled) {
218
+ border-color: var(--color-border-strong);
219
+ }
220
+
221
+ .publish-control__input:focus {
222
+ outline: none;
223
+ border-color: var(--color-border-focus);
224
+ box-shadow: var(--shadow-glow-primary);
225
+ }
226
+
227
+ .publish-control__input:disabled {
228
+ background: var(--color-bg-base);
229
+ color: var(--color-text-disabled);
230
+ cursor: not-allowed;
231
+ opacity: 0.6;
232
+ }
233
+
234
+ .publish-control__input--error {
235
+ border-color: var(--color-border-error);
236
+ }
237
+
238
+ .publish-control__input--error:focus {
239
+ box-shadow: var(--shadow-glow-error);
240
+ }
241
+
242
+ /* ========================================
243
+ Textarea
244
+ ======================================== */
245
+
246
+ .publish-control__textarea {
247
+ /* Layout */
248
+ width: 100%;
249
+ padding: var(--space-component-sm) var(--space-component-md);
250
+ border-radius: var(--radius-md);
251
+ min-height: 180px;
252
+
253
+ /* Typography */
254
+ font-family: var(--font-family-mono);
255
+ font-size: var(--font-size-body-sm);
256
+ line-height: var(--line-height-relaxed);
257
+
258
+ /* Colors */
259
+ background: var(--color-bg-elevated);
260
+ color: var(--color-text-primary);
261
+ border: var(--border-default);
262
+
263
+ /* Behavior */
264
+ resize: vertical;
265
+
266
+ /* Effects */
267
+ transition: var(--transition-colors), var(--transition-shadow);
268
+ }
269
+
270
+ .publish-control__textarea::placeholder {
271
+ color: var(--color-text-muted);
272
+ font-family: var(--font-family-mono);
273
+ }
274
+
275
+ .publish-control__textarea:hover:not(:disabled) {
276
+ border-color: var(--color-border-strong);
277
+ }
278
+
279
+ .publish-control__textarea:focus {
280
+ outline: none;
281
+ border-color: var(--color-border-focus);
282
+ box-shadow: var(--shadow-glow-primary);
283
+ }
284
+
285
+ .publish-control__textarea:disabled {
286
+ background: var(--color-bg-base);
287
+ color: var(--color-text-disabled);
288
+ cursor: not-allowed;
289
+ opacity: 0.6;
290
+ }
291
+
292
+ .publish-control__textarea--error {
293
+ border-color: var(--color-border-error);
294
+ }
295
+
296
+ .publish-control__textarea--error:focus {
297
+ box-shadow: var(--shadow-glow-error);
298
+ }
299
+
300
+ /* ========================================
301
+ Checkbox
302
+ ======================================== */
303
+
304
+ .publish-control__checkbox-wrapper {
305
+ display: flex;
306
+ align-items: center;
307
+ gap: var(--gap-sm);
308
+ padding: var(--space-component-sm) 0;
309
+ }
310
+
311
+ .publish-control__checkbox {
312
+ /* Size */
313
+ width: 18px;
314
+ height: 18px;
315
+
316
+ /* Colors */
317
+ accent-color: var(--color-primary-500);
318
+
319
+ /* Effects */
320
+ cursor: pointer;
321
+ transition: var(--transition-colors);
322
+ }
323
+
324
+ .publish-control__checkbox:disabled {
325
+ cursor: not-allowed;
326
+ opacity: 0.5;
327
+ }
328
+
329
+ .publish-control__checkbox:focus-visible {
330
+ outline: 2px solid var(--color-border-focus);
331
+ outline-offset: 2px;
332
+ border-radius: var(--radius-sm);
333
+ }
334
+
335
+ .publish-control__checkbox-label {
336
+ /* Typography */
337
+ font-size: var(--font-size-body-sm);
338
+ font-weight: var(--font-weight-regular);
339
+ color: var(--color-text-secondary);
340
+ line-height: var(--line-height-normal);
341
+
342
+ /* Behavior */
343
+ cursor: pointer;
344
+ user-select: none;
345
+ margin: 0;
346
+ }
347
+
348
+ .publish-control__checkbox:disabled + .publish-control__checkbox-label {
349
+ cursor: not-allowed;
350
+ opacity: 0.5;
351
+ }
352
+
353
+ /* ========================================
354
+ Submit Button
355
+ ======================================== */
356
+
357
+ .publish-control__submit {
358
+ /* Layout */
359
+ width: 100%;
360
+ padding: var(--space-component-sm) var(--space-component-lg);
361
+ border-radius: var(--radius-md);
362
+ border: none;
363
+
364
+ /* Typography */
365
+ font-family: var(--font-family-sans);
366
+ font-size: var(--font-size-body-sm);
367
+ font-weight: var(--font-weight-semibold);
368
+ line-height: var(--line-height-normal);
369
+
370
+ /* Colors */
371
+ background: var(--color-primary-500);
372
+ color: var(--color-text-on-primary);
373
+
374
+ /* Effects */
375
+ box-shadow: var(--shadow-sm);
376
+ cursor: pointer;
377
+ transition: var(--transition-colors), var(--transition-shadow);
378
+ user-select: none;
379
+ }
380
+
381
+ .publish-control__submit:hover:not(:disabled) {
382
+ background: var(--color-primary-600);
383
+ box-shadow: var(--shadow-md);
384
+ transform: translateY(-1px);
385
+ }
386
+
387
+ .publish-control__submit:active:not(:disabled) {
388
+ background: var(--color-primary-700);
389
+ box-shadow: var(--shadow-xs);
390
+ transform: translateY(0);
391
+ }
392
+
393
+ .publish-control__submit:focus-visible {
394
+ outline: none;
395
+ box-shadow: var(--shadow-glow-primary);
396
+ }
397
+
398
+ .publish-control__submit:disabled {
399
+ background: var(--color-bg-overlay);
400
+ color: var(--color-text-disabled);
401
+ cursor: not-allowed;
402
+ box-shadow: none;
403
+ transform: none;
404
+ opacity: 0.6;
405
+ }
406
+
407
+ /* ========================================
408
+ Error Messages
409
+ ======================================== */
410
+
411
+ .publish-control__error-text {
412
+ /* Typography */
413
+ font-size: var(--font-size-caption);
414
+ font-weight: var(--font-weight-regular);
415
+ line-height: var(--line-height-normal);
416
+
417
+ /* Colors */
418
+ color: var(--color-error-light);
419
+
420
+ /* Spacing */
421
+ margin: 0;
422
+
423
+ /* Animation */
424
+ animation: slideDown var(--duration-fast) var(--ease-out);
425
+ }
426
+
427
+ /* ========================================
428
+ Success/Error Messages
429
+ ======================================== */
430
+
431
+ .publish-control__message {
432
+ /* Layout */
433
+ padding: var(--space-component-md);
434
+ border-radius: var(--radius-md);
435
+
436
+ /* Typography */
437
+ font-size: var(--font-size-body-sm);
438
+ font-weight: var(--font-weight-regular);
439
+ line-height: var(--line-height-normal);
440
+
441
+ /* Effects */
442
+ border: var(--border-width-1) solid;
443
+ animation: slideDown var(--duration-normal) var(--ease-out);
444
+ }
445
+
446
+ .publish-control__message--success {
447
+ background: var(--color-success-bg);
448
+ color: var(--color-success-light);
449
+ border-color: var(--color-success-border);
450
+ }
451
+
452
+ .publish-control__message--error {
453
+ background: var(--color-error-bg);
454
+ color: var(--color-error-light);
455
+ border-color: var(--color-error-border);
456
+ }
457
+
458
+ /* ========================================
459
+ Animations
460
+ ======================================== */
461
+
462
+ @keyframes slideDown {
463
+ from {
464
+ opacity: 0;
465
+ transform: translateY(-8px);
466
+ }
467
+ to {
468
+ opacity: 1;
469
+ transform: translateY(0);
470
+ }
471
+ }
472
+
473
+ @keyframes slideInRight {
474
+ from {
475
+ transform: translateX(100%);
476
+ opacity: 0;
477
+ }
478
+ to {
479
+ transform: translateX(0);
480
+ opacity: 1;
481
+ }
482
+ }
483
+
484
+ /* ========================================
485
+ Hints and Helper Text
486
+ ======================================== */
487
+
488
+ .publish-control__field-hint {
489
+ /* Typography */
490
+ font-size: var(--font-size-caption);
491
+ font-weight: var(--font-weight-regular);
492
+ color: var(--color-text-tertiary);
493
+ font-style: italic;
494
+ }
495
+
496
+ .publish-control__hint {
497
+ /* Typography */
498
+ font-size: var(--font-size-body-sm);
499
+ font-weight: var(--font-weight-regular);
500
+ color: var(--color-text-secondary);
501
+ line-height: var(--line-height-normal);
502
+
503
+ /* Spacing */
504
+ margin: 0;
505
+ padding: var(--space-component-md);
506
+
507
+ /* Visual */
508
+ text-align: center;
509
+ opacity: 0.7;
510
+ }
511
+
512
+ /* ========================================
513
+ Accessibility - Reduced Motion
514
+ ======================================== */
515
+
516
+ @media (prefers-reduced-motion: reduce) {
517
+ .publish-control-panel {
518
+ animation-duration: 0.01ms !important;
519
+ }
520
+
521
+ .publish-control__submit,
522
+ .publish-control__select,
523
+ .publish-control__input,
524
+ .publish-control__textarea,
525
+ .publish-control__checkbox,
526
+ .publish-control__message,
527
+ .publish-control__error-text,
528
+ .publish-control-close-button {
529
+ animation-duration: 0.01ms !important;
530
+ transition-duration: 0.01ms !important;
531
+ }
532
+
533
+ .publish-control__submit:hover:not(:disabled) {
534
+ transform: none;
535
+ }
536
+ }
537
+
538
+ /* ========================================
539
+ Responsive Design
540
+ ======================================== */
541
+
542
+ @media (max-width: 768px) {
543
+ .publish-control-panel {
544
+ width: 100%;
545
+ left: 0;
546
+ }
547
+ }