PyMieSimX 0.1.0__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.
Files changed (39) hide show
  1. PyMieSimX/__init__.py +5 -0
  2. PyMieSimX/__main__.py +35 -0
  3. PyMieSimX/gui/__init__.py +5 -0
  4. PyMieSimX/gui/assets/card-state.js +41 -0
  5. PyMieSimX/gui/assets/dashboard.css +3352 -0
  6. PyMieSimX/gui/assets/default-settings.json +32 -0
  7. PyMieSimX/gui/assets/logo.png +0 -0
  8. PyMieSimX/gui/assets/pymiesim-favicon.svg +6 -0
  9. PyMieSimX/gui/assets/pymiesim-logo-dark.svg +15 -0
  10. PyMieSimX/gui/assets/pymiesim-logo.svg +39 -0
  11. PyMieSimX/gui/components/__init__.py +5 -0
  12. PyMieSimX/gui/components/cards.py +64 -0
  13. PyMieSimX/gui/defaults.py +18 -0
  14. PyMieSimX/gui/interface.py +688 -0
  15. PyMieSimX/gui/layout.py +329 -0
  16. PyMieSimX/gui/pages/__init__.py +9 -0
  17. PyMieSimX/gui/pages/citation.py +66 -0
  18. PyMieSimX/gui/pages/documentation.py +132 -0
  19. PyMieSimX/gui/pages/experiment/__init__.py +5 -0
  20. PyMieSimX/gui/pages/experiment/page.py +49 -0
  21. PyMieSimX/gui/pages/experiment/sections/__init__.py +5 -0
  22. PyMieSimX/gui/pages/experiment/sections/configuration.py +42 -0
  23. PyMieSimX/gui/pages/home.py +152 -0
  24. PyMieSimX/gui/pages/install_local.py +110 -0
  25. PyMieSimX/gui/pages/settings.py +87 -0
  26. PyMieSimX/gui/pages/single/__init__.py +5 -0
  27. PyMieSimX/gui/pages/single/page.py +28 -0
  28. PyMieSimX/gui/pages/single/sections/__init__.py +6 -0
  29. PyMieSimX/gui/pages/single/sections/representations.py +38 -0
  30. PyMieSimX/gui/pages/single/sections/setup.py +27 -0
  31. PyMieSimX/gui/parsing.py +149 -0
  32. PyMieSimX/gui/schemas.py +118 -0
  33. PyMieSimX/gui/services.py +735 -0
  34. pymiesimx-0.1.0.dist-info/METADATA +90 -0
  35. pymiesimx-0.1.0.dist-info/RECORD +39 -0
  36. pymiesimx-0.1.0.dist-info/WHEEL +5 -0
  37. pymiesimx-0.1.0.dist-info/entry_points.txt +2 -0
  38. pymiesimx-0.1.0.dist-info/licenses/LICENSE +21 -0
  39. pymiesimx-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,3352 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=Fraunces:opsz,wght@9..144,500;9..144,700&display=swap");
2
+
3
+ :root {
4
+ --bg: #eef3f8;
5
+ --panel: rgba(255, 255, 255, 0.96);
6
+ --panel-strong: #ffffff;
7
+ --ink: #1d3440;
8
+ --muted: #5e717b;
9
+ --line: rgba(29, 52, 64, 0.14);
10
+ --accent: #2c78b4;
11
+ --accent-soft: rgba(44, 120, 180, 0.12);
12
+ --success: #1c7c54;
13
+ --error: #b6453d;
14
+ --shadow: 0 8px 24px rgba(26, 44, 52, 0.08);
15
+ }
16
+
17
+ .main-tabs {
18
+ margin-bottom: 22px;
19
+ }
20
+
21
+ .main-tabs.workspace-hidden {
22
+ display: none !important;
23
+ }
24
+
25
+ .main-tabs.workspace-visible {
26
+ display: block !important;
27
+ }
28
+
29
+ .main-tabs > .tab-container {
30
+ display: none !important;
31
+ }
32
+
33
+ .main-tab {
34
+ background: transparent !important;
35
+ border: 0 !important;
36
+ color: var(--muted) !important;
37
+ font-family: "IBM Plex Sans", sans-serif;
38
+ font-weight: 600;
39
+ padding: 12px 20px !important;
40
+ }
41
+
42
+ .main-tab--selected {
43
+ background: var(--panel) !important;
44
+ border: 1px solid var(--line) !important;
45
+ border-radius: 999px !important;
46
+ color: var(--accent) !important;
47
+ box-shadow: var(--shadow);
48
+ }
49
+
50
+ .tab-content-stack,
51
+ .single-workspace {
52
+ display: grid;
53
+ gap: 22px;
54
+ }
55
+
56
+ .single-workspace {
57
+ grid-template-columns: minmax(300px, 380px) minmax(0, 1fr);
58
+ }
59
+
60
+ .single-graph-panel {
61
+ min-height: 560px;
62
+ }
63
+
64
+ .single-graph-panel .js-plotly-plot,
65
+ .single-graph-panel .plot-container {
66
+ min-height: 520px;
67
+ }
68
+
69
+ @media (max-width: 1080px) {
70
+ .single-workspace {
71
+ grid-template-columns: 1fr;
72
+ }
73
+ }
74
+
75
+ /* RosettaX application shell: compact white cards, blue section accents, and
76
+ a quiet fixed navigation rail. */
77
+ body {
78
+ background: #ffffff;
79
+ color: #212529;
80
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
81
+ font-size: .95rem;
82
+ }
83
+
84
+ .app-shell {
85
+ max-width: none;
86
+ padding: 0;
87
+ }
88
+
89
+ .dashboard-frame {
90
+ grid-template-columns: 210px minmax(0, 1fr);
91
+ gap: 0;
92
+ min-height: 100vh;
93
+ }
94
+
95
+ .dashboard-sidebar {
96
+ position: sticky;
97
+ top: 0;
98
+ height: 100vh;
99
+ padding: 12px 8px;
100
+ border: 0;
101
+ border-radius: 0;
102
+ background: #ffffff;
103
+ box-shadow: none;
104
+ }
105
+
106
+ .sidebar-logo {
107
+ width: 190px;
108
+ max-width: 100%;
109
+ margin: 0 auto 8px;
110
+ }
111
+
112
+ .sidebar-nav {
113
+ gap: 2px;
114
+ }
115
+
116
+ .sidebar-link {
117
+ padding: 7px 10px;
118
+ border: 0;
119
+ border-radius: 8px;
120
+ background: transparent;
121
+ color: #343a40;
122
+ font-size: .92rem;
123
+ font-weight: 500;
124
+ }
125
+
126
+ .plot-controls-panel,
127
+ .run-panel,
128
+ .helper-panel {
129
+ padding-bottom: 12px;
130
+ }
131
+
132
+ .plot-controls-panel > .helper-copy,
133
+ .plot-controls-panel > .run-controls-grid,
134
+ .run-panel > .run-panel-copy,
135
+ .run-panel > .run-actions,
136
+ .run-panel > .status-banner,
137
+ .helper-panel > .helper-copy,
138
+ .helper-panel > .helper-examples {
139
+ margin-left: 12px;
140
+ margin-right: 12px;
141
+ }
142
+
143
+ .run-panel > .run-actions {
144
+ margin-bottom: 12px;
145
+ }
146
+
147
+ .run-panel > .status-banner {
148
+ margin-bottom: 0;
149
+ }
150
+
151
+ .settings-grid {
152
+ display: grid;
153
+ grid-template-columns: minmax(0, 1fr);
154
+ gap: 12px;
155
+ }
156
+
157
+ .settings-card-body {
158
+ min-height: 124px;
159
+ }
160
+
161
+ .settings-card-subtitle {
162
+ margin-left: auto;
163
+ color: #6c7c85;
164
+ font-size: .72rem;
165
+ font-weight: 500;
166
+ }
167
+
168
+ .settings-form-grid {
169
+ display: grid;
170
+ grid-template-columns: repeat(3, minmax(0, 1fr));
171
+ gap: 14px;
172
+ }
173
+
174
+ .settings-field {
175
+ min-width: 0;
176
+ }
177
+
178
+ .plot-options-card {
179
+ margin: 12px 14px 14px;
180
+ padding: 12px 14px 14px;
181
+ border: 1px solid rgba(96, 110, 123, .20);
182
+ border-radius: 8px;
183
+ background: #f1f3f5;
184
+ }
185
+
186
+ .export-actions {
187
+ display: flex;
188
+ justify-content: flex-end;
189
+ margin: 0 14px 14px;
190
+ }
191
+
192
+ .export-actions .export-button {
193
+ min-width: 220px;
194
+ background: #f7f9fb;
195
+ color: #2f4358;
196
+ border: 1px solid #c7d1d9;
197
+ }
198
+
199
+ .plot-options-title {
200
+ margin-bottom: 10px;
201
+ color: #52616d;
202
+ font-size: .78rem;
203
+ font-weight: 750;
204
+ letter-spacing: .04em;
205
+ text-transform: uppercase;
206
+ }
207
+
208
+ .plot-options-grid {
209
+ display: grid;
210
+ grid-template-columns: repeat(8, minmax(104px, 1fr));
211
+ gap: 10px 12px;
212
+ }
213
+
214
+ .plot-option-field {
215
+ min-width: 0;
216
+ }
217
+
218
+ .plot-option-field label {
219
+ display: block;
220
+ margin-bottom: 4px;
221
+ color: #63727c;
222
+ font-size: .72rem;
223
+ font-weight: 650;
224
+ }
225
+
226
+ .plot-option-control {
227
+ width: 104px;
228
+ min-width: 104px;
229
+ min-height: 34px;
230
+ font-size: .82rem;
231
+ }
232
+
233
+ html .plot-option-control.dashboard-dropdown {
234
+ width: 104px;
235
+ min-width: 104px;
236
+ height: 38px;
237
+ min-height: 38px;
238
+ }
239
+
240
+ html .plot-option-control.dashboard-dropdown .Select-control {
241
+ width: 104px;
242
+ height: 38px;
243
+ min-height: 38px;
244
+ }
245
+
246
+ /* Keep numeric plot controls visually consistent with the dropdowns, while
247
+ keeping their compact values from stretching across the whole grid cell. */
248
+ html .plot-number-control {
249
+ box-sizing: border-box;
250
+ width: 104px;
251
+ height: 38px;
252
+ min-height: 38px;
253
+ padding: 7px 10px;
254
+ border: 1px solid var(--line);
255
+ border-radius: 4px;
256
+ background: var(--panel-strong);
257
+ color: var(--ink);
258
+ font-size: .95rem;
259
+ font-weight: 500;
260
+ line-height: 1.2;
261
+ }
262
+
263
+ html .plot-number-control:focus {
264
+ border-color: rgba(44, 120, 180, .65);
265
+ box-shadow: 0 0 0 2px rgba(44, 120, 180, .18);
266
+ }
267
+
268
+ @media (max-width: 900px) {
269
+ .plot-options-grid {
270
+ grid-template-columns: repeat(4, minmax(104px, 1fr));
271
+ }
272
+ }
273
+
274
+ @media (max-width: 520px) {
275
+ .plot-options-grid {
276
+ grid-template-columns: 1fr;
277
+ }
278
+ }
279
+
280
+ .settings-field-wide {
281
+ grid-column: span 3;
282
+ }
283
+
284
+ .settings-layout-fields {
285
+ grid-template-columns: repeat(2, minmax(0, 1fr));
286
+ }
287
+
288
+ .settings-label {
289
+ display: block;
290
+ margin-bottom: 6px;
291
+ color: #52697a;
292
+ font-size: .82rem;
293
+ font-weight: 700;
294
+ }
295
+
296
+ .settings-number-input {
297
+ width: 100%;
298
+ box-sizing: border-box;
299
+ min-height: 38px;
300
+ padding: 7px 10px;
301
+ border: 1px solid #cbd8e2;
302
+ border-radius: 4px;
303
+ color: #26323b;
304
+ background: #fff;
305
+ }
306
+
307
+ .settings-help,
308
+ .settings-save-status {
309
+ margin: 12px 0 0;
310
+ color: #6c7c85;
311
+ font-size: .82rem;
312
+ line-height: 1.4;
313
+ }
314
+
315
+ .settings-note {
316
+ grid-column: 1 / -1;
317
+ }
318
+
319
+ @media (max-width: 900px) {
320
+ .settings-form-grid,
321
+ .settings-layout-fields {
322
+ grid-template-columns: 1fr;
323
+ }
324
+
325
+ .settings-field-wide,
326
+ .settings-note {
327
+ grid-column: auto;
328
+ }
329
+ }
330
+
331
+ /* Final RosettaX typography parity. */
332
+ html body { font-size: 1rem !important; }
333
+
334
+ .home-page-hero h1 {
335
+ font-size: 2.55rem;
336
+ font-weight: 800;
337
+ line-height: 1.05;
338
+ margin-bottom: 8px;
339
+ }
340
+
341
+ .home-page-hero .hero-text { font-size: 1.08rem; line-height: normal; }
342
+
343
+ .documentation-page-hero h1 {
344
+ font-size: 2.45rem;
345
+ font-weight: 800;
346
+ line-height: 1.05;
347
+ margin-bottom: 10px;
348
+ }
349
+
350
+ .documentation-page-hero .hero-text { font-size: 1.05rem; line-height: normal; }
351
+ html .home-info-copy { font-size: .95rem !important; }
352
+ html .home-capability-card .home-section-header { font-size: 1.08rem !important; line-height: 1.2; }
353
+ html .home-capability-body > p { min-height: 66px; font-size: 1rem !important; line-height: normal; }
354
+ html .home-step-list { font-size: .9rem !important; }
355
+ html .home-step-number { font-size: .78rem !important; }
356
+ html .home-button, html .home-workflow-button { font-size: 1rem !important; }
357
+ html .home-metric-value { font-size: 2rem !important; }
358
+ html .home-metric-tile { font-size: .92rem !important; }
359
+
360
+ .version-widget {
361
+ display: inline-flex;
362
+ align-items: center;
363
+ gap: 10px;
364
+ padding: 8px 12px;
365
+ border: 1px solid rgba(128, 128, 128, .22);
366
+ border-radius: 999px;
367
+ background: rgba(255, 255, 255, .55);
368
+ backdrop-filter: blur(8px);
369
+ }
370
+
371
+ .version-widget-label { font-size: .72rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; opacity: .7; }
372
+ .version-widget-value { font-size: .92rem; font-weight: 700; }
373
+
374
+ html .home-page-hero { padding: 26px !important; border-radius: 15px; border-left: 5px solid rgba(13, 110, 253, .75); }
375
+ html .home-page-hero h1 { margin: 0 0 8px; font-family: inherit !important; font-size: 2.55rem !important; font-weight: 800; line-height: 1.05; }
376
+ html .home-page-hero .hero-text { max-width: 980px; margin: 0; font-size: 1.08rem !important; line-height: normal; opacity: .86; }
377
+
378
+ html .home-metrics-card > .card-body {
379
+ display: grid;
380
+ grid-template-columns: repeat(3, minmax(0, 1fr));
381
+ gap: 16px;
382
+ padding: 16px !important;
383
+ }
384
+
385
+ html .home-metrics-card .home-metric-tile {
386
+ height: 100%;
387
+ padding: 18px !important;
388
+ border: 1px solid rgba(13, 110, 253, .16);
389
+ border-radius: 12px;
390
+ background: rgba(13, 110, 253, .04);
391
+ }
392
+
393
+ html .home-metrics-card .home-metric-value { font-size: 2rem !important; font-weight: 800; line-height: 1; }
394
+ html .home-metrics-card .home-metric-label { margin-top: 6px; font-size: .92rem !important; opacity: .76; }
395
+
396
+ /* Exact RosettaX workflow-header geometry and typography. */
397
+ html body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif !important; }
398
+
399
+ html .workflow-header-card {
400
+ margin-bottom: 16px;
401
+ overflow: visible !important;
402
+ }
403
+
404
+ html .workflow-header-card.ui-card--green { background: var(--bs-card-bg, var(--bs-body-bg, #fff)) !important; border: 1px solid rgba(128, 128, 128, .25) !important; border-left: 5px solid rgba(25, 135, 84, .75) !important; }
405
+ html .workflow-header-card.ui-card--blue { background: var(--bs-card-bg, var(--bs-body-bg, #fff)) !important; border: 1px solid rgba(128, 128, 128, .25) !important; border-left: 5px solid rgba(13, 110, 253, .75) !important; }
406
+
407
+ html .workflow-header-body {
408
+ padding: 18px !important;
409
+ overflow: visible !important;
410
+ }
411
+
412
+ html .header-card-intro h2 {
413
+ margin: 0 0 8px;
414
+ font-family: inherit !important;
415
+ font-size: 2rem !important;
416
+ font-weight: 600;
417
+ line-height: 1.2;
418
+ }
419
+
420
+ html .header-card-intro p {
421
+ margin: 0 0 12px;
422
+ font-family: inherit !important;
423
+ font-size: 1rem !important;
424
+ line-height: 1.5;
425
+ opacity: .85;
426
+ }
427
+
428
+ html .header-card-steps {
429
+ display: grid;
430
+ grid-template-columns: repeat(3, minmax(0, 1fr));
431
+ gap: 8px;
432
+ }
433
+
434
+ html .rosettax-workflow-step-card {
435
+ height: 100%;
436
+ min-width: 0;
437
+ padding: 14px !important;
438
+ border: 1px solid rgba(13, 110, 253, .16) !important;
439
+ border-radius: 12px !important;
440
+ border-left-width: 1px !important;
441
+ background: var(--bs-card-bg, var(--bs-body-bg, #fff)) !important;
442
+ overflow: visible !important;
443
+ }
444
+
445
+ html .rosettax-workflow-step-card--green { border-color: rgba(25, 135, 84, .16) !important; }
446
+ html .rosettax-workflow-step-card--blue { border-color: rgba(13, 110, 253, .16) !important; }
447
+ html .rosettax-workflow-step-card--yellow { border-color: rgba(255, 215, 0, .16) !important; }
448
+ html .rosettax-workflow-step-card--orange { border-color: rgba(255, 193, 7, .16) !important; }
449
+ html .rosettax-workflow-step-card--purple { border-color: rgba(111, 66, 193, .16) !important; }
450
+
451
+ html .rosettax-workflow-step-card .header-step-number {
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: center;
455
+ width: 28px;
456
+ height: 28px;
457
+ margin-bottom: 10px;
458
+ border-radius: 50%;
459
+ font-family: inherit !important;
460
+ font-size: .9rem !important;
461
+ font-weight: 700;
462
+ }
463
+
464
+ html .rosettax-workflow-step-card--green .header-step-number { background: rgba(25, 135, 84, .12); border: 1px solid rgba(25, 135, 84, .35); }
465
+ html .rosettax-workflow-step-card--blue .header-step-number { background: rgba(13, 110, 253, .12); border: 1px solid rgba(13, 110, 253, .35); }
466
+ html .rosettax-workflow-step-card--yellow .header-step-number { background: rgba(255, 215, 0, .12); border: 1px solid rgba(255, 215, 0, .35); }
467
+ html .rosettax-workflow-step-card--orange .header-step-number { background: rgba(255, 193, 7, .12); border: 1px solid rgba(255, 193, 7, .35); }
468
+ html .rosettax-workflow-step-card--purple .header-step-number { background: rgba(111, 66, 193, .12); border: 1px solid rgba(111, 66, 193, .35); }
469
+
470
+ html .rosettax-workflow-step-card h6 {
471
+ margin: 0 0 6px;
472
+ font-family: inherit !important;
473
+ font-size: 1rem !important;
474
+ font-weight: 600;
475
+ line-height: 1.2;
476
+ }
477
+
478
+ html .rosettax-workflow-step-card p {
479
+ margin: 0;
480
+ font-family: inherit !important;
481
+ font-size: .86rem !important;
482
+ line-height: 1.45;
483
+ opacity: .78;
484
+ }
485
+
486
+ @media (max-width: 700px) {
487
+ html .home-metrics-card > .card-body { grid-template-columns: 1fr; }
488
+ }
489
+
490
+ .install-local-grid {
491
+ display: grid;
492
+ grid-template-columns: repeat(2, minmax(0, 1fr));
493
+ gap: 12px;
494
+ }
495
+
496
+ .install-steps {
497
+ display: grid;
498
+ row-gap: 7px;
499
+ margin: 0;
500
+ padding-left: 20px;
501
+ }
502
+
503
+ .documentation-link-chips {
504
+ display: flex;
505
+ flex-wrap: wrap;
506
+ gap: 10px;
507
+ }
508
+
509
+ .documentation-link-chip {
510
+ display: inline-flex;
511
+ align-items: center;
512
+ line-height: 1.2;
513
+ padding: 8px 11px;
514
+ border: 1px solid rgba(13, 110, 253, .14);
515
+ border-radius: 10px;
516
+ background: rgba(13, 110, 253, .04);
517
+ font-weight: 600;
518
+ text-decoration: none;
519
+ }
520
+
521
+ .card-title { font-weight: 750; font-size: 1.02rem; }
522
+ .card-subtitle { margin-top: 3px; opacity: .76; font-size: .86rem; font-weight: 400; }
523
+
524
+ .install-download-buttons {
525
+ display: flex;
526
+ flex-direction: column;
527
+ gap: 10px;
528
+ margin-bottom: 12px;
529
+ }
530
+
531
+ .install-download-button {
532
+ display: inline-flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ min-height: 38px;
536
+ padding: 6px 12px;
537
+ border: 1px solid #0d6efd;
538
+ border-radius: 4px;
539
+ background: #0d6efd;
540
+ color: #fff;
541
+ font-weight: 700;
542
+ text-decoration: none;
543
+ }
544
+
545
+ .install-release-note { opacity: .85; }
546
+ .install-release-note a { font-weight: 600; text-decoration: none; }
547
+
548
+ @media (max-width: 800px) {
549
+ .install-local-grid {
550
+ grid-template-columns: 1fr;
551
+ }
552
+ }
553
+
554
+ /* RosettaX card parity: the final cascade block keeps the shared card tokens
555
+ identical to RosettaX (15px radius, 5px accent, 18px body, soft shadow). */
556
+ .ui-card {
557
+ border: 1px solid rgba(128, 128, 128, .25);
558
+ border-radius: 15px;
559
+ background: #fff;
560
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
561
+ overflow: visible;
562
+ }
563
+
564
+ .ui-card--blue { border-left: 5px solid rgba(13, 110, 253, .75); }
565
+ .ui-card--green { border-left: 5px solid rgba(25, 135, 84, .75); }
566
+ .ui-card--yellow { border-left: 5px solid rgba(255, 215, 0, .75); }
567
+ .ui-card--cyan { border-left: 5px solid rgba(13, 202, 240, .75); }
568
+ .ui-card--purple { border-left: 5px solid rgba(111, 66, 193, .75); }
569
+
570
+ .ui-card > .card-header,
571
+ .ui-card > .panel-header,
572
+ .ui-card > .home-section-header {
573
+ margin: 0;
574
+ padding: 12px 18px;
575
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
576
+ border-top-left-radius: 15px;
577
+ border-top-right-radius: 15px;
578
+ background: rgba(13, 110, 253, .10);
579
+ font-size: 1.02rem;
580
+ font-weight: 750;
581
+ }
582
+
583
+ .ui-card--green > .card-header,
584
+ .ui-card--green > .panel-header,
585
+ .ui-card--green > .home-section-header,
586
+ .ui-card--green > summary { background: rgba(25, 135, 84, .10); border-bottom-color: rgba(25, 135, 84, .20); }
587
+ .ui-card--yellow > .card-header,
588
+ .ui-card--yellow > .panel-header,
589
+ .ui-card--yellow > .home-section-header,
590
+ .ui-card--yellow > summary { background: rgba(255, 215, 0, .10); border-bottom-color: rgba(255, 215, 0, .20); }
591
+ .ui-card--cyan > .card-header,
592
+ .ui-card--cyan > .panel-header,
593
+ .ui-card--cyan > .home-section-header,
594
+ .ui-card--cyan > summary { background: rgba(13, 202, 240, .10); border-bottom-color: rgba(13, 202, 240, .20); }
595
+ .ui-card--purple > .card-header,
596
+ .ui-card--purple > .panel-header,
597
+ .ui-card--purple > .home-section-header,
598
+ .ui-card--purple > summary { background: rgba(111, 66, 193, .10); border-bottom-color: rgba(111, 66, 193, .20); }
599
+
600
+ /* Final proportional sizing for the desktop shell. */
601
+ @media (min-width: 1081px) {
602
+ .dashboard-frame {
603
+ grid-template-columns: 336px minmax(0, 1fr);
604
+ }
605
+
606
+ .dashboard-sidebar {
607
+ width: 336px;
608
+ min-width: 336px;
609
+ }
610
+
611
+ }
612
+
613
+ /* Embedded workflow steps use the same accent treatment as top-level cards. */
614
+ html .rosettax-workflow-step-card--green { border-left: 4px solid #20b486 !important; background: rgba(32, 180, 134, .04) !important; }
615
+ html .rosettax-workflow-step-card--blue { border-left: 4px solid #4f8df7 !important; background: rgba(79, 141, 247, .04) !important; }
616
+ html .rosettax-workflow-step-card--yellow { border-left: 4px solid #f2b233 !important; background: rgba(242, 178, 51, .06) !important; }
617
+ html .rosettax-workflow-step-card--orange { border-left: 4px solid #f2b233 !important; background: rgba(242, 178, 51, .06) !important; }
618
+ html .rosettax-workflow-step-card--purple { border-left: 4px solid #8d6bd8 !important; background: rgba(141, 107, 216, .05) !important; }
619
+
620
+ /* Documentation hub: structured guide cards, examples, and reference rows. */
621
+ .documentation-hero-actions {
622
+ display: flex;
623
+ flex-wrap: wrap;
624
+ gap: 8px;
625
+ margin-top: 14px;
626
+ }
627
+
628
+ .documentation-quickstart-body {
629
+ display: grid;
630
+ grid-template-columns: repeat(4, minmax(0, 1fr));
631
+ gap: 12px;
632
+ }
633
+
634
+ .documentation-step {
635
+ display: grid;
636
+ grid-template-columns: auto 1fr;
637
+ gap: 10px;
638
+ align-items: start;
639
+ min-width: 0;
640
+ }
641
+
642
+ .documentation-step-number {
643
+ display: inline-flex;
644
+ align-items: center;
645
+ justify-content: center;
646
+ width: 28px;
647
+ height: 28px;
648
+ border: 1px solid rgba(13, 110, 253, .28);
649
+ border-radius: 50%;
650
+ background: rgba(13, 110, 253, .08);
651
+ color: #2672d6;
652
+ font-size: .72rem;
653
+ font-weight: 800;
654
+ }
655
+
656
+ .documentation-step h3 {
657
+ margin: 0 0 4px;
658
+ color: #26323b;
659
+ font-size: .92rem;
660
+ font-weight: 750;
661
+ }
662
+
663
+ .documentation-step p {
664
+ margin: 0;
665
+ color: #6c7c85;
666
+ font-size: .78rem;
667
+ line-height: 1.4;
668
+ }
669
+
670
+ .documentation-topic-grid .documentation-guide-card {
671
+ min-height: 100%;
672
+ }
673
+
674
+ .documentation-guide-card .card-header h2 {
675
+ margin: 3px 0 0;
676
+ }
677
+
678
+ .documentation-card-kicker {
679
+ display: block;
680
+ color: #6c7c85;
681
+ font-size: .68rem;
682
+ font-weight: 800;
683
+ letter-spacing: .1em;
684
+ text-transform: uppercase;
685
+ }
686
+
687
+ .documentation-guide-card .card-body,
688
+ .documentation-detail-card .card-body {
689
+ display: flex;
690
+ flex-direction: column;
691
+ }
692
+
693
+ .documentation-guide-card .card-body > p,
694
+ .documentation-detail-card .card-body > p {
695
+ margin-top: 0;
696
+ color: #52697a;
697
+ line-height: 1.5;
698
+ }
699
+
700
+ .documentation-bullet-list {
701
+ display: grid;
702
+ gap: 5px;
703
+ margin: 4px 0 16px;
704
+ padding-left: 18px;
705
+ color: #6c7c85;
706
+ font-size: .82rem;
707
+ line-height: 1.4;
708
+ }
709
+
710
+ .documentation-guide-card .inline-action {
711
+ margin-top: auto;
712
+ }
713
+
714
+ .documentation-columns {
715
+ display: grid;
716
+ grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
717
+ gap: 12px;
718
+ }
719
+
720
+ .documentation-syntax-list {
721
+ display: grid;
722
+ gap: 7px;
723
+ margin-top: 10px;
724
+ }
725
+
726
+ .documentation-syntax-row {
727
+ display: grid;
728
+ grid-template-columns: minmax(130px, .55fr) 1fr;
729
+ gap: 10px;
730
+ align-items: center;
731
+ padding: 8px 10px;
732
+ border: 1px solid rgba(13, 110, 253, .14);
733
+ border-radius: 6px;
734
+ background: rgba(13, 110, 253, .04);
735
+ }
736
+
737
+ .documentation-syntax-row code {
738
+ color: #2672d6;
739
+ font-size: .82rem;
740
+ font-weight: 700;
741
+ }
742
+
743
+ .documentation-syntax-row span {
744
+ color: #6c7c85;
745
+ font-size: .8rem;
746
+ }
747
+
748
+ .documentation-callout {
749
+ margin: 14px 0 0 !important;
750
+ padding: 9px 10px;
751
+ border-left: 3px solid #f2b233;
752
+ border-radius: 4px;
753
+ background: rgba(242, 178, 51, .08);
754
+ font-size: .8rem;
755
+ }
756
+
757
+ .documentation-definition-list {
758
+ display: grid;
759
+ gap: 0;
760
+ }
761
+
762
+ .documentation-definition-list > div {
763
+ display: grid;
764
+ grid-template-columns: 92px 1fr;
765
+ gap: 12px;
766
+ padding: 11px 0;
767
+ border-bottom: 1px solid rgba(128, 128, 128, .16);
768
+ }
769
+
770
+ .documentation-definition-list > div:first-child { padding-top: 0; }
771
+ .documentation-definition-list > div:last-child { padding-bottom: 0; border-bottom: 0; }
772
+ .documentation-definition-list strong { color: #26323b; font-size: .82rem; }
773
+ .documentation-definition-list span { color: #6c7c85; font-size: .82rem; line-height: 1.4; }
774
+
775
+ .documentation-model-grid {
776
+ display: grid;
777
+ grid-template-columns: repeat(4, minmax(0, 1fr));
778
+ gap: 12px;
779
+ }
780
+
781
+ .documentation-model-group h3 {
782
+ margin: 0 0 8px;
783
+ color: #26323b;
784
+ font-size: .86rem;
785
+ font-weight: 750;
786
+ }
787
+
788
+ .documentation-model-pills {
789
+ display: flex;
790
+ flex-wrap: wrap;
791
+ gap: 6px;
792
+ }
793
+
794
+ .documentation-model-pill {
795
+ padding: 5px 8px;
796
+ border: 1px solid rgba(25, 135, 84, .22);
797
+ border-radius: 999px;
798
+ background: rgba(25, 135, 84, .06);
799
+ color: #52697a;
800
+ font-size: .76rem;
801
+ }
802
+
803
+ .documentation-note-body p {
804
+ margin: 0 0 12px;
805
+ color: #52697a;
806
+ line-height: 1.5;
807
+ }
808
+
809
+ @media (max-width: 1000px) {
810
+ .documentation-quickstart-body,
811
+ .documentation-model-grid {
812
+ grid-template-columns: repeat(2, minmax(0, 1fr));
813
+ }
814
+ }
815
+
816
+ @media (max-width: 700px) {
817
+ .documentation-quickstart-body,
818
+ .documentation-columns,
819
+ .documentation-model-grid {
820
+ grid-template-columns: 1fr;
821
+ }
822
+
823
+ .documentation-syntax-row,
824
+ .documentation-definition-list > div {
825
+ grid-template-columns: 1fr;
826
+ gap: 4px;
827
+ }
828
+ }
829
+ .ui-card--blue > summary { background: rgba(13, 110, 253, .10); border-bottom-color: rgba(13, 110, 253, .20); }
830
+
831
+ .ui-card > .card-header h2,
832
+ .ui-card > .panel-header h2,
833
+ .ui-card > .home-section-header h2 {
834
+ margin: 0;
835
+ font-size: 1.02rem;
836
+ font-weight: 750;
837
+ }
838
+
839
+ .ui-card > .card-body,
840
+ .ui-card > .home-info-body,
841
+ .ui-card > .home-capability-body {
842
+ padding: 18px;
843
+ overflow: visible;
844
+ }
845
+
846
+ .ui-card > .card-body > p,
847
+ .ui-card > .card-body > .home-info-copy {
848
+ margin: 0 0 14px;
849
+ }
850
+
851
+ .theme-mode-control {
852
+ display: grid;
853
+ gap: 4px;
854
+ margin-top: 8px;
855
+ }
856
+
857
+ .theme-mode-control label {
858
+ color: #52697a;
859
+ font-size: .78rem;
860
+ font-weight: 700;
861
+ }
862
+
863
+ .theme-mode-select .Select-control {
864
+ min-height: 34px;
865
+ height: 34px;
866
+ border-radius: 4px;
867
+ }
868
+
869
+ .theme-mode-select .Select-value,
870
+ .theme-mode-select .Select-placeholder {
871
+ line-height: 32px;
872
+ font-size: .86rem;
873
+ }
874
+
875
+ /* Keep PyMieSim surfaces on the active Bootswatch palette, matching
876
+ RosettaX's FLATLY/SLATE theme behavior. */
877
+ html body,
878
+ html .dashboard-main,
879
+ html .dashboard-sidebar {
880
+ background-color: var(--bs-body-bg, #fff) !important;
881
+ color: var(--bs-body-color, #212529) !important;
882
+ }
883
+
884
+ html .page-hero,
885
+ html .ui-card,
886
+ html .panel,
887
+ html .home-info-card,
888
+ html .home-capability-card,
889
+ html .home-action-card,
890
+ html .summary-card {
891
+ background-color: var(--bs-card-bg, var(--bs-body-bg, #fff)) !important;
892
+ color: var(--bs-body-color, #212529) !important;
893
+ border-color: var(--bs-border-color-translucent, rgba(128, 128, 128, .25));
894
+ }
895
+
896
+ html .home-info-copy,
897
+ html .home-capability-body > p,
898
+ html .home-step-list,
899
+ html .theme-mode-control label {
900
+ color: var(--bs-body-color, #52697a) !important;
901
+ }
902
+
903
+ /* Experiment result column: plot first, then actions, then a horizontal
904
+ syntax guide matching the RosettaX workflow-page composition. */
905
+ .result-column > .run-panel,
906
+ .result-column > .helper-panel {
907
+ width: 100%;
908
+ box-sizing: border-box;
909
+ }
910
+
911
+ .result-column > .helper-panel .helper-examples {
912
+ grid-template-columns: repeat(4, minmax(0, 1fr));
913
+ }
914
+
915
+ .plot-control-actions {
916
+ display: flex;
917
+ flex-direction: column;
918
+ gap: 12px;
919
+ margin: 18px 12px 12px;
920
+ }
921
+
922
+ .plot-control-actions .run-button {
923
+ width: 100%;
924
+ box-sizing: border-box;
925
+ }
926
+
927
+ .plot-controls-panel > .status-banner {
928
+ margin: 0 12px 12px;
929
+ }
930
+
931
+ .plot-control-actions .export-button {
932
+ background: #f7f9fb;
933
+ color: #2f4358;
934
+ border: 1px solid #c7d1d9;
935
+ }
936
+
937
+ @media (max-width: 900px) {
938
+ .result-column > .helper-panel .helper-examples {
939
+ grid-template-columns: 1fr 1fr;
940
+ }
941
+ }
942
+
943
+ @media (max-width: 560px) {
944
+ .result-column > .helper-panel .helper-examples {
945
+ grid-template-columns: 1fr;
946
+ }
947
+ }
948
+
949
+ /* Keep selectors comfortably inset from card edges on both workflows. */
950
+ .workflow-card > .workflow-card-body {
951
+ padding: 18px !important;
952
+ }
953
+
954
+ .workflow-card > .workflow-card-body > .dashboard-dropdown {
955
+ margin-bottom: 14px;
956
+ }
957
+
958
+ .detector-coupling-alert {
959
+ margin: 0 0 14px;
960
+ padding: 10px 12px;
961
+ border: 1px solid rgba(217, 119, 6, .28);
962
+ border-radius: 8px;
963
+ background: #fff7e6;
964
+ color: #8a4b08;
965
+ font-size: .86rem;
966
+ line-height: 1.35;
967
+ }
968
+
969
+ .nearfield-switch {
970
+ margin-top: -3px;
971
+ padding-top: 0;
972
+ }
973
+
974
+ .nearfield-availability-alert {
975
+ margin-bottom: 10px;
976
+ padding: 9px 11px;
977
+ border: 1px solid rgba(217, 119, 6, .28);
978
+ border-radius: 8px;
979
+ background: #fff7e6;
980
+ color: #8a4b08;
981
+ font-size: .84rem;
982
+ line-height: 1.35;
983
+ }
984
+
985
+ .nearfield-switch label {
986
+ position: relative;
987
+ display: flex;
988
+ align-items: center;
989
+ min-height: 28px;
990
+ padding-left: 42px;
991
+ cursor: pointer;
992
+ color: var(--ink);
993
+ font-size: .9rem;
994
+ font-weight: 600;
995
+ }
996
+
997
+ .nearfield-switch input {
998
+ display: none !important;
999
+ }
1000
+
1001
+ .nearfield-switch label::before {
1002
+ content: "";
1003
+ position: absolute;
1004
+ left: 0;
1005
+ top: 50%;
1006
+ transform: translateY(-50%);
1007
+ width: 42px;
1008
+ height: 24px;
1009
+ border: 1px solid #b8c2cc;
1010
+ border-radius: 999px;
1011
+ background: #dce2e8;
1012
+ transition: background 160ms ease, border-color 160ms ease;
1013
+ }
1014
+
1015
+ .nearfield-switch label::after {
1016
+ content: "";
1017
+ position: absolute;
1018
+ left: 4px;
1019
+ top: 50%;
1020
+ transform: translateY(-50%);
1021
+ width: 16px;
1022
+ height: 16px;
1023
+ border-radius: 50%;
1024
+ background: #ffffff;
1025
+ box-shadow: 0 1px 3px rgba(33, 37, 41, .25);
1026
+ transition: transform 160ms ease;
1027
+ }
1028
+
1029
+ .nearfield-switch label:has(input:checked)::before {
1030
+ border-color: #4f8df7;
1031
+ background: #4f8df7;
1032
+ }
1033
+
1034
+ .nearfield-switch label:has(input:checked)::after {
1035
+ transform: translate(18px, -50%);
1036
+ }
1037
+
1038
+ /* Sampling is intentionally a plain numeric field without browser stepper
1039
+ arrows or custom increment/decrement controls. */
1040
+ #single-sampling {
1041
+ width: 96px !important;
1042
+ min-width: 96px !important;
1043
+ -moz-appearance: textfield;
1044
+ appearance: textfield;
1045
+ }
1046
+
1047
+ #single-sampling::-webkit-inner-spin-button,
1048
+ #single-sampling::-webkit-outer-spin-button {
1049
+ margin: 0;
1050
+ -webkit-appearance: none;
1051
+ }
1052
+
1053
+ /* Keep Experiment's left configuration column aligned with Single's
1054
+ narrower setup area. */
1055
+ .workspace {
1056
+ grid-template-columns: minmax(0, 0.4fr) minmax(0, 1fr) !important;
1057
+ }
1058
+
1059
+ .workspace .control-column,
1060
+ .workspace .set-panel-grid,
1061
+ .workspace .workflow-card {
1062
+ width: 100%;
1063
+ min-width: 0;
1064
+ box-sizing: border-box;
1065
+ }
1066
+
1067
+ @media (max-width: 1080px) {
1068
+ .workspace {
1069
+ grid-template-columns: 1fr !important;
1070
+ }
1071
+ }
1072
+
1073
+ /* RosettaX card tokens, applied last so every workflow card uses the same
1074
+ radius, accent, shadow, header, and body proportions as the reference UI. */
1075
+ .workflow-card,
1076
+ .home-info-card,
1077
+ .home-capability-card,
1078
+ .panel,
1079
+ .summary-card {
1080
+ border: 1px solid rgba(128, 128, 128, .25);
1081
+ border-left: 5px solid rgba(13, 110, 253, .75);
1082
+ border-radius: 15px;
1083
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
1084
+ }
1085
+
1086
+ .workflow-card {
1087
+ overflow: visible;
1088
+ background: #fff;
1089
+ }
1090
+
1091
+ .workflow-card > summary,
1092
+ .home-section-header,
1093
+ .panel-header {
1094
+ padding: 12px 18px;
1095
+ background: rgba(13, 110, 253, .10);
1096
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
1097
+ border-top-left-radius: 15px;
1098
+ border-top-right-radius: 15px;
1099
+ font-size: 1.02rem;
1100
+ font-weight: 700;
1101
+ }
1102
+
1103
+ .workflow-card-body,
1104
+ .home-info-body,
1105
+ .home-capability-body,
1106
+ .panel-body {
1107
+ padding: 18px;
1108
+ overflow: visible;
1109
+ }
1110
+
1111
+ .single-workspace .representation-card > summary {
1112
+ padding: 12px 18px;
1113
+ background: rgba(13, 110, 253, .10);
1114
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
1115
+ border-top-left-radius: 15px;
1116
+ border-top-right-radius: 15px;
1117
+ font-size: 1.02rem;
1118
+ font-weight: 700;
1119
+ }
1120
+
1121
+ .single-workspace .representation-card > .representation-card-header {
1122
+ display: flex;
1123
+ align-items: center;
1124
+ padding: 12px 18px;
1125
+ background: rgba(13, 110, 253, .10);
1126
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
1127
+ border-top-left-radius: 15px;
1128
+ border-top-right-radius: 15px;
1129
+ color: #212529;
1130
+ font-size: 1.02rem;
1131
+ font-weight: 700;
1132
+ }
1133
+
1134
+ .single-workspace .representation-card-body {
1135
+ padding: 18px;
1136
+ }
1137
+
1138
+ .home-capability-card,
1139
+ .home-info-card {
1140
+ border-left-width: 5px;
1141
+ }
1142
+
1143
+ /* Extend the same RosettaX card language to every workspace surface, not
1144
+ only the source/scatterer workflow cards. */
1145
+ .page-hero,
1146
+ .hero,
1147
+ .home-action-card,
1148
+ .documentation-card,
1149
+ .documentation-note,
1150
+ .plot-controls-panel,
1151
+ .helper-panel,
1152
+ .graph-panel,
1153
+ .single-graph-panel {
1154
+ border: 1px solid rgba(128, 128, 128, .25);
1155
+ border-left: 5px solid rgba(13, 110, 253, .75);
1156
+ border-radius: 15px;
1157
+ background: #fff;
1158
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
1159
+ }
1160
+
1161
+ .page-hero,
1162
+ .hero {
1163
+ padding: 18px;
1164
+ }
1165
+
1166
+ .home-action-card {
1167
+ min-height: 190px;
1168
+ padding: 18px;
1169
+ }
1170
+
1171
+ .documentation-card,
1172
+ .documentation-note,
1173
+ .plot-controls-panel,
1174
+ .helper-panel {
1175
+ padding: 0;
1176
+ overflow: visible;
1177
+ }
1178
+
1179
+ .documentation-card > .panel-header,
1180
+ .documentation-note > .panel-header,
1181
+ .plot-controls-panel > .panel-header,
1182
+ .helper-panel > .panel-header {
1183
+ margin: 0;
1184
+ }
1185
+
1186
+ .documentation-card > p,
1187
+ .documentation-note > p,
1188
+ .plot-controls-panel > p,
1189
+ .plot-controls-panel > .helper-copy,
1190
+ .helper-panel > p,
1191
+ .helper-panel > .helper-copy {
1192
+ margin: 0;
1193
+ padding: 18px;
1194
+ }
1195
+
1196
+ .documentation-note > .inline-action {
1197
+ display: inline-flex;
1198
+ margin: 0 18px 18px;
1199
+ }
1200
+
1201
+ .graph-panel,
1202
+ .single-graph-panel {
1203
+ padding: 18px;
1204
+ overflow: visible;
1205
+ }
1206
+
1207
+ .workflow-page-header {
1208
+ display: block;
1209
+ min-height: 0;
1210
+ margin-bottom: 18px;
1211
+ padding: 18px;
1212
+ border: 1px solid rgba(128, 128, 128, .25);
1213
+ border-left: 5px solid rgba(13, 110, 253, .75);
1214
+ border-radius: 15px;
1215
+ background: #fff;
1216
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
1217
+ }
1218
+
1219
+ .workflow-page-header .eyebrow {
1220
+ margin: 0 0 6px;
1221
+ }
1222
+
1223
+ .workflow-page-header h1 {
1224
+ margin: 0 0 8px;
1225
+ color: #212529;
1226
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
1227
+ font-size: 2rem;
1228
+ font-weight: 600;
1229
+ line-height: 1.2;
1230
+ }
1231
+
1232
+ .workflow-page-header .hero-text {
1233
+ max-width: 900px;
1234
+ margin: 0;
1235
+ color: #52697a;
1236
+ font-size: .95rem;
1237
+ line-height: 1.45;
1238
+ }
1239
+
1240
+ /* Experiment follows the same left-controls/right-plot composition as
1241
+ Single, with enough width for the source, scatterer, and detector forms. */
1242
+ .workspace {
1243
+ grid-template-columns: minmax(540px, 640px) minmax(0, 1fr);
1244
+ }
1245
+
1246
+ .workspace .control-column,
1247
+ .workspace .result-column {
1248
+ min-width: 0;
1249
+ }
1250
+
1251
+ .workspace .set-panel-grid {
1252
+ display: grid;
1253
+ grid-template-columns: 1fr;
1254
+ gap: 18px;
1255
+ }
1256
+
1257
+ @media (max-width: 1080px) {
1258
+ .workspace {
1259
+ grid-template-columns: 1fr;
1260
+ }
1261
+ }
1262
+
1263
+ /* Reusable card primitives: the accent colors follow RosettaX's workflow
1264
+ progression and remain visible as a highlighted strip on the left edge. */
1265
+ .ui-card,
1266
+ .workflow-card {
1267
+ border-left: 5px solid rgba(13, 110, 253, .75);
1268
+ }
1269
+
1270
+ .ui-card--green,
1271
+ .workflow-card--green { border-left-color: #20b486; }
1272
+ .ui-card--blue,
1273
+ .workflow-card--blue { border-left-color: #4f8df7; }
1274
+ .ui-card--yellow,
1275
+ .workflow-card--yellow { border-left-color: #f2b233; }
1276
+ .ui-card--cyan,
1277
+ .workflow-card--cyan { border-left-color: #20c7d5; }
1278
+ .ui-card--purple,
1279
+ .workflow-card--purple { border-left-color: #8d6bd8; }
1280
+
1281
+ .workflow-card--yellow { background: #fffbed; }
1282
+ .workflow-card--blue { background: #eef4ff; }
1283
+ .workflow-card--cyan { background: #effbfc; }
1284
+
1285
+ .workflow-card--yellow > summary { background: #fffbed; }
1286
+ .workflow-card--blue > summary { background: #eef4ff; }
1287
+ .workflow-card--cyan > summary { background: #effbfc; }
1288
+
1289
+ .workflow-info-button {
1290
+ display: inline-flex;
1291
+ align-items: center;
1292
+ justify-content: center;
1293
+ width: 15px;
1294
+ height: 15px;
1295
+ margin-left: 6px;
1296
+ border: 1px solid #9da9b2;
1297
+ border-radius: 50%;
1298
+ color: #6e7d87;
1299
+ cursor: help;
1300
+ font-size: .65rem;
1301
+ font-weight: 700;
1302
+ line-height: 1;
1303
+ }
1304
+
1305
+ .workflow-info-button:hover,
1306
+ .workflow-info-button:focus-visible {
1307
+ border-color: #2f4358;
1308
+ background: #fff;
1309
+ color: #2f4358;
1310
+ }
1311
+
1312
+ .workflow-header-card {
1313
+ margin-bottom: 18px;
1314
+ padding: 18px;
1315
+ overflow: visible;
1316
+ }
1317
+
1318
+ .header-card-intro h1 {
1319
+ margin: 0 0 6px;
1320
+ color: #212529;
1321
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
1322
+ font-size: 2rem;
1323
+ font-weight: 600;
1324
+ line-height: 1.2;
1325
+ }
1326
+
1327
+ .header-card-intro p {
1328
+ margin: 0 0 12px;
1329
+ color: #52697a;
1330
+ font-size: .86rem;
1331
+ line-height: 1.4;
1332
+ }
1333
+
1334
+ .header-card-steps {
1335
+ display: grid;
1336
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1337
+ gap: 8px;
1338
+ }
1339
+
1340
+ .header-step-card {
1341
+ min-height: 84px;
1342
+ padding: 10px;
1343
+ border: 1px solid rgba(128, 128, 128, .18);
1344
+ border-radius: 8px;
1345
+ background: #fff;
1346
+ }
1347
+
1348
+ .header-step-card--green { border-color: rgba(32, 180, 134, .28); border-left: 5px solid #20b486; background: rgba(32, 180, 134, .04); }
1349
+ .header-step-card--blue { border-color: rgba(79, 141, 247, .28); border-left: 5px solid #4f8df7; background: rgba(79, 141, 247, .04); }
1350
+ .header-step-card--yellow { border-color: rgba(242, 178, 51, .34); border-left: 5px solid #f2b233; background: rgba(242, 178, 51, .06); }
1351
+ .header-step-card--purple { border-color: rgba(141, 107, 216, .30); border-left: 5px solid #8d6bd8; background: rgba(141, 107, 216, .05); }
1352
+
1353
+ .header-step-number {
1354
+ display: inline-flex;
1355
+ align-items: center;
1356
+ justify-content: center;
1357
+ width: 18px;
1358
+ height: 18px;
1359
+ margin-bottom: 5px;
1360
+ border-radius: 50%;
1361
+ background: rgba(255, 255, 255, .85);
1362
+ color: #52697a;
1363
+ font-size: .68rem;
1364
+ font-weight: 750;
1365
+ }
1366
+
1367
+ .header-step-card h3 {
1368
+ margin: 0 0 4px;
1369
+ color: #34495a;
1370
+ font-size: .82rem;
1371
+ font-weight: 750;
1372
+ }
1373
+
1374
+ .header-step-card p {
1375
+ margin: 0;
1376
+ color: #52697a;
1377
+ font-size: .72rem;
1378
+ line-height: 1.35;
1379
+ }
1380
+
1381
+ /* Every remaining card-like surface gets the same visible left accent. */
1382
+ .meta-chip,
1383
+ .helper-chip,
1384
+ .home-metric-tile,
1385
+ .sidebar-card,
1386
+ .empty-section {
1387
+ border-left: 5px solid #4f8df7;
1388
+ }
1389
+
1390
+ .helper-chip-note {
1391
+ border-left-color: #7d8790;
1392
+ }
1393
+
1394
+ /* Final card accent guarantee: every card variant, including all workflow
1395
+ configuration cards, keeps its highlighted left edge. */
1396
+ html .ui-card,
1397
+ html .workflow-card,
1398
+ html .panel,
1399
+ html .page-hero,
1400
+ html .hero,
1401
+ html .home-action-card,
1402
+ html .documentation-card,
1403
+ html .documentation-note,
1404
+ html .graph-panel,
1405
+ html .single-graph-panel,
1406
+ html .summary-card,
1407
+ html .meta-chip,
1408
+ html .helper-chip,
1409
+ html .home-metric-tile,
1410
+ html .sidebar-card,
1411
+ html .empty-section {
1412
+ border-left: 5px solid #4f8df7 !important;
1413
+ }
1414
+
1415
+ html .workflow-card--green,
1416
+ html .ui-card--green,
1417
+ html .header-step-card--green { border-left-color: #20b486 !important; background-color: rgba(32, 180, 134, .04) !important; }
1418
+ html .workflow-card--blue,
1419
+ html .ui-card--blue,
1420
+ html .header-step-card--blue { border-left-color: #4f8df7 !important; background-color: rgba(79, 141, 247, .04) !important; }
1421
+ html .workflow-card--yellow,
1422
+ html .ui-card--yellow,
1423
+ html .header-step-card--yellow { border-left-color: #f2b233 !important; background-color: rgba(242, 178, 51, .06) !important; }
1424
+ html .workflow-card--cyan,
1425
+ html .ui-card--cyan { border-left-color: #20c7d5 !important; background-color: rgba(32, 199, 213, .04) !important; }
1426
+ html .workflow-card--purple,
1427
+ html .ui-card--purple,
1428
+ html .header-step-card--purple { border-left-color: #8d6bd8 !important; background-color: rgba(141, 107, 216, .05) !important; }
1429
+ html .helper-chip-note { border-left-color: #7d8790 !important; }
1430
+
1431
+ /* Keep the rounded corner geometry continuous between the tinted surface and
1432
+ its highlighted left edge. */
1433
+ html .ui-card,
1434
+ html .workflow-card,
1435
+ html .header-step-card {
1436
+ background-clip: border-box;
1437
+ }
1438
+
1439
+ html .workflow-card--green,
1440
+ html .ui-card--green { border-color: rgba(32, 180, 134, .28) !important; }
1441
+ html .workflow-card--blue,
1442
+ html .ui-card--blue { border-color: rgba(79, 141, 247, .28) !important; }
1443
+ html .workflow-card--yellow,
1444
+ html .ui-card--yellow { border-color: rgba(242, 178, 51, .34) !important; }
1445
+ html .workflow-card--cyan,
1446
+ html .ui-card--cyan { border-color: rgba(32, 199, 213, .30) !important; }
1447
+ html .workflow-card--purple,
1448
+ html .ui-card--purple { border-color: rgba(141, 107, 216, .30) !important; }
1449
+
1450
+ html .header-step-card--green { border-color: rgba(32, 180, 134, .28) !important; }
1451
+ html .header-step-card--blue { border-color: rgba(79, 141, 247, .28) !important; }
1452
+ html .header-step-card--yellow { border-color: rgba(242, 178, 51, .34) !important; }
1453
+ html .header-step-card--purple { border-color: rgba(141, 107, 216, .30) !important; }
1454
+
1455
+ html .workflow-card--green,
1456
+ html .ui-card--green,
1457
+ html .header-step-card--green { border-left-color: #20b486 !important; }
1458
+ html .workflow-card--blue,
1459
+ html .ui-card--blue,
1460
+ html .header-step-card--blue { border-left-color: #4f8df7 !important; }
1461
+ html .workflow-card--yellow,
1462
+ html .ui-card--yellow,
1463
+ html .header-step-card--yellow { border-left-color: #f2b233 !important; }
1464
+ html .workflow-card--cyan,
1465
+ html .ui-card--cyan { border-left-color: #20c7d5 !important; }
1466
+ html .workflow-card--purple,
1467
+ html .ui-card--purple,
1468
+ html .header-step-card--purple { border-left-color: #8d6bd8 !important; }
1469
+
1470
+
1471
+ /* Slightly larger dashboard type and more generous syntax-guide spacing. */
1472
+ html body {
1473
+ font-size: 1rem;
1474
+ }
1475
+
1476
+ html .workflow-card > summary,
1477
+ html .panel-header,
1478
+ html .home-section-header,
1479
+ html .representation-card-header {
1480
+ font-size: 1.08rem;
1481
+ }
1482
+
1483
+ html .workflow-card > summary {
1484
+ justify-content: flex-start;
1485
+ }
1486
+
1487
+ html .workflow-card > summary .workflow-info-button {
1488
+ margin-left: 8px;
1489
+ }
1490
+
1491
+ html .workflow-card > summary::before {
1492
+ margin-left: auto;
1493
+ }
1494
+
1495
+ html .field-block label,
1496
+ html .run-panel label,
1497
+ html .plot-controls-panel label {
1498
+ font-size: 1rem;
1499
+ }
1500
+
1501
+ html .dashboard-dropdown .Select-value-label,
1502
+ html .dashboard-dropdown .Select-placeholder,
1503
+ html .field-input,
1504
+ html input,
1505
+ html select {
1506
+ font-size: 1rem;
1507
+ }
1508
+
1509
+ html .result-column > .helper-panel {
1510
+ padding-bottom: 18px;
1511
+ }
1512
+
1513
+ html .result-column > .helper-panel > .helper-copy {
1514
+ padding: 18px 18px 10px;
1515
+ font-size: 1rem;
1516
+ line-height: 1.45;
1517
+ }
1518
+
1519
+ html .result-column > .helper-panel .helper-examples {
1520
+ gap: 12px;
1521
+ margin-left: 18px;
1522
+ margin-right: 18px;
1523
+ }
1524
+
1525
+ html .result-column > .helper-panel .helper-chip {
1526
+ padding: 16px;
1527
+ font-size: .95rem;
1528
+ }
1529
+
1530
+ html .result-column > .helper-panel .helper-chip strong {
1531
+ font-size: 1.1rem;
1532
+ }
1533
+
1534
+ html .result-column > .helper-panel .helper-chip span {
1535
+ font-size: .95rem;
1536
+ line-height: 1.45;
1537
+ }
1538
+
1539
+ html .header-card-intro h1 {
1540
+ font-size: 2.2rem;
1541
+ }
1542
+
1543
+ html .header-card-intro p {
1544
+ font-size: 1rem;
1545
+ }
1546
+
1547
+ html .header-step-card {
1548
+ min-height: 96px;
1549
+ padding: 14px;
1550
+ }
1551
+
1552
+ html .header-step-number {
1553
+ width: 20px;
1554
+ height: 20px;
1555
+ font-size: .72rem;
1556
+ }
1557
+
1558
+ html .header-step-card h3 {
1559
+ font-size: .9rem;
1560
+ }
1561
+
1562
+ html .header-step-card p {
1563
+ font-size: .8rem;
1564
+ }
1565
+
1566
+ /* React-Select/Dash adds generous global input padding. Override it inside
1567
+ dropdowns so the search field and every option remain RosettaX-sized. */
1568
+ .dashboard-dropdown .Select-menu-outer {
1569
+ max-height: 240px !important;
1570
+ overflow-y: auto !important;
1571
+ }
1572
+
1573
+ .dashboard-dropdown .Select-input,
1574
+ .dashboard-dropdown .Select-input > input {
1575
+ box-sizing: border-box !important;
1576
+ height: 36px !important;
1577
+ min-height: 36px !important;
1578
+ padding: 0 10px !important;
1579
+ line-height: 36px !important;
1580
+ }
1581
+
1582
+ .dashboard-dropdown .Select-menu-outer .Select-option,
1583
+ .dashboard-dropdown .Select-menu-outer .VirtualizedSelectOption,
1584
+ .dashboard-dropdown .Select-menu-outer .VirtualizedSelectFocusedOption,
1585
+ .dashboard-dropdown .Select-menu-outer [class*="Option"] {
1586
+ box-sizing: border-box !important;
1587
+ height: 34px !important;
1588
+ min-height: 34px !important;
1589
+ max-height: 34px !important;
1590
+ padding: 7px 10px !important;
1591
+ line-height: 20px !important;
1592
+ font-size: .95rem !important;
1593
+ }
1594
+
1595
+ .dashboard-dropdown .Select-menu-outer .Select-input,
1596
+ .dashboard-dropdown .Select-menu-outer .Select-input input,
1597
+ .dashboard-dropdown .Select-menu-outer input {
1598
+ box-sizing: border-box !important;
1599
+ height: 38px !important;
1600
+ min-height: 38px !important;
1601
+ max-height: 38px !important;
1602
+ padding: 0 10px !important;
1603
+ line-height: 38px !important;
1604
+ }
1605
+
1606
+ @media (max-width: 760px) {
1607
+ .header-card-steps { grid-template-columns: 1fr; }
1608
+ }
1609
+
1610
+ /* Final route and control sizing overrides. */
1611
+ .main-tabs .tab-container,
1612
+ .main-tabs > div:first-child {
1613
+ display: none !important;
1614
+ }
1615
+
1616
+ .dashboard-dropdown .Select-control {
1617
+ min-height: 38px;
1618
+ height: 38px;
1619
+ border-radius: 4px;
1620
+ }
1621
+
1622
+ .dashboard-dropdown .Select-placeholder,
1623
+ .dashboard-dropdown .Select--single > .Select-control .Select-value {
1624
+ line-height: 36px;
1625
+ font-size: .95rem;
1626
+ }
1627
+
1628
+ .dashboard-dropdown .Select-input,
1629
+ .dashboard-dropdown .Select-input > input {
1630
+ height: 36px;
1631
+ line-height: 36px !important;
1632
+ }
1633
+
1634
+ .dashboard-dropdown .Select-option,
1635
+ .dashboard-dropdown .VirtualizedSelectOption,
1636
+ .dashboard-dropdown .VirtualizedSelectFocusedOption {
1637
+ min-height: 34px;
1638
+ height: 34px;
1639
+ padding: 7px 10px;
1640
+ box-sizing: border-box;
1641
+ line-height: 20px;
1642
+ font-size: .95rem;
1643
+ }
1644
+
1645
+ .dashboard-dropdown .Select-menu {
1646
+ max-height: 240px;
1647
+ }
1648
+
1649
+ /* The route already selects Experiment or Single; the internal Tabs control
1650
+ must not be visible as a second navigation bar. */
1651
+ .main-tabs .tab-container,
1652
+ .main-tabs > div:first-child {
1653
+ display: none !important;
1654
+ }
1655
+
1656
+ /* Compact Dash dropdowns and normal-height option rows. */
1657
+ .dashboard-dropdown .Select-control {
1658
+ min-height: 38px;
1659
+ height: 38px;
1660
+ border-radius: 4px;
1661
+ }
1662
+
1663
+ .dashboard-dropdown .Select-placeholder,
1664
+ .dashboard-dropdown .Select--single > .Select-control .Select-value {
1665
+ line-height: 36px;
1666
+ font-size: .95rem;
1667
+ }
1668
+
1669
+ .dashboard-dropdown .Select-input,
1670
+ .dashboard-dropdown .Select-input > input {
1671
+ height: 36px;
1672
+ line-height: 36px !important;
1673
+ }
1674
+
1675
+ .dashboard-dropdown .Select-option,
1676
+ .dashboard-dropdown .VirtualizedSelectOption,
1677
+ .dashboard-dropdown .VirtualizedSelectFocusedOption {
1678
+ min-height: 34px;
1679
+ height: 34px;
1680
+ padding: 7px 10px;
1681
+ box-sizing: border-box;
1682
+ line-height: 20px;
1683
+ font-size: .95rem;
1684
+ }
1685
+
1686
+ .dashboard-dropdown .Select-menu {
1687
+ max-height: 240px;
1688
+ }
1689
+
1690
+ .sidebar-link:hover,
1691
+ .sidebar-link.active {
1692
+ border: 0;
1693
+ background: #2f4358;
1694
+ color: #ffffff;
1695
+ }
1696
+
1697
+ .dashboard-main {
1698
+ padding: 8px 16px 36px;
1699
+ gap: 12px;
1700
+ }
1701
+
1702
+ .page-content-stack {
1703
+ gap: 12px;
1704
+ }
1705
+
1706
+ .page-hero,
1707
+ .hero-copy,
1708
+ .hero-meta,
1709
+ .panel,
1710
+ .home-action-card,
1711
+ .summary-card {
1712
+ border: 1px solid rgba(128, 128, 128, .25);
1713
+ border-radius: 8px;
1714
+ background: #ffffff;
1715
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
1716
+ }
1717
+
1718
+ .page-hero {
1719
+ padding: 12px 14px;
1720
+ border-left: 4px solid rgba(13, 110, 253, .75);
1721
+ background: #ffffff;
1722
+ }
1723
+
1724
+ .page-hero h1 {
1725
+ max-width: none;
1726
+ margin: 0 0 6px;
1727
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
1728
+ font-size: 1.7rem;
1729
+ line-height: 1.15;
1730
+ letter-spacing: 0;
1731
+ }
1732
+
1733
+ .page-hero .hero-text {
1734
+ margin: 0;
1735
+ max-width: 900px;
1736
+ font-size: .86rem;
1737
+ }
1738
+
1739
+ .home-card-grid,
1740
+ .documentation-grid {
1741
+ gap: 8px;
1742
+ }
1743
+
1744
+ .home-action-card {
1745
+ min-height: 190px;
1746
+ padding: 12px;
1747
+ border-radius: 8px;
1748
+ box-shadow: 0 .2rem .6rem rgba(0, 0, 0, .06);
1749
+ }
1750
+
1751
+ .home-action-card:hover {
1752
+ border-color: rgba(13, 110, 253, .35);
1753
+ transform: none;
1754
+ }
1755
+
1756
+ .home-action-card h2,
1757
+ .documentation-card h2 {
1758
+ margin: 10px 0 7px;
1759
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
1760
+ font-size: 1.02rem;
1761
+ font-weight: 750;
1762
+ }
1763
+
1764
+ .home-action-card p,
1765
+ .documentation-card p,
1766
+ .home-overview-card p,
1767
+ .documentation-note p {
1768
+ font-size: .86rem;
1769
+ line-height: 1.45;
1770
+ }
1771
+
1772
+ .home-overview-card,
1773
+ .documentation-note {
1774
+ padding: 0 10px 12px;
1775
+ }
1776
+
1777
+ .panel {
1778
+ padding: 0;
1779
+ overflow: hidden;
1780
+ }
1781
+
1782
+ .panel-header {
1783
+ margin: 0;
1784
+ padding: 8px 10px;
1785
+ background: rgba(13, 110, 253, .10);
1786
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
1787
+ }
1788
+
1789
+ .panel-header h2 {
1790
+ font-size: 1.02rem;
1791
+ font-weight: 750;
1792
+ letter-spacing: 0;
1793
+ text-transform: none;
1794
+ }
1795
+
1796
+ .panel > p,
1797
+ .panel > .helper-copy,
1798
+ .panel > .run-panel-copy {
1799
+ padding: 0 10px;
1800
+ }
1801
+
1802
+ .panel-body {
1803
+ padding: 0 10px 10px;
1804
+ }
1805
+
1806
+ .workflow-card {
1807
+ border-radius: 8px;
1808
+ box-shadow: 0 .2rem .6rem rgba(0, 0, 0, .06);
1809
+ }
1810
+
1811
+ .workflow-card > summary {
1812
+ padding: 9px 10px;
1813
+ font-size: .94rem;
1814
+ letter-spacing: 0;
1815
+ }
1816
+
1817
+ .workflow-card-body {
1818
+ padding: 0 10px 10px;
1819
+ }
1820
+
1821
+ .run-panel {
1822
+ background: #ffffff;
1823
+ color: #212529;
1824
+ }
1825
+
1826
+ .run-button-primary {
1827
+ background: #2f4358;
1828
+ border-radius: 4px;
1829
+ }
1830
+
1831
+ @media (max-width: 900px) {
1832
+ .dashboard-frame {
1833
+ grid-template-columns: 1fr;
1834
+ }
1835
+
1836
+ .dashboard-sidebar {
1837
+ position: static;
1838
+ height: auto;
1839
+ }
1840
+ }
1841
+
1842
+ .page-content-stack {
1843
+ display: grid;
1844
+ gap: 22px;
1845
+ }
1846
+
1847
+ .page-hero {
1848
+ background: linear-gradient(135deg, rgba(255,255,255,.98), rgba(232,242,250,.92));
1849
+ border: 1px solid var(--line);
1850
+ border-radius: 24px;
1851
+ box-shadow: var(--shadow);
1852
+ padding: 34px;
1853
+ }
1854
+
1855
+ .page-hero h1 {
1856
+ max-width: 760px;
1857
+ margin: 4px 0 12px;
1858
+ font-family: Fraunces, Georgia, serif;
1859
+ font-size: clamp(2.4rem, 5vw, 4.7rem);
1860
+ line-height: .98;
1861
+ letter-spacing: -.045em;
1862
+ }
1863
+
1864
+ .home-card-grid,
1865
+ .documentation-grid {
1866
+ display: grid;
1867
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1868
+ gap: 16px;
1869
+ }
1870
+
1871
+ .documentation-grid {
1872
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1873
+ }
1874
+
1875
+ .home-action-card {
1876
+ display: block;
1877
+ min-height: 210px;
1878
+ padding: 24px;
1879
+ border: 1px solid var(--line);
1880
+ border-radius: 18px;
1881
+ background: var(--panel);
1882
+ box-shadow: var(--shadow);
1883
+ color: var(--ink);
1884
+ text-decoration: none;
1885
+ transition: transform .18s ease, border-color .18s ease;
1886
+ }
1887
+
1888
+ .home-action-card:hover {
1889
+ color: var(--ink);
1890
+ border-color: var(--accent);
1891
+ transform: translateY(-3px);
1892
+ }
1893
+
1894
+ .home-card-number {
1895
+ color: var(--accent);
1896
+ font-size: .82rem;
1897
+ font-weight: 700;
1898
+ letter-spacing: .1em;
1899
+ }
1900
+
1901
+ .home-action-card h2,
1902
+ .documentation-card h2 {
1903
+ margin: 24px 0 8px;
1904
+ font-family: Fraunces, Georgia, serif;
1905
+ }
1906
+
1907
+ .home-action-card p,
1908
+ .documentation-card p,
1909
+ .home-overview-card p,
1910
+ .documentation-note p {
1911
+ color: var(--muted);
1912
+ line-height: 1.6;
1913
+ }
1914
+
1915
+ .meta-strip {
1916
+ display: flex;
1917
+ flex-wrap: wrap;
1918
+ gap: 12px;
1919
+ margin-top: 18px;
1920
+ }
1921
+
1922
+ .documentation-note {
1923
+ padding-bottom: 24px;
1924
+ }
1925
+
1926
+ .inline-action {
1927
+ color: var(--accent);
1928
+ font-weight: 700;
1929
+ text-decoration: none;
1930
+ }
1931
+
1932
+ @media (max-width: 900px) {
1933
+ .home-card-grid,
1934
+ .documentation-grid {
1935
+ grid-template-columns: 1fr;
1936
+ }
1937
+ }
1938
+
1939
+ * {
1940
+ box-sizing: border-box;
1941
+ }
1942
+
1943
+ body {
1944
+ margin: 0;
1945
+ font-family: "IBM Plex Sans", sans-serif;
1946
+ background:
1947
+ radial-gradient(circle at top left, rgba(44, 120, 180, 0.08), transparent 34%),
1948
+ radial-gradient(circle at top right, rgba(20, 145, 125, 0.08), transparent 32%),
1949
+ linear-gradient(180deg, #f8fbff 0%, var(--bg) 100%);
1950
+ color: var(--ink);
1951
+ scroll-behavior: smooth;
1952
+ }
1953
+
1954
+ .app-shell {
1955
+ max-width: 1600px;
1956
+ margin: 0 auto;
1957
+ padding: 28px;
1958
+ overflow-x: clip;
1959
+ }
1960
+
1961
+ .dashboard-frame {
1962
+ display: grid;
1963
+ grid-template-columns: minmax(300px, 330px) minmax(0, 1fr);
1964
+ gap: 22px;
1965
+ align-items: start;
1966
+ }
1967
+
1968
+ .dashboard-sidebar {
1969
+ position: sticky;
1970
+ top: 20px;
1971
+ display: grid;
1972
+ gap: 16px;
1973
+ padding: 22px;
1974
+ border-radius: 24px;
1975
+ border: 1px solid var(--line);
1976
+ background: rgba(255, 255, 255, 0.94);
1977
+ box-shadow: var(--shadow);
1978
+ }
1979
+
1980
+ .sidebar-brand {
1981
+ display: grid;
1982
+ gap: 0;
1983
+ }
1984
+
1985
+ .sidebar-logo-link {
1986
+ display: block;
1987
+ width: 100%;
1988
+ }
1989
+
1990
+ .sidebar-logo {
1991
+ width: 100%;
1992
+ max-width: 180px;
1993
+ height: auto;
1994
+ display: block;
1995
+ }
1996
+
1997
+ .sidebar-eyebrow {
1998
+ margin: 0;
1999
+ text-transform: uppercase;
2000
+ letter-spacing: 0.16em;
2001
+ font-size: 0.74rem;
2002
+ color: var(--accent);
2003
+ font-weight: 700;
2004
+ }
2005
+
2006
+ .sidebar-title {
2007
+ margin: 0;
2008
+ font-family: "Fraunces", serif;
2009
+ font-size: 2.1rem;
2010
+ line-height: 0.95;
2011
+ }
2012
+
2013
+ .sidebar-copy {
2014
+ margin: 0;
2015
+ color: var(--muted);
2016
+ line-height: 1.45;
2017
+ }
2018
+
2019
+ .sidebar-nav {
2020
+ display: grid;
2021
+ gap: 8px;
2022
+ }
2023
+
2024
+ .sidebar-link {
2025
+ display: block;
2026
+ padding: 11px 14px;
2027
+ border-radius: 14px;
2028
+ text-decoration: none;
2029
+ color: var(--ink);
2030
+ border: 1px solid transparent;
2031
+ background: rgba(255, 255, 255, 0.7);
2032
+ font-weight: 600;
2033
+ }
2034
+
2035
+ .sidebar-link:hover {
2036
+ border-color: rgba(201, 109, 67, 0.2);
2037
+ background: rgba(201, 109, 67, 0.08);
2038
+ }
2039
+
2040
+ .sidebar-link:active {
2041
+ background: var(--accent-soft);
2042
+ }
2043
+
2044
+ .sidebar-card {
2045
+ display: grid;
2046
+ gap: 8px;
2047
+ padding: 14px 16px;
2048
+ border-radius: 18px;
2049
+ border: 1px solid var(--line);
2050
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(245, 249, 253, 0.98));
2051
+ }
2052
+
2053
+ .sidebar-card span {
2054
+ font-size: 0.76rem;
2055
+ text-transform: uppercase;
2056
+ letter-spacing: 0.12em;
2057
+ color: var(--muted);
2058
+ font-weight: 700;
2059
+ }
2060
+
2061
+ .sidebar-card code {
2062
+ display: block;
2063
+ word-break: break-word;
2064
+ font-family: "IBM Plex Mono", monospace;
2065
+ font-size: 0.84rem;
2066
+ color: var(--ink);
2067
+ }
2068
+
2069
+ .dashboard-main {
2070
+ min-width: 0;
2071
+ display: grid;
2072
+ gap: 22px;
2073
+ }
2074
+
2075
+ .hero {
2076
+ display: grid;
2077
+ grid-template-columns: minmax(0, 1.6fr) minmax(280px, 1fr);
2078
+ gap: 20px;
2079
+ margin-bottom: 24px;
2080
+ }
2081
+
2082
+ .hero-copy,
2083
+ .hero-meta,
2084
+ .panel,
2085
+ .summary-card {
2086
+ background: var(--panel);
2087
+ border: 1px solid var(--line);
2088
+ border-radius: 24px;
2089
+ box-shadow: var(--shadow);
2090
+ }
2091
+
2092
+ .hero-copy {
2093
+ padding: 32px;
2094
+ }
2095
+
2096
+ .hero-copy h1 {
2097
+ margin: 10px 0 12px;
2098
+ font-family: "Fraunces", serif;
2099
+ font-size: clamp(2rem, 4.2vw, 3rem);
2100
+ line-height: 1.02;
2101
+ }
2102
+
2103
+ .hero-text {
2104
+ max-width: 58ch;
2105
+ color: var(--muted);
2106
+ font-size: 1.02rem;
2107
+ }
2108
+
2109
+ .eyebrow {
2110
+ margin: 0;
2111
+ text-transform: uppercase;
2112
+ letter-spacing: 0.16em;
2113
+ font-size: 0.76rem;
2114
+ color: var(--accent);
2115
+ font-weight: 700;
2116
+ }
2117
+
2118
+ .hero-meta {
2119
+ padding: 24px;
2120
+ display: grid;
2121
+ gap: 14px;
2122
+ }
2123
+
2124
+ .meta-chip {
2125
+ border-radius: 18px;
2126
+ padding: 16px 18px;
2127
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(237, 245, 246, 0.92));
2128
+ border: 1px solid var(--line);
2129
+ }
2130
+
2131
+ .meta-chip span,
2132
+ .summary-card span {
2133
+ display: block;
2134
+ font-size: 0.76rem;
2135
+ text-transform: uppercase;
2136
+ letter-spacing: 0.12em;
2137
+ color: var(--muted);
2138
+ margin-bottom: 6px;
2139
+ }
2140
+
2141
+ .meta-chip small {
2142
+ color: var(--ink);
2143
+ font-size: 0.96rem;
2144
+ line-height: 1.45;
2145
+ }
2146
+
2147
+ .workspace {
2148
+ display: grid;
2149
+ grid-template-columns: minmax(380px, 430px) minmax(0, 1fr);
2150
+ gap: 22px;
2151
+ align-items: start;
2152
+ }
2153
+
2154
+ .control-column,
2155
+ .result-column {
2156
+ display: grid;
2157
+ gap: 18px;
2158
+ align-content: start;
2159
+ min-width: 0;
2160
+ }
2161
+
2162
+ .control-column {
2163
+ overflow: visible;
2164
+ }
2165
+
2166
+ .panel {
2167
+ padding: 18px;
2168
+ min-width: 0;
2169
+ }
2170
+
2171
+ .plot-controls-panel {
2172
+ position: relative;
2173
+ z-index: 8;
2174
+ overflow: visible;
2175
+ }
2176
+
2177
+ .set-panel-grid {
2178
+ display: grid;
2179
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2180
+ gap: 18px;
2181
+ }
2182
+
2183
+ .workflow-card {
2184
+ min-width: 0;
2185
+ overflow: hidden;
2186
+ border: 1px solid var(--line);
2187
+ border-radius: 20px;
2188
+ background: var(--panel);
2189
+ box-shadow: var(--shadow);
2190
+ }
2191
+
2192
+ .workflow-card > summary {
2193
+ display: flex;
2194
+ align-items: center;
2195
+ justify-content: space-between;
2196
+ gap: 12px;
2197
+ padding: 18px 20px;
2198
+ cursor: pointer;
2199
+ list-style: none;
2200
+ color: var(--ink);
2201
+ font-weight: 700;
2202
+ letter-spacing: .04em;
2203
+ text-transform: uppercase;
2204
+ }
2205
+
2206
+ .workflow-card > summary::-webkit-details-marker {
2207
+ display: none;
2208
+ }
2209
+
2210
+ .workflow-card > summary::before {
2211
+ content: "+";
2212
+ order: 3;
2213
+ width: 22px;
2214
+ height: 22px;
2215
+ border: 1px solid var(--line);
2216
+ border-radius: 50%;
2217
+ color: var(--accent);
2218
+ text-align: center;
2219
+ line-height: 19px;
2220
+ font-size: 1.1rem;
2221
+ }
2222
+
2223
+ .workflow-card[open] > summary::before {
2224
+ content: "−";
2225
+ }
2226
+
2227
+ .workflow-card-toggle {
2228
+ margin-left: auto;
2229
+ color: var(--muted);
2230
+ font-size: .72rem;
2231
+ font-weight: 600;
2232
+ letter-spacing: .08em;
2233
+ }
2234
+
2235
+ .workflow-card-body {
2236
+ padding: 0 20px 20px;
2237
+ }
2238
+
2239
+ .control-column {
2240
+ position: sticky;
2241
+ top: 20px;
2242
+ }
2243
+
2244
+ .panel-header {
2245
+ display: flex;
2246
+ align-items: center;
2247
+ justify-content: space-between;
2248
+ margin-bottom: 14px;
2249
+ }
2250
+
2251
+ .panel-header h2 {
2252
+ margin: 0;
2253
+ font-size: 1rem;
2254
+ letter-spacing: 0.04em;
2255
+ text-transform: uppercase;
2256
+ }
2257
+
2258
+ .panel-body {
2259
+ margin-top: 14px;
2260
+ }
2261
+
2262
+ .run-panel {
2263
+ position: relative;
2264
+ overflow: hidden;
2265
+ background: linear-gradient(135deg, #2a6f9d, #1f5f89);
2266
+ color: #f9fcff;
2267
+ }
2268
+
2269
+ .helper-panel {
2270
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(244, 249, 253, 0.98));
2271
+ }
2272
+
2273
+ .helper-copy {
2274
+ margin: 0 0 14px;
2275
+ color: var(--muted);
2276
+ }
2277
+
2278
+ .helper-examples {
2279
+ display: grid;
2280
+ gap: 10px;
2281
+ }
2282
+
2283
+ .helper-chip {
2284
+ border-radius: 16px;
2285
+ padding: 14px;
2286
+ background: rgba(44, 120, 180, 0.08);
2287
+ border: 1px solid rgba(44, 120, 180, 0.16);
2288
+ min-width: 0;
2289
+ }
2290
+
2291
+ .helper-chip-note {
2292
+ background: rgba(22, 51, 59, 0.06);
2293
+ border-color: rgba(22, 51, 59, 0.12);
2294
+ }
2295
+
2296
+ .helper-chip strong {
2297
+ display: block;
2298
+ margin-bottom: 6px;
2299
+ font-family: "Fraunces", serif;
2300
+ font-size: 1.05rem;
2301
+ }
2302
+
2303
+ .helper-chip span {
2304
+ color: var(--muted);
2305
+ line-height: 1.4;
2306
+ overflow-wrap: anywhere;
2307
+ }
2308
+
2309
+ .run-panel::before {
2310
+ content: "";
2311
+ position: absolute;
2312
+ inset: 0;
2313
+ background: linear-gradient(90deg, rgba(255, 255, 255, 0.06), transparent);
2314
+ pointer-events: none;
2315
+ }
2316
+
2317
+ .run-panel .panel-header h2,
2318
+ .run-panel label,
2319
+ .run-panel-copy,
2320
+ .run-panel .field-help,
2321
+ .run-panel .status-banner {
2322
+ position: relative;
2323
+ z-index: 1;
2324
+ }
2325
+
2326
+ .run-panel-copy {
2327
+ margin: 0 0 18px;
2328
+ max-width: 70ch;
2329
+ color: rgba(255, 255, 255, 0.84);
2330
+ font-size: 1rem;
2331
+ }
2332
+
2333
+ .run-panel .field-input,
2334
+ .run-panel input,
2335
+ .run-panel select {
2336
+ border-color: rgba(255, 255, 255, 0.14);
2337
+ background: rgba(255, 255, 255, 0.96);
2338
+ }
2339
+
2340
+ .run-controls-grid {
2341
+ display: grid;
2342
+ grid-template-columns: 1fr;
2343
+ gap: 14px;
2344
+ position: relative;
2345
+ z-index: 1;
2346
+ }
2347
+
2348
+ .plot-controls-panel .run-controls-grid {
2349
+ position: static;
2350
+ }
2351
+
2352
+ .run-actions {
2353
+ display: flex;
2354
+ flex-direction: column;
2355
+ align-items: stretch;
2356
+ gap: 14px;
2357
+ margin-top: 18px;
2358
+ position: relative;
2359
+ z-index: 1;
2360
+ }
2361
+
2362
+ .field-grid {
2363
+ display: grid;
2364
+ gap: 14px;
2365
+ }
2366
+
2367
+ .field-block,
2368
+ .panel-body,
2369
+ .summary-card,
2370
+ .meta-chip {
2371
+ min-width: 0;
2372
+ }
2373
+
2374
+ .field-block label {
2375
+ display: block;
2376
+ margin-bottom: 6px;
2377
+ font-weight: 600;
2378
+ }
2379
+
2380
+ .field-input,
2381
+ input,
2382
+ select {
2383
+ width: 100%;
2384
+ border-radius: 14px;
2385
+ border: 1px solid var(--line);
2386
+ background: var(--panel-strong);
2387
+ min-height: 56px;
2388
+ padding: 14px 16px;
2389
+ font-size: 1.05rem;
2390
+ font-weight: 500;
2391
+ line-height: 1.35;
2392
+ color: var(--ink);
2393
+ }
2394
+
2395
+ .field-input:focus,
2396
+ input:focus,
2397
+ select:focus {
2398
+ outline: 0;
2399
+ border-color: rgba(44, 120, 180, 0.65);
2400
+ box-shadow: 0 0 0 2px rgba(44, 120, 180, 0.18);
2401
+ }
2402
+
2403
+ html input::placeholder {
2404
+ color: #9aa7b2;
2405
+ opacity: 1;
2406
+ }
2407
+
2408
+ html .field-input-default {
2409
+ color: #9aa7b2 !important;
2410
+ }
2411
+
2412
+ html .field-input-invalid {
2413
+ border-color: #dc3545 !important;
2414
+ background: #fff5f5 !important;
2415
+ box-shadow: 0 0 0 2px rgba(220, 53, 69, .14);
2416
+ }
2417
+
2418
+ html .field-input {
2419
+ min-height: 48px;
2420
+ padding: 10px 12px;
2421
+ font-size: .95rem;
2422
+ }
2423
+
2424
+ .field-help {
2425
+ display: block;
2426
+ margin-top: 6px;
2427
+ color: var(--muted);
2428
+ line-height: 1.35;
2429
+ overflow-wrap: anywhere;
2430
+ }
2431
+
2432
+ .dashboard-dropdown .Select-control,
2433
+ .dashboard-dropdown .Select-menu-outer,
2434
+ .dashboard-dropdown .Select-menu,
2435
+ .dashboard-dropdown .Select-value,
2436
+ .dashboard-dropdown .Select-placeholder,
2437
+ .dashboard-dropdown .Select-input > input,
2438
+ .dashboard-dropdown .Select-option,
2439
+ .dashboard-dropdown .Select-value-label,
2440
+ .dashboard-dropdown .VirtualizedSelectOption,
2441
+ .dashboard-dropdown .VirtualizedSelectFocusedOption,
2442
+ .dashboard-dropdown .Select--single > .Select-control .Select-value,
2443
+ .dashboard-dropdown .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label {
2444
+ color: var(--ink) !important;
2445
+ }
2446
+
2447
+ .dashboard-dropdown .Select-control {
2448
+ min-height: 56px;
2449
+ border-radius: 14px;
2450
+ border: 1px solid var(--line);
2451
+ background: var(--panel-strong);
2452
+ }
2453
+
2454
+ .dashboard-dropdown .Select-placeholder,
2455
+ .dashboard-dropdown .Select--single > .Select-control .Select-value {
2456
+ line-height: 54px;
2457
+ font-size: 1.05rem;
2458
+ font-weight: 500;
2459
+ }
2460
+
2461
+ .dashboard-dropdown .Select-input {
2462
+ height: 54px;
2463
+ }
2464
+
2465
+ .dashboard-dropdown .Select-input > input {
2466
+ line-height: 1.35 !important;
2467
+ padding-top: 8px !important;
2468
+ padding-bottom: 8px !important;
2469
+ }
2470
+
2471
+ .dashboard-dropdown .Select-menu-outer {
2472
+ border: 1px solid var(--line);
2473
+ background: var(--panel-strong);
2474
+ box-shadow: var(--shadow);
2475
+ z-index: 30;
2476
+ }
2477
+
2478
+ .plot-controls-panel .dashboard-dropdown .Select-menu-outer {
2479
+ z-index: 120;
2480
+ }
2481
+
2482
+ .dashboard-dropdown .VirtualizedSelectFocusedOption,
2483
+ .dashboard-dropdown .Select-option.is-focused {
2484
+ background: rgba(201, 109, 67, 0.12);
2485
+ }
2486
+
2487
+ .dashboard-dropdown .Select-option.is-selected {
2488
+ background: rgba(22, 51, 59, 0.08);
2489
+ }
2490
+
2491
+ .run-panel .dashboard-dropdown .Select-control,
2492
+ .run-panel .dashboard-dropdown .Select-menu-outer {
2493
+ border-color: rgba(255, 255, 255, 0.14);
2494
+ background: rgba(255, 255, 255, 0.96);
2495
+ }
2496
+
2497
+ .run-button {
2498
+ border: 0;
2499
+ border-radius: 16px;
2500
+ padding: 15px 18px;
2501
+ color: white;
2502
+ font-weight: 700;
2503
+ font-size: 1rem;
2504
+ cursor: pointer;
2505
+ transition: transform 180ms ease, box-shadow 180ms ease;
2506
+ min-width: 220px;
2507
+ }
2508
+
2509
+ .run-button:hover {
2510
+ transform: translateY(-1px);
2511
+ }
2512
+
2513
+ .run-button-primary {
2514
+ flex: 0 0 auto;
2515
+ min-height: 68px;
2516
+ font-size: 1.15rem;
2517
+ letter-spacing: 0.04em;
2518
+ text-transform: uppercase;
2519
+ background: linear-gradient(135deg, #54a6de, #2d78b5);
2520
+ box-shadow: 0 14px 30px rgba(45, 120, 181, 0.24);
2521
+ }
2522
+
2523
+ .export-button {
2524
+ flex: 0 0 auto;
2525
+ background: rgba(255, 255, 255, 0.18);
2526
+ color: white;
2527
+ border: 1px solid rgba(255, 255, 255, 0.24);
2528
+ box-shadow: none;
2529
+ }
2530
+
2531
+ .status-banner {
2532
+ margin-top: 12px;
2533
+ border-radius: 16px;
2534
+ padding: 12px 14px;
2535
+ font-weight: 600;
2536
+ }
2537
+
2538
+ .status-banner.idle {
2539
+ background: rgba(22, 51, 59, 0.06);
2540
+ color: var(--muted);
2541
+ }
2542
+
2543
+ .status-banner.success {
2544
+ background: rgba(13, 61, 40, 0.78);
2545
+ color: white;
2546
+ }
2547
+
2548
+ .status-banner.error {
2549
+ background: rgba(182, 69, 61, 0.12);
2550
+ color: var(--error);
2551
+ }
2552
+
2553
+ .summary-grid {
2554
+ display: grid;
2555
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
2556
+ gap: 14px;
2557
+ }
2558
+
2559
+ .summary-card {
2560
+ padding: 18px 20px;
2561
+ }
2562
+
2563
+ .summary-card strong {
2564
+ font-family: "Fraunces", serif;
2565
+ font-size: 1.25rem;
2566
+ }
2567
+
2568
+ .graph-panel,
2569
+ .table-panel {
2570
+ overflow: hidden;
2571
+ }
2572
+
2573
+ .empty-section {
2574
+ padding: 16px;
2575
+ border-radius: 16px;
2576
+ background: var(--accent-soft);
2577
+ color: var(--ink);
2578
+ }
2579
+
2580
+ @media (max-width: 1080px) {
2581
+ .dashboard-frame,
2582
+ .hero,
2583
+ .workspace {
2584
+ grid-template-columns: 1fr;
2585
+ }
2586
+
2587
+ .dashboard-sidebar,
2588
+ .control-column {
2589
+ position: static;
2590
+ }
2591
+
2592
+ .set-panel-grid,
2593
+ .run-controls-grid {
2594
+ grid-template-columns: 1fr;
2595
+ }
2596
+
2597
+ .run-actions {
2598
+ flex-direction: column;
2599
+ }
2600
+
2601
+ .app-shell {
2602
+ padding: 18px;
2603
+ }
2604
+ }
2605
+
2606
+ /* Final RosettaX visual overrides. */
2607
+ body {
2608
+ background: #ffffff;
2609
+ color: #212529;
2610
+ font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
2611
+ font-size: .95rem;
2612
+ }
2613
+
2614
+ .app-shell { max-width: none; padding: 0; }
2615
+ .dashboard-frame { grid-template-columns: 210px minmax(0, 1fr); gap: 0; min-height: 100vh; }
2616
+ .dashboard-sidebar { position: sticky; top: 0; height: 100vh; padding: 12px 8px; border: 0; border-radius: 0; background: #fff; box-shadow: none; }
2617
+ .sidebar-logo { width: 190px; max-width: 100%; margin: 0 auto 8px; }
2618
+ .sidebar-nav { gap: 2px; }
2619
+ .sidebar-link { padding: 7px 10px; border: 0; border-radius: 8px; background: transparent; color: #343a40; font-size: .92rem; font-weight: 500; }
2620
+ .sidebar-link:hover, .sidebar-link.active { border: 0; background: #2f4358; color: #fff; }
2621
+ .dashboard-main { padding: 8px 16px 36px; gap: 12px; }
2622
+ .page-content-stack { gap: 12px; }
2623
+ .page-hero, .hero-copy, .hero-meta, .panel, .home-action-card, .summary-card { border: 1px solid rgba(128,128,128,.25); border-radius: 8px; background: #fff; box-shadow: 0 .35rem .9rem rgba(0,0,0,.08); }
2624
+ .page-hero { padding: 12px 14px; border-left: 4px solid rgba(13,110,253,.75); background: #fff; }
2625
+ .page-hero h1 { max-width: none; margin: 0 0 6px; font-family: "IBM Plex Sans", "Segoe UI", sans-serif; font-size: 1.7rem; line-height: 1.15; letter-spacing: 0; }
2626
+ .page-hero .hero-text { margin: 0; max-width: 900px; font-size: .86rem; }
2627
+ .home-card-grid, .documentation-grid { gap: 8px; }
2628
+ .home-action-card { min-height: 190px; padding: 12px; border-radius: 8px; box-shadow: 0 .2rem .6rem rgba(0,0,0,.06); }
2629
+ .home-action-card:hover { border-color: rgba(13,110,253,.35); transform: none; }
2630
+ .home-action-card h2, .documentation-card h2 { margin: 10px 0 7px; font-family: "IBM Plex Sans", "Segoe UI", sans-serif; font-size: 1.02rem; font-weight: 750; }
2631
+ .home-action-card p, .documentation-card p, .home-overview-card p, .documentation-note p { font-size: .86rem; line-height: 1.45; }
2632
+ .home-overview-card, .documentation-note { padding: 0 10px 12px; }
2633
+ .panel { padding: 0; overflow: hidden; }
2634
+ .panel-header {
2635
+ margin: 0;
2636
+ padding: 8px 10px;
2637
+ background: rgba(13,110,253,.10);
2638
+ border-bottom: 1px solid rgba(13,110,253,.20);
2639
+ /* Let the header meet the colored card accent without a white notch. */
2640
+ border-top-left-radius: 0;
2641
+ border-top-right-radius: 8px;
2642
+ }
2643
+ .workflow-card > summary,
2644
+ .home-section-header,
2645
+ .ui-card > .card-header,
2646
+ .single-workspace .representation-card > summary,
2647
+ .single-workspace .representation-card > .representation-card-header {
2648
+ border-top-left-radius: 0;
2649
+ border-top-right-radius: 8px;
2650
+ }
2651
+
2652
+ /* Dash 4 renders dropdown options with its own option-list classes. Keep
2653
+ those rows compact as well as the legacy React-Select classes above. */
2654
+ .dash-dropdown-content .dash-dropdown-options {
2655
+ max-height: 200px !important;
2656
+ overflow-y: auto !important;
2657
+ }
2658
+
2659
+ .dash-dropdown-content .dash-dropdown-search-container {
2660
+ box-sizing: border-box !important;
2661
+ min-height: 44px !important;
2662
+ height: 44px !important;
2663
+ margin: 6px !important;
2664
+ padding: 0 10px !important;
2665
+ }
2666
+
2667
+ .dash-dropdown-content .dash-dropdown-search {
2668
+ box-sizing: border-box !important;
2669
+ min-width: 0 !important;
2670
+ min-height: 0 !important;
2671
+ height: 42px !important;
2672
+ padding: 0 !important;
2673
+ line-height: 22px !important;
2674
+ }
2675
+
2676
+ .dash-dropdown-content .dash-dropdown-option,
2677
+ .dash-dropdown-content .dash-options-list-option-wrapper,
2678
+ .dash-dropdown-content .dash-options-list-option,
2679
+ .dash-dropdown-content .dash-options-list-option-text {
2680
+ box-sizing: border-box !important;
2681
+ height: 38px !important;
2682
+ min-height: 38px !important;
2683
+ max-height: 38px !important;
2684
+ line-height: 22px !important;
2685
+ }
2686
+
2687
+ .dash-dropdown-content .dash-dropdown-option {
2688
+ display: flex !important;
2689
+ align-items: center !important;
2690
+ padding: 0 !important;
2691
+ }
2692
+
2693
+ .dash-dropdown-content .dash-options-list-option-wrapper {
2694
+ display: flex !important;
2695
+ align-items: center !important;
2696
+ width: 0 !important;
2697
+ flex: 0 0 0 !important;
2698
+ overflow: hidden !important;
2699
+ padding: 0 !important;
2700
+ }
2701
+
2702
+ .dash-dropdown-content .dash-options-list-option {
2703
+ width: 100% !important;
2704
+ padding: 0 12px !important;
2705
+ }
2706
+
2707
+ .dash-dropdown-content .dash-options-list-option-text {
2708
+ margin: 0 !important;
2709
+ padding: 0 !important;
2710
+ }
2711
+ .panel-header h2 { font-size: 1.02rem; font-weight: 750; letter-spacing: 0; text-transform: none; }
2712
+ .panel > p, .panel > .helper-copy, .panel > .run-panel-copy { padding: 0 10px; }
2713
+ .panel-body { padding: 0 10px 10px; }
2714
+ .workflow-card { border-radius: 8px; box-shadow: 0 .2rem .6rem rgba(0,0,0,.06); }
2715
+ .workflow-card > summary { padding: 9px 10px; font-size: .94rem; letter-spacing: 0; }
2716
+ .workflow-card-body { padding: 0 10px 10px; }
2717
+ .run-panel { background: #fff; color: #212529; }
2718
+ .run-button-primary { background: #2f4358; border-radius: 4px; }
2719
+
2720
+ .home-info-card,
2721
+ .home-capability-card {
2722
+ overflow: hidden;
2723
+ border: 1px solid rgba(128, 128, 128, .25);
2724
+ border-left: 4px solid rgba(13, 110, 253, .75);
2725
+ border-radius: 8px;
2726
+ background: #fff;
2727
+ box-shadow: 0 .35rem .9rem rgba(0, 0, 0, .08);
2728
+ }
2729
+
2730
+ .home-section-header {
2731
+ padding: 8px 12px;
2732
+ background: rgba(13, 110, 253, .10);
2733
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
2734
+ font-size: 1.02rem;
2735
+ font-weight: 750;
2736
+ }
2737
+
2738
+ .home-info-body,
2739
+ .home-capability-body {
2740
+ padding: 14px 12px;
2741
+ }
2742
+
2743
+ .home-info-copy {
2744
+ margin: 0 0 14px;
2745
+ color: #52697a;
2746
+ font-size: .86rem;
2747
+ }
2748
+
2749
+ .home-button-row {
2750
+ display: flex;
2751
+ align-items: center;
2752
+ flex-wrap: wrap;
2753
+ gap: 8px;
2754
+ }
2755
+
2756
+ .home-button,
2757
+ .home-workflow-button {
2758
+ display: inline-flex;
2759
+ align-items: center;
2760
+ justify-content: center;
2761
+ min-height: 32px;
2762
+ padding: 6px 10px;
2763
+ border: 1px solid transparent;
2764
+ border-radius: 4px;
2765
+ font-size: .82rem;
2766
+ font-weight: 700;
2767
+ text-decoration: none;
2768
+ }
2769
+
2770
+ .home-button-primary { background: #f59e0b; color: #fff; }
2771
+ .home-button-outline { border-color: #2f4358; color: #2f4358; background: #fff; }
2772
+ .home-button-info { border-color: #58a9f5; color: #2877b9; background: #fff; }
2773
+ .home-button-muted { border-color: #b9c5cc; color: #6c7c85; background: #fff; }
2774
+ .home-button:hover, .home-workflow-button:hover { filter: brightness(.97); text-decoration: none; }
2775
+ .citation-bibtex { margin: 14px 0 0; padding: 14px; background: rgba(0, 0, 0, .06); border-radius: 6px; white-space: pre-wrap; overflow-x: auto; }
2776
+
2777
+ .home-capability-grid {
2778
+ display: grid;
2779
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2780
+ gap: 8px;
2781
+ }
2782
+
2783
+ .home-capability-card {
2784
+ display: flex;
2785
+ flex-direction: column;
2786
+ border-left: 1px solid rgba(13, 110, 253, .16);
2787
+ border-color: rgba(13, 110, 253, .16);
2788
+ }
2789
+
2790
+ .home-capability-card .home-section-header {
2791
+ padding: 8px 10px;
2792
+ font-size: .94rem;
2793
+ }
2794
+
2795
+ .home-capability-body {
2796
+ display: flex;
2797
+ flex: 1;
2798
+ flex-direction: column;
2799
+ }
2800
+
2801
+ .home-capability-body > p {
2802
+ min-height: 58px;
2803
+ margin: 0 0 12px;
2804
+ color: #52697a;
2805
+ font-size: .80rem;
2806
+ line-height: 1.4;
2807
+ }
2808
+
2809
+ .home-step-list {
2810
+ display: flex;
2811
+ flex-direction: column;
2812
+ gap: 6px;
2813
+ margin-bottom: 14px;
2814
+ color: #3f515d;
2815
+ font-size: .78rem;
2816
+ }
2817
+
2818
+ .home-step-list > div {
2819
+ display: flex;
2820
+ align-items: center;
2821
+ gap: 7px;
2822
+ }
2823
+
2824
+ .home-step-number {
2825
+ display: inline-flex;
2826
+ align-items: center;
2827
+ justify-content: center;
2828
+ width: 16px;
2829
+ height: 16px;
2830
+ border: 1px solid #b8d4ff;
2831
+ border-radius: 50%;
2832
+ background: #edf4ff;
2833
+ color: #2672d6;
2834
+ font-size: .68rem;
2835
+ }
2836
+
2837
+ .home-workflow-button {
2838
+ width: 100%;
2839
+ margin-top: auto;
2840
+ background: #2f4358;
2841
+ color: #fff;
2842
+ }
2843
+
2844
+ .home-metrics-card { margin-top: 0; }
2845
+
2846
+ .home-metrics-grid {
2847
+ display: grid;
2848
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2849
+ gap: 8px;
2850
+ padding: 12px;
2851
+ }
2852
+
2853
+ .home-metric-tile {
2854
+ display: flex;
2855
+ flex-direction: column;
2856
+ gap: 2px;
2857
+ padding: 10px;
2858
+ border: 1px solid #d9e7fb;
2859
+ border-radius: 8px;
2860
+ background: #f7faff;
2861
+ color: #52697a;
2862
+ font-size: .78rem;
2863
+ }
2864
+
2865
+ .home-metric-value {
2866
+ color: #26323b;
2867
+ font-size: 1.45rem;
2868
+ line-height: 1;
2869
+ }
2870
+
2871
+ @media (max-width: 900px) {
2872
+ .dashboard-frame { grid-template-columns: 1fr; }
2873
+ .dashboard-sidebar { position: static; height: auto; }
2874
+ .home-capability-grid, .home-metrics-grid { grid-template-columns: 1fr 1fr; }
2875
+ }
2876
+
2877
+ @media (max-width: 560px) {
2878
+ .home-capability-grid, .home-metrics-grid { grid-template-columns: 1fr; }
2879
+ }
2880
+
2881
+ /* Sidebar sizing correction: keep the navigation compact instead of letting
2882
+ the full-height rail stretch each grid row. */
2883
+ .dashboard-frame {
2884
+ grid-template-columns: 312px minmax(0, 1fr);
2885
+ }
2886
+
2887
+ .dashboard-sidebar {
2888
+ display: flex;
2889
+ flex-direction: column;
2890
+ align-items: stretch;
2891
+ align-content: flex-start;
2892
+ gap: 16px;
2893
+ width: 312px;
2894
+ min-width: 312px;
2895
+ height: 100vh;
2896
+ padding: 16px 12px;
2897
+ }
2898
+
2899
+ .sidebar-brand,
2900
+ .sidebar-nav {
2901
+ flex: 0 0 auto;
2902
+ height: auto;
2903
+ }
2904
+
2905
+ .sidebar-nav {
2906
+ display: flex;
2907
+ flex-direction: column;
2908
+ align-items: stretch;
2909
+ gap: 4px;
2910
+ }
2911
+
2912
+ .sidebar-logo {
2913
+ width: 364px;
2914
+ max-width: 100%;
2915
+ height: auto;
2916
+ margin: 0 auto;
2917
+ display: block;
2918
+ }
2919
+
2920
+ .sidebar-link {
2921
+ display: flex;
2922
+ align-items: center;
2923
+ min-height: 38px;
2924
+ height: 38px;
2925
+ flex: 0 0 38px;
2926
+ box-sizing: border-box;
2927
+ }
2928
+
2929
+ .set-panel-grid {
2930
+ grid-template-columns: 1fr;
2931
+ }
2932
+
2933
+ /* Keep Parameter Sweep configuration cards compact and let the result area
2934
+ use the remaining horizontal space. */
2935
+ html body .workspace {
2936
+ grid-template-columns: minmax(280px, 320px) minmax(0, 1fr) !important;
2937
+ }
2938
+
2939
+ .single-workspace .control-column {
2940
+ display: flex;
2941
+ flex-direction: column;
2942
+ gap: 18px;
2943
+ }
2944
+
2945
+ .single-workspace {
2946
+ grid-template-columns: minmax(280px, 320px) minmax(0, 1fr);
2947
+ }
2948
+
2949
+ .single-workspace .workflow-card,
2950
+ .single-workspace .run-panel {
2951
+ width: 100%;
2952
+ box-sizing: border-box;
2953
+ }
2954
+
2955
+ .single-workspace .run-panel {
2956
+ padding: 0 0 12px;
2957
+ overflow: hidden;
2958
+ background: #fff;
2959
+ color: #212529;
2960
+ }
2961
+
2962
+ .single-workspace .run-panel .panel-header {
2963
+ margin: 0 0 12px;
2964
+ padding: 8px 10px;
2965
+ background: rgba(13, 110, 253, .10);
2966
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
2967
+ }
2968
+
2969
+ .single-workspace .run-panel .field-block,
2970
+ .single-workspace .run-panel .run-button,
2971
+ .single-workspace .run-panel .status-banner {
2972
+ width: auto;
2973
+ margin-left: 12px;
2974
+ margin-right: 12px;
2975
+ }
2976
+
2977
+ .single-workspace .run-panel .run-button {
2978
+ display: block;
2979
+ width: calc(100% - 24px);
2980
+ box-sizing: border-box;
2981
+ min-width: 0;
2982
+ }
2983
+
2984
+ .single-workspace .run-panel .status-banner {
2985
+ margin-bottom: 0;
2986
+ }
2987
+
2988
+ .single-workspace .representation-card {
2989
+ overflow: hidden;
2990
+ }
2991
+
2992
+ .single-workspace .representation-card > summary {
2993
+ padding: 9px 10px;
2994
+ background: rgba(13, 110, 253, .10);
2995
+ border-bottom: 1px solid rgba(13, 110, 253, .20);
2996
+ font-size: .94rem;
2997
+ font-weight: 750;
2998
+ }
2999
+
3000
+ .single-workspace .representation-card-body {
3001
+ display: flex;
3002
+ flex-direction: column;
3003
+ gap: 12px;
3004
+ padding: 14px 12px 12px;
3005
+ }
3006
+
3007
+ .single-workspace .representation-card-body .field-block {
3008
+ margin: 0;
3009
+ }
3010
+
3011
+ .single-workspace .representation-top-row {
3012
+ display: contents;
3013
+ }
3014
+
3015
+ .single-workspace .representation-card-body .nearfield-mode-field {
3016
+ margin-top: -4px;
3017
+ }
3018
+
3019
+ .plot-computing-indicator {
3020
+ padding: 10px 16px;
3021
+ border: 1px solid rgba(79, 141, 247, .35);
3022
+ border-radius: 999px;
3023
+ background: rgba(255, 255, 255, .96);
3024
+ color: #315f9e;
3025
+ box-shadow: 0 4px 14px rgba(30, 55, 90, .18);
3026
+ font-size: .9rem;
3027
+ font-weight: 700;
3028
+ }
3029
+
3030
+ .single-workspace .representation-card-body .run-button {
3031
+ width: 100%;
3032
+ min-width: 0;
3033
+ margin: 0;
3034
+ box-sizing: border-box;
3035
+ }
3036
+
3037
+ .single-workspace .representation-card-body .status-banner {
3038
+ margin: 0;
3039
+ }
3040
+
3041
+ @media (max-width: 1080px) {
3042
+ .single-workspace {
3043
+ grid-template-columns: 1fr;
3044
+ }
3045
+ }
3046
+
3047
+ /* Final route and dropdown sizing overrides. */
3048
+ .main-tabs .tab-container,
3049
+ .main-tabs > div:first-child {
3050
+ display: none !important;
3051
+ }
3052
+
3053
+ .dashboard-dropdown .Select-control {
3054
+ min-height: 38px;
3055
+ height: 38px;
3056
+ border-radius: 4px;
3057
+ }
3058
+
3059
+ .dashboard-dropdown .Select-placeholder,
3060
+ .dashboard-dropdown .Select--single > .Select-control .Select-value {
3061
+ line-height: 36px;
3062
+ font-size: .95rem;
3063
+ }
3064
+
3065
+ .dashboard-dropdown .Select-input,
3066
+ .dashboard-dropdown .Select-input > input {
3067
+ height: 36px;
3068
+ line-height: 36px !important;
3069
+ }
3070
+
3071
+ .dashboard-dropdown .Select-option,
3072
+ .dashboard-dropdown .VirtualizedSelectOption,
3073
+ .dashboard-dropdown .VirtualizedSelectFocusedOption {
3074
+ min-height: 34px;
3075
+ height: 34px;
3076
+ padding: 7px 10px;
3077
+ box-sizing: border-box;
3078
+ line-height: 20px;
3079
+ font-size: .95rem;
3080
+ }
3081
+
3082
+ .dashboard-dropdown .Select-menu {
3083
+ max-height: 240px;
3084
+ }
3085
+
3086
+ .plot-controls-panel,
3087
+ .run-panel,
3088
+ .helper-panel {
3089
+ padding-bottom: 12px;
3090
+ }
3091
+
3092
+ .plot-controls-panel > .helper-copy,
3093
+ .plot-controls-panel > .run-controls-grid,
3094
+ .run-panel > .run-panel-copy,
3095
+ .run-panel > .run-actions,
3096
+ .run-panel > .status-banner,
3097
+ .helper-panel > .helper-copy,
3098
+ .helper-panel > .helper-examples {
3099
+ margin-left: 12px;
3100
+ margin-right: 12px;
3101
+ }
3102
+
3103
+ .run-panel > .run-actions {
3104
+ margin-bottom: 12px;
3105
+ }
3106
+
3107
+ .run-panel > .status-banner {
3108
+ margin-bottom: 0;
3109
+ }
3110
+
3111
+ /* Shared card geometry: keep every card's header clipped to the same outer
3112
+ corner and aligned with its left accent, including home-page cards. */
3113
+ .ui-card,
3114
+ .panel,
3115
+ .workflow-card,
3116
+ .home-info-card,
3117
+ .home-capability-card,
3118
+ .home-action-card,
3119
+ .summary-card {
3120
+ overflow: hidden;
3121
+ border-radius: 8px;
3122
+ }
3123
+
3124
+ .ui-card > .card-header,
3125
+ .ui-card > .panel-header,
3126
+ .ui-card > .home-section-header,
3127
+ .workflow-card > summary,
3128
+ .home-section-header,
3129
+ .single-workspace .representation-card > summary,
3130
+ .single-workspace .representation-card > .representation-card-header {
3131
+ border-top-left-radius: 0;
3132
+ border-top-right-radius: 8px;
3133
+ }
3134
+
3135
+ /* Match each workflow header to its left accent, including the summary
3136
+ headers used by Experiment and Single setup cards. */
3137
+ .ui-card--blue > summary { background: rgba(13, 110, 253, .10); border-bottom-color: rgba(13, 110, 253, .20); }
3138
+ .ui-card--green > summary { background: rgba(25, 135, 84, .10); border-bottom-color: rgba(25, 135, 84, .20); }
3139
+ .ui-card--yellow > summary { background: rgba(255, 215, 0, .10); border-bottom-color: rgba(255, 215, 0, .20); }
3140
+ .ui-card--cyan > summary { background: rgba(13, 202, 240, .10); border-bottom-color: rgba(13, 202, 240, .20); }
3141
+ .ui-card--purple > summary { background: rgba(111, 66, 193, .10); border-bottom-color: rgba(111, 66, 193, .20); }
3142
+
3143
+ @media (min-width: 700px) {
3144
+ .dashboard-frame {
3145
+ grid-template-columns: 312px minmax(0, 1fr);
3146
+ }
3147
+
3148
+ .dashboard-sidebar {
3149
+ width: 312px;
3150
+ min-width: 312px;
3151
+ }
3152
+
3153
+ .workspace {
3154
+ grid-template-columns: minmax(540px, 640px) minmax(0, 1fr) !important;
3155
+ }
3156
+ }
3157
+
3158
+ @media (max-width: 1080px) {
3159
+ .dashboard-frame {
3160
+ grid-template-columns: 1fr;
3161
+ }
3162
+
3163
+ .dashboard-sidebar {
3164
+ width: auto;
3165
+ min-width: 0;
3166
+ position: static;
3167
+ height: auto;
3168
+ }
3169
+
3170
+ .workspace,
3171
+ .single-workspace {
3172
+ grid-template-columns: 1fr !important;
3173
+ }
3174
+ }
3175
+
3176
+ /* Compact controls inside the Source, Scatterer, and Detector cards. */
3177
+ html .workflow-card .field-input {
3178
+ height: 42px !important;
3179
+ min-height: 42px !important;
3180
+ padding: 8px 12px !important;
3181
+ border-radius: 8px;
3182
+ font-size: .95rem;
3183
+ }
3184
+
3185
+ html .workflow-card .dashboard-dropdown .Select-control {
3186
+ height: 42px !important;
3187
+ min-height: 42px !important;
3188
+ border-radius: 8px;
3189
+ }
3190
+
3191
+ html .workflow-card .dashboard-dropdown .Select-placeholder,
3192
+ html .workflow-card .dashboard-dropdown .Select--single > .Select-control .Select-value {
3193
+ line-height: 40px;
3194
+ font-size: .95rem;
3195
+ }
3196
+
3197
+ html .plot-options-card .plot-option-control,
3198
+ html .plot-options-card .plot-option-control.dashboard-dropdown,
3199
+ html .plot-options-card .plot-option-control.dashboard-dropdown .Select-control {
3200
+ width: 104px !important;
3201
+ min-width: 104px !important;
3202
+ height: 38px !important;
3203
+ min-height: 38px !important;
3204
+ box-sizing: border-box;
3205
+ }
3206
+
3207
+ .graph-axis-card {
3208
+ display: block;
3209
+ margin: 0 14px;
3210
+ padding: 12px 14px;
3211
+ border: 1px solid rgba(96, 110, 123, .20);
3212
+ border-radius: 8px;
3213
+ background: #f7f8f9;
3214
+ }
3215
+
3216
+ .graph-axis-title {
3217
+ margin-bottom: 10px;
3218
+ color: #52616d;
3219
+ font-size: .78rem;
3220
+ font-weight: 750;
3221
+ letter-spacing: .04em;
3222
+ text-transform: uppercase;
3223
+ }
3224
+
3225
+ .graph-axis-fields {
3226
+ display: flex;
3227
+ gap: 14px;
3228
+ flex: 1;
3229
+ }
3230
+
3231
+ .graph-axis-field {
3232
+ flex: 0 0 230px;
3233
+ }
3234
+
3235
+ .graph-axis-field label {
3236
+ display: block;
3237
+ margin-bottom: 4px;
3238
+ color: #63727c;
3239
+ font-size: .72rem;
3240
+ font-weight: 650;
3241
+ }
3242
+
3243
+ /* Match Particle Explorer representation controls to the compact Graph Axes
3244
+ card used by Parameter Sweep. */
3245
+ .single-workspace .representation-card {
3246
+ width: calc(100% - 28px);
3247
+ max-width: none;
3248
+ height: fit-content;
3249
+ min-height: 0;
3250
+ margin: 0 14px;
3251
+ align-self: start;
3252
+ box-sizing: border-box;
3253
+ padding: 12px 14px;
3254
+ border: 1px solid rgba(96, 110, 123, .20);
3255
+ border-radius: 8px;
3256
+ background: #f7f8f9;
3257
+ box-shadow: none;
3258
+ }
3259
+
3260
+ /* Override the inherited blue workflow-card treatment for this neutral
3261
+ controls surface. */
3262
+ html .single-workspace .representation-card {
3263
+ border: 1px solid rgba(96, 110, 123, .20) !important;
3264
+ border-left: 1px solid rgba(96, 110, 123, .20) !important;
3265
+ background: #f7f8f9 !important;
3266
+ background-color: #f7f8f9 !important;
3267
+ }
3268
+
3269
+ .single-workspace .representation-card > .representation-card-header {
3270
+ padding: 0;
3271
+ margin-bottom: 10px;
3272
+ background: transparent;
3273
+ border: 0;
3274
+ color: #52616d;
3275
+ font-size: .78rem;
3276
+ font-weight: 750;
3277
+ letter-spacing: .04em;
3278
+ text-transform: uppercase;
3279
+ }
3280
+
3281
+ .single-workspace .representation-card-body {
3282
+ display: flex;
3283
+ flex-direction: column;
3284
+ gap: 12px;
3285
+ height: auto;
3286
+ min-height: 0;
3287
+ padding: 0;
3288
+ }
3289
+
3290
+ .single-workspace .representation-controls-row {
3291
+ display: grid;
3292
+ grid-template-columns: minmax(260px, 1fr) minmax(220px, 1fr) 160px;
3293
+ align-items: start;
3294
+ gap: 16px;
3295
+ }
3296
+
3297
+ .single-workspace .nearfield-controls-row {
3298
+ display: grid;
3299
+ grid-template-columns: 100px 140px;
3300
+ align-items: start;
3301
+ gap: 16px;
3302
+ }
3303
+
3304
+ .single-workspace .representation-card-body .field-block {
3305
+ margin: 0;
3306
+ }
3307
+
3308
+ .single-workspace .representation-card-body .field-block label {
3309
+ display: block;
3310
+ margin-bottom: 4px;
3311
+ color: #63727c;
3312
+ font-size: .72rem;
3313
+ font-weight: 650;
3314
+ }
3315
+
3316
+ .single-workspace .representation-card-body .field-input {
3317
+ width: 100%;
3318
+ min-width: 0;
3319
+ box-sizing: border-box;
3320
+ }
3321
+
3322
+ .single-workspace .representation-card-body .dashboard-dropdown {
3323
+ width: 100%;
3324
+ }
3325
+
3326
+ .single-workspace .representation-card .dashboard-dropdown .Select-menu {
3327
+ max-height: 400px;
3328
+ }
3329
+
3330
+ .single-workspace .representation-card .dash-dropdown-content .dash-dropdown-options {
3331
+ max-height: 400px !important;
3332
+ }
3333
+
3334
+ @media (max-width: 620px) {
3335
+ .single-workspace .representation-card-body {
3336
+ grid-template-columns: 1fr;
3337
+ }
3338
+ }
3339
+
3340
+ @media (max-width: 620px) {
3341
+ .graph-axis-card {
3342
+ display: block;
3343
+ }
3344
+
3345
+ .graph-axis-fields {
3346
+ flex-direction: column;
3347
+ }
3348
+
3349
+ .graph-axis-field {
3350
+ flex-basis: auto;
3351
+ }
3352
+ }