@morscherlab/mint-sdk 1.2.0-beta.11 → 1.2.0-beta.13

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