@morscherlab/mint-sdk 1.1.4 → 1.1.6

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 (96) hide show
  1. package/dist/{EmptyState-LMPS3keb.js → EmptyState-p90quq8Z.js} +2 -2
  2. package/dist/{EmptyState-LMPS3keb.js.map → EmptyState-p90quq8Z.js.map} +1 -1
  3. package/dist/{ExperimentPopover-D6_RGzTY.js → ExperimentPopover-tLwJ7XF4.js} +3 -3
  4. package/dist/{ExperimentPopover-D6_RGzTY.js.map → ExperimentPopover-tLwJ7XF4.js.map} +1 -1
  5. package/dist/{ExperimentSelectorModal-DcQ38zua.js → ExperimentSelectorModal-B6P2msT4.js} +12 -5
  6. package/dist/ExperimentSelectorModal-B6P2msT4.js.map +1 -0
  7. package/dist/{SettingsModal-Ccq2z-Ms.js → SettingsModal-D7LFUokT.js} +100 -156
  8. package/dist/SettingsModal-D7LFUokT.js.map +1 -0
  9. package/dist/__tests__/components/ActionMenu.test.d.ts +1 -0
  10. package/dist/__tests__/components/BaseModal.test.d.ts +1 -0
  11. package/dist/components/ActionMenu.vue.d.ts +21 -0
  12. package/dist/components/BaseModal.vue.d.ts +17 -1
  13. package/dist/components/GeneratedPluginView.vue.d.ts +3 -3
  14. package/dist/components/GeneratedResultRenderer.vue.d.ts +3 -3
  15. package/dist/components/index.d.ts +1 -0
  16. package/dist/components/index.js +8 -8
  17. package/dist/{components-CV5zuWa8.js → components-Dra_ac_5.js} +350 -71
  18. package/dist/components-Dra_ac_5.js.map +1 -0
  19. package/dist/composables/controlSchemaDoseDesign.d.ts +8 -1
  20. package/dist/composables/controlSchemaModel.d.ts +10 -1
  21. package/dist/composables/index.js +8 -8
  22. package/dist/composables/useAnalysisArtifacts.d.ts +9 -1
  23. package/dist/composables/useAppExperiment.d.ts +7 -0
  24. package/dist/composables/useBioTemplatePackWorkspace.d.ts +9 -1
  25. package/dist/composables/useControlWorkspace.d.ts +9 -1
  26. package/dist/composables/useGeneratedAnalysis.d.ts +9 -0
  27. package/dist/{composables-CW8NRXLB.js → composables-CRR_JxQD.js} +4 -4
  28. package/dist/{composables-CW8NRXLB.js.map → composables-CRR_JxQD.js.map} +1 -1
  29. package/dist/{experiment-utils-7Yw-h0tD.js → experiment-utils-CLnzPPq5.js} +170 -13
  30. package/dist/experiment-utils-CLnzPPq5.js.map +1 -0
  31. package/dist/index.js +13 -13
  32. package/dist/install.js +7 -7
  33. package/dist/styles.css +764 -610
  34. package/dist/templates/index.js +4 -4
  35. package/dist/{templates-CJRFiWUX.js → templates-Cr-48-u2.js} +2 -2
  36. package/dist/{templates-CJRFiWUX.js.map → templates-Cr-48-u2.js.map} +1 -1
  37. package/dist/types/components.d.ts +32 -0
  38. package/dist/types/index.d.ts +1 -1
  39. package/dist/{useControlSchema-BEAgLyyx.js → useControlSchema-BMVb2XIQ.js} +58 -10
  40. package/dist/useControlSchema-BMVb2XIQ.js.map +1 -0
  41. package/dist/{useDropdownState-Be-ug_ci.js → useDropdownState-DSb3BC3N.js} +2 -2
  42. package/dist/{useDropdownState-Be-ug_ci.js.map → useDropdownState-DSb3BC3N.js.map} +1 -1
  43. package/dist/{useExperimentSelector-DFg_iEHI.js → useExperimentSelector-D0pjj9WH.js} +3 -3
  44. package/dist/{useExperimentSelector-DFg_iEHI.js.map → useExperimentSelector-D0pjj9WH.js.map} +1 -1
  45. package/dist/{useFormBuilder-CR9pBApW.js → useFormBuilder-DG3HOFGA.js} +2 -2
  46. package/dist/{useFormBuilder-CR9pBApW.js.map → useFormBuilder-DG3HOFGA.js.map} +1 -1
  47. package/dist/{useProtocolTemplates-DXeIHMwV.js → useProtocolTemplates-BMt0LlXf.js} +21 -6
  48. package/dist/useProtocolTemplates-BMt0LlXf.js.map +1 -0
  49. package/package.json +1 -1
  50. package/src/__tests__/components/ActionMenu.test.ts +99 -0
  51. package/src/__tests__/components/BaseModal.test.ts +133 -0
  52. package/src/__tests__/components/SettingsModal.test.ts +9 -7
  53. package/src/__tests__/docs/extractDocsComponents.test.ts +15 -1
  54. package/src/__tests__/docs/extractDocsParsing.test.ts +22 -0
  55. package/src/__tests__/docs/frontendDocsCatalog.test.ts +80 -0
  56. package/src/components/ActionMenu.story.vue +26 -0
  57. package/src/components/ActionMenu.vue +212 -0
  58. package/src/components/AppSidebar.vue +2 -13
  59. package/src/components/ArtifactSelectorModal.vue +8 -1
  60. package/src/components/BaseModal.story.vue +107 -1
  61. package/src/components/BaseModal.vue +152 -4
  62. package/src/components/BioTemplateExperimentWorkspaceView.vue +8 -1
  63. package/src/components/BioTemplatePackWorkspaceView.vue +8 -1
  64. package/src/components/BioTemplatePresetWorkspaceView.vue +8 -1
  65. package/src/components/BioTemplateRenderer.vue +8 -1
  66. package/src/components/ComponentBindingRenderer.vue +8 -1
  67. package/src/components/ControlWorkspaceView.vue +8 -1
  68. package/src/components/DoseDesignWorkspaceView.vue +8 -1
  69. package/src/components/ExperimentSelectorModal.vue +8 -1
  70. package/src/components/FormBuilder.vue +5 -0
  71. package/src/components/GeneratedPluginView.vue +12 -2
  72. package/src/components/GeneratedResultRenderer.vue +12 -2
  73. package/src/components/JobsStatusTray.vue +8 -1
  74. package/src/components/PluginWorkspaceView.vue +10 -1
  75. package/src/components/SettingsModal.vue +102 -149
  76. package/src/components/index.ts +1 -0
  77. package/src/composables/controlSchemaDoseDesign.ts +8 -1
  78. package/src/composables/controlSchemaModel.ts +10 -1
  79. package/src/composables/useAnalysisArtifacts.ts +9 -1
  80. package/src/composables/useAppExperiment.ts +7 -0
  81. package/src/composables/useBioTemplatePackWorkspace.ts +9 -1
  82. package/src/composables/useControlWorkspace.ts +9 -1
  83. package/src/composables/useGeneratedAnalysis.ts +9 -0
  84. package/src/styles/components/action-menu.css +59 -0
  85. package/src/styles/components/icon-button.css +7 -3
  86. package/src/styles/components/modal.css +293 -0
  87. package/src/styles/components/settings-modal.css +3 -273
  88. package/src/styles/index.css +1 -0
  89. package/src/types/components.ts +38 -0
  90. package/src/types/index.ts +3 -0
  91. package/dist/ExperimentSelectorModal-DcQ38zua.js.map +0 -1
  92. package/dist/SettingsModal-Ccq2z-Ms.js.map +0 -1
  93. package/dist/components-CV5zuWa8.js.map +0 -1
  94. package/dist/experiment-utils-7Yw-h0tD.js.map +0 -1
  95. package/dist/useControlSchema-BEAgLyyx.js.map +0 -1
  96. package/dist/useProtocolTemplates-DXeIHMwV.js.map +0 -1
package/dist/styles.css CHANGED
@@ -384,6 +384,261 @@ to {
384
384
  gap: 0.5rem;
385
385
  }
386
386
 
387
+ /* ========================================================================
388
+ Tab strip (layout="tabs")
389
+ ========================================================================
390
+ A shell region, not body content: full-bleed, flush with both edges,
391
+ never scrolls with the fields.
392
+ ======================================================================== */
393
+ .mint-modal__tabs {
394
+ flex-shrink: 0;
395
+ display: flex;
396
+ gap: 2px;
397
+ padding: 0 0.75rem;
398
+ background-color: var(--bg-card);
399
+ border-bottom: 1px solid var(--border-color);
400
+ overflow-x: auto;
401
+ scrollbar-width: none;
402
+ }
403
+ .mint-modal__tabs::-webkit-scrollbar {
404
+ display: none;
405
+ }
406
+ .mint-modal__tab {
407
+ flex-shrink: 0;
408
+ display: inline-flex;
409
+ align-items: center;
410
+ gap: 0.4375rem;
411
+ height: 2.375rem; /* 38px */
412
+ padding: 0 0.75rem;
413
+ border: none;
414
+ background: transparent;
415
+ font-family: inherit;
416
+ font-size: 0.8125rem; /* 13px */
417
+ font-weight: 500;
418
+ color: var(--text-secondary);
419
+ cursor: pointer;
420
+ /* Underline drawn INSIDE the box — no margin-bottom:-1px overlap hack. */
421
+ transition: color var(--mint-transition), box-shadow var(--mint-transition);
422
+ }
423
+ .mint-modal__tab:hover:not(.mint-modal__tab--disabled) {
424
+ color: var(--text-primary);
425
+ }
426
+ .mint-modal__tab--active {
427
+ color: var(--color-primary);
428
+ font-weight: 600;
429
+ box-shadow: inset 0 -2px 0 var(--color-primary);
430
+ }
431
+ .mint-modal__tab--disabled {
432
+ color: var(--text-muted);
433
+ cursor: not-allowed;
434
+ }
435
+ .mint-modal__tab:focus-visible {
436
+ outline: none;
437
+ box-shadow: var(--focus-ring-soft), inset 0 -2px 0 var(--color-primary);
438
+ }
439
+ .mint-modal__tab-meta {
440
+ font-family: 'Fira Code', monospace;
441
+ font-size: 0.6875rem;
442
+ font-weight: 400;
443
+ color: var(--text-muted);
444
+ }
445
+
446
+ /* Fixed body height: switching tabs must not resize the card. */
447
+ .mint-modal__body--tabbed {
448
+ height: clamp(14rem, 45vh, 26rem);
449
+ overflow-y: auto;
450
+ }
451
+
452
+ /* Header rule is redundant once a strip or rail follows it. */
453
+ .mint-modal__container--tabs .mint-modal__header,
454
+ .mint-modal__container--rail .mint-modal__header {
455
+ border-bottom: none;
456
+ }
457
+
458
+ /* ========================================================================
459
+ Rail (layout="rail") — sidebar sections + pane as the shell's middle row
460
+ ======================================================================== */
461
+ .mint-modal__split {
462
+ flex: 1;
463
+ min-height: 0;
464
+ display: grid;
465
+ grid-template-columns: 13.5rem minmax(0, 1fr);
466
+ height: clamp(20rem, 62vh, 34rem);
467
+ }
468
+ .mint-modal__rail {
469
+ display: flex;
470
+ flex-direction: column;
471
+ gap: 0.625rem;
472
+ padding: 0.625rem 0.5rem;
473
+ background-color: var(--bg-primary);
474
+ border-right: 1px solid var(--border-light);
475
+ overflow-y: auto; /* rail scrolls independently of the pane */
476
+ scrollbar-width: thin;
477
+ }
478
+ .mint-modal__rail-items {
479
+ display: flex;
480
+ flex-direction: column;
481
+ gap: 2px;
482
+ }
483
+ .mint-modal__rail-item {
484
+ display: flex;
485
+ align-items: center;
486
+ gap: 0.5625rem;
487
+ width: 100%;
488
+ min-height: 2.25rem;
489
+ padding: 0.4375rem 0.625rem;
490
+ border: none;
491
+ border-radius: 0.4375rem;
492
+ background: transparent;
493
+ font-family: inherit;
494
+ font-size: 0.8125rem;
495
+ font-weight: 500;
496
+ color: var(--text-secondary);
497
+ text-align: left;
498
+ cursor: pointer;
499
+ transition: background-color var(--mint-transition), color var(--mint-transition);
500
+ }
501
+ .mint-modal__rail-item:hover:not(.mint-modal__rail-item--disabled) {
502
+ background-color: var(--bg-tertiary);
503
+ }
504
+ .mint-modal__rail-item:focus-visible {
505
+ outline: none;
506
+ box-shadow: var(--focus-ring-soft);
507
+ }
508
+
509
+ /* Active = raised card, matching the 1.1 card language (not a primary fill). */
510
+ .mint-modal__rail-item--active {
511
+ background-color: var(--bg-card);
512
+ color: var(--text-primary);
513
+ font-weight: 600;
514
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
515
+ }
516
+ .mint-modal__rail-item--disabled {
517
+ color: var(--text-muted);
518
+ cursor: not-allowed;
519
+ }
520
+ .mint-modal__rail-item-icon {
521
+ flex-shrink: 0;
522
+ width: 0.9375rem;
523
+ height: 0.9375rem;
524
+ color: var(--text-muted);
525
+ }
526
+ .mint-modal__rail-item-icon svg {
527
+ width: 100%;
528
+ height: 100%;
529
+ display: block;
530
+ }
531
+
532
+ /* v-html markup icons arrive wrapped in a span — size it like the svg. */
533
+ .mint-modal__rail-item-icon > span {
534
+ display: block;
535
+ width: 100%;
536
+ height: 100%;
537
+ }
538
+ .mint-modal__rail-item--active .mint-modal__rail-item-icon {
539
+ color: var(--color-primary);
540
+ }
541
+ .mint-modal__rail-item-text {
542
+ flex: 1;
543
+ min-width: 0;
544
+ display: flex;
545
+ flex-direction: column;
546
+ gap: 0.0625rem;
547
+ }
548
+ .mint-modal__rail-item-label {
549
+ line-height: 1.3;
550
+ overflow-wrap: anywhere;
551
+ }
552
+ .mint-modal__rail-item-description {
553
+ font-size: 0.6875rem;
554
+ font-weight: 400;
555
+ color: var(--text-muted);
556
+ line-height: 1.35;
557
+ }
558
+ .mint-modal__rail-item-meta {
559
+ flex-shrink: 0;
560
+ font-family: 'Fira Code', monospace;
561
+ font-size: 0.6875rem;
562
+ font-weight: 400;
563
+ color: var(--text-muted);
564
+ }
565
+
566
+ /* ---------- Pane ---------- */
567
+ .mint-modal__pane {
568
+ min-width: 0;
569
+ min-height: 0;
570
+ display: flex;
571
+ flex-direction: column;
572
+ }
573
+ .mint-modal__pane:focus-visible {
574
+ outline: none;
575
+ box-shadow: var(--focus-ring-soft);
576
+ }
577
+ .mint-modal__pane-header {
578
+ flex-shrink: 0;
579
+ padding: 0.875rem 1.25rem 0.75rem;
580
+ border-bottom: 1px solid var(--border-light);
581
+ }
582
+ .mint-modal__pane-title {
583
+ margin: 0 !important;
584
+ padding: 0 !important;
585
+ font-size: 0.875rem;
586
+ font-weight: 600;
587
+ letter-spacing: -0.005em;
588
+ color: var(--text-primary);
589
+ line-height: 1.3;
590
+ }
591
+ .mint-modal__pane-subtitle {
592
+ margin: 0.1875rem 0 0 !important;
593
+ padding: 0 !important;
594
+ font-size: 0.75rem;
595
+ color: var(--text-secondary);
596
+ line-height: 1.45;
597
+ }
598
+ .mint-modal__pane-body {
599
+ flex: 1;
600
+ min-height: 0;
601
+ overflow-y: auto;
602
+ overscroll-behavior: contain;
603
+ padding: 0.875rem 1.25rem 1.125rem;
604
+ font-size: 0.8125rem;
605
+ color: var(--text-primary);
606
+ line-height: 1.55;
607
+ }
608
+
609
+ /* Rail collapses to the tab-strip pattern on narrow screens — one behaviour. */
610
+ @media (max-width: 640px) {
611
+ .mint-modal__split {
612
+ grid-template-columns: minmax(0, 1fr);
613
+ height: auto;
614
+ }
615
+ .mint-modal__rail {
616
+ flex-direction: row;
617
+ align-items: center;
618
+ gap: 0.25rem;
619
+ padding: 0 0.5rem;
620
+ border-right: none;
621
+ border-bottom: 1px solid var(--border-color);
622
+ overflow-x: auto;
623
+ overflow-y: hidden;
624
+ }
625
+ .mint-modal__rail-items {
626
+ flex-direction: row;
627
+ }
628
+ .mint-modal__rail-item {
629
+ width: auto;
630
+ min-height: 2.375rem;
631
+ }
632
+
633
+ /* Strip stays compact */
634
+ .mint-modal__rail-item-description {
635
+ display: none;
636
+ }
637
+ .mint-modal__pane-body {
638
+ max-height: 60vh;
639
+ }
640
+ }
641
+
387
642
  /* ========================================================================
388
643
  Per-variant transitions
389
644
  ========================================================================
@@ -514,6 +769,12 @@ to {
514
769
  .modal-drawer-leave-to .mint-modal__container {
515
770
  transform: translateY(100%);
516
771
  }
772
+
773
+ /* Sheets keep their natural height; the strip already scrolls horizontally */
774
+ .mint-modal__body--tabbed {
775
+ height: auto;
776
+ max-height: 60vh;
777
+ }
517
778
  }
518
779
  /* BaseInput Component Styles */
519
780
  .mint-input {
@@ -5076,42 +5337,15 @@ html.dark .mint-experiment-selector__filters-toggle--active {
5076
5337
  color: var(--text-muted);
5077
5338
  margin: 0 !important;
5078
5339
  }
5079
- /* SettingsModal Component Styles */
5340
+ /* SettingsModal Component Styles
5341
+ Tab strip / rail / pane / footer chrome lives in BaseModal (modal.css);
5342
+ only pane content styles remain here. */
5080
5343
  .mint-settings-modal {
5081
5344
  display: flex;
5082
5345
  flex-direction: column;
5083
5346
  gap: 1rem;
5084
5347
  min-height: 0;
5085
5348
  }
5086
- .mint-settings-modal__tabs {
5087
- display: flex;
5088
- gap: 0.25rem;
5089
- border-bottom: 1px solid var(--border-color);
5090
- padding-bottom: 0;
5091
- margin-bottom: 0.5rem;
5092
- }
5093
- .mint-settings-modal__tab {
5094
- padding: 0.5rem 1rem;
5095
- font-size: 0.875rem;
5096
- font-weight: 500;
5097
- color: var(--text-muted);
5098
- background: none;
5099
- border: none;
5100
- border-bottom: 2px solid transparent;
5101
- cursor: pointer;
5102
- transition: color 0.15s ease, border-color 0.15s ease;
5103
- margin-bottom: -1px;
5104
- }
5105
- .mint-settings-modal__tab:hover {
5106
- color: var(--text-primary);
5107
- }
5108
- .mint-settings-modal__tab--active {
5109
- color: var(--color-primary);
5110
- border-bottom-color: var(--color-primary);
5111
- }
5112
- .mint-settings-modal__content {
5113
- min-height: 12rem;
5114
- }
5115
5349
  .mint-settings-modal__section {
5116
5350
  margin-bottom: 1.5rem;
5117
5351
  }
@@ -5158,14 +5392,6 @@ html.dark .mint-settings-modal__option-btn--active {
5158
5392
  margin-bottom: 0 !important;
5159
5393
  padding: 0 !important;
5160
5394
  }
5161
- .mint-settings-modal__footer {
5162
- display: flex;
5163
- flex-direction: column;
5164
- gap: 0.75rem;
5165
- margin-top: 1rem;
5166
- padding-top: 1rem;
5167
- border-top: 1px solid var(--border-light);
5168
- }
5169
5395
 
5170
5396
  /* ─────────────────────────────────────────────────────────────────────
5171
5397
  * Schema-driven content grid (used by both layouts)
@@ -5177,209 +5403,6 @@ html.dark .mint-settings-modal__option-btn--active {
5177
5403
  gap: 1rem;
5178
5404
  grid-template-columns: repeat(var(--mint-settings-cols, 1), minmax(0, 1fr));
5179
5405
  }
5180
-
5181
- /* ─────────────────────────────────────────────────────────────────────
5182
- * Vertical layout — sidebar rail + content pane (opt-in via layout="vertical")
5183
- * Designed for complex plugins with 5+ setting groups. Existing horizontal
5184
- * classes above are deliberately untouched.
5185
- * ───────────────────────────────────────────────────────────────────── */
5186
- .mint-settings-modal--vertical {
5187
- flex-direction: row;
5188
- gap: 1.25rem;
5189
- align-items: stretch;
5190
- height: clamp(22rem, calc(100vh - 9rem), 42rem);
5191
- min-height: 22rem;
5192
- overflow: hidden;
5193
- }
5194
- .mint-settings-modal__rail {
5195
- flex-shrink: 0;
5196
- width: 12.5rem;
5197
- display: flex;
5198
- flex-direction: column;
5199
- gap: 0.125rem;
5200
- padding: 0.125rem 0.75rem 0.125rem 0;
5201
- border-right: 1px solid var(--border-light);
5202
- overflow: hidden;
5203
- }
5204
- .mint-settings-modal__rail-item {
5205
- position: relative;
5206
- display: flex;
5207
- align-items: flex-start;
5208
- gap: 0.625rem;
5209
- width: 100%;
5210
- min-height: 2.5rem;
5211
- padding: 0.5rem 0.75rem 0.5rem 0.875rem;
5212
- font-size: 0.8125rem;
5213
- font-weight: 500;
5214
- color: var(--text-secondary);
5215
- background: none;
5216
- border: none;
5217
- border-radius: var(--radius-md);
5218
- cursor: pointer;
5219
- text-align: left;
5220
- transition:
5221
- color var(--mint-transition),
5222
- background-color var(--mint-transition);
5223
- }
5224
- .mint-settings-modal__rail-item:hover {
5225
- background-color: var(--bg-hover);
5226
- color: var(--text-primary);
5227
- }
5228
- .mint-settings-modal__rail-item:focus-visible {
5229
- outline: none;
5230
- box-shadow: var(--focus-ring);
5231
- }
5232
- .mint-settings-modal__rail-item--active {
5233
- color: var(--color-primary);
5234
- background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
5235
- }
5236
- .mint-settings-modal__rail-item--active::before {
5237
- content: "";
5238
- position: absolute;
5239
- left: 0.375rem;
5240
- top: 0.625rem;
5241
- bottom: 0.625rem;
5242
- width: 2px;
5243
- border-radius: 9999px;
5244
- background-color: var(--color-primary);
5245
- }
5246
- html.dark .mint-settings-modal__rail-item--active {
5247
- background-color: color-mix(in srgb, var(--color-primary) 18%, transparent);
5248
- }
5249
-
5250
- /* Reserved icon column keeps labels aligned whether or not icons are present */
5251
- .mint-settings-modal__rail-item-icon {
5252
- flex-shrink: 0;
5253
- width: 1rem;
5254
- height: 1rem;
5255
- display: inline-flex;
5256
- align-items: center;
5257
- justify-content: center;
5258
- margin-top: 0.0625rem;
5259
- color: currentColor;
5260
- }
5261
- .mint-settings-modal__rail-item-icon svg {
5262
- width: 100%;
5263
- height: 100%;
5264
- display: block;
5265
- }
5266
- .mint-settings-modal__rail-item-text {
5267
- display: flex;
5268
- flex-direction: column;
5269
- gap: 0.125rem;
5270
- min-width: 0;
5271
- flex: 1;
5272
- }
5273
- .mint-settings-modal__rail-item-label {
5274
- line-height: 1.3;
5275
- overflow-wrap: anywhere;
5276
- }
5277
- .mint-settings-modal__rail-item-description {
5278
- font-size: 0.6875rem;
5279
- font-weight: 400;
5280
- color: var(--text-muted);
5281
- line-height: 1.35;
5282
- overflow-wrap: anywhere;
5283
- }
5284
- .mint-settings-modal__rail-item--active .mint-settings-modal__rail-item-description {
5285
- color: color-mix(in srgb, var(--color-primary) 65%, var(--text-secondary));
5286
- }
5287
- .mint-settings-modal__pane {
5288
- flex: 1;
5289
- min-width: 0;
5290
- min-height: 0;
5291
- display: flex;
5292
- flex-direction: column;
5293
- overflow: hidden;
5294
- }
5295
- .mint-settings-modal__pane:focus-visible {
5296
- outline: none;
5297
- box-shadow: var(--focus-ring);
5298
- border-radius: var(--radius-md);
5299
- }
5300
- .mint-settings-modal__pane-header {
5301
- flex-shrink: 0;
5302
- margin-bottom: 1rem;
5303
- padding-bottom: 0.75rem;
5304
- border-bottom: 1px solid var(--border-light);
5305
- }
5306
- .mint-settings-modal__pane-title {
5307
- font-size: 0.875rem;
5308
- font-weight: 600;
5309
- color: var(--text-primary);
5310
- letter-spacing: -0.005em;
5311
- margin: 0 !important;
5312
- padding: 0 !important;
5313
- line-height: 1.3;
5314
- }
5315
- .mint-settings-modal__pane-subtitle {
5316
- font-size: 0.75rem;
5317
- color: var(--text-secondary);
5318
- line-height: 1.45;
5319
- margin: 0.25rem 0 0 !important;
5320
- padding: 0 !important;
5321
- }
5322
- .mint-settings-modal__pane-body {
5323
- flex: 1;
5324
- min-height: 0;
5325
- overflow-y: auto;
5326
- scrollbar-width: thin;
5327
- /* Trailing breathing room so the last field doesn't hug the modal border */
5328
- padding: 0 0.5rem 0.25rem 0;
5329
- margin-right: -0.25rem;
5330
- overscroll-behavior: contain;
5331
- }
5332
- .mint-settings-modal__pane-body::-webkit-scrollbar {
5333
- width: 0.5rem;
5334
- }
5335
- .mint-settings-modal__pane-body::-webkit-scrollbar-track {
5336
- background: transparent;
5337
- }
5338
- .mint-settings-modal__pane-body::-webkit-scrollbar-thumb {
5339
- background-color: color-mix(in srgb, var(--text-muted) 30%, transparent);
5340
- border: 2px solid transparent;
5341
- border-radius: 9999px;
5342
- background-clip: content-box;
5343
- }
5344
- .mint-settings-modal__pane-body::-webkit-scrollbar-thumb:hover {
5345
- background-color: color-mix(in srgb, var(--text-muted) 45%, transparent);
5346
- }
5347
-
5348
- /* Mobile — collapse the rail into a horizontal scroll-strip so the modal stays usable.
5349
- * Touch targets stay ≥40px tall via 0.5rem vertical padding + 1rem text line-height. */
5350
- @media (max-width: 640px) {
5351
- .mint-settings-modal--vertical {
5352
- flex-direction: column;
5353
- gap: 0.875rem;
5354
- height: auto;
5355
- max-height: none;
5356
- min-height: 0;
5357
- overflow: visible;
5358
- }
5359
- .mint-settings-modal__rail {
5360
- width: 100%;
5361
- flex-direction: row;
5362
- overflow-x: auto;
5363
- padding: 0 0 0.625rem;
5364
- border-right: none;
5365
- border-bottom: 1px solid var(--border-light);
5366
- gap: 0.25rem;
5367
- scrollbar-width: thin;
5368
- }
5369
- .mint-settings-modal__rail-item {
5370
- flex-shrink: 0;
5371
- width: auto;
5372
- padding: 0.5rem 0.75rem;
5373
- }
5374
- .mint-settings-modal__rail-item--active::before {
5375
- display: none;
5376
- }
5377
-
5378
- /* Two-line description hides on mobile so the rail strip stays compact */
5379
- .mint-settings-modal__rail-item-description {
5380
- display: none;
5381
- }
5382
- }
5383
5406
  /* ColorSlider Component Styles */
5384
5407
  .mint-color-slider {
5385
5408
  display: flex;
@@ -6748,6 +6771,7 @@ to { transform: scaleX(0);
6748
6771
  /* IconButton Component Styles */
6749
6772
  .mint-icon-button {
6750
6773
  display: inline-flex;
6774
+ flex-shrink: 0;
6751
6775
  align-items: center;
6752
6776
  justify-content: center;
6753
6777
  border-radius: var(--radius-md);
@@ -6856,16 +6880,19 @@ to { transform: scaleX(0);
6856
6880
 
6857
6881
  /* Sizes */
6858
6882
  .mint-icon-button--sm {
6883
+ width: var(--form-height-sm);
6884
+ height: var(--form-height-sm);
6859
6885
  padding: 0.375rem;
6860
- min-height: var(--form-height-sm);
6861
6886
  }
6862
6887
  .mint-icon-button--md {
6888
+ width: var(--form-height-md);
6889
+ height: var(--form-height-md);
6863
6890
  padding: 0.5rem;
6864
- min-height: var(--form-height-md);
6865
6891
  }
6866
6892
  .mint-icon-button--lg {
6893
+ width: var(--form-height-lg);
6894
+ height: var(--form-height-lg);
6867
6895
  padding: 0.75rem;
6868
- min-height: var(--form-height-lg);
6869
6896
  }
6870
6897
  .mint-icon-button__icon--sm,
6871
6898
  .mint-icon-button__icon--md,
@@ -6907,10 +6934,62 @@ to {
6907
6934
  border-color 0.15s ease,
6908
6935
  box-shadow 0.15s ease;
6909
6936
  }
6910
- .mint-icon-button:hover:not(.mint-icon-button--disabled),
6911
- .mint-icon-button:active:not(.mint-icon-button--disabled) {
6912
- transform: none;
6937
+ .mint-icon-button:hover:not(.mint-icon-button--disabled),
6938
+ .mint-icon-button:active:not(.mint-icon-button--disabled) {
6939
+ transform: none;
6940
+ }
6941
+ }
6942
+ /* ActionMenu — compact square trigger with a teleported, viewport-safe menu. */
6943
+ .mint-action-menu {
6944
+ display: inline-flex;
6945
+ flex-shrink: 0;
6946
+ }
6947
+ .mint-action-menu__trigger-icon {
6948
+ width: 0.875rem;
6949
+ height: 0.875rem;
6950
+ }
6951
+ .mint-action-menu__panel {
6952
+ position: fixed;
6953
+ z-index: 1000;
6954
+ display: flex;
6955
+ min-width: 10rem;
6956
+ max-width: min(18rem, calc(100vw - 1rem));
6957
+ flex-direction: column;
6958
+ padding: 0.25rem;
6959
+ border: 1px solid var(--border-color);
6960
+ border-radius: var(--radius-md);
6961
+ background: var(--bg-secondary);
6962
+ box-shadow: var(--shadow-md);
6963
+ }
6964
+ .mint-action-menu__item {
6965
+ display: flex;
6966
+ width: 100%;
6967
+ align-items: center;
6968
+ padding: 0.4375rem 0.625rem;
6969
+ border: 0;
6970
+ border-radius: 0.375rem;
6971
+ background: transparent;
6972
+ color: var(--text-primary);
6973
+ font-family: inherit;
6974
+ font-size: 0.78125rem;
6975
+ line-height: 1.25;
6976
+ text-align: left;
6977
+ text-decoration: none;
6978
+ cursor: pointer;
6979
+ transition: background-color var(--mint-transition);
6980
+ }
6981
+ .mint-action-menu__item:hover:not(:disabled),
6982
+ .mint-action-menu__item:focus-visible {
6983
+ outline: none;
6984
+ background: var(--bg-hover);
6985
+ }
6986
+ .mint-action-menu__item--danger {
6987
+ color: var(--mint-error);
6913
6988
  }
6989
+ .mint-action-menu__item:disabled {
6990
+ color: var(--text-muted);
6991
+ cursor: not-allowed;
6992
+ opacity: var(--mint-disabled-opacity);
6914
6993
  }
6915
6994
  /* ThemeToggle Component Styles */
6916
6995
  .mint-theme-toggle__icon {
@@ -9260,20 +9339,20 @@ to {
9260
9339
  color: var(--color-danger-text, var(--color-text-primary));
9261
9340
  }
9262
9341
 
9263
- .mint-generated-result[data-v-148258e9] {
9342
+ .mint-generated-result[data-v-a3757b3e] {
9264
9343
  width: 100%;
9265
9344
  }
9266
- .mint-generated-result__text[data-v-148258e9],
9267
- .mint-generated-result__json[data-v-148258e9] {
9345
+ .mint-generated-result__text[data-v-a3757b3e],
9346
+ .mint-generated-result__json[data-v-a3757b3e] {
9268
9347
  margin: 0;
9269
9348
  color: var(--color-text-primary);
9270
9349
  }
9271
- .mint-generated-result__text[data-v-148258e9] {
9350
+ .mint-generated-result__text[data-v-a3757b3e] {
9272
9351
  max-width: 72ch;
9273
9352
  white-space: pre-wrap;
9274
9353
  line-height: 1.65;
9275
9354
  }
9276
- .mint-generated-result__json[data-v-148258e9] {
9355
+ .mint-generated-result__json[data-v-a3757b3e] {
9277
9356
  overflow: auto;
9278
9357
  padding: 1rem;
9279
9358
  border: 1px solid var(--color-border);
@@ -9283,17 +9362,17 @@ to {
9283
9362
  line-height: 1.55;
9284
9363
  white-space: pre-wrap;
9285
9364
  }
9286
- .mint-generated-result__image[data-v-148258e9] {
9365
+ .mint-generated-result__image[data-v-a3757b3e] {
9287
9366
  display: block;
9288
9367
  max-width: 100%;
9289
9368
  height: auto;
9290
9369
  margin: 0 auto;
9291
9370
  }
9292
- .mint-generated-result__plotly[data-v-148258e9] {
9371
+ .mint-generated-result__plotly[data-v-a3757b3e] {
9293
9372
  width: 100%;
9294
9373
  min-height: 24rem;
9295
9374
  }
9296
- .mint-generated-result__artifact[data-v-148258e9] {
9375
+ .mint-generated-result__artifact[data-v-a3757b3e] {
9297
9376
  display: flex;
9298
9377
  align-items: center;
9299
9378
  justify-content: space-between;
@@ -9670,14 +9749,14 @@ to {
9670
9749
  }
9671
9750
  }
9672
9751
 
9673
- .mint-generated-workspace[data-v-6219e939] {
9752
+ .mint-generated-workspace[data-v-6c599fd1] {
9674
9753
  position: relative;
9675
9754
  min-width: 0;
9676
9755
  min-height: calc(100vh - 5rem);
9677
9756
  padding: clamp(1rem, 2.5vw, 2.5rem);
9678
9757
  background: var(--color-bg-primary);
9679
9758
  }
9680
- .mint-generated-workspace__loading[data-v-6219e939] {
9759
+ .mint-generated-workspace__loading[data-v-6c599fd1] {
9681
9760
  display: flex;
9682
9761
  min-height: 24rem;
9683
9762
  align-items: center;
@@ -9685,7 +9764,7 @@ to {
9685
9764
  gap: 0.75rem;
9686
9765
  color: var(--color-text-secondary);
9687
9766
  }
9688
- .mint-generated-workspace__header[data-v-6219e939] {
9767
+ .mint-generated-workspace__header[data-v-6c599fd1] {
9689
9768
  display: flex;
9690
9769
  align-items: flex-start;
9691
9770
  justify-content: space-between;
@@ -9693,17 +9772,17 @@ to {
9693
9772
  max-width: 76rem;
9694
9773
  margin: 0 auto 1.25rem;
9695
9774
  }
9696
- .mint-generated-workspace__header h1[data-v-6219e939] {
9775
+ .mint-generated-workspace__header h1[data-v-6c599fd1] {
9697
9776
  margin: 0;
9698
9777
  color: var(--color-text-primary);
9699
9778
  font-size: clamp(1.35rem, 2vw, 1.8rem);
9700
9779
  line-height: 1.2;
9701
9780
  }
9702
- .mint-generated-workspace__header p[data-v-6219e939]:not(.mint-generated-workspace__eyebrow) {
9781
+ .mint-generated-workspace__header p[data-v-6c599fd1]:not(.mint-generated-workspace__eyebrow) {
9703
9782
  margin: 0.4rem 0 0;
9704
9783
  color: var(--color-text-secondary);
9705
9784
  }
9706
- .mint-generated-workspace__eyebrow[data-v-6219e939] {
9785
+ .mint-generated-workspace__eyebrow[data-v-6c599fd1] {
9707
9786
  margin: 0 0 0.35rem;
9708
9787
  color: var(--color-text-muted);
9709
9788
  font-size: 0.72rem;
@@ -9711,13 +9790,13 @@ to {
9711
9790
  letter-spacing: 0.08em;
9712
9791
  text-transform: uppercase;
9713
9792
  }
9714
- .mint-generated-workspace__resources[data-v-6219e939] {
9793
+ .mint-generated-workspace__resources[data-v-6c599fd1] {
9715
9794
  display: flex;
9716
9795
  flex-wrap: wrap;
9717
9796
  justify-content: flex-end;
9718
9797
  gap: 0.4rem;
9719
9798
  }
9720
- .mint-generated-workspace__resources span[data-v-6219e939] {
9799
+ .mint-generated-workspace__resources span[data-v-6c599fd1] {
9721
9800
  padding: 0.3rem 0.55rem;
9722
9801
  border: 1px solid var(--color-border);
9723
9802
  border-radius: 999px;
@@ -9726,7 +9805,7 @@ to {
9726
9805
  font-size: 0.75rem;
9727
9806
  font-weight: 600;
9728
9807
  }
9729
- .mint-generated-workspace__result[data-v-6219e939] {
9808
+ .mint-generated-workspace__result[data-v-6c599fd1] {
9730
9809
  max-width: 76rem;
9731
9810
  min-height: 24rem;
9732
9811
  margin: 0 auto;
@@ -9737,10 +9816,10 @@ to {
9737
9816
  box-shadow: var(--shadow-sm);
9738
9817
  }
9739
9818
  @media (max-width: 640px) {
9740
- .mint-generated-workspace__header[data-v-6219e939] {
9819
+ .mint-generated-workspace__header[data-v-6c599fd1] {
9741
9820
  flex-direction: column;
9742
9821
  }
9743
- .mint-generated-workspace__resources[data-v-6219e939] {
9822
+ .mint-generated-workspace__resources[data-v-6c599fd1] {
9744
9823
  justify-content: flex-start;
9745
9824
  }
9746
9825
  }
@@ -15309,21 +15388,21 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15309
15388
  text-decoration: underline;
15310
15389
  }
15311
15390
 
15312
- .mint-component-binding-renderer[data-v-93f5795f] {
15391
+ .mint-component-binding-renderer[data-v-ec0e5797] {
15313
15392
  display: grid;
15314
15393
  gap: 1rem;
15315
15394
  min-width: 0;
15316
15395
  }
15317
- .mint-component-binding-renderer--grid[data-v-93f5795f] {
15396
+ .mint-component-binding-renderer--grid[data-v-ec0e5797] {
15318
15397
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 28rem), 1fr));
15319
15398
  }
15320
- .mint-component-binding-renderer--stack[data-v-93f5795f] {
15399
+ .mint-component-binding-renderer--stack[data-v-ec0e5797] {
15321
15400
  grid-template-columns: minmax(0, 1fr);
15322
15401
  }
15323
- .mint-component-binding-renderer--dense[data-v-93f5795f] {
15402
+ .mint-component-binding-renderer--dense[data-v-ec0e5797] {
15324
15403
  gap: 0.75rem;
15325
15404
  }
15326
- .mint-component-binding-renderer__item[data-v-93f5795f] {
15405
+ .mint-component-binding-renderer__item[data-v-ec0e5797] {
15327
15406
  min-width: 0;
15328
15407
  overflow: hidden;
15329
15408
  border: 1px solid var(--border-color, #e5e7eb);
@@ -15331,7 +15410,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15331
15410
  background: var(--bg-card, #ffffff);
15332
15411
  box-shadow: var(--shadow-sm, 0 1px 2px rgb(15 23 42 / 0.06));
15333
15412
  }
15334
- .mint-component-binding-renderer__header[data-v-93f5795f] {
15413
+ .mint-component-binding-renderer__header[data-v-ec0e5797] {
15335
15414
  display: flex;
15336
15415
  align-items: flex-start;
15337
15416
  justify-content: space-between;
@@ -15340,37 +15419,37 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15340
15419
  border-bottom: 1px solid var(--border-color, #e5e7eb);
15341
15420
  background: var(--bg-secondary, #f8fafc);
15342
15421
  }
15343
- .mint-component-binding-renderer__title-group[data-v-93f5795f] {
15422
+ .mint-component-binding-renderer__title-group[data-v-ec0e5797] {
15344
15423
  min-width: 0;
15345
15424
  }
15346
- .mint-component-binding-renderer__component[data-v-93f5795f] {
15425
+ .mint-component-binding-renderer__component[data-v-ec0e5797] {
15347
15426
  margin: 0;
15348
15427
  color: var(--text-primary, #0f172a);
15349
15428
  font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
15350
15429
  font-size: 0.8125rem;
15351
15430
  font-weight: 600;
15352
15431
  }
15353
- .mint-component-binding-renderer__source[data-v-93f5795f],
15354
- .mint-component-binding-renderer__description[data-v-93f5795f],
15355
- .mint-component-binding-renderer__empty[data-v-93f5795f] {
15432
+ .mint-component-binding-renderer__source[data-v-ec0e5797],
15433
+ .mint-component-binding-renderer__description[data-v-ec0e5797],
15434
+ .mint-component-binding-renderer__empty[data-v-ec0e5797] {
15356
15435
  margin: 0;
15357
15436
  color: var(--text-secondary, #475569);
15358
15437
  font-size: 0.75rem;
15359
15438
  line-height: 1.4;
15360
15439
  }
15361
- .mint-component-binding-renderer__description[data-v-93f5795f] {
15440
+ .mint-component-binding-renderer__description[data-v-ec0e5797] {
15362
15441
  max-width: 24rem;
15363
15442
  text-align: right;
15364
15443
  }
15365
- .mint-component-binding-renderer__body[data-v-93f5795f] {
15444
+ .mint-component-binding-renderer__body[data-v-ec0e5797] {
15366
15445
  min-width: 0;
15367
15446
  padding: 1rem;
15368
15447
  }
15369
- .mint-component-binding-renderer--dense .mint-component-binding-renderer__header[data-v-93f5795f],
15370
- .mint-component-binding-renderer--dense .mint-component-binding-renderer__body[data-v-93f5795f] {
15448
+ .mint-component-binding-renderer--dense .mint-component-binding-renderer__header[data-v-ec0e5797],
15449
+ .mint-component-binding-renderer--dense .mint-component-binding-renderer__body[data-v-ec0e5797] {
15371
15450
  padding: 0.75rem;
15372
15451
  }
15373
- .mint-component-binding-renderer__empty[data-v-93f5795f] {
15452
+ .mint-component-binding-renderer__empty[data-v-ec0e5797] {
15374
15453
  padding: 1rem;
15375
15454
  border: 1px dashed var(--border-color, #e5e7eb);
15376
15455
  border-radius: 0.5rem;
@@ -15378,25 +15457,25 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15378
15457
  text-align: center;
15379
15458
  }
15380
15459
  @media (max-width: 720px) {
15381
- .mint-component-binding-renderer__header[data-v-93f5795f] {
15460
+ .mint-component-binding-renderer__header[data-v-ec0e5797] {
15382
15461
  display: block;
15383
15462
  }
15384
- .mint-component-binding-renderer__description[data-v-93f5795f] {
15463
+ .mint-component-binding-renderer__description[data-v-ec0e5797] {
15385
15464
  max-width: none;
15386
15465
  margin-top: 0.25rem;
15387
15466
  text-align: left;
15388
15467
  }
15389
15468
  }
15390
15469
 
15391
- .mint-control-workspace-view[data-v-83e93e6c] {
15470
+ .mint-control-workspace-view[data-v-8121a7e6] {
15392
15471
  min-width: 0;
15393
15472
  }
15394
- .mint-control-workspace-view__content[data-v-83e93e6c] {
15473
+ .mint-control-workspace-view__content[data-v-8121a7e6] {
15395
15474
  min-width: 0;
15396
15475
  padding: 1rem;
15397
15476
  }
15398
15477
 
15399
- .mint-dose-design-workspace[data-v-99145924] {
15478
+ .mint-dose-design-workspace[data-v-9923dd0b] {
15400
15479
  display: grid;
15401
15480
  grid-template-columns: minmax(360px, 1fr) minmax(300px, 420px);
15402
15481
  gap: 1rem;
@@ -15404,7 +15483,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15404
15483
  min-width: 0;
15405
15484
  }
15406
15485
  @media (max-width: 900px) {
15407
- .mint-dose-design-workspace[data-v-99145924] {
15486
+ .mint-dose-design-workspace[data-v-9923dd0b] {
15408
15487
  grid-template-columns: minmax(0, 1fr);
15409
15488
  }
15410
15489
  }
@@ -15816,130 +15895,130 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1);
15816
15895
  height: 0.875rem;
15817
15896
  }
15818
15897
 
15819
- .mint-bio-template-experiment-workspace[data-v-9eb2d454] {
15898
+ .mint-bio-template-experiment-workspace[data-v-319cba33] {
15820
15899
  display: flex;
15821
15900
  flex-direction: column;
15822
15901
  gap: 1rem;
15823
15902
  min-width: 0;
15824
15903
  }
15825
- .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454] {
15904
+ .mint-bio-template-experiment-workspace__toolbar[data-v-319cba33] {
15826
15905
  display: flex;
15827
15906
  align-items: center;
15828
15907
  justify-content: space-between;
15829
15908
  gap: 0.75rem;
15830
15909
  }
15831
- .mint-bio-template-experiment-workspace__status[data-v-9eb2d454] {
15910
+ .mint-bio-template-experiment-workspace__status[data-v-319cba33] {
15832
15911
  flex: 1 1 auto;
15833
15912
  min-width: 0;
15834
15913
  }
15835
- .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
15914
+ .mint-bio-template-experiment-workspace__actions[data-v-319cba33] {
15836
15915
  display: flex;
15837
15916
  flex: 0 0 auto;
15838
15917
  gap: 0.5rem;
15839
15918
  }
15840
- .mint-bio-template-experiment-workspace__meta[data-v-9eb2d454],
15841
- .mint-bio-template-experiment-workspace__template-version[data-v-9eb2d454] {
15919
+ .mint-bio-template-experiment-workspace__meta[data-v-319cba33],
15920
+ .mint-bio-template-experiment-workspace__template-version[data-v-319cba33] {
15842
15921
  margin: 0;
15843
15922
  color: var(--text-secondary, #64748b);
15844
15923
  font-family: var(--font-mono, 'Fira Code', monospace);
15845
15924
  font-size: 0.75rem;
15846
15925
  }
15847
- .mint-bio-template-experiment-workspace__templates[data-v-9eb2d454] {
15926
+ .mint-bio-template-experiment-workspace__templates[data-v-319cba33] {
15848
15927
  display: grid;
15849
15928
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
15850
15929
  gap: 0.75rem;
15851
15930
  }
15852
- .mint-bio-template-experiment-workspace__template[data-v-9eb2d454] {
15931
+ .mint-bio-template-experiment-workspace__template[data-v-319cba33] {
15853
15932
  min-width: 0;
15854
15933
  padding: 1rem;
15855
15934
  border: 1px solid var(--border-color, #e5e7eb);
15856
15935
  border-radius: 0.5rem;
15857
15936
  background: var(--bg-primary, #ffffff);
15858
15937
  }
15859
- .mint-bio-template-experiment-workspace__template-id[data-v-9eb2d454] {
15938
+ .mint-bio-template-experiment-workspace__template-id[data-v-319cba33] {
15860
15939
  margin: 0;
15861
15940
  color: var(--text-primary, #0f172a);
15862
15941
  font-family: var(--font-mono, 'Fira Code', monospace);
15863
15942
  font-size: 0.875rem;
15864
15943
  }
15865
15944
  @media (max-width: 48rem) {
15866
- .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454],
15867
- .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
15945
+ .mint-bio-template-experiment-workspace__toolbar[data-v-319cba33],
15946
+ .mint-bio-template-experiment-workspace__actions[data-v-319cba33] {
15868
15947
  align-items: stretch;
15869
15948
  flex-direction: column;
15870
15949
  }
15871
15950
  }
15872
15951
 
15873
- .mint-bio-template-preset-workspace[data-v-0cb9aa98] {
15952
+ .mint-bio-template-preset-workspace[data-v-f889ed9c] {
15874
15953
  display: flex;
15875
15954
  flex-direction: column;
15876
15955
  gap: 1rem;
15877
15956
  min-width: 0;
15878
15957
  }
15879
- .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98] {
15958
+ .mint-bio-template-preset-workspace__toolbar[data-v-f889ed9c] {
15880
15959
  display: flex;
15881
15960
  align-items: center;
15882
15961
  justify-content: space-between;
15883
15962
  gap: 0.75rem;
15884
15963
  }
15885
- .mint-bio-template-preset-workspace__status[data-v-0cb9aa98] {
15964
+ .mint-bio-template-preset-workspace__status[data-v-f889ed9c] {
15886
15965
  flex: 1 1 auto;
15887
15966
  min-width: 0;
15888
15967
  }
15889
- .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
15968
+ .mint-bio-template-preset-workspace__actions[data-v-f889ed9c] {
15890
15969
  display: flex;
15891
15970
  flex: 0 0 auto;
15892
15971
  gap: 0.5rem;
15893
15972
  }
15894
- .mint-bio-template-preset-workspace__meta[data-v-0cb9aa98],
15895
- .mint-bio-template-preset-workspace__sidebar-subtitle[data-v-0cb9aa98],
15896
- .mint-bio-template-preset-workspace__template-meta[data-v-0cb9aa98] {
15973
+ .mint-bio-template-preset-workspace__meta[data-v-f889ed9c],
15974
+ .mint-bio-template-preset-workspace__sidebar-subtitle[data-v-f889ed9c],
15975
+ .mint-bio-template-preset-workspace__template-meta[data-v-f889ed9c] {
15897
15976
  margin: 0;
15898
15977
  color: var(--text-secondary, #64748b);
15899
15978
  font-family: var(--font-mono, 'Fira Code', monospace);
15900
15979
  font-size: 0.75rem;
15901
15980
  }
15902
- .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
15981
+ .mint-bio-template-preset-workspace__main[data-v-f889ed9c] {
15903
15982
  display: grid;
15904
15983
  grid-template-columns: minmax(16rem, max-content) minmax(0, 1fr);
15905
15984
  gap: 1rem;
15906
15985
  align-items: start;
15907
15986
  min-width: 0;
15908
15987
  }
15909
- .mint-bio-template-preset-workspace__sidebar-title[data-v-0cb9aa98] {
15988
+ .mint-bio-template-preset-workspace__sidebar-title[data-v-f889ed9c] {
15910
15989
  margin: 0;
15911
15990
  color: var(--text-primary, #0f172a);
15912
15991
  font-size: 0.875rem;
15913
15992
  font-weight: 600;
15914
15993
  }
15915
- .mint-bio-template-preset-workspace__view-nav[data-v-0cb9aa98] {
15994
+ .mint-bio-template-preset-workspace__view-nav[data-v-f889ed9c] {
15916
15995
  margin-top: 0.5rem;
15917
15996
  }
15918
- .mint-bio-template-preset-workspace__templates[data-v-0cb9aa98] {
15997
+ .mint-bio-template-preset-workspace__templates[data-v-f889ed9c] {
15919
15998
  display: grid;
15920
15999
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
15921
16000
  gap: 0.75rem;
15922
16001
  }
15923
- .mint-bio-template-preset-workspace__template[data-v-0cb9aa98] {
16002
+ .mint-bio-template-preset-workspace__template[data-v-f889ed9c] {
15924
16003
  min-width: 0;
15925
16004
  padding: 1rem;
15926
16005
  border: 1px solid var(--border-color, #e5e7eb);
15927
16006
  border-radius: 0.5rem;
15928
16007
  background: var(--bg-primary, #ffffff);
15929
16008
  }
15930
- .mint-bio-template-preset-workspace__template-id[data-v-0cb9aa98] {
16009
+ .mint-bio-template-preset-workspace__template-id[data-v-f889ed9c] {
15931
16010
  margin: 0;
15932
16011
  color: var(--text-primary, #0f172a);
15933
16012
  font-family: var(--font-mono, 'Fira Code', monospace);
15934
16013
  font-size: 0.875rem;
15935
16014
  }
15936
16015
  @media (max-width: 48rem) {
15937
- .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98],
15938
- .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
16016
+ .mint-bio-template-preset-workspace__toolbar[data-v-f889ed9c],
16017
+ .mint-bio-template-preset-workspace__actions[data-v-f889ed9c] {
15939
16018
  align-items: stretch;
15940
16019
  flex-direction: column;
15941
16020
  }
15942
- .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
16021
+ .mint-bio-template-preset-workspace__main[data-v-f889ed9c] {
15943
16022
  grid-template-columns: minmax(0, 1fr);
15944
16023
  }
15945
16024
  }
@@ -20993,6 +21072,58 @@ code, pre {
20993
21072
  }
20994
21073
  }
20995
21074
  /* Component styles - alphabetically ordered */
21075
+ /* ActionMenu — compact square trigger with a teleported, viewport-safe menu. */
21076
+ .mint-action-menu {
21077
+ display: inline-flex;
21078
+ flex-shrink: 0;
21079
+ }
21080
+ .mint-action-menu__trigger-icon {
21081
+ width: 0.875rem;
21082
+ height: 0.875rem;
21083
+ }
21084
+ .mint-action-menu__panel {
21085
+ position: fixed;
21086
+ z-index: 1000;
21087
+ display: flex;
21088
+ min-width: 10rem;
21089
+ max-width: min(18rem, calc(100vw - 1rem));
21090
+ flex-direction: column;
21091
+ padding: 0.25rem;
21092
+ border: 1px solid var(--border-color);
21093
+ border-radius: var(--radius-md);
21094
+ background: var(--bg-secondary);
21095
+ box-shadow: var(--shadow-md);
21096
+ }
21097
+ .mint-action-menu__item {
21098
+ display: flex;
21099
+ width: 100%;
21100
+ align-items: center;
21101
+ padding: 0.4375rem 0.625rem;
21102
+ border: 0;
21103
+ border-radius: 0.375rem;
21104
+ background: transparent;
21105
+ color: var(--text-primary);
21106
+ font-family: inherit;
21107
+ font-size: 0.78125rem;
21108
+ line-height: 1.25;
21109
+ text-align: left;
21110
+ text-decoration: none;
21111
+ cursor: pointer;
21112
+ transition: background-color var(--mint-transition);
21113
+ }
21114
+ .mint-action-menu__item:hover:not(:disabled),
21115
+ .mint-action-menu__item:focus-visible {
21116
+ outline: none;
21117
+ background: var(--bg-hover);
21118
+ }
21119
+ .mint-action-menu__item--danger {
21120
+ color: var(--mint-error);
21121
+ }
21122
+ .mint-action-menu__item:disabled {
21123
+ color: var(--text-muted);
21124
+ cursor: not-allowed;
21125
+ opacity: var(--mint-disabled-opacity);
21126
+ }
20996
21127
  /* AlertBox Component Styles */
20997
21128
  .mint-alert {
20998
21129
  display: flex;
@@ -23612,6 +23743,7 @@ code, pre {
23612
23743
  /* IconButton Component Styles */
23613
23744
  .mint-icon-button {
23614
23745
  display: inline-flex;
23746
+ flex-shrink: 0;
23615
23747
  align-items: center;
23616
23748
  justify-content: center;
23617
23749
  border-radius: var(--radius-md);
@@ -23716,16 +23848,19 @@ code, pre {
23716
23848
  }
23717
23849
  /* Sizes */
23718
23850
  .mint-icon-button--sm {
23851
+ width: var(--form-height-sm);
23852
+ height: var(--form-height-sm);
23719
23853
  padding: 0.375rem;
23720
- min-height: var(--form-height-sm);
23721
23854
  }
23722
23855
  .mint-icon-button--md {
23856
+ width: var(--form-height-md);
23857
+ height: var(--form-height-md);
23723
23858
  padding: 0.5rem;
23724
- min-height: var(--form-height-md);
23725
23859
  }
23726
23860
  .mint-icon-button--lg {
23861
+ width: var(--form-height-lg);
23862
+ height: var(--form-height-lg);
23727
23863
  padding: 0.75rem;
23728
- min-height: var(--form-height-lg);
23729
23864
  }
23730
23865
  .mint-icon-button__icon--sm,
23731
23866
  .mint-icon-button__icon--md,
@@ -24719,73 +24854,324 @@ code, pre {
24719
24854
  padding: 1.125rem 1.25rem;
24720
24855
  border-bottom: 1px solid var(--border-light);
24721
24856
  }
24722
- .mint-modal__header-text {
24723
- flex: 1;
24724
- min-width: 0;
24857
+ .mint-modal__header-text {
24858
+ flex: 1;
24859
+ min-width: 0;
24860
+ }
24861
+ .mint-modal__title {
24862
+ font-size: 0.9375rem;
24863
+ font-weight: 600;
24864
+ letter-spacing: -0.005em;
24865
+ color: var(--text-primary);
24866
+ line-height: 1.3;
24867
+ margin-top: 0 !important;
24868
+ margin-bottom: 0 !important;
24869
+ padding: 0 !important;
24870
+ }
24871
+ .mint-modal__subtitle {
24872
+ font-size: 0.75rem;
24873
+ color: var(--text-secondary);
24874
+ line-height: 1.4;
24875
+ margin: 0.125rem 0 0;
24876
+ }
24877
+ .mint-modal__close {
24878
+ flex-shrink: 0;
24879
+ /* Always pin the close affordance to the right edge of the header, even when
24880
+ there is no title/subtitle (no flex-1 header-text to push it over). */
24881
+ margin-left: auto;
24882
+ width: 1.75rem;
24883
+ height: 1.75rem;
24884
+ padding: 0;
24885
+ border-radius: 0.4375rem;
24886
+ color: var(--text-secondary);
24887
+ background: none;
24888
+ border: none;
24889
+ cursor: pointer;
24890
+ display: grid;
24891
+ place-items: center;
24892
+ transition: color var(--mint-transition), background-color var(--mint-transition);
24893
+ }
24894
+ .mint-modal__close:hover {
24895
+ color: var(--text-primary);
24896
+ background-color: var(--bg-hover);
24897
+ }
24898
+ .mint-modal__close:focus-visible {
24899
+ outline: none;
24900
+ box-shadow: var(--focus-ring);
24901
+ }
24902
+ .mint-modal__close-icon {
24903
+ width: 0.875rem;
24904
+ height: 0.875rem;
24905
+ display: block;
24906
+ }
24907
+ .mint-modal__body {
24908
+ padding: 1.125rem 1.25rem;
24909
+ flex: 1;
24910
+ min-height: 0;
24911
+ overflow-y: auto;
24912
+ font-size: 0.8125rem;
24913
+ color: var(--text-primary);
24914
+ line-height: 1.55;
24915
+ }
24916
+ .mint-modal__footer {
24917
+ padding: 0.75rem 1.25rem;
24918
+ border-top: 1px solid var(--border-light);
24919
+ background-color: var(--bg-primary);
24920
+ display: flex;
24921
+ justify-content: flex-end;
24922
+ align-items: center;
24923
+ gap: 0.5rem;
24924
+ }
24925
+ /* ========================================================================
24926
+ Tab strip (layout="tabs")
24927
+ ========================================================================
24928
+ A shell region, not body content: full-bleed, flush with both edges,
24929
+ never scrolls with the fields.
24930
+ ======================================================================== */
24931
+ .mint-modal__tabs {
24932
+ flex-shrink: 0;
24933
+ display: flex;
24934
+ gap: 2px;
24935
+ padding: 0 0.75rem;
24936
+ background-color: var(--bg-card);
24937
+ border-bottom: 1px solid var(--border-color);
24938
+ overflow-x: auto;
24939
+ scrollbar-width: none;
24940
+ }
24941
+ .mint-modal__tabs::-webkit-scrollbar {
24942
+ display: none;
24943
+ }
24944
+ .mint-modal__tab {
24945
+ flex-shrink: 0;
24946
+ display: inline-flex;
24947
+ align-items: center;
24948
+ gap: 0.4375rem;
24949
+ height: 2.375rem; /* 38px */
24950
+ padding: 0 0.75rem;
24951
+ border: none;
24952
+ background: transparent;
24953
+ font-family: inherit;
24954
+ font-size: 0.8125rem; /* 13px */
24955
+ font-weight: 500;
24956
+ color: var(--text-secondary);
24957
+ cursor: pointer;
24958
+ /* Underline drawn INSIDE the box — no margin-bottom:-1px overlap hack. */
24959
+ transition: color var(--mint-transition), box-shadow var(--mint-transition);
24960
+ }
24961
+ .mint-modal__tab:hover:not(.mint-modal__tab--disabled) {
24962
+ color: var(--text-primary);
24963
+ }
24964
+ .mint-modal__tab--active {
24965
+ color: var(--color-primary);
24966
+ font-weight: 600;
24967
+ box-shadow: inset 0 -2px 0 var(--color-primary);
24968
+ }
24969
+ .mint-modal__tab--disabled {
24970
+ color: var(--text-muted);
24971
+ cursor: not-allowed;
24972
+ }
24973
+ .mint-modal__tab:focus-visible {
24974
+ outline: none;
24975
+ box-shadow: var(--focus-ring-soft), inset 0 -2px 0 var(--color-primary);
24976
+ }
24977
+ .mint-modal__tab-meta {
24978
+ font-family: 'Fira Code', monospace;
24979
+ font-size: 0.6875rem;
24980
+ font-weight: 400;
24981
+ color: var(--text-muted);
24982
+ }
24983
+ /* Fixed body height: switching tabs must not resize the card. */
24984
+ .mint-modal__body--tabbed {
24985
+ height: clamp(14rem, 45vh, 26rem);
24986
+ overflow-y: auto;
24987
+ }
24988
+ /* Header rule is redundant once a strip or rail follows it. */
24989
+ .mint-modal__container--tabs .mint-modal__header,
24990
+ .mint-modal__container--rail .mint-modal__header {
24991
+ border-bottom: none;
24992
+ }
24993
+ /* ========================================================================
24994
+ Rail (layout="rail") — sidebar sections + pane as the shell's middle row
24995
+ ======================================================================== */
24996
+ .mint-modal__split {
24997
+ flex: 1;
24998
+ min-height: 0;
24999
+ display: grid;
25000
+ grid-template-columns: 13.5rem minmax(0, 1fr);
25001
+ height: clamp(20rem, 62vh, 34rem);
25002
+ }
25003
+ .mint-modal__rail {
25004
+ display: flex;
25005
+ flex-direction: column;
25006
+ gap: 0.625rem;
25007
+ padding: 0.625rem 0.5rem;
25008
+ background-color: var(--bg-primary);
25009
+ border-right: 1px solid var(--border-light);
25010
+ overflow-y: auto; /* rail scrolls independently of the pane */
25011
+ scrollbar-width: thin;
25012
+ }
25013
+ .mint-modal__rail-items {
25014
+ display: flex;
25015
+ flex-direction: column;
25016
+ gap: 2px;
25017
+ }
25018
+ .mint-modal__rail-item {
25019
+ display: flex;
25020
+ align-items: center;
25021
+ gap: 0.5625rem;
25022
+ width: 100%;
25023
+ min-height: 2.25rem;
25024
+ padding: 0.4375rem 0.625rem;
25025
+ border: none;
25026
+ border-radius: 0.4375rem;
25027
+ background: transparent;
25028
+ font-family: inherit;
25029
+ font-size: 0.8125rem;
25030
+ font-weight: 500;
25031
+ color: var(--text-secondary);
25032
+ text-align: left;
25033
+ cursor: pointer;
25034
+ transition: background-color var(--mint-transition), color var(--mint-transition);
25035
+ }
25036
+ .mint-modal__rail-item:hover:not(.mint-modal__rail-item--disabled) {
25037
+ background-color: var(--bg-tertiary);
25038
+ }
25039
+ .mint-modal__rail-item:focus-visible {
25040
+ outline: none;
25041
+ box-shadow: var(--focus-ring-soft);
25042
+ }
25043
+ /* Active = raised card, matching the 1.1 card language (not a primary fill). */
25044
+ .mint-modal__rail-item--active {
25045
+ background-color: var(--bg-card);
25046
+ color: var(--text-primary);
25047
+ font-weight: 600;
25048
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
25049
+ }
25050
+ .mint-modal__rail-item--disabled {
25051
+ color: var(--text-muted);
25052
+ cursor: not-allowed;
25053
+ }
25054
+ .mint-modal__rail-item-icon {
25055
+ flex-shrink: 0;
25056
+ width: 0.9375rem;
25057
+ height: 0.9375rem;
25058
+ color: var(--text-muted);
25059
+ }
25060
+ .mint-modal__rail-item-icon svg {
25061
+ width: 100%;
25062
+ height: 100%;
25063
+ display: block;
25064
+ }
25065
+ /* v-html markup icons arrive wrapped in a span — size it like the svg. */
25066
+ .mint-modal__rail-item-icon > span {
25067
+ display: block;
25068
+ width: 100%;
25069
+ height: 100%;
25070
+ }
25071
+ .mint-modal__rail-item--active .mint-modal__rail-item-icon {
25072
+ color: var(--color-primary);
25073
+ }
25074
+ .mint-modal__rail-item-text {
25075
+ flex: 1;
25076
+ min-width: 0;
25077
+ display: flex;
25078
+ flex-direction: column;
25079
+ gap: 0.0625rem;
25080
+ }
25081
+ .mint-modal__rail-item-label {
25082
+ line-height: 1.3;
25083
+ overflow-wrap: anywhere;
25084
+ }
25085
+ .mint-modal__rail-item-description {
25086
+ font-size: 0.6875rem;
25087
+ font-weight: 400;
25088
+ color: var(--text-muted);
25089
+ line-height: 1.35;
25090
+ }
25091
+ .mint-modal__rail-item-meta {
25092
+ flex-shrink: 0;
25093
+ font-family: 'Fira Code', monospace;
25094
+ font-size: 0.6875rem;
25095
+ font-weight: 400;
25096
+ color: var(--text-muted);
25097
+ }
25098
+ /* ---------- Pane ---------- */
25099
+ .mint-modal__pane {
25100
+ min-width: 0;
25101
+ min-height: 0;
25102
+ display: flex;
25103
+ flex-direction: column;
25104
+ }
25105
+ .mint-modal__pane:focus-visible {
25106
+ outline: none;
25107
+ box-shadow: var(--focus-ring-soft);
25108
+ }
25109
+ .mint-modal__pane-header {
25110
+ flex-shrink: 0;
25111
+ padding: 0.875rem 1.25rem 0.75rem;
25112
+ border-bottom: 1px solid var(--border-light);
24725
25113
  }
24726
- .mint-modal__title {
24727
- font-size: 0.9375rem;
25114
+ .mint-modal__pane-title {
25115
+ margin: 0 !important;
25116
+ padding: 0 !important;
25117
+ font-size: 0.875rem;
24728
25118
  font-weight: 600;
24729
25119
  letter-spacing: -0.005em;
24730
25120
  color: var(--text-primary);
24731
25121
  line-height: 1.3;
24732
- margin-top: 0 !important;
24733
- margin-bottom: 0 !important;
24734
- padding: 0 !important;
24735
25122
  }
24736
- .mint-modal__subtitle {
25123
+ .mint-modal__pane-subtitle {
25124
+ margin: 0.1875rem 0 0 !important;
25125
+ padding: 0 !important;
24737
25126
  font-size: 0.75rem;
24738
25127
  color: var(--text-secondary);
24739
- line-height: 1.4;
24740
- margin: 0.125rem 0 0;
24741
- }
24742
- .mint-modal__close {
24743
- flex-shrink: 0;
24744
- /* Always pin the close affordance to the right edge of the header, even when
24745
- there is no title/subtitle (no flex-1 header-text to push it over). */
24746
- margin-left: auto;
24747
- width: 1.75rem;
24748
- height: 1.75rem;
24749
- padding: 0;
24750
- border-radius: 0.4375rem;
24751
- color: var(--text-secondary);
24752
- background: none;
24753
- border: none;
24754
- cursor: pointer;
24755
- display: grid;
24756
- place-items: center;
24757
- transition: color var(--mint-transition), background-color var(--mint-transition);
24758
- }
24759
- .mint-modal__close:hover {
24760
- color: var(--text-primary);
24761
- background-color: var(--bg-hover);
24762
- }
24763
- .mint-modal__close:focus-visible {
24764
- outline: none;
24765
- box-shadow: var(--focus-ring);
24766
- }
24767
- .mint-modal__close-icon {
24768
- width: 0.875rem;
24769
- height: 0.875rem;
24770
- display: block;
25128
+ line-height: 1.45;
24771
25129
  }
24772
- .mint-modal__body {
24773
- padding: 1.125rem 1.25rem;
25130
+ .mint-modal__pane-body {
24774
25131
  flex: 1;
24775
25132
  min-height: 0;
24776
25133
  overflow-y: auto;
25134
+ overscroll-behavior: contain;
25135
+ padding: 0.875rem 1.25rem 1.125rem;
24777
25136
  font-size: 0.8125rem;
24778
25137
  color: var(--text-primary);
24779
25138
  line-height: 1.55;
24780
25139
  }
24781
- .mint-modal__footer {
24782
- padding: 0.75rem 1.25rem;
24783
- border-top: 1px solid var(--border-light);
24784
- background-color: var(--bg-primary);
24785
- display: flex;
24786
- justify-content: flex-end;
24787
- align-items: center;
24788
- gap: 0.5rem;
25140
+ /* Rail collapses to the tab-strip pattern on narrow screens — one behaviour. */
25141
+ @media (max-width: 640px) {
25142
+ .mint-modal__split {
25143
+ grid-template-columns: minmax(0, 1fr);
25144
+ height: auto;
25145
+ }
25146
+
25147
+ .mint-modal__rail {
25148
+ flex-direction: row;
25149
+ align-items: center;
25150
+ gap: 0.25rem;
25151
+ padding: 0 0.5rem;
25152
+ border-right: none;
25153
+ border-bottom: 1px solid var(--border-color);
25154
+ overflow-x: auto;
25155
+ overflow-y: hidden;
25156
+ }
25157
+
25158
+ .mint-modal__rail-items {
25159
+ flex-direction: row;
25160
+ }
25161
+
25162
+ .mint-modal__rail-item {
25163
+ width: auto;
25164
+ min-height: 2.375rem;
25165
+ }
25166
+
25167
+ /* Strip stays compact */
25168
+ .mint-modal__rail-item-description {
25169
+ display: none;
25170
+ }
25171
+
25172
+ .mint-modal__pane-body {
25173
+ max-height: 60vh;
25174
+ }
24789
25175
  }
24790
25176
  /* ========================================================================
24791
25177
  Per-variant transitions
@@ -24914,6 +25300,12 @@ code, pre {
24914
25300
  .modal-drawer-leave-to .mint-modal__container {
24915
25301
  transform: translateY(100%);
24916
25302
  }
25303
+
25304
+ /* Sheets keep their natural height; the strip already scrolls horizontally */
25305
+ .mint-modal__body--tabbed {
25306
+ height: auto;
25307
+ max-height: 60vh;
25308
+ }
24917
25309
  }
24918
25310
  /* NumberInput Component Styles */
24919
25311
  .mint-number-input {
@@ -32613,42 +33005,15 @@ html.dark .mint-dataframe__loading {
32613
33005
  font-size: 0.8125rem;
32614
33006
  color: var(--text-secondary);
32615
33007
  }
32616
- /* SettingsModal Component Styles */
33008
+ /* SettingsModal Component Styles
33009
+ Tab strip / rail / pane / footer chrome lives in BaseModal (modal.css);
33010
+ only pane content styles remain here. */
32617
33011
  .mint-settings-modal {
32618
33012
  display: flex;
32619
33013
  flex-direction: column;
32620
33014
  gap: 1rem;
32621
33015
  min-height: 0;
32622
33016
  }
32623
- .mint-settings-modal__tabs {
32624
- display: flex;
32625
- gap: 0.25rem;
32626
- border-bottom: 1px solid var(--border-color);
32627
- padding-bottom: 0;
32628
- margin-bottom: 0.5rem;
32629
- }
32630
- .mint-settings-modal__tab {
32631
- padding: 0.5rem 1rem;
32632
- font-size: 0.875rem;
32633
- font-weight: 500;
32634
- color: var(--text-muted);
32635
- background: none;
32636
- border: none;
32637
- border-bottom: 2px solid transparent;
32638
- cursor: pointer;
32639
- transition: color 0.15s ease, border-color 0.15s ease;
32640
- margin-bottom: -1px;
32641
- }
32642
- .mint-settings-modal__tab:hover {
32643
- color: var(--text-primary);
32644
- }
32645
- .mint-settings-modal__tab--active {
32646
- color: var(--color-primary);
32647
- border-bottom-color: var(--color-primary);
32648
- }
32649
- .mint-settings-modal__content {
32650
- min-height: 12rem;
32651
- }
32652
33017
  .mint-settings-modal__section {
32653
33018
  margin-bottom: 1.5rem;
32654
33019
  }
@@ -32695,14 +33060,6 @@ html.dark .mint-settings-modal__option-btn--active {
32695
33060
  margin-bottom: 0 !important;
32696
33061
  padding: 0 !important;
32697
33062
  }
32698
- .mint-settings-modal__footer {
32699
- display: flex;
32700
- flex-direction: column;
32701
- gap: 0.75rem;
32702
- margin-top: 1rem;
32703
- padding-top: 1rem;
32704
- border-top: 1px solid var(--border-light);
32705
- }
32706
33063
  /* ─────────────────────────────────────────────────────────────────────
32707
33064
  * Schema-driven content grid (used by both layouts)
32708
33065
  * Cols come from `--mint-settings-cols` set inline by the component;
@@ -32713,209 +33070,6 @@ html.dark .mint-settings-modal__option-btn--active {
32713
33070
  gap: 1rem;
32714
33071
  grid-template-columns: repeat(var(--mint-settings-cols, 1), minmax(0, 1fr));
32715
33072
  }
32716
- /* ─────────────────────────────────────────────────────────────────────
32717
- * Vertical layout — sidebar rail + content pane (opt-in via layout="vertical")
32718
- * Designed for complex plugins with 5+ setting groups. Existing horizontal
32719
- * classes above are deliberately untouched.
32720
- * ───────────────────────────────────────────────────────────────────── */
32721
- .mint-settings-modal--vertical {
32722
- flex-direction: row;
32723
- gap: 1.25rem;
32724
- align-items: stretch;
32725
- height: clamp(22rem, calc(100vh - 9rem), 42rem);
32726
- min-height: 22rem;
32727
- overflow: hidden;
32728
- }
32729
- .mint-settings-modal__rail {
32730
- flex-shrink: 0;
32731
- width: 12.5rem;
32732
- display: flex;
32733
- flex-direction: column;
32734
- gap: 0.125rem;
32735
- padding: 0.125rem 0.75rem 0.125rem 0;
32736
- border-right: 1px solid var(--border-light);
32737
- overflow: hidden;
32738
- }
32739
- .mint-settings-modal__rail-item {
32740
- position: relative;
32741
- display: flex;
32742
- align-items: flex-start;
32743
- gap: 0.625rem;
32744
- width: 100%;
32745
- min-height: 2.5rem;
32746
- padding: 0.5rem 0.75rem 0.5rem 0.875rem;
32747
- font-size: 0.8125rem;
32748
- font-weight: 500;
32749
- color: var(--text-secondary);
32750
- background: none;
32751
- border: none;
32752
- border-radius: var(--radius-md);
32753
- cursor: pointer;
32754
- text-align: left;
32755
- transition:
32756
- color var(--mint-transition),
32757
- background-color var(--mint-transition);
32758
- }
32759
- .mint-settings-modal__rail-item:hover {
32760
- background-color: var(--bg-hover);
32761
- color: var(--text-primary);
32762
- }
32763
- .mint-settings-modal__rail-item:focus-visible {
32764
- outline: none;
32765
- box-shadow: var(--focus-ring);
32766
- }
32767
- .mint-settings-modal__rail-item--active {
32768
- color: var(--color-primary);
32769
- background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
32770
- }
32771
- .mint-settings-modal__rail-item--active::before {
32772
- content: "";
32773
- position: absolute;
32774
- left: 0.375rem;
32775
- top: 0.625rem;
32776
- bottom: 0.625rem;
32777
- width: 2px;
32778
- border-radius: 9999px;
32779
- background-color: var(--color-primary);
32780
- }
32781
- html.dark .mint-settings-modal__rail-item--active {
32782
- background-color: color-mix(in srgb, var(--color-primary) 18%, transparent);
32783
- }
32784
- /* Reserved icon column keeps labels aligned whether or not icons are present */
32785
- .mint-settings-modal__rail-item-icon {
32786
- flex-shrink: 0;
32787
- width: 1rem;
32788
- height: 1rem;
32789
- display: inline-flex;
32790
- align-items: center;
32791
- justify-content: center;
32792
- margin-top: 0.0625rem;
32793
- color: currentColor;
32794
- }
32795
- .mint-settings-modal__rail-item-icon svg {
32796
- width: 100%;
32797
- height: 100%;
32798
- display: block;
32799
- }
32800
- .mint-settings-modal__rail-item-text {
32801
- display: flex;
32802
- flex-direction: column;
32803
- gap: 0.125rem;
32804
- min-width: 0;
32805
- flex: 1;
32806
- }
32807
- .mint-settings-modal__rail-item-label {
32808
- line-height: 1.3;
32809
- overflow-wrap: anywhere;
32810
- }
32811
- .mint-settings-modal__rail-item-description {
32812
- font-size: 0.6875rem;
32813
- font-weight: 400;
32814
- color: var(--text-muted);
32815
- line-height: 1.35;
32816
- overflow-wrap: anywhere;
32817
- }
32818
- .mint-settings-modal__rail-item--active .mint-settings-modal__rail-item-description {
32819
- color: color-mix(in srgb, var(--color-primary) 65%, var(--text-secondary));
32820
- }
32821
- .mint-settings-modal__pane {
32822
- flex: 1;
32823
- min-width: 0;
32824
- min-height: 0;
32825
- display: flex;
32826
- flex-direction: column;
32827
- overflow: hidden;
32828
- }
32829
- .mint-settings-modal__pane:focus-visible {
32830
- outline: none;
32831
- box-shadow: var(--focus-ring);
32832
- border-radius: var(--radius-md);
32833
- }
32834
- .mint-settings-modal__pane-header {
32835
- flex-shrink: 0;
32836
- margin-bottom: 1rem;
32837
- padding-bottom: 0.75rem;
32838
- border-bottom: 1px solid var(--border-light);
32839
- }
32840
- .mint-settings-modal__pane-title {
32841
- font-size: 0.875rem;
32842
- font-weight: 600;
32843
- color: var(--text-primary);
32844
- letter-spacing: -0.005em;
32845
- margin: 0 !important;
32846
- padding: 0 !important;
32847
- line-height: 1.3;
32848
- }
32849
- .mint-settings-modal__pane-subtitle {
32850
- font-size: 0.75rem;
32851
- color: var(--text-secondary);
32852
- line-height: 1.45;
32853
- margin: 0.25rem 0 0 !important;
32854
- padding: 0 !important;
32855
- }
32856
- .mint-settings-modal__pane-body {
32857
- flex: 1;
32858
- min-height: 0;
32859
- overflow-y: auto;
32860
- scrollbar-width: thin;
32861
- /* Trailing breathing room so the last field doesn't hug the modal border */
32862
- padding: 0 0.5rem 0.25rem 0;
32863
- margin-right: -0.25rem;
32864
- overscroll-behavior: contain;
32865
- }
32866
- .mint-settings-modal__pane-body::-webkit-scrollbar {
32867
- width: 0.5rem;
32868
- }
32869
- .mint-settings-modal__pane-body::-webkit-scrollbar-track {
32870
- background: transparent;
32871
- }
32872
- .mint-settings-modal__pane-body::-webkit-scrollbar-thumb {
32873
- background-color: color-mix(in srgb, var(--text-muted) 30%, transparent);
32874
- border: 2px solid transparent;
32875
- border-radius: 9999px;
32876
- background-clip: content-box;
32877
- }
32878
- .mint-settings-modal__pane-body::-webkit-scrollbar-thumb:hover {
32879
- background-color: color-mix(in srgb, var(--text-muted) 45%, transparent);
32880
- }
32881
- /* Mobile — collapse the rail into a horizontal scroll-strip so the modal stays usable.
32882
- * Touch targets stay ≥40px tall via 0.5rem vertical padding + 1rem text line-height. */
32883
- @media (max-width: 640px) {
32884
- .mint-settings-modal--vertical {
32885
- flex-direction: column;
32886
- gap: 0.875rem;
32887
- height: auto;
32888
- max-height: none;
32889
- min-height: 0;
32890
- overflow: visible;
32891
- }
32892
-
32893
- .mint-settings-modal__rail {
32894
- width: 100%;
32895
- flex-direction: row;
32896
- overflow-x: auto;
32897
- padding: 0 0 0.625rem;
32898
- border-right: none;
32899
- border-bottom: 1px solid var(--border-light);
32900
- gap: 0.25rem;
32901
- scrollbar-width: thin;
32902
- }
32903
-
32904
- .mint-settings-modal__rail-item {
32905
- flex-shrink: 0;
32906
- width: auto;
32907
- padding: 0.5rem 0.75rem;
32908
- }
32909
-
32910
- .mint-settings-modal__rail-item--active::before {
32911
- display: none;
32912
- }
32913
-
32914
- /* Two-line description hides on mobile so the rail strip stays compact */
32915
- .mint-settings-modal__rail-item-description {
32916
- display: none;
32917
- }
32918
- }
32919
33073
  /* ScientificNumber Component Styles */
32920
33074
  .mint-sci-number {
32921
33075
  display: inline-flex;