@morscherlab/mint-sdk 1.0.38 → 1.0.41

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 (62) hide show
  1. package/dist/{ExperimentPopover-DEzCbTqo.js → ExperimentPopover-8A4Rhffp.js} +1 -1
  2. package/dist/{ExperimentPopover-mzmSfAUp.js → ExperimentPopover-BbPkIFsI.js} +8 -2
  3. package/dist/ExperimentPopover-BbPkIFsI.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-Bn0Hmg07.js → ExperimentSelectorModal-B2qek_YG.js} +91 -46
  5. package/dist/ExperimentSelectorModal-B2qek_YG.js.map +1 -0
  6. package/dist/{ExperimentSelectorModal-BAIlIybO.js → ExperimentSelectorModal-BwPbQN1g.js} +1 -1
  7. package/dist/__tests__/components/AutoGroupModal.preview.test.d.ts +1 -0
  8. package/dist/__tests__/composables/autoGroup/classKey.test.d.ts +1 -0
  9. package/dist/__tests__/composables/autoGroup/groupTree.test.d.ts +1 -0
  10. package/dist/__tests__/composables/autoGroup/tokenLength.test.d.ts +1 -0
  11. package/dist/components/index.js +3 -3
  12. package/dist/{components-Cyi0IfRl.js → components-CJ2--4Ex.js} +5606 -5592
  13. package/dist/components-CJ2--4Ex.js.map +1 -0
  14. package/dist/composables/autoGroup/classKey.d.ts +1 -0
  15. package/dist/composables/autoGroup/index.d.ts +2 -1
  16. package/dist/composables/autoGroup/replicatePreGroup.d.ts +10 -12
  17. package/dist/composables/autoGroup/tokenLength.d.ts +17 -0
  18. package/dist/composables/index.js +2 -2
  19. package/dist/composables/useAutoGroup.d.ts +2 -0
  20. package/dist/{composables-CFSn4NN3.js → composables-DrE6OcZZ.js} +2 -2
  21. package/dist/{composables-CFSn4NN3.js.map → composables-DrE6OcZZ.js.map} +1 -1
  22. package/dist/index.js +5 -5
  23. package/dist/install.js +3 -3
  24. package/dist/styles.css +1497 -1453
  25. package/dist/types/auto-group.d.ts +19 -0
  26. package/dist/{useProtocolTemplates-CXP2ZosM.js → useProtocolTemplates-BbvlHoPD.js} +218 -90
  27. package/dist/useProtocolTemplates-BbvlHoPD.js.map +1 -0
  28. package/package.json +1 -1
  29. package/src/__tests__/components/AutoGroupModal.preview.test.ts +46 -0
  30. package/src/__tests__/composables/autoGroup/classKey.test.ts +25 -0
  31. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +72 -0
  32. package/src/__tests__/composables/autoGroup/groupTree.test.ts +99 -0
  33. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +85 -0
  34. package/src/__tests__/composables/useAutoGroup.test.ts +111 -19
  35. package/src/components/AutoGroupModal.vue +23 -19
  36. package/src/components/BaseModal.story.vue +7 -15
  37. package/src/components/ExperimentDataViewer.vue +1 -0
  38. package/src/components/ExperimentPopover.vue +6 -4
  39. package/src/components/ExperimentSelectorModal.vue +30 -3
  40. package/src/components/IconButton.story.vue +5 -0
  41. package/src/components/SampleSelector.vue +3 -2
  42. package/src/components/SampleSelectorSampleRow.vue +4 -2
  43. package/src/composables/autoGroup/classKey.ts +5 -2
  44. package/src/composables/autoGroup/columns.ts +2 -2
  45. package/src/composables/autoGroup/compose.ts +56 -0
  46. package/src/composables/autoGroup/fingerprint.ts +15 -1
  47. package/src/composables/autoGroup/index.ts +2 -0
  48. package/src/composables/autoGroup/replicatePreGroup.ts +34 -0
  49. package/src/composables/autoGroup/template.ts +2 -2
  50. package/src/composables/autoGroup/tokenLength.ts +53 -0
  51. package/src/composables/autoGroup/vocab.json +1 -2
  52. package/src/composables/useAutoGroup.ts +34 -13
  53. package/src/styles/components/auto-group-modal.css +7 -11
  54. package/src/styles/components/button.css +10 -3
  55. package/src/styles/components/modal.css +3 -0
  56. package/src/styles/components/sample-selector.css +17 -0
  57. package/src/styles/variables.css +8 -0
  58. package/src/types/auto-group.ts +19 -0
  59. package/dist/ExperimentPopover-mzmSfAUp.js.map +0 -1
  60. package/dist/ExperimentSelectorModal-Bn0Hmg07.js.map +0 -1
  61. package/dist/components-Cyi0IfRl.js.map +0 -1
  62. package/dist/useProtocolTemplates-CXP2ZosM.js.map +0 -1
package/dist/styles.css CHANGED
@@ -2855,10 +2855,12 @@
2855
2855
  }
2856
2856
  .mint-button--secondary {
2857
2857
  background-color: var(--bg-secondary);
2858
- color: var(--text-primary);
2858
+ color: var(--text-secondary-strong);
2859
2859
  border: 1px solid var(--border-color);
2860
2860
  /* Intentionally tighter + fainter than the colored variants —
2861
- secondary shouldn't "float" the way filled buttons do. */
2861
+ secondary shouldn't "float" the way filled buttons do. Regular (400)
2862
+ weight de-emphasizes the label relative to the medium-weight filled variants. */
2863
+ font-weight: 400;
2862
2864
  box-shadow: 0 1px 1px rgba(15, 23, 42, 0.03);
2863
2865
  }
2864
2866
  .mint-button--secondary:hover:not(.mint-button--disabled) {
@@ -2894,7 +2896,9 @@
2894
2896
  }
2895
2897
  .mint-button--ghost {
2896
2898
  background-color: transparent;
2897
- color: var(--text-primary);
2899
+ color: var(--text-secondary-strong);
2900
+ /* Lowest-emphasis variant: regular (400) weight, matching secondary. */
2901
+ font-weight: 400;
2898
2902
  }
2899
2903
  .mint-button--ghost:hover:not(.mint-button--disabled) {
2900
2904
  background-color: var(--bg-tertiary);
@@ -2904,6 +2908,9 @@
2904
2908
  .mint-button--sm {
2905
2909
  padding: 0.375rem 0.75rem;
2906
2910
  font-size: 0.875rem;
2911
+ /* Small buttons live in dense/secondary contexts — regular (400) weight
2912
+ keeps the compact label from reading too heavy. Applies to all variants. */
2913
+ font-weight: 400;
2907
2914
  min-height: var(--form-height-sm);
2908
2915
  }
2909
2916
  .mint-button--md {
@@ -3113,6 +3120,9 @@ to {
3113
3120
  }
3114
3121
  .mint-modal__close {
3115
3122
  flex-shrink: 0;
3123
+ /* Always pin the close affordance to the right edge of the header, even when
3124
+ there is no title/subtitle (no flex-1 header-text to push it over). */
3125
+ margin-left: auto;
3116
3126
  width: 1.75rem;
3117
3127
  height: 1.75rem;
3118
3128
  padding: 0;
@@ -10971,185 +10981,456 @@ to {
10971
10981
  transform: rotate(360deg);
10972
10982
  }
10973
10983
  }
10974
- /* AutoGroupModal - Smart grouping wizard */
10975
- .mint-auto-group {
10976
- flex: 1;
10977
- display: flex;
10978
- flex-direction: column;
10979
- gap: 0.625rem;
10980
- min-height: 0;
10981
- min-width: 0;
10984
+ /* SampleHierarchyTree Component Styles */
10985
+ .mint-sample-tree {
10986
+ font-size: 0.875rem;
10982
10987
  }
10983
- .mint-modal__body:has(> .mint-auto-group .mint-auto-group__manual-mode) {
10984
- overflow: hidden;
10988
+ .mint-sample-tree--sm {
10989
+ font-size: 0.75rem;
10985
10990
  }
10986
- .mint-auto-group:has(.mint-auto-group__manual-mode) {
10987
- height: min(34rem, calc(100vh - 12rem));
10988
- min-height: min(26rem, calc(100vh - 12rem));
10989
- overflow: hidden;
10991
+ .mint-sample-tree--lg {
10992
+ font-size: 1rem;
10990
10993
  }
10991
10994
 
10992
- /* --- Workflow tabs --- */
10993
- .mint-auto-group__workflow-bar {
10995
+ /* Node */
10996
+ .mint-sample-tree__node {
10997
+ user-select: none;
10998
+ }
10999
+
11000
+ /* Node header (clickable row) */
11001
+ .mint-sample-tree__node-header {
10994
11002
  display: flex;
10995
- align-items: flex-end;
10996
- justify-content: space-between;
10997
- gap: 0.25rem;
10998
- min-width: 0;
10999
- padding-bottom: 0;
11000
- border-bottom: 1px solid var(--border-color);
11003
+ align-items: center;
11004
+ gap: 0.375rem;
11005
+ padding: 0.375rem 0.5rem;
11006
+ border-radius: var(--radius-sm);
11007
+ cursor: pointer;
11008
+ transition: background-color 0.15s ease;
11001
11009
  }
11002
- .mint-auto-group__workflow-bar--manual {
11003
- gap: 0.75rem;
11010
+ .mint-sample-tree__node-header:hover {
11011
+ background-color: var(--bg-hover);
11004
11012
  }
11005
- .mint-auto-group__workflow-tabs {
11006
- display: flex;
11007
- flex-shrink: 0;
11013
+ .mint-sample-tree__node--selected > .mint-sample-tree__node-header {
11014
+ background-color: rgba(59, 130, 246, 0.1);
11015
+ }
11016
+ .mint-sample-tree--sm .mint-sample-tree__node-header {
11017
+ padding: 0.25rem 0.375rem;
11008
11018
  gap: 0.25rem;
11009
11019
  }
11010
- .mint-auto-group__workflow-tab {
11011
- min-height: 1.75rem;
11012
- margin-bottom: -1px;
11013
- padding: 0.25rem 0.625rem;
11014
- border: 0;
11015
- border-bottom: 2px solid transparent;
11016
- border-radius: 0;
11020
+ .mint-sample-tree--lg .mint-sample-tree__node-header {
11021
+ padding: 0.5rem 0.625rem;
11022
+ gap: 0.5rem;
11023
+ }
11024
+
11025
+ /* Toggle button */
11026
+ .mint-sample-tree__toggle {
11027
+ display: flex;
11028
+ align-items: center;
11029
+ justify-content: center;
11030
+ width: 1.25rem;
11031
+ height: 1.25rem;
11032
+ padding: 0;
11017
11033
  background: transparent;
11034
+ border: none;
11035
+ border-radius: var(--radius-sm);
11018
11036
  color: var(--text-muted);
11019
- font-size: 0.75rem;
11020
- font-weight: 600;
11021
11037
  cursor: pointer;
11022
- line-height: 1.25;
11023
- transition: border-color 0.15s ease, color 0.15s ease;
11038
+ transition: color 0.15s ease, transform 0.15s ease;
11039
+ flex-shrink: 0;
11024
11040
  }
11025
- .mint-auto-group__workflow-tab:hover {
11041
+ .mint-sample-tree__toggle:hover {
11026
11042
  color: var(--text-primary);
11043
+ background-color: var(--bg-tertiary);
11027
11044
  }
11028
- .mint-auto-group__workflow-tab:focus-visible {
11029
- outline: none;
11030
- box-shadow: 0 0 0 2px var(--color-primary-soft);
11031
- }
11032
- .mint-auto-group__workflow-tab--active {
11033
- border-bottom-color: var(--color-primary);
11034
- color: var(--color-primary);
11035
- }
11036
- .mint-auto-group__manual-mode {
11037
- flex: 1;
11038
- display: flex;
11039
- flex-direction: column;
11040
- gap: 0.625rem;
11041
- min-height: 0;
11042
- min-width: 0;
11043
- overflow: hidden;
11044
- }
11045
- .mint-auto-group__manual-summary {
11046
- display: flex;
11047
- align-items: center;
11048
- justify-content: space-between;
11049
- flex: 1;
11050
- gap: 0.75rem;
11051
- min-width: 0;
11052
- padding-bottom: 0.25rem;
11045
+ .mint-sample-tree__toggle svg {
11046
+ width: 0.875rem;
11047
+ height: 0.875rem;
11048
+ transition: transform 0.15s ease;
11053
11049
  }
11054
- .mint-auto-group__manual-summary-text {
11055
- display: flex;
11056
- flex-direction: column;
11057
- gap: 0.125rem;
11058
- min-width: 0;
11050
+ .mint-sample-tree__node--expanded > .mint-sample-tree__node-header .mint-sample-tree__toggle svg {
11051
+ transform: rotate(90deg);
11059
11052
  }
11060
- .mint-auto-group__manual-summary-text strong {
11061
- color: var(--text-primary);
11062
- font-size: 0.8125rem;
11063
- font-weight: 600;
11064
- line-height: 1.25;
11053
+ .mint-sample-tree--sm .mint-sample-tree__toggle {
11054
+ width: 1rem;
11055
+ height: 1rem;
11065
11056
  }
11066
- .mint-auto-group__manual-eyebrow {
11067
- color: var(--text-muted);
11068
- font-size: 0.625rem;
11069
- font-weight: 700;
11070
- letter-spacing: 0.05em;
11071
- line-height: 1.2;
11072
- text-transform: uppercase;
11057
+ .mint-sample-tree--sm .mint-sample-tree__toggle svg {
11058
+ width: 0.75rem;
11059
+ height: 0.75rem;
11073
11060
  }
11074
- .mint-auto-group__manual-stats {
11075
- display: flex;
11076
- align-items: center;
11077
- gap: 0.375rem;
11078
- flex-wrap: wrap;
11079
- justify-content: flex-end;
11080
- color: var(--text-secondary);
11081
- font-size: 0.6875rem;
11061
+ .mint-sample-tree--lg .mint-sample-tree__toggle {
11062
+ width: 1.5rem;
11063
+ height: 1.5rem;
11082
11064
  }
11083
- .mint-auto-group__manual-stats span {
11084
- display: inline-flex;
11085
- align-items: center;
11086
- gap: 0.25rem;
11087
- min-height: 1.375rem;
11088
- padding: 0.0625rem 0.4375rem;
11089
- border: 1px solid var(--border-light);
11090
- border-radius: 9999px;
11091
- background: var(--bg-secondary);
11092
- font-variant-numeric: tabular-nums;
11093
- white-space: nowrap;
11065
+ .mint-sample-tree--lg .mint-sample-tree__toggle svg {
11066
+ width: 1rem;
11067
+ height: 1rem;
11094
11068
  }
11095
- .mint-auto-group__manual-stats strong {
11096
- color: var(--text-primary);
11097
- font-family: 'Fira Code', monospace;
11098
- font-size: 0.6875rem;
11069
+
11070
+ /* Placeholder for leaf nodes (no toggle) */
11071
+ .mint-sample-tree__toggle-placeholder {
11072
+ width: 1.25rem;
11073
+ flex-shrink: 0;
11099
11074
  }
11100
- .mint-auto-group__manual-grid {
11101
- display: grid;
11102
- grid-template-columns: minmax(0, 1.15fr) minmax(20rem, 0.85fr);
11103
- gap: 0.625rem;
11104
- flex: 1;
11105
- min-height: 0;
11106
- min-width: 0;
11107
- overflow: hidden;
11075
+ .mint-sample-tree--sm .mint-sample-tree__toggle-placeholder {
11076
+ width: 1rem;
11108
11077
  }
11109
- .mint-auto-group__manual-panel {
11110
- min-width: 0;
11111
- min-height: 0;
11112
- overflow: hidden;
11113
- display: flex;
11114
- flex-direction: column;
11115
- gap: 0.5rem;
11116
- padding: 0.625rem;
11117
- border: 1px solid var(--border);
11118
- border-radius: var(--radius);
11119
- background: var(--bg-primary);
11120
- box-shadow: inset 0 1px 0 var(--bg-secondary);
11078
+ .mint-sample-tree--lg .mint-sample-tree__toggle-placeholder {
11079
+ width: 1.5rem;
11121
11080
  }
11122
- .mint-auto-group__manual-panel-head {
11081
+
11082
+ /* Icon */
11083
+ .mint-sample-tree__icon {
11123
11084
  display: flex;
11124
11085
  align-items: center;
11125
- justify-content: space-between;
11126
- gap: 0.625rem;
11086
+ justify-content: center;
11087
+ width: 1.25rem;
11088
+ height: 1.25rem;
11089
+ flex-shrink: 0;
11127
11090
  }
11128
- .mint-auto-group__manual-panel-head > div:first-child {
11129
- display: flex;
11130
- align-items: center;
11131
- gap: 0.4375rem;
11132
- min-width: 0;
11091
+ .mint-sample-tree__icon svg {
11092
+ width: 1rem;
11093
+ height: 1rem;
11133
11094
  }
11134
- .mint-auto-group__manual-panel-head h3 {
11135
- margin: 0;
11136
- color: var(--text-primary);
11137
- font-size: 0.78125rem;
11138
- font-weight: 600;
11139
- line-height: 1.35;
11095
+ .mint-sample-tree--sm .mint-sample-tree__icon {
11096
+ width: 1rem;
11097
+ height: 1rem;
11140
11098
  }
11141
- .mint-auto-group__manual-step {
11142
- display: inline-grid;
11143
- place-items: center;
11099
+ .mint-sample-tree--sm .mint-sample-tree__icon svg {
11100
+ width: 0.75rem;
11101
+ height: 0.75rem;
11102
+ }
11103
+ .mint-sample-tree--lg .mint-sample-tree__icon {
11104
+ width: 1.5rem;
11105
+ height: 1.5rem;
11106
+ }
11107
+ .mint-sample-tree--lg .mint-sample-tree__icon svg {
11144
11108
  width: 1.25rem;
11145
11109
  height: 1.25rem;
11146
- border-radius: 9999px;
11147
- background: var(--color-primary-soft);
11110
+ }
11111
+
11112
+ /* Icon colors by type */
11113
+ .mint-sample-tree__icon--study {
11114
+ color: var(--text-muted);
11115
+ }
11116
+ .mint-sample-tree__icon--experiment {
11148
11117
  color: var(--color-primary);
11149
- font-family: 'Fira Code', monospace;
11150
- font-size: 0.6875rem;
11151
- font-weight: 700;
11152
- flex-shrink: 0;
11118
+ }
11119
+ .mint-sample-tree__icon--plate {
11120
+ color: var(--mint-info);
11121
+ }
11122
+ .mint-sample-tree__icon--sample {
11123
+ color: var(--mint-success);
11124
+ }
11125
+ .mint-sample-tree__icon--cell_line {
11126
+ color: var(--color-purple);
11127
+ }
11128
+ .mint-sample-tree__icon--passage {
11129
+ color: var(--text-secondary);
11130
+ }
11131
+ .mint-sample-tree__icon--clone {
11132
+ color: var(--mint-warning);
11133
+ }
11134
+ .mint-sample-tree__icon--treatment {
11135
+ color: var(--color-cta);
11136
+ }
11137
+ .mint-sample-tree__icon--folder {
11138
+ color: var(--text-muted);
11139
+ }
11140
+ .mint-sample-tree__icon--custom {
11141
+ color: var(--text-secondary);
11142
+ }
11143
+
11144
+ /* Label */
11145
+ .mint-sample-tree__label {
11146
+ flex: 1;
11147
+ min-width: 0;
11148
+ color: var(--text-primary);
11149
+ overflow: hidden;
11150
+ text-overflow: ellipsis;
11151
+ white-space: nowrap;
11152
+ }
11153
+
11154
+ /* Badge */
11155
+ .mint-sample-tree__badge {
11156
+ display: inline-flex;
11157
+ align-items: center;
11158
+ justify-content: center;
11159
+ min-width: 1.25rem;
11160
+ padding: 0.125rem 0.375rem;
11161
+ font-size: 0.625rem;
11162
+ font-weight: 600;
11163
+ border-radius: 9999px;
11164
+ flex-shrink: 0;
11165
+ }
11166
+ .mint-sample-tree--sm .mint-sample-tree__badge {
11167
+ min-width: 1rem;
11168
+ padding: 0.0625rem 0.25rem;
11169
+ font-size: 0.5rem;
11170
+ }
11171
+ .mint-sample-tree--lg .mint-sample-tree__badge {
11172
+ min-width: 1.5rem;
11173
+ padding: 0.125rem 0.5rem;
11174
+ font-size: 0.75rem;
11175
+ }
11176
+ .mint-sample-tree__badge--default {
11177
+ background-color: var(--bg-tertiary);
11178
+ color: var(--text-secondary);
11179
+ }
11180
+ .mint-sample-tree__badge--success {
11181
+ background-color: var(--mint-success-bg);
11182
+ color: var(--mint-success);
11183
+ }
11184
+ .mint-sample-tree__badge--warning {
11185
+ background-color: var(--mint-warning-bg);
11186
+ color: var(--mint-warning);
11187
+ }
11188
+ .mint-sample-tree__badge--error {
11189
+ background-color: var(--mint-error-bg);
11190
+ color: var(--mint-error);
11191
+ }
11192
+
11193
+ /* Children container */
11194
+ .mint-sample-tree__children {
11195
+ margin-left: 1.25rem;
11196
+ padding-left: 0.75rem;
11197
+ border-left: 1px solid var(--border-color);
11198
+ overflow: hidden;
11199
+ }
11200
+ .mint-sample-tree--sm .mint-sample-tree__children {
11201
+ margin-left: 1rem;
11202
+ padding-left: 0.5rem;
11203
+ }
11204
+ .mint-sample-tree--lg .mint-sample-tree__children {
11205
+ margin-left: 1.5rem;
11206
+ padding-left: 1rem;
11207
+ }
11208
+
11209
+ /* Animation */
11210
+ .mint-sample-tree__children--entering {
11211
+ animation: mint-tree-expand 0.15s ease-out;
11212
+ }
11213
+ .mint-sample-tree__children--leaving {
11214
+ animation: mint-tree-collapse 0.15s ease-out forwards;
11215
+ }
11216
+ @keyframes mint-tree-expand {
11217
+ from {
11218
+ opacity: 0;
11219
+ max-height: 0;
11220
+ }
11221
+ to {
11222
+ opacity: 1;
11223
+ max-height: 1000px;
11224
+ }
11225
+ }
11226
+ @keyframes mint-tree-collapse {
11227
+ from {
11228
+ opacity: 1;
11229
+ max-height: 1000px;
11230
+ }
11231
+ to {
11232
+ opacity: 0;
11233
+ max-height: 0;
11234
+ }
11235
+ }
11236
+
11237
+ /* Empty state */
11238
+ .mint-sample-tree__empty {
11239
+ padding: 1rem;
11240
+ text-align: center;
11241
+ color: var(--text-muted);
11242
+ }
11243
+ .mint-sample-tree__empty-icon {
11244
+ width: 2rem;
11245
+ height: 2rem;
11246
+ margin: 0 auto 0.5rem;
11247
+ opacity: 0.5;
11248
+ }
11249
+ .mint-sample-tree__empty-text {
11250
+ font-size: 0.875rem;
11251
+ margin-top: 0 !important;
11252
+ margin-bottom: 0 !important;
11253
+ padding: 0 !important;
11254
+ }
11255
+ /* AutoGroupModal - Smart grouping wizard */
11256
+ .mint-auto-group {
11257
+ flex: 1;
11258
+ display: flex;
11259
+ flex-direction: column;
11260
+ gap: 0.625rem;
11261
+ min-height: 0;
11262
+ min-width: 0;
11263
+ }
11264
+ .mint-modal__body:has(> .mint-auto-group .mint-auto-group__manual-mode) {
11265
+ overflow: hidden;
11266
+ }
11267
+ .mint-auto-group:has(.mint-auto-group__manual-mode) {
11268
+ height: min(34rem, calc(100vh - 12rem));
11269
+ min-height: min(26rem, calc(100vh - 12rem));
11270
+ overflow: hidden;
11271
+ }
11272
+
11273
+ /* --- Workflow tabs --- */
11274
+ .mint-auto-group__workflow-bar {
11275
+ display: flex;
11276
+ align-items: flex-end;
11277
+ justify-content: space-between;
11278
+ gap: 0.25rem;
11279
+ min-width: 0;
11280
+ padding-bottom: 0;
11281
+ border-bottom: 1px solid var(--border-color);
11282
+ }
11283
+ .mint-auto-group__workflow-bar--manual {
11284
+ gap: 0.75rem;
11285
+ }
11286
+ .mint-auto-group__workflow-tabs {
11287
+ display: flex;
11288
+ flex-shrink: 0;
11289
+ gap: 0.25rem;
11290
+ }
11291
+ .mint-auto-group__workflow-tab {
11292
+ min-height: 1.75rem;
11293
+ margin-bottom: -1px;
11294
+ padding: 0.25rem 0.625rem;
11295
+ border: 0;
11296
+ border-bottom: 2px solid transparent;
11297
+ border-radius: 0;
11298
+ background: transparent;
11299
+ color: var(--text-muted);
11300
+ font-size: 0.75rem;
11301
+ font-weight: 600;
11302
+ cursor: pointer;
11303
+ line-height: 1.25;
11304
+ transition: border-color 0.15s ease, color 0.15s ease;
11305
+ }
11306
+ .mint-auto-group__workflow-tab:hover {
11307
+ color: var(--text-primary);
11308
+ }
11309
+ .mint-auto-group__workflow-tab:focus-visible {
11310
+ outline: none;
11311
+ box-shadow: 0 0 0 2px var(--color-primary-soft);
11312
+ }
11313
+ .mint-auto-group__workflow-tab--active {
11314
+ border-bottom-color: var(--color-primary);
11315
+ color: var(--color-primary);
11316
+ }
11317
+ .mint-auto-group__manual-mode {
11318
+ flex: 1;
11319
+ display: flex;
11320
+ flex-direction: column;
11321
+ gap: 0.625rem;
11322
+ min-height: 0;
11323
+ min-width: 0;
11324
+ overflow: hidden;
11325
+ }
11326
+ .mint-auto-group__manual-summary {
11327
+ display: flex;
11328
+ align-items: center;
11329
+ justify-content: space-between;
11330
+ flex: 1;
11331
+ gap: 0.75rem;
11332
+ min-width: 0;
11333
+ padding-bottom: 0.25rem;
11334
+ }
11335
+ .mint-auto-group__manual-summary-text {
11336
+ display: flex;
11337
+ flex-direction: column;
11338
+ gap: 0.125rem;
11339
+ min-width: 0;
11340
+ }
11341
+ .mint-auto-group__manual-summary-text strong {
11342
+ color: var(--text-primary);
11343
+ font-size: 0.8125rem;
11344
+ font-weight: 600;
11345
+ line-height: 1.25;
11346
+ }
11347
+ .mint-auto-group__manual-eyebrow {
11348
+ color: var(--text-muted);
11349
+ font-size: 0.625rem;
11350
+ font-weight: 700;
11351
+ letter-spacing: 0.05em;
11352
+ line-height: 1.2;
11353
+ text-transform: uppercase;
11354
+ }
11355
+ .mint-auto-group__manual-stats {
11356
+ display: flex;
11357
+ align-items: center;
11358
+ gap: 0.375rem;
11359
+ flex-wrap: wrap;
11360
+ justify-content: flex-end;
11361
+ color: var(--text-secondary);
11362
+ font-size: 0.6875rem;
11363
+ }
11364
+ .mint-auto-group__manual-stats span {
11365
+ display: inline-flex;
11366
+ align-items: center;
11367
+ gap: 0.25rem;
11368
+ min-height: 1.375rem;
11369
+ padding: 0.0625rem 0.4375rem;
11370
+ border: 1px solid var(--border-light);
11371
+ border-radius: 9999px;
11372
+ background: var(--bg-secondary);
11373
+ font-variant-numeric: tabular-nums;
11374
+ white-space: nowrap;
11375
+ }
11376
+ .mint-auto-group__manual-stats strong {
11377
+ color: var(--text-primary);
11378
+ font-family: 'Fira Code', monospace;
11379
+ font-size: 0.6875rem;
11380
+ }
11381
+ .mint-auto-group__manual-grid {
11382
+ display: grid;
11383
+ grid-template-columns: minmax(0, 1.15fr) minmax(20rem, 0.85fr);
11384
+ gap: 0.625rem;
11385
+ flex: 1;
11386
+ min-height: 0;
11387
+ min-width: 0;
11388
+ overflow: hidden;
11389
+ }
11390
+ .mint-auto-group__manual-panel {
11391
+ min-width: 0;
11392
+ min-height: 0;
11393
+ overflow: hidden;
11394
+ display: flex;
11395
+ flex-direction: column;
11396
+ gap: 0.5rem;
11397
+ padding: 0.625rem;
11398
+ border: 1px solid var(--border);
11399
+ border-radius: var(--radius);
11400
+ background: var(--bg-primary);
11401
+ box-shadow: inset 0 1px 0 var(--bg-secondary);
11402
+ }
11403
+ .mint-auto-group__manual-panel-head {
11404
+ display: flex;
11405
+ align-items: center;
11406
+ justify-content: space-between;
11407
+ gap: 0.625rem;
11408
+ }
11409
+ .mint-auto-group__manual-panel-head > div:first-child {
11410
+ display: flex;
11411
+ align-items: center;
11412
+ gap: 0.4375rem;
11413
+ min-width: 0;
11414
+ }
11415
+ .mint-auto-group__manual-panel-head h3 {
11416
+ margin: 0;
11417
+ color: var(--text-primary);
11418
+ font-size: 0.78125rem;
11419
+ font-weight: 600;
11420
+ line-height: 1.35;
11421
+ }
11422
+ .mint-auto-group__manual-step {
11423
+ display: inline-grid;
11424
+ place-items: center;
11425
+ width: 1.25rem;
11426
+ height: 1.25rem;
11427
+ border-radius: 9999px;
11428
+ background: var(--color-primary-soft);
11429
+ color: var(--color-primary);
11430
+ font-family: 'Fira Code', monospace;
11431
+ font-size: 0.6875rem;
11432
+ font-weight: 700;
11433
+ flex-shrink: 0;
11153
11434
  }
11154
11435
  .mint-auto-group__manual-panel-meta {
11155
11436
  display: flex;
@@ -11738,7 +12019,7 @@ to {
11738
12019
  font-size: 0.8125rem;
11739
12020
  color: var(--mint-error);
11740
12021
  background: var(--mint-error-bg);
11741
- border: 1px solid rgba(239, 68, 68, 0.3);
12022
+ border: 1px solid var(--mint-error-border);
11742
12023
  border-radius: var(--radius);
11743
12024
  }
11744
12025
 
@@ -11759,7 +12040,7 @@ to {
11759
12040
  }
11760
12041
  .mint-auto-group__experiment-error {
11761
12042
  padding: 1.5rem;
11762
- border: 1px solid rgba(239, 68, 68, 0.3);
12043
+ border: 1px solid var(--mint-error-border);
11763
12044
  border-radius: var(--radius-md);
11764
12045
  background: var(--mint-error-bg);
11765
12046
  font-size: 0.8125rem;
@@ -11790,7 +12071,7 @@ to {
11790
12071
  .mint-auto-group__link-btn:focus-visible {
11791
12072
  outline: 2px solid var(--color-primary);
11792
12073
  outline-offset: 1px;
11793
- border-radius: 2px;
12074
+ border-radius: var(--radius-sm);
11794
12075
  }
11795
12076
  .mint-auto-group__experiment-loaded {
11796
12077
  padding: 1.5rem;
@@ -12167,21 +12448,12 @@ to {
12167
12448
  }
12168
12449
  .mint-auto-group__preview-panel h4 { margin: 0 0 10px; font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .06em;
12169
12450
  }
12170
- .mint-auto-group__preview-group { border: 1px solid var(--border-color); border-radius: var(--radius); overflow: hidden;
12171
- }
12172
- .mint-auto-group__preview-group[open] { background: var(--bg-secondary);
12173
- }
12174
- .mint-auto-group__preview-group summary { display: flex; align-items: center; gap: 10px; cursor: pointer; font-size: 13px; padding: 0.5rem 0.875rem;
12175
- }
12176
- .mint-auto-group__preview-group[open] summary { border-bottom: 1px solid var(--border);
12177
- }
12178
- .mint-auto-group__preview-dot { width: 10px; height: 10px; border-radius: 9999px; flex-shrink: 0;
12179
- }
12180
- .mint-auto-group__preview-count { margin-left: auto; font-family: 'Fira Code', monospace; font-size: 12px; color: var(--text-secondary); background: var(--bg-primary); border: 1px solid var(--border); padding: 2px 8px; border-radius: 9999px;
12181
- }
12182
- .mint-auto-group__preview-samples { display: flex; flex-wrap: wrap; gap: 6px; padding: 0.5rem 0.875rem 0.625rem;
12451
+
12452
+ /* Nested experimental groups render as a collapsible SampleHierarchyTree; cap
12453
+ its height so a large batch scrolls inside the panel instead of the modal. */
12454
+ .mint-auto-group__preview-tree { max-height: 320px; overflow-y: auto;
12183
12455
  }
12184
- .mint-auto-group__preview-sample { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-primary); background: var(--bg-primary); border: 1px solid var(--border); padding: 3px 8px; border-radius: 9999px;
12456
+ .mint-auto-group__preview-empty { margin: 0; font-size: 13px; color: var(--text-muted);
12185
12457
  }
12186
12458
  .mint-auto-group__qc-chips { display: flex; flex-wrap: wrap; gap: 6px;
12187
12459
  }
@@ -12462,6 +12734,10 @@ to {
12462
12734
  .mint-sample-selector__expand-btn:hover {
12463
12735
  background-color: var(--bg-hover);
12464
12736
  }
12737
+ .mint-sample-selector__expand-btn:focus-visible {
12738
+ outline: none;
12739
+ box-shadow: var(--focus-ring);
12740
+ }
12465
12741
  .mint-sample-selector__expand-icon {
12466
12742
  width: 0.875rem;
12467
12743
  height: 0.875rem;
@@ -12571,6 +12847,10 @@ to {
12571
12847
  transform: scale(1.25);
12572
12848
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08), 0 0 0 3px rgba(0, 0, 0, 0.06);
12573
12849
  }
12850
+ .mint-sample-selector__color-dot--clickable:focus-visible {
12851
+ outline: none;
12852
+ box-shadow: var(--focus-ring);
12853
+ }
12574
12854
 
12575
12855
  /* Count Badge */
12576
12856
  .mint-sample-selector__count-badge {
@@ -12602,6 +12882,13 @@ to {
12602
12882
  background-color: var(--mint-error-bg);
12603
12883
  color: var(--mint-error);
12604
12884
  }
12885
+
12886
+ /* Reveal the hover-hidden delete button when reached by keyboard, and ring it. */
12887
+ .mint-sample-selector__delete-btn:focus-visible {
12888
+ outline: none;
12889
+ opacity: 1;
12890
+ box-shadow: var(--focus-ring);
12891
+ }
12605
12892
  .mint-sample-selector__delete-btn--hidden {
12606
12893
  opacity: 0;
12607
12894
  }
@@ -13582,1596 +13869,1325 @@ to {
13582
13869
  margin-bottom: 0.25rem;
13583
13870
  }
13584
13871
  .mint-progress__label {
13585
- font-size: 0.875rem;
13586
- color: var(--text-secondary);
13587
- }
13588
- .mint-progress__value {
13589
- font-size: 0.875rem;
13590
- color: var(--text-muted);
13591
- font-variant-numeric: tabular-nums;
13592
- }
13593
-
13594
- /* ========================================================================
13595
- Rail variant (default) — single filled track, pill ends
13596
- ======================================================================== */
13597
- .mint-progress__track {
13598
- width: 100%;
13599
- background-color: var(--bg-tertiary);
13600
- border-radius: 9999px; /* pill ends — spec */
13601
- overflow: hidden;
13602
- }
13603
- .mint-progress__track--sm { height: 4px;
13604
- }
13605
- .mint-progress__track--md { height: 8px;
13606
- }
13607
- .mint-progress__track--lg { height: 12px;
13608
- }
13609
- .mint-progress__bar {
13610
- height: 100%;
13611
- border-radius: 9999px;
13612
- transition: width 0.3s ease;
13613
- }
13614
- .mint-progress__bar--primary { background-color: var(--color-primary);
13615
- }
13616
- .mint-progress__bar--success { background-color: var(--mint-success);
13617
- }
13618
- .mint-progress__bar--warning { background-color: var(--mint-warning);
13619
- }
13620
- .mint-progress__bar--error { background-color: var(--mint-error);
13621
- }
13622
- .mint-progress__bar--info { background-color: var(--mint-info);
13623
- }
13624
- .mint-progress__bar--indeterminate {
13625
- width: 40% !important;
13626
- animation: mint-progress-indeterminate 1.5s ease-in-out infinite;
13627
- }
13628
- @keyframes mint-progress-indeterminate {
13629
- 0% { transform: translateX(-100%);
13630
- }
13631
- 50% { transform: translateX(150%);
13632
- }
13633
- 100% { transform: translateX(-100%);
13634
- }
13635
- }
13636
-
13637
- /* ========================================================================
13638
- Segmented variant — discrete step segments for pipelines / wizards
13639
- ======================================================================== */
13640
- .mint-progress__segments {
13641
- display: flex;
13642
- width: 100%;
13643
- gap: 4px;
13644
- }
13645
- .mint-progress__segments--sm { height: 4px;
13646
- }
13647
- .mint-progress__segments--md { height: 8px;
13648
- }
13649
- .mint-progress__segments--lg { height: 12px;
13650
- }
13651
- .mint-progress__segment {
13652
- flex: 1;
13653
- background-color: var(--bg-tertiary);
13654
- border-radius: 9999px;
13655
- transition: background-color 0.2s ease;
13656
- }
13657
- .mint-progress__segment--done.mint-progress__segment--primary { background-color: var(--color-primary);
13658
- }
13659
- .mint-progress__segment--done.mint-progress__segment--success { background-color: var(--mint-success);
13660
- }
13661
- .mint-progress__segment--done.mint-progress__segment--warning { background-color: var(--mint-warning);
13662
- }
13663
- .mint-progress__segment--done.mint-progress__segment--error { background-color: var(--mint-error);
13664
- }
13665
- .mint-progress__segment--done.mint-progress__segment--info { background-color: var(--mint-info);
13666
- }
13667
- .mint-progress__segment--active {
13668
- animation: mint-progress-segment-pulse 1.4s ease-in-out infinite;
13669
- }
13670
- .mint-progress__segment--active.mint-progress__segment--primary { background-color: var(--color-primary);
13671
- }
13672
- .mint-progress__segment--active.mint-progress__segment--success { background-color: var(--mint-success);
13673
- }
13674
- .mint-progress__segment--active.mint-progress__segment--warning { background-color: var(--mint-warning);
13675
- }
13676
- .mint-progress__segment--active.mint-progress__segment--error { background-color: var(--mint-error);
13677
- }
13678
- .mint-progress__segment--active.mint-progress__segment--info { background-color: var(--mint-info);
13679
- }
13680
- @keyframes mint-progress-segment-pulse {
13681
- 0%, 100% { opacity: 0.55;
13682
- }
13683
- 50% { opacity: 1;
13684
- }
13685
- }
13686
- @media (prefers-reduced-motion: reduce) {
13687
- .mint-progress__segment--active { animation: none; opacity: 1;
13688
- }
13689
- .mint-progress__bar--indeterminate { animation: none;
13690
- }
13691
- }
13692
-
13693
- /* Step labels under segmented bar */
13694
- .mint-progress__step-labels {
13695
- display: flex;
13696
- width: 100%;
13697
- gap: 4px;
13698
- margin-top: 0.375rem;
13699
- }
13700
- .mint-progress__step-label {
13701
- flex: 1;
13702
- font-size: 0.6875rem;
13703
- color: var(--text-muted);
13704
- text-align: center;
13705
- line-height: 1.3;
13706
- transition: color 0.15s ease;
13707
- }
13708
- .mint-progress__step-label--done {
13709
- color: var(--text-secondary);
13710
- }
13711
- .mint-progress__step-label--active {
13712
- color: var(--text-primary);
13713
- font-weight: 500;
13714
- }
13715
- /* Avatar Component Styles */
13716
-
13717
- /* Outer wrapper — anchors the status dot; NO overflow hidden */
13718
- .mint-avatar {
13719
- position: relative;
13720
- display: inline-block;
13721
- flex-shrink: 0;
13722
- line-height: 0; /* prevents inline-baseline gap under the face */
13723
- }
13724
-
13725
- /* Inner face — holds photo/initials; CLIPS its own contents */
13726
- .mint-avatar__face {
13727
- display: inline-flex;
13728
- align-items: center;
13729
- justify-content: center;
13730
- width: 100%;
13731
- height: 100%;
13732
- border-radius: 50%;
13733
- overflow: hidden;
13734
- /* font-weight 500 (medium) matches the platform's inline avatar typography
13735
- — text-sm font-medium text-white in admin/UserTable.vue:292. */
13736
- font-weight: 500;
13737
- color: white;
13738
- background: var(--bg-tertiary);
13739
- }
13740
-
13741
- /* Sizes — applied on the wrapper so face fills 100%.
13742
- md = 32px to match the platform's canonical w-8 h-8 admin/user listing
13743
- size. Pre-0.16.5, md was 40px. */
13744
- .mint-avatar--xs { width: 24px; height: 24px; font-size: 0.625rem;
13745
- }
13746
- .mint-avatar--sm { width: 28px; height: 28px; font-size: 0.75rem;
13747
- }
13748
- .mint-avatar--md { width: 32px; height: 32px; font-size: 0.875rem;
13749
- }
13750
- .mint-avatar--lg { width: 40px; height: 40px; font-size: 1rem;
13751
- }
13752
- .mint-avatar--xl { width: 56px; height: 56px; font-size: 1.25rem;
13753
- }
13754
-
13755
- /* Image */
13756
- .mint-avatar__image {
13757
- width: 100%;
13758
- height: 100%;
13759
- object-fit: cover;
13760
- }
13761
-
13762
- /* Initials */
13763
- .mint-avatar__initials {
13764
- line-height: 1;
13765
- user-select: none;
13766
- }
13767
-
13768
- /* Fallback SVG icon */
13769
- .mint-avatar__fallback {
13770
- width: 60%;
13771
- height: 60%;
13772
- color: var(--text-muted);
13773
- }
13774
-
13775
- /* Status dot — absolutely positioned on the outer wrapper, unclipped by face */
13776
- .mint-avatar__status {
13777
- position: absolute;
13778
- right: -2px;
13779
- bottom: -2px;
13780
- width: 30%;
13781
- height: 30%;
13782
- min-width: 8px;
13783
- min-height: 8px;
13784
- border-radius: 50%;
13785
- border: 2px solid var(--bg-primary);
13786
- box-sizing: border-box;
13787
- }
13788
- .mint-avatar__status--online { background-color: var(--mint-success);
13789
- }
13790
- .mint-avatar__status--away { background-color: var(--mint-warning);
13791
- }
13792
- .mint-avatar__status--busy { background-color: var(--mint-error);
13793
- }
13794
- .mint-avatar__status--offline { background-color: var(--text-muted);
13795
- }
13796
- /* Breadcrumb Component Styles */
13797
- .mint-breadcrumb__list {
13798
- display: flex;
13799
- align-items: center;
13800
- list-style: none;
13801
- margin: 0;
13802
- padding: 0;
13803
- flex-wrap: wrap;
13804
- gap: 0;
13805
- }
13806
- .mint-breadcrumb__item {
13807
- display: flex;
13808
- align-items: center;
13809
- font-size: 0.8125rem;
13810
- }
13811
-
13812
- /* Ancestor link — text-secondary at rest, promoted to text-primary + soft pill on hover */
13813
- .mint-breadcrumb__link {
13814
- color: var(--text-secondary);
13815
- cursor: pointer;
13816
- text-decoration: none;
13817
- transition: color 0.15s ease, background-color 0.15s ease;
13818
- background: none;
13819
- border: none;
13820
- padding: 0.1875rem 0.5rem;
13821
- margin: 0 -0.25rem;
13822
- border-radius: var(--radius-sm);
13823
- font: inherit;
13824
- font-size: 0.8125rem;
13825
- }
13826
- .mint-breadcrumb__link:hover {
13827
- color: var(--text-primary);
13828
- background-color: var(--bg-secondary);
13872
+ font-size: 0.875rem;
13873
+ color: var(--text-secondary);
13829
13874
  }
13830
- .mint-breadcrumb__link:focus-visible {
13831
- outline: none;
13832
- box-shadow: var(--focus-ring);
13875
+ .mint-progress__value {
13876
+ font-size: 0.875rem;
13877
+ color: var(--text-muted);
13878
+ font-variant-numeric: tabular-nums;
13833
13879
  }
13834
13880
 
13835
- /* Current segment — text-primary + 500 weight */
13836
- .mint-breadcrumb__current {
13837
- color: var(--text-primary);
13838
- font-weight: 500;
13839
- padding: 0.1875rem 0.5rem;
13840
- margin: 0 -0.25rem;
13881
+ /* ========================================================================
13882
+ Rail variant (default) — single filled track, pill ends
13883
+ ======================================================================== */
13884
+ .mint-progress__track {
13885
+ width: 100%;
13886
+ background-color: var(--bg-tertiary);
13887
+ border-radius: 9999px; /* pill ends — spec */
13888
+ overflow: hidden;
13841
13889
  }
13842
-
13843
- /* Chevron separator — thin, text-muted */
13844
- .mint-breadcrumb__separator {
13845
- color: var(--text-muted);
13846
- user-select: none;
13847
- display: inline-flex;
13848
- align-items: center;
13849
- padding: 0 0.25rem;
13890
+ .mint-progress__track--sm { height: 4px;
13850
13891
  }
13851
- .mint-breadcrumb__chevron {
13852
- width: 0.875rem;
13853
- height: 0.875rem;
13892
+ .mint-progress__track--md { height: 8px;
13854
13893
  }
13855
- /* ChartContainer Component Styles */
13856
- .mint-chart {
13857
- background-color: var(--bg-card);
13858
- border: 1px solid var(--border-color);
13859
- border-radius: var(--radius-lg);
13860
- overflow: hidden;
13894
+ .mint-progress__track--lg { height: 12px;
13861
13895
  }
13862
- .mint-chart__header {
13863
- display: flex;
13864
- align-items: flex-start;
13865
- justify-content: space-between;
13866
- gap: 1rem;
13867
- padding: 1rem 1.5rem;
13868
- border-bottom: 1px solid var(--border-color);
13896
+ .mint-progress__bar {
13897
+ height: 100%;
13898
+ border-radius: 9999px;
13899
+ transition: width 0.3s ease;
13869
13900
  }
13870
- .mint-chart__header-text {
13871
- flex: 1;
13872
- min-width: 0;
13901
+ .mint-progress__bar--primary { background-color: var(--color-primary);
13873
13902
  }
13874
- .mint-chart__title {
13875
- font-size: 1rem;
13876
- font-weight: 600;
13877
- color: var(--text-primary);
13878
- margin-top: 0 !important;
13879
- margin-bottom: 0 !important;
13880
- padding: 0 !important;
13903
+ .mint-progress__bar--success { background-color: var(--mint-success);
13881
13904
  }
13882
- .mint-chart__description {
13883
- font-size: 0.8125rem;
13884
- color: var(--text-muted);
13885
- margin-top: 0.25rem !important;
13886
- margin-bottom: 0 !important;
13887
- line-height: 1.4;
13888
- padding: 0 !important;
13905
+ .mint-progress__bar--warning { background-color: var(--mint-warning);
13889
13906
  }
13890
- .mint-chart__toolbar {
13891
- display: flex;
13892
- align-items: center;
13893
- gap: 0.5rem;
13894
- flex-shrink: 0;
13907
+ .mint-progress__bar--error { background-color: var(--mint-error);
13895
13908
  }
13896
- .mint-chart__body {
13897
- position: relative;
13898
- min-height: 12rem;
13909
+ .mint-progress__bar--info { background-color: var(--mint-info);
13899
13910
  }
13900
- .mint-chart__loading-overlay {
13901
- position: absolute;
13902
- inset: 0;
13903
- display: flex;
13904
- align-items: center;
13905
- justify-content: center;
13906
- background-color: var(--bg-card);
13907
- z-index: 1;
13911
+ .mint-progress__bar--indeterminate {
13912
+ width: 40% !important;
13913
+ animation: mint-progress-indeterminate 1.5s ease-in-out infinite;
13914
+ }
13915
+ @keyframes mint-progress-indeterminate {
13916
+ 0% { transform: translateX(-100%);
13917
+ }
13918
+ 50% { transform: translateX(150%);
13919
+ }
13920
+ 100% { transform: translateX(-100%);
13908
13921
  }
13909
- .mint-chart__legend {
13910
- padding: 0.75rem 1.5rem;
13911
- border-top: 1px solid var(--border-color);
13912
- font-size: 0.8125rem;
13913
- color: var(--text-secondary);
13914
13922
  }
13915
13923
 
13916
- .mint-bio-template-experiment-workspace[data-v-9eb2d454] {
13924
+ /* ========================================================================
13925
+ Segmented variant — discrete step segments for pipelines / wizards
13926
+ ======================================================================== */
13927
+ .mint-progress__segments {
13917
13928
  display: flex;
13918
- flex-direction: column;
13919
- gap: 1rem;
13920
- min-width: 0;
13929
+ width: 100%;
13930
+ gap: 4px;
13921
13931
  }
13922
- .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454] {
13923
- display: flex;
13924
- align-items: center;
13925
- justify-content: space-between;
13926
- gap: 0.75rem;
13932
+ .mint-progress__segments--sm { height: 4px;
13927
13933
  }
13928
- .mint-bio-template-experiment-workspace__status[data-v-9eb2d454] {
13929
- flex: 1 1 auto;
13930
- min-width: 0;
13934
+ .mint-progress__segments--md { height: 8px;
13931
13935
  }
13932
- .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
13933
- display: flex;
13934
- flex: 0 0 auto;
13935
- gap: 0.5rem;
13936
+ .mint-progress__segments--lg { height: 12px;
13936
13937
  }
13937
- .mint-bio-template-experiment-workspace__meta[data-v-9eb2d454],
13938
- .mint-bio-template-experiment-workspace__template-version[data-v-9eb2d454] {
13939
- margin: 0;
13940
- color: var(--text-secondary, #64748b);
13941
- font-family: var(--font-mono, 'Fira Code', monospace);
13942
- font-size: 0.75rem;
13938
+ .mint-progress__segment {
13939
+ flex: 1;
13940
+ background-color: var(--bg-tertiary);
13941
+ border-radius: 9999px;
13942
+ transition: background-color 0.2s ease;
13943
13943
  }
13944
- .mint-bio-template-experiment-workspace__templates[data-v-9eb2d454] {
13945
- display: grid;
13946
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
13947
- gap: 0.75rem;
13944
+ .mint-progress__segment--done.mint-progress__segment--primary { background-color: var(--color-primary);
13948
13945
  }
13949
- .mint-bio-template-experiment-workspace__template[data-v-9eb2d454] {
13950
- min-width: 0;
13951
- padding: 1rem;
13952
- border: 1px solid var(--border-color, #e5e7eb);
13953
- border-radius: 0.5rem;
13954
- background: var(--bg-primary, #ffffff);
13946
+ .mint-progress__segment--done.mint-progress__segment--success { background-color: var(--mint-success);
13955
13947
  }
13956
- .mint-bio-template-experiment-workspace__template-id[data-v-9eb2d454] {
13957
- margin: 0;
13958
- color: var(--text-primary, #0f172a);
13959
- font-family: var(--font-mono, 'Fira Code', monospace);
13960
- font-size: 0.875rem;
13948
+ .mint-progress__segment--done.mint-progress__segment--warning { background-color: var(--mint-warning);
13961
13949
  }
13962
- @media (max-width: 48rem) {
13963
- .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454],
13964
- .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
13965
- align-items: stretch;
13966
- flex-direction: column;
13950
+ .mint-progress__segment--done.mint-progress__segment--error { background-color: var(--mint-error);
13967
13951
  }
13952
+ .mint-progress__segment--done.mint-progress__segment--info { background-color: var(--mint-info);
13968
13953
  }
13969
-
13970
- .mint-bio-template-preset-workspace[data-v-0cb9aa98] {
13971
- display: flex;
13972
- flex-direction: column;
13973
- gap: 1rem;
13974
- min-width: 0;
13954
+ .mint-progress__segment--active {
13955
+ animation: mint-progress-segment-pulse 1.4s ease-in-out infinite;
13975
13956
  }
13976
- .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98] {
13977
- display: flex;
13978
- align-items: center;
13979
- justify-content: space-between;
13980
- gap: 0.75rem;
13957
+ .mint-progress__segment--active.mint-progress__segment--primary { background-color: var(--color-primary);
13981
13958
  }
13982
- .mint-bio-template-preset-workspace__status[data-v-0cb9aa98] {
13983
- flex: 1 1 auto;
13984
- min-width: 0;
13959
+ .mint-progress__segment--active.mint-progress__segment--success { background-color: var(--mint-success);
13985
13960
  }
13986
- .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
13987
- display: flex;
13988
- flex: 0 0 auto;
13989
- gap: 0.5rem;
13961
+ .mint-progress__segment--active.mint-progress__segment--warning { background-color: var(--mint-warning);
13990
13962
  }
13991
- .mint-bio-template-preset-workspace__meta[data-v-0cb9aa98],
13992
- .mint-bio-template-preset-workspace__sidebar-subtitle[data-v-0cb9aa98],
13993
- .mint-bio-template-preset-workspace__template-meta[data-v-0cb9aa98] {
13994
- margin: 0;
13995
- color: var(--text-secondary, #64748b);
13996
- font-family: var(--font-mono, 'Fira Code', monospace);
13997
- font-size: 0.75rem;
13963
+ .mint-progress__segment--active.mint-progress__segment--error { background-color: var(--mint-error);
13998
13964
  }
13999
- .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
14000
- display: grid;
14001
- grid-template-columns: minmax(16rem, max-content) minmax(0, 1fr);
14002
- gap: 1rem;
14003
- align-items: start;
14004
- min-width: 0;
13965
+ .mint-progress__segment--active.mint-progress__segment--info { background-color: var(--mint-info);
14005
13966
  }
14006
- .mint-bio-template-preset-workspace__sidebar-title[data-v-0cb9aa98] {
14007
- margin: 0;
14008
- color: var(--text-primary, #0f172a);
14009
- font-size: 0.875rem;
14010
- font-weight: 600;
13967
+ @keyframes mint-progress-segment-pulse {
13968
+ 0%, 100% { opacity: 0.55;
14011
13969
  }
14012
- .mint-bio-template-preset-workspace__view-nav[data-v-0cb9aa98] {
14013
- margin-top: 0.5rem;
13970
+ 50% { opacity: 1;
14014
13971
  }
14015
- .mint-bio-template-preset-workspace__templates[data-v-0cb9aa98] {
14016
- display: grid;
14017
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
14018
- gap: 0.75rem;
14019
13972
  }
14020
- .mint-bio-template-preset-workspace__template[data-v-0cb9aa98] {
14021
- min-width: 0;
14022
- padding: 1rem;
14023
- border: 1px solid var(--border-color, #e5e7eb);
14024
- border-radius: 0.5rem;
14025
- background: var(--bg-primary, #ffffff);
13973
+ @media (prefers-reduced-motion: reduce) {
13974
+ .mint-progress__segment--active { animation: none; opacity: 1;
14026
13975
  }
14027
- .mint-bio-template-preset-workspace__template-id[data-v-0cb9aa98] {
14028
- margin: 0;
14029
- color: var(--text-primary, #0f172a);
14030
- font-family: var(--font-mono, 'Fira Code', monospace);
14031
- font-size: 0.875rem;
13976
+ .mint-progress__bar--indeterminate { animation: none;
14032
13977
  }
14033
- @media (max-width: 48rem) {
14034
- .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98],
14035
- .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
14036
- align-items: stretch;
14037
- flex-direction: column;
14038
13978
  }
14039
- .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
14040
- grid-template-columns: minmax(0, 1fr);
13979
+
13980
+ /* Step labels under segmented bar */
13981
+ .mint-progress__step-labels {
13982
+ display: flex;
13983
+ width: 100%;
13984
+ gap: 4px;
13985
+ margin-top: 0.375rem;
13986
+ }
13987
+ .mint-progress__step-label {
13988
+ flex: 1;
13989
+ font-size: 0.6875rem;
13990
+ color: var(--text-muted);
13991
+ text-align: center;
13992
+ line-height: 1.3;
13993
+ transition: color 0.15s ease;
14041
13994
  }
13995
+ .mint-progress__step-label--done {
13996
+ color: var(--text-secondary);
14042
13997
  }
14043
- /* RackEditor Component Styles */
14044
- .mint-rack-editor {
14045
- display: flex;
14046
- flex-direction: column;
13998
+ .mint-progress__step-label--active {
13999
+ color: var(--text-primary);
14000
+ font-weight: 500;
14047
14001
  }
14002
+ /* Avatar Component Styles */
14048
14003
 
14049
- /* Rack tabs bar */
14050
- .mint-rack-editor__tabs {
14051
- display: flex;
14052
- align-items: center;
14053
- padding: 0.5rem 0.5rem 0;
14054
- border-bottom: 1px solid var(--border-color);
14055
- overflow-x: auto;
14056
- }
14057
- .mint-rack-editor__tabs-inner {
14058
- display: flex;
14059
- align-items: center;
14060
- gap: 2px;
14061
- }
14062
- .mint-rack-editor__tab {
14004
+ /* Outer wrapper anchors the status dot; NO overflow hidden */
14005
+ .mint-avatar {
14063
14006
  position: relative;
14064
- display: flex;
14007
+ display: inline-block;
14008
+ flex-shrink: 0;
14009
+ line-height: 0; /* prevents inline-baseline gap under the face */
14010
+ }
14011
+
14012
+ /* Inner face — holds photo/initials; CLIPS its own contents */
14013
+ .mint-avatar__face {
14014
+ display: inline-flex;
14065
14015
  align-items: center;
14066
- gap: 0.5rem;
14067
- padding: 0.625rem 1rem;
14068
- font-size: 0.875rem;
14016
+ justify-content: center;
14017
+ width: 100%;
14018
+ height: 100%;
14019
+ border-radius: 50%;
14020
+ overflow: hidden;
14021
+ /* font-weight 500 (medium) matches the platform's inline avatar typography
14022
+ — text-sm font-medium text-white in admin/UserTable.vue:292. */
14069
14023
  font-weight: 500;
14070
- border-top-left-radius: 0.5rem;
14071
- border-top-right-radius: 0.5rem;
14072
- border: 1px solid transparent;
14073
- cursor: grab;
14074
- transition: all 0.2s;
14075
- background: transparent;
14076
- color: var(--text-muted);
14077
- white-space: nowrap;
14024
+ color: white;
14025
+ background: var(--bg-tertiary);
14078
14026
  }
14079
- .mint-rack-editor__tab:active {
14080
- cursor: grabbing;
14027
+
14028
+ /* Sizes — applied on the wrapper so face fills 100%.
14029
+ md = 32px to match the platform's canonical w-8 h-8 admin/user listing
14030
+ size. Pre-0.16.5, md was 40px. */
14031
+ .mint-avatar--xs { width: 24px; height: 24px; font-size: 0.625rem;
14081
14032
  }
14082
- .mint-rack-editor__tab:hover {
14083
- background-color: var(--bg-tertiary);
14084
- color: var(--text-secondary);
14033
+ .mint-avatar--sm { width: 28px; height: 28px; font-size: 0.75rem;
14085
14034
  }
14086
- .mint-rack-editor__tab--active {
14087
- background-color: var(--bg-secondary);
14088
- color: var(--text-primary);
14089
- border-color: var(--border-color);
14090
- border-bottom-color: var(--bg-secondary);
14091
- margin-bottom: -1px;
14092
- z-index: 1;
14035
+ .mint-avatar--md { width: 32px; height: 32px; font-size: 0.875rem;
14093
14036
  }
14094
- .mint-rack-editor__tab--dragging {
14095
- opacity: 0.5;
14037
+ .mint-avatar--lg { width: 40px; height: 40px; font-size: 1rem;
14096
14038
  }
14097
- .mint-rack-editor__tab--drag-over {
14098
- box-shadow: 0 0 0 2px #6366f1, 0 0 0 3px white;
14039
+ .mint-avatar--xl { width: 56px; height: 56px; font-size: 1.25rem;
14099
14040
  }
14100
14041
 
14101
- /* Slot color dot */
14102
- .mint-rack-editor__slot-dot {
14103
- width: 0.625rem;
14104
- height: 0.625rem;
14105
- border-radius: 9999px;
14106
- flex-shrink: 0;
14107
- box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2);
14042
+ /* Image */
14043
+ .mint-avatar__image {
14044
+ width: 100%;
14045
+ height: 100%;
14046
+ object-fit: cover;
14108
14047
  }
14109
14048
 
14110
- /* Sample count badge */
14111
- .mint-rack-editor__count {
14112
- font-size: 0.75rem;
14113
- padding: 0.125rem 0.375rem;
14114
- border-radius: var(--radius);
14115
- font-weight: 500;
14116
- }
14117
- .mint-rack-editor__count--active {
14118
- background-color: rgba(16, 185, 129, 0.15);
14119
- color: #10b981;
14049
+ /* Initials */
14050
+ .mint-avatar__initials {
14051
+ line-height: 1;
14052
+ user-select: none;
14120
14053
  }
14121
- .mint-rack-editor__count--inactive {
14122
- background-color: var(--bg-tertiary);
14054
+
14055
+ /* Fallback SVG icon */
14056
+ .mint-avatar__fallback {
14057
+ width: 60%;
14058
+ height: 60%;
14123
14059
  color: var(--text-muted);
14124
14060
  }
14125
14061
 
14126
- /* Remove button on tab */
14127
- .mint-rack-editor__tab-remove {
14062
+ /* Status dot — absolutely positioned on the outer wrapper, unclipped by face */
14063
+ .mint-avatar__status {
14128
14064
  position: absolute;
14129
- top: -4px;
14130
- right: -4px;
14131
- width: 16px;
14132
- height: 16px;
14133
- border-radius: 9999px;
14065
+ right: -2px;
14066
+ bottom: -2px;
14067
+ width: 30%;
14068
+ height: 30%;
14069
+ min-width: 8px;
14070
+ min-height: 8px;
14071
+ border-radius: 50%;
14072
+ border: 2px solid var(--bg-primary);
14073
+ box-sizing: border-box;
14074
+ }
14075
+ .mint-avatar__status--online { background-color: var(--mint-success);
14076
+ }
14077
+ .mint-avatar__status--away { background-color: var(--mint-warning);
14078
+ }
14079
+ .mint-avatar__status--busy { background-color: var(--mint-error);
14080
+ }
14081
+ .mint-avatar__status--offline { background-color: var(--text-muted);
14082
+ }
14083
+ /* Breadcrumb Component Styles */
14084
+ .mint-breadcrumb__list {
14134
14085
  display: flex;
14135
14086
  align-items: center;
14136
- justify-content: center;
14137
- font-size: 10px;
14138
- font-weight: 700;
14139
- background-color: rgba(239, 68, 68, 0.9);
14140
- color: white;
14141
- border: none;
14087
+ list-style: none;
14088
+ margin: 0;
14089
+ padding: 0;
14090
+ flex-wrap: wrap;
14091
+ gap: 0;
14092
+ }
14093
+ .mint-breadcrumb__item {
14094
+ display: flex;
14095
+ align-items: center;
14096
+ font-size: 0.8125rem;
14097
+ }
14098
+
14099
+ /* Ancestor link — text-secondary at rest, promoted to text-primary + soft pill on hover */
14100
+ .mint-breadcrumb__link {
14101
+ color: var(--text-secondary);
14142
14102
  cursor: pointer;
14143
- opacity: 0;
14144
- transition: opacity 0.15s, transform 0.15s;
14103
+ text-decoration: none;
14104
+ transition: color 0.15s ease, background-color 0.15s ease;
14105
+ background: none;
14106
+ border: none;
14107
+ padding: 0.1875rem 0.5rem;
14108
+ margin: 0 -0.25rem;
14109
+ border-radius: var(--radius-sm);
14110
+ font: inherit;
14111
+ font-size: 0.8125rem;
14145
14112
  }
14146
- .mint-rack-editor__tab:hover .mint-rack-editor__tab-remove {
14147
- opacity: 1;
14113
+ .mint-breadcrumb__link:hover {
14114
+ color: var(--text-primary);
14115
+ background-color: var(--bg-secondary);
14148
14116
  }
14149
- .mint-rack-editor__tab-remove:hover {
14150
- transform: scale(1.1);
14117
+ .mint-breadcrumb__link:focus-visible {
14118
+ outline: none;
14119
+ box-shadow: var(--focus-ring);
14151
14120
  }
14152
14121
 
14153
- /* Add rack button */
14154
- .mint-rack-editor__add-btn {
14155
- display: flex;
14156
- align-items: center;
14157
- gap: 0.375rem;
14158
- margin-left: 0.25rem;
14159
- padding: 0.5rem 0.75rem;
14160
- font-size: 0.75rem;
14122
+ /* Current segment text-primary + 500 weight */
14123
+ .mint-breadcrumb__current {
14124
+ color: var(--text-primary);
14161
14125
  font-weight: 500;
14162
- border-radius: var(--radius-md);
14163
- cursor: pointer;
14164
- transition: all 0.2s;
14165
- border: none;
14166
- background: transparent;
14126
+ padding: 0.1875rem 0.5rem;
14127
+ margin: 0 -0.25rem;
14128
+ }
14129
+
14130
+ /* Chevron separator — thin, text-muted */
14131
+ .mint-breadcrumb__separator {
14167
14132
  color: var(--text-muted);
14133
+ user-select: none;
14134
+ display: inline-flex;
14135
+ align-items: center;
14136
+ padding: 0 0.25rem;
14168
14137
  }
14169
- .mint-rack-editor__add-btn:hover {
14170
- background-color: rgba(16, 185, 129, 0.1);
14171
- color: #10b981;
14138
+ .mint-breadcrumb__chevron {
14139
+ width: 0.875rem;
14140
+ height: 0.875rem;
14172
14141
  }
14173
-
14174
- /* Toolbar */
14175
- .mint-rack-editor__toolbar {
14142
+ /* ChartContainer Component Styles */
14143
+ .mint-chart {
14144
+ background-color: var(--bg-card);
14145
+ border: 1px solid var(--border-color);
14146
+ border-radius: var(--radius-lg);
14147
+ overflow: hidden;
14148
+ }
14149
+ .mint-chart__header {
14176
14150
  display: flex;
14177
- flex-wrap: wrap;
14178
- align-items: center;
14179
- gap: 0.5rem;
14180
- padding: 0.75rem 1rem;
14151
+ align-items: flex-start;
14152
+ justify-content: space-between;
14153
+ gap: 1rem;
14154
+ padding: 1rem 1.5rem;
14181
14155
  border-bottom: 1px solid var(--border-color);
14182
14156
  }
14183
- .mint-rack-editor__toolbar-group {
14184
- display: flex;
14185
- align-items: center;
14186
- gap: 0.75rem;
14187
- padding: 0.5rem 0.75rem;
14188
- border-radius: var(--radius-md);
14189
- background-color: var(--bg-tertiary);
14190
- border: 1px solid var(--border-color);
14157
+ .mint-chart__header-text {
14158
+ flex: 1;
14159
+ min-width: 0;
14191
14160
  }
14192
- .mint-rack-editor__toolbar-label {
14193
- font-size: 0.75rem;
14194
- font-weight: 500;
14195
- text-transform: uppercase;
14196
- letter-spacing: 0.025em;
14161
+ .mint-chart__title {
14162
+ font-size: 1rem;
14163
+ font-weight: 600;
14164
+ color: var(--text-primary);
14165
+ margin-top: 0 !important;
14166
+ margin-bottom: 0 !important;
14167
+ padding: 0 !important;
14168
+ }
14169
+ .mint-chart__description {
14170
+ font-size: 0.8125rem;
14197
14171
  color: var(--text-muted);
14172
+ margin-top: 0.25rem !important;
14173
+ margin-bottom: 0 !important;
14174
+ line-height: 1.4;
14175
+ padding: 0 !important;
14198
14176
  }
14199
- .mint-rack-editor__toolbar-section {
14177
+ .mint-chart__toolbar {
14200
14178
  display: flex;
14201
14179
  align-items: center;
14202
14180
  gap: 0.5rem;
14181
+ flex-shrink: 0;
14203
14182
  }
14204
- .mint-rack-editor__toolbar-divider {
14205
- width: 1px;
14206
- height: 1.5rem;
14207
- background-color: var(--border-color);
14183
+ .mint-chart__body {
14184
+ position: relative;
14185
+ min-height: 12rem;
14208
14186
  }
14209
-
14210
- /* Format selector buttons */
14211
- .mint-rack-editor__format-btns {
14187
+ .mint-chart__loading-overlay {
14188
+ position: absolute;
14189
+ inset: 0;
14212
14190
  display: flex;
14213
- border-radius: var(--radius);
14214
- overflow: hidden;
14215
- border: 1px solid var(--border-color);
14216
- }
14217
- .mint-rack-editor__format-btn {
14218
- padding: 0.25rem 0.75rem;
14219
- font-size: 0.875rem;
14220
- font-weight: 500;
14221
- cursor: pointer;
14222
- transition: all 0.2s;
14223
- border: none;
14224
- }
14225
- .mint-rack-editor__format-btn--active {
14226
- background-color: var(--color-primary, #10b981);
14227
- color: white;
14228
- font-weight: 600;
14191
+ align-items: center;
14192
+ justify-content: center;
14193
+ background-color: var(--bg-card);
14194
+ z-index: 1;
14229
14195
  }
14230
- .mint-rack-editor__format-btn--inactive {
14231
- background-color: var(--bg-secondary);
14196
+ .mint-chart__legend {
14197
+ padding: 0.75rem 1.5rem;
14198
+ border-top: 1px solid var(--border-color);
14199
+ font-size: 0.8125rem;
14232
14200
  color: var(--text-secondary);
14233
14201
  }
14234
14202
 
14235
- /* Slot selector buttons */
14236
- .mint-rack-editor__slot-btns {
14203
+ .mint-bio-template-experiment-workspace[data-v-9eb2d454] {
14237
14204
  display: flex;
14238
- gap: 2px;
14205
+ flex-direction: column;
14206
+ gap: 1rem;
14207
+ min-width: 0;
14239
14208
  }
14240
- .mint-rack-editor__slot-btn {
14241
- width: 1.75rem;
14242
- height: 1.75rem;
14243
- border-radius: var(--radius);
14244
- font-size: 0.75rem;
14245
- font-weight: 700;
14246
- cursor: pointer;
14247
- transition: all 0.2s;
14248
- border: 1.5px solid transparent;
14209
+ .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454] {
14210
+ display: flex;
14211
+ align-items: center;
14212
+ justify-content: space-between;
14213
+ gap: 0.75rem;
14249
14214
  }
14250
-
14251
- /* Toolbar spacer */
14252
- .mint-rack-editor__toolbar-spacer {
14253
- flex: 1;
14215
+ .mint-bio-template-experiment-workspace__status[data-v-9eb2d454] {
14216
+ flex: 1 1 auto;
14217
+ min-width: 0;
14254
14218
  }
14255
-
14256
- /* Action buttons */
14257
- .mint-rack-editor__action-btn {
14219
+ .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
14258
14220
  display: flex;
14259
- align-items: center;
14260
- gap: 0.375rem;
14261
- padding: 0.375rem 0.75rem;
14262
- font-size: 0.875rem;
14263
- border-radius: var(--radius);
14264
- cursor: pointer;
14265
- transition: all 0.2s;
14266
- background-color: var(--bg-tertiary);
14267
- color: var(--text-secondary);
14268
- border: 1px solid var(--border-color);
14221
+ flex: 0 0 auto;
14222
+ gap: 0.5rem;
14269
14223
  }
14270
- .mint-rack-editor__action-btn:hover {
14271
- opacity: 0.8;
14224
+ .mint-bio-template-experiment-workspace__meta[data-v-9eb2d454],
14225
+ .mint-bio-template-experiment-workspace__template-version[data-v-9eb2d454] {
14226
+ margin: 0;
14227
+ color: var(--text-secondary, #64748b);
14228
+ font-family: var(--font-mono, 'Fira Code', monospace);
14229
+ font-size: 0.75rem;
14272
14230
  }
14273
-
14274
- /* Plate content area */
14275
- .mint-rack-editor__plate {
14231
+ .mint-bio-template-experiment-workspace__templates[data-v-9eb2d454] {
14232
+ display: grid;
14233
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
14234
+ gap: 0.75rem;
14235
+ }
14236
+ .mint-bio-template-experiment-workspace__template[data-v-9eb2d454] {
14237
+ min-width: 0;
14276
14238
  padding: 1rem;
14277
- flex: 1;
14278
- overflow: auto;
14239
+ border: 1px solid var(--border-color, #e5e7eb);
14240
+ border-radius: 0.5rem;
14241
+ background: var(--bg-primary, #ffffff);
14279
14242
  }
14280
-
14281
- /* Readonly overlay */
14282
- .mint-rack-editor--readonly {
14283
- pointer-events: none;
14284
- opacity: 0.7;
14243
+ .mint-bio-template-experiment-workspace__template-id[data-v-9eb2d454] {
14244
+ margin: 0;
14245
+ color: var(--text-primary, #0f172a);
14246
+ font-family: var(--font-mono, 'Fira Code', monospace);
14247
+ font-size: 0.875rem;
14285
14248
  }
14286
- /* GroupAssigner Component Styles */
14287
- .mint-group-assigner {
14288
- display: flex;
14289
- flex-direction: column;
14290
- gap: 1rem;
14249
+ @media (max-width: 48rem) {
14250
+ .mint-bio-template-experiment-workspace__toolbar[data-v-9eb2d454],
14251
+ .mint-bio-template-experiment-workspace__actions[data-v-9eb2d454] {
14252
+ align-items: stretch;
14253
+ flex-direction: column;
14291
14254
  }
14292
-
14293
- /* Zones container */
14294
- .mint-group-assigner__zones {
14295
- display: grid;
14296
- grid-template-columns: 1fr 1fr;
14297
- gap: 0.75rem;
14298
14255
  }
14299
14256
 
14300
- /* Zone */
14301
- .mint-group-assigner__zone {
14257
+ .mint-bio-template-preset-workspace[data-v-0cb9aa98] {
14302
14258
  display: flex;
14303
14259
  flex-direction: column;
14304
- min-height: 8rem;
14305
- padding: 0.75rem;
14306
- border: 2px dashed var(--border-color);
14307
- border-radius: var(--radius);
14308
- background-color: var(--bg-secondary);
14309
- transition: border-color 0.15s ease, background-color 0.15s ease;
14310
- }
14311
- .mint-group-assigner__zone--dragover {
14312
- border-color: var(--zone-color);
14313
- background-color: color-mix(in srgb, var(--zone-color) 8%, var(--bg-secondary));
14260
+ gap: 1rem;
14261
+ min-width: 0;
14314
14262
  }
14315
- .mint-group-assigner__zone-header {
14263
+ .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98] {
14316
14264
  display: flex;
14317
14265
  align-items: center;
14318
14266
  justify-content: space-between;
14319
- margin-bottom: 0.5rem;
14320
- padding-bottom: 0.5rem;
14321
- border-bottom: 1px solid var(--border-color);
14322
- }
14323
- .mint-group-assigner__zone-label {
14324
- font-size: 0.8125rem;
14325
- font-weight: 600;
14326
- color: var(--zone-color);
14267
+ gap: 0.75rem;
14327
14268
  }
14328
- .mint-group-assigner__zone-count {
14329
- font-size: 0.75rem;
14330
- color: var(--text-muted);
14269
+ .mint-bio-template-preset-workspace__status[data-v-0cb9aa98] {
14270
+ flex: 1 1 auto;
14271
+ min-width: 0;
14331
14272
  }
14332
- .mint-group-assigner__zone-content {
14333
- flex: 1;
14273
+ .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
14334
14274
  display: flex;
14335
- flex-wrap: wrap;
14336
- align-content: flex-start;
14337
- gap: 0.375rem;
14275
+ flex: 0 0 auto;
14276
+ gap: 0.5rem;
14338
14277
  }
14339
- .mint-group-assigner__zone-empty {
14340
- display: flex;
14341
- align-items: center;
14342
- justify-content: center;
14343
- width: 100%;
14344
- height: 100%;
14345
- font-size: 0.8125rem;
14346
- color: var(--text-muted);
14278
+ .mint-bio-template-preset-workspace__meta[data-v-0cb9aa98],
14279
+ .mint-bio-template-preset-workspace__sidebar-subtitle[data-v-0cb9aa98],
14280
+ .mint-bio-template-preset-workspace__template-meta[data-v-0cb9aa98] {
14281
+ margin: 0;
14282
+ color: var(--text-secondary, #64748b);
14283
+ font-family: var(--font-mono, 'Fira Code', monospace);
14284
+ font-size: 0.75rem;
14347
14285
  }
14348
-
14349
- /* Pills */
14350
- .mint-group-assigner__pill {
14351
- display: inline-flex;
14352
- align-items: center;
14353
- gap: 0.375rem;
14354
- padding: 0.375rem 0.5rem;
14355
- background-color: var(--bg-card);
14356
- border: 1px solid var(--border-color);
14357
- border-radius: 9999px;
14358
- cursor: grab;
14359
- user-select: none;
14360
- transition: transform 0.15s ease, box-shadow 0.15s ease;
14286
+ .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
14287
+ display: grid;
14288
+ grid-template-columns: minmax(16rem, max-content) minmax(0, 1fr);
14289
+ gap: 1rem;
14290
+ align-items: start;
14291
+ min-width: 0;
14361
14292
  }
14362
- .mint-group-assigner__pill:hover {
14363
- box-shadow: var(--shadow-sm);
14293
+ .mint-bio-template-preset-workspace__sidebar-title[data-v-0cb9aa98] {
14294
+ margin: 0;
14295
+ color: var(--text-primary, #0f172a);
14296
+ font-size: 0.875rem;
14297
+ font-weight: 600;
14364
14298
  }
14365
- .mint-group-assigner__pill:active {
14366
- cursor: grabbing;
14299
+ .mint-bio-template-preset-workspace__view-nav[data-v-0cb9aa98] {
14300
+ margin-top: 0.5rem;
14367
14301
  }
14368
- .mint-group-assigner__pill--unassigned {
14369
- background-color: var(--bg-tertiary);
14302
+ .mint-bio-template-preset-workspace__templates[data-v-0cb9aa98] {
14303
+ display: grid;
14304
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
14305
+ gap: 0.75rem;
14370
14306
  }
14371
- .mint-group-assigner__pill--dragging {
14372
- opacity: 0.5;
14373
- transform: scale(0.95);
14307
+ .mint-bio-template-preset-workspace__template[data-v-0cb9aa98] {
14308
+ min-width: 0;
14309
+ padding: 1rem;
14310
+ border: 1px solid var(--border-color, #e5e7eb);
14311
+ border-radius: 0.5rem;
14312
+ background: var(--bg-primary, #ffffff);
14374
14313
  }
14375
- .mint-group-assigner__pill-color {
14376
- width: 0.625rem;
14377
- height: 0.625rem;
14378
- border-radius: 50%;
14379
- flex-shrink: 0;
14314
+ .mint-bio-template-preset-workspace__template-id[data-v-0cb9aa98] {
14315
+ margin: 0;
14316
+ color: var(--text-primary, #0f172a);
14317
+ font-family: var(--font-mono, 'Fira Code', monospace);
14318
+ font-size: 0.875rem;
14319
+ }
14320
+ @media (max-width: 48rem) {
14321
+ .mint-bio-template-preset-workspace__toolbar[data-v-0cb9aa98],
14322
+ .mint-bio-template-preset-workspace__actions[data-v-0cb9aa98] {
14323
+ align-items: stretch;
14324
+ flex-direction: column;
14380
14325
  }
14381
- .mint-group-assigner__pill-name {
14382
- font-size: 0.8125rem;
14383
- font-weight: 500;
14384
- color: var(--text-primary);
14385
- white-space: nowrap;
14326
+ .mint-bio-template-preset-workspace__main[data-v-0cb9aa98] {
14327
+ grid-template-columns: minmax(0, 1fr);
14386
14328
  }
14387
- .mint-group-assigner__pill-count {
14388
- font-size: 0.6875rem;
14389
- color: var(--text-muted);
14390
- padding: 0.125rem 0.375rem;
14391
- background-color: var(--bg-tertiary);
14392
- border-radius: 9999px;
14393
14329
  }
14394
- .mint-group-assigner__pill-remove {
14330
+ /* RackEditor Component Styles */
14331
+ .mint-rack-editor {
14395
14332
  display: flex;
14396
- align-items: center;
14397
- justify-content: center;
14398
- width: 1.125rem;
14399
- height: 1.125rem;
14400
- padding: 0;
14401
- background: none;
14402
- border: none;
14403
- color: var(--text-muted);
14404
- border-radius: 50%;
14405
- cursor: pointer;
14406
- transition: color 0.15s ease, background-color 0.15s ease;
14407
- }
14408
- .mint-group-assigner__pill-remove:hover {
14409
- color: var(--mint-error);
14410
- background-color: var(--mint-error-bg);
14333
+ flex-direction: column;
14411
14334
  }
14412
14335
 
14413
- /* Unassigned section */
14414
- .mint-group-assigner__unassigned {
14336
+ /* Rack tabs bar */
14337
+ .mint-rack-editor__tabs {
14415
14338
  display: flex;
14416
- flex-direction: column;
14417
- gap: 0.5rem;
14339
+ align-items: center;
14340
+ padding: 0.5rem 0.5rem 0;
14341
+ border-bottom: 1px solid var(--border-color);
14342
+ overflow-x: auto;
14418
14343
  }
14419
- .mint-group-assigner__unassigned-header {
14344
+ .mint-rack-editor__tabs-inner {
14420
14345
  display: flex;
14421
14346
  align-items: center;
14422
- justify-content: space-between;
14347
+ gap: 2px;
14423
14348
  }
14424
- .mint-group-assigner__unassigned-title {
14425
- font-size: 0.75rem;
14349
+ .mint-rack-editor__tab {
14350
+ position: relative;
14351
+ display: flex;
14352
+ align-items: center;
14353
+ gap: 0.5rem;
14354
+ padding: 0.625rem 1rem;
14355
+ font-size: 0.875rem;
14426
14356
  font-weight: 500;
14357
+ border-top-left-radius: 0.5rem;
14358
+ border-top-right-radius: 0.5rem;
14359
+ border: 1px solid transparent;
14360
+ cursor: grab;
14361
+ transition: all 0.2s;
14362
+ background: transparent;
14427
14363
  color: var(--text-muted);
14428
- text-transform: uppercase;
14429
- letter-spacing: 0.025em;
14364
+ white-space: nowrap;
14430
14365
  }
14431
- .mint-group-assigner__clear-btn {
14432
- font-size: 0.75rem;
14433
- color: var(--color-primary);
14434
- background: none;
14435
- border: none;
14436
- padding: 0;
14437
- cursor: pointer;
14366
+ .mint-rack-editor__tab:active {
14367
+ cursor: grabbing;
14438
14368
  }
14439
- .mint-group-assigner__clear-btn:hover {
14440
- text-decoration: underline;
14369
+ .mint-rack-editor__tab:hover {
14370
+ background-color: var(--bg-tertiary);
14371
+ color: var(--text-secondary);
14441
14372
  }
14442
- .mint-group-assigner__unassigned-list {
14443
- display: flex;
14444
- flex-wrap: wrap;
14445
- gap: 0.375rem;
14446
- max-height: 8rem;
14447
- overflow-y: auto;
14448
- padding: 0.5rem;
14373
+ .mint-rack-editor__tab--active {
14449
14374
  background-color: var(--bg-secondary);
14450
- border: 1px solid var(--border-color);
14451
- border-radius: var(--radius-sm);
14375
+ color: var(--text-primary);
14376
+ border-color: var(--border-color);
14377
+ border-bottom-color: var(--bg-secondary);
14378
+ margin-bottom: -1px;
14379
+ z-index: 1;
14452
14380
  }
14453
-
14454
- /* Validation */
14455
- .mint-group-assigner__validation {
14456
- display: flex;
14457
- align-items: center;
14458
- gap: 0.5rem;
14459
- padding: 0.5rem 0.75rem;
14460
- font-size: 0.8125rem;
14461
- color: var(--mint-warning);
14462
- background-color: var(--mint-warning-bg);
14463
- border-radius: var(--radius-sm);
14381
+ .mint-rack-editor__tab--dragging {
14382
+ opacity: 0.5;
14464
14383
  }
14465
- /* ReagentEditor Component Styles */
14466
- .mint-reagent-editor {
14467
- display: flex;
14468
- flex-direction: column;
14469
- background-color: var(--bg-secondary);
14470
- border-radius: var(--radius-lg);
14471
- border: 1px solid var(--border-color);
14472
- border-top: 3px solid var(--reagent-color, var(--color-primary));
14473
- overflow: hidden;
14384
+ .mint-rack-editor__tab--drag-over {
14385
+ box-shadow: 0 0 0 2px #6366f1, 0 0 0 3px white;
14474
14386
  }
14475
14387
 
14476
- /* Sections */
14477
- .mint-reagent-editor__section {
14478
- padding: 0.875rem 1rem;
14479
- border-bottom: 1px solid var(--border-color);
14388
+ /* Slot color dot */
14389
+ .mint-rack-editor__slot-dot {
14390
+ width: 0.625rem;
14391
+ height: 0.625rem;
14392
+ border-radius: 9999px;
14393
+ flex-shrink: 0;
14394
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2);
14480
14395
  }
14481
- .mint-reagent-editor__section-header {
14482
- display: flex;
14483
- align-items: center;
14484
- gap: 0.375rem;
14485
- font-size: 0.6875rem;
14486
- font-weight: 600;
14487
- text-transform: uppercase;
14488
- letter-spacing: 0.05em;
14489
- color: var(--text-muted);
14490
- margin-bottom: 0.75rem;
14396
+
14397
+ /* Sample count badge */
14398
+ .mint-rack-editor__count {
14399
+ font-size: 0.75rem;
14400
+ padding: 0.125rem 0.375rem;
14401
+ border-radius: var(--radius);
14402
+ font-weight: 500;
14491
14403
  }
14492
- .mint-reagent-editor__section-icon {
14493
- width: 0.875rem;
14494
- height: 0.875rem;
14495
- flex-shrink: 0;
14496
- color: var(--reagent-color, var(--color-primary));
14497
- opacity: 0.7;
14404
+ .mint-rack-editor__count--active {
14405
+ background-color: rgba(16, 185, 129, 0.15);
14406
+ color: #10b981;
14407
+ }
14408
+ .mint-rack-editor__count--inactive {
14409
+ background-color: var(--bg-tertiary);
14410
+ color: var(--text-muted);
14498
14411
  }
14499
14412
 
14500
- /* Identity */
14501
- .mint-reagent-editor__identity {
14413
+ /* Remove button on tab */
14414
+ .mint-rack-editor__tab-remove {
14415
+ position: absolute;
14416
+ top: -4px;
14417
+ right: -4px;
14418
+ width: 16px;
14419
+ height: 16px;
14420
+ border-radius: 9999px;
14502
14421
  display: flex;
14503
14422
  align-items: center;
14504
- gap: 0.625rem;
14505
- }
14506
- .mint-reagent-editor__color-wrapper {
14507
- position: relative;
14508
- flex-shrink: 0;
14423
+ justify-content: center;
14424
+ font-size: 10px;
14425
+ font-weight: 700;
14426
+ background-color: rgba(239, 68, 68, 0.9);
14427
+ color: white;
14428
+ border: none;
14509
14429
  cursor: pointer;
14510
- }
14511
- .mint-reagent-editor__color-input {
14512
- position: absolute;
14513
- inset: 0;
14514
- width: 100%;
14515
- height: 100%;
14516
14430
  opacity: 0;
14517
- cursor: pointer;
14431
+ transition: opacity 0.15s, transform 0.15s;
14518
14432
  }
14519
- .mint-reagent-editor__color-swatch {
14520
- display: block;
14521
- width: 1.75rem;
14522
- height: 1.75rem;
14523
- border-radius: var(--radius);
14524
- box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--border-color);
14525
- transition: box-shadow 0.15s ease;
14433
+ .mint-rack-editor__tab:hover .mint-rack-editor__tab-remove {
14434
+ opacity: 1;
14526
14435
  }
14527
- .mint-reagent-editor__color-wrapper:hover .mint-reagent-editor__color-swatch {
14528
- box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--reagent-color, var(--border-color));
14436
+ .mint-rack-editor__tab-remove:hover {
14437
+ transform: scale(1.1);
14529
14438
  }
14530
- .mint-reagent-editor__name-input {
14531
- flex: 1;
14532
- min-width: 0;
14533
- background: transparent;
14439
+
14440
+ /* Add rack button */
14441
+ .mint-rack-editor__add-btn {
14442
+ display: flex;
14443
+ align-items: center;
14444
+ gap: 0.375rem;
14445
+ margin-left: 0.25rem;
14446
+ padding: 0.5rem 0.75rem;
14447
+ font-size: 0.75rem;
14448
+ font-weight: 500;
14449
+ border-radius: var(--radius-md);
14450
+ cursor: pointer;
14451
+ transition: all 0.2s;
14534
14452
  border: none;
14535
- outline: none;
14536
- font-family: inherit;
14537
- font-size: 0.9375rem;
14538
- font-weight: 600;
14539
- color: var(--text-primary);
14540
- padding: 0.25rem 0;
14541
- border-bottom: 1px solid transparent;
14542
- transition: border-color 0.15s ease;
14543
- }
14544
- .mint-reagent-editor__name-input::placeholder {
14453
+ background: transparent;
14545
14454
  color: var(--text-muted);
14546
- font-weight: 400;
14547
14455
  }
14548
- .mint-reagent-editor__name-input:focus {
14549
- border-bottom-color: var(--reagent-color, var(--color-primary));
14456
+ .mint-rack-editor__add-btn:hover {
14457
+ background-color: rgba(16, 185, 129, 0.1);
14458
+ color: #10b981;
14550
14459
  }
14551
14460
 
14552
- /* Fields & layout */
14553
- .mint-reagent-editor__field {
14554
- margin-bottom: 0.625rem;
14555
- }
14556
- .mint-reagent-editor__field:last-child {
14557
- margin-bottom: 0;
14558
- }
14559
- .mint-reagent-editor__field--flex {
14560
- display: flex;
14561
- flex-direction: column;
14562
- gap: 0.25rem;
14563
- flex: 1 1 0;
14564
- width: 0;
14565
- min-width: 0;
14566
- }
14567
- .mint-reagent-editor__row {
14461
+ /* Toolbar */
14462
+ .mint-rack-editor__toolbar {
14568
14463
  display: flex;
14569
- gap: 0.75rem;
14464
+ flex-wrap: wrap;
14465
+ align-items: center;
14466
+ gap: 0.5rem;
14467
+ padding: 0.75rem 1rem;
14468
+ border-bottom: 1px solid var(--border-color);
14570
14469
  }
14571
- .mint-reagent-editor__position-row {
14470
+ .mint-rack-editor__toolbar-group {
14572
14471
  display: flex;
14573
- gap: 0.625rem;
14574
- width: 100%;
14575
- }
14576
- .mint-reagent-editor .mint-select {
14577
- width: 100%;
14578
- min-width: 0;
14472
+ align-items: center;
14473
+ gap: 0.75rem;
14474
+ padding: 0.5rem 0.75rem;
14475
+ border-radius: var(--radius-md);
14476
+ background-color: var(--bg-tertiary);
14477
+ border: 1px solid var(--border-color);
14579
14478
  }
14580
- .mint-reagent-editor__label {
14479
+ .mint-rack-editor__toolbar-label {
14581
14480
  font-size: 0.75rem;
14582
14481
  font-weight: 500;
14583
- color: var(--text-secondary);
14584
- }
14585
- .mint-reagent-editor__inline-input {
14586
- box-sizing: border-box;
14587
- width: 100%;
14588
- min-height: var(--form-height-sm);
14589
- padding: 0 0.625rem;
14590
- font-family: 'Fira Code', monospace;
14591
- font-size: 0.8rem;
14592
- font-weight: 500;
14593
- color: var(--text-primary);
14594
- background-color: var(--bg-primary);
14595
- border: 1px solid var(--border-color);
14596
- border-radius: var(--radius);
14597
- outline: none;
14598
14482
  text-transform: uppercase;
14599
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
14600
- }
14601
- .mint-reagent-editor__inline-input::placeholder {
14602
- text-transform: none;
14603
- }
14604
- .mint-reagent-editor__inline-input:focus {
14605
- border-color: var(--reagent-color, var(--color-primary));
14606
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
14483
+ letter-spacing: 0.025em;
14484
+ color: var(--text-muted);
14607
14485
  }
14608
- .mint-reagent-editor__inline-input--error {
14609
- border-color: var(--mint-error);
14486
+ .mint-rack-editor__toolbar-section {
14487
+ display: flex;
14488
+ align-items: center;
14489
+ gap: 0.5rem;
14610
14490
  }
14611
- .mint-reagent-editor__inline-input--error:focus {
14612
- border-color: var(--mint-error);
14613
- box-shadow: var(--focus-ring-error);
14491
+ .mint-rack-editor__toolbar-divider {
14492
+ width: 1px;
14493
+ height: 1.5rem;
14494
+ background-color: var(--border-color);
14614
14495
  }
14615
14496
 
14616
- /* Inline field validation error */
14617
- .mint-reagent-editor__field-error {
14618
- grid-column: 2;
14619
- font-size: 0.6875rem;
14620
- color: var(--mint-error);
14621
- line-height: 1.2;
14497
+ /* Format selector buttons */
14498
+ .mint-rack-editor__format-btns {
14499
+ display: flex;
14500
+ border-radius: var(--radius);
14501
+ overflow: hidden;
14502
+ border: 1px solid var(--border-color);
14622
14503
  }
14623
-
14624
- /* Unit select in section header — uses reagent color */
14625
- .mint-reagent-editor__unit-select {
14626
- margin-left: auto;
14627
- padding: 0.125rem 0.375rem;
14628
- font-family: 'Fira Code', monospace;
14629
- font-size: 0.6875rem;
14504
+ .mint-rack-editor__format-btn {
14505
+ padding: 0.25rem 0.75rem;
14506
+ font-size: 0.875rem;
14630
14507
  font-weight: 500;
14631
- color: var(--reagent-color, var(--color-primary));
14632
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 10%, transparent);
14633
- border: none;
14634
- border-radius: var(--radius-sm);
14635
14508
  cursor: pointer;
14636
- outline: none;
14637
- transition: background-color 0.15s ease;
14509
+ transition: all 0.2s;
14510
+ border: none;
14638
14511
  }
14639
- .mint-reagent-editor__unit-select:hover {
14640
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 18%, transparent);
14512
+ .mint-rack-editor__format-btn--active {
14513
+ background-color: var(--color-primary, #10b981);
14514
+ color: white;
14515
+ font-weight: 600;
14641
14516
  }
14642
-
14643
- /* Dilution generator */
14644
- .mint-reagent-editor__generator {
14645
- background-color: var(--bg-primary);
14646
- border: 1px solid var(--border-color);
14647
- border-radius: var(--radius);
14648
- padding: 0.75rem;
14649
- margin-bottom: 0.625rem;
14650
- overflow: hidden;
14517
+ .mint-rack-editor__format-btn--inactive {
14518
+ background-color: var(--bg-secondary);
14519
+ color: var(--text-secondary);
14651
14520
  }
14652
- .mint-reagent-editor__generator-inputs {
14521
+
14522
+ /* Slot selector buttons */
14523
+ .mint-rack-editor__slot-btns {
14653
14524
  display: flex;
14654
- gap: 0.625rem;
14655
- margin-bottom: 0.5rem;
14525
+ gap: 2px;
14656
14526
  }
14657
- .mint-reagent-editor__generator-inputs > * {
14658
- flex: 1;
14659
- min-width: 0;
14527
+ .mint-rack-editor__slot-btn {
14528
+ width: 1.75rem;
14529
+ height: 1.75rem;
14530
+ border-radius: var(--radius);
14531
+ font-size: 0.75rem;
14532
+ font-weight: 700;
14533
+ cursor: pointer;
14534
+ transition: all 0.2s;
14535
+ border: 1.5px solid transparent;
14660
14536
  }
14661
14537
 
14662
- /* Ensure all child controls fill their parent and can shrink */
14663
- .mint-reagent-editor .mint-number-input {
14664
- width: 100%;
14665
- min-width: 0;
14666
- }
14667
- .mint-reagent-editor .mint-number-input__input {
14668
- min-width: 0;
14669
- width: 0;
14538
+ /* Toolbar spacer */
14539
+ .mint-rack-editor__toolbar-spacer {
14670
14540
  flex: 1;
14671
14541
  }
14672
- .mint-reagent-editor .mint-number-input:focus-within {
14673
- border-color: var(--reagent-color, var(--color-primary));
14674
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
14675
- }
14676
- .mint-reagent-editor__presets {
14677
- display: flex;
14678
- gap: 0.375rem;
14679
- }
14680
- .mint-reagent-editor__preset-btn {
14681
- flex: 1;
14542
+
14543
+ /* Action buttons */
14544
+ .mint-rack-editor__action-btn {
14682
14545
  display: flex;
14683
14546
  align-items: center;
14684
- justify-content: center;
14685
- height: 1.75rem;
14686
- font-family: 'Fira Code', monospace;
14687
- font-size: 0.75rem;
14688
- font-weight: 500;
14547
+ gap: 0.375rem;
14548
+ padding: 0.375rem 0.75rem;
14549
+ font-size: 0.875rem;
14550
+ border-radius: var(--radius);
14551
+ cursor: pointer;
14552
+ transition: all 0.2s;
14553
+ background-color: var(--bg-tertiary);
14689
14554
  color: var(--text-secondary);
14690
- background-color: var(--bg-secondary);
14691
14555
  border: 1px solid var(--border-color);
14692
- border-radius: var(--radius-sm);
14693
- cursor: pointer;
14694
- transition: all 0.12s ease;
14695
14556
  }
14696
- .mint-reagent-editor__preset-btn:hover {
14697
- color: var(--reagent-color, var(--color-primary));
14698
- border-color: var(--reagent-color, var(--color-primary));
14699
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 8%, transparent);
14557
+ .mint-rack-editor__action-btn:hover {
14558
+ opacity: 0.8;
14700
14559
  }
14701
- .mint-reagent-editor__preset-btn:active {
14702
- transform: scale(0.96);
14560
+
14561
+ /* Plate content area */
14562
+ .mint-rack-editor__plate {
14563
+ padding: 1rem;
14564
+ flex: 1;
14565
+ overflow: auto;
14703
14566
  }
14704
14567
 
14705
- /* Manual entry */
14706
- .mint-reagent-editor__manual {
14568
+ /* Readonly overlay */
14569
+ .mint-rack-editor--readonly {
14570
+ pointer-events: none;
14571
+ opacity: 0.7;
14572
+ }
14573
+ /* GroupAssigner Component Styles */
14574
+ .mint-group-assigner {
14707
14575
  display: flex;
14708
- align-items: center;
14709
- gap: 0.375rem;
14710
- margin-bottom: 0.625rem;
14576
+ flex-direction: column;
14577
+ gap: 1rem;
14711
14578
  }
14712
- .mint-reagent-editor__manual .mint-number-input {
14713
- flex: 1;
14714
- width: 0; /* flex-basis override so flex: 1 controls sizing */
14579
+
14580
+ /* Zones container */
14581
+ .mint-group-assigner__zones {
14582
+ display: grid;
14583
+ grid-template-columns: 1fr 1fr;
14584
+ gap: 0.75rem;
14715
14585
  }
14716
- .mint-reagent-editor__add-btn {
14586
+
14587
+ /* Zone */
14588
+ .mint-group-assigner__zone {
14717
14589
  display: flex;
14718
- align-items: center;
14719
- justify-content: center;
14720
- width: var(--form-height-sm);
14721
- height: var(--form-height-sm);
14722
- flex-shrink: 0;
14590
+ flex-direction: column;
14591
+ min-height: 8rem;
14592
+ padding: 0.75rem;
14593
+ border: 2px dashed var(--border-color);
14723
14594
  border-radius: var(--radius);
14724
- background-color: var(--reagent-color, var(--color-primary));
14725
- color: white;
14726
- border: none;
14727
- cursor: pointer;
14728
- transition: filter 0.15s ease, transform 0.1s ease;
14595
+ background-color: var(--bg-secondary);
14596
+ transition: border-color 0.15s ease, background-color 0.15s ease;
14729
14597
  }
14730
- .mint-reagent-editor__add-btn:hover:not(:disabled) {
14731
- filter: brightness(0.88);
14598
+ .mint-group-assigner__zone--dragover {
14599
+ border-color: var(--zone-color);
14600
+ background-color: color-mix(in srgb, var(--zone-color) 8%, var(--bg-secondary));
14732
14601
  }
14733
- .mint-reagent-editor__add-btn:active:not(:disabled) {
14734
- transform: scale(0.92);
14602
+ .mint-group-assigner__zone-header {
14603
+ display: flex;
14604
+ align-items: center;
14605
+ justify-content: space-between;
14606
+ margin-bottom: 0.5rem;
14607
+ padding-bottom: 0.5rem;
14608
+ border-bottom: 1px solid var(--border-color);
14735
14609
  }
14736
- .mint-reagent-editor__add-btn:disabled {
14737
- opacity: var(--mint-disabled-opacity);
14738
- cursor: not-allowed;
14610
+ .mint-group-assigner__zone-label {
14611
+ font-size: 0.8125rem;
14612
+ font-weight: 600;
14613
+ color: var(--zone-color);
14739
14614
  }
14740
-
14741
- /* Level table */
14742
- .mint-reagent-editor__table {
14743
- border: 1px solid var(--border-color);
14744
- border-radius: var(--radius);
14745
- overflow: hidden;
14746
- max-height: 14rem;
14747
- display: flex;
14748
- flex-direction: column;
14615
+ .mint-group-assigner__zone-count {
14616
+ font-size: 0.75rem;
14617
+ color: var(--text-muted);
14749
14618
  }
14750
- .mint-reagent-editor__table-body {
14619
+ .mint-group-assigner__zone-content {
14751
14620
  flex: 1;
14752
- overflow-y: auto;
14753
- scrollbar-width: thin;
14754
- scrollbar-color: var(--scrollbar-thumb) transparent;
14621
+ display: flex;
14622
+ flex-wrap: wrap;
14623
+ align-content: flex-start;
14624
+ gap: 0.375rem;
14755
14625
  }
14756
- .mint-reagent-editor__table-header {
14626
+ .mint-group-assigner__zone-empty {
14757
14627
  display: flex;
14758
14628
  align-items: center;
14759
- padding: 0.375rem 0.5rem;
14760
- background-color: var(--bg-tertiary);
14761
- border-bottom: 1px solid var(--border-color);
14762
- }
14763
- .mint-reagent-editor__table-header .mint-reagent-editor__table-col {
14764
- font-size: 0.6875rem;
14765
- font-weight: 600;
14766
- text-transform: uppercase;
14767
- letter-spacing: 0.03em;
14629
+ justify-content: center;
14630
+ width: 100%;
14631
+ height: 100%;
14632
+ font-size: 0.8125rem;
14768
14633
  color: var(--text-muted);
14769
14634
  }
14770
- .mint-reagent-editor__table-row {
14771
- display: flex;
14635
+
14636
+ /* Pills */
14637
+ .mint-group-assigner__pill {
14638
+ display: inline-flex;
14772
14639
  align-items: center;
14773
- padding: 0.25rem 0.5rem;
14774
- border-bottom: 1px solid var(--border-color);
14775
- border-left: 2px solid transparent;
14776
- transition: background-color 0.1s ease, border-left-color 0.1s ease;
14640
+ gap: 0.375rem;
14641
+ padding: 0.375rem 0.5rem;
14642
+ background-color: var(--bg-card);
14643
+ border: 1px solid var(--border-color);
14644
+ border-radius: 9999px;
14645
+ cursor: grab;
14646
+ user-select: none;
14647
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
14777
14648
  }
14778
- .mint-reagent-editor__table-row:last-child {
14779
- border-bottom: none;
14649
+ .mint-group-assigner__pill:hover {
14650
+ box-shadow: var(--shadow-sm);
14780
14651
  }
14781
- .mint-reagent-editor__table-row:hover {
14782
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 5%, var(--bg-secondary));
14783
- border-left-color: var(--reagent-color, var(--color-primary));
14652
+ .mint-group-assigner__pill:active {
14653
+ cursor: grabbing;
14784
14654
  }
14785
- .mint-reagent-editor__table-col--level {
14786
- flex: 1;
14787
- min-width: 0;
14788
- display: flex;
14789
- align-items: baseline;
14790
- gap: 0.25rem;
14655
+ .mint-group-assigner__pill--unassigned {
14656
+ background-color: var(--bg-tertiary);
14791
14657
  }
14792
- .mint-reagent-editor__table-col--reps {
14793
- width: 5.5rem;
14794
- flex-shrink: 0;
14658
+ .mint-group-assigner__pill--dragging {
14659
+ opacity: 0.5;
14660
+ transform: scale(0.95);
14795
14661
  }
14796
- .mint-reagent-editor__table-col--action {
14797
- width: 1.75rem;
14662
+ .mint-group-assigner__pill-color {
14663
+ width: 0.625rem;
14664
+ height: 0.625rem;
14665
+ border-radius: 50%;
14798
14666
  flex-shrink: 0;
14799
- display: flex;
14800
- justify-content: center;
14801
14667
  }
14802
- .mint-reagent-editor__level-value {
14803
- font-family: 'Fira Code', monospace;
14668
+ .mint-group-assigner__pill-name {
14804
14669
  font-size: 0.8125rem;
14805
14670
  font-weight: 500;
14806
14671
  color: var(--text-primary);
14807
- overflow: hidden;
14808
- text-overflow: ellipsis;
14809
14672
  white-space: nowrap;
14810
14673
  }
14811
- .mint-reagent-editor__level-unit {
14812
- font-family: 'Fira Code', monospace;
14674
+ .mint-group-assigner__pill-count {
14813
14675
  font-size: 0.6875rem;
14814
14676
  color: var(--text-muted);
14677
+ padding: 0.125rem 0.375rem;
14678
+ background-color: var(--bg-tertiary);
14679
+ border-radius: 9999px;
14815
14680
  }
14816
- .mint-reagent-editor__remove-level-btn {
14681
+ .mint-group-assigner__pill-remove {
14817
14682
  display: flex;
14818
14683
  align-items: center;
14819
14684
  justify-content: center;
14820
- width: 1.375rem;
14821
- height: 1.375rem;
14822
- border-radius: var(--radius-sm);
14823
- background: transparent;
14824
- color: var(--text-muted);
14685
+ width: 1.125rem;
14686
+ height: 1.125rem;
14687
+ padding: 0;
14688
+ background: none;
14825
14689
  border: none;
14690
+ color: var(--text-muted);
14691
+ border-radius: 50%;
14826
14692
  cursor: pointer;
14827
- opacity: 0;
14828
- transition: opacity 0.1s ease, color 0.1s ease, background-color 0.1s ease;
14829
- }
14830
- .mint-reagent-editor__table-row:hover .mint-reagent-editor__remove-level-btn {
14831
- opacity: 1;
14693
+ transition: color 0.15s ease, background-color 0.15s ease;
14832
14694
  }
14833
- .mint-reagent-editor__remove-level-btn:hover {
14695
+ .mint-group-assigner__pill-remove:hover {
14834
14696
  color: var(--mint-error);
14835
14697
  background-color: var(--mint-error-bg);
14836
14698
  }
14837
14699
 
14838
- /* Empty state */
14839
- .mint-reagent-editor__empty {
14840
- text-align: center;
14841
- padding: 1.25rem 0.75rem;
14842
- font-size: 0.8125rem;
14700
+ /* Unassigned section */
14701
+ .mint-group-assigner__unassigned {
14702
+ display: flex;
14703
+ flex-direction: column;
14704
+ gap: 0.5rem;
14705
+ }
14706
+ .mint-group-assigner__unassigned-header {
14707
+ display: flex;
14708
+ align-items: center;
14709
+ justify-content: space-between;
14710
+ }
14711
+ .mint-group-assigner__unassigned-title {
14712
+ font-size: 0.75rem;
14713
+ font-weight: 500;
14843
14714
  color: var(--text-muted);
14844
- font-style: italic;
14715
+ text-transform: uppercase;
14716
+ letter-spacing: 0.025em;
14717
+ }
14718
+ .mint-group-assigner__clear-btn {
14719
+ font-size: 0.75rem;
14720
+ color: var(--color-primary);
14721
+ background: none;
14722
+ border: none;
14723
+ padding: 0;
14724
+ cursor: pointer;
14725
+ }
14726
+ .mint-group-assigner__clear-btn:hover {
14727
+ text-decoration: underline;
14728
+ }
14729
+ .mint-group-assigner__unassigned-list {
14730
+ display: flex;
14731
+ flex-wrap: wrap;
14732
+ gap: 0.375rem;
14733
+ max-height: 8rem;
14734
+ overflow-y: auto;
14735
+ padding: 0.5rem;
14736
+ background-color: var(--bg-secondary);
14737
+ border: 1px solid var(--border-color);
14738
+ border-radius: var(--radius-sm);
14845
14739
  }
14846
14740
 
14847
- /* Position summary — reagent-tinted background */
14848
- .mint-reagent-editor__summary {
14741
+ /* Validation */
14742
+ .mint-group-assigner__validation {
14849
14743
  display: flex;
14850
14744
  align-items: center;
14851
- justify-content: center;
14852
- gap: 0.625rem;
14853
- padding: 0.625rem 1rem;
14854
- background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 6%, var(--bg-tertiary));
14855
- border-bottom: 1px solid var(--border-color);
14745
+ gap: 0.5rem;
14746
+ padding: 0.5rem 0.75rem;
14747
+ font-size: 0.8125rem;
14748
+ color: var(--mint-warning);
14749
+ background-color: var(--mint-warning-bg);
14750
+ border-radius: var(--radius-sm);
14856
14751
  }
14857
- .mint-reagent-editor__summary-item {
14752
+ /* ReagentEditor Component Styles */
14753
+ .mint-reagent-editor {
14858
14754
  display: flex;
14859
- align-items: baseline;
14860
- gap: 0.25rem;
14755
+ flex-direction: column;
14756
+ background-color: var(--bg-secondary);
14757
+ border-radius: var(--radius-lg);
14758
+ border: 1px solid var(--border-color);
14759
+ border-top: 3px solid var(--reagent-color, var(--color-primary));
14760
+ overflow: hidden;
14861
14761
  }
14862
- .mint-reagent-editor__summary-value {
14863
- font-family: 'Fira Code', monospace;
14864
- font-size: 0.8125rem;
14865
- font-weight: 600;
14866
- color: var(--reagent-color, var(--text-primary));
14762
+
14763
+ /* Sections */
14764
+ .mint-reagent-editor__section {
14765
+ padding: 0.875rem 1rem;
14766
+ border-bottom: 1px solid var(--border-color);
14867
14767
  }
14868
- .mint-reagent-editor__summary-label {
14768
+ .mint-reagent-editor__section-header {
14769
+ display: flex;
14770
+ align-items: center;
14771
+ gap: 0.375rem;
14869
14772
  font-size: 0.6875rem;
14773
+ font-weight: 600;
14774
+ text-transform: uppercase;
14775
+ letter-spacing: 0.05em;
14870
14776
  color: var(--text-muted);
14777
+ margin-bottom: 0.75rem;
14871
14778
  }
14872
- .mint-reagent-editor__summary-dot {
14873
- width: 3px;
14874
- height: 3px;
14875
- border-radius: 50%;
14876
- background-color: var(--reagent-color, var(--text-muted));
14877
- opacity: 0.5;
14779
+ .mint-reagent-editor__section-icon {
14780
+ width: 0.875rem;
14781
+ height: 0.875rem;
14878
14782
  flex-shrink: 0;
14783
+ color: var(--reagent-color, var(--color-primary));
14784
+ opacity: 0.7;
14879
14785
  }
14880
14786
 
14881
- /* Overflow warning */
14882
- .mint-reagent-editor__summary--overflow {
14883
- background-color: var(--mint-warning-bg);
14787
+ /* Identity */
14788
+ .mint-reagent-editor__identity {
14789
+ display: flex;
14790
+ align-items: center;
14791
+ gap: 0.625rem;
14792
+ }
14793
+ .mint-reagent-editor__color-wrapper {
14794
+ position: relative;
14795
+ flex-shrink: 0;
14796
+ cursor: pointer;
14797
+ }
14798
+ .mint-reagent-editor__color-input {
14799
+ position: absolute;
14800
+ inset: 0;
14801
+ width: 100%;
14802
+ height: 100%;
14803
+ opacity: 0;
14804
+ cursor: pointer;
14805
+ }
14806
+ .mint-reagent-editor__color-swatch {
14807
+ display: block;
14808
+ width: 1.75rem;
14809
+ height: 1.75rem;
14810
+ border-radius: var(--radius);
14811
+ box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--border-color);
14812
+ transition: box-shadow 0.15s ease;
14813
+ }
14814
+ .mint-reagent-editor__color-wrapper:hover .mint-reagent-editor__color-swatch {
14815
+ box-shadow: 0 0 0 2px var(--bg-secondary), 0 0 0 3px var(--reagent-color, var(--border-color));
14816
+ }
14817
+ .mint-reagent-editor__name-input {
14818
+ flex: 1;
14819
+ min-width: 0;
14820
+ background: transparent;
14821
+ border: none;
14822
+ outline: none;
14823
+ font-family: inherit;
14824
+ font-size: 0.9375rem;
14825
+ font-weight: 600;
14826
+ color: var(--text-primary);
14827
+ padding: 0.25rem 0;
14828
+ border-bottom: 1px solid transparent;
14829
+ transition: border-color 0.15s ease;
14830
+ }
14831
+ .mint-reagent-editor__name-input::placeholder {
14832
+ color: var(--text-muted);
14833
+ font-weight: 400;
14834
+ }
14835
+ .mint-reagent-editor__name-input:focus {
14836
+ border-bottom-color: var(--reagent-color, var(--color-primary));
14884
14837
  }
14885
- .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-value {
14886
- color: var(--mint-warning-hover);
14838
+
14839
+ /* Fields & layout */
14840
+ .mint-reagent-editor__field {
14841
+ margin-bottom: 0.625rem;
14887
14842
  }
14888
- .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-dot {
14889
- background-color: var(--mint-warning);
14843
+ .mint-reagent-editor__field:last-child {
14844
+ margin-bottom: 0;
14890
14845
  }
14891
- .mint-reagent-editor__summary-warning {
14892
- font-size: 0.6875rem;
14893
- font-weight: 600;
14894
- color: var(--mint-warning-hover);
14895
- margin-left: 0.25rem;
14846
+ .mint-reagent-editor__field--flex {
14847
+ display: flex;
14848
+ flex-direction: column;
14849
+ gap: 0.25rem;
14850
+ flex: 1 1 0;
14851
+ width: 0;
14852
+ min-width: 0;
14896
14853
  }
14897
-
14898
- /* Footer */
14899
- .mint-reagent-editor__footer {
14900
- padding: 0.75rem 1rem;
14854
+ .mint-reagent-editor__row {
14855
+ display: flex;
14856
+ gap: 0.75rem;
14901
14857
  }
14902
- .mint-reagent-editor__footer .mint-button {
14858
+ .mint-reagent-editor__position-row {
14859
+ display: flex;
14860
+ gap: 0.625rem;
14903
14861
  width: 100%;
14904
14862
  }
14905
- /* SampleHierarchyTree Component Styles */
14906
- .mint-sample-tree {
14907
- font-size: 0.875rem;
14863
+ .mint-reagent-editor .mint-select {
14864
+ width: 100%;
14865
+ min-width: 0;
14908
14866
  }
14909
- .mint-sample-tree--sm {
14867
+ .mint-reagent-editor__label {
14910
14868
  font-size: 0.75rem;
14869
+ font-weight: 500;
14870
+ color: var(--text-secondary);
14911
14871
  }
14912
- .mint-sample-tree--lg {
14913
- font-size: 1rem;
14872
+ .mint-reagent-editor__inline-input {
14873
+ box-sizing: border-box;
14874
+ width: 100%;
14875
+ min-height: var(--form-height-sm);
14876
+ padding: 0 0.625rem;
14877
+ font-family: 'Fira Code', monospace;
14878
+ font-size: 0.8rem;
14879
+ font-weight: 500;
14880
+ color: var(--text-primary);
14881
+ background-color: var(--bg-primary);
14882
+ border: 1px solid var(--border-color);
14883
+ border-radius: var(--radius);
14884
+ outline: none;
14885
+ text-transform: uppercase;
14886
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
14887
+ }
14888
+ .mint-reagent-editor__inline-input::placeholder {
14889
+ text-transform: none;
14890
+ }
14891
+ .mint-reagent-editor__inline-input:focus {
14892
+ border-color: var(--reagent-color, var(--color-primary));
14893
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
14894
+ }
14895
+ .mint-reagent-editor__inline-input--error {
14896
+ border-color: var(--mint-error);
14897
+ }
14898
+ .mint-reagent-editor__inline-input--error:focus {
14899
+ border-color: var(--mint-error);
14900
+ box-shadow: var(--focus-ring-error);
14914
14901
  }
14915
14902
 
14916
- /* Node */
14917
- .mint-sample-tree__node {
14918
- user-select: none;
14903
+ /* Inline field validation error */
14904
+ .mint-reagent-editor__field-error {
14905
+ grid-column: 2;
14906
+ font-size: 0.6875rem;
14907
+ color: var(--mint-error);
14908
+ line-height: 1.2;
14919
14909
  }
14920
14910
 
14921
- /* Node header (clickable row) */
14922
- .mint-sample-tree__node-header {
14923
- display: flex;
14924
- align-items: center;
14925
- gap: 0.375rem;
14926
- padding: 0.375rem 0.5rem;
14911
+ /* Unit select in section header uses reagent color */
14912
+ .mint-reagent-editor__unit-select {
14913
+ margin-left: auto;
14914
+ padding: 0.125rem 0.375rem;
14915
+ font-family: 'Fira Code', monospace;
14916
+ font-size: 0.6875rem;
14917
+ font-weight: 500;
14918
+ color: var(--reagent-color, var(--color-primary));
14919
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 10%, transparent);
14920
+ border: none;
14927
14921
  border-radius: var(--radius-sm);
14928
14922
  cursor: pointer;
14923
+ outline: none;
14929
14924
  transition: background-color 0.15s ease;
14930
14925
  }
14931
- .mint-sample-tree__node-header:hover {
14932
- background-color: var(--bg-hover);
14926
+ .mint-reagent-editor__unit-select:hover {
14927
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 18%, transparent);
14933
14928
  }
14934
- .mint-sample-tree__node--selected > .mint-sample-tree__node-header {
14935
- background-color: rgba(59, 130, 246, 0.1);
14929
+
14930
+ /* Dilution generator */
14931
+ .mint-reagent-editor__generator {
14932
+ background-color: var(--bg-primary);
14933
+ border: 1px solid var(--border-color);
14934
+ border-radius: var(--radius);
14935
+ padding: 0.75rem;
14936
+ margin-bottom: 0.625rem;
14937
+ overflow: hidden;
14936
14938
  }
14937
- .mint-sample-tree--sm .mint-sample-tree__node-header {
14938
- padding: 0.25rem 0.375rem;
14939
- gap: 0.25rem;
14939
+ .mint-reagent-editor__generator-inputs {
14940
+ display: flex;
14941
+ gap: 0.625rem;
14942
+ margin-bottom: 0.5rem;
14940
14943
  }
14941
- .mint-sample-tree--lg .mint-sample-tree__node-header {
14942
- padding: 0.5rem 0.625rem;
14943
- gap: 0.5rem;
14944
+ .mint-reagent-editor__generator-inputs > * {
14945
+ flex: 1;
14946
+ min-width: 0;
14944
14947
  }
14945
14948
 
14946
- /* Toggle button */
14947
- .mint-sample-tree__toggle {
14949
+ /* Ensure all child controls fill their parent and can shrink */
14950
+ .mint-reagent-editor .mint-number-input {
14951
+ width: 100%;
14952
+ min-width: 0;
14953
+ }
14954
+ .mint-reagent-editor .mint-number-input__input {
14955
+ min-width: 0;
14956
+ width: 0;
14957
+ flex: 1;
14958
+ }
14959
+ .mint-reagent-editor .mint-number-input:focus-within {
14960
+ border-color: var(--reagent-color, var(--color-primary));
14961
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--reagent-color, var(--color-primary)) 25%, transparent);
14962
+ }
14963
+ .mint-reagent-editor__presets {
14964
+ display: flex;
14965
+ gap: 0.375rem;
14966
+ }
14967
+ .mint-reagent-editor__preset-btn {
14968
+ flex: 1;
14948
14969
  display: flex;
14949
14970
  align-items: center;
14950
14971
  justify-content: center;
14951
- width: 1.25rem;
14952
- height: 1.25rem;
14953
- padding: 0;
14954
- background: transparent;
14955
- border: none;
14972
+ height: 1.75rem;
14973
+ font-family: 'Fira Code', monospace;
14974
+ font-size: 0.75rem;
14975
+ font-weight: 500;
14976
+ color: var(--text-secondary);
14977
+ background-color: var(--bg-secondary);
14978
+ border: 1px solid var(--border-color);
14956
14979
  border-radius: var(--radius-sm);
14957
- color: var(--text-muted);
14958
14980
  cursor: pointer;
14959
- transition: color 0.15s ease, transform 0.15s ease;
14960
- flex-shrink: 0;
14961
- }
14962
- .mint-sample-tree__toggle:hover {
14963
- color: var(--text-primary);
14964
- background-color: var(--bg-tertiary);
14965
- }
14966
- .mint-sample-tree__toggle svg {
14967
- width: 0.875rem;
14968
- height: 0.875rem;
14969
- transition: transform 0.15s ease;
14970
- }
14971
- .mint-sample-tree__node--expanded > .mint-sample-tree__node-header .mint-sample-tree__toggle svg {
14972
- transform: rotate(90deg);
14973
- }
14974
- .mint-sample-tree--sm .mint-sample-tree__toggle {
14975
- width: 1rem;
14976
- height: 1rem;
14977
- }
14978
- .mint-sample-tree--sm .mint-sample-tree__toggle svg {
14979
- width: 0.75rem;
14980
- height: 0.75rem;
14981
+ transition: all 0.12s ease;
14981
14982
  }
14982
- .mint-sample-tree--lg .mint-sample-tree__toggle {
14983
- width: 1.5rem;
14984
- height: 1.5rem;
14983
+ .mint-reagent-editor__preset-btn:hover {
14984
+ color: var(--reagent-color, var(--color-primary));
14985
+ border-color: var(--reagent-color, var(--color-primary));
14986
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 8%, transparent);
14985
14987
  }
14986
- .mint-sample-tree--lg .mint-sample-tree__toggle svg {
14987
- width: 1rem;
14988
- height: 1rem;
14988
+ .mint-reagent-editor__preset-btn:active {
14989
+ transform: scale(0.96);
14989
14990
  }
14990
14991
 
14991
- /* Placeholder for leaf nodes (no toggle) */
14992
- .mint-sample-tree__toggle-placeholder {
14993
- width: 1.25rem;
14994
- flex-shrink: 0;
14995
- }
14996
- .mint-sample-tree--sm .mint-sample-tree__toggle-placeholder {
14997
- width: 1rem;
14992
+ /* Manual entry */
14993
+ .mint-reagent-editor__manual {
14994
+ display: flex;
14995
+ align-items: center;
14996
+ gap: 0.375rem;
14997
+ margin-bottom: 0.625rem;
14998
14998
  }
14999
- .mint-sample-tree--lg .mint-sample-tree__toggle-placeholder {
15000
- width: 1.5rem;
14999
+ .mint-reagent-editor__manual .mint-number-input {
15000
+ flex: 1;
15001
+ width: 0; /* flex-basis override so flex: 1 controls sizing */
15001
15002
  }
15002
-
15003
- /* Icon */
15004
- .mint-sample-tree__icon {
15003
+ .mint-reagent-editor__add-btn {
15005
15004
  display: flex;
15006
15005
  align-items: center;
15007
15006
  justify-content: center;
15008
- width: 1.25rem;
15009
- height: 1.25rem;
15007
+ width: var(--form-height-sm);
15008
+ height: var(--form-height-sm);
15010
15009
  flex-shrink: 0;
15010
+ border-radius: var(--radius);
15011
+ background-color: var(--reagent-color, var(--color-primary));
15012
+ color: white;
15013
+ border: none;
15014
+ cursor: pointer;
15015
+ transition: filter 0.15s ease, transform 0.1s ease;
15011
15016
  }
15012
- .mint-sample-tree__icon svg {
15013
- width: 1rem;
15014
- height: 1rem;
15015
- }
15016
- .mint-sample-tree--sm .mint-sample-tree__icon {
15017
- width: 1rem;
15018
- height: 1rem;
15019
- }
15020
- .mint-sample-tree--sm .mint-sample-tree__icon svg {
15021
- width: 0.75rem;
15022
- height: 0.75rem;
15017
+ .mint-reagent-editor__add-btn:hover:not(:disabled) {
15018
+ filter: brightness(0.88);
15023
15019
  }
15024
- .mint-sample-tree--lg .mint-sample-tree__icon {
15025
- width: 1.5rem;
15026
- height: 1.5rem;
15020
+ .mint-reagent-editor__add-btn:active:not(:disabled) {
15021
+ transform: scale(0.92);
15027
15022
  }
15028
- .mint-sample-tree--lg .mint-sample-tree__icon svg {
15029
- width: 1.25rem;
15030
- height: 1.25rem;
15023
+ .mint-reagent-editor__add-btn:disabled {
15024
+ opacity: var(--mint-disabled-opacity);
15025
+ cursor: not-allowed;
15031
15026
  }
15032
15027
 
15033
- /* Icon colors by type */
15034
- .mint-sample-tree__icon--study {
15035
- color: var(--text-muted);
15028
+ /* Level table */
15029
+ .mint-reagent-editor__table {
15030
+ border: 1px solid var(--border-color);
15031
+ border-radius: var(--radius);
15032
+ overflow: hidden;
15033
+ max-height: 14rem;
15034
+ display: flex;
15035
+ flex-direction: column;
15036
15036
  }
15037
- .mint-sample-tree__icon--experiment {
15038
- color: var(--color-primary);
15037
+ .mint-reagent-editor__table-body {
15038
+ flex: 1;
15039
+ overflow-y: auto;
15040
+ scrollbar-width: thin;
15041
+ scrollbar-color: var(--scrollbar-thumb) transparent;
15039
15042
  }
15040
- .mint-sample-tree__icon--plate {
15041
- color: var(--mint-info);
15043
+ .mint-reagent-editor__table-header {
15044
+ display: flex;
15045
+ align-items: center;
15046
+ padding: 0.375rem 0.5rem;
15047
+ background-color: var(--bg-tertiary);
15048
+ border-bottom: 1px solid var(--border-color);
15042
15049
  }
15043
- .mint-sample-tree__icon--sample {
15044
- color: var(--mint-success);
15050
+ .mint-reagent-editor__table-header .mint-reagent-editor__table-col {
15051
+ font-size: 0.6875rem;
15052
+ font-weight: 600;
15053
+ text-transform: uppercase;
15054
+ letter-spacing: 0.03em;
15055
+ color: var(--text-muted);
15045
15056
  }
15046
- .mint-sample-tree__icon--cell_line {
15047
- color: var(--color-purple);
15057
+ .mint-reagent-editor__table-row {
15058
+ display: flex;
15059
+ align-items: center;
15060
+ padding: 0.25rem 0.5rem;
15061
+ border-bottom: 1px solid var(--border-color);
15062
+ border-left: 2px solid transparent;
15063
+ transition: background-color 0.1s ease, border-left-color 0.1s ease;
15048
15064
  }
15049
- .mint-sample-tree__icon--passage {
15050
- color: var(--text-secondary);
15065
+ .mint-reagent-editor__table-row:last-child {
15066
+ border-bottom: none;
15051
15067
  }
15052
- .mint-sample-tree__icon--clone {
15053
- color: var(--mint-warning);
15068
+ .mint-reagent-editor__table-row:hover {
15069
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 5%, var(--bg-secondary));
15070
+ border-left-color: var(--reagent-color, var(--color-primary));
15054
15071
  }
15055
- .mint-sample-tree__icon--treatment {
15056
- color: var(--color-cta);
15072
+ .mint-reagent-editor__table-col--level {
15073
+ flex: 1;
15074
+ min-width: 0;
15075
+ display: flex;
15076
+ align-items: baseline;
15077
+ gap: 0.25rem;
15057
15078
  }
15058
- .mint-sample-tree__icon--folder {
15059
- color: var(--text-muted);
15079
+ .mint-reagent-editor__table-col--reps {
15080
+ width: 5.5rem;
15081
+ flex-shrink: 0;
15060
15082
  }
15061
- .mint-sample-tree__icon--custom {
15062
- color: var(--text-secondary);
15083
+ .mint-reagent-editor__table-col--action {
15084
+ width: 1.75rem;
15085
+ flex-shrink: 0;
15086
+ display: flex;
15087
+ justify-content: center;
15063
15088
  }
15064
-
15065
- /* Label */
15066
- .mint-sample-tree__label {
15067
- flex: 1;
15068
- min-width: 0;
15089
+ .mint-reagent-editor__level-value {
15090
+ font-family: 'Fira Code', monospace;
15091
+ font-size: 0.8125rem;
15092
+ font-weight: 500;
15069
15093
  color: var(--text-primary);
15070
15094
  overflow: hidden;
15071
15095
  text-overflow: ellipsis;
15072
15096
  white-space: nowrap;
15073
15097
  }
15074
-
15075
- /* Badge */
15076
- .mint-sample-tree__badge {
15077
- display: inline-flex;
15098
+ .mint-reagent-editor__level-unit {
15099
+ font-family: 'Fira Code', monospace;
15100
+ font-size: 0.6875rem;
15101
+ color: var(--text-muted);
15102
+ }
15103
+ .mint-reagent-editor__remove-level-btn {
15104
+ display: flex;
15078
15105
  align-items: center;
15079
15106
  justify-content: center;
15080
- min-width: 1.25rem;
15081
- padding: 0.125rem 0.375rem;
15082
- font-size: 0.625rem;
15083
- font-weight: 600;
15084
- border-radius: 9999px;
15085
- flex-shrink: 0;
15086
- }
15087
- .mint-sample-tree--sm .mint-sample-tree__badge {
15088
- min-width: 1rem;
15089
- padding: 0.0625rem 0.25rem;
15090
- font-size: 0.5rem;
15091
- }
15092
- .mint-sample-tree--lg .mint-sample-tree__badge {
15093
- min-width: 1.5rem;
15094
- padding: 0.125rem 0.5rem;
15095
- font-size: 0.75rem;
15096
- }
15097
- .mint-sample-tree__badge--default {
15098
- background-color: var(--bg-tertiary);
15099
- color: var(--text-secondary);
15100
- }
15101
- .mint-sample-tree__badge--success {
15102
- background-color: var(--mint-success-bg);
15103
- color: var(--mint-success);
15107
+ width: 1.375rem;
15108
+ height: 1.375rem;
15109
+ border-radius: var(--radius-sm);
15110
+ background: transparent;
15111
+ color: var(--text-muted);
15112
+ border: none;
15113
+ cursor: pointer;
15114
+ opacity: 0;
15115
+ transition: opacity 0.1s ease, color 0.1s ease, background-color 0.1s ease;
15104
15116
  }
15105
- .mint-sample-tree__badge--warning {
15106
- background-color: var(--mint-warning-bg);
15107
- color: var(--mint-warning);
15117
+ .mint-reagent-editor__table-row:hover .mint-reagent-editor__remove-level-btn {
15118
+ opacity: 1;
15108
15119
  }
15109
- .mint-sample-tree__badge--error {
15110
- background-color: var(--mint-error-bg);
15120
+ .mint-reagent-editor__remove-level-btn:hover {
15111
15121
  color: var(--mint-error);
15122
+ background-color: var(--mint-error-bg);
15112
15123
  }
15113
15124
 
15114
- /* Children container */
15115
- .mint-sample-tree__children {
15116
- margin-left: 1.25rem;
15117
- padding-left: 0.75rem;
15118
- border-left: 1px solid var(--border-color);
15119
- overflow: hidden;
15120
- }
15121
- .mint-sample-tree--sm .mint-sample-tree__children {
15122
- margin-left: 1rem;
15123
- padding-left: 0.5rem;
15124
- }
15125
- .mint-sample-tree--lg .mint-sample-tree__children {
15126
- margin-left: 1.5rem;
15127
- padding-left: 1rem;
15125
+ /* Empty state */
15126
+ .mint-reagent-editor__empty {
15127
+ text-align: center;
15128
+ padding: 1.25rem 0.75rem;
15129
+ font-size: 0.8125rem;
15130
+ color: var(--text-muted);
15131
+ font-style: italic;
15128
15132
  }
15129
15133
 
15130
- /* Animation */
15131
- .mint-sample-tree__children--entering {
15132
- animation: mint-tree-expand 0.15s ease-out;
15134
+ /* Position summary — reagent-tinted background */
15135
+ .mint-reagent-editor__summary {
15136
+ display: flex;
15137
+ align-items: center;
15138
+ justify-content: center;
15139
+ gap: 0.625rem;
15140
+ padding: 0.625rem 1rem;
15141
+ background-color: color-mix(in srgb, var(--reagent-color, var(--color-primary)) 6%, var(--bg-tertiary));
15142
+ border-bottom: 1px solid var(--border-color);
15133
15143
  }
15134
- .mint-sample-tree__children--leaving {
15135
- animation: mint-tree-collapse 0.15s ease-out forwards;
15144
+ .mint-reagent-editor__summary-item {
15145
+ display: flex;
15146
+ align-items: baseline;
15147
+ gap: 0.25rem;
15136
15148
  }
15137
- @keyframes mint-tree-expand {
15138
- from {
15139
- opacity: 0;
15140
- max-height: 0;
15149
+ .mint-reagent-editor__summary-value {
15150
+ font-family: 'Fira Code', monospace;
15151
+ font-size: 0.8125rem;
15152
+ font-weight: 600;
15153
+ color: var(--reagent-color, var(--text-primary));
15141
15154
  }
15142
- to {
15143
- opacity: 1;
15144
- max-height: 1000px;
15155
+ .mint-reagent-editor__summary-label {
15156
+ font-size: 0.6875rem;
15157
+ color: var(--text-muted);
15158
+ }
15159
+ .mint-reagent-editor__summary-dot {
15160
+ width: 3px;
15161
+ height: 3px;
15162
+ border-radius: 50%;
15163
+ background-color: var(--reagent-color, var(--text-muted));
15164
+ opacity: 0.5;
15165
+ flex-shrink: 0;
15145
15166
  }
15167
+
15168
+ /* Overflow warning */
15169
+ .mint-reagent-editor__summary--overflow {
15170
+ background-color: var(--mint-warning-bg);
15146
15171
  }
15147
- @keyframes mint-tree-collapse {
15148
- from {
15149
- opacity: 1;
15150
- max-height: 1000px;
15172
+ .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-value {
15173
+ color: var(--mint-warning-hover);
15151
15174
  }
15152
- to {
15153
- opacity: 0;
15154
- max-height: 0;
15175
+ .mint-reagent-editor__summary--overflow .mint-reagent-editor__summary-dot {
15176
+ background-color: var(--mint-warning);
15155
15177
  }
15178
+ .mint-reagent-editor__summary-warning {
15179
+ font-size: 0.6875rem;
15180
+ font-weight: 600;
15181
+ color: var(--mint-warning-hover);
15182
+ margin-left: 0.25rem;
15156
15183
  }
15157
15184
 
15158
- /* Empty state */
15159
- .mint-sample-tree__empty {
15160
- padding: 1rem;
15161
- text-align: center;
15162
- color: var(--text-muted);
15163
- }
15164
- .mint-sample-tree__empty-icon {
15165
- width: 2rem;
15166
- height: 2rem;
15167
- margin: 0 auto 0.5rem;
15168
- opacity: 0.5;
15185
+ /* Footer */
15186
+ .mint-reagent-editor__footer {
15187
+ padding: 0.75rem 1rem;
15169
15188
  }
15170
- .mint-sample-tree__empty-text {
15171
- font-size: 0.875rem;
15172
- margin-top: 0 !important;
15173
- margin-bottom: 0 !important;
15174
- padding: 0 !important;
15189
+ .mint-reagent-editor__footer .mint-button {
15190
+ width: 100%;
15175
15191
  }
15176
15192
  /* ProtocolStepEditor Component Styles */
15177
15193
  .mint-protocol-editor {
@@ -17987,6 +18003,11 @@ to { transform: rotate(360deg);
17987
18003
  --text-primary: #1E293B;
17988
18004
  --text-secondary: #64748B;
17989
18005
  --text-muted: #94A3B8;
18006
+ /* De-emphasized label for low-emphasis interactive controls (secondary/ghost
18007
+ buttons). A true dark gray — softer than --text-primary's near-black — that
18008
+ still clears WCAG AA (4.5:1) on the secondary hover surface (--bg-tertiary),
18009
+ where --text-secondary would drop to ~4.35:1. */
18010
+ --text-secondary-strong: #475569;
17990
18011
 
17991
18012
  /* Brand colors */
17992
18013
  --color-primary: #6366F1;
@@ -18093,6 +18114,9 @@ html.dark {
18093
18114
  --text-primary: #F8FAFC;
18094
18115
  --text-secondary: #94A3B8;
18095
18116
  --text-muted: #64748B;
18117
+ /* Dark-mode analog: soft light-gray instead of near-white, AA-safe (7.2:1)
18118
+ on the dark secondary hover surface (--bg-tertiary #334155). */
18119
+ --text-secondary-strong: #CBD5E1;
18096
18120
 
18097
18121
  /* Scrollbar */
18098
18122
  --scrollbar-track: #1E293B;
@@ -19876,10 +19900,12 @@ code, pre {
19876
19900
  }
19877
19901
  .mint-button--secondary {
19878
19902
  background-color: var(--bg-secondary);
19879
- color: var(--text-primary);
19903
+ color: var(--text-secondary-strong);
19880
19904
  border: 1px solid var(--border-color);
19881
19905
  /* Intentionally tighter + fainter than the colored variants —
19882
- secondary shouldn't "float" the way filled buttons do. */
19906
+ secondary shouldn't "float" the way filled buttons do. Regular (400)
19907
+ weight de-emphasizes the label relative to the medium-weight filled variants. */
19908
+ font-weight: 400;
19883
19909
  box-shadow: 0 1px 1px rgba(15, 23, 42, 0.03);
19884
19910
  }
19885
19911
  .mint-button--secondary:hover:not(.mint-button--disabled) {
@@ -19915,7 +19941,9 @@ code, pre {
19915
19941
  }
19916
19942
  .mint-button--ghost {
19917
19943
  background-color: transparent;
19918
- color: var(--text-primary);
19944
+ color: var(--text-secondary-strong);
19945
+ /* Lowest-emphasis variant: regular (400) weight, matching secondary. */
19946
+ font-weight: 400;
19919
19947
  }
19920
19948
  .mint-button--ghost:hover:not(.mint-button--disabled) {
19921
19949
  background-color: var(--bg-tertiary);
@@ -19924,6 +19952,9 @@ code, pre {
19924
19952
  .mint-button--sm {
19925
19953
  padding: 0.375rem 0.75rem;
19926
19954
  font-size: 0.875rem;
19955
+ /* Small buttons live in dense/secondary contexts — regular (400) weight
19956
+ keeps the compact label from reading too heavy. Applies to all variants. */
19957
+ font-weight: 400;
19927
19958
  min-height: var(--form-height-sm);
19928
19959
  }
19929
19960
  .mint-button--md {
@@ -22278,6 +22309,9 @@ code, pre {
22278
22309
  }
22279
22310
  .mint-modal__close {
22280
22311
  flex-shrink: 0;
22312
+ /* Always pin the close affordance to the right edge of the header, even when
22313
+ there is no title/subtitle (no flex-1 header-text to push it over). */
22314
+ margin-left: auto;
22281
22315
  width: 1.75rem;
22282
22316
  height: 1.75rem;
22283
22317
  padding: 0;
@@ -24612,6 +24646,10 @@ html.dark .mint-toast__item .mint-toast__message {
24612
24646
  .mint-sample-selector__expand-btn:hover {
24613
24647
  background-color: var(--bg-hover);
24614
24648
  }
24649
+ .mint-sample-selector__expand-btn:focus-visible {
24650
+ outline: none;
24651
+ box-shadow: var(--focus-ring);
24652
+ }
24615
24653
  .mint-sample-selector__expand-icon {
24616
24654
  width: 0.875rem;
24617
24655
  height: 0.875rem;
@@ -24716,6 +24754,10 @@ html.dark .mint-toast__item .mint-toast__message {
24716
24754
  transform: scale(1.25);
24717
24755
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08), 0 0 0 3px rgba(0, 0, 0, 0.06);
24718
24756
  }
24757
+ .mint-sample-selector__color-dot--clickable:focus-visible {
24758
+ outline: none;
24759
+ box-shadow: var(--focus-ring);
24760
+ }
24719
24761
  /* Count Badge */
24720
24762
  .mint-sample-selector__count-badge {
24721
24763
  font-size: 0.625rem;
@@ -24745,6 +24787,12 @@ html.dark .mint-toast__item .mint-toast__message {
24745
24787
  background-color: var(--mint-error-bg);
24746
24788
  color: var(--mint-error);
24747
24789
  }
24790
+ /* Reveal the hover-hidden delete button when reached by keyboard, and ring it. */
24791
+ .mint-sample-selector__delete-btn:focus-visible {
24792
+ outline: none;
24793
+ opacity: 1;
24794
+ box-shadow: var(--focus-ring);
24795
+ }
24748
24796
  .mint-sample-selector__delete-btn--hidden {
24749
24797
  opacity: 0;
24750
24798
  }
@@ -25822,7 +25870,7 @@ html.dark .mint-toast__item .mint-toast__message {
25822
25870
  font-size: 0.8125rem;
25823
25871
  color: var(--mint-error);
25824
25872
  background: var(--mint-error-bg);
25825
- border: 1px solid rgba(239, 68, 68, 0.3);
25873
+ border: 1px solid var(--mint-error-border);
25826
25874
  border-radius: var(--radius);
25827
25875
  }
25828
25876
  /* --- Experiment mode --- */
@@ -25842,7 +25890,7 @@ html.dark .mint-toast__item .mint-toast__message {
25842
25890
  }
25843
25891
  .mint-auto-group__experiment-error {
25844
25892
  padding: 1.5rem;
25845
- border: 1px solid rgba(239, 68, 68, 0.3);
25893
+ border: 1px solid var(--mint-error-border);
25846
25894
  border-radius: var(--radius-md);
25847
25895
  background: var(--mint-error-bg);
25848
25896
  font-size: 0.8125rem;
@@ -25873,7 +25921,7 @@ html.dark .mint-toast__item .mint-toast__message {
25873
25921
  .mint-auto-group__link-btn:focus-visible {
25874
25922
  outline: 2px solid var(--color-primary);
25875
25923
  outline-offset: 1px;
25876
- border-radius: 2px;
25924
+ border-radius: var(--radius-sm);
25877
25925
  }
25878
25926
  .mint-auto-group__experiment-loaded {
25879
25927
  padding: 1.5rem;
@@ -26188,14 +26236,10 @@ html.dark .mint-toast__item .mint-toast__message {
26188
26236
  .mint-auto-group__preview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
26189
26237
  .mint-auto-group__preview-panel { background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px; }
26190
26238
  .mint-auto-group__preview-panel h4 { margin: 0 0 10px; font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .06em; }
26191
- .mint-auto-group__preview-group { border: 1px solid var(--border-color); border-radius: var(--radius); overflow: hidden; }
26192
- .mint-auto-group__preview-group[open] { background: var(--bg-secondary); }
26193
- .mint-auto-group__preview-group summary { display: flex; align-items: center; gap: 10px; cursor: pointer; font-size: 13px; padding: 0.5rem 0.875rem; }
26194
- .mint-auto-group__preview-group[open] summary { border-bottom: 1px solid var(--border); }
26195
- .mint-auto-group__preview-dot { width: 10px; height: 10px; border-radius: 9999px; flex-shrink: 0; }
26196
- .mint-auto-group__preview-count { margin-left: auto; font-family: 'Fira Code', monospace; font-size: 12px; color: var(--text-secondary); background: var(--bg-primary); border: 1px solid var(--border); padding: 2px 8px; border-radius: 9999px; }
26197
- .mint-auto-group__preview-samples { display: flex; flex-wrap: wrap; gap: 6px; padding: 0.5rem 0.875rem 0.625rem; }
26198
- .mint-auto-group__preview-sample { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-primary); background: var(--bg-primary); border: 1px solid var(--border); padding: 3px 8px; border-radius: 9999px; }
26239
+ /* Nested experimental groups render as a collapsible SampleHierarchyTree; cap
26240
+ its height so a large batch scrolls inside the panel instead of the modal. */
26241
+ .mint-auto-group__preview-tree { max-height: 320px; overflow-y: auto; }
26242
+ .mint-auto-group__preview-empty { margin: 0; font-size: 13px; color: var(--text-muted); }
26199
26243
  .mint-auto-group__qc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
26200
26244
  .mint-auto-group__qc-chip { background: var(--mint-warning-bg); color: #92400E; border: 1px solid var(--mint-warning-border); padding: 4px 10px; border-radius: 9999px; font-size: 12px; }
26201
26245
  .mint-auto-group__fingerprint { margin-top: 14px; }