@morscherlab/mint-sdk 1.2.0-beta.9 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +30 -0
  2. package/dist/{ExperimentPopover-oL0fg_A0.js → ExperimentPopover-CJdNlCZb.js} +21 -14
  3. package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-BeEOomw_.js → ExperimentSelectorModal-DCXmwKNS.js} +5 -5
  5. package/dist/{ExperimentSelectorModal-BeEOomw_.js.map → ExperimentSelectorModal-DCXmwKNS.js.map} +1 -1
  6. package/dist/{SettingsModal-Dphh3RrI.js → SettingsModal-BYR20I4c.js} +5 -5
  7. package/dist/{SettingsModal-Dphh3RrI.js.map → SettingsModal-BYR20I4c.js.map} +1 -1
  8. package/dist/{Skeleton-DxtwJ5gt.js → Skeleton-BAF3CKY7.js} +3 -3
  9. package/dist/{Skeleton-DxtwJ5gt.js.map → Skeleton-BAF3CKY7.js.map} +1 -1
  10. package/dist/__tests__/apiErrors.test.d.ts +1 -0
  11. package/dist/__tests__/components/FileBrowserModal.test.d.ts +1 -0
  12. package/dist/__tests__/components/FilePicker.state.test.d.ts +1 -0
  13. package/dist/__tests__/components/FilePicker.test.d.ts +1 -0
  14. package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
  15. package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
  16. package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
  17. package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
  18. package/dist/apiErrors.d.ts +26 -0
  19. package/dist/components/BaseInput.vue.d.ts +1 -1
  20. package/dist/components/BaseSelect.vue.d.ts +1 -1
  21. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  22. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  23. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  24. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  25. package/dist/components/DatePicker.vue.d.ts +1 -1
  26. package/dist/components/DateTimePicker.vue.d.ts +1 -1
  27. package/dist/components/FileBrowserModal.vue.d.ts +99 -0
  28. package/dist/components/FilePicker.vue.d.ts +32 -0
  29. package/dist/components/FileUploader.vue.d.ts +5 -2
  30. package/dist/components/FormulaInput.vue.d.ts +1 -1
  31. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  32. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  33. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  34. package/dist/components/NumberInput.vue.d.ts +1 -1
  35. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  36. package/dist/components/ResourceCard.vue.d.ts +1 -1
  37. package/dist/components/SecretInput.vue.d.ts +1 -1
  38. package/dist/components/SequenceInput.vue.d.ts +1 -1
  39. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  40. package/dist/components/TagsInput.vue.d.ts +1 -1
  41. package/dist/components/TimePicker.vue.d.ts +1 -1
  42. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  43. package/dist/components/UnitInput.vue.d.ts +1 -1
  44. package/dist/components/WellPlate.vue.d.ts +1 -1
  45. package/dist/components/fileBrowserPresentation.d.ts +10 -0
  46. package/dist/components/index.d.ts +4 -0
  47. package/dist/components/index.js +8 -8
  48. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
  49. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
  50. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
  51. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
  52. package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
  53. package/dist/{components-CgAUzF8F.js → components-DIum5hkx.js} +4286 -1866
  54. package/dist/components-DIum5hkx.js.map +1 -0
  55. package/dist/composables/filePicker/localFiles.d.ts +3 -0
  56. package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
  57. package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
  58. package/dist/composables/filePicker/validation.d.ts +5 -0
  59. package/dist/composables/index.d.ts +2 -0
  60. package/dist/composables/index.js +10 -10
  61. package/dist/composables/useApi.d.ts +14 -7
  62. package/dist/composables/useFileBrowser.d.ts +55 -0
  63. package/dist/composables/useFilePicker.d.ts +189 -0
  64. package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
  65. package/dist/{composables-B_pia3hO.js → composables-mFXsTA4g.js} +300 -11
  66. package/dist/composables-mFXsTA4g.js.map +1 -0
  67. package/dist/{errors-_W0-LbA6.js → errors-BLuqMee5.js} +78 -15
  68. package/dist/errors-BLuqMee5.js.map +1 -0
  69. package/dist/{experiment-Cwl9AYxw.js → experiment-CVDRAnqp.js} +2 -2
  70. package/dist/{experiment-Cwl9AYxw.js.map → experiment-CVDRAnqp.js.map} +1 -1
  71. package/dist/{experiment-utils-DV3DrvE_.js → experiment-utils-CV2Wza3z.js} +1 -1
  72. package/dist/{experiment-utils-DV3DrvE_.js.map → experiment-utils-CV2Wza3z.js.map} +1 -1
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.js +15 -15
  75. package/dist/install.js +2 -2
  76. package/dist/stores/index.js +2 -2
  77. package/dist/styles.css +2369 -1377
  78. package/dist/templates/index.js +2 -2
  79. package/dist/{templates-Qq113pyZ.js → templates-CmGfmBRA.js} +2 -2
  80. package/dist/{templates-Qq113pyZ.js.map → templates-CmGfmBRA.js.map} +1 -1
  81. package/dist/types/fileBrowserTypes.d.ts +77 -0
  82. package/dist/types/filePicker.d.ts +77 -0
  83. package/dist/types/index.d.ts +2 -0
  84. package/dist/{useControlSchema-aMZlb4Sc.js → useControlSchema-DldpxNOP.js} +42 -37
  85. package/dist/useControlSchema-DldpxNOP.js.map +1 -0
  86. package/dist/{useDropdownState-DitCtrTT.js → useDropdownState-C7hRiVQf.js} +2 -2
  87. package/dist/{useDropdownState-DitCtrTT.js.map → useDropdownState-C7hRiVQf.js.map} +1 -1
  88. package/dist/{useExperimentSelector-I8HC8hUu.js → useExperimentSelector-CEcIaueJ.js} +4 -4
  89. package/dist/{useExperimentSelector-I8HC8hUu.js.map → useExperimentSelector-CEcIaueJ.js.map} +1 -1
  90. package/dist/{useFormBuilder-TCxNnqeb.js → useFormBuilder-z5L_dUIy.js} +2 -2
  91. package/dist/{useFormBuilder-TCxNnqeb.js.map → useFormBuilder-z5L_dUIy.js.map} +1 -1
  92. package/dist/{useProtocolTemplates-BmX_iVBR.js → validation-uwoJGEb6.js} +53 -8
  93. package/dist/validation-uwoJGEb6.js.map +1 -0
  94. package/package.json +1 -1
  95. package/src/__tests__/apiErrors.test.ts +81 -0
  96. package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
  97. package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
  98. package/src/__tests__/components/FilePicker.state.test.ts +287 -0
  99. package/src/__tests__/components/FilePicker.test.ts +487 -0
  100. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  101. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  102. package/src/__tests__/components/SegmentedControl.test.ts +19 -0
  103. package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
  104. package/src/__tests__/composables/useApi.test.ts +92 -9
  105. package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
  106. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  107. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
  108. package/src/__tests__/composables/usePluginClient.test.ts +3 -0
  109. package/src/apiErrors.ts +85 -0
  110. package/src/components/ExperimentPopover.vue +10 -2
  111. package/src/components/FileBrowserModal.story.vue +203 -0
  112. package/src/components/FileBrowserModal.vue +384 -0
  113. package/src/components/FilePicker.story.vue +44 -0
  114. package/src/components/FilePicker.vue +284 -0
  115. package/src/components/FileUploader.vue +32 -14
  116. package/src/components/GeneratedPlotlyResult.vue +34 -69
  117. package/src/components/GeneratedResultRenderer.vue +0 -5
  118. package/src/components/PlotlyChart.story.vue +61 -0
  119. package/src/components/PlotlyChart.vue +233 -0
  120. package/src/components/SegmentedControl.vue +2 -2
  121. package/src/components/fileBrowserPresentation.ts +39 -0
  122. package/src/components/index.ts +5 -0
  123. package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
  124. package/src/components/internal/FileBrowserListingInternal.vue +197 -0
  125. package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
  126. package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
  127. package/src/components/internal/FilePickerTreeInternal.vue +238 -0
  128. package/src/composables/filePicker/localFiles.ts +58 -0
  129. package/src/composables/filePicker/usePickerNavigation.ts +220 -0
  130. package/src/composables/filePicker/usePickerSelection.ts +259 -0
  131. package/src/composables/filePicker/validation.ts +41 -0
  132. package/src/composables/index.ts +7 -0
  133. package/src/composables/useApi.ts +57 -13
  134. package/src/composables/useFileBrowser.ts +314 -0
  135. package/src/composables/useFilePicker.ts +366 -0
  136. package/src/composables/useGeneratedAnalysis.ts +10 -17
  137. package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
  138. package/src/composables/usePluginClient.ts +3 -0
  139. package/src/index.ts +3 -0
  140. package/src/styles/components/file-browser-modal.css +489 -0
  141. package/src/styles/components/file-picker.css +502 -0
  142. package/src/styles/components/icon-button.css +9 -0
  143. package/src/styles/index.css +3 -0
  144. package/src/types/fileBrowserTypes.ts +85 -0
  145. package/src/types/filePicker.ts +72 -0
  146. package/src/types/index.ts +14 -0
  147. package/dist/ExperimentPopover-oL0fg_A0.js.map +0 -1
  148. package/dist/components-CgAUzF8F.js.map +0 -1
  149. package/dist/composables-B_pia3hO.js.map +0 -1
  150. package/dist/errors-_W0-LbA6.js.map +0 -1
  151. package/dist/useControlSchema-aMZlb4Sc.js.map +0 -1
  152. package/dist/useProtocolTemplates-BmX_iVBR.js.map +0 -1
package/dist/styles.css CHANGED
@@ -36,29 +36,43 @@
36
36
  cursor: pointer;
37
37
  }
38
38
 
39
- .mint-generated-result__plotly-error[data-v-a604514a] {
39
+ .mint-plotly-chart__plot[data-v-ee2f733a] {
40
+ width: 100%;
41
+ min-height: 24rem;
42
+ }
43
+ .mint-plotly-chart__error[data-v-ee2f733a] {
40
44
  margin: 0;
41
45
  padding: 1rem;
42
46
  border: 1px solid var(--mint-error-border);
43
47
  border-radius: 0.75rem;
44
48
  background: var(--mint-error-bg);
45
- color: var(--mint-error);
49
+ color: var(--mint-error-hover);
50
+ }
51
+ .mint-plotly-chart__error[data-v-ee2f733a] p {
52
+ margin: 0;
53
+ }
54
+
55
+ .mint-generated-result__image[data-v-4a6d15d5] {
56
+ display: block;
57
+ max-width: 100%;
58
+ height: auto;
59
+ margin: 0 auto;
46
60
  }
47
61
 
48
- .mint-generated-result[data-v-78edbbbd] {
62
+ .mint-generated-result[data-v-7500041f] {
49
63
  width: 100%;
50
64
  }
51
- .mint-generated-result__text[data-v-78edbbbd],
52
- .mint-generated-result__json[data-v-78edbbbd] {
65
+ .mint-generated-result__text[data-v-7500041f],
66
+ .mint-generated-result__json[data-v-7500041f] {
53
67
  margin: 0;
54
68
  color: var(--text-primary);
55
69
  }
56
- .mint-generated-result__text[data-v-78edbbbd] {
70
+ .mint-generated-result__text[data-v-7500041f] {
57
71
  max-width: 72ch;
58
72
  white-space: pre-wrap;
59
73
  line-height: 1.65;
60
74
  }
61
- .mint-generated-result__json[data-v-78edbbbd] {
75
+ .mint-generated-result__json[data-v-7500041f] {
62
76
  overflow: auto;
63
77
  padding: 1rem;
64
78
  border: 1px solid var(--border-color);
@@ -68,17 +82,13 @@
68
82
  line-height: 1.55;
69
83
  white-space: pre-wrap;
70
84
  }
71
- .mint-generated-result__image[data-v-78edbbbd] {
85
+ .mint-generated-result__image[data-v-7500041f] {
72
86
  display: block;
73
87
  max-width: 100%;
74
88
  height: auto;
75
89
  margin: 0 auto;
76
90
  }
77
- .mint-generated-result__plotly[data-v-78edbbbd] {
78
- width: 100%;
79
- min-height: 24rem;
80
- }
81
- .mint-generated-result__artifact[data-v-78edbbbd] {
91
+ .mint-generated-result__artifact[data-v-7500041f] {
82
92
  display: flex;
83
93
  align-items: center;
84
94
  justify-content: space-between;
@@ -4148,6 +4158,14 @@ code, pre {
4148
4158
  width: 1.5rem;
4149
4159
  height: 1.5rem;
4150
4160
  }
4161
+ /* A bare <svg> in the slot has no intrinsic size and collapses to 0 width as a
4162
+ flex item; fill the sized icon box so callers need not size their icon. */
4163
+ .mint-icon-button__icon--sm > svg,
4164
+ .mint-icon-button__icon--md > svg,
4165
+ .mint-icon-button__icon--lg > svg {
4166
+ width: 100%;
4167
+ height: 100%;
4168
+ }
4151
4169
  /* Spinner */
4152
4170
  .mint-icon-button__spinner {
4153
4171
  animation: mint-spin 1s linear infinite;
@@ -16025,1064 +16043,1265 @@ html.dark .mint-experiment-selector__filters-toggle--active {
16025
16043
  opacity: var(--mint-disabled-opacity, 0.6);
16026
16044
  cursor: not-allowed;
16027
16045
  }
16028
- .mint-artifact-save-dialog {
16046
+ .mint-file-browser-dialog,
16047
+ .mint-file-browser-dialog * {
16048
+ box-sizing: border-box;
16049
+ }
16050
+ /* File browser workspace. Actions use BaseButton/IconButton; these rules own layout. */
16051
+ .mint-file-browser-overlay {
16052
+ position: fixed;
16053
+ inset: 0;
16054
+ z-index: 50;
16029
16055
  display: flex;
16030
- flex-direction: column;
16031
- gap: 1rem;
16056
+ align-items: center;
16057
+ justify-content: center;
16058
+ padding: 24px;
16059
+ background: rgb(15 23 42 / 45%);
16032
16060
  }
16033
- .mint-artifact-save-dialog__immutable {
16034
- margin: 0;
16035
- font-size: 0.8125rem;
16036
- color: var(--text-muted);
16061
+ .mint-file-browser-dialog {
16062
+ display: flex;
16063
+ flex-direction: column;
16064
+ width: 880px;
16065
+ max-width: 100%;
16066
+ max-height: calc(100dvh - 48px);
16067
+ overflow: hidden;
16068
+ border: 1px solid var(--border-color);
16069
+ border-radius: var(--radius-lg);
16070
+ background: var(--bg-secondary);
16071
+ color: var(--text-primary);
16072
+ box-shadow: var(--shadow-lg);
16037
16073
  }
16038
- .mint-artifact-save-dialog__immutable code {
16039
- font-family: var(--font-mono, 'Fira Code', monospace);
16040
- font-size: 0.75rem;
16041
- color: var(--text-secondary);
16074
+ .mint-file-browser-dialog--sm {
16075
+ width: 520px;
16042
16076
  }
16043
- /* ExperimentPopover — aligned with refresh design (AppPluginSwitcher / AppTopBar page selector) */
16044
- /* Container */
16045
- .mint-experiment-popover {
16046
- position: relative;
16077
+ .mint-file-browser-dialog--md {
16078
+ width: 640px;
16047
16079
  }
16048
- /* Split trigger container */
16049
- .mint-experiment-popover__split {
16050
- display: inline-flex;
16051
- align-items: stretch;
16080
+ .mint-file-browser-dialog--lg {
16081
+ width: 760px;
16052
16082
  }
16053
- /* When split has save, trigger loses its right border and radii so it meets
16054
- the save button flush. */
16055
- .mint-experiment-popover__split--with-save .mint-experiment-popover__trigger {
16056
- border-right: none;
16057
- border-top-right-radius: 0;
16058
- border-bottom-right-radius: 0;
16083
+ .mint-file-browser-dialog--xl {
16084
+ width: 840px;
16059
16085
  }
16060
- /* ─── Trigger (left / main chip) ───
16061
- Shows the experiment name, truncated to preserve topbar density. */
16062
- .mint-experiment-popover__trigger {
16063
- display: inline-flex;
16086
+ .mint-file-browser-dialog__header {
16087
+ display: flex;
16064
16088
  align-items: center;
16065
- gap: 0.5rem;
16066
- height: 2.375rem;
16067
- padding: 0 0.75rem;
16068
- border: 1px solid var(--border-color);
16069
- background: var(--bg-card);
16070
- border-radius: var(--radius-md);
16071
- color: var(--text-primary);
16072
- font-size: 0.8125rem;
16073
- font-weight: 500;
16074
- font-family: inherit;
16075
- cursor: pointer;
16076
- white-space: nowrap;
16077
- max-width: 220px;
16078
- box-sizing: border-box;
16079
- transform: translateY(0);
16080
- transition:
16081
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16082
- border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16083
- box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16084
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16085
- color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16089
+ gap: 12px;
16090
+ flex-shrink: 0;
16091
+ padding: 16px 20px;
16092
+ border-bottom: 1px solid var(--border-color);
16086
16093
  }
16087
- /* Hover (single-trigger mode) — lift + soft shadow. Gated :not(--active) so
16088
- the chip doesn't bounce while its panel is open. */
16089
- .mint-experiment-popover__split:not(.mint-experiment-popover__split--with-save)
16090
- .mint-experiment-popover__trigger:hover:not(.mint-experiment-popover__trigger--active) {
16091
- background: var(--bg-hover);
16092
- box-shadow: var(--shadow-sm);
16093
- transform: translateY(-1px);
16094
+ .mint-file-browser__heading {
16095
+ flex: 1;
16096
+ min-width: 0;
16094
16097
  }
16095
- .mint-experiment-popover__split:not(.mint-experiment-popover__split--with-save)
16096
- .mint-experiment-popover__trigger:active:not(.mint-experiment-popover__trigger--active) {
16097
- transform: translateY(0);
16098
- box-shadow: none;
16099
- transition-duration: 0.05s;
16098
+ .mint-file-browser__title {
16099
+ margin: 0;
16100
+ font-size: 17px;
16101
+ font-weight: 600;
16100
16102
  }
16101
- /* Active (panel open) — ring treatment, same language as PluginSwitcher/page selector */
16102
- .mint-experiment-popover__trigger--active {
16103
- border-color: var(--color-primary);
16104
- box-shadow: 0 0 0 3px var(--color-primary-soft);
16103
+ .mint-file-browser__context {
16104
+ margin: 3px 0 0;
16105
+ color: var(--text-secondary);
16106
+ font-size: 12px;
16107
+ overflow-wrap: anywhere;
16105
16108
  }
16106
- .mint-experiment-popover__trigger--empty {
16107
- color: var(--text-muted);
16109
+ .mint-file-browser {
16110
+ display: flex;
16111
+ flex-direction: column;
16112
+ min-height: 0;
16113
+ font-size: 13px;
16108
16114
  }
16109
- .mint-experiment-popover__trigger-icon {
16110
- width: 1rem;
16111
- height: 1rem;
16115
+ .mint-file-browser__mounts {
16116
+ display: flex;
16117
+ align-items: center;
16118
+ gap: 12px;
16119
+ padding: 10px 20px 0;
16112
16120
  flex-shrink: 0;
16113
- color: var(--color-primary);
16121
+ min-width: 0;
16114
16122
  }
16115
- .mint-experiment-popover__trigger--empty .mint-experiment-popover__trigger-icon {
16123
+ .mint-file-browser__mounts-label {
16124
+ font-size: 12px;
16116
16125
  color: var(--text-muted);
16117
16126
  }
16118
- .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-icon {
16119
- color: var(--color-primary);
16120
- }
16121
- .mint-experiment-popover__trigger-text {
16122
- flex: 1;
16127
+ .mint-file-browser__mount-options {
16128
+ display: flex;
16129
+ gap: 6px;
16123
16130
  min-width: 0;
16131
+ overflow-x: auto;
16132
+ padding: 2px;
16133
+ }
16134
+ .mint-file-browser__mount {
16135
+ flex-shrink: 0;
16136
+ max-width: 260px;
16137
+ }
16138
+ .mint-file-browser__mount-label {
16124
16139
  overflow: hidden;
16125
16140
  text-overflow: ellipsis;
16126
- white-space: nowrap;
16127
- text-align: left;
16128
- }
16129
- /* Experiment code fallback in the trigger — monospace, tabular */
16130
- .mint-experiment-popover__trigger-code {
16131
- font-family: var(--font-mono, 'Fira Code', monospace);
16132
- font-size: 0.75rem;
16133
- font-weight: 600;
16134
- letter-spacing: -0.01em;
16135
- color: var(--text-primary);
16136
- font-variant-numeric: tabular-nums;
16137
16141
  }
16138
- .mint-experiment-popover__trigger--empty .mint-experiment-popover__trigger-code {
16142
+ .mint-file-browser__mount-count {
16143
+ font-size: 11px;
16139
16144
  color: var(--text-muted);
16140
16145
  }
16141
- .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-code {
16142
- color: var(--color-primary);
16146
+ .mint-file-browser__toolbar {
16147
+ padding: 8px 20px 12px;
16148
+ flex-shrink: 0;
16143
16149
  }
16144
- /* ─── Unresolved states ───
16145
- An experiment is bound but has no name yet. The chip must not read "No
16146
- experiment", and it must never fall back to the numeric id — a name only
16147
- ever comes from the platform. */
16148
- .mint-experiment-popover__trigger--loading {
16149
- cursor: progress;
16150
+ .mint-file-browser__pathbar,
16151
+ .mint-file-browser__tools {
16152
+ display: flex;
16153
+ align-items: center;
16154
+ gap: 8px;
16155
+ min-width: 0;
16150
16156
  }
16151
- .mint-experiment-popover__trigger--loading .mint-experiment-popover__trigger-icon {
16152
- color: var(--text-muted);
16157
+ .mint-file-browser__pathbar {
16158
+ margin-bottom: 8px;
16153
16159
  }
16154
- .mint-experiment-popover__trigger--error {
16155
- border-color: var(--mint-error-border);
16156
- background: var(--mint-error-bg);
16157
- color: var(--mint-error);
16160
+ .mint-file-browser__crumbs {
16161
+ display: flex;
16162
+ align-items: center;
16163
+ flex: 1;
16164
+ min-width: 0;
16165
+ overflow-x: auto;
16158
16166
  }
16159
- .mint-experiment-popover__trigger--error .mint-experiment-popover__trigger-icon,
16160
- .mint-experiment-popover__trigger--error .mint-experiment-popover__trigger-chevron {
16161
- color: var(--mint-error);
16167
+ .mint-file-browser__crumb {
16168
+ flex-shrink: 0;
16162
16169
  }
16163
- /* Placeholder bar standing in for the name while it resolves. */
16164
- .mint-experiment-popover__trigger-skeleton {
16170
+ .mint-file-browser__crumb--current {
16171
+ font-weight: 600;
16172
+ }
16173
+ .mint-file-browser__crumb-sep {
16174
+ color: var(--text-muted);
16175
+ }
16176
+ .mint-file-browser__search {
16165
16177
  flex: 1;
16166
- min-width: 4.5rem;
16167
- height: 0.625rem;
16168
- border-radius: var(--radius-sm);
16169
- background-color: var(--bg-tertiary);
16170
- background-image: linear-gradient(
16171
- 90deg,
16172
- var(--bg-tertiary) 0%,
16173
- var(--bg-hover) 40%,
16174
- var(--bg-tertiary) 60%
16175
- );
16176
- background-size: 200% 100%;
16177
- background-repeat: no-repeat;
16178
- animation: mint-experiment-popover-shimmer 1.6s ease-in-out infinite;
16178
+ min-width: 100px;
16179
16179
  }
16180
- .mint-experiment-popover__trigger-chevron {
16181
- width: 0.8125rem;
16182
- height: 0.8125rem;
16183
- flex-shrink: 0;
16180
+ .mint-file-browser__rules {
16184
16181
  color: var(--text-muted);
16185
- transition: transform 0.2s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16186
- color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16182
+ font-family: var(--font-mono);
16183
+ font-size: 11px;
16184
+ max-width: 160px;
16185
+ overflow: hidden;
16186
+ text-overflow: ellipsis;
16187
+ white-space: nowrap;
16187
16188
  }
16188
- .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-chevron {
16189
- transform: rotate(180deg);
16190
- color: var(--color-primary);
16189
+ .mint-file-browser__select-folder {
16190
+ flex-shrink: 0;
16191
16191
  }
16192
- /* ─── Save trigger (right half of split) — filled-button treatment ─── */
16193
- .mint-experiment-popover__save-trigger {
16192
+ .mint-file-browser__listing {
16194
16193
  display: flex;
16194
+ flex-direction: column;
16195
+ min-height: 0;
16196
+ }
16197
+ .mint-file-browser__head,
16198
+ .mint-file-browser__row {
16199
+ display: grid;
16200
+ grid-template-columns: 16px 24px minmax(0, 1fr) 80px 72px 32px;
16195
16201
  align-items: center;
16196
- justify-content: center;
16197
- width: 2.375rem;
16198
- height: 2.375rem;
16199
- border: 1px solid var(--color-primary);
16200
- border-left: 1px solid rgba(255, 255, 255, 0.25);
16201
- background-color: var(--color-primary);
16202
- background-image: linear-gradient(
16203
- to bottom,
16204
- rgba(255, 255, 255, 0.12),
16205
- rgba(255, 255, 255, 0)
16206
- );
16207
- border-top-right-radius: var(--radius-md);
16208
- border-bottom-right-radius: var(--radius-md);
16209
- color: white;
16210
- cursor: pointer;
16211
- flex-shrink: 0;
16212
- box-sizing: border-box;
16213
- transform: translateY(0);
16214
- transition:
16215
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16216
- border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16217
- box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16218
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16219
- opacity 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16220
- background-image 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16202
+ gap: 10px;
16203
+ padding: 4px 20px;
16221
16204
  }
16222
- /* Save trigger: press-to-flat (gradient cleared) */
16223
- .mint-experiment-popover__save-trigger:active:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16224
- transform: translateY(0);
16225
- box-shadow: none;
16226
- background-image: none;
16227
- transition-duration: 0.05s;
16205
+ .mint-file-browser__head {
16206
+ min-height: 32px;
16207
+ border-block: 1px solid var(--border-color);
16208
+ background: var(--bg-primary);
16209
+ color: var(--text-secondary);
16210
+ font-size: 11px;
16211
+ font-weight: 500;
16228
16212
  }
16229
- .mint-experiment-popover__save-trigger--disabled {
16230
- opacity: 0.4;
16231
- cursor: not-allowed;
16213
+ .mint-file-browser__col-size,
16214
+ .mint-file-browser__col-type,
16215
+ .mint-file-browser__size,
16216
+ .mint-file-browser__type {
16217
+ text-align: right;
16232
16218
  }
16233
- .mint-experiment-popover__save-trigger--loading {
16234
- opacity: 0.7;
16235
- pointer-events: none;
16236
- }
16237
- /* Success state: green surface + keep the catch-of-light */
16238
- .mint-experiment-popover__save-trigger--success {
16239
- background-color: var(--mint-success, #10b981);
16240
- border-color: var(--mint-success, #10b981);
16241
- border-left-color: rgba(255, 255, 255, 0.3);
16242
- }
16243
- .mint-experiment-popover__save-trigger-icon {
16244
- width: 0.9375rem;
16245
- height: 0.9375rem;
16246
- }
16247
- .mint-experiment-popover__spinner--inline {
16248
- width: 0.8125rem;
16249
- height: 0.8125rem;
16250
- border: 2px solid rgba(255, 255, 255, 0.3);
16251
- border-top-color: white;
16252
- border-radius: 50%;
16253
- animation: mint-experiment-popover-spin 0.6s linear infinite;
16219
+ .mint-file-browser__rows {
16220
+ overflow-y: auto;
16221
+ max-height: min(46dvh, 440px);
16222
+ min-height: 0;
16254
16223
  }
16255
- /* ─── Split unit cohesion ─── */
16256
- /* When split has both halves, hovering either half lifts BOTH together so the
16257
- visually attached unit moves as one object. Color changes stay per-half so
16258
- "which action is hot" is still readable. */
16259
- .mint-experiment-popover__split--with-save:hover
16260
- > .mint-experiment-popover__trigger:not(.mint-experiment-popover__trigger--active),
16261
- .mint-experiment-popover__split--with-save:hover
16262
- > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16263
- transform: translateY(-1px);
16264
- box-shadow: var(--shadow-sm);
16224
+ .mint-file-browser__row {
16225
+ min-height: 42px;
16226
+ border-bottom: 1px solid var(--border-light);
16265
16227
  }
16266
- .mint-experiment-popover__split--with-save:active
16267
- > .mint-experiment-popover__trigger:not(.mint-experiment-popover__trigger--active),
16268
- .mint-experiment-popover__split--with-save:active
16269
- > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16270
- transform: translateY(0);
16271
- box-shadow: none;
16272
- transition-duration: 0.05s;
16228
+ .mint-file-browser__row--dir {
16229
+ cursor: pointer;
16273
16230
  }
16274
- /* Per-half color-on-hover (only when the SPECIFIC half is being pointed at) */
16275
- .mint-experiment-popover__split--with-save
16276
- .mint-experiment-popover__trigger:hover:not(.mint-experiment-popover__trigger--active) {
16231
+ .mint-file-browser__row:hover {
16277
16232
  background: var(--bg-hover);
16278
- border-color: var(--color-primary);
16279
- }
16280
- .mint-experiment-popover__split--with-save
16281
- .mint-experiment-popover__save-trigger:hover:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16282
- background-color: var(--color-primary-hover);
16283
- border-color: var(--color-primary-hover);
16284
16233
  }
16285
- .mint-experiment-popover__split--with-save
16286
- .mint-experiment-popover__save-trigger--success:hover:not(:disabled) {
16287
- background-color: var(--mint-success-hover, #059669);
16288
- border-color: var(--mint-success-hover, #059669);
16234
+ .mint-file-browser__row--selected,
16235
+ .mint-file-browser__row--selected:hover {
16236
+ background: var(--color-primary-soft);
16289
16237
  }
16290
- /* Flatten the gradient on active save press */
16291
- .mint-experiment-popover__split--with-save:active
16292
- > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16293
- background-image: none;
16238
+ .mint-file-browser__name-cell {
16239
+ display: flex;
16240
+ align-items: center;
16241
+ gap: 8px;
16242
+ min-width: 0;
16294
16243
  }
16295
- /* ─── Popover panel ─── */
16296
- .mint-experiment-popover__panel {
16297
- position: absolute;
16298
- top: calc(100% + 0.5rem);
16299
- right: 0;
16300
- width: 17.5rem;
16301
- background: var(--bg-card);
16302
- border: 1px solid var(--border-color);
16303
- border-radius: var(--radius-lg);
16304
- box-shadow: var(--shadow-md);
16305
- z-index: 50;
16244
+ .mint-file-browser__name {
16306
16245
  overflow: hidden;
16246
+ text-overflow: ellipsis;
16247
+ white-space: nowrap;
16307
16248
  }
16308
- /* Header */
16309
- .mint-experiment-popover__header {
16310
- display: flex;
16311
- flex-direction: column;
16312
- gap: 0.125rem;
16313
- padding: 0.75rem 1rem 0.5rem;
16314
- border-bottom: 1px solid var(--border-light);
16249
+ .mint-file-browser__row--dir .mint-file-browser__name {
16250
+ font-weight: 500;
16315
16251
  }
16316
- .mint-experiment-popover__title {
16317
- font-size: 0.8125rem;
16318
- font-weight: 600;
16319
- color: var(--text-primary);
16252
+ .mint-file-browser__note-pill {
16253
+ flex-shrink: 0;
16254
+ color: var(--color-primary);
16255
+ font-size: 11px;
16320
16256
  }
16321
- .mint-experiment-popover__subtitle {
16322
- font-size: 0.6875rem;
16323
- font-weight: 400;
16257
+ .mint-file-browser__size,
16258
+ .mint-file-browser__type {
16259
+ font-size: 12px;
16260
+ color: var(--text-secondary);
16261
+ }
16262
+ .mint-file-browser__row--dimmed .mint-file-browser__name,
16263
+ .mint-file-browser__row--dimmed .mint-file-browser__size,
16264
+ .mint-file-browser__row--dimmed .mint-file-browser__type {
16324
16265
  color: var(--text-muted);
16325
16266
  }
16326
- .mint-experiment-popover__body {
16327
- padding: 0.75rem 1rem;
16267
+ .mint-file-browser__row--dimmed .mint-file-browser__row-icon {
16268
+ filter: grayscale(1);
16269
+ opacity: 0.6;
16328
16270
  }
16329
- /* Select experiment button (no experiment state) */
16330
- .mint-experiment-popover__select-btn {
16331
- display: inline-flex;
16271
+ .mint-file-browser__checkbox {
16272
+ width: 16px;
16273
+ height: 16px;
16274
+ margin: 0;
16275
+ accent-color: var(--color-primary);
16276
+ cursor: pointer;
16277
+ }
16278
+ .mint-file-browser__checkbox:focus-visible {
16279
+ outline: none;
16280
+ box-shadow: var(--focus-ring);
16281
+ }
16282
+ .mint-file-browser__row-icon {
16283
+ display: flex;
16332
16284
  align-items: center;
16333
16285
  justify-content: center;
16334
- gap: 0.375rem;
16335
- width: 100%;
16336
- height: 2.125rem;
16337
- padding: 0 0.75rem;
16338
- border: 1px solid var(--color-primary);
16339
- background-color: var(--color-primary-soft);
16340
- border-radius: var(--radius-md);
16341
- color: var(--color-primary);
16342
- font-size: 0.8125rem;
16343
- font-weight: 500;
16344
- font-family: inherit;
16345
- cursor: pointer;
16346
- transform: translateY(0);
16347
- transition:
16348
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16349
- box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16350
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16286
+ color: var(--text-secondary);
16351
16287
  }
16352
- .mint-experiment-popover__select-btn:hover {
16353
- background-color: var(--color-primary);
16354
- color: white;
16355
- box-shadow: var(--shadow-sm);
16356
- transform: translateY(-1px);
16288
+ .mint-file-browser__row-icon--directory {
16289
+ color: var(--mint-info);
16357
16290
  }
16358
- .mint-experiment-popover__select-btn:active {
16359
- transform: translateY(0);
16360
- box-shadow: none;
16361
- transition-duration: 0.05s;
16291
+ .mint-file-browser__icon {
16292
+ width: 16px;
16293
+ height: 16px;
16294
+ flex-shrink: 0;
16362
16295
  }
16363
- /* Experiment card (selected state) */
16364
- .mint-experiment-popover__card {
16296
+ .mint-file-browser__skeleton {
16297
+ padding: 16px 20px;
16298
+ overflow: auto;
16299
+ }
16300
+ .mint-file-browser__skeleton-row {
16365
16301
  display: flex;
16366
- align-items: flex-start;
16367
- gap: 0.625rem;
16368
- padding: 0.625rem;
16369
- background: var(--bg-tertiary);
16370
- border-radius: var(--radius-md);
16302
+ justify-content: space-between;
16303
+ gap: 12px;
16304
+ padding: 10px 0;
16371
16305
  }
16372
- .mint-experiment-popover__card-icon {
16373
- width: 2rem;
16374
- height: 2rem;
16306
+ .mint-file-browser__error {
16307
+ display: flex;
16308
+ align-items: center;
16309
+ justify-content: space-between;
16310
+ gap: 16px;
16311
+ padding: 24px 20px;
16312
+ color: var(--mint-error);
16313
+ overflow: auto;
16314
+ }
16315
+ .mint-file-browser__listing > .mint-empty-state {
16316
+ padding: 32px 20px;
16317
+ overflow: auto;
16318
+ }
16319
+ .mint-file-browser__status {
16320
+ display: flex;
16321
+ align-items: center;
16322
+ gap: 8px;
16323
+ padding: 8px 20px;
16324
+ font-size: 11px;
16325
+ color: var(--text-muted);
16326
+ flex-wrap: wrap;
16375
16327
  flex-shrink: 0;
16376
- border-radius: var(--radius-sm);
16377
- background: var(--color-primary-soft);
16378
- display: grid;
16379
- place-items: center;
16380
16328
  }
16381
- .mint-experiment-popover__card-icon svg {
16382
- width: 1rem;
16383
- height: 1rem;
16384
- color: var(--color-primary);
16329
+ .mint-file-browser__status-spacer {
16330
+ flex: 1;
16385
16331
  }
16386
- .mint-experiment-popover__card-info {
16332
+ .mint-file-browser-dialog__footer {
16333
+ padding: 12px 20px;
16334
+ border-top: 1px solid var(--border-color);
16335
+ flex-shrink: 0;
16336
+ }
16337
+ .mint-file-browser__tray {
16338
+ display: flex;
16339
+ align-items: center;
16340
+ gap: 20px;
16341
+ min-width: 0;
16342
+ }
16343
+ .mint-file-browser__tray-main {
16387
16344
  flex: 1;
16388
16345
  min-width: 0;
16389
- display: flex;
16390
- flex-direction: column;
16391
- gap: 0.125rem;
16392
16346
  }
16393
- /* Experiment code in the card — small mono badge at the top of info */
16394
- .mint-experiment-popover__card-code {
16395
- align-self: flex-start;
16396
- font-family: var(--font-mono, 'Fira Code', monospace);
16397
- font-size: 0.625rem;
16398
- font-weight: 600;
16399
- letter-spacing: 0.02em;
16400
- color: var(--color-primary);
16401
- background: var(--color-primary-soft);
16402
- padding: 0.0625rem 0.375rem;
16403
- border-radius: 9999px;
16404
- line-height: 1.3;
16405
- font-variant-numeric: tabular-nums;
16347
+ .mint-file-browser__tray-head {
16348
+ display: flex;
16349
+ align-items: center;
16350
+ gap: 8px;
16351
+ flex-wrap: wrap;
16352
+ min-height: 32px;
16406
16353
  }
16407
- .mint-experiment-popover__card-name {
16408
- font-size: 0.8125rem;
16354
+ .mint-file-browser__tray-count {
16355
+ font-size: 13px;
16409
16356
  font-weight: 600;
16410
- color: var(--text-primary);
16411
- overflow: hidden;
16412
- text-overflow: ellipsis;
16413
- white-space: nowrap;
16414
- line-height: 1.3;
16415
16357
  }
16416
- .mint-experiment-popover__card-status {
16417
- font-size: 0.6875rem;
16358
+ .mint-file-browser__tray-summary,
16359
+ .mint-file-browser__selection-hint {
16360
+ font-size: 12px;
16418
16361
  color: var(--text-muted);
16419
- line-height: 1.3;
16420
16362
  }
16421
- /* ─── Card: unresolved variants ─── */
16422
- .mint-experiment-popover__card--error {
16423
- background: var(--mint-error-bg);
16363
+ .mint-file-browser__chips {
16364
+ display: flex;
16365
+ flex-wrap: wrap;
16366
+ gap: 6px;
16367
+ max-height: 84px;
16368
+ overflow-y: auto;
16369
+ margin-top: 4px;
16424
16370
  }
16425
- .mint-experiment-popover__card-icon--error {
16426
- background: transparent;
16371
+ .mint-file-browser__chip {
16372
+ display: inline-flex;
16373
+ align-items: center;
16374
+ gap: 6px;
16375
+ max-width: 100%;
16376
+ padding-left: 8px;
16377
+ background: var(--bg-primary);
16378
+ border: 1px solid var(--border-color);
16379
+ border-radius: var(--radius-md);
16380
+ font-size: 12px;
16427
16381
  }
16428
- .mint-experiment-popover__card-icon--error svg {
16429
- color: var(--mint-error);
16382
+ .mint-file-browser__chip-label {
16383
+ overflow: hidden;
16384
+ text-overflow: ellipsis;
16385
+ white-space: nowrap;
16430
16386
  }
16431
- .mint-experiment-popover__card-message {
16432
- font-size: 0.6875rem;
16433
- color: var(--text-secondary);
16434
- line-height: 1.4;
16435
- overflow-wrap: anywhere;
16387
+ .mint-file-browser__chip-remove {
16388
+ flex-shrink: 0;
16436
16389
  }
16437
- /* Placeholder lines mirroring the code / name / status stack of a real card. */
16438
- .mint-experiment-popover__skeleton-line {
16439
- display: block;
16440
- height: 0.625rem;
16441
- border-radius: var(--radius-sm);
16442
- background-color: var(--bg-hover);
16443
- background-image: linear-gradient(
16444
- 90deg,
16445
- var(--bg-hover) 0%,
16446
- var(--bg-secondary) 40%,
16447
- var(--bg-hover) 60%
16448
- );
16449
- background-size: 200% 100%;
16450
- background-repeat: no-repeat;
16451
- animation: mint-experiment-popover-shimmer 1.6s ease-in-out infinite;
16390
+ .mint-file-browser__actions {
16391
+ display: flex;
16392
+ align-items: center;
16393
+ gap: 8px;
16394
+ flex-shrink: 0;
16452
16395
  }
16453
- .mint-experiment-popover__skeleton-line--code {
16454
- width: 3.5rem;
16455
- height: 0.75rem;
16456
- border-radius: 9999px;
16396
+ @media (max-width: 600px) {
16397
+ .mint-file-browser-overlay {
16398
+ padding: 8px;
16399
+ }
16400
+ .mint-file-browser-dialog {
16401
+ max-height: calc(100dvh - 16px);
16402
+ }
16403
+ .mint-file-browser-dialog__header {
16404
+ padding: 12px;
16405
+ gap: 8px;
16406
+ flex-wrap: wrap;
16407
+ }
16408
+ .mint-file-browser__title {
16409
+ font-size: 15px;
16410
+ }
16411
+ .mint-file-browser__local {
16412
+ order: 3;
16413
+ }
16414
+ .mint-file-browser__mounts {
16415
+ padding: 8px 12px 0;
16416
+ }
16417
+ .mint-file-browser__mounts-label {
16418
+ display: none;
16419
+ }
16420
+ .mint-file-browser__toolbar {
16421
+ padding: 6px 12px 10px;
16422
+ }
16423
+ .mint-file-browser__tools {
16424
+ flex-wrap: wrap;
16425
+ gap: 6px;
16426
+ }
16427
+ .mint-file-browser__search {
16428
+ flex-basis: calc(100% - 42px);
16429
+ }
16430
+ .mint-file-browser__rules {
16431
+ order: 2;
16432
+ flex: 1;
16433
+ max-width: none;
16434
+ }
16435
+ .mint-file-browser__select-folder {
16436
+ order: 3;
16437
+ margin-left: auto;
16438
+ }
16439
+ .mint-file-browser__head,
16440
+ .mint-file-browser__row {
16441
+ grid-template-columns: 16px 20px minmax(0, 1fr) 64px 32px;
16442
+ gap: 6px;
16443
+ padding-inline: 12px;
16444
+ }
16445
+ .mint-file-browser__col-type,
16446
+ .mint-file-browser__type {
16447
+ display: none;
16448
+ }
16449
+ .mint-file-browser__name-cell {
16450
+ flex-direction: column;
16451
+ align-items: flex-start;
16452
+ gap: 0;
16453
+ }
16454
+ .mint-file-browser__name {
16455
+ max-width: 100%;
16456
+ }
16457
+ .mint-file-browser__status {
16458
+ padding-inline: 12px;
16459
+ }
16460
+ .mint-file-browser__legend {
16461
+ display: none;
16462
+ }
16463
+ .mint-file-browser-dialog__footer {
16464
+ padding: 10px 12px;
16465
+ }
16466
+ .mint-file-browser__tray {
16467
+ flex-direction: column;
16468
+ align-items: stretch;
16469
+ gap: 10px;
16470
+ }
16471
+ .mint-file-browser__actions {
16472
+ justify-content: flex-end;
16473
+ }
16474
+ .mint-file-browser__chips {
16475
+ max-height: 80px;
16476
+ }
16457
16477
  }
16458
- .mint-experiment-popover__skeleton-line--name {
16459
- width: 100%;
16460
- margin-top: 0.25rem;
16478
+ /* Short windows scroll the workspace while keeping confirmation reachable. */
16479
+ @media (max-height: 600px) {
16480
+ .mint-file-browser {
16481
+ overflow-y: auto;
16482
+ }
16483
+ .mint-file-browser__listing {
16484
+ flex-shrink: 0;
16485
+ }
16486
+ .mint-file-browser__rows {
16487
+ max-height: none;
16488
+ }
16489
+ .mint-file-browser__chips {
16490
+ max-height: 40px;
16491
+ }
16461
16492
  }
16462
- .mint-experiment-popover__skeleton-line--status {
16463
- width: 45%;
16464
- margin-top: 0.25rem;
16493
+ @media (max-height: 600px) and (min-width: 601px) {
16494
+ .mint-file-browser-overlay {
16495
+ padding: 8px;
16496
+ }
16497
+ .mint-file-browser-dialog {
16498
+ max-height: calc(100dvh - 16px);
16499
+ }
16500
+ .mint-file-browser-dialog__header {
16501
+ padding-block: 8px;
16502
+ }
16503
+ .mint-file-browser__context {
16504
+ display: none;
16505
+ }
16506
+ .mint-file-browser__toolbar {
16507
+ display: grid;
16508
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr);
16509
+ gap: 8px;
16510
+ padding-block: 6px;
16511
+ }
16512
+ .mint-file-browser__pathbar {
16513
+ margin: 0;
16514
+ }
16515
+ .mint-file-browser__rules {
16516
+ display: none;
16517
+ }
16465
16518
  }
16466
- /* Action row sits BELOW the card (was inside) so the buttons have
16467
- room to breathe and don't compete with the info stack. */
16468
- .mint-experiment-popover__card-actions {
16519
+ .mint-artifact-save-dialog {
16469
16520
  display: flex;
16470
- justify-content: flex-end;
16471
- align-items: center;
16472
- gap: 0.25rem;
16473
- margin-top: 0.5rem;
16521
+ flex-direction: column;
16522
+ gap: 1rem;
16474
16523
  }
16475
- .mint-experiment-popover__change-btn,
16476
- .mint-experiment-popover__detach-btn {
16477
- padding: 0.3125rem 0.625rem;
16478
- border: none;
16479
- background: transparent;
16480
- border-radius: var(--radius-sm);
16524
+ .mint-artifact-save-dialog__immutable {
16525
+ margin: 0;
16526
+ font-size: 0.8125rem;
16527
+ color: var(--text-muted);
16528
+ }
16529
+ .mint-artifact-save-dialog__immutable code {
16530
+ font-family: var(--font-mono, 'Fira Code', monospace);
16481
16531
  font-size: 0.75rem;
16532
+ color: var(--text-secondary);
16533
+ }
16534
+ /* ExperimentPopover — aligned with refresh design (AppPluginSwitcher / AppTopBar page selector) */
16535
+ /* Container */
16536
+ .mint-experiment-popover {
16537
+ position: relative;
16538
+ }
16539
+ /* Split trigger container */
16540
+ .mint-experiment-popover__split {
16541
+ display: inline-flex;
16542
+ align-items: stretch;
16543
+ }
16544
+ /* When split has save, trigger loses its right border and radii so it meets
16545
+ the save button flush. */
16546
+ .mint-experiment-popover__split--with-save .mint-experiment-popover__trigger {
16547
+ border-right: none;
16548
+ border-top-right-radius: 0;
16549
+ border-bottom-right-radius: 0;
16550
+ }
16551
+ /* ─── Trigger (left / main chip) ───
16552
+ Shows the experiment name, truncated to preserve topbar density. */
16553
+ .mint-experiment-popover__trigger {
16554
+ display: inline-flex;
16555
+ align-items: center;
16556
+ gap: 0.5rem;
16557
+ height: 2.375rem;
16558
+ padding: 0 0.75rem;
16559
+ border: 1px solid var(--border-color);
16560
+ background: var(--bg-card);
16561
+ border-radius: var(--radius-md);
16562
+ color: var(--text-primary);
16563
+ font-size: 0.8125rem;
16482
16564
  font-weight: 500;
16483
16565
  font-family: inherit;
16484
16566
  cursor: pointer;
16567
+ white-space: nowrap;
16568
+ max-width: 220px;
16569
+ box-sizing: border-box;
16570
+ transform: translateY(0);
16485
16571
  transition:
16486
16572
  background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16573
+ border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16574
+ box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16575
+ transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16487
16576
  color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16488
16577
  }
16489
- .mint-experiment-popover__change-btn {
16490
- color: var(--color-primary);
16578
+ /* Hover (single-trigger mode) — lift + soft shadow. Gated :not(--active) so
16579
+ the chip doesn't bounce while its panel is open. */
16580
+ .mint-experiment-popover__split:not(.mint-experiment-popover__split--with-save)
16581
+ .mint-experiment-popover__trigger:hover:not(.mint-experiment-popover__trigger--active) {
16582
+ background: var(--bg-hover);
16583
+ box-shadow: var(--shadow-sm);
16584
+ transform: translateY(-1px);
16491
16585
  }
16492
- .mint-experiment-popover__change-btn:hover {
16493
- background: var(--color-primary-soft);
16586
+ .mint-experiment-popover__split:not(.mint-experiment-popover__split--with-save)
16587
+ .mint-experiment-popover__trigger:active:not(.mint-experiment-popover__trigger--active) {
16588
+ transform: translateY(0);
16589
+ box-shadow: none;
16590
+ transition-duration: 0.05s;
16494
16591
  }
16495
- .mint-experiment-popover__detach-btn {
16592
+ /* Active (panel open) — ring treatment, same language as PluginSwitcher/page selector */
16593
+ .mint-experiment-popover__trigger--active {
16594
+ border-color: var(--color-primary);
16595
+ box-shadow: 0 0 0 3px var(--color-primary-soft);
16596
+ }
16597
+ .mint-experiment-popover__trigger--empty {
16496
16598
  color: var(--text-muted);
16497
- font-weight: 400;
16498
16599
  }
16499
- .mint-experiment-popover__detach-btn:hover {
16500
- color: var(--mint-error);
16501
- background: rgba(239, 68, 68, 0.08);
16600
+ .mint-experiment-popover__trigger-icon {
16601
+ width: 1rem;
16602
+ height: 1rem;
16603
+ flex-shrink: 0;
16604
+ color: var(--color-primary);
16502
16605
  }
16503
- @keyframes mint-experiment-popover-spin {
16504
- to { transform: rotate(360deg); }
16606
+ .mint-experiment-popover__trigger--empty .mint-experiment-popover__trigger-icon {
16607
+ color: var(--text-muted);
16505
16608
  }
16506
- @keyframes mint-experiment-popover-shimmer {
16507
- 0% { background-position: 100% 0; }
16508
- 100% { background-position: -100% 0; }
16609
+ .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-icon {
16610
+ color: var(--color-primary);
16509
16611
  }
16510
- /* Respect motion preferences */
16511
- @media (prefers-reduced-motion: reduce) {
16512
- .mint-experiment-popover__trigger,
16513
- .mint-experiment-popover__save-trigger,
16514
- .mint-experiment-popover__select-btn {
16515
- transition-property: background-color, border-color, box-shadow, color, opacity;
16516
- transition-duration: 0.15s;
16517
- transition-timing-function: ease;
16518
- }
16519
- .mint-experiment-popover__split--with-save:hover > *,
16520
- .mint-experiment-popover__split--with-save:active > *,
16521
- .mint-experiment-popover__trigger:hover,
16522
- .mint-experiment-popover__trigger:active,
16523
- .mint-experiment-popover__save-trigger:hover,
16524
- .mint-experiment-popover__save-trigger:active,
16525
- .mint-experiment-popover__select-btn:hover,
16526
- .mint-experiment-popover__select-btn:active {
16527
- transform: none;
16528
- }
16529
- .mint-experiment-popover__trigger-chevron {
16530
- transition: none;
16531
- }
16532
- /* Placeholders stay as flat blocks — still legible as "not loaded yet". */
16533
- .mint-experiment-popover__trigger-skeleton,
16534
- .mint-experiment-popover__skeleton-line {
16535
- animation: none;
16536
- background-image: none;
16537
- }
16612
+ .mint-experiment-popover__trigger-text {
16613
+ flex: 1;
16614
+ min-width: 0;
16615
+ overflow: hidden;
16616
+ text-overflow: ellipsis;
16617
+ white-space: nowrap;
16618
+ text-align: left;
16538
16619
  }
16539
- /* FitPanel Component Styles */
16540
- .mint-fit-panel {
16541
- display: flex;
16542
- flex-direction: column;
16543
- gap: 0.75rem;
16620
+ /* Experiment code fallback in the trigger — monospace, tabular */
16621
+ .mint-experiment-popover__trigger-code {
16622
+ font-family: var(--font-mono, 'Fira Code', monospace);
16623
+ font-size: 0.75rem;
16624
+ font-weight: 600;
16625
+ letter-spacing: -0.01em;
16626
+ color: var(--text-primary);
16627
+ font-variant-numeric: tabular-nums;
16544
16628
  }
16545
- /* Action bar */
16546
- .mint-fit-panel__actions {
16547
- display: flex;
16548
- gap: 0.5rem;
16629
+ .mint-experiment-popover__trigger--empty .mint-experiment-popover__trigger-code {
16630
+ color: var(--text-muted);
16549
16631
  }
16550
- /* Progress */
16551
- .mint-fit-panel__progress {
16552
- padding: 0.25rem 0;
16632
+ .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-code {
16633
+ color: var(--color-primary);
16553
16634
  }
16554
- /* Result list */
16555
- .mint-fit-panel__results {
16556
- border: 1px solid var(--border-color);
16557
- border-radius: var(--radius-sm);
16558
- overflow: hidden;
16635
+ /* ─── Unresolved states ───
16636
+ An experiment is bound but has no name yet. The chip must not read "No
16637
+ experiment", and it must never fall back to the numeric id — a name only
16638
+ ever comes from the platform. */
16639
+ .mint-experiment-popover__trigger--loading {
16640
+ cursor: progress;
16559
16641
  }
16560
- .mint-fit-panel__result-list {
16561
- display: flex;
16562
- flex-direction: column;
16642
+ .mint-experiment-popover__trigger--loading .mint-experiment-popover__trigger-icon {
16643
+ color: var(--text-muted);
16563
16644
  }
16564
- .mint-fit-panel__result-row {
16565
- display: flex;
16566
- justify-content: space-between;
16567
- align-items: center;
16568
- padding: 0.5rem 0.75rem;
16569
- border-bottom: 1px solid var(--border-color);
16645
+ .mint-experiment-popover__trigger--error {
16646
+ border-color: var(--mint-error-border);
16647
+ background: var(--mint-error-bg);
16648
+ color: var(--mint-error);
16570
16649
  }
16571
- .mint-fit-panel__result-row:last-child {
16572
- border-bottom: none;
16650
+ .mint-experiment-popover__trigger--error .mint-experiment-popover__trigger-icon,
16651
+ .mint-experiment-popover__trigger--error .mint-experiment-popover__trigger-chevron {
16652
+ color: var(--mint-error);
16573
16653
  }
16574
- .mint-fit-panel__result-label {
16575
- font-size: 0.8125rem;
16576
- color: var(--text-secondary);
16577
- }
16578
- .mint-fit-panel__result-value {
16579
- font-size: 0.8125rem;
16580
- font-weight: 500;
16581
- color: var(--text-primary);
16582
- font-variant-numeric: tabular-nums;
16583
- }
16584
- /* Result value variants */
16585
- .mint-fit-panel__result-value--success {
16586
- color: var(--mint-success);
16587
- }
16588
- .mint-fit-panel__result-value--warning {
16589
- color: var(--mint-warning);
16590
- }
16591
- .mint-fit-panel__result-value--error {
16592
- color: var(--mint-error);
16654
+ /* Placeholder bar standing in for the name while it resolves. */
16655
+ .mint-experiment-popover__trigger-skeleton {
16656
+ flex: 1;
16657
+ min-width: 4.5rem;
16658
+ height: 0.625rem;
16659
+ border-radius: var(--radius-sm);
16660
+ background-color: var(--bg-tertiary);
16661
+ background-image: linear-gradient(
16662
+ 90deg,
16663
+ var(--bg-tertiary) 0%,
16664
+ var(--bg-hover) 40%,
16665
+ var(--bg-tertiary) 60%
16666
+ );
16667
+ background-size: 200% 100%;
16668
+ background-repeat: no-repeat;
16669
+ animation: mint-experiment-popover-shimmer 1.6s ease-in-out infinite;
16593
16670
  }
16594
- /* AppAvatarMenu — avatar button + dropdown */
16595
- .mint-avatar-menu {
16596
- position: relative;
16671
+ .mint-experiment-popover__trigger-chevron {
16672
+ width: 0.8125rem;
16673
+ height: 0.8125rem;
16597
16674
  flex-shrink: 0;
16675
+ color: var(--text-muted);
16676
+ transition: transform 0.2s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16677
+ color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16598
16678
  }
16599
- /* Pill trigger — avatar circle + username text on the right. Matches the
16600
- shared TopBar account-trigger convention (GitHub/Linear-style). */
16601
- .mint-avatar-menu__trigger {
16602
- display: inline-flex;
16603
- align-items: center;
16604
- gap: 0.5rem;
16605
- padding: 0.25rem 0.75rem 0.25rem 0.25rem;
16606
- border: none;
16607
- background: transparent;
16608
- border-radius: var(--radius);
16609
- font-family: inherit;
16610
- cursor: pointer;
16611
- transition: background-color 0.15s ease;
16612
- }
16613
- .mint-avatar-menu__trigger:hover,
16614
- .mint-avatar-menu__trigger--open {
16615
- background: var(--bg-hover);
16616
- }
16617
- .mint-avatar-menu__trigger:focus-visible {
16618
- outline: none;
16619
- box-shadow: var(--focus-ring);
16679
+ .mint-experiment-popover__trigger--active .mint-experiment-popover__trigger-chevron {
16680
+ transform: rotate(180deg);
16681
+ color: var(--color-primary);
16620
16682
  }
16621
- /* Gradient avatar chip inside the trigger */
16622
- .mint-avatar-menu__avatar {
16623
- width: 1.75rem;
16624
- height: 1.75rem;
16625
- border-radius: 9999px;
16683
+ /* ─── Save trigger (right half of split) — filled-button treatment ─── */
16684
+ .mint-experiment-popover__save-trigger {
16626
16685
  display: flex;
16627
16686
  align-items: center;
16628
16687
  justify-content: center;
16629
- font-size: 0.75rem;
16630
- line-height: 1;
16631
- font-weight: 500;
16688
+ width: 2.375rem;
16689
+ height: 2.375rem;
16690
+ border: 1px solid var(--color-primary);
16691
+ border-left: 1px solid rgba(255, 255, 255, 0.25);
16692
+ background-color: var(--color-primary);
16693
+ background-image: linear-gradient(
16694
+ to bottom,
16695
+ rgba(255, 255, 255, 0.12),
16696
+ rgba(255, 255, 255, 0)
16697
+ );
16698
+ border-top-right-radius: var(--radius-md);
16699
+ border-bottom-right-radius: var(--radius-md);
16632
16700
  color: white;
16633
- background: linear-gradient(135deg, var(--color-primary-hover) 0%, var(--color-primary) 100%);
16701
+ cursor: pointer;
16634
16702
  flex-shrink: 0;
16703
+ box-sizing: border-box;
16704
+ transform: translateY(0);
16705
+ transition:
16706
+ background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16707
+ border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16708
+ box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16709
+ transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16710
+ opacity 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16711
+ background-image 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16635
16712
  }
16636
- /* Username next to the avatar — hidden below 640px to preserve space */
16637
- .mint-avatar-menu__name {
16638
- font-size: 0.875rem;
16639
- font-weight: 500;
16640
- color: var(--text-primary);
16641
- white-space: nowrap;
16713
+ /* Save trigger: press-to-flat (gradient cleared) */
16714
+ .mint-experiment-popover__save-trigger:active:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16715
+ transform: translateY(0);
16716
+ box-shadow: none;
16717
+ background-image: none;
16718
+ transition-duration: 0.05s;
16642
16719
  }
16643
- @media (max-width: 640px) {
16644
- .mint-avatar-menu__name {
16645
- display: none;
16646
- }
16647
-
16648
- .mint-avatar-menu__trigger {
16649
- padding: 0.25rem;
16650
- }
16720
+ .mint-experiment-popover__save-trigger--disabled {
16721
+ opacity: 0.4;
16722
+ cursor: not-allowed;
16651
16723
  }
16652
- .mint-avatar-menu__panel {
16724
+ .mint-experiment-popover__save-trigger--loading {
16725
+ opacity: 0.7;
16726
+ pointer-events: none;
16727
+ }
16728
+ /* Success state: green surface + keep the catch-of-light */
16729
+ .mint-experiment-popover__save-trigger--success {
16730
+ background-color: var(--mint-success, #10b981);
16731
+ border-color: var(--mint-success, #10b981);
16732
+ border-left-color: rgba(255, 255, 255, 0.3);
16733
+ }
16734
+ .mint-experiment-popover__save-trigger-icon {
16735
+ width: 0.9375rem;
16736
+ height: 0.9375rem;
16737
+ }
16738
+ .mint-experiment-popover__spinner--inline {
16739
+ width: 0.8125rem;
16740
+ height: 0.8125rem;
16741
+ border: 2px solid rgba(255, 255, 255, 0.3);
16742
+ border-top-color: white;
16743
+ border-radius: 50%;
16744
+ animation: mint-experiment-popover-spin 0.6s linear infinite;
16745
+ }
16746
+ /* ─── Split unit cohesion ─── */
16747
+ /* When split has both halves, hovering either half lifts BOTH together so the
16748
+ visually attached unit moves as one object. Color changes stay per-half so
16749
+ "which action is hot" is still readable. */
16750
+ .mint-experiment-popover__split--with-save:hover
16751
+ > .mint-experiment-popover__trigger:not(.mint-experiment-popover__trigger--active),
16752
+ .mint-experiment-popover__split--with-save:hover
16753
+ > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16754
+ transform: translateY(-1px);
16755
+ box-shadow: var(--shadow-sm);
16756
+ }
16757
+ .mint-experiment-popover__split--with-save:active
16758
+ > .mint-experiment-popover__trigger:not(.mint-experiment-popover__trigger--active),
16759
+ .mint-experiment-popover__split--with-save:active
16760
+ > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16761
+ transform: translateY(0);
16762
+ box-shadow: none;
16763
+ transition-duration: 0.05s;
16764
+ }
16765
+ /* Per-half color-on-hover (only when the SPECIFIC half is being pointed at) */
16766
+ .mint-experiment-popover__split--with-save
16767
+ .mint-experiment-popover__trigger:hover:not(.mint-experiment-popover__trigger--active) {
16768
+ background: var(--bg-hover);
16769
+ border-color: var(--color-primary);
16770
+ }
16771
+ .mint-experiment-popover__split--with-save
16772
+ .mint-experiment-popover__save-trigger:hover:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16773
+ background-color: var(--color-primary-hover);
16774
+ border-color: var(--color-primary-hover);
16775
+ }
16776
+ .mint-experiment-popover__split--with-save
16777
+ .mint-experiment-popover__save-trigger--success:hover:not(:disabled) {
16778
+ background-color: var(--mint-success-hover, #059669);
16779
+ border-color: var(--mint-success-hover, #059669);
16780
+ }
16781
+ /* Flatten the gradient on active save press */
16782
+ .mint-experiment-popover__split--with-save:active
16783
+ > .mint-experiment-popover__save-trigger:not(:disabled):not(.mint-experiment-popover__save-trigger--disabled) {
16784
+ background-image: none;
16785
+ }
16786
+ /* ─── Popover panel ─── */
16787
+ .mint-experiment-popover__panel {
16653
16788
  position: absolute;
16654
16789
  top: calc(100% + 0.5rem);
16655
16790
  right: 0;
16656
- width: 13.75rem;
16791
+ width: 17.5rem;
16657
16792
  background: var(--bg-card);
16658
16793
  border: 1px solid var(--border-color);
16659
16794
  border-radius: var(--radius-lg);
16660
16795
  box-shadow: var(--shadow-md);
16661
- padding: 0.375rem;
16662
- z-index: 60;
16796
+ z-index: 50;
16797
+ overflow: hidden;
16663
16798
  }
16664
- .mint-avatar-menu__header {
16665
- padding: 0.5rem 0.625rem 0.625rem;
16799
+ /* Header */
16800
+ .mint-experiment-popover__header {
16801
+ display: flex;
16802
+ flex-direction: column;
16803
+ gap: 0.125rem;
16804
+ padding: 0.75rem 1rem 0.5rem;
16666
16805
  border-bottom: 1px solid var(--border-light);
16667
- margin-bottom: 0.25rem;
16668
16806
  }
16669
- .mint-avatar-menu__user-name {
16670
- font-size: 0.78125rem;
16807
+ .mint-experiment-popover__title {
16808
+ font-size: 0.8125rem;
16671
16809
  font-weight: 600;
16672
16810
  color: var(--text-primary);
16673
- line-height: 1.25;
16674
16811
  }
16675
- .mint-avatar-menu__user-email {
16812
+ .mint-experiment-popover__subtitle {
16676
16813
  font-size: 0.6875rem;
16677
- color: var(--text-secondary);
16678
- margin-top: 0.0625rem;
16679
- line-height: 1.25;
16680
- word-break: break-all;
16814
+ font-weight: 400;
16815
+ color: var(--text-muted);
16681
16816
  }
16682
- .mint-avatar-menu__item {
16683
- display: flex;
16817
+ .mint-experiment-popover__body {
16818
+ padding: 0.75rem 1rem;
16819
+ }
16820
+ /* Select experiment button (no experiment state) */
16821
+ .mint-experiment-popover__select-btn {
16822
+ display: inline-flex;
16684
16823
  align-items: center;
16685
- gap: 0.625rem;
16824
+ justify-content: center;
16825
+ gap: 0.375rem;
16686
16826
  width: 100%;
16687
- padding: 0.4375rem 0.625rem;
16688
- border: 0;
16689
- border-radius: 0.375rem;
16690
- background: transparent;
16691
- color: var(--text-primary);
16692
- font-size: 0.78125rem;
16827
+ height: 2.125rem;
16828
+ padding: 0 0.75rem;
16829
+ border: 1px solid var(--color-primary);
16830
+ background-color: var(--color-primary-soft);
16831
+ border-radius: var(--radius-md);
16832
+ color: var(--color-primary);
16833
+ font-size: 0.8125rem;
16834
+ font-weight: 500;
16693
16835
  font-family: inherit;
16694
- text-align: left;
16695
- text-decoration: none;
16696
16836
  cursor: pointer;
16697
- transition: background-color var(--mint-transition);
16837
+ transform: translateY(0);
16838
+ transition:
16839
+ background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16840
+ box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16841
+ transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16698
16842
  }
16699
- .mint-avatar-menu__item:hover {
16700
- background: var(--bg-hover);
16843
+ .mint-experiment-popover__select-btn:hover {
16844
+ background-color: var(--color-primary);
16845
+ color: white;
16846
+ box-shadow: var(--shadow-sm);
16847
+ transform: translateY(-1px);
16701
16848
  }
16702
- .mint-avatar-menu__item--danger {
16703
- color: var(--mint-error);
16704
- }
16705
- .mint-avatar-menu__item-icon {
16706
- display: grid;
16707
- place-items: center;
16708
- color: var(--text-secondary);
16709
- flex-shrink: 0;
16710
- }
16711
- .mint-avatar-menu__item-icon svg {
16712
- width: 0.8125rem;
16713
- height: 0.8125rem;
16714
- }
16715
- .mint-avatar-menu__item--danger .mint-avatar-menu__item-icon {
16716
- color: var(--mint-error);
16717
- }
16718
- .mint-avatar-menu__item-label {
16719
- flex: 1;
16720
- }
16721
- .mint-avatar-menu__item-right {
16722
- font-size: 0.6875rem;
16723
- color: var(--text-muted);
16724
- }
16725
- .mint-avatar-menu__divider {
16726
- height: 1px;
16727
- background: var(--border-light);
16728
- margin: 0.25rem 0;
16729
- }
16730
- /* AppTopBar page selector — left-side route/page dropdown */
16731
- .mint-page-selector {
16732
- position: relative;
16733
- flex-shrink: 0;
16734
- }
16735
- .mint-page-selector__trigger {
16736
- display: inline-flex;
16737
- align-items: center;
16738
- gap: 0.625rem;
16739
- width: 100%;
16740
- height: 2.375rem;
16741
- padding: 0 0.375rem 0 0.625rem;
16742
- border: 1px solid var(--border-color);
16743
- background: var(--bg-card);
16744
- color: var(--text-primary);
16745
- border-radius: var(--radius-md);
16746
- font-size: 0.8125rem;
16747
- font-weight: 500;
16748
- font-family: inherit;
16749
- cursor: pointer;
16750
- transition:
16751
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16752
- border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16753
- box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16754
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16755
- transform: translateY(0);
16756
- }
16757
- .mint-page-selector__trigger:hover:not(.mint-page-selector__trigger--open) {
16758
- background: var(--bg-hover);
16759
- box-shadow: var(--shadow-sm);
16760
- transform: translateY(-1px);
16761
- }
16762
- .mint-page-selector__trigger:active:not(.mint-page-selector__trigger--open) {
16849
+ .mint-experiment-popover__select-btn:active {
16763
16850
  transform: translateY(0);
16764
16851
  box-shadow: none;
16765
16852
  transition-duration: 0.05s;
16766
16853
  }
16767
- @media (prefers-reduced-motion: reduce) {
16768
- .mint-page-selector__trigger,
16769
- .mint-page-selector__trigger:hover,
16770
- .mint-page-selector__trigger:active {
16771
- transform: none;
16772
- }
16773
- }
16774
- .mint-page-selector__trigger--open {
16775
- border-color: var(--color-primary);
16776
- box-shadow: 0 0 0 3px var(--color-primary-soft);
16854
+ /* Experiment card (selected state) */
16855
+ .mint-experiment-popover__card {
16856
+ display: flex;
16857
+ align-items: flex-start;
16858
+ gap: 0.625rem;
16859
+ padding: 0.625rem;
16860
+ background: var(--bg-tertiary);
16861
+ border-radius: var(--radius-md);
16777
16862
  }
16778
- .mint-page-selector__icon {
16779
- width: 1.5rem;
16780
- height: 1.5rem;
16781
- border-radius: 0.375rem;
16863
+ .mint-experiment-popover__card-icon {
16864
+ width: 2rem;
16865
+ height: 2rem;
16866
+ flex-shrink: 0;
16867
+ border-radius: var(--radius-sm);
16782
16868
  background: var(--color-primary-soft);
16783
- color: var(--color-primary);
16784
16869
  display: grid;
16785
16870
  place-items: center;
16786
- flex-shrink: 0;
16787
- }
16788
- .mint-page-selector__icon svg {
16789
- width: 0.875rem;
16790
- height: 0.875rem;
16791
16871
  }
16792
- .mint-page-selector__icon--metadata {
16793
- background: transparent;
16794
- color: inherit;
16872
+ .mint-experiment-popover__card-icon svg {
16873
+ width: 1rem;
16874
+ height: 1rem;
16875
+ color: var(--color-primary);
16795
16876
  }
16796
- .mint-page-selector__trigger-metadata-icon.mint-plugin-icon--sm {
16797
- width: 1.5rem;
16798
- height: 1.5rem;
16799
- border-radius: 0.375rem;
16877
+ .mint-experiment-popover__card-info {
16878
+ flex: 1;
16879
+ min-width: 0;
16880
+ display: flex;
16881
+ flex-direction: column;
16882
+ gap: 0.125rem;
16800
16883
  }
16801
- .mint-page-selector__icon-fallback {
16802
- font-size: 0.6875rem;
16884
+ /* Experiment code in the card — small mono badge at the top of info */
16885
+ .mint-experiment-popover__card-code {
16886
+ align-self: flex-start;
16887
+ font-family: var(--font-mono, 'Fira Code', monospace);
16888
+ font-size: 0.625rem;
16803
16889
  font-weight: 600;
16804
- font-family: var(--font-mono, ui-monospace, monospace);
16890
+ letter-spacing: 0.02em;
16891
+ color: var(--color-primary);
16892
+ background: var(--color-primary-soft);
16893
+ padding: 0.0625rem 0.375rem;
16894
+ border-radius: 9999px;
16895
+ line-height: 1.3;
16896
+ font-variant-numeric: tabular-nums;
16805
16897
  }
16806
- .mint-page-selector__label {
16807
- flex: 1;
16808
- text-align: left;
16809
- white-space: nowrap;
16898
+ .mint-experiment-popover__card-name {
16899
+ font-size: 0.8125rem;
16900
+ font-weight: 600;
16901
+ color: var(--text-primary);
16810
16902
  overflow: hidden;
16811
16903
  text-overflow: ellipsis;
16904
+ white-space: nowrap;
16905
+ line-height: 1.3;
16812
16906
  }
16813
- .mint-page-selector__chevron-wrap {
16814
- width: 1.625rem;
16815
- height: 1.625rem;
16816
- border-radius: 0.375rem;
16817
- background: var(--bg-tertiary);
16907
+ .mint-experiment-popover__card-status {
16908
+ font-size: 0.6875rem;
16909
+ color: var(--text-muted);
16910
+ line-height: 1.3;
16911
+ }
16912
+ /* ─── Card: unresolved variants ─── */
16913
+ .mint-experiment-popover__card--error {
16914
+ background: var(--mint-error-bg);
16915
+ }
16916
+ .mint-experiment-popover__card-icon--error {
16917
+ background: transparent;
16918
+ }
16919
+ .mint-experiment-popover__card-icon--error svg {
16920
+ color: var(--mint-error);
16921
+ }
16922
+ .mint-experiment-popover__card-message {
16923
+ font-size: 0.6875rem;
16818
16924
  color: var(--text-secondary);
16819
- display: grid;
16820
- place-items: center;
16821
- flex-shrink: 0;
16925
+ line-height: 1.4;
16926
+ overflow-wrap: anywhere;
16822
16927
  }
16823
- .mint-page-selector__chevron {
16824
- width: 0.8125rem;
16825
- height: 0.8125rem;
16826
- transition: transform var(--mint-transition);
16928
+ /* Placeholder lines mirroring the code / name / status stack of a real card. */
16929
+ .mint-experiment-popover__skeleton-line {
16930
+ display: block;
16931
+ height: 0.625rem;
16932
+ border-radius: var(--radius-sm);
16933
+ background-color: var(--bg-hover);
16934
+ background-image: linear-gradient(
16935
+ 90deg,
16936
+ var(--bg-hover) 0%,
16937
+ var(--bg-secondary) 40%,
16938
+ var(--bg-hover) 60%
16939
+ );
16940
+ background-size: 200% 100%;
16941
+ background-repeat: no-repeat;
16942
+ animation: mint-experiment-popover-shimmer 1.6s ease-in-out infinite;
16827
16943
  }
16828
- .mint-page-selector__chevron--open {
16829
- transform: rotate(180deg);
16944
+ .mint-experiment-popover__skeleton-line--code {
16945
+ width: 3.5rem;
16946
+ height: 0.75rem;
16947
+ border-radius: 9999px;
16830
16948
  }
16831
- .mint-page-selector__menu {
16832
- position: absolute;
16833
- top: calc(100% + 0.375rem);
16834
- left: 0;
16835
- width: 16.25rem;
16836
- background: var(--bg-card);
16837
- border: 1px solid var(--border-color);
16838
- border-radius: var(--radius-lg);
16839
- box-shadow: var(--shadow-md);
16840
- padding: 0.375rem;
16841
- z-index: 50;
16949
+ .mint-experiment-popover__skeleton-line--name {
16950
+ width: 100%;
16951
+ margin-top: 0.25rem;
16842
16952
  }
16843
- .mint-page-selector__menu-title {
16844
- padding: 0.375rem 0.625rem 0.5rem;
16845
- font-size: 0.625rem;
16846
- font-weight: 600;
16847
- letter-spacing: 0.06em;
16848
- text-transform: uppercase;
16849
- color: var(--text-muted);
16953
+ .mint-experiment-popover__skeleton-line--status {
16954
+ width: 45%;
16955
+ margin-top: 0.25rem;
16850
16956
  }
16851
- .mint-page-selector__item {
16957
+ /* Action row sits BELOW the card (was inside) so the buttons have
16958
+ room to breathe and don't compete with the info stack. */
16959
+ .mint-experiment-popover__card-actions {
16852
16960
  display: flex;
16961
+ justify-content: flex-end;
16853
16962
  align-items: center;
16854
- gap: 0.625rem;
16855
- width: 100%;
16856
- padding: 0.5rem 0.625rem;
16857
- border: 0;
16963
+ gap: 0.25rem;
16964
+ margin-top: 0.5rem;
16965
+ }
16966
+ .mint-experiment-popover__change-btn,
16967
+ .mint-experiment-popover__detach-btn {
16968
+ padding: 0.3125rem 0.625rem;
16969
+ border: none;
16858
16970
  background: transparent;
16859
- border-radius: 0.4375rem;
16860
- color: var(--text-primary);
16861
- font-size: 0.8125rem;
16971
+ border-radius: var(--radius-sm);
16972
+ font-size: 0.75rem;
16862
16973
  font-weight: 500;
16863
16974
  font-family: inherit;
16864
- text-align: left;
16865
- text-decoration: none;
16866
16975
  cursor: pointer;
16867
- transition: background-color var(--mint-transition);
16976
+ transition:
16977
+ background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16978
+ color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16868
16979
  }
16869
- .mint-page-selector__item:hover:not(.mint-page-selector__item--disabled) {
16870
- background: var(--bg-hover);
16980
+ .mint-experiment-popover__change-btn {
16981
+ color: var(--color-primary);
16871
16982
  }
16872
- .mint-page-selector__item--active {
16873
- background: var(--bg-tertiary);
16874
- font-weight: 600;
16983
+ .mint-experiment-popover__change-btn:hover {
16984
+ background: var(--color-primary-soft);
16875
16985
  }
16876
- .mint-page-selector__item--disabled {
16877
- opacity: var(--mint-disabled-opacity);
16878
- cursor: not-allowed;
16986
+ .mint-experiment-popover__detach-btn {
16987
+ color: var(--text-muted);
16988
+ font-weight: 400;
16879
16989
  }
16880
- .mint-page-selector__item-icon {
16881
- width: 1.375rem;
16882
- height: 1.375rem;
16883
- border-radius: 0.3125rem;
16884
- background: var(--bg-tertiary);
16885
- color: var(--text-secondary);
16886
- display: grid;
16887
- place-items: center;
16888
- flex-shrink: 0;
16889
- }
16890
- .mint-page-selector__item--active .mint-page-selector__item-icon {
16891
- background: var(--color-primary-soft);
16892
- color: var(--color-primary);
16893
- }
16894
- .mint-page-selector__item-icon--metadata,
16895
- .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
16896
- background: transparent;
16897
- color: inherit;
16898
- }
16899
- .mint-page-selector__item-icon svg {
16900
- width: 0.8125rem;
16901
- height: 0.8125rem;
16902
- }
16903
- .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
16904
- width: 1.375rem;
16905
- height: 1.375rem;
16906
- border-radius: 0.3125rem;
16907
- }
16908
- .mint-page-selector__item-label {
16909
- flex: 1;
16910
- min-width: 0;
16911
- overflow: hidden;
16912
- text-overflow: ellipsis;
16913
- white-space: nowrap;
16914
- }
16915
- /* AppTopBar pillNav — centered top-level navigation pills */
16916
- .mint-pill-nav {
16917
- display: inline-flex;
16918
- padding: 0.1875rem;
16919
- border-radius: 9999px;
16920
- background: var(--bg-tertiary);
16921
- border: 1px solid var(--border-light);
16922
- flex-shrink: 0;
16990
+ .mint-experiment-popover__detach-btn:hover {
16991
+ color: var(--mint-error);
16992
+ background: rgba(239, 68, 68, 0.08);
16923
16993
  }
16924
- .mint-pill-nav__item-wrap {
16925
- position: relative;
16926
- display: inline-flex;
16994
+ @keyframes mint-experiment-popover-spin {
16995
+ to { transform: rotate(360deg); }
16927
16996
  }
16928
- .mint-pill-nav__item {
16929
- display: inline-flex;
16930
- align-items: center;
16931
- gap: 0.375rem;
16932
- border: 0;
16933
- padding: 0.375rem 0.875rem;
16934
- border-radius: 9999px;
16935
- font-size: 0.8125rem;
16936
- font-weight: 500;
16937
- font-family: inherit;
16938
- color: var(--text-secondary);
16939
- background: transparent;
16940
- text-decoration: none;
16941
- cursor: pointer;
16942
- transition:
16943
- color 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16944
- background-color 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
16945
- box-shadow 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16997
+ @keyframes mint-experiment-popover-shimmer {
16998
+ 0% { background-position: 100% 0; }
16999
+ 100% { background-position: -100% 0; }
16946
17000
  }
17001
+ /* Respect motion preferences */
16947
17002
  @media (prefers-reduced-motion: reduce) {
16948
- .mint-pill-nav__item {
17003
+ .mint-experiment-popover__trigger,
17004
+ .mint-experiment-popover__save-trigger,
17005
+ .mint-experiment-popover__select-btn {
17006
+ transition-property: background-color, border-color, box-shadow, color, opacity;
17007
+ transition-duration: 0.15s;
17008
+ transition-timing-function: ease;
17009
+ }
17010
+ .mint-experiment-popover__split--with-save:hover > *,
17011
+ .mint-experiment-popover__split--with-save:active > *,
17012
+ .mint-experiment-popover__trigger:hover,
17013
+ .mint-experiment-popover__trigger:active,
17014
+ .mint-experiment-popover__save-trigger:hover,
17015
+ .mint-experiment-popover__save-trigger:active,
17016
+ .mint-experiment-popover__select-btn:hover,
17017
+ .mint-experiment-popover__select-btn:active {
17018
+ transform: none;
17019
+ }
17020
+ .mint-experiment-popover__trigger-chevron {
16949
17021
  transition: none;
16950
17022
  }
17023
+ /* Placeholders stay as flat blocks — still legible as "not loaded yet". */
17024
+ .mint-experiment-popover__trigger-skeleton,
17025
+ .mint-experiment-popover__skeleton-line {
17026
+ animation: none;
17027
+ background-image: none;
17028
+ }
16951
17029
  }
16952
- .mint-pill-nav__item:hover:not(.mint-pill-nav__item--active):not(.mint-pill-nav__item--disabled) {
16953
- color: var(--text-primary);
16954
- }
16955
- .mint-pill-nav__item--active {
16956
- color: var(--text-primary);
16957
- background: var(--bg-card);
16958
- box-shadow: var(--shadow-sm);
16959
- font-weight: 600;
17030
+ /* FitPanel Component Styles */
17031
+ .mint-fit-panel {
17032
+ display: flex;
17033
+ flex-direction: column;
17034
+ gap: 0.75rem;
16960
17035
  }
16961
- .mint-pill-nav__item--disabled {
16962
- opacity: var(--mint-disabled-opacity);
16963
- cursor: not-allowed;
17036
+ /* Action bar */
17037
+ .mint-fit-panel__actions {
17038
+ display: flex;
17039
+ gap: 0.5rem;
16964
17040
  }
16965
- .mint-pill-nav__item:focus-visible {
16966
- outline: none;
16967
- box-shadow: var(--focus-ring);
17041
+ /* Progress */
17042
+ .mint-fit-panel__progress {
17043
+ padding: 0.25rem 0;
16968
17044
  }
16969
- .mint-pill-nav__icon {
16970
- width: 0.875rem;
16971
- height: 0.875rem;
16972
- flex-shrink: 0;
17045
+ /* Result list */
17046
+ .mint-fit-panel__results {
17047
+ border: 1px solid var(--border-color);
17048
+ border-radius: var(--radius-sm);
17049
+ overflow: hidden;
16973
17050
  }
16974
- .mint-pill-nav__chevron {
16975
- width: 0.8125rem;
16976
- height: 0.8125rem;
16977
- flex-shrink: 0;
16978
- transition: transform 160ms ease;
17051
+ .mint-fit-panel__result-list {
17052
+ display: flex;
17053
+ flex-direction: column;
16979
17054
  }
16980
- .mint-pill-nav__chevron--open {
16981
- transform: rotate(180deg);
17055
+ .mint-fit-panel__result-row {
17056
+ display: flex;
17057
+ justify-content: space-between;
17058
+ align-items: center;
17059
+ padding: 0.5rem 0.75rem;
17060
+ border-bottom: 1px solid var(--border-color);
16982
17061
  }
16983
- .mint-pill-nav__dropdown {
16984
- position: absolute;
16985
- top: calc(100% + 0.5rem);
16986
- left: 50%;
16987
- z-index: 45;
16988
- min-width: 18rem;
16989
- padding: 0.375rem;
16990
- border-radius: 0.75rem;
16991
- border: 1px solid var(--border-light);
16992
- background: var(--bg-card);
16993
- box-shadow: var(--shadow-lg);
16994
- transform: translateX(-50%);
17062
+ .mint-fit-panel__result-row:last-child {
17063
+ border-bottom: none;
16995
17064
  }
16996
- .mint-pill-nav__dropdown-item {
16997
- display: flex;
16998
- align-items: baseline;
16999
- gap: 0.75rem;
17000
- width: 100%;
17001
- padding: 0.5rem 0.625rem;
17002
- border-radius: 0.5rem;
17003
- color: var(--text-secondary);
17065
+ .mint-fit-panel__result-label {
17004
17066
  font-size: 0.8125rem;
17005
- text-decoration: none;
17006
- white-space: nowrap;
17007
- }
17008
- .mint-pill-nav__dropdown-item:hover:not(.mint-pill-nav__dropdown-item--disabled) {
17009
- color: var(--text-primary);
17010
- background: var(--bg-secondary);
17067
+ color: var(--text-secondary);
17011
17068
  }
17012
- .mint-pill-nav__dropdown-item--active {
17069
+ .mint-fit-panel__result-value {
17070
+ font-size: 0.8125rem;
17071
+ font-weight: 500;
17013
17072
  color: var(--text-primary);
17014
- background: var(--bg-secondary);
17015
- font-weight: 600;
17073
+ font-variant-numeric: tabular-nums;
17016
17074
  }
17017
- .mint-pill-nav__dropdown-item--disabled {
17018
- opacity: var(--mint-disabled-opacity);
17019
- cursor: not-allowed;
17075
+ /* Result value variants */
17076
+ .mint-fit-panel__result-value--success {
17077
+ color: var(--mint-success);
17020
17078
  }
17021
- .mint-pill-nav__dropdown-label {
17022
- flex-shrink: 0;
17079
+ .mint-fit-panel__result-value--warning {
17080
+ color: var(--mint-warning);
17023
17081
  }
17024
- .mint-pill-nav__dropdown-description {
17025
- margin-left: auto;
17026
- color: var(--text-muted);
17027
- font-size: 0.75rem;
17028
- font-weight: 400;
17082
+ .mint-fit-panel__result-value--error {
17083
+ color: var(--mint-error);
17029
17084
  }
17030
- /* AppPluginSwitcherplugin chip + switcher dropdown */
17031
- .mint-plugin-switcher {
17085
+ /* AppAvatarMenuavatar button + dropdown */
17086
+ .mint-avatar-menu {
17032
17087
  position: relative;
17033
17088
  flex-shrink: 0;
17034
17089
  }
17035
- .mint-plugin-switcher__trigger {
17090
+ /* Pill trigger — avatar circle + username text on the right. Matches the
17091
+ shared TopBar account-trigger convention (GitHub/Linear-style). */
17092
+ .mint-avatar-menu__trigger {
17036
17093
  display: inline-flex;
17037
17094
  align-items: center;
17038
17095
  gap: 0.5rem;
17039
- height: 2.375rem;
17040
- padding: 0 0.375rem 0 0.375rem;
17041
- border: 1px solid var(--border-color);
17042
- background: var(--bg-card);
17043
- color: var(--text-primary);
17044
- border-radius: var(--radius-md);
17045
- font-size: 0.8125rem;
17096
+ padding: 0.25rem 0.75rem 0.25rem 0.25rem;
17097
+ border: none;
17098
+ background: transparent;
17099
+ border-radius: var(--radius);
17046
17100
  font-family: inherit;
17047
17101
  cursor: pointer;
17048
- transition:
17049
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17050
- border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17051
- box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17052
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
17053
- transform: translateY(0);
17102
+ transition: background-color 0.15s ease;
17054
17103
  }
17055
- .mint-plugin-switcher__trigger:hover:not(.mint-plugin-switcher__trigger--open) {
17104
+ .mint-avatar-menu__trigger:hover,
17105
+ .mint-avatar-menu__trigger--open {
17056
17106
  background: var(--bg-hover);
17057
- box-shadow: var(--shadow-sm);
17058
- transform: translateY(-1px);
17059
- }
17060
- .mint-plugin-switcher__trigger:active:not(.mint-plugin-switcher__trigger--open) {
17061
- transform: translateY(0);
17062
- box-shadow: none;
17063
- transition-duration: 0.05s;
17064
- }
17065
- @media (prefers-reduced-motion: reduce) {
17066
- .mint-plugin-switcher__trigger,
17067
- .mint-plugin-switcher__trigger:hover,
17068
- .mint-plugin-switcher__trigger:active {
17069
- transform: none;
17070
- }
17071
- }
17072
- .mint-plugin-switcher__trigger--open {
17073
- border-color: var(--color-primary);
17074
- box-shadow: 0 0 0 3px var(--color-primary-soft);
17075
17107
  }
17076
- .mint-plugin-switcher__label {
17077
- font-weight: 600;
17078
- color: var(--text-primary);
17108
+ .mint-avatar-menu__trigger:focus-visible {
17109
+ outline: none;
17110
+ box-shadow: var(--focus-ring);
17079
17111
  }
17080
- .mint-plugin-switcher__version {
17081
- color: var(--text-muted);
17082
- font-family: var(--font-mono, ui-monospace, monospace);
17112
+ /* Gradient avatar chip inside the trigger */
17113
+ .mint-avatar-menu__avatar {
17114
+ width: 1.75rem;
17115
+ height: 1.75rem;
17116
+ border-radius: 9999px;
17117
+ display: flex;
17118
+ align-items: center;
17119
+ justify-content: center;
17120
+ font-size: 0.75rem;
17121
+ line-height: 1;
17122
+ font-weight: 500;
17123
+ color: white;
17124
+ background: linear-gradient(135deg, var(--color-primary-hover) 0%, var(--color-primary) 100%);
17125
+ flex-shrink: 0;
17126
+ }
17127
+ /* Username next to the avatar — hidden below 640px to preserve space */
17128
+ .mint-avatar-menu__name {
17129
+ font-size: 0.875rem;
17130
+ font-weight: 500;
17131
+ color: var(--text-primary);
17132
+ white-space: nowrap;
17133
+ }
17134
+ @media (max-width: 640px) {
17135
+ .mint-avatar-menu__name {
17136
+ display: none;
17137
+ }
17138
+
17139
+ .mint-avatar-menu__trigger {
17140
+ padding: 0.25rem;
17141
+ }
17142
+ }
17143
+ .mint-avatar-menu__panel {
17144
+ position: absolute;
17145
+ top: calc(100% + 0.5rem);
17146
+ right: 0;
17147
+ width: 13.75rem;
17148
+ background: var(--bg-card);
17149
+ border: 1px solid var(--border-color);
17150
+ border-radius: var(--radius-lg);
17151
+ box-shadow: var(--shadow-md);
17152
+ padding: 0.375rem;
17153
+ z-index: 60;
17154
+ }
17155
+ .mint-avatar-menu__header {
17156
+ padding: 0.5rem 0.625rem 0.625rem;
17157
+ border-bottom: 1px solid var(--border-light);
17158
+ margin-bottom: 0.25rem;
17159
+ }
17160
+ .mint-avatar-menu__user-name {
17161
+ font-size: 0.78125rem;
17162
+ font-weight: 600;
17163
+ color: var(--text-primary);
17164
+ line-height: 1.25;
17165
+ }
17166
+ .mint-avatar-menu__user-email {
17083
17167
  font-size: 0.6875rem;
17168
+ color: var(--text-secondary);
17169
+ margin-top: 0.0625rem;
17170
+ line-height: 1.25;
17171
+ word-break: break-all;
17084
17172
  }
17085
- .mint-plugin-switcher__chevron-wrap {
17173
+ .mint-avatar-menu__item {
17174
+ display: flex;
17175
+ align-items: center;
17176
+ gap: 0.625rem;
17177
+ width: 100%;
17178
+ padding: 0.4375rem 0.625rem;
17179
+ border: 0;
17180
+ border-radius: 0.375rem;
17181
+ background: transparent;
17182
+ color: var(--text-primary);
17183
+ font-size: 0.78125rem;
17184
+ font-family: inherit;
17185
+ text-align: left;
17186
+ text-decoration: none;
17187
+ cursor: pointer;
17188
+ transition: background-color var(--mint-transition);
17189
+ }
17190
+ .mint-avatar-menu__item:hover {
17191
+ background: var(--bg-hover);
17192
+ }
17193
+ .mint-avatar-menu__item--danger {
17194
+ color: var(--mint-error);
17195
+ }
17196
+ .mint-avatar-menu__item-icon {
17197
+ display: grid;
17198
+ place-items: center;
17199
+ color: var(--text-secondary);
17200
+ flex-shrink: 0;
17201
+ }
17202
+ .mint-avatar-menu__item-icon svg {
17203
+ width: 0.8125rem;
17204
+ height: 0.8125rem;
17205
+ }
17206
+ .mint-avatar-menu__item--danger .mint-avatar-menu__item-icon {
17207
+ color: var(--mint-error);
17208
+ }
17209
+ .mint-avatar-menu__item-label {
17210
+ flex: 1;
17211
+ }
17212
+ .mint-avatar-menu__item-right {
17213
+ font-size: 0.6875rem;
17214
+ color: var(--text-muted);
17215
+ }
17216
+ .mint-avatar-menu__divider {
17217
+ height: 1px;
17218
+ background: var(--border-light);
17219
+ margin: 0.25rem 0;
17220
+ }
17221
+ /* AppTopBar page selector — left-side route/page dropdown */
17222
+ .mint-page-selector {
17223
+ position: relative;
17224
+ flex-shrink: 0;
17225
+ }
17226
+ .mint-page-selector__trigger {
17227
+ display: inline-flex;
17228
+ align-items: center;
17229
+ gap: 0.625rem;
17230
+ width: 100%;
17231
+ height: 2.375rem;
17232
+ padding: 0 0.375rem 0 0.625rem;
17233
+ border: 1px solid var(--border-color);
17234
+ background: var(--bg-card);
17235
+ color: var(--text-primary);
17236
+ border-radius: var(--radius-md);
17237
+ font-size: 0.8125rem;
17238
+ font-weight: 500;
17239
+ font-family: inherit;
17240
+ cursor: pointer;
17241
+ transition:
17242
+ background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17243
+ border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17244
+ box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17245
+ transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
17246
+ transform: translateY(0);
17247
+ }
17248
+ .mint-page-selector__trigger:hover:not(.mint-page-selector__trigger--open) {
17249
+ background: var(--bg-hover);
17250
+ box-shadow: var(--shadow-sm);
17251
+ transform: translateY(-1px);
17252
+ }
17253
+ .mint-page-selector__trigger:active:not(.mint-page-selector__trigger--open) {
17254
+ transform: translateY(0);
17255
+ box-shadow: none;
17256
+ transition-duration: 0.05s;
17257
+ }
17258
+ @media (prefers-reduced-motion: reduce) {
17259
+ .mint-page-selector__trigger,
17260
+ .mint-page-selector__trigger:hover,
17261
+ .mint-page-selector__trigger:active {
17262
+ transform: none;
17263
+ }
17264
+ }
17265
+ .mint-page-selector__trigger--open {
17266
+ border-color: var(--color-primary);
17267
+ box-shadow: 0 0 0 3px var(--color-primary-soft);
17268
+ }
17269
+ .mint-page-selector__icon {
17270
+ width: 1.5rem;
17271
+ height: 1.5rem;
17272
+ border-radius: 0.375rem;
17273
+ background: var(--color-primary-soft);
17274
+ color: var(--color-primary);
17275
+ display: grid;
17276
+ place-items: center;
17277
+ flex-shrink: 0;
17278
+ }
17279
+ .mint-page-selector__icon svg {
17280
+ width: 0.875rem;
17281
+ height: 0.875rem;
17282
+ }
17283
+ .mint-page-selector__icon--metadata {
17284
+ background: transparent;
17285
+ color: inherit;
17286
+ }
17287
+ .mint-page-selector__trigger-metadata-icon.mint-plugin-icon--sm {
17288
+ width: 1.5rem;
17289
+ height: 1.5rem;
17290
+ border-radius: 0.375rem;
17291
+ }
17292
+ .mint-page-selector__icon-fallback {
17293
+ font-size: 0.6875rem;
17294
+ font-weight: 600;
17295
+ font-family: var(--font-mono, ui-monospace, monospace);
17296
+ }
17297
+ .mint-page-selector__label {
17298
+ flex: 1;
17299
+ text-align: left;
17300
+ white-space: nowrap;
17301
+ overflow: hidden;
17302
+ text-overflow: ellipsis;
17303
+ }
17304
+ .mint-page-selector__chevron-wrap {
17086
17305
  width: 1.625rem;
17087
17306
  height: 1.625rem;
17088
17307
  border-radius: 0.375rem;
@@ -17090,17 +17309,17 @@ html.dark .mint-experiment-selector__filters-toggle--active {
17090
17309
  color: var(--text-secondary);
17091
17310
  display: grid;
17092
17311
  place-items: center;
17093
- margin-left: 0.125rem;
17312
+ flex-shrink: 0;
17094
17313
  }
17095
- .mint-plugin-switcher__chevron {
17314
+ .mint-page-selector__chevron {
17096
17315
  width: 0.8125rem;
17097
17316
  height: 0.8125rem;
17098
17317
  transition: transform var(--mint-transition);
17099
17318
  }
17100
- .mint-plugin-switcher__chevron--open {
17319
+ .mint-page-selector__chevron--open {
17101
17320
  transform: rotate(180deg);
17102
17321
  }
17103
- .mint-plugin-switcher__menu {
17322
+ .mint-page-selector__menu {
17104
17323
  position: absolute;
17105
17324
  top: calc(100% + 0.375rem);
17106
17325
  left: 0;
@@ -17112,662 +17331,1435 @@ html.dark .mint-experiment-selector__filters-toggle--active {
17112
17331
  padding: 0.375rem;
17113
17332
  z-index: 50;
17114
17333
  }
17115
- .mint-plugin-switcher__menu-title {
17334
+ .mint-page-selector__menu-title {
17116
17335
  padding: 0.375rem 0.625rem 0.5rem;
17117
17336
  font-size: 0.625rem;
17118
17337
  font-weight: 600;
17119
- letter-spacing: 0.06em;
17120
- text-transform: uppercase;
17338
+ letter-spacing: 0.06em;
17339
+ text-transform: uppercase;
17340
+ color: var(--text-muted);
17341
+ }
17342
+ .mint-page-selector__item {
17343
+ display: flex;
17344
+ align-items: center;
17345
+ gap: 0.625rem;
17346
+ width: 100%;
17347
+ padding: 0.5rem 0.625rem;
17348
+ border: 0;
17349
+ background: transparent;
17350
+ border-radius: 0.4375rem;
17351
+ color: var(--text-primary);
17352
+ font-size: 0.8125rem;
17353
+ font-weight: 500;
17354
+ font-family: inherit;
17355
+ text-align: left;
17356
+ text-decoration: none;
17357
+ cursor: pointer;
17358
+ transition: background-color var(--mint-transition);
17359
+ }
17360
+ .mint-page-selector__item:hover:not(.mint-page-selector__item--disabled) {
17361
+ background: var(--bg-hover);
17362
+ }
17363
+ .mint-page-selector__item--active {
17364
+ background: var(--bg-tertiary);
17365
+ font-weight: 600;
17366
+ }
17367
+ .mint-page-selector__item--disabled {
17368
+ opacity: var(--mint-disabled-opacity);
17369
+ cursor: not-allowed;
17370
+ }
17371
+ .mint-page-selector__item-icon {
17372
+ width: 1.375rem;
17373
+ height: 1.375rem;
17374
+ border-radius: 0.3125rem;
17375
+ background: var(--bg-tertiary);
17376
+ color: var(--text-secondary);
17377
+ display: grid;
17378
+ place-items: center;
17379
+ flex-shrink: 0;
17380
+ }
17381
+ .mint-page-selector__item--active .mint-page-selector__item-icon {
17382
+ background: var(--color-primary-soft);
17383
+ color: var(--color-primary);
17384
+ }
17385
+ .mint-page-selector__item-icon--metadata,
17386
+ .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
17387
+ background: transparent;
17388
+ color: inherit;
17389
+ }
17390
+ .mint-page-selector__item-icon svg {
17391
+ width: 0.8125rem;
17392
+ height: 0.8125rem;
17393
+ }
17394
+ .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
17395
+ width: 1.375rem;
17396
+ height: 1.375rem;
17397
+ border-radius: 0.3125rem;
17398
+ }
17399
+ .mint-page-selector__item-label {
17400
+ flex: 1;
17401
+ min-width: 0;
17402
+ overflow: hidden;
17403
+ text-overflow: ellipsis;
17404
+ white-space: nowrap;
17405
+ }
17406
+ /* AppTopBar pillNav — centered top-level navigation pills */
17407
+ .mint-pill-nav {
17408
+ display: inline-flex;
17409
+ padding: 0.1875rem;
17410
+ border-radius: 9999px;
17411
+ background: var(--bg-tertiary);
17412
+ border: 1px solid var(--border-light);
17413
+ flex-shrink: 0;
17414
+ }
17415
+ .mint-pill-nav__item-wrap {
17416
+ position: relative;
17417
+ display: inline-flex;
17418
+ }
17419
+ .mint-pill-nav__item {
17420
+ display: inline-flex;
17421
+ align-items: center;
17422
+ gap: 0.375rem;
17423
+ border: 0;
17424
+ padding: 0.375rem 0.875rem;
17425
+ border-radius: 9999px;
17426
+ font-size: 0.8125rem;
17427
+ font-weight: 500;
17428
+ font-family: inherit;
17429
+ color: var(--text-secondary);
17430
+ background: transparent;
17431
+ text-decoration: none;
17432
+ cursor: pointer;
17433
+ transition:
17434
+ color 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17435
+ background-color 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17436
+ box-shadow 220ms var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
17437
+ }
17438
+ @media (prefers-reduced-motion: reduce) {
17439
+ .mint-pill-nav__item {
17440
+ transition: none;
17441
+ }
17442
+ }
17443
+ .mint-pill-nav__item:hover:not(.mint-pill-nav__item--active):not(.mint-pill-nav__item--disabled) {
17444
+ color: var(--text-primary);
17445
+ }
17446
+ .mint-pill-nav__item--active {
17447
+ color: var(--text-primary);
17448
+ background: var(--bg-card);
17449
+ box-shadow: var(--shadow-sm);
17450
+ font-weight: 600;
17451
+ }
17452
+ .mint-pill-nav__item--disabled {
17453
+ opacity: var(--mint-disabled-opacity);
17454
+ cursor: not-allowed;
17455
+ }
17456
+ .mint-pill-nav__item:focus-visible {
17457
+ outline: none;
17458
+ box-shadow: var(--focus-ring);
17459
+ }
17460
+ .mint-pill-nav__icon {
17461
+ width: 0.875rem;
17462
+ height: 0.875rem;
17463
+ flex-shrink: 0;
17464
+ }
17465
+ .mint-pill-nav__chevron {
17466
+ width: 0.8125rem;
17467
+ height: 0.8125rem;
17468
+ flex-shrink: 0;
17469
+ transition: transform 160ms ease;
17470
+ }
17471
+ .mint-pill-nav__chevron--open {
17472
+ transform: rotate(180deg);
17473
+ }
17474
+ .mint-pill-nav__dropdown {
17475
+ position: absolute;
17476
+ top: calc(100% + 0.5rem);
17477
+ left: 50%;
17478
+ z-index: 45;
17479
+ min-width: 18rem;
17480
+ padding: 0.375rem;
17481
+ border-radius: 0.75rem;
17482
+ border: 1px solid var(--border-light);
17483
+ background: var(--bg-card);
17484
+ box-shadow: var(--shadow-lg);
17485
+ transform: translateX(-50%);
17486
+ }
17487
+ .mint-pill-nav__dropdown-item {
17488
+ display: flex;
17489
+ align-items: baseline;
17490
+ gap: 0.75rem;
17491
+ width: 100%;
17492
+ padding: 0.5rem 0.625rem;
17493
+ border-radius: 0.5rem;
17494
+ color: var(--text-secondary);
17495
+ font-size: 0.8125rem;
17496
+ text-decoration: none;
17497
+ white-space: nowrap;
17498
+ }
17499
+ .mint-pill-nav__dropdown-item:hover:not(.mint-pill-nav__dropdown-item--disabled) {
17500
+ color: var(--text-primary);
17501
+ background: var(--bg-secondary);
17502
+ }
17503
+ .mint-pill-nav__dropdown-item--active {
17504
+ color: var(--text-primary);
17505
+ background: var(--bg-secondary);
17506
+ font-weight: 600;
17507
+ }
17508
+ .mint-pill-nav__dropdown-item--disabled {
17509
+ opacity: var(--mint-disabled-opacity);
17510
+ cursor: not-allowed;
17511
+ }
17512
+ .mint-pill-nav__dropdown-label {
17513
+ flex-shrink: 0;
17514
+ }
17515
+ .mint-pill-nav__dropdown-description {
17516
+ margin-left: auto;
17517
+ color: var(--text-muted);
17518
+ font-size: 0.75rem;
17519
+ font-weight: 400;
17520
+ }
17521
+ /* AppPluginSwitcher — plugin chip + switcher dropdown */
17522
+ .mint-plugin-switcher {
17523
+ position: relative;
17524
+ flex-shrink: 0;
17525
+ }
17526
+ .mint-plugin-switcher__trigger {
17527
+ display: inline-flex;
17528
+ align-items: center;
17529
+ gap: 0.5rem;
17530
+ height: 2.375rem;
17531
+ padding: 0 0.375rem 0 0.375rem;
17532
+ border: 1px solid var(--border-color);
17533
+ background: var(--bg-card);
17534
+ color: var(--text-primary);
17535
+ border-radius: var(--radius-md);
17536
+ font-size: 0.8125rem;
17537
+ font-family: inherit;
17538
+ cursor: pointer;
17539
+ transition:
17540
+ background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17541
+ border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17542
+ box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
17543
+ transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
17544
+ transform: translateY(0);
17545
+ }
17546
+ .mint-plugin-switcher__trigger:hover:not(.mint-plugin-switcher__trigger--open) {
17547
+ background: var(--bg-hover);
17548
+ box-shadow: var(--shadow-sm);
17549
+ transform: translateY(-1px);
17550
+ }
17551
+ .mint-plugin-switcher__trigger:active:not(.mint-plugin-switcher__trigger--open) {
17552
+ transform: translateY(0);
17553
+ box-shadow: none;
17554
+ transition-duration: 0.05s;
17555
+ }
17556
+ @media (prefers-reduced-motion: reduce) {
17557
+ .mint-plugin-switcher__trigger,
17558
+ .mint-plugin-switcher__trigger:hover,
17559
+ .mint-plugin-switcher__trigger:active {
17560
+ transform: none;
17561
+ }
17562
+ }
17563
+ .mint-plugin-switcher__trigger--open {
17564
+ border-color: var(--color-primary);
17565
+ box-shadow: 0 0 0 3px var(--color-primary-soft);
17566
+ }
17567
+ .mint-plugin-switcher__label {
17568
+ font-weight: 600;
17569
+ color: var(--text-primary);
17570
+ }
17571
+ .mint-plugin-switcher__version {
17572
+ color: var(--text-muted);
17573
+ font-family: var(--font-mono, ui-monospace, monospace);
17574
+ font-size: 0.6875rem;
17575
+ }
17576
+ .mint-plugin-switcher__chevron-wrap {
17577
+ width: 1.625rem;
17578
+ height: 1.625rem;
17579
+ border-radius: 0.375rem;
17580
+ background: var(--bg-tertiary);
17581
+ color: var(--text-secondary);
17582
+ display: grid;
17583
+ place-items: center;
17584
+ margin-left: 0.125rem;
17585
+ }
17586
+ .mint-plugin-switcher__chevron {
17587
+ width: 0.8125rem;
17588
+ height: 0.8125rem;
17589
+ transition: transform var(--mint-transition);
17590
+ }
17591
+ .mint-plugin-switcher__chevron--open {
17592
+ transform: rotate(180deg);
17593
+ }
17594
+ .mint-plugin-switcher__menu {
17595
+ position: absolute;
17596
+ top: calc(100% + 0.375rem);
17597
+ left: 0;
17598
+ width: 16.25rem;
17599
+ background: var(--bg-card);
17600
+ border: 1px solid var(--border-color);
17601
+ border-radius: var(--radius-lg);
17602
+ box-shadow: var(--shadow-md);
17603
+ padding: 0.375rem;
17604
+ z-index: 50;
17605
+ }
17606
+ .mint-plugin-switcher__menu-title {
17607
+ padding: 0.375rem 0.625rem 0.5rem;
17608
+ font-size: 0.625rem;
17609
+ font-weight: 600;
17610
+ letter-spacing: 0.06em;
17611
+ text-transform: uppercase;
17612
+ color: var(--text-muted);
17613
+ }
17614
+ .mint-plugin-switcher__item {
17615
+ display: flex;
17616
+ align-items: center;
17617
+ gap: 0.625rem;
17618
+ width: 100%;
17619
+ padding: 0.4375rem 0.5rem;
17620
+ border: 0;
17621
+ border-radius: 0.375rem;
17622
+ background: transparent;
17623
+ color: var(--text-primary);
17624
+ font-size: 0.78125rem;
17625
+ font-weight: 500;
17626
+ font-family: inherit;
17627
+ text-align: left;
17628
+ text-decoration: none;
17629
+ cursor: pointer;
17630
+ transition: background-color var(--mint-transition);
17631
+ }
17632
+ .mint-plugin-switcher__item:hover {
17633
+ background: var(--bg-hover);
17634
+ }
17635
+ .mint-plugin-switcher__item--active {
17636
+ background: var(--bg-tertiary);
17637
+ }
17638
+ .mint-plugin-switcher__item-swatch {
17639
+ width: 1.375rem;
17640
+ height: 1.375rem;
17641
+ border-radius: 0.3125rem;
17642
+ color: white;
17643
+ display: grid;
17644
+ place-items: center;
17645
+ font-family: var(--font-mono, ui-monospace, monospace);
17646
+ font-weight: 700;
17647
+ font-size: 0.625rem;
17648
+ flex-shrink: 0;
17649
+ }
17650
+ .mint-plugin-switcher__item-label {
17651
+ flex: 1;
17652
+ }
17653
+ .mint-plugin-switcher__item-version {
17654
+ color: var(--text-muted);
17655
+ font-family: var(--font-mono, ui-monospace, monospace);
17656
+ font-size: 0.6875rem;
17657
+ }
17658
+ .mint-plugin-switcher__item-check {
17659
+ width: 0.875rem;
17660
+ height: 0.875rem;
17661
+ color: var(--color-primary);
17662
+ }
17663
+ .mint-plugin-switcher__divider {
17664
+ height: 1px;
17665
+ background: var(--border-light);
17666
+ margin: 0.375rem 0;
17667
+ }
17668
+ .mint-plugin-switcher__install {
17669
+ display: flex;
17670
+ align-items: center;
17671
+ gap: 0.625rem;
17672
+ width: 100%;
17673
+ padding: 0.4375rem 0.5rem;
17674
+ border: 0;
17675
+ border-radius: 0.375rem;
17676
+ background: transparent;
17677
+ color: var(--text-secondary);
17678
+ font-size: 0.75rem;
17679
+ font-family: inherit;
17680
+ text-align: left;
17681
+ text-decoration: none;
17682
+ cursor: pointer;
17683
+ transition: background-color var(--mint-transition), color var(--mint-transition);
17684
+ }
17685
+ .mint-plugin-switcher__install:hover {
17686
+ background: var(--bg-hover);
17687
+ color: var(--text-primary);
17688
+ }
17689
+ .mint-plugin-switcher__install svg {
17690
+ width: 0.8125rem;
17691
+ height: 0.8125rem;
17692
+ }
17693
+ .mint-mobile-support-gate {
17694
+ box-sizing: border-box;
17695
+ width: 100%;
17696
+ max-width: 100vw;
17697
+ min-height: 100vh;
17698
+ display: grid;
17699
+ place-items: center;
17700
+ padding: 1.5rem;
17701
+ overflow-x: hidden;
17702
+ background: var(--bg-primary, #f8fafc);
17703
+ color: var(--text-primary, #0f172a);
17704
+ }
17705
+ .mint-mobile-support-gate *,
17706
+ .mint-mobile-support-gate *::before,
17707
+ .mint-mobile-support-gate *::after {
17708
+ box-sizing: border-box;
17709
+ }
17710
+ .mint-mobile-support-gate__panel {
17711
+ width: 28rem;
17712
+ max-width: calc(100vw - 3rem);
17713
+ display: grid;
17714
+ gap: 1rem;
17715
+ padding: 1.5rem;
17716
+ border: 1px solid var(--border-color, #e2e8f0);
17717
+ border-radius: 0.5rem;
17718
+ background: var(--bg-secondary, #ffffff);
17719
+ box-shadow: var(--shadow-md, 0 10px 30px rgb(15 23 42 / 0.08));
17720
+ }
17721
+ .mint-mobile-support-gate__mark {
17722
+ width: 3rem;
17723
+ height: 3rem;
17724
+ display: inline-flex;
17725
+ align-items: center;
17726
+ justify-content: center;
17727
+ border: 1px solid color-mix(in srgb, var(--color-primary, #4f46e5) 22%, transparent);
17728
+ border-radius: 0.5rem;
17729
+ background: color-mix(in srgb, var(--color-primary, #4f46e5) 10%, transparent);
17730
+ color: var(--color-primary, #4f46e5);
17731
+ }
17732
+ .mint-mobile-support-gate__icon {
17733
+ width: 1.5rem;
17734
+ height: 1.5rem;
17735
+ }
17736
+ .mint-mobile-support-gate__copy {
17737
+ min-width: 0;
17738
+ display: grid;
17739
+ gap: 0.5rem;
17740
+ }
17741
+ .mint-mobile-support-gate__eyebrow {
17742
+ margin: 0;
17743
+ color: var(--text-muted, #64748b);
17744
+ font-size: 0.75rem;
17745
+ font-weight: 700;
17746
+ letter-spacing: 0;
17747
+ line-height: 1.3;
17748
+ text-transform: uppercase;
17749
+ }
17750
+ .mint-mobile-support-gate__title {
17751
+ margin: 0;
17752
+ color: var(--text-primary, #0f172a);
17753
+ font-size: 1.35rem;
17754
+ font-weight: 700;
17755
+ letter-spacing: 0;
17756
+ line-height: 1.2;
17757
+ overflow-wrap: anywhere;
17758
+ }
17759
+ .mint-mobile-support-gate__message {
17760
+ margin: 0;
17761
+ color: var(--text-secondary, #475569);
17762
+ font-size: 0.95rem;
17763
+ line-height: 1.55;
17764
+ overflow-wrap: anywhere;
17765
+ }
17766
+ .mint-mobile-support-gate__hint {
17767
+ min-width: 0;
17768
+ display: flex;
17769
+ align-items: flex-start;
17770
+ gap: 0.625rem;
17771
+ padding: 0.75rem;
17772
+ border: 1px solid var(--border-color, #e2e8f0);
17773
+ border-radius: 0.5rem;
17774
+ background: var(--bg-tertiary, #f1f5f9);
17775
+ color: var(--text-secondary, #475569);
17776
+ font-size: 0.875rem;
17777
+ line-height: 1.45;
17778
+ overflow-wrap: anywhere;
17779
+ }
17780
+ .mint-mobile-support-gate__hint-icon {
17781
+ width: 1rem;
17782
+ height: 1rem;
17783
+ flex: 0 0 auto;
17784
+ margin-top: 0.125rem;
17785
+ color: var(--color-primary, #4f46e5);
17786
+ }
17787
+ @media (max-width: 480px) {
17788
+ .mint-mobile-support-gate {
17789
+ padding: 1rem;
17790
+ }
17791
+
17792
+ .mint-mobile-support-gate__panel {
17793
+ max-width: calc(100vw - 2rem);
17794
+ padding: 1.25rem;
17795
+ }
17796
+
17797
+ .mint-mobile-support-gate__title {
17798
+ font-size: 1.25rem;
17799
+ }
17800
+ }
17801
+ /* PluginIcon — BEM. Renders a plugin's icon inside a sized chip with two
17802
+ visual variants. Tintable via `--mint-plugin-icon-tone` custom property. */
17803
+ .mint-plugin-icon {
17804
+ display: inline-flex;
17805
+ align-items: center;
17806
+ justify-content: center;
17807
+ flex-shrink: 0;
17808
+ border-radius: var(--radius-md, 0.5rem);
17809
+ overflow: hidden;
17810
+ }
17811
+ /* Sizes */
17812
+ .mint-plugin-icon--sm { width: 1.5rem; height: 1.5rem; }
17813
+ .mint-plugin-icon--md { width: 2rem; height: 2rem; }
17814
+ .mint-plugin-icon--topbar { width: 2.25rem; height: 2.25rem; }
17815
+ .mint-plugin-icon--lg { width: 3rem; height: 3rem; border-radius: 0.75rem; }
17816
+ /* Variants — `--mint-plugin-icon-tone` falls back to --color-primary */
17817
+ .mint-plugin-icon--solid {
17818
+ background-color: var(--mint-plugin-icon-tone, var(--color-primary));
17819
+ color: white;
17820
+ }
17821
+ .mint-plugin-icon--tinted {
17822
+ background-color: color-mix(in srgb, var(--mint-plugin-icon-tone, var(--color-primary)) 12%, transparent);
17823
+ color: var(--mint-plugin-icon-tone, var(--color-primary));
17824
+ }
17825
+ /* Inner svg/img — sized to ~62% of chip */
17826
+ .mint-plugin-icon--sm .mint-plugin-icon__svg,
17827
+ .mint-plugin-icon--sm .mint-plugin-icon__img { width: 0.9375rem; height: 0.9375rem; }
17828
+ .mint-plugin-icon--md .mint-plugin-icon__svg,
17829
+ .mint-plugin-icon--md .mint-plugin-icon__img { width: 1.125rem; height: 1.125rem; }
17830
+ .mint-plugin-icon--topbar .mint-plugin-icon__svg,
17831
+ .mint-plugin-icon--topbar .mint-plugin-icon__img { width: 1.25rem; height: 1.25rem; }
17832
+ .mint-plugin-icon--lg .mint-plugin-icon__svg,
17833
+ .mint-plugin-icon--lg .mint-plugin-icon__img { width: 1.5rem; height: 1.5rem; }
17834
+ .mint-plugin-icon__img {
17835
+ object-fit: contain;
17836
+ }
17837
+ .mint-plugin-icon .mint-plugin-icon__svg--structured {
17838
+ width: 100%;
17839
+ height: 100%;
17840
+ }
17841
+ /* ReagentEditor Component Styles */
17842
+ .mint-reagent-editor {
17843
+ display: flex;
17844
+ flex-direction: column;
17845
+ background-color: var(--bg-secondary);
17846
+ border-radius: var(--radius-lg);
17847
+ border: 1px solid var(--border-color);
17848
+ border-top: 3px solid var(--reagent-color, var(--color-primary));
17849
+ overflow: hidden;
17850
+ }
17851
+ /* Sections */
17852
+ .mint-reagent-editor__section {
17853
+ padding: 0.875rem 1rem;
17854
+ border-bottom: 1px solid var(--border-color);
17855
+ }
17856
+ .mint-reagent-editor__section-header {
17857
+ display: flex;
17858
+ align-items: center;
17859
+ gap: 0.375rem;
17860
+ font-size: 0.6875rem;
17861
+ font-weight: 600;
17862
+ text-transform: uppercase;
17863
+ letter-spacing: 0.05em;
17864
+ color: var(--text-muted);
17865
+ margin-bottom: 0.75rem;
17866
+ }
17867
+ .mint-reagent-editor__section-icon {
17868
+ width: 0.875rem;
17869
+ height: 0.875rem;
17870
+ flex-shrink: 0;
17871
+ color: var(--reagent-color, var(--color-primary));
17872
+ opacity: 0.7;
17873
+ }
17874
+ /* Identity */
17875
+ .mint-reagent-editor__identity {
17876
+ display: flex;
17877
+ align-items: center;
17878
+ gap: 0.625rem;
17879
+ }
17880
+ .mint-reagent-editor__color-wrapper {
17881
+ position: relative;
17882
+ flex-shrink: 0;
17883
+ cursor: pointer;
17884
+ }
17885
+ .mint-reagent-editor__color-input {
17886
+ position: absolute;
17887
+ inset: 0;
17888
+ width: 100%;
17889
+ height: 100%;
17890
+ opacity: 0;
17891
+ cursor: pointer;
17892
+ }
17893
+ .mint-reagent-editor__color-swatch {
17894
+ display: block;
17895
+ width: 1.75rem;
17896
+ height: 1.75rem;
17897
+ border-radius: var(--radius);
17898
+ box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--border-color);
17899
+ transition: box-shadow 0.15s ease;
17900
+ }
17901
+ .mint-reagent-editor__color-wrapper:hover .mint-reagent-editor__color-swatch {
17902
+ box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--reagent-color, var(--border-color));
17903
+ }
17904
+ .mint-reagent-editor__name-input {
17905
+ flex: 1;
17906
+ min-width: 0;
17907
+ background: transparent;
17908
+ border: none;
17909
+ outline: none;
17910
+ font-family: inherit;
17911
+ font-size: 0.9375rem;
17912
+ font-weight: 600;
17913
+ color: var(--text-primary);
17914
+ padding: 0.25rem 0;
17915
+ border-bottom: 1px solid transparent;
17916
+ transition: border-color 0.15s ease;
17917
+ }
17918
+ .mint-reagent-editor__name-input::placeholder {
17121
17919
  color: var(--text-muted);
17920
+ font-weight: 400;
17122
17921
  }
17123
- .mint-plugin-switcher__item {
17922
+ .mint-reagent-editor__name-input:focus {
17923
+ border-bottom-color: var(--reagent-color, var(--color-primary));
17924
+ }
17925
+ /* Fields & layout */
17926
+ .mint-reagent-editor__field {
17927
+ margin-bottom: 0.625rem;
17928
+ }
17929
+ .mint-reagent-editor__field:last-child {
17930
+ margin-bottom: 0;
17931
+ }
17932
+ .mint-reagent-editor__field--flex {
17933
+ display: flex;
17934
+ flex-direction: column;
17935
+ gap: 0.25rem;
17936
+ flex: 1 1 0;
17937
+ width: 0;
17938
+ min-width: 0;
17939
+ }
17940
+ .mint-reagent-editor__position-row {
17124
17941
  display: flex;
17125
- align-items: center;
17126
17942
  gap: 0.625rem;
17127
17943
  width: 100%;
17128
- padding: 0.4375rem 0.5rem;
17129
- border: 0;
17130
- border-radius: 0.375rem;
17131
- background: transparent;
17132
- color: var(--text-primary);
17133
- font-size: 0.78125rem;
17944
+ }
17945
+ .mint-reagent-editor .mint-select {
17946
+ width: 100%;
17947
+ min-width: 0;
17948
+ }
17949
+ .mint-reagent-editor__label {
17950
+ font-size: 0.75rem;
17134
17951
  font-weight: 500;
17135
- font-family: inherit;
17136
- text-align: left;
17137
- text-decoration: none;
17138
- cursor: pointer;
17139
- transition: background-color var(--mint-transition);
17952
+ color: var(--text-secondary);
17140
17953
  }
17141
- .mint-plugin-switcher__item:hover {
17142
- background: var(--bg-hover);
17954
+ .mint-reagent-editor__inline-input {
17955
+ box-sizing: border-box;
17956
+ width: 100%;
17957
+ min-height: var(--form-height-sm);
17958
+ padding: 0 0.625rem;
17959
+ font-family: 'Fira Code', monospace;
17960
+ font-size: 0.8rem;
17961
+ font-weight: 500;
17962
+ color: var(--text-primary);
17963
+ background-color: var(--bg-primary);
17964
+ border: 1px solid var(--border-color);
17965
+ border-radius: var(--radius);
17966
+ outline: none;
17967
+ text-transform: uppercase;
17968
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
17143
17969
  }
17144
- .mint-plugin-switcher__item--active {
17145
- background: var(--bg-tertiary);
17970
+ .mint-reagent-editor__inline-input::placeholder {
17971
+ text-transform: none;
17146
17972
  }
17147
- .mint-plugin-switcher__item-swatch {
17148
- width: 1.375rem;
17149
- height: 1.375rem;
17150
- border-radius: 0.3125rem;
17151
- color: white;
17152
- display: grid;
17153
- place-items: center;
17154
- font-family: var(--font-mono, ui-monospace, monospace);
17155
- font-weight: 700;
17156
- font-size: 0.625rem;
17157
- flex-shrink: 0;
17973
+ .mint-reagent-editor__inline-input:focus {
17974
+ border-color: var(--reagent-color, var(--color-primary));
17975
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
17158
17976
  }
17159
- .mint-plugin-switcher__item-label {
17160
- flex: 1;
17977
+ .mint-reagent-editor__inline-input--error {
17978
+ border-color: var(--mint-error);
17161
17979
  }
17162
- .mint-plugin-switcher__item-version {
17163
- color: var(--text-muted);
17164
- font-family: var(--font-mono, ui-monospace, monospace);
17980
+ .mint-reagent-editor__inline-input--error:focus {
17981
+ border-color: var(--mint-error);
17982
+ box-shadow: var(--focus-ring-error);
17983
+ }
17984
+ /* Inline field validation error */
17985
+ .mint-reagent-editor__field-error {
17986
+ grid-column: 2;
17165
17987
  font-size: 0.6875rem;
17988
+ color: var(--mint-error);
17989
+ line-height: 1.2;
17166
17990
  }
17167
- .mint-plugin-switcher__item-check {
17168
- width: 0.875rem;
17169
- height: 0.875rem;
17170
- color: var(--color-primary);
17991
+ /* Unit select in section header — uses reagent color */
17992
+ .mint-reagent-editor__unit-select {
17993
+ margin-left: auto;
17994
+ padding: 0.125rem 0.375rem;
17995
+ font-family: 'Fira Code', monospace;
17996
+ font-size: 0.6875rem;
17997
+ font-weight: 500;
17998
+ color: var(--reagent-color, var(--color-primary));
17999
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 10%, transparent);
18000
+ border: none;
18001
+ border-radius: var(--radius-sm);
18002
+ cursor: pointer;
18003
+ outline: none;
18004
+ transition: background-color 0.15s ease;
17171
18005
  }
17172
- .mint-plugin-switcher__divider {
17173
- height: 1px;
17174
- background: var(--border-light);
17175
- margin: 0.375rem 0;
18006
+ .mint-reagent-editor__unit-select:hover {
18007
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 18%, transparent);
17176
18008
  }
17177
- .mint-plugin-switcher__install {
18009
+ /* Dilution generator */
18010
+ .mint-reagent-editor__generator {
18011
+ background-color: var(--bg-primary);
18012
+ border: 1px solid var(--border-color);
18013
+ border-radius: var(--radius);
18014
+ padding: 0.75rem;
18015
+ margin-bottom: 0.625rem;
18016
+ overflow: hidden;
18017
+ }
18018
+ .mint-reagent-editor__generator-inputs {
17178
18019
  display: flex;
17179
- align-items: center;
17180
18020
  gap: 0.625rem;
17181
- width: 100%;
17182
- padding: 0.4375rem 0.5rem;
17183
- border: 0;
17184
- border-radius: 0.375rem;
17185
- background: transparent;
17186
- color: var(--text-secondary);
17187
- font-size: 0.75rem;
17188
- font-family: inherit;
17189
- text-align: left;
17190
- text-decoration: none;
17191
- cursor: pointer;
17192
- transition: background-color var(--mint-transition), color var(--mint-transition);
17193
- }
17194
- .mint-plugin-switcher__install:hover {
17195
- background: var(--bg-hover);
17196
- color: var(--text-primary);
18021
+ margin-bottom: 0.5rem;
17197
18022
  }
17198
- .mint-plugin-switcher__install svg {
17199
- width: 0.8125rem;
17200
- height: 0.8125rem;
18023
+ .mint-reagent-editor__generator-inputs > * {
18024
+ flex: 1;
18025
+ min-width: 0;
17201
18026
  }
17202
- .mint-mobile-support-gate {
17203
- box-sizing: border-box;
18027
+ /* Ensure all child controls fill their parent and can shrink */
18028
+ .mint-reagent-editor .mint-number-input {
17204
18029
  width: 100%;
17205
- max-width: 100vw;
17206
- min-height: 100vh;
17207
- display: grid;
17208
- place-items: center;
17209
- padding: 1.5rem;
17210
- overflow-x: hidden;
17211
- background: var(--bg-primary, #f8fafc);
17212
- color: var(--text-primary, #0f172a);
18030
+ min-width: 0;
17213
18031
  }
17214
- .mint-mobile-support-gate *,
17215
- .mint-mobile-support-gate *::before,
17216
- .mint-mobile-support-gate *::after {
17217
- box-sizing: border-box;
18032
+ .mint-reagent-editor .mint-number-input__input {
18033
+ min-width: 0;
18034
+ width: 0;
18035
+ flex: 1;
17218
18036
  }
17219
- .mint-mobile-support-gate__panel {
17220
- width: 28rem;
17221
- max-width: calc(100vw - 3rem);
17222
- display: grid;
17223
- gap: 1rem;
17224
- padding: 1.5rem;
17225
- border: 1px solid var(--border-color, #e2e8f0);
17226
- border-radius: 0.5rem;
17227
- background: var(--bg-secondary, #ffffff);
17228
- box-shadow: var(--shadow-md, 0 10px 30px rgb(15 23 42 / 0.08));
18037
+ .mint-reagent-editor .mint-number-input:focus-within {
18038
+ border-color: var(--reagent-color, var(--color-primary));
18039
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
17229
18040
  }
17230
- .mint-mobile-support-gate__mark {
17231
- width: 3rem;
17232
- height: 3rem;
17233
- display: inline-flex;
18041
+ .mint-reagent-editor__presets {
18042
+ display: flex;
18043
+ gap: 0.375rem;
18044
+ }
18045
+ .mint-reagent-editor__preset-btn {
18046
+ flex: 1;
18047
+ display: flex;
17234
18048
  align-items: center;
17235
18049
  justify-content: center;
17236
- border: 1px solid color-mix(in srgb, var(--color-primary, #4f46e5) 22%, transparent);
17237
- border-radius: 0.5rem;
17238
- background: color-mix(in srgb, var(--color-primary, #4f46e5) 10%, transparent);
17239
- color: var(--color-primary, #4f46e5);
17240
- }
17241
- .mint-mobile-support-gate__icon {
17242
- width: 1.5rem;
17243
- height: 1.5rem;
17244
- }
17245
- .mint-mobile-support-gate__copy {
17246
- min-width: 0;
17247
- display: grid;
17248
- gap: 0.5rem;
17249
- }
17250
- .mint-mobile-support-gate__eyebrow {
17251
- margin: 0;
17252
- color: var(--text-muted, #64748b);
18050
+ height: 1.75rem;
18051
+ font-family: 'Fira Code', monospace;
17253
18052
  font-size: 0.75rem;
17254
- font-weight: 700;
17255
- letter-spacing: 0;
17256
- line-height: 1.3;
17257
- text-transform: uppercase;
18053
+ font-weight: 500;
18054
+ color: var(--text-secondary);
18055
+ background-color: var(--bg-secondary);
18056
+ border: 1px solid var(--border-color);
18057
+ border-radius: var(--radius-sm);
18058
+ cursor: pointer;
18059
+ transition: all 0.12s ease;
17258
18060
  }
17259
- .mint-mobile-support-gate__title {
17260
- margin: 0;
17261
- color: var(--text-primary, #0f172a);
17262
- font-size: 1.35rem;
17263
- font-weight: 700;
17264
- letter-spacing: 0;
17265
- line-height: 1.2;
17266
- overflow-wrap: anywhere;
18061
+ .mint-reagent-editor__preset-btn:hover {
18062
+ color: var(--reagent-color, var(--color-primary));
18063
+ border-color: var(--reagent-color, var(--color-primary));
18064
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 8%, transparent);
17267
18065
  }
17268
- .mint-mobile-support-gate__message {
17269
- margin: 0;
17270
- color: var(--text-secondary, #475569);
17271
- font-size: 0.95rem;
17272
- line-height: 1.55;
17273
- overflow-wrap: anywhere;
18066
+ .mint-reagent-editor__preset-btn:active {
18067
+ transform: scale(0.96);
17274
18068
  }
17275
- .mint-mobile-support-gate__hint {
17276
- min-width: 0;
18069
+ /* Manual entry */
18070
+ .mint-reagent-editor__manual {
17277
18071
  display: flex;
17278
- align-items: flex-start;
17279
- gap: 0.625rem;
17280
- padding: 0.75rem;
17281
- border: 1px solid var(--border-color, #e2e8f0);
17282
- border-radius: 0.5rem;
17283
- background: var(--bg-tertiary, #f1f5f9);
17284
- color: var(--text-secondary, #475569);
17285
- font-size: 0.875rem;
17286
- line-height: 1.45;
17287
- overflow-wrap: anywhere;
17288
- }
17289
- .mint-mobile-support-gate__hint-icon {
17290
- width: 1rem;
17291
- height: 1rem;
17292
- flex: 0 0 auto;
17293
- margin-top: 0.125rem;
17294
- color: var(--color-primary, #4f46e5);
18072
+ align-items: center;
18073
+ gap: 0.375rem;
18074
+ margin-bottom: 0.625rem;
17295
18075
  }
17296
- @media (max-width: 480px) {
17297
- .mint-mobile-support-gate {
17298
- padding: 1rem;
17299
- }
17300
-
17301
- .mint-mobile-support-gate__panel {
17302
- max-width: calc(100vw - 2rem);
17303
- padding: 1.25rem;
17304
- }
17305
-
17306
- .mint-mobile-support-gate__title {
17307
- font-size: 1.25rem;
17308
- }
18076
+ .mint-reagent-editor__manual .mint-number-input {
18077
+ flex: 1;
18078
+ width: 0; /* flex-basis override so flex: 1 controls sizing */
17309
18079
  }
17310
- /* PluginIcon — BEM. Renders a plugin's icon inside a sized chip with two
17311
- visual variants. Tintable via `--mint-plugin-icon-tone` custom property. */
17312
- .mint-plugin-icon {
17313
- display: inline-flex;
18080
+ .mint-reagent-editor__add-btn {
18081
+ display: flex;
17314
18082
  align-items: center;
17315
18083
  justify-content: center;
18084
+ width: var(--form-height-sm);
18085
+ height: var(--form-height-sm);
17316
18086
  flex-shrink: 0;
17317
- border-radius: var(--radius-md, 0.5rem);
17318
- overflow: hidden;
17319
- }
17320
- /* Sizes */
17321
- .mint-plugin-icon--sm { width: 1.5rem; height: 1.5rem; }
17322
- .mint-plugin-icon--md { width: 2rem; height: 2rem; }
17323
- .mint-plugin-icon--topbar { width: 2.25rem; height: 2.25rem; }
17324
- .mint-plugin-icon--lg { width: 3rem; height: 3rem; border-radius: 0.75rem; }
17325
- /* Variants — `--mint-plugin-icon-tone` falls back to --color-primary */
17326
- .mint-plugin-icon--solid {
17327
- background-color: var(--mint-plugin-icon-tone, var(--color-primary));
18087
+ border-radius: var(--radius);
18088
+ background-color: var(--reagent-color, var(--color-primary));
17328
18089
  color: white;
18090
+ border: none;
18091
+ cursor: pointer;
18092
+ transition: filter 0.15s ease, transform 0.1s ease;
17329
18093
  }
17330
- .mint-plugin-icon--tinted {
17331
- background-color: color-mix(in srgb, var(--mint-plugin-icon-tone, var(--color-primary)) 12%, transparent);
17332
- color: var(--mint-plugin-icon-tone, var(--color-primary));
18094
+ .mint-reagent-editor__add-btn:hover:not(:disabled) {
18095
+ filter: brightness(0.88);
17333
18096
  }
17334
- /* Inner svg/img — sized to ~62% of chip */
17335
- .mint-plugin-icon--sm .mint-plugin-icon__svg,
17336
- .mint-plugin-icon--sm .mint-plugin-icon__img { width: 0.9375rem; height: 0.9375rem; }
17337
- .mint-plugin-icon--md .mint-plugin-icon__svg,
17338
- .mint-plugin-icon--md .mint-plugin-icon__img { width: 1.125rem; height: 1.125rem; }
17339
- .mint-plugin-icon--topbar .mint-plugin-icon__svg,
17340
- .mint-plugin-icon--topbar .mint-plugin-icon__img { width: 1.25rem; height: 1.25rem; }
17341
- .mint-plugin-icon--lg .mint-plugin-icon__svg,
17342
- .mint-plugin-icon--lg .mint-plugin-icon__img { width: 1.5rem; height: 1.5rem; }
17343
- .mint-plugin-icon__img {
17344
- object-fit: contain;
18097
+ .mint-reagent-editor__add-btn:active:not(:disabled) {
18098
+ transform: scale(0.92);
17345
18099
  }
17346
- .mint-plugin-icon .mint-plugin-icon__svg--structured {
17347
- width: 100%;
17348
- height: 100%;
18100
+ .mint-reagent-editor__add-btn:disabled {
18101
+ opacity: var(--mint-disabled-opacity);
18102
+ cursor: not-allowed;
17349
18103
  }
17350
- /* ReagentEditor Component Styles */
17351
- .mint-reagent-editor {
17352
- display: flex;
17353
- flex-direction: column;
17354
- background-color: var(--bg-secondary);
17355
- border-radius: var(--radius-lg);
18104
+ /* Level table */
18105
+ .mint-reagent-editor__table {
17356
18106
  border: 1px solid var(--border-color);
17357
- border-top: 3px solid var(--reagent-color, var(--color-primary));
18107
+ border-radius: var(--radius);
17358
18108
  overflow: hidden;
18109
+ max-height: 14rem;
18110
+ display: flex;
18111
+ flex-direction: column;
17359
18112
  }
17360
- /* Sections */
17361
- .mint-reagent-editor__section {
17362
- padding: 0.875rem 1rem;
17363
- border-bottom: 1px solid var(--border-color);
18113
+ .mint-reagent-editor__table-body {
18114
+ flex: 1;
18115
+ overflow-y: auto;
18116
+ scrollbar-width: thin;
18117
+ scrollbar-color: var(--scrollbar-thumb) transparent;
17364
18118
  }
17365
- .mint-reagent-editor__section-header {
18119
+ .mint-reagent-editor__table-header {
17366
18120
  display: flex;
17367
18121
  align-items: center;
17368
- gap: 0.375rem;
18122
+ padding: 0.375rem 0.5rem;
18123
+ background-color: var(--bg-tertiary);
18124
+ border-bottom: 1px solid var(--border-color);
18125
+ }
18126
+ .mint-reagent-editor__table-header .mint-reagent-editor__table-col {
17369
18127
  font-size: 0.6875rem;
17370
18128
  font-weight: 600;
17371
18129
  text-transform: uppercase;
17372
- letter-spacing: 0.05em;
18130
+ letter-spacing: 0.03em;
17373
18131
  color: var(--text-muted);
17374
- margin-bottom: 0.75rem;
17375
18132
  }
17376
- .mint-reagent-editor__section-icon {
17377
- width: 0.875rem;
17378
- height: 0.875rem;
18133
+ .mint-reagent-editor__table-row {
18134
+ display: flex;
18135
+ align-items: center;
18136
+ padding: 0.25rem 0.5rem;
18137
+ border-bottom: 1px solid var(--border-color);
18138
+ border-left: 2px solid transparent;
18139
+ transition: background-color 0.1s ease, border-left-color 0.1s ease;
18140
+ }
18141
+ .mint-reagent-editor__table-row:last-child {
18142
+ border-bottom: none;
18143
+ }
18144
+ .mint-reagent-editor__table-row:hover {
18145
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 5%, var(--bg-secondary));
18146
+ border-left-color: var(--reagent-color, var(--color-primary));
18147
+ }
18148
+ .mint-reagent-editor__table-col--level {
18149
+ flex: 1;
18150
+ min-width: 0;
18151
+ display: flex;
18152
+ align-items: baseline;
18153
+ gap: 0.25rem;
18154
+ }
18155
+ .mint-reagent-editor__table-col--reps {
18156
+ width: 5.5rem;
17379
18157
  flex-shrink: 0;
17380
- color: var(--reagent-color, var(--color-primary));
17381
- opacity: 0.7;
17382
18158
  }
17383
- /* Identity */
17384
- .mint-reagent-editor__identity {
18159
+ .mint-reagent-editor__table-col--action {
18160
+ width: 1.75rem;
18161
+ flex-shrink: 0;
18162
+ display: flex;
18163
+ justify-content: center;
18164
+ }
18165
+ .mint-reagent-editor__level-value {
18166
+ font-family: 'Fira Code', monospace;
18167
+ font-size: 0.8125rem;
18168
+ font-weight: 500;
18169
+ color: var(--text-primary);
18170
+ overflow: hidden;
18171
+ text-overflow: ellipsis;
18172
+ white-space: nowrap;
18173
+ }
18174
+ .mint-reagent-editor__level-unit {
18175
+ font-family: 'Fira Code', monospace;
18176
+ font-size: 0.6875rem;
18177
+ color: var(--text-muted);
18178
+ }
18179
+ .mint-reagent-editor__remove-level-btn {
18180
+ display: flex;
18181
+ align-items: center;
18182
+ justify-content: center;
18183
+ width: 1.375rem;
18184
+ height: 1.375rem;
18185
+ border-radius: var(--radius-sm);
18186
+ background: transparent;
18187
+ color: var(--text-muted);
18188
+ border: none;
18189
+ cursor: pointer;
18190
+ opacity: 0;
18191
+ transition: opacity 0.1s ease, color 0.1s ease, background-color 0.1s ease;
18192
+ }
18193
+ .mint-reagent-editor__table-row:hover .mint-reagent-editor__remove-level-btn {
18194
+ opacity: 1;
18195
+ }
18196
+ .mint-reagent-editor__remove-level-btn:hover {
18197
+ color: var(--mint-error);
18198
+ background-color: var(--mint-error-bg);
18199
+ }
18200
+ /* Empty state */
18201
+ .mint-reagent-editor__empty {
18202
+ text-align: center;
18203
+ padding: 1.25rem 0.75rem;
18204
+ font-size: 0.8125rem;
18205
+ color: var(--text-muted);
18206
+ font-style: italic;
18207
+ }
18208
+ /* Position summary — reagent-tinted background */
18209
+ .mint-reagent-editor__summary {
17385
18210
  display: flex;
17386
18211
  align-items: center;
18212
+ justify-content: center;
17387
18213
  gap: 0.625rem;
18214
+ padding: 0.625rem 1rem;
18215
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 6%, var(--bg-tertiary));
18216
+ border-bottom: 1px solid var(--border-color);
17388
18217
  }
17389
- .mint-reagent-editor__color-wrapper {
17390
- position: relative;
18218
+ .mint-reagent-editor__summary-item {
18219
+ display: flex;
18220
+ align-items: baseline;
18221
+ gap: 0.25rem;
18222
+ }
18223
+ .mint-reagent-editor__summary-value {
18224
+ font-family: 'Fira Code', monospace;
18225
+ font-size: 0.8125rem;
18226
+ font-weight: 600;
18227
+ color: var(--reagent-color, var(--text-primary));
18228
+ }
18229
+ .mint-reagent-editor__summary-label {
18230
+ font-size: 0.6875rem;
18231
+ color: var(--text-muted);
18232
+ }
18233
+ .mint-reagent-editor__summary-dot {
18234
+ width: 3px;
18235
+ height: 3px;
18236
+ border-radius: 50%;
18237
+ background-color: var(--reagent-color, var(--text-muted));
18238
+ opacity: 0.5;
17391
18239
  flex-shrink: 0;
17392
- cursor: pointer;
17393
18240
  }
17394
- .mint-reagent-editor__color-input {
17395
- position: absolute;
17396
- inset: 0;
18241
+ /* Overflow warning */
18242
+ .mint-reagent-editor__summary--overflow {
18243
+ background-color: var(--mint-warning-bg);
18244
+ }
18245
+ .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-value {
18246
+ color: var(--mint-warning-hover);
18247
+ }
18248
+ .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-dot {
18249
+ background-color: var(--mint-warning);
18250
+ }
18251
+ .mint-reagent-editor__summary-warning {
18252
+ font-size: 0.6875rem;
18253
+ font-weight: 600;
18254
+ color: var(--mint-warning-hover);
18255
+ margin-left: 0.25rem;
18256
+ }
18257
+ /* Footer */
18258
+ .mint-reagent-editor__footer {
18259
+ padding: 0.75rem 1rem;
18260
+ }
18261
+ .mint-reagent-editor__footer .mint-button {
17397
18262
  width: 100%;
17398
- height: 100%;
17399
- opacity: 0;
17400
- cursor: pointer;
17401
18263
  }
17402
- .mint-reagent-editor__color-swatch {
17403
- display: block;
17404
- width: 1.75rem;
17405
- height: 1.75rem;
17406
- border-radius: var(--radius);
17407
- box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--border-color);
17408
- transition: box-shadow 0.15s ease;
18264
+ /* Unified picker: search-first header, Finder tree, metadata preview and receipt. */
18265
+ .mint-picker-dialog {
18266
+ width: 800px;
17409
18267
  }
17410
- .mint-reagent-editor__color-wrapper:hover .mint-reagent-editor__color-swatch {
17411
- box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--reagent-color, var(--border-color));
18268
+ .mint-picker-dialog .mint-file-browser-dialog__header {
18269
+ padding: 15px 18px;
18270
+ gap: 12px;
17412
18271
  }
17413
- .mint-reagent-editor__name-input {
18272
+ .mint-picker-dialog .mint-file-browser-dialog__footer {
18273
+ padding: 12px 18px;
18274
+ background: var(--bg-primary);
18275
+ }
18276
+ .mint-picker__search {
18277
+ display: flex;
18278
+ align-items: center;
18279
+ position: relative;
17414
18280
  flex: 1;
17415
18281
  min-width: 0;
17416
- background: transparent;
17417
- border: none;
17418
- outline: none;
17419
- font-family: inherit;
17420
- font-size: 0.9375rem;
17421
- font-weight: 600;
17422
- color: var(--text-primary);
17423
- padding: 0.25rem 0;
17424
- border-bottom: 1px solid transparent;
17425
- transition: border-color 0.15s ease;
17426
18282
  }
17427
- .mint-reagent-editor__name-input::placeholder {
18283
+ .mint-picker__search > svg {
18284
+ position: absolute;
18285
+ left: 12px;
18286
+ width: 16px;
18287
+ height: 16px;
17428
18288
  color: var(--text-muted);
17429
- font-weight: 400;
18289
+ pointer-events: none;
17430
18290
  }
17431
- .mint-reagent-editor__name-input:focus {
17432
- border-bottom-color: var(--reagent-color, var(--color-primary));
18291
+ .mint-picker__search .mint-input {
18292
+ width: 100%;
18293
+ padding-left: 36px;
18294
+ padding-right: 36px;
18295
+ background: var(--bg-primary);
18296
+ font-size: 13px;
17433
18297
  }
17434
- /* Fields & layout */
17435
- .mint-reagent-editor__field {
17436
- margin-bottom: 0.625rem;
18298
+ .mint-picker__search > kbd {
18299
+ position: absolute;
18300
+ right: 12px;
18301
+ font-family: var(--font-mono);
18302
+ font-size: 11px;
18303
+ border: 1px solid var(--border-color);
18304
+ border-radius: var(--radius-sm);
18305
+ padding: 1px 5px;
18306
+ color: var(--text-secondary);
18307
+ background: var(--bg-secondary);
17437
18308
  }
17438
- .mint-reagent-editor__field:last-child {
17439
- margin-bottom: 0;
18309
+ .mint-picker__sources {
18310
+ position: relative;
18311
+ display: flex;
18312
+ align-items: center;
18313
+ gap: 2px;
18314
+ background: var(--bg-primary);
18315
+ padding: 2px;
18316
+ border-radius: var(--radius-md);
18317
+ flex-shrink: 0;
17440
18318
  }
17441
- .mint-reagent-editor__field--flex {
18319
+ .mint-picker {
17442
18320
  display: flex;
17443
18321
  flex-direction: column;
17444
- gap: 0.25rem;
17445
- flex: 1 1 0;
17446
- width: 0;
17447
- min-width: 0;
18322
+ min-height: 0;
17448
18323
  }
17449
- .mint-reagent-editor__position-row {
18324
+ .mint-picker__pathbar {
17450
18325
  display: flex;
17451
- gap: 0.625rem;
17452
- width: 100%;
18326
+ align-items: center;
18327
+ gap: 6px;
18328
+ padding: 7px 18px;
18329
+ border-block: 1px solid var(--border-color);
18330
+ background: var(--bg-primary);
18331
+ flex-shrink: 0;
17453
18332
  }
17454
- .mint-reagent-editor .mint-select {
17455
- width: 100%;
18333
+ .mint-picker__breadcrumbs {
18334
+ display: flex;
18335
+ align-items: center;
17456
18336
  min-width: 0;
18337
+ flex: 1;
18338
+ overflow-x: auto;
18339
+ color: var(--text-muted);
17457
18340
  }
17458
- .mint-reagent-editor__label {
17459
- font-size: 0.75rem;
17460
- font-weight: 500;
17461
- color: var(--text-secondary);
18341
+ .mint-picker__breadcrumbs .mint-button {
18342
+ font-family: var(--font-mono);
18343
+ font-size: 11px;
18344
+ padding-inline: 5px;
18345
+ flex-shrink: 0;
17462
18346
  }
17463
- .mint-reagent-editor__inline-input {
17464
- box-sizing: border-box;
17465
- width: 100%;
17466
- min-height: var(--form-height-sm);
17467
- padding: 0 0.625rem;
17468
- font-family: 'Fira Code', monospace;
17469
- font-size: 0.8rem;
17470
- font-weight: 500;
17471
- color: var(--text-primary);
17472
- background-color: var(--bg-primary);
17473
- border: 1px solid var(--border-color);
17474
- border-radius: var(--radius);
17475
- outline: none;
17476
- text-transform: uppercase;
17477
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
18347
+ .mint-picker__scope {
18348
+ font-size: 11px;
18349
+ flex-shrink: 0;
17478
18350
  }
17479
- .mint-reagent-editor__inline-input::placeholder {
17480
- text-transform: none;
18351
+ .mint-picker__scope[aria-pressed='true'] {
18352
+ color: var(--color-primary);
18353
+ background: var(--color-primary-soft);
17481
18354
  }
17482
- .mint-reagent-editor__inline-input:focus {
17483
- border-color: var(--reagent-color, var(--color-primary));
17484
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
18355
+ .mint-picker__workspace {
18356
+ display: grid;
18357
+ grid-template-columns: minmax(0, 1fr) 208px;
18358
+ height: 344px;
18359
+ min-height: 0;
17485
18360
  }
17486
- .mint-reagent-editor__inline-input--error {
17487
- border-color: var(--mint-error);
18361
+ .mint-picker__tree {
18362
+ padding: 7px;
18363
+ background: var(--bg-primary);
18364
+ overflow-y: auto;
18365
+ min-height: 0;
18366
+ min-width: 0;
17488
18367
  }
17489
- .mint-reagent-editor__inline-input--error:focus {
17490
- border-color: var(--mint-error);
17491
- box-shadow: var(--focus-ring-error);
18368
+ .mint-picker__row {
18369
+ display: flex;
18370
+ align-items: center;
18371
+ gap: 6px;
18372
+ min-height: 40px;
18373
+ padding: 5px 10px 5px calc(2px + var(--picker-depth, 0) * 14px);
18374
+ border-radius: var(--radius-md);
18375
+ cursor: pointer;
18376
+ margin-bottom: 2px;
18377
+ border: 1px solid transparent;
17492
18378
  }
17493
- /* Inline field validation error */
17494
- .mint-reagent-editor__field-error {
17495
- grid-column: 2;
17496
- font-size: 0.6875rem;
17497
- color: var(--mint-error);
17498
- line-height: 1.2;
18379
+ .mint-picker__row:hover {
18380
+ background: var(--bg-hover);
17499
18381
  }
17500
- /* Unit select in section header — uses reagent color */
17501
- .mint-reagent-editor__unit-select {
17502
- margin-left: auto;
17503
- padding: 0.125rem 0.375rem;
17504
- font-family: 'Fira Code', monospace;
17505
- font-size: 0.6875rem;
17506
- font-weight: 500;
17507
- color: var(--reagent-color, var(--color-primary));
17508
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 10%, transparent);
17509
- border: none;
17510
- border-radius: var(--radius-sm);
17511
- cursor: pointer;
18382
+ .mint-picker__row--selected,
18383
+ .mint-picker__row--selected:hover {
18384
+ background: var(--color-primary-soft);
18385
+ border-color: color-mix(in srgb, var(--color-primary) 40%, transparent);
18386
+ color: var(--text-primary);
18387
+ }
18388
+ .mint-picker__row:focus-visible {
17512
18389
  outline: none;
17513
- transition: background-color 0.15s ease;
18390
+ box-shadow: inset 0 0 0 2px var(--color-primary);
17514
18391
  }
17515
- .mint-reagent-editor__unit-select:hover {
17516
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 18%, transparent);
18392
+ .mint-picker__row--child {
18393
+ min-height: 30px;
18394
+ padding-block: 1px;
17517
18395
  }
17518
- /* Dilution generator */
17519
- .mint-reagent-editor__generator {
17520
- background-color: var(--bg-primary);
17521
- border: 1px solid var(--border-color);
17522
- border-radius: var(--radius);
17523
- padding: 0.75rem;
17524
- margin-bottom: 0.625rem;
17525
- overflow: hidden;
18396
+ .mint-picker__disclosure {
18397
+ flex-shrink: 0;
17526
18398
  }
17527
- .mint-reagent-editor__generator-inputs {
17528
- display: flex;
17529
- gap: 0.625rem;
17530
- margin-bottom: 0.5rem;
18399
+ .mint-picker__disclosure-spacer {
18400
+ width: var(--form-height-sm);
18401
+ flex-shrink: 0;
17531
18402
  }
17532
- .mint-reagent-editor__generator-inputs > * {
18403
+ .mint-picker__disclosure svg {
18404
+ width: 10px;
18405
+ height: 10px;
18406
+ transition: transform 120ms;
18407
+ }
18408
+ .mint-picker__chevron--open {
18409
+ transform: rotate(90deg);
18410
+ }
18411
+ .mint-picker__node-icon {
18412
+ width: 16px;
18413
+ height: 16px;
18414
+ flex-shrink: 0;
18415
+ color: var(--text-muted);
18416
+ }
18417
+ .mint-picker__row--selected .mint-picker__node-icon {
18418
+ color: var(--color-primary);
18419
+ }
18420
+ .mint-picker__row-name {
17533
18421
  flex: 1;
17534
18422
  min-width: 0;
18423
+ display: flex;
18424
+ flex-direction: column;
18425
+ gap: 3px;
17535
18426
  }
17536
- /* Ensure all child controls fill their parent and can shrink */
17537
- .mint-reagent-editor .mint-number-input {
17538
- width: 100%;
17539
- min-width: 0;
18427
+ .mint-picker__name {
18428
+ overflow: hidden;
18429
+ text-overflow: ellipsis;
18430
+ white-space: nowrap;
18431
+ font-size: 13px;
17540
18432
  }
17541
- .mint-reagent-editor .mint-number-input__input {
17542
- min-width: 0;
17543
- width: 0;
17544
- flex: 1;
18433
+ .mint-picker__row--selected .mint-picker__name {
18434
+ font-weight: 600;
17545
18435
  }
17546
- .mint-reagent-editor .mint-number-input:focus-within {
17547
- border-color: var(--reagent-color, var(--color-primary));
17548
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
18436
+ .mint-picker__name mark {
18437
+ background: color-mix(in srgb, var(--mint-warning) 32%, transparent);
18438
+ color: inherit;
18439
+ border-radius: 2px;
17549
18440
  }
17550
- .mint-reagent-editor__presets {
18441
+ .mint-picker__formats {
17551
18442
  display: flex;
17552
- gap: 0.375rem;
18443
+ flex-wrap: wrap;
18444
+ gap: 4px;
17553
18445
  }
17554
- .mint-reagent-editor__preset-btn {
17555
- flex: 1;
17556
- display: flex;
17557
- align-items: center;
17558
- justify-content: center;
17559
- height: 1.75rem;
17560
- font-family: 'Fira Code', monospace;
17561
- font-size: 0.75rem;
17562
- font-weight: 500;
18446
+ .mint-picker__formats > span {
17563
18447
  color: var(--text-secondary);
17564
- background-color: var(--bg-secondary);
18448
+ background: var(--bg-secondary);
18449
+ padding: 1px 4px;
17565
18450
  border: 1px solid var(--border-color);
17566
18451
  border-radius: var(--radius-sm);
17567
- cursor: pointer;
17568
- transition: all 0.12s ease;
17569
- }
17570
- .mint-reagent-editor__preset-btn:hover {
17571
- color: var(--reagent-color, var(--color-primary));
17572
- border-color: var(--reagent-color, var(--color-primary));
17573
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 8%, transparent);
17574
- }
17575
- .mint-reagent-editor__preset-btn:active {
17576
- transform: scale(0.96);
18452
+ font: 10px var(--font-mono);
17577
18453
  }
17578
- /* Manual entry */
17579
- .mint-reagent-editor__manual {
18454
+ .mint-picker__row-meta {
17580
18455
  display: flex;
17581
- align-items: center;
17582
- gap: 0.375rem;
17583
- margin-bottom: 0.625rem;
18456
+ align-items: flex-end;
18457
+ flex-direction: column;
18458
+ gap: 3px;
18459
+ flex-shrink: 0;
18460
+ font: 10px var(--font-mono);
18461
+ color: var(--text-muted);
17584
18462
  }
17585
- .mint-reagent-editor__manual .mint-number-input {
17586
- flex: 1;
17587
- width: 0; /* flex-basis override so flex: 1 controls sizing */
18463
+ .mint-picker__partial {
18464
+ background: var(--mint-warning-bg);
18465
+ color: var(--mint-warning-text);
18466
+ padding: 2px 5px;
18467
+ border-radius: var(--radius-sm);
17588
18468
  }
17589
- .mint-reagent-editor__add-btn {
17590
- display: flex;
17591
- align-items: center;
17592
- justify-content: center;
17593
- width: var(--form-height-sm);
17594
- height: var(--form-height-sm);
17595
- flex-shrink: 0;
17596
- border-radius: var(--radius);
17597
- background-color: var(--reagent-color, var(--color-primary));
17598
- color: white;
17599
- border: none;
17600
- cursor: pointer;
17601
- transition: filter 0.15s ease, transform 0.1s ease;
18469
+ .mint-picker__parent-name {
18470
+ font: 10px var(--font-mono);
18471
+ color: var(--text-muted);
18472
+ overflow: hidden;
18473
+ text-overflow: ellipsis;
18474
+ white-space: nowrap;
17602
18475
  }
17603
- .mint-reagent-editor__add-btn:hover:not(:disabled) {
17604
- filter: brightness(0.88);
18476
+ .mint-picker__row--unreadable,
18477
+ .mint-picker__row--unreadable:hover {
18478
+ cursor: not-allowed;
18479
+ color: var(--text-muted);
18480
+ background: repeating-linear-gradient(
18481
+ 135deg,
18482
+ transparent,
18483
+ transparent 5px,
18484
+ color-mix(in srgb, var(--text-muted) 6%, transparent) 5px,
18485
+ color-mix(in srgb, var(--text-muted) 6%, transparent) 10px
18486
+ );
17605
18487
  }
17606
- .mint-reagent-editor__add-btn:active:not(:disabled) {
17607
- transform: scale(0.92);
18488
+ .mint-picker__row--unreadable .mint-picker__name {
18489
+ text-decoration: line-through;
17608
18490
  }
17609
- .mint-reagent-editor__add-btn:disabled {
17610
- opacity: var(--mint-disabled-opacity);
17611
- cursor: not-allowed;
18491
+ .mint-picker__branch-error {
18492
+ padding: 6px 12px;
18493
+ color: var(--mint-error);
18494
+ font-size: 12px;
17612
18495
  }
17613
- /* Level table */
17614
- .mint-reagent-editor__table {
17615
- border: 1px solid var(--border-color);
17616
- border-radius: var(--radius);
17617
- overflow: hidden;
17618
- max-height: 14rem;
18496
+ .mint-picker__skeleton {
17619
18497
  display: flex;
17620
18498
  flex-direction: column;
18499
+ gap: 8px;
18500
+ padding: 8px;
17621
18501
  }
17622
- .mint-reagent-editor__table-body {
17623
- flex: 1;
17624
- overflow-y: auto;
17625
- scrollbar-width: thin;
17626
- scrollbar-color: var(--scrollbar-thumb) transparent;
17627
- }
17628
- .mint-reagent-editor__table-header {
18502
+ .mint-picker__empty {
17629
18503
  display: flex;
18504
+ flex-direction: column;
18505
+ justify-content: center;
17630
18506
  align-items: center;
17631
- padding: 0.375rem 0.5rem;
17632
- background-color: var(--bg-tertiary);
17633
- border-bottom: 1px solid var(--border-color);
18507
+ gap: 12px;
18508
+ min-height: 180px;
18509
+ padding: 24px;
18510
+ font-size: 12px;
18511
+ color: var(--text-secondary);
18512
+ text-align: center;
17634
18513
  }
17635
- .mint-reagent-editor__table-header .mint-reagent-editor__table-col {
17636
- font-size: 0.6875rem;
18514
+ .mint-picker__preview {
18515
+ border-left: 1px solid var(--border-color);
18516
+ display: flex;
18517
+ flex-direction: column;
18518
+ min-height: 0;
18519
+ background: var(--bg-secondary);
18520
+ }
18521
+ .mint-picker__preview-heading {
18522
+ padding: 10px 13px;
18523
+ border-bottom: 1px solid var(--border-color);
18524
+ font-size: 10px;
17637
18525
  font-weight: 600;
17638
18526
  text-transform: uppercase;
17639
- letter-spacing: 0.03em;
18527
+ letter-spacing: 0.1em;
17640
18528
  color: var(--text-muted);
17641
18529
  }
17642
- .mint-reagent-editor__table-row {
18530
+ .mint-picker__preview-content {
17643
18531
  display: flex;
17644
- align-items: center;
17645
- padding: 0.25rem 0.5rem;
17646
- border-bottom: 1px solid var(--border-color);
17647
- border-left: 2px solid transparent;
17648
- transition: background-color 0.1s ease, border-left-color 0.1s ease;
17649
- }
17650
- .mint-reagent-editor__table-row:last-child {
17651
- border-bottom: none;
17652
- }
17653
- .mint-reagent-editor__table-row:hover {
17654
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 5%, var(--bg-secondary));
17655
- border-left-color: var(--reagent-color, var(--color-primary));
17656
- }
17657
- .mint-reagent-editor__table-col--level {
18532
+ flex-direction: column;
18533
+ gap: 10px;
18534
+ padding: 14px 13px;
18535
+ overflow-y: auto;
18536
+ min-height: 0;
17658
18537
  flex: 1;
17659
- min-width: 0;
17660
- display: flex;
17661
- align-items: baseline;
17662
- gap: 0.25rem;
17663
18538
  }
17664
- .mint-reagent-editor__table-col--reps {
17665
- width: 5.5rem;
18539
+ .mint-picker__preview-icon {
18540
+ display: grid;
18541
+ place-items: center;
18542
+ width: 52px;
18543
+ height: 52px;
17666
18544
  flex-shrink: 0;
18545
+ border-radius: 13px;
18546
+ background: linear-gradient(135deg, var(--color-primary), var(--color-purple));
18547
+ color: white;
18548
+ margin: 0 auto;
17667
18549
  }
17668
- .mint-reagent-editor__table-col--action {
17669
- width: 1.75rem;
17670
- flex-shrink: 0;
18550
+ .mint-picker__preview-icon svg {
18551
+ width: 26px;
18552
+ height: 26px;
18553
+ }
18554
+ .mint-picker__preview-name {
18555
+ font-size: 12px;
18556
+ text-align: center;
18557
+ overflow-wrap: anywhere;
18558
+ }
18559
+ .mint-picker__metadata {
17671
18560
  display: flex;
17672
- justify-content: center;
18561
+ flex-direction: column;
18562
+ gap: 7px;
18563
+ margin: 0;
18564
+ font-size: 11px;
17673
18565
  }
17674
- .mint-reagent-editor__level-value {
17675
- font-family: 'Fira Code', monospace;
17676
- font-size: 0.8125rem;
17677
- font-weight: 500;
17678
- color: var(--text-primary);
17679
- overflow: hidden;
17680
- text-overflow: ellipsis;
17681
- white-space: nowrap;
18566
+ .mint-picker__metadata > div {
18567
+ display: grid;
18568
+ grid-template-columns: 44px minmax(0, 1fr);
18569
+ gap: 5px;
17682
18570
  }
17683
- .mint-reagent-editor__level-unit {
17684
- font-family: 'Fira Code', monospace;
17685
- font-size: 0.6875rem;
18571
+ .mint-picker__metadata dt {
17686
18572
  color: var(--text-muted);
17687
18573
  }
17688
- .mint-reagent-editor__remove-level-btn {
17689
- display: flex;
17690
- align-items: center;
17691
- justify-content: center;
17692
- width: 1.375rem;
17693
- height: 1.375rem;
17694
- border-radius: var(--radius-sm);
17695
- background: transparent;
18574
+ .mint-picker__metadata dd {
18575
+ margin: 0;
18576
+ font: 10px/1.5 var(--font-mono);
18577
+ overflow-wrap: anywhere;
18578
+ }
18579
+ .mint-picker__ready {
18580
+ margin-top: auto;
18581
+ border: 1px solid var(--mint-success);
18582
+ border-radius: 999px;
18583
+ background: var(--mint-success-bg);
18584
+ color: var(--mint-success-hover);
18585
+ text-align: center;
18586
+ padding: 4px;
18587
+ font-size: 10px;
18588
+ }
18589
+ .mint-picker__preview-empty {
17696
18590
  color: var(--text-muted);
17697
- border: none;
17698
- cursor: pointer;
17699
- opacity: 0;
17700
- transition: opacity 0.1s ease, color 0.1s ease, background-color 0.1s ease;
18591
+ font-size: 12px;
18592
+ text-align: center;
18593
+ padding: 32px 16px;
17701
18594
  }
17702
- .mint-reagent-editor__table-row:hover .mint-reagent-editor__remove-level-btn {
17703
- opacity: 1;
18595
+ .mint-picker__skipped {
18596
+ background: var(--mint-warning-bg);
18597
+ color: var(--mint-warning-text);
18598
+ white-space: normal;
17704
18599
  }
17705
- .mint-reagent-editor__remove-level-btn:hover {
17706
- color: var(--mint-error);
17707
- background-color: var(--mint-error-bg);
18600
+ .mint-picker__exclusion {
18601
+ display: flex;
18602
+ flex-direction: column;
18603
+ gap: 4px;
18604
+ font-size: 11px;
18605
+ overflow-wrap: anywhere;
18606
+ padding-bottom: 8px;
18607
+ border-bottom: 1px solid var(--border-color);
17708
18608
  }
17709
- /* Empty state */
17710
- .mint-reagent-editor__empty {
17711
- text-align: center;
17712
- padding: 1.25rem 0.75rem;
17713
- font-size: 0.8125rem;
18609
+ .mint-picker__exclusion span {
17714
18610
  color: var(--text-muted);
17715
- font-style: italic;
17716
18611
  }
17717
- /* Position summary — reagent-tinted background */
17718
- .mint-reagent-editor__summary {
18612
+ .mint-picker__preview-error {
18613
+ display: flex;
18614
+ flex-direction: column;
18615
+ gap: 8px;
18616
+ font-size: 11px;
18617
+ color: var(--mint-error);
18618
+ }
18619
+ .mint-picker__footer {
17719
18620
  display: flex;
17720
18621
  align-items: center;
17721
- justify-content: center;
17722
- gap: 0.625rem;
17723
- padding: 0.625rem 1rem;
17724
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 6%, var(--bg-tertiary));
17725
- border-bottom: 1px solid var(--border-color);
18622
+ gap: 12px;
18623
+ width: 100%;
17726
18624
  }
17727
- .mint-reagent-editor__summary-item {
18625
+ .mint-picker__receipt {
17728
18626
  display: flex;
17729
- align-items: baseline;
17730
- gap: 0.25rem;
18627
+ align-items: center;
18628
+ gap: 6px;
18629
+ flex: 1;
18630
+ min-width: 0;
18631
+ flex-wrap: wrap;
18632
+ font-size: 11px;
18633
+ color: var(--text-secondary);
17731
18634
  }
17732
- .mint-reagent-editor__summary-value {
17733
- font-family: 'Fira Code', monospace;
17734
- font-size: 0.8125rem;
17735
- font-weight: 600;
17736
- color: var(--reagent-color, var(--text-primary));
18635
+ .mint-picker__receipt > span {
18636
+ overflow-wrap: anywhere;
17737
18637
  }
17738
- .mint-reagent-editor__summary-label {
17739
- font-size: 0.6875rem;
17740
- color: var(--text-muted);
18638
+ .mint-picker__badge {
18639
+ padding: 3px 7px;
18640
+ border-radius: var(--radius-sm);
18641
+ color: var(--color-primary);
18642
+ border: 1px solid color-mix(in srgb, var(--color-primary) 40%, transparent);
18643
+ background: var(--color-primary-soft);
18644
+ font: 10px var(--font-mono);
17741
18645
  }
17742
- .mint-reagent-editor__summary-dot {
17743
- width: 3px;
17744
- height: 3px;
17745
- border-radius: 50%;
17746
- background-color: var(--reagent-color, var(--text-muted));
17747
- opacity: 0.5;
18646
+ .mint-picker__actions {
18647
+ display: flex;
18648
+ align-items: center;
18649
+ gap: 8px;
17748
18650
  flex-shrink: 0;
17749
18651
  }
17750
- /* Overflow warning */
17751
- .mint-reagent-editor__summary--overflow {
17752
- background-color: var(--mint-warning-bg);
18652
+ .mint-picker__local-upload {
18653
+ display: flex;
18654
+ flex-direction: column;
18655
+ gap: 8px;
18656
+ padding: 12px 18px;
18657
+ flex-shrink: 0;
18658
+ color: var(--text-muted);
18659
+ font-size: 11px;
17753
18660
  }
17754
- .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-value {
17755
- color: var(--mint-warning-hover);
18661
+ .mint-picker__local-title {
18662
+ flex: 1;
17756
18663
  }
17757
- .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-dot {
17758
- background-color: var(--mint-warning);
18664
+ @media (max-width: 600px) {
18665
+ .mint-picker-dialog .mint-file-browser-dialog__header {
18666
+ padding: 10px;
18667
+ gap: 6px;
18668
+ flex-wrap: nowrap;
18669
+ }
18670
+ .mint-picker__search .mint-input {
18671
+ font-size: 12px;
18672
+ padding-right: 8px;
18673
+ }
18674
+ .mint-picker__search > kbd {
18675
+ display: none;
18676
+ }
18677
+ .mint-picker__pathbar {
18678
+ padding-inline: 8px;
18679
+ gap: 2px;
18680
+ }
18681
+ .mint-picker__workspace {
18682
+ grid-template-columns: minmax(0, 1fr);
18683
+ height: 390px;
18684
+ }
18685
+ .mint-picker__preview {
18686
+ display: none;
18687
+ }
18688
+ .mint-picker__workspace:has(.mint-picker__exclusion) {
18689
+ grid-template-columns: minmax(0, 1fr) 160px;
18690
+ }
18691
+ .mint-picker__workspace:has(.mint-picker__exclusion) .mint-picker__preview {
18692
+ display: flex;
18693
+ }
18694
+ .mint-picker__row {
18695
+ gap: 4px;
18696
+ padding-right: 5px;
18697
+ }
18698
+ .mint-picker__name {
18699
+ font-size: 12px;
18700
+ }
18701
+ .mint-picker__footer {
18702
+ align-items: stretch;
18703
+ flex-direction: column;
18704
+ gap: 8px;
18705
+ }
18706
+ .mint-picker__actions {
18707
+ justify-content: flex-end;
18708
+ }
18709
+ .mint-picker__receipt {
18710
+ min-height: 24px;
18711
+ }
17759
18712
  }
17760
- .mint-reagent-editor__summary-warning {
17761
- font-size: 0.6875rem;
17762
- font-weight: 600;
17763
- color: var(--mint-warning-hover);
17764
- margin-left: 0.25rem;
18713
+ @media (max-height: 600px) {
18714
+ .mint-picker {
18715
+ overflow-y: auto;
18716
+ }
18717
+ .mint-picker__workspace {
18718
+ min-height: 220px;
18719
+ }
17765
18720
  }
17766
- /* Footer */
17767
- .mint-reagent-editor__footer {
17768
- padding: 0.75rem 1rem;
18721
+ /* The source highlight slides between fixed-size SDK icon buttons. */
18722
+ .mint-picker__source-indicator {
18723
+ box-sizing: border-box;
18724
+ position: absolute;
18725
+ inset: 2px auto 2px 2px;
18726
+ width: 32px;
18727
+ border: 1px solid var(--border-color);
18728
+ border-radius: var(--radius-md);
18729
+ background: var(--bg-secondary);
18730
+ box-shadow: var(--shadow-sm);
18731
+ pointer-events: none;
18732
+ transform: translateX(calc(var(--picker-source-index, 0) * 34px));
18733
+ transition: transform 180ms ease-out;
17769
18734
  }
17770
- .mint-reagent-editor__footer .mint-button {
17771
- width: 100%;
18735
+ .mint-picker__sources .mint-icon-button {
18736
+ position: relative;
18737
+ width: 32px;
18738
+ height: 32px;
18739
+ }
18740
+ .mint-picker__sources .mint-icon-button[aria-pressed='true'] {
18741
+ color: var(--text-primary);
18742
+ background: transparent;
18743
+ }
18744
+ .mint-picker__source-panel {
18745
+ animation: mint-picker-source-in 180ms ease-out;
18746
+ }
18747
+ @keyframes mint-picker-source-in {
18748
+ from {
18749
+ opacity: 0;
18750
+ transform: translateY(4px);
18751
+ }
18752
+ to {
18753
+ opacity: 1;
18754
+ transform: translateY(0);
18755
+ }
18756
+ }
18757
+ @media (prefers-reduced-motion: reduce) {
18758
+ .mint-picker__source-indicator {
18759
+ transition: none;
18760
+ }
18761
+ .mint-picker__source-panel {
18762
+ animation: none;
18763
+ }
17772
18764
  }
17773
18765
  /*$vite$:1*/