@morscherlab/mld-sdk 0.7.5 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/composables/useAutoGroup.test.d.ts +1 -0
  3. package/dist/components/AutoGroupModal.vue.js +522 -0
  4. package/dist/components/AutoGroupModal.vue.js.map +1 -0
  5. package/dist/components/AutoGroupModal.vue3.js +6 -0
  6. package/dist/components/AutoGroupModal.vue3.js.map +1 -0
  7. package/dist/components/FormActions.vue.d.ts +1 -1
  8. package/dist/components/GroupingModal.vue.js.map +1 -1
  9. package/dist/components/SampleSelector.vue.d.ts +5 -9
  10. package/dist/components/SampleSelector.vue.js +127 -255
  11. package/dist/components/SampleSelector.vue.js.map +1 -1
  12. package/dist/components/index.d.ts +1 -0
  13. package/dist/components/index.js +53 -50
  14. package/dist/components/index.js.map +1 -1
  15. package/dist/composables/index.d.ts +1 -0
  16. package/dist/composables/index.js +3 -0
  17. package/dist/composables/index.js.map +1 -1
  18. package/dist/composables/useAutoGroup.d.ts +80 -0
  19. package/dist/composables/useAutoGroup.js +397 -0
  20. package/dist/composables/useAutoGroup.js.map +1 -0
  21. package/dist/index.d.ts +3 -3
  22. package/dist/index.js +48 -42
  23. package/dist/index.js.map +1 -1
  24. package/dist/styles.css +2652 -1788
  25. package/dist/types/auto-group.d.ts +31 -0
  26. package/dist/types/index.d.ts +1 -0
  27. package/package.json +1 -1
  28. package/src/__tests__/composables/useAutoGroup.test.ts +375 -0
  29. package/src/components/AutoGroupModal.story.vue +155 -0
  30. package/src/components/AutoGroupModal.vue +441 -0
  31. package/src/components/GroupingModal.vue +1 -0
  32. package/src/components/SampleSelector.story.vue +8 -31
  33. package/src/components/SampleSelector.vue +22 -137
  34. package/src/components/index.ts +1 -0
  35. package/src/composables/index.ts +1 -0
  36. package/src/composables/useAutoGroup.ts +495 -0
  37. package/src/index.ts +12 -0
  38. package/src/styles/components/auto-group-modal.css +501 -0
  39. package/src/styles/index.css +1 -0
  40. package/src/types/auto-group.ts +37 -0
  41. package/src/types/index.ts +11 -0
package/dist/styles.css CHANGED
@@ -5957,403 +5957,831 @@ html.dark .mld-toggle__track:focus-visible {
5957
5957
  justify-content: flex-end;
5958
5958
  gap: 0.75rem;
5959
5959
  }
5960
- /* GroupAssigner Component Styles */
5961
- .mld-group-assigner {
5962
- display: flex;
5963
- flex-direction: column;
5964
- gap: 1rem;
5960
+ /* AutoGroupModal - Smart grouping wizard */
5961
+ .mld-auto-group {
5962
+ min-height: 400px;
5965
5963
  }
5966
- /* Zones container */
5967
- .mld-group-assigner__zones {
5968
- display: grid;
5969
- grid-template-columns: 1fr 1fr;
5970
- gap: 0.75rem;
5964
+ /* --- Mode toggle --- */
5965
+ .mld-auto-group__mode-toggle {
5966
+ display: flex;
5967
+ gap: 0.5rem;
5968
+ margin-bottom: 1rem;
5971
5969
  }
5972
- /* Zone */
5973
- .mld-group-assigner__zone {
5970
+ /* --- Input step --- */
5971
+ .mld-auto-group__input-step {
5974
5972
  display: flex;
5975
5973
  flex-direction: column;
5976
- min-height: 8rem;
5977
- padding: 0.75rem;
5978
- border: 2px dashed var(--border-color);
5979
- border-radius: var(--mld-radius);
5980
- background-color: var(--bg-secondary);
5981
- transition: border-color var(--mld-transition), background-color var(--mld-transition);
5982
- }
5983
- .mld-group-assigner__zone--dragover {
5984
- border-color: var(--zone-color);
5985
- background-color: color-mix(in srgb, var(--zone-color) 8%, var(--bg-secondary));
5986
5974
  }
5987
- .mld-group-assigner__zone-header {
5988
- display: flex;
5989
- align-items: center;
5990
- justify-content: space-between;
5991
- margin-bottom: 0.5rem;
5992
- padding-bottom: 0.5rem;
5993
- border-bottom: 1px solid var(--border-color);
5975
+ .mld-auto-group__paste {
5976
+ position: relative;
5994
5977
  }
5995
- .mld-group-assigner__zone-label {
5978
+ .mld-auto-group__textarea {
5979
+ width: 100%;
5980
+ font-family: 'Fira Code', monospace;
5996
5981
  font-size: 0.8125rem;
5997
- font-weight: 600;
5998
- color: var(--zone-color);
5982
+ line-height: 1.5;
5983
+ padding: 0.75rem;
5984
+ border: 1px solid var(--border-color);
5985
+ border-radius: var(--radius-md);
5986
+ background: var(--bg-secondary);
5987
+ color: var(--text-primary);
5988
+ resize: vertical;
5989
+ box-sizing: border-box;
5999
5990
  }
6000
- .mld-group-assigner__zone-count {
5991
+ .mld-auto-group__textarea:focus {
5992
+ outline: none;
5993
+ border-color: var(--color-primary);
5994
+ box-shadow: 0 0 0 2px var(--color-primary-soft);
5995
+ }
5996
+ .mld-auto-group__textarea::placeholder {
5997
+ color: var(--text-muted);
5998
+ }
5999
+ .mld-auto-group__sample-count {
6000
+ position: absolute;
6001
+ bottom: 0.5rem;
6002
+ right: 0.75rem;
6001
6003
  font-size: 0.75rem;
6002
6004
  color: var(--text-muted);
6005
+ background: var(--bg-secondary);
6006
+ padding: 0.125rem 0.5rem;
6007
+ border-radius: var(--radius-sm);
6003
6008
  }
6004
- .mld-group-assigner__zone-content {
6005
- flex: 1;
6009
+ /* --- CSV / Dropzone --- */
6010
+ .mld-auto-group__csv {
6006
6011
  display: flex;
6007
- flex-wrap: wrap;
6008
- align-content: flex-start;
6009
- gap: 0.375rem;
6012
+ flex-direction: column;
6010
6013
  }
6011
- .mld-group-assigner__zone-empty {
6014
+ .mld-auto-group__dropzone {
6015
+ position: relative;
6012
6016
  display: flex;
6017
+ flex-direction: column;
6013
6018
  align-items: center;
6014
6019
  justify-content: center;
6015
- width: 100%;
6016
- height: 100%;
6017
- font-size: 0.8125rem;
6018
- color: var(--text-muted);
6020
+ gap: 0.75rem;
6021
+ padding: 3rem 2rem;
6022
+ border: 2px dashed var(--border-color);
6023
+ border-radius: var(--radius-md);
6024
+ background: var(--bg-tertiary);
6025
+ cursor: pointer;
6026
+ transition: border-color 0.15s, background 0.15s;
6019
6027
  }
6020
- /* Pills */
6021
- .mld-group-assigner__pill {
6022
- display: inline-flex;
6023
- align-items: center;
6024
- gap: 0.375rem;
6025
- padding: 0.375rem 0.5rem;
6026
- background-color: var(--bg-card);
6027
- border: 1px solid var(--border-color);
6028
- border-radius: 9999px;
6029
- cursor: grab;
6030
- user-select: none;
6031
- transition: transform var(--mld-transition), box-shadow var(--mld-transition);
6028
+ .mld-auto-group__dropzone--dragover {
6029
+ border-color: var(--color-primary);
6030
+ background: var(--color-primary-soft);
6032
6031
  }
6033
- .mld-group-assigner__pill:hover {
6034
- box-shadow: var(--mld-shadow-sm);
6032
+ .mld-auto-group__file-input {
6033
+ position: absolute;
6034
+ inset: 0;
6035
+ opacity: 0;
6036
+ cursor: pointer;
6035
6037
  }
6036
- .mld-group-assigner__pill:active {
6037
- cursor: grabbing;
6038
+ .mld-auto-group__upload-icon {
6039
+ width: 2.5rem;
6040
+ height: 2.5rem;
6041
+ color: var(--text-muted);
6038
6042
  }
6039
- .mld-group-assigner__pill--unassigned {
6040
- background-color: var(--bg-tertiary);
6043
+ .mld-auto-group__upload-text {
6044
+ font-size: 0.875rem;
6045
+ color: var(--text-secondary);
6046
+ margin: 0;
6041
6047
  }
6042
- .mld-group-assigner__pill--dragging {
6043
- opacity: 0.5;
6044
- transform: scale(0.95);
6048
+ .mld-auto-group__upload-highlight {
6049
+ color: var(--color-primary);
6050
+ font-weight: 500;
6045
6051
  }
6046
- .mld-group-assigner__pill-color {
6047
- width: 0.625rem;
6048
- height: 0.625rem;
6049
- border-radius: 50%;
6052
+ .mld-auto-group__file-info {
6053
+ display: flex;
6054
+ align-items: center;
6055
+ gap: 0.5rem;
6056
+ padding: 0.75rem 1rem;
6057
+ background: var(--bg-tertiary);
6058
+ border-radius: var(--radius-md);
6059
+ border: 1px solid var(--border-color);
6060
+ }
6061
+ .mld-auto-group__file-icon {
6062
+ width: 1.25rem;
6063
+ height: 1.25rem;
6064
+ color: var(--text-muted);
6050
6065
  flex-shrink: 0;
6051
6066
  }
6052
- .mld-group-assigner__pill-name {
6053
- font-size: 0.8125rem;
6067
+ .mld-auto-group__file-name {
6068
+ font-size: 0.875rem;
6054
6069
  font-weight: 500;
6055
6070
  color: var(--text-primary);
6056
- white-space: nowrap;
6057
6071
  }
6058
- .mld-group-assigner__pill-count {
6059
- font-size: 0.6875rem;
6072
+ .mld-auto-group__file-rows {
6073
+ font-size: 0.75rem;
6060
6074
  color: var(--text-muted);
6061
- padding: 0.125rem 0.375rem;
6062
- background-color: var(--bg-tertiary);
6063
- border-radius: 9999px;
6075
+ margin-left: auto;
6064
6076
  }
6065
- .mld-group-assigner__pill-remove {
6066
- display: flex;
6067
- align-items: center;
6068
- justify-content: center;
6069
- width: 1.125rem;
6070
- height: 1.125rem;
6071
- padding: 0;
6077
+ .mld-auto-group__file-clear {
6078
+ font-size: 0.75rem;
6079
+ color: var(--color-primary);
6072
6080
  background: none;
6073
6081
  border: none;
6074
- color: var(--text-muted);
6075
- border-radius: 50%;
6076
6082
  cursor: pointer;
6077
- transition: color var(--mld-transition), background-color var(--mld-transition);
6083
+ padding: 0;
6084
+ margin-left: 0.5rem;
6078
6085
  }
6079
- .mld-group-assigner__pill-remove:hover {
6080
- color: var(--mld-error);
6081
- background-color: var(--mld-error-soft);
6086
+ .mld-auto-group__file-clear:hover {
6087
+ text-decoration: underline;
6082
6088
  }
6083
- /* Unassigned section */
6084
- .mld-group-assigner__unassigned {
6089
+ /* --- Outlier step --- */
6090
+ .mld-auto-group__outlier-step {
6085
6091
  display: flex;
6086
6092
  flex-direction: column;
6087
- gap: 0.5rem;
6088
- }
6089
- .mld-group-assigner__unassigned-header {
6090
- display: flex;
6091
- align-items: center;
6092
- justify-content: space-between;
6093
+ gap: 0.75rem;
6093
6094
  }
6094
- .mld-group-assigner__unassigned-title {
6095
- font-size: 0.75rem;
6096
- font-weight: 500;
6097
- color: var(--text-muted);
6098
- text-transform: uppercase;
6099
- letter-spacing: 0.025em;
6095
+ .mld-auto-group__outlier-banner {
6096
+ padding: 0.75rem 1rem;
6097
+ background: var(--mld-warning-bg);
6098
+ border: 1px solid rgba(245, 158, 11, 0.3);
6099
+ border-radius: var(--radius-md);
6100
+ font-size: 0.8125rem;
6101
+ color: var(--text-primary);
6100
6102
  }
6101
- .mld-group-assigner__clear-btn {
6102
- font-size: 0.75rem;
6103
- color: var(--color-primary);
6104
- background: none;
6105
- border: none;
6106
- padding: 0;
6107
- cursor: pointer;
6103
+ .mld-auto-group__outlier-banner code {
6104
+ font-family: 'Fira Code', monospace;
6105
+ background: var(--bg-tertiary);
6106
+ padding: 0.125rem 0.375rem;
6107
+ border-radius: var(--radius-sm);
6108
+ font-size: 0.8125rem;
6108
6109
  }
6109
- .mld-group-assigner__clear-btn:hover {
6110
- text-decoration: underline;
6110
+ .mld-auto-group__outlier-batch {
6111
+ display: flex;
6112
+ gap: 0.5rem;
6111
6113
  }
6112
- .mld-group-assigner__unassigned-list {
6114
+ .mld-auto-group__outlier-list {
6113
6115
  display: flex;
6114
- flex-wrap: wrap;
6115
- gap: 0.375rem;
6116
- max-height: 8rem;
6116
+ flex-direction: column;
6117
+ gap: 0.5rem;
6118
+ max-height: 300px;
6117
6119
  overflow-y: auto;
6118
- padding: 0.5rem;
6119
- background-color: var(--bg-secondary);
6120
+ }
6121
+ .mld-auto-group__outlier-item {
6122
+ display: flex;
6123
+ align-items: center;
6124
+ justify-content: space-between;
6125
+ padding: 0.5rem 0.75rem;
6126
+ background: var(--bg-secondary);
6120
6127
  border: 1px solid var(--border-color);
6121
- border-radius: var(--mld-radius-sm);
6128
+ border-radius: var(--radius);
6122
6129
  }
6123
- /* Validation */
6124
- .mld-group-assigner__validation {
6130
+ .mld-auto-group__outlier-info {
6125
6131
  display: flex;
6126
6132
  align-items: center;
6127
6133
  gap: 0.5rem;
6128
- padding: 0.5rem 0.75rem;
6134
+ min-width: 0;
6135
+ }
6136
+ .mld-auto-group__outlier-name {
6137
+ font-family: 'Fira Code', monospace;
6129
6138
  font-size: 0.8125rem;
6130
- color: var(--mld-warning);
6131
- background-color: var(--mld-warning-soft);
6132
- border-radius: var(--mld-radius-sm);
6139
+ color: var(--text-primary);
6140
+ overflow: hidden;
6141
+ text-overflow: ellipsis;
6142
+ white-space: nowrap;
6133
6143
  }
6134
- /* MoleculeInput Component Styles */
6135
- .mld-molecule-input {
6144
+ .mld-auto-group__outlier-badge {
6145
+ font-size: 0.6875rem;
6146
+ padding: 0.125rem 0.375rem;
6147
+ border-radius: var(--radius-sm);
6148
+ background: var(--bg-tertiary);
6149
+ color: var(--text-muted);
6150
+ white-space: nowrap;
6151
+ flex-shrink: 0;
6152
+ }
6153
+ .mld-auto-group__outlier-actions {
6136
6154
  display: flex;
6137
- flex-direction: column;
6138
- border-radius: 0.5rem;
6155
+ gap: 0.25rem;
6156
+ flex-shrink: 0;
6157
+ margin-left: 0.75rem;
6158
+ }
6159
+ .mld-auto-group__action-btn {
6160
+ font-size: 0.6875rem;
6161
+ padding: 0.25rem 0.5rem;
6139
6162
  border: 1px solid var(--border-color);
6140
- background-color: var(--bg-secondary);
6141
- overflow: hidden;
6142
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
6163
+ border-radius: var(--radius-sm);
6164
+ background: var(--bg-secondary);
6165
+ color: var(--text-secondary);
6166
+ cursor: pointer;
6167
+ transition: all 0.1s;
6143
6168
  }
6144
- .mld-molecule-input:focus-within {
6145
- border-color: transparent;
6146
- box-shadow: 0 0 0 2px var(--color-primary);
6169
+ .mld-auto-group__action-btn:hover {
6170
+ background: var(--bg-hover);
6147
6171
  }
6148
- .mld-molecule-input--disabled {
6149
- opacity: 0.5;
6150
- pointer-events: none;
6172
+ .mld-auto-group__action-btn--active {
6173
+ background: var(--color-primary-soft);
6174
+ border-color: var(--color-primary);
6175
+ color: var(--color-primary);
6176
+ font-weight: 500;
6151
6177
  }
6152
- .mld-molecule-input--readonly {
6153
- pointer-events: none;
6154
- }
6155
- .mld-molecule-input--error {
6178
+ .mld-auto-group__action-btn--active.mld-auto-group__action-btn--exclude {
6179
+ background: var(--mld-error-bg);
6156
6180
  border-color: var(--mld-error);
6181
+ color: var(--mld-error);
6157
6182
  }
6158
- .mld-molecule-input--error:focus-within {
6159
- box-shadow: 0 0 0 2px var(--mld-error);
6160
- }
6161
- /* Editor container */
6162
- .mld-molecule-input__editor {
6163
- position: relative;
6164
- width: 100%;
6165
- min-height: 200px;
6166
- background-color: var(--bg-secondary);
6167
- }
6168
- .mld-molecule-input__editor iframe {
6169
- border: none;
6170
- display: block;
6183
+ .mld-auto-group__action-btn--active.mld-auto-group__action-btn--qc {
6184
+ background: rgba(107, 114, 128, 0.12);
6185
+ border-color: #6B7280;
6186
+ color: #6B7280;
6171
6187
  }
6172
- /* Skeleton loader */
6173
- .mld-molecule-input__skeleton {
6188
+ /* --- Field step --- */
6189
+ .mld-auto-group__field-step {
6174
6190
  display: flex;
6175
6191
  flex-direction: column;
6176
- align-items: center;
6177
- justify-content: center;
6178
6192
  gap: 1rem;
6179
- height: 100%;
6180
- min-height: 200px;
6181
- background-color: var(--bg-tertiary);
6182
- }
6183
- .mld-molecule-input__skeleton-icon {
6184
- width: 3rem;
6185
- height: 3rem;
6186
- color: var(--text-muted);
6187
- animation: mld-molecule-pulse 1.5s ease-in-out infinite;
6188
6193
  }
6189
- .mld-molecule-input__skeleton-text {
6190
- font-size: 0.875rem;
6191
- color: var(--text-muted);
6194
+ .mld-auto-group__field-grid {
6195
+ display: grid;
6196
+ grid-template-columns: repeat(2, 1fr);
6197
+ gap: 0.75rem;
6192
6198
  }
6193
- @keyframes mld-molecule-pulse {
6194
- 0%, 100% {
6195
- opacity: 0.4;
6196
- }
6197
- 50% {
6198
- opacity: 1;
6199
+ @media (max-width: 600px) {
6200
+ .mld-auto-group__field-grid {
6201
+ grid-template-columns: 1fr;
6199
6202
  }
6200
6203
  }
6201
- /* Readonly SVG display */
6202
- .mld-molecule-input__readonly {
6204
+ .mld-auto-group__field-card {
6205
+ padding: 0.75rem;
6206
+ border: 1px solid var(--border-color);
6207
+ border-radius: var(--radius-md);
6208
+ background: var(--bg-secondary);
6209
+ transition: border-color 0.15s, box-shadow 0.15s;
6210
+ }
6211
+ .mld-auto-group__field-card--enabled {
6212
+ border-color: var(--color-primary);
6213
+ box-shadow: 0 0 0 1px var(--color-primary-soft);
6214
+ }
6215
+ .mld-auto-group__field-header {
6203
6216
  display: flex;
6204
6217
  align-items: center;
6205
- justify-content: center;
6206
- min-height: 200px;
6207
- padding: 1rem;
6208
- background-color: var(--bg-tertiary);
6209
- }
6210
- .mld-molecule-input__readonly svg {
6211
- max-width: 100%;
6212
- max-height: 100%;
6218
+ justify-content: space-between;
6219
+ margin-bottom: 0.5rem;
6213
6220
  }
6214
- /* Empty state */
6215
- .mld-molecule-input__empty {
6221
+ .mld-auto-group__field-toggle {
6216
6222
  display: flex;
6217
- flex-direction: column;
6218
6223
  align-items: center;
6219
- justify-content: center;
6220
- gap: 0.5rem;
6221
- min-height: 200px;
6222
- padding: 1rem;
6224
+ gap: 0.375rem;
6225
+ cursor: pointer;
6226
+ font-size: 0.8125rem;
6227
+ color: var(--text-secondary);
6228
+ }
6229
+ .mld-auto-group__field-toggle input {
6230
+ accent-color: var(--color-primary);
6231
+ }
6232
+ .mld-auto-group__field-toggle-label {
6233
+ user-select: none;
6234
+ }
6235
+ .mld-auto-group__field-cardinality {
6236
+ font-size: 0.6875rem;
6223
6237
  color: var(--text-muted);
6224
6238
  }
6225
- .mld-molecule-input__empty-icon {
6226
- width: 2.5rem;
6227
- height: 2.5rem;
6239
+ .mld-auto-group__field-name-input {
6240
+ margin-bottom: 0.5rem;
6228
6241
  }
6229
- .mld-molecule-input__empty-text {
6230
- font-size: 0.875rem;
6242
+ .mld-auto-group__field-values {
6243
+ display: flex;
6244
+ flex-wrap: wrap;
6245
+ gap: 0.25rem;
6231
6246
  }
6232
- /* SMILES preview */
6233
- .mld-molecule-input__smiles {
6234
- padding: 0.5rem 0.75rem;
6235
- font-family: 'Fira Code', monospace;
6236
- font-size: 0.75rem;
6247
+ .mld-auto-group__field-value {
6248
+ font-size: 0.6875rem;
6249
+ padding: 0.125rem 0.375rem;
6250
+ border-radius: var(--radius-sm);
6251
+ background: var(--bg-tertiary);
6237
6252
  color: var(--text-secondary);
6238
- background-color: var(--bg-tertiary);
6239
- border-top: 1px solid var(--border-color);
6240
- word-break: break-all;
6241
- user-select: all;
6253
+ font-family: 'Fira Code', monospace;
6242
6254
  }
6243
- .mld-molecule-input__smiles-label {
6244
- font-weight: 500;
6255
+ .mld-auto-group__field-more {
6256
+ font-size: 0.6875rem;
6257
+ padding: 0.125rem 0.375rem;
6245
6258
  color: var(--text-muted);
6246
- margin-right: 0.5rem;
6259
+ font-style: italic;
6247
6260
  }
6248
- /* Error state */
6249
- .mld-molecule-input__error {
6250
- padding: 0.75rem;
6251
- font-size: 0.875rem;
6252
- color: var(--mld-error);
6253
- background-color: var(--mld-error-bg);
6254
- border-top: 1px solid var(--mld-error);
6261
+ .mld-auto-group__field-summary {
6262
+ font-size: 0.8125rem;
6263
+ color: var(--text-secondary);
6264
+ padding: 0.5rem 0.75rem;
6265
+ background: var(--bg-tertiary);
6266
+ border-radius: var(--radius);
6255
6267
  }
6256
- .mld-molecule-input__error-icon {
6257
- width: 1rem;
6258
- height: 1rem;
6259
- margin-right: 0.5rem;
6260
- vertical-align: middle;
6268
+ .mld-auto-group__field-summary strong {
6269
+ color: var(--text-primary);
6261
6270
  }
6262
- /* Actions toolbar */
6263
- .mld-molecule-input__actions {
6271
+ .mld-auto-group__field-warning {
6272
+ font-size: 0.8125rem;
6273
+ color: var(--mld-warning);
6274
+ padding: 0.5rem 0.75rem;
6275
+ background: var(--mld-warning-bg);
6276
+ border-radius: var(--radius);
6277
+ }
6278
+ /* --- Preview step --- */
6279
+ .mld-auto-group__preview-step {
6264
6280
  display: flex;
6265
- gap: 0.25rem;
6266
- padding: 0.5rem;
6267
- background-color: var(--bg-tertiary);
6268
- border-top: 1px solid var(--border-color);
6281
+ flex-direction: column;
6282
+ gap: 1rem;
6269
6283
  }
6270
- .mld-molecule-input__action-btn {
6284
+ .mld-auto-group__preview-summary {
6271
6285
  display: flex;
6272
- align-items: center;
6273
- justify-content: center;
6274
- padding: 0.375rem;
6275
- background: transparent;
6276
- border: none;
6277
- border-radius: 0.25rem;
6278
- color: var(--text-muted);
6279
- cursor: pointer;
6280
- transition: color 0.15s ease, background-color 0.15s ease;
6286
+ gap: 1rem;
6287
+ padding: 0.75rem 1rem;
6288
+ background: var(--bg-tertiary);
6289
+ border-radius: var(--radius-md);
6281
6290
  }
6282
- .mld-molecule-input__action-btn:hover:not(:disabled) {
6283
- color: var(--text-primary);
6284
- background-color: var(--bg-hover);
6291
+ .mld-auto-group__preview-stat {
6292
+ font-size: 0.8125rem;
6293
+ color: var(--text-secondary);
6285
6294
  }
6286
- .mld-molecule-input__action-btn:disabled {
6287
- opacity: 0.5;
6288
- cursor: not-allowed;
6295
+ .mld-auto-group__preview-stat strong {
6296
+ color: var(--text-primary);
6289
6297
  }
6290
- .mld-molecule-input__action-btn svg {
6291
- width: 1rem;
6292
- height: 1rem;
6298
+ .mld-auto-group__preview-stat--excluded strong {
6299
+ color: var(--mld-error);
6293
6300
  }
6294
- /* ConcentrationInput Component Styles */
6295
- .mld-concentration-input {
6301
+ .mld-auto-group__preview-groups {
6296
6302
  display: flex;
6297
6303
  flex-direction: column;
6298
- gap: 0.25rem;
6304
+ gap: 0.375rem;
6305
+ max-height: 320px;
6306
+ overflow-y: auto;
6299
6307
  }
6300
- .mld-concentration-input__controls {
6301
- display: flex;
6302
- border-radius: 0.5rem;
6308
+ .mld-auto-group__preview-group {
6303
6309
  border: 1px solid var(--border-color);
6310
+ border-radius: var(--radius);
6304
6311
  overflow: hidden;
6305
- box-sizing: border-box;
6306
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
6307
6312
  }
6308
- .mld-concentration-input__controls--sm {
6309
- min-height: var(--form-height-sm);
6313
+ .mld-auto-group__preview-group[open] {
6314
+ background: var(--bg-secondary);
6310
6315
  }
6311
- .mld-concentration-input__controls--md {
6312
- min-height: var(--form-height-md);
6316
+ .mld-auto-group__preview-group-header {
6317
+ display: flex;
6318
+ align-items: center;
6319
+ gap: 0.5rem;
6320
+ padding: 0.5rem 0.75rem;
6321
+ cursor: pointer;
6322
+ font-size: 0.8125rem;
6323
+ user-select: none;
6313
6324
  }
6314
- .mld-concentration-input__controls--lg {
6315
- min-height: var(--form-height-lg);
6325
+ .mld-auto-group__preview-group-header:hover {
6326
+ background: var(--bg-hover);
6316
6327
  }
6317
- .mld-concentration-input__controls:focus-within {
6318
- border-color: transparent;
6319
- box-shadow: 0 0 0 2px var(--color-primary);
6328
+ .mld-auto-group__preview-dot {
6329
+ width: 0.625rem;
6330
+ height: 0.625rem;
6331
+ border-radius: 50%;
6332
+ flex-shrink: 0;
6320
6333
  }
6321
- .mld-concentration-input--error .mld-concentration-input__controls {
6322
- border-color: var(--mld-error);
6334
+ .mld-auto-group__preview-group-name {
6335
+ font-weight: 500;
6336
+ color: var(--text-primary);
6323
6337
  }
6324
- .mld-concentration-input--error .mld-concentration-input__controls:focus-within {
6325
- box-shadow: 0 0 0 2px var(--mld-error);
6338
+ .mld-auto-group__preview-group-count {
6339
+ font-size: 0.6875rem;
6340
+ font-weight: 500;
6341
+ padding: 0.0625rem 0.375rem;
6342
+ border-radius: var(--radius-sm);
6343
+ margin-left: auto;
6326
6344
  }
6327
- .mld-concentration-input--disabled .mld-concentration-input__controls {
6328
- opacity: 0.5;
6345
+ .mld-auto-group__preview-samples {
6346
+ display: flex;
6347
+ flex-wrap: wrap;
6348
+ gap: 0.25rem;
6349
+ padding: 0.5rem 0.75rem;
6350
+ border-top: 1px solid var(--border-light);
6329
6351
  }
6330
- /* Value input */
6331
- .mld-concentration-input__value {
6332
- flex: 1;
6333
- min-width: 0;
6334
- background-color: var(--bg-secondary);
6335
- color: var(--text-primary);
6336
- border: none;
6337
- outline: none;
6338
- line-height: 1.25;
6339
- -webkit-appearance: textfield;
6340
- -moz-appearance: textfield;
6341
- appearance: textfield;
6352
+ .mld-auto-group__preview-sample {
6353
+ font-size: 0.75rem;
6354
+ font-family: 'Fira Code', monospace;
6355
+ padding: 0.125rem 0.375rem;
6356
+ border-radius: var(--radius-sm);
6357
+ background: var(--bg-tertiary);
6358
+ color: var(--text-secondary);
6342
6359
  }
6343
- .mld-concentration-input__value::-webkit-outer-spin-button,
6344
- .mld-concentration-input__value::-webkit-inner-spin-button {
6345
- -webkit-appearance: none;
6346
- margin: 0;
6360
+ .mld-auto-group__preview-sample--excluded {
6361
+ opacity: 0.5;
6362
+ text-decoration: line-through;
6347
6363
  }
6348
- .mld-concentration-input__value::placeholder {
6364
+ /* --- Excluded section --- */
6365
+ .mld-auto-group__preview-excluded {
6366
+ border-top: 1px solid var(--border-color);
6367
+ padding-top: 0.75rem;
6368
+ }
6369
+ .mld-auto-group__preview-excluded-title {
6370
+ font-size: 0.75rem;
6371
+ font-weight: 500;
6349
6372
  color: var(--text-muted);
6373
+ text-transform: uppercase;
6374
+ letter-spacing: 0.05em;
6375
+ margin-bottom: 0.5rem;
6350
6376
  }
6351
- .mld-concentration-input__value--sm {
6352
- padding: 0.375rem 0.625rem;
6353
- font-size: 0.875rem;
6377
+ .mld-auto-group__preview-excluded-list {
6378
+ display: flex;
6379
+ flex-wrap: wrap;
6380
+ gap: 0.25rem;
6354
6381
  }
6355
- .mld-concentration-input__value--md {
6356
- padding: 0.5rem 0.75rem;
6382
+ /* --- Navigation --- */
6383
+ .mld-auto-group__nav {
6384
+ display: flex;
6385
+ align-items: center;
6386
+ gap: 0.5rem;
6387
+ }
6388
+ /* GroupAssigner Component Styles */
6389
+ .mld-group-assigner {
6390
+ display: flex;
6391
+ flex-direction: column;
6392
+ gap: 1rem;
6393
+ }
6394
+ /* Zones container */
6395
+ .mld-group-assigner__zones {
6396
+ display: grid;
6397
+ grid-template-columns: 1fr 1fr;
6398
+ gap: 0.75rem;
6399
+ }
6400
+ /* Zone */
6401
+ .mld-group-assigner__zone {
6402
+ display: flex;
6403
+ flex-direction: column;
6404
+ min-height: 8rem;
6405
+ padding: 0.75rem;
6406
+ border: 2px dashed var(--border-color);
6407
+ border-radius: var(--mld-radius);
6408
+ background-color: var(--bg-secondary);
6409
+ transition: border-color var(--mld-transition), background-color var(--mld-transition);
6410
+ }
6411
+ .mld-group-assigner__zone--dragover {
6412
+ border-color: var(--zone-color);
6413
+ background-color: color-mix(in srgb, var(--zone-color) 8%, var(--bg-secondary));
6414
+ }
6415
+ .mld-group-assigner__zone-header {
6416
+ display: flex;
6417
+ align-items: center;
6418
+ justify-content: space-between;
6419
+ margin-bottom: 0.5rem;
6420
+ padding-bottom: 0.5rem;
6421
+ border-bottom: 1px solid var(--border-color);
6422
+ }
6423
+ .mld-group-assigner__zone-label {
6424
+ font-size: 0.8125rem;
6425
+ font-weight: 600;
6426
+ color: var(--zone-color);
6427
+ }
6428
+ .mld-group-assigner__zone-count {
6429
+ font-size: 0.75rem;
6430
+ color: var(--text-muted);
6431
+ }
6432
+ .mld-group-assigner__zone-content {
6433
+ flex: 1;
6434
+ display: flex;
6435
+ flex-wrap: wrap;
6436
+ align-content: flex-start;
6437
+ gap: 0.375rem;
6438
+ }
6439
+ .mld-group-assigner__zone-empty {
6440
+ display: flex;
6441
+ align-items: center;
6442
+ justify-content: center;
6443
+ width: 100%;
6444
+ height: 100%;
6445
+ font-size: 0.8125rem;
6446
+ color: var(--text-muted);
6447
+ }
6448
+ /* Pills */
6449
+ .mld-group-assigner__pill {
6450
+ display: inline-flex;
6451
+ align-items: center;
6452
+ gap: 0.375rem;
6453
+ padding: 0.375rem 0.5rem;
6454
+ background-color: var(--bg-card);
6455
+ border: 1px solid var(--border-color);
6456
+ border-radius: 9999px;
6457
+ cursor: grab;
6458
+ user-select: none;
6459
+ transition: transform var(--mld-transition), box-shadow var(--mld-transition);
6460
+ }
6461
+ .mld-group-assigner__pill:hover {
6462
+ box-shadow: var(--mld-shadow-sm);
6463
+ }
6464
+ .mld-group-assigner__pill:active {
6465
+ cursor: grabbing;
6466
+ }
6467
+ .mld-group-assigner__pill--unassigned {
6468
+ background-color: var(--bg-tertiary);
6469
+ }
6470
+ .mld-group-assigner__pill--dragging {
6471
+ opacity: 0.5;
6472
+ transform: scale(0.95);
6473
+ }
6474
+ .mld-group-assigner__pill-color {
6475
+ width: 0.625rem;
6476
+ height: 0.625rem;
6477
+ border-radius: 50%;
6478
+ flex-shrink: 0;
6479
+ }
6480
+ .mld-group-assigner__pill-name {
6481
+ font-size: 0.8125rem;
6482
+ font-weight: 500;
6483
+ color: var(--text-primary);
6484
+ white-space: nowrap;
6485
+ }
6486
+ .mld-group-assigner__pill-count {
6487
+ font-size: 0.6875rem;
6488
+ color: var(--text-muted);
6489
+ padding: 0.125rem 0.375rem;
6490
+ background-color: var(--bg-tertiary);
6491
+ border-radius: 9999px;
6492
+ }
6493
+ .mld-group-assigner__pill-remove {
6494
+ display: flex;
6495
+ align-items: center;
6496
+ justify-content: center;
6497
+ width: 1.125rem;
6498
+ height: 1.125rem;
6499
+ padding: 0;
6500
+ background: none;
6501
+ border: none;
6502
+ color: var(--text-muted);
6503
+ border-radius: 50%;
6504
+ cursor: pointer;
6505
+ transition: color var(--mld-transition), background-color var(--mld-transition);
6506
+ }
6507
+ .mld-group-assigner__pill-remove:hover {
6508
+ color: var(--mld-error);
6509
+ background-color: var(--mld-error-soft);
6510
+ }
6511
+ /* Unassigned section */
6512
+ .mld-group-assigner__unassigned {
6513
+ display: flex;
6514
+ flex-direction: column;
6515
+ gap: 0.5rem;
6516
+ }
6517
+ .mld-group-assigner__unassigned-header {
6518
+ display: flex;
6519
+ align-items: center;
6520
+ justify-content: space-between;
6521
+ }
6522
+ .mld-group-assigner__unassigned-title {
6523
+ font-size: 0.75rem;
6524
+ font-weight: 500;
6525
+ color: var(--text-muted);
6526
+ text-transform: uppercase;
6527
+ letter-spacing: 0.025em;
6528
+ }
6529
+ .mld-group-assigner__clear-btn {
6530
+ font-size: 0.75rem;
6531
+ color: var(--color-primary);
6532
+ background: none;
6533
+ border: none;
6534
+ padding: 0;
6535
+ cursor: pointer;
6536
+ }
6537
+ .mld-group-assigner__clear-btn:hover {
6538
+ text-decoration: underline;
6539
+ }
6540
+ .mld-group-assigner__unassigned-list {
6541
+ display: flex;
6542
+ flex-wrap: wrap;
6543
+ gap: 0.375rem;
6544
+ max-height: 8rem;
6545
+ overflow-y: auto;
6546
+ padding: 0.5rem;
6547
+ background-color: var(--bg-secondary);
6548
+ border: 1px solid var(--border-color);
6549
+ border-radius: var(--mld-radius-sm);
6550
+ }
6551
+ /* Validation */
6552
+ .mld-group-assigner__validation {
6553
+ display: flex;
6554
+ align-items: center;
6555
+ gap: 0.5rem;
6556
+ padding: 0.5rem 0.75rem;
6557
+ font-size: 0.8125rem;
6558
+ color: var(--mld-warning);
6559
+ background-color: var(--mld-warning-soft);
6560
+ border-radius: var(--mld-radius-sm);
6561
+ }
6562
+ /* MoleculeInput Component Styles */
6563
+ .mld-molecule-input {
6564
+ display: flex;
6565
+ flex-direction: column;
6566
+ border-radius: 0.5rem;
6567
+ border: 1px solid var(--border-color);
6568
+ background-color: var(--bg-secondary);
6569
+ overflow: hidden;
6570
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
6571
+ }
6572
+ .mld-molecule-input:focus-within {
6573
+ border-color: transparent;
6574
+ box-shadow: 0 0 0 2px var(--color-primary);
6575
+ }
6576
+ .mld-molecule-input--disabled {
6577
+ opacity: 0.5;
6578
+ pointer-events: none;
6579
+ }
6580
+ .mld-molecule-input--readonly {
6581
+ pointer-events: none;
6582
+ }
6583
+ .mld-molecule-input--error {
6584
+ border-color: var(--mld-error);
6585
+ }
6586
+ .mld-molecule-input--error:focus-within {
6587
+ box-shadow: 0 0 0 2px var(--mld-error);
6588
+ }
6589
+ /* Editor container */
6590
+ .mld-molecule-input__editor {
6591
+ position: relative;
6592
+ width: 100%;
6593
+ min-height: 200px;
6594
+ background-color: var(--bg-secondary);
6595
+ }
6596
+ .mld-molecule-input__editor iframe {
6597
+ border: none;
6598
+ display: block;
6599
+ }
6600
+ /* Skeleton loader */
6601
+ .mld-molecule-input__skeleton {
6602
+ display: flex;
6603
+ flex-direction: column;
6604
+ align-items: center;
6605
+ justify-content: center;
6606
+ gap: 1rem;
6607
+ height: 100%;
6608
+ min-height: 200px;
6609
+ background-color: var(--bg-tertiary);
6610
+ }
6611
+ .mld-molecule-input__skeleton-icon {
6612
+ width: 3rem;
6613
+ height: 3rem;
6614
+ color: var(--text-muted);
6615
+ animation: mld-molecule-pulse 1.5s ease-in-out infinite;
6616
+ }
6617
+ .mld-molecule-input__skeleton-text {
6618
+ font-size: 0.875rem;
6619
+ color: var(--text-muted);
6620
+ }
6621
+ @keyframes mld-molecule-pulse {
6622
+ 0%, 100% {
6623
+ opacity: 0.4;
6624
+ }
6625
+ 50% {
6626
+ opacity: 1;
6627
+ }
6628
+ }
6629
+ /* Readonly SVG display */
6630
+ .mld-molecule-input__readonly {
6631
+ display: flex;
6632
+ align-items: center;
6633
+ justify-content: center;
6634
+ min-height: 200px;
6635
+ padding: 1rem;
6636
+ background-color: var(--bg-tertiary);
6637
+ }
6638
+ .mld-molecule-input__readonly svg {
6639
+ max-width: 100%;
6640
+ max-height: 100%;
6641
+ }
6642
+ /* Empty state */
6643
+ .mld-molecule-input__empty {
6644
+ display: flex;
6645
+ flex-direction: column;
6646
+ align-items: center;
6647
+ justify-content: center;
6648
+ gap: 0.5rem;
6649
+ min-height: 200px;
6650
+ padding: 1rem;
6651
+ color: var(--text-muted);
6652
+ }
6653
+ .mld-molecule-input__empty-icon {
6654
+ width: 2.5rem;
6655
+ height: 2.5rem;
6656
+ }
6657
+ .mld-molecule-input__empty-text {
6658
+ font-size: 0.875rem;
6659
+ }
6660
+ /* SMILES preview */
6661
+ .mld-molecule-input__smiles {
6662
+ padding: 0.5rem 0.75rem;
6663
+ font-family: 'Fira Code', monospace;
6664
+ font-size: 0.75rem;
6665
+ color: var(--text-secondary);
6666
+ background-color: var(--bg-tertiary);
6667
+ border-top: 1px solid var(--border-color);
6668
+ word-break: break-all;
6669
+ user-select: all;
6670
+ }
6671
+ .mld-molecule-input__smiles-label {
6672
+ font-weight: 500;
6673
+ color: var(--text-muted);
6674
+ margin-right: 0.5rem;
6675
+ }
6676
+ /* Error state */
6677
+ .mld-molecule-input__error {
6678
+ padding: 0.75rem;
6679
+ font-size: 0.875rem;
6680
+ color: var(--mld-error);
6681
+ background-color: var(--mld-error-bg);
6682
+ border-top: 1px solid var(--mld-error);
6683
+ }
6684
+ .mld-molecule-input__error-icon {
6685
+ width: 1rem;
6686
+ height: 1rem;
6687
+ margin-right: 0.5rem;
6688
+ vertical-align: middle;
6689
+ }
6690
+ /* Actions toolbar */
6691
+ .mld-molecule-input__actions {
6692
+ display: flex;
6693
+ gap: 0.25rem;
6694
+ padding: 0.5rem;
6695
+ background-color: var(--bg-tertiary);
6696
+ border-top: 1px solid var(--border-color);
6697
+ }
6698
+ .mld-molecule-input__action-btn {
6699
+ display: flex;
6700
+ align-items: center;
6701
+ justify-content: center;
6702
+ padding: 0.375rem;
6703
+ background: transparent;
6704
+ border: none;
6705
+ border-radius: 0.25rem;
6706
+ color: var(--text-muted);
6707
+ cursor: pointer;
6708
+ transition: color 0.15s ease, background-color 0.15s ease;
6709
+ }
6710
+ .mld-molecule-input__action-btn:hover:not(:disabled) {
6711
+ color: var(--text-primary);
6712
+ background-color: var(--bg-hover);
6713
+ }
6714
+ .mld-molecule-input__action-btn:disabled {
6715
+ opacity: 0.5;
6716
+ cursor: not-allowed;
6717
+ }
6718
+ .mld-molecule-input__action-btn svg {
6719
+ width: 1rem;
6720
+ height: 1rem;
6721
+ }
6722
+ /* ConcentrationInput Component Styles */
6723
+ .mld-concentration-input {
6724
+ display: flex;
6725
+ flex-direction: column;
6726
+ gap: 0.25rem;
6727
+ }
6728
+ .mld-concentration-input__controls {
6729
+ display: flex;
6730
+ border-radius: 0.5rem;
6731
+ border: 1px solid var(--border-color);
6732
+ overflow: hidden;
6733
+ box-sizing: border-box;
6734
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
6735
+ }
6736
+ .mld-concentration-input__controls--sm {
6737
+ min-height: var(--form-height-sm);
6738
+ }
6739
+ .mld-concentration-input__controls--md {
6740
+ min-height: var(--form-height-md);
6741
+ }
6742
+ .mld-concentration-input__controls--lg {
6743
+ min-height: var(--form-height-lg);
6744
+ }
6745
+ .mld-concentration-input__controls:focus-within {
6746
+ border-color: transparent;
6747
+ box-shadow: 0 0 0 2px var(--color-primary);
6748
+ }
6749
+ .mld-concentration-input--error .mld-concentration-input__controls {
6750
+ border-color: var(--mld-error);
6751
+ }
6752
+ .mld-concentration-input--error .mld-concentration-input__controls:focus-within {
6753
+ box-shadow: 0 0 0 2px var(--mld-error);
6754
+ }
6755
+ .mld-concentration-input--disabled .mld-concentration-input__controls {
6756
+ opacity: 0.5;
6757
+ }
6758
+ /* Value input */
6759
+ .mld-concentration-input__value {
6760
+ flex: 1;
6761
+ min-width: 0;
6762
+ background-color: var(--bg-secondary);
6763
+ color: var(--text-primary);
6764
+ border: none;
6765
+ outline: none;
6766
+ line-height: 1.25;
6767
+ -webkit-appearance: textfield;
6768
+ -moz-appearance: textfield;
6769
+ appearance: textfield;
6770
+ }
6771
+ .mld-concentration-input__value::-webkit-outer-spin-button,
6772
+ .mld-concentration-input__value::-webkit-inner-spin-button {
6773
+ -webkit-appearance: none;
6774
+ margin: 0;
6775
+ }
6776
+ .mld-concentration-input__value::placeholder {
6777
+ color: var(--text-muted);
6778
+ }
6779
+ .mld-concentration-input__value--sm {
6780
+ padding: 0.375rem 0.625rem;
6781
+ font-size: 0.875rem;
6782
+ }
6783
+ .mld-concentration-input__value--md {
6784
+ padding: 0.5rem 0.75rem;
6357
6785
  font-size: 0.875rem;
6358
6786
  }
6359
6787
  .mld-concentration-input__value--lg {
@@ -18048,1883 +18476,2480 @@ to {
18048
18476
  flex-shrink: 0;
18049
18477
  border-radius: 0.125rem;
18050
18478
  }
18051
- .mld-sample-legend__swatch--sm {
18052
- width: 0.75rem;
18053
- height: 0.75rem;
18479
+ .mld-sample-legend__swatch--sm {
18480
+ width: 0.75rem;
18481
+ height: 0.75rem;
18482
+ }
18483
+ .mld-sample-legend__swatch--md {
18484
+ width: 1rem;
18485
+ height: 1rem;
18486
+ }
18487
+ .mld-sample-legend__swatch--lg {
18488
+ width: 1.25rem;
18489
+ height: 1.25rem;
18490
+ }
18491
+ .mld-sample-legend__name {
18492
+ color: var(--text-primary);
18493
+ white-space: nowrap;
18494
+ overflow: hidden;
18495
+ text-overflow: ellipsis;
18496
+ }
18497
+ .mld-sample-legend__name--sm {
18498
+ font-size: 0.75rem;
18499
+ }
18500
+ .mld-sample-legend__name--md {
18501
+ font-size: 0.875rem;
18502
+ }
18503
+ .mld-sample-legend__name--lg {
18504
+ font-size: 1rem;
18505
+ }
18506
+ .mld-sample-legend__count {
18507
+ color: var(--text-muted);
18508
+ background-color: var(--bg-secondary);
18509
+ border-radius: 9999px;
18510
+ padding: 0 0.375rem;
18511
+ min-width: 1.5rem;
18512
+ text-align: center;
18513
+ }
18514
+ .mld-sample-legend__count--sm {
18515
+ font-size: 0.625rem;
18516
+ }
18517
+ .mld-sample-legend__count--md {
18518
+ font-size: 0.75rem;
18519
+ }
18520
+ .mld-sample-legend__count--lg {
18521
+ font-size: 0.75rem;
18522
+ }
18523
+ .mld-sample-legend__remove {
18524
+ margin-left: auto;
18525
+ padding: 0.125rem;
18526
+ border-radius: 0.25rem;
18527
+ color: var(--text-muted);
18528
+ background: transparent;
18529
+ border: none;
18530
+ cursor: pointer;
18531
+ transition: color 0.15s ease;
18532
+ }
18533
+ .mld-sample-legend__remove:hover {
18534
+ color: var(--mld-error);
18535
+ }
18536
+ .mld-sample-legend__remove-icon {
18537
+ width: 0.875rem;
18538
+ height: 0.875rem;
18539
+ }
18540
+
18541
+ /* Add button */
18542
+ .mld-sample-legend__add {
18543
+ display: flex;
18544
+ align-items: center;
18545
+ border: 2px dashed var(--border-color);
18546
+ border-radius: 0.5rem;
18547
+ color: var(--text-muted);
18548
+ background: transparent;
18549
+ cursor: pointer;
18550
+ transition: color 0.15s ease, border-color 0.15s ease;
18551
+ }
18552
+ .mld-sample-legend__add:hover {
18553
+ color: var(--text-primary);
18554
+ border-color: rgba(59, 130, 246, 0.5);
18555
+ }
18556
+ .mld-sample-legend__add:focus {
18557
+ outline: none;
18558
+ box-shadow: 0 0 0 2px var(--color-primary);
18559
+ }
18560
+ .mld-sample-legend__add--sm {
18561
+ gap: 0.375rem;
18562
+ padding: 0.25rem 0.5rem;
18563
+ }
18564
+ .mld-sample-legend__add--md {
18565
+ gap: 0.5rem;
18566
+ padding: 0.375rem 0.75rem;
18567
+ }
18568
+ .mld-sample-legend__add--lg {
18569
+ gap: 0.625rem;
18570
+ padding: 0.5rem 1rem;
18571
+ }
18572
+ .mld-sample-legend__add-icon--sm {
18573
+ width: 0.75rem;
18574
+ height: 0.75rem;
18575
+ }
18576
+ .mld-sample-legend__add-icon--md {
18577
+ width: 1rem;
18578
+ height: 1rem;
18579
+ }
18580
+ .mld-sample-legend__add-icon--lg {
18581
+ width: 1.25rem;
18582
+ height: 1.25rem;
18583
+ }
18584
+ .mld-sample-legend__add-text--sm {
18585
+ font-size: 0.75rem;
18586
+ }
18587
+ .mld-sample-legend__add-text--md {
18588
+ font-size: 0.875rem;
18589
+ }
18590
+ .mld-sample-legend__add-text--lg {
18591
+ font-size: 1rem;
18592
+ }
18593
+ /* PlateMapEditor Component Styles */
18594
+ .mld-plate-editor {
18595
+ display: flex;
18596
+ }
18597
+ .mld-plate-editor--with-sidebar {
18598
+ gap: 1rem;
18599
+ }
18600
+
18601
+ /* Main plate area */
18602
+ .mld-plate-editor__main {
18603
+ flex: 1;
18604
+ min-width: 0;
18605
+ }
18606
+
18607
+ /* Toolbar */
18608
+ .mld-plate-editor__toolbar {
18609
+ display: flex;
18610
+ flex-wrap: wrap;
18611
+ align-items: center;
18612
+ gap: 0.5rem;
18613
+ margin-bottom: 1rem;
18614
+ padding: 0.5rem;
18615
+ border-radius: 0.5rem;
18616
+ background-color: var(--bg-secondary);
18617
+ border: 1px solid var(--border-color);
18618
+ }
18619
+
18620
+ /* Plate tabs */
18621
+ .mld-plate-editor__tabs {
18622
+ display: flex;
18623
+ align-items: center;
18624
+ gap: 0.25rem;
18625
+ flex-wrap: wrap;
18626
+ }
18627
+ .mld-plate-editor__tab {
18628
+ position: relative;
18629
+ display: flex;
18630
+ align-items: center;
18631
+ gap: 0.5rem;
18632
+ padding: 0.375rem 0.75rem;
18633
+ font-size: 0.875rem;
18634
+ border-radius: 0.375rem;
18635
+ border: 1px solid var(--border-color);
18636
+ background-color: var(--bg-tertiary);
18637
+ color: var(--text-secondary);
18638
+ cursor: pointer;
18639
+ transition: all 0.2s ease;
18640
+ }
18641
+ .mld-plate-editor__tab--active {
18642
+ background-color: var(--color-primary);
18643
+ color: white;
18644
+ border-color: transparent;
18645
+ }
18646
+ .mld-plate-editor__tab-slot {
18647
+ width: 0.625rem;
18648
+ height: 0.625rem;
18649
+ border-radius: 9999px;
18650
+ flex-shrink: 0;
18651
+ }
18652
+ .mld-plate-editor__tab-name {
18653
+ font-weight: 500;
18654
+ }
18655
+ .mld-plate-editor__tab-count {
18656
+ padding: 0 0.375rem;
18657
+ min-width: 1.25rem;
18658
+ text-align: center;
18659
+ font-size: 0.625rem;
18660
+ font-weight: 600;
18661
+ border-radius: 9999px;
18662
+ background-color: var(--bg-secondary);
18663
+ color: var(--text-muted);
18664
+ }
18665
+ .mld-plate-editor__tab--active .mld-plate-editor__tab-count {
18666
+ background-color: rgba(255, 255, 255, 0.2);
18667
+ color: white;
18668
+ }
18669
+ .mld-plate-editor__tab-remove {
18670
+ opacity: 0;
18671
+ margin-left: 0.25rem;
18672
+ background: transparent;
18673
+ border: none;
18674
+ cursor: pointer;
18675
+ color: var(--text-muted);
18676
+ transition: opacity 0.15s ease;
18677
+ }
18678
+ .mld-plate-editor__tab:hover .mld-plate-editor__tab-remove {
18679
+ opacity: 1;
18680
+ }
18681
+ .mld-plate-editor__tab--active .mld-plate-editor__tab-remove {
18682
+ color: rgba(255, 255, 255, 0.7);
18683
+ }
18684
+ .mld-plate-editor__tab-remove svg {
18685
+ width: 0.875rem;
18686
+ height: 0.875rem;
18687
+ }
18688
+
18689
+ /* Add plate button */
18690
+ .mld-plate-editor__add-plate {
18691
+ display: flex;
18692
+ align-items: center;
18693
+ gap: 0.25rem;
18694
+ padding: 0.375rem 0.5rem;
18695
+ font-size: 0.875rem;
18696
+ border-radius: 0.375rem;
18697
+ border: 1px dashed var(--border-color);
18698
+ background: transparent;
18699
+ color: var(--text-muted);
18700
+ cursor: pointer;
18701
+ transition: color 0.15s ease, border-color 0.15s ease;
18702
+ }
18703
+ .mld-plate-editor__add-plate:hover {
18704
+ color: var(--color-primary);
18705
+ border-color: var(--color-primary);
18706
+ }
18707
+ .mld-plate-editor__add-plate svg {
18708
+ width: 1rem;
18709
+ height: 1rem;
18710
+ }
18711
+
18712
+ /* Toolbar spacer */
18713
+ .mld-plate-editor__spacer {
18714
+ flex: 1;
18715
+ }
18716
+
18717
+ /* Toolbar actions */
18718
+ .mld-plate-editor__actions {
18719
+ display: flex;
18720
+ align-items: center;
18721
+ gap: 0.25rem;
18722
+ }
18723
+ .mld-plate-editor__action-btn {
18724
+ padding: 0.375rem;
18725
+ border-radius: 0.25rem;
18726
+ background: transparent;
18727
+ border: none;
18728
+ color: var(--text-secondary);
18729
+ cursor: pointer;
18730
+ transition: background-color 0.15s ease, color 0.15s ease;
18731
+ }
18732
+ .mld-plate-editor__action-btn:hover {
18733
+ background-color: rgba(128, 128, 128, 0.1);
18054
18734
  }
18055
- .mld-sample-legend__swatch--md {
18735
+ .mld-plate-editor__action-btn:disabled {
18736
+ opacity: 0.4;
18737
+ cursor: not-allowed;
18738
+ }
18739
+ .mld-plate-editor__action-btn svg {
18056
18740
  width: 1rem;
18057
18741
  height: 1rem;
18058
18742
  }
18059
- .mld-sample-legend__swatch--lg {
18060
- width: 1.25rem;
18061
- height: 1.25rem;
18743
+ .mld-plate-editor__divider {
18744
+ width: 1px;
18745
+ height: 1rem;
18746
+ margin: 0 0.25rem;
18747
+ background-color: var(--border-color);
18062
18748
  }
18063
- .mld-sample-legend__name {
18064
- color: var(--text-primary);
18065
- white-space: nowrap;
18066
- overflow: hidden;
18067
- text-overflow: ellipsis;
18749
+
18750
+ /* Selection info bar */
18751
+ .mld-plate-editor__selection-bar {
18752
+ margin-top: 0.75rem;
18753
+ display: flex;
18754
+ align-items: center;
18755
+ gap: 0.75rem;
18756
+ padding: 0.5rem 0.75rem;
18757
+ border-radius: 0.5rem;
18758
+ font-size: 0.875rem;
18759
+ background-color: var(--bg-tertiary);
18760
+ border: 1px solid var(--border-color);
18068
18761
  }
18069
- .mld-sample-legend__name--sm {
18070
- font-size: 0.75rem;
18762
+ .mld-plate-editor__selection-count {
18763
+ color: var(--text-secondary);
18071
18764
  }
18072
- .mld-sample-legend__name--md {
18765
+ .mld-plate-editor__selection-count strong {
18766
+ font-weight: 600;
18767
+ }
18768
+ .mld-plate-editor__assign-btn {
18769
+ padding: 0.25rem 0.75rem;
18073
18770
  font-size: 0.875rem;
18771
+ font-weight: 500;
18772
+ border-radius: 0.25rem;
18773
+ background-color: var(--color-primary);
18774
+ color: white;
18775
+ border: none;
18776
+ cursor: pointer;
18777
+ transition: background-color 0.15s ease;
18074
18778
  }
18075
- .mld-sample-legend__name--lg {
18076
- font-size: 1rem;
18779
+ .mld-plate-editor__assign-btn:hover {
18780
+ opacity: 0.9;
18077
18781
  }
18078
- .mld-sample-legend__count {
18079
- color: var(--text-muted);
18782
+ .mld-plate-editor__clear-btn {
18783
+ padding: 0.25rem 0.75rem;
18784
+ font-size: 0.875rem;
18785
+ font-weight: 500;
18786
+ border-radius: 0.25rem;
18080
18787
  background-color: var(--bg-secondary);
18081
- border-radius: 9999px;
18082
- padding: 0 0.375rem;
18083
- min-width: 1.5rem;
18084
- text-align: center;
18788
+ color: var(--text-primary);
18789
+ border: 1px solid var(--border-color);
18790
+ cursor: pointer;
18791
+ transition: background-color 0.15s ease;
18085
18792
  }
18086
- .mld-sample-legend__count--sm {
18087
- font-size: 0.625rem;
18793
+ .mld-plate-editor__clear-btn:hover {
18794
+ background-color: rgba(239, 68, 68, 0.1);
18088
18795
  }
18089
- .mld-sample-legend__count--md {
18090
- font-size: 0.75rem;
18796
+
18797
+ /* Legend */
18798
+ .mld-plate-editor__legend {
18799
+ margin-top: 0.75rem;
18800
+ display: flex;
18801
+ align-items: center;
18802
+ justify-content: space-between;
18803
+ padding: 0 0.25rem;
18091
18804
  }
18092
- .mld-sample-legend__count--lg {
18093
- font-size: 0.75rem;
18805
+ .mld-plate-editor__legend-items {
18806
+ display: flex;
18807
+ align-items: center;
18808
+ gap: 1rem;
18094
18809
  }
18095
- .mld-sample-legend__remove {
18096
- margin-left: auto;
18097
- padding: 0.125rem;
18810
+ .mld-plate-editor__legend-item {
18811
+ display: flex;
18812
+ align-items: center;
18813
+ gap: 0.375rem;
18814
+ }
18815
+ .mld-plate-editor__legend-swatch {
18816
+ width: 0.875rem;
18817
+ height: 0.875rem;
18098
18818
  border-radius: 0.25rem;
18819
+ }
18820
+ .mld-plate-editor__legend-label {
18821
+ font-size: 0.75rem;
18099
18822
  color: var(--text-muted);
18100
- background: transparent;
18101
- border: none;
18102
- cursor: pointer;
18103
- transition: color 0.15s ease;
18104
18823
  }
18105
- .mld-sample-legend__remove:hover {
18106
- color: var(--mld-error);
18824
+ .mld-plate-editor__legend-hint {
18825
+ font-size: 0.75rem;
18826
+ color: var(--text-muted);
18827
+ display: flex;
18828
+ align-items: center;
18829
+ gap: 0.375rem;
18107
18830
  }
18108
- .mld-sample-legend__remove-icon {
18831
+ .mld-plate-editor__legend-hint svg {
18109
18832
  width: 0.875rem;
18110
18833
  height: 0.875rem;
18111
18834
  }
18112
18835
 
18113
- /* Add button */
18114
- .mld-sample-legend__add {
18115
- display: flex;
18116
- align-items: center;
18117
- border: 2px dashed var(--border-color);
18836
+ /* Sidebar */
18837
+ .mld-plate-editor__sidebar {
18838
+ width: 13rem;
18839
+ flex-shrink: 0;
18840
+ }
18841
+ .mld-plate-editor__sidebar-panel {
18118
18842
  border-radius: 0.5rem;
18119
- color: var(--text-muted);
18120
- background: transparent;
18121
- cursor: pointer;
18122
- transition: color 0.15s ease, border-color 0.15s ease;
18843
+ padding: 0.75rem;
18844
+ background-color: var(--bg-secondary);
18845
+ border: 1px solid var(--border-color);
18123
18846
  }
18124
- .mld-sample-legend__add:hover {
18847
+ .mld-plate-editor__sidebar-title {
18848
+ font-size: 0.875rem;
18849
+ font-weight: 500;
18850
+ margin-bottom: 0.75rem;
18125
18851
  color: var(--text-primary);
18126
- border-color: rgba(59, 130, 246, 0.5);
18127
18852
  }
18128
- .mld-sample-legend__add:focus {
18129
- outline: none;
18130
- box-shadow: 0 0 0 2px var(--color-primary);
18131
- }
18132
- .mld-sample-legend__add--sm {
18133
- gap: 0.375rem;
18134
- padding: 0.25rem 0.5rem;
18853
+
18854
+ /* Add sample form */
18855
+ .mld-plate-editor__add-sample {
18856
+ margin-top: 0.75rem;
18857
+ padding-top: 0.75rem;
18858
+ border-top: 1px solid var(--border-color);
18135
18859
  }
18136
- .mld-sample-legend__add--md {
18860
+ .mld-plate-editor__add-sample-form {
18861
+ display: flex;
18137
18862
  gap: 0.5rem;
18138
- padding: 0.375rem 0.75rem;
18139
18863
  }
18140
- .mld-sample-legend__add--lg {
18141
- gap: 0.625rem;
18142
- padding: 0.5rem 1rem;
18864
+ .mld-plate-editor__add-sample-input {
18865
+ flex: 1;
18866
+ padding: 0.25rem 0.5rem;
18867
+ font-size: 0.875rem;
18868
+ border-radius: 0.375rem;
18869
+ background-color: var(--bg-primary);
18870
+ border: 1px solid var(--border-color);
18871
+ color: var(--text-primary);
18143
18872
  }
18144
- .mld-sample-legend__add-icon--sm {
18145
- width: 0.75rem;
18146
- height: 0.75rem;
18873
+ .mld-plate-editor__add-sample-input:focus {
18874
+ outline: none;
18875
+ box-shadow: 0 0 0 1px var(--color-primary);
18147
18876
  }
18148
- .mld-sample-legend__add-icon--md {
18149
- width: 1rem;
18150
- height: 1rem;
18877
+ .mld-plate-editor__add-sample-btn {
18878
+ padding: 0.25rem 0.5rem;
18879
+ font-size: 0.875rem;
18880
+ font-weight: 500;
18881
+ border-radius: 0.375rem;
18882
+ background-color: var(--color-primary);
18883
+ color: white;
18884
+ border: none;
18885
+ cursor: pointer;
18886
+ transition: opacity 0.15s ease;
18151
18887
  }
18152
- .mld-sample-legend__add-icon--lg {
18153
- width: 1.25rem;
18154
- height: 1.25rem;
18888
+ .mld-plate-editor__add-sample-btn:disabled {
18889
+ opacity: 0.4;
18890
+ cursor: not-allowed;
18155
18891
  }
18156
- .mld-sample-legend__add-text--sm {
18892
+
18893
+ /* Shortcuts */
18894
+ .mld-plate-editor__shortcuts {
18895
+ margin-top: 1rem;
18896
+ padding-top: 0.75rem;
18897
+ border-top: 1px solid var(--border-color);
18898
+ }
18899
+ .mld-plate-editor__shortcuts-title {
18157
18900
  font-size: 0.75rem;
18901
+ font-weight: 500;
18902
+ margin-bottom: 0.5rem;
18903
+ color: var(--text-muted);
18158
18904
  }
18159
- .mld-sample-legend__add-text--md {
18160
- font-size: 0.875rem;
18905
+ .mld-plate-editor__shortcuts-list {
18906
+ display: flex;
18907
+ flex-direction: column;
18908
+ gap: 0.25rem;
18909
+ font-size: 0.75rem;
18910
+ color: var(--text-muted);
18161
18911
  }
18162
- .mld-sample-legend__add-text--lg {
18163
- font-size: 1rem;
18912
+ .mld-plate-editor__shortcut-key {
18913
+ padding: 0 0.25rem;
18914
+ border-radius: 0.25rem;
18915
+ background-color: var(--bg-primary);
18164
18916
  }
18165
- /* PlateMapEditor Component Styles */
18166
- .mld-plate-editor {
18917
+
18918
+ /* Import modal */
18919
+ .mld-plate-editor__modal-overlay {
18920
+ position: fixed;
18921
+ inset: 0;
18922
+ background-color: rgba(0, 0, 0, 0.5);
18167
18923
  display: flex;
18924
+ align-items: center;
18925
+ justify-content: center;
18926
+ z-index: 50;
18168
18927
  }
18169
- .mld-plate-editor--with-sidebar {
18170
- gap: 1rem;
18928
+ .mld-plate-editor__modal {
18929
+ width: 100%;
18930
+ max-width: 28rem;
18931
+ padding: 1rem;
18932
+ border-radius: 0.5rem;
18933
+ background-color: var(--bg-primary);
18934
+ border: 1px solid var(--border-color);
18935
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
18171
18936
  }
18172
-
18173
- /* Main plate area */
18174
- .mld-plate-editor__main {
18175
- flex: 1;
18176
- min-width: 0;
18937
+ .mld-plate-editor__modal-title {
18938
+ font-size: 1.125rem;
18939
+ font-weight: 500;
18940
+ margin-bottom: 0.75rem;
18941
+ color: var(--text-primary);
18942
+ }
18943
+ .mld-plate-editor__modal-field {
18944
+ margin-bottom: 0.75rem;
18177
18945
  }
18178
-
18179
- /* Toolbar */
18180
- .mld-plate-editor__toolbar {
18181
- display: flex;
18182
- flex-wrap: wrap;
18183
- align-items: center;
18184
- gap: 0.5rem;
18185
- margin-bottom: 1rem;
18186
- padding: 0.5rem;
18187
- border-radius: 0.5rem;
18946
+ .mld-plate-editor__modal-label {
18947
+ display: block;
18948
+ font-size: 0.875rem;
18949
+ margin-bottom: 0.25rem;
18950
+ color: var(--text-secondary);
18951
+ }
18952
+ .mld-plate-editor__modal-select,
18953
+ .mld-plate-editor__modal-textarea {
18954
+ width: 100%;
18955
+ padding: 0.5rem 0.75rem;
18956
+ border-radius: 0.375rem;
18188
18957
  background-color: var(--bg-secondary);
18189
18958
  border: 1px solid var(--border-color);
18959
+ color: var(--text-primary);
18190
18960
  }
18191
-
18192
- /* Plate tabs */
18193
- .mld-plate-editor__tabs {
18194
- display: flex;
18195
- align-items: center;
18196
- gap: 0.25rem;
18197
- flex-wrap: wrap;
18961
+ .mld-plate-editor__modal-select:focus,
18962
+ .mld-plate-editor__modal-textarea:focus {
18963
+ outline: none;
18964
+ box-shadow: 0 0 0 1px var(--color-primary);
18198
18965
  }
18199
- .mld-plate-editor__tab {
18200
- position: relative;
18966
+ .mld-plate-editor__modal-textarea {
18967
+ font-family: monospace;
18968
+ font-size: 0.875rem;
18969
+ resize: none;
18970
+ }
18971
+ .mld-plate-editor__modal-actions {
18201
18972
  display: flex;
18202
- align-items: center;
18973
+ justify-content: flex-end;
18203
18974
  gap: 0.5rem;
18204
- padding: 0.375rem 0.75rem;
18975
+ margin-top: 1rem;
18976
+ }
18977
+ .mld-plate-editor__modal-cancel {
18978
+ padding: 0.5rem 1rem;
18205
18979
  font-size: 0.875rem;
18206
18980
  border-radius: 0.375rem;
18981
+ background-color: var(--bg-secondary);
18982
+ color: var(--text-primary);
18207
18983
  border: 1px solid var(--border-color);
18208
- background-color: var(--bg-tertiary);
18209
- color: var(--text-secondary);
18210
18984
  cursor: pointer;
18211
- transition: all 0.2s ease;
18212
- }
18213
- .mld-plate-editor__tab--active {
18214
- background-color: var(--color-primary);
18215
- color: white;
18216
- border-color: transparent;
18217
- }
18218
- .mld-plate-editor__tab-slot {
18219
- width: 0.625rem;
18220
- height: 0.625rem;
18221
- border-radius: 9999px;
18222
- flex-shrink: 0;
18223
- }
18224
- .mld-plate-editor__tab-name {
18225
- font-weight: 500;
18985
+ transition: background-color 0.15s ease;
18226
18986
  }
18227
- .mld-plate-editor__tab-count {
18228
- padding: 0 0.375rem;
18229
- min-width: 1.25rem;
18230
- text-align: center;
18231
- font-size: 0.625rem;
18232
- font-weight: 600;
18233
- border-radius: 9999px;
18234
- background-color: var(--bg-secondary);
18235
- color: var(--text-muted);
18987
+ .mld-plate-editor__modal-cancel:hover {
18988
+ background-color: var(--bg-tertiary);
18236
18989
  }
18237
- .mld-plate-editor__tab--active .mld-plate-editor__tab-count {
18238
- background-color: rgba(255, 255, 255, 0.2);
18990
+ .mld-plate-editor__modal-submit {
18991
+ padding: 0.5rem 1rem;
18992
+ font-size: 0.875rem;
18993
+ border-radius: 0.375rem;
18994
+ background-color: var(--color-primary);
18239
18995
  color: white;
18240
- }
18241
- .mld-plate-editor__tab-remove {
18242
- opacity: 0;
18243
- margin-left: 0.25rem;
18244
- background: transparent;
18245
18996
  border: none;
18246
18997
  cursor: pointer;
18247
- color: var(--text-muted);
18248
18998
  transition: opacity 0.15s ease;
18249
18999
  }
18250
- .mld-plate-editor__tab:hover .mld-plate-editor__tab-remove {
18251
- opacity: 1;
19000
+ .mld-plate-editor__modal-submit:disabled {
19001
+ opacity: 0.4;
19002
+ cursor: not-allowed;
18252
19003
  }
18253
- .mld-plate-editor__tab--active .mld-plate-editor__tab-remove {
18254
- color: rgba(255, 255, 255, 0.7);
19004
+ /* ExperimentTimeline Component Styles */
19005
+ .mld-timeline {
19006
+ display: flex;
19007
+ flex-direction: column;
18255
19008
  }
18256
- .mld-plate-editor__tab-remove svg {
18257
- width: 0.875rem;
18258
- height: 0.875rem;
19009
+ .mld-timeline--horizontal {
19010
+ flex-direction: row;
19011
+ align-items: flex-start;
19012
+ overflow-x: auto;
19013
+ padding-bottom: 0.5rem;
18259
19014
  }
18260
19015
 
18261
- /* Add plate button */
18262
- .mld-plate-editor__add-plate {
18263
- display: flex;
18264
- align-items: center;
18265
- gap: 0.25rem;
18266
- padding: 0.375rem 0.5rem;
18267
- font-size: 0.875rem;
18268
- border-radius: 0.375rem;
18269
- border: 1px dashed var(--border-color);
18270
- background: transparent;
18271
- color: var(--text-muted);
18272
- cursor: pointer;
18273
- transition: color 0.15s ease, border-color 0.15s ease;
19016
+ /* Step item */
19017
+ .mld-timeline__step {
19018
+ position: relative;
18274
19019
  }
18275
- .mld-plate-editor__add-plate:hover {
18276
- color: var(--color-primary);
18277
- border-color: var(--color-primary);
19020
+ .mld-timeline--horizontal .mld-timeline__step {
19021
+ flex-shrink: 0;
18278
19022
  }
18279
- .mld-plate-editor__add-plate svg {
18280
- width: 1rem;
19023
+
19024
+ /* Connector line */
19025
+ .mld-timeline__connector {
19026
+ position: absolute;
19027
+ background-color: var(--border-color);
19028
+ }
19029
+ .mld-timeline--vertical .mld-timeline__connector {
19030
+ left: 1rem;
19031
+ top: 100%;
19032
+ width: 2px;
18281
19033
  height: 1rem;
19034
+ transform: translateX(-50%);
18282
19035
  }
18283
-
18284
- /* Toolbar spacer */
18285
- .mld-plate-editor__spacer {
18286
- flex: 1;
19036
+ .mld-timeline--horizontal .mld-timeline__connector {
19037
+ top: 50%;
19038
+ left: 100%;
19039
+ height: 2px;
19040
+ width: 2rem;
19041
+ transform: translateY(-50%);
18287
19042
  }
18288
19043
 
18289
- /* Toolbar actions */
18290
- .mld-plate-editor__actions {
18291
- display: flex;
18292
- align-items: center;
18293
- gap: 0.25rem;
18294
- }
18295
- .mld-plate-editor__action-btn {
18296
- padding: 0.375rem;
18297
- border-radius: 0.25rem;
18298
- background: transparent;
18299
- border: none;
18300
- color: var(--text-secondary);
19044
+ /* Step card */
19045
+ .mld-timeline__card {
19046
+ position: relative;
19047
+ border-radius: 0.5rem;
19048
+ border-width: 2px;
19049
+ border-style: solid;
19050
+ transition: all 0.2s ease;
18301
19051
  cursor: pointer;
18302
- transition: background-color 0.15s ease, color 0.15s ease;
18303
19052
  }
18304
- .mld-plate-editor__action-btn:hover {
18305
- background-color: rgba(128, 128, 128, 0.1);
19053
+ .mld-timeline--horizontal .mld-timeline__card {
19054
+ min-width: 180px;
18306
19055
  }
18307
- .mld-plate-editor__action-btn:disabled {
18308
- opacity: 0.4;
18309
- cursor: not-allowed;
19056
+ .mld-timeline--vertical .mld-timeline__card {
19057
+ width: 100%;
18310
19058
  }
18311
- .mld-plate-editor__action-btn svg {
18312
- width: 1rem;
18313
- height: 1rem;
19059
+ .mld-timeline__card--sm {
19060
+ padding: 0.5rem;
18314
19061
  }
18315
- .mld-plate-editor__divider {
18316
- width: 1px;
18317
- height: 1rem;
18318
- margin: 0 0.25rem;
18319
- background-color: var(--border-color);
19062
+ .mld-timeline__card--md {
19063
+ padding: 0.75rem;
18320
19064
  }
18321
-
18322
- /* Selection info bar */
18323
- .mld-plate-editor__selection-bar {
18324
- margin-top: 0.75rem;
18325
- display: flex;
18326
- align-items: center;
18327
- gap: 0.75rem;
18328
- padding: 0.5rem 0.75rem;
18329
- border-radius: 0.5rem;
18330
- font-size: 0.875rem;
18331
- background-color: var(--bg-tertiary);
18332
- border: 1px solid var(--border-color);
19065
+ .mld-timeline__card--lg {
19066
+ padding: 1rem;
18333
19067
  }
18334
- .mld-plate-editor__selection-count {
18335
- color: var(--text-secondary);
19068
+ .mld-timeline__card--dragging {
19069
+ opacity: 0.5;
18336
19070
  }
18337
- .mld-plate-editor__selection-count strong {
18338
- font-weight: 600;
19071
+ .mld-timeline__card--drag-over {
19072
+ box-shadow: 0 0 0 2px var(--color-primary);
18339
19073
  }
18340
- .mld-plate-editor__assign-btn {
18341
- padding: 0.25rem 0.75rem;
18342
- font-size: 0.875rem;
18343
- font-weight: 500;
18344
- border-radius: 0.25rem;
18345
- background-color: var(--color-primary);
18346
- color: white;
18347
- border: none;
18348
- cursor: pointer;
18349
- transition: background-color 0.15s ease;
19074
+ .mld-timeline__card--editable {
19075
+ cursor: grab;
18350
19076
  }
18351
- .mld-plate-editor__assign-btn:hover {
18352
- opacity: 0.9;
19077
+ .mld-timeline__card--editable:active {
19078
+ cursor: grabbing;
18353
19079
  }
18354
- .mld-plate-editor__clear-btn {
18355
- padding: 0.25rem 0.75rem;
18356
- font-size: 0.875rem;
18357
- font-weight: 500;
18358
- border-radius: 0.25rem;
18359
- background-color: var(--bg-secondary);
18360
- color: var(--text-primary);
18361
- border: 1px solid var(--border-color);
18362
- cursor: pointer;
18363
- transition: background-color 0.15s ease;
19080
+
19081
+ /* Status colors */
19082
+ .mld-timeline__card--pending {
19083
+ background-color: var(--bg-tertiary);
19084
+ border-color: var(--border-color);
19085
+ }
19086
+ .mld-timeline__card--in-progress {
19087
+ background-color: rgba(59, 130, 246, 0.1);
19088
+ border-color: rgba(59, 130, 246, 0.6);
19089
+ }
19090
+ .mld-timeline__card--completed {
19091
+ background-color: rgba(16, 185, 129, 0.1);
19092
+ border-color: rgba(16, 185, 129, 0.6);
18364
19093
  }
18365
- .mld-plate-editor__clear-btn:hover {
19094
+ .mld-timeline__card--failed {
18366
19095
  background-color: rgba(239, 68, 68, 0.1);
19096
+ border-color: rgba(239, 68, 68, 0.6);
19097
+ }
19098
+ .mld-timeline__card--skipped {
19099
+ background-color: var(--bg-tertiary);
19100
+ border-color: var(--border-color);
18367
19101
  }
18368
19102
 
18369
- /* Legend */
18370
- .mld-plate-editor__legend {
18371
- margin-top: 0.75rem;
19103
+ /* Header */
19104
+ .mld-timeline__header {
18372
19105
  display: flex;
18373
19106
  align-items: center;
18374
- justify-content: space-between;
18375
- padding: 0 0.25rem;
18376
19107
  }
18377
- .mld-plate-editor__legend-items {
18378
- display: flex;
18379
- align-items: center;
19108
+ .mld-timeline__header--sm {
19109
+ gap: 0.5rem;
19110
+ }
19111
+ .mld-timeline__header--md {
19112
+ gap: 0.75rem;
19113
+ }
19114
+ .mld-timeline__header--lg {
18380
19115
  gap: 1rem;
18381
19116
  }
18382
- .mld-plate-editor__legend-item {
19117
+
19118
+ /* Icon */
19119
+ .mld-timeline__icon {
19120
+ flex-shrink: 0;
19121
+ border-radius: 9999px;
18383
19122
  display: flex;
18384
19123
  align-items: center;
18385
- gap: 0.375rem;
19124
+ justify-content: center;
18386
19125
  }
18387
- .mld-plate-editor__legend-swatch {
18388
- width: 0.875rem;
18389
- height: 0.875rem;
18390
- border-radius: 0.25rem;
19126
+ .mld-timeline__icon--sm {
19127
+ width: 1.5rem;
19128
+ height: 1.5rem;
18391
19129
  }
18392
- .mld-plate-editor__legend-label {
18393
- font-size: 0.75rem;
18394
- color: var(--text-muted);
19130
+ .mld-timeline__icon--md {
19131
+ width: 2rem;
19132
+ height: 2rem;
18395
19133
  }
18396
- .mld-plate-editor__legend-hint {
18397
- font-size: 0.75rem;
18398
- color: var(--text-muted);
18399
- display: flex;
18400
- align-items: center;
18401
- gap: 0.375rem;
19134
+ .mld-timeline__icon--lg {
19135
+ width: 2.5rem;
19136
+ height: 2.5rem;
18402
19137
  }
18403
- .mld-plate-editor__legend-hint svg {
18404
- width: 0.875rem;
18405
- height: 0.875rem;
19138
+ .mld-timeline__icon svg {
19139
+ stroke: currentColor;
19140
+ }
19141
+ .mld-timeline__icon--sm svg {
19142
+ width: 0.75rem;
19143
+ height: 0.75rem;
19144
+ }
19145
+ .mld-timeline__icon--md svg {
19146
+ width: 1rem;
19147
+ height: 1rem;
19148
+ }
19149
+ .mld-timeline__icon--lg svg {
19150
+ width: 1.25rem;
19151
+ height: 1.25rem;
18406
19152
  }
18407
19153
 
18408
- /* Sidebar */
18409
- .mld-plate-editor__sidebar {
18410
- width: 13rem;
18411
- flex-shrink: 0;
19154
+ /* Status text colors */
19155
+ .mld-timeline__icon--pending {
19156
+ color: var(--text-muted);
18412
19157
  }
18413
- .mld-plate-editor__sidebar-panel {
18414
- border-radius: 0.5rem;
18415
- padding: 0.75rem;
18416
- background-color: var(--bg-secondary);
18417
- border: 1px solid var(--border-color);
19158
+ .mld-timeline__icon--in-progress {
19159
+ color: #3b82f6;
18418
19160
  }
18419
- .mld-plate-editor__sidebar-title {
18420
- font-size: 0.875rem;
18421
- font-weight: 500;
18422
- margin-bottom: 0.75rem;
18423
- color: var(--text-primary);
19161
+ .mld-timeline__icon--completed {
19162
+ color: #10b981;
19163
+ }
19164
+ .mld-timeline__icon--failed {
19165
+ color: #ef4444;
19166
+ }
19167
+ .mld-timeline__icon--skipped {
19168
+ color: var(--text-muted);
18424
19169
  }
18425
19170
 
18426
- /* Add sample form */
18427
- .mld-plate-editor__add-sample {
18428
- margin-top: 0.75rem;
18429
- padding-top: 0.75rem;
18430
- border-top: 1px solid var(--border-color);
19171
+ /* Title and meta */
19172
+ .mld-timeline__content {
19173
+ flex: 1;
19174
+ min-width: 0;
18431
19175
  }
18432
- .mld-plate-editor__add-sample-form {
19176
+ .mld-timeline__title-row {
18433
19177
  display: flex;
19178
+ align-items: center;
18434
19179
  gap: 0.5rem;
18435
19180
  }
18436
- .mld-plate-editor__add-sample-input {
18437
- flex: 1;
18438
- padding: 0.25rem 0.5rem;
18439
- font-size: 0.875rem;
18440
- border-radius: 0.375rem;
18441
- background-color: var(--bg-primary);
18442
- border: 1px solid var(--border-color);
19181
+ .mld-timeline__title {
19182
+ font-weight: 500;
18443
19183
  color: var(--text-primary);
19184
+ overflow: hidden;
19185
+ text-overflow: ellipsis;
19186
+ white-space: nowrap;
18444
19187
  }
18445
- .mld-plate-editor__add-sample-input:focus {
18446
- outline: none;
18447
- box-shadow: 0 0 0 1px var(--color-primary);
19188
+ .mld-timeline__title--sm {
19189
+ font-size: 0.75rem;
18448
19190
  }
18449
- .mld-plate-editor__add-sample-btn {
18450
- padding: 0.25rem 0.5rem;
19191
+ .mld-timeline__title--md {
18451
19192
  font-size: 0.875rem;
18452
- font-weight: 500;
18453
- border-radius: 0.375rem;
18454
- background-color: var(--color-primary);
18455
- color: white;
18456
- border: none;
18457
- cursor: pointer;
18458
- transition: opacity 0.15s ease;
18459
- }
18460
- .mld-plate-editor__add-sample-btn:disabled {
18461
- opacity: 0.4;
18462
- cursor: not-allowed;
18463
19193
  }
18464
-
18465
- /* Shortcuts */
18466
- .mld-plate-editor__shortcuts {
18467
- margin-top: 1rem;
18468
- padding-top: 0.75rem;
18469
- border-top: 1px solid var(--border-color);
19194
+ .mld-timeline__title--lg {
19195
+ font-size: 1rem;
18470
19196
  }
18471
- .mld-plate-editor__shortcuts-title {
19197
+ .mld-timeline__duration {
19198
+ color: var(--text-muted);
18472
19199
  font-size: 0.75rem;
18473
- font-weight: 500;
18474
- margin-bottom: 0.5rem;
19200
+ }
19201
+ .mld-timeline__duration--sm {
19202
+ font-size: 0.625rem;
19203
+ }
19204
+ .mld-timeline__type {
18475
19205
  color: var(--text-muted);
19206
+ text-transform: capitalize;
18476
19207
  }
18477
- .mld-plate-editor__shortcuts-list {
18478
- display: flex;
18479
- flex-direction: column;
18480
- gap: 0.25rem;
19208
+ .mld-timeline__type--sm {
19209
+ font-size: 0.625rem;
19210
+ }
19211
+ .mld-timeline__type--md {
19212
+ font-size: 0.75rem;
19213
+ }
19214
+ .mld-timeline__type--lg {
18481
19215
  font-size: 0.75rem;
19216
+ }
19217
+
19218
+ /* Expand indicator */
19219
+ .mld-timeline__expand-icon {
19220
+ width: 1rem;
19221
+ height: 1rem;
18482
19222
  color: var(--text-muted);
19223
+ transition: transform 0.2s ease;
18483
19224
  }
18484
- .mld-plate-editor__shortcut-key {
18485
- padding: 0 0.25rem;
18486
- border-radius: 0.25rem;
18487
- background-color: var(--bg-primary);
19225
+ .mld-timeline__expand-icon--expanded {
19226
+ transform: rotate(180deg);
18488
19227
  }
18489
19228
 
18490
- /* Import modal */
18491
- .mld-plate-editor__modal-overlay {
18492
- position: fixed;
18493
- inset: 0;
18494
- background-color: rgba(0, 0, 0, 0.5);
18495
- display: flex;
18496
- align-items: center;
18497
- justify-content: center;
18498
- z-index: 50;
19229
+ /* Remove button */
19230
+ .mld-timeline__remove-btn {
19231
+ padding: 0.25rem;
19232
+ color: var(--text-muted);
19233
+ background: transparent;
19234
+ border: none;
19235
+ border-radius: 0.25rem;
19236
+ cursor: pointer;
19237
+ transition: color 0.15s ease;
18499
19238
  }
18500
- .mld-plate-editor__modal {
18501
- width: 100%;
18502
- max-width: 28rem;
18503
- padding: 1rem;
18504
- border-radius: 0.5rem;
18505
- background-color: var(--bg-primary);
18506
- border: 1px solid var(--border-color);
18507
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
19239
+ .mld-timeline__remove-btn:hover {
19240
+ color: var(--mld-error);
18508
19241
  }
18509
- .mld-plate-editor__modal-title {
18510
- font-size: 1.125rem;
18511
- font-weight: 500;
18512
- margin-bottom: 0.75rem;
18513
- color: var(--text-primary);
19242
+ .mld-timeline__remove-btn svg {
19243
+ width: 1rem;
19244
+ height: 1rem;
18514
19245
  }
18515
- .mld-plate-editor__modal-field {
18516
- margin-bottom: 0.75rem;
19246
+
19247
+ /* Expanded content */
19248
+ .mld-timeline__expanded {
19249
+ margin-top: 0.75rem;
19250
+ padding-top: 0.75rem;
19251
+ border-top: 1px solid rgba(var(--border-color-rgb, 0, 0, 0), 0.5);
18517
19252
  }
18518
- .mld-plate-editor__modal-label {
18519
- display: block;
18520
- font-size: 0.875rem;
18521
- margin-bottom: 0.25rem;
19253
+ .mld-timeline__description {
18522
19254
  color: var(--text-secondary);
19255
+ margin-top: 0 !important;
19256
+ margin-bottom: 0.5rem !important;
19257
+ padding: 0 !important;
18523
19258
  }
18524
- .mld-plate-editor__modal-select,
18525
- .mld-plate-editor__modal-textarea {
18526
- width: 100%;
18527
- padding: 0.5rem 0.75rem;
18528
- border-radius: 0.375rem;
18529
- background-color: var(--bg-secondary);
18530
- border: 1px solid var(--border-color);
18531
- color: var(--text-primary);
18532
- }
18533
- .mld-plate-editor__modal-select:focus,
18534
- .mld-plate-editor__modal-textarea:focus {
18535
- outline: none;
18536
- box-shadow: 0 0 0 1px var(--color-primary);
19259
+ .mld-timeline__description--sm {
19260
+ font-size: 0.75rem;
18537
19261
  }
18538
- .mld-plate-editor__modal-textarea {
18539
- font-family: monospace;
19262
+ .mld-timeline__description--md {
18540
19263
  font-size: 0.875rem;
18541
- resize: none;
18542
19264
  }
18543
- .mld-plate-editor__modal-actions {
19265
+ .mld-timeline__parameters {
18544
19266
  display: flex;
18545
- justify-content: flex-end;
18546
- gap: 0.5rem;
18547
- margin-top: 1rem;
19267
+ flex-direction: column;
19268
+ gap: 0.25rem;
18548
19269
  }
18549
- .mld-plate-editor__modal-cancel {
18550
- padding: 0.5rem 1rem;
18551
- font-size: 0.875rem;
18552
- border-radius: 0.375rem;
18553
- background-color: var(--bg-secondary);
19270
+ .mld-timeline__param {
19271
+ display: flex;
19272
+ justify-content: space-between;
19273
+ }
19274
+ .mld-timeline__param--sm {
19275
+ font-size: 0.625rem;
19276
+ }
19277
+ .mld-timeline__param--md {
19278
+ font-size: 0.75rem;
19279
+ }
19280
+ .mld-timeline__param-key {
19281
+ color: var(--text-muted);
19282
+ }
19283
+ .mld-timeline__param-value {
18554
19284
  color: var(--text-primary);
18555
- border: 1px solid var(--border-color);
18556
- cursor: pointer;
18557
- transition: background-color 0.15s ease;
19285
+ font-weight: 500;
18558
19286
  }
18559
- .mld-plate-editor__modal-cancel:hover {
18560
- background-color: var(--bg-tertiary);
19287
+
19288
+ /* Status controls */
19289
+ .mld-timeline__status-controls {
19290
+ margin-top: 0.75rem;
19291
+ display: flex;
19292
+ flex-wrap: wrap;
19293
+ gap: 0.25rem;
18561
19294
  }
18562
- .mld-plate-editor__modal-submit {
18563
- padding: 0.5rem 1rem;
18564
- font-size: 0.875rem;
18565
- border-radius: 0.375rem;
18566
- background-color: var(--color-primary);
18567
- color: white;
19295
+ .mld-timeline__status-btn {
19296
+ padding: 0.125rem 0.5rem;
19297
+ border-radius: 0.25rem;
19298
+ font-size: 0.75rem;
19299
+ background: transparent;
18568
19300
  border: none;
18569
19301
  cursor: pointer;
18570
- transition: opacity 0.15s ease;
19302
+ transition: background-color 0.15s ease, color 0.15s ease;
19303
+ color: var(--text-muted);
18571
19304
  }
18572
- .mld-plate-editor__modal-submit:disabled {
18573
- opacity: 0.4;
18574
- cursor: not-allowed;
19305
+ .mld-timeline__status-btn:hover {
19306
+ background-color: var(--bg-tertiary);
18575
19307
  }
18576
- /* ExperimentTimeline Component Styles */
18577
- .mld-timeline {
18578
- display: flex;
18579
- flex-direction: column;
19308
+ .mld-timeline__status-btn--active {
19309
+ font-weight: 500;
18580
19310
  }
18581
- .mld-timeline--horizontal {
18582
- flex-direction: row;
18583
- align-items: flex-start;
18584
- overflow-x: auto;
18585
- padding-bottom: 0.5rem;
19311
+ .mld-timeline__status-btn--pending.mld-timeline__status-btn--active {
19312
+ background-color: var(--bg-tertiary);
19313
+ color: var(--text-secondary);
18586
19314
  }
18587
-
18588
- /* Step item */
18589
- .mld-timeline__step {
18590
- position: relative;
19315
+ .mld-timeline__status-btn--in-progress.mld-timeline__status-btn--active {
19316
+ background-color: rgba(59, 130, 246, 0.1);
19317
+ color: #3b82f6;
18591
19318
  }
18592
- .mld-timeline--horizontal .mld-timeline__step {
18593
- flex-shrink: 0;
19319
+ .mld-timeline__status-btn--completed.mld-timeline__status-btn--active {
19320
+ background-color: rgba(16, 185, 129, 0.1);
19321
+ color: #10b981;
19322
+ }
19323
+ .mld-timeline__status-btn--failed.mld-timeline__status-btn--active {
19324
+ background-color: rgba(239, 68, 68, 0.1);
19325
+ color: #ef4444;
19326
+ }
19327
+ .mld-timeline__status-btn--skipped.mld-timeline__status-btn--active {
19328
+ background-color: var(--bg-tertiary);
19329
+ color: var(--text-muted);
18594
19330
  }
18595
19331
 
18596
- /* Connector line */
18597
- .mld-timeline__connector {
19332
+ /* Add step button (inline) */
19333
+ .mld-timeline__add-inline {
18598
19334
  position: absolute;
18599
- background-color: var(--border-color);
18600
- }
18601
- .mld-timeline--vertical .mld-timeline__connector {
18602
19335
  left: 1rem;
18603
- top: 100%;
18604
- width: 2px;
18605
- height: 1rem;
19336
+ bottom: -0.5rem;
18606
19337
  transform: translateX(-50%);
19338
+ width: 1rem;
19339
+ height: 1rem;
19340
+ background-color: var(--bg-primary);
19341
+ border: 1px solid var(--border-color);
19342
+ border-radius: 9999px;
19343
+ display: flex;
19344
+ align-items: center;
19345
+ justify-content: center;
19346
+ color: var(--text-muted);
19347
+ cursor: pointer;
19348
+ opacity: 0;
19349
+ transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease;
19350
+ z-index: 10;
18607
19351
  }
18608
- .mld-timeline--horizontal .mld-timeline__connector {
18609
- top: 50%;
18610
- left: 100%;
18611
- height: 2px;
19352
+ .mld-timeline__step:hover .mld-timeline__add-inline,
19353
+ .mld-timeline__add-inline:focus {
19354
+ opacity: 1;
19355
+ }
19356
+ .mld-timeline__add-inline:hover {
19357
+ color: var(--color-primary);
19358
+ border-color: var(--color-primary);
19359
+ }
19360
+ .mld-timeline__add-inline svg {
19361
+ width: 0.75rem;
19362
+ height: 0.75rem;
19363
+ }
19364
+
19365
+ /* Spacer */
19366
+ .mld-timeline__spacer--vertical {
19367
+ height: 1rem;
19368
+ }
19369
+ .mld-timeline__spacer--horizontal {
18612
19370
  width: 2rem;
18613
- transform: translateY(-50%);
18614
19371
  }
18615
19372
 
18616
- /* Step card */
18617
- .mld-timeline__card {
18618
- position: relative;
19373
+ /* Empty state */
19374
+ .mld-timeline__empty {
19375
+ display: flex;
19376
+ align-items: center;
19377
+ justify-content: center;
19378
+ padding: 2rem;
19379
+ border: 2px dashed var(--border-color);
19380
+ border-radius: 0.5rem;
19381
+ }
19382
+ .mld-timeline__empty-content {
19383
+ text-align: center;
19384
+ }
19385
+ .mld-timeline__empty-text {
19386
+ color: var(--text-muted);
19387
+ margin-top: 0 !important;
19388
+ margin-bottom: 0.5rem !important;
19389
+ padding: 0 !important;
19390
+ }
19391
+ .mld-timeline__empty-btn {
19392
+ padding: 0.375rem 0.75rem;
19393
+ font-size: 0.875rem;
19394
+ background-color: var(--color-primary);
19395
+ color: white;
19396
+ border: none;
18619
19397
  border-radius: 0.5rem;
18620
- border-width: 2px;
18621
- border-style: solid;
18622
- transition: all 0.2s ease;
18623
19398
  cursor: pointer;
19399
+ transition: background-color 0.15s ease;
18624
19400
  }
18625
- .mld-timeline--horizontal .mld-timeline__card {
18626
- min-width: 180px;
19401
+ .mld-timeline__empty-btn:hover {
19402
+ opacity: 0.9;
18627
19403
  }
18628
- .mld-timeline--vertical .mld-timeline__card {
18629
- width: 100%;
19404
+
19405
+ /* Add step button (end) */
19406
+ .mld-timeline__add-end {
19407
+ display: flex;
19408
+ align-items: center;
19409
+ justify-content: center;
19410
+ gap: 0.5rem;
19411
+ border: 2px dashed var(--border-color);
19412
+ border-radius: 0.5rem;
19413
+ color: var(--text-muted);
19414
+ background: transparent;
19415
+ cursor: pointer;
19416
+ transition: color 0.15s ease, border-color 0.15s ease;
18630
19417
  }
18631
- .mld-timeline__card--sm {
19418
+ .mld-timeline__add-end--sm {
18632
19419
  padding: 0.5rem;
18633
19420
  }
18634
- .mld-timeline__card--md {
19421
+ .mld-timeline__add-end--md {
18635
19422
  padding: 0.75rem;
18636
19423
  }
18637
- .mld-timeline__card--lg {
19424
+ .mld-timeline__add-end--lg {
18638
19425
  padding: 1rem;
18639
19426
  }
18640
- .mld-timeline__card--dragging {
18641
- opacity: 0.5;
19427
+ .mld-timeline--horizontal .mld-timeline__add-end {
19428
+ min-width: 120px;
19429
+ flex-shrink: 0;
18642
19430
  }
18643
- .mld-timeline__card--drag-over {
18644
- box-shadow: 0 0 0 2px var(--color-primary);
19431
+ .mld-timeline--vertical .mld-timeline__add-end {
19432
+ width: 100%;
19433
+ margin-top: 1rem;
18645
19434
  }
18646
- .mld-timeline__card--editable {
18647
- cursor: grab;
19435
+ .mld-timeline__add-end:hover {
19436
+ color: var(--color-primary);
19437
+ border-color: var(--color-primary);
18648
19438
  }
18649
- .mld-timeline__card--editable:active {
18650
- cursor: grabbing;
19439
+ .mld-timeline__add-end svg {
19440
+ width: 1rem;
19441
+ height: 1rem;
18651
19442
  }
18652
-
18653
- /* Status colors */
18654
- .mld-timeline__card--pending {
18655
- background-color: var(--bg-tertiary);
18656
- border-color: var(--border-color);
19443
+ .mld-timeline__add-end-text--sm {
19444
+ font-size: 0.75rem;
18657
19445
  }
18658
- .mld-timeline__card--in-progress {
18659
- background-color: rgba(59, 130, 246, 0.1);
18660
- border-color: rgba(59, 130, 246, 0.6);
19446
+ .mld-timeline__add-end-text--md {
19447
+ font-size: 0.875rem;
18661
19448
  }
18662
- .mld-timeline__card--completed {
18663
- background-color: rgba(16, 185, 129, 0.1);
18664
- border-color: rgba(16, 185, 129, 0.6);
19449
+ .mld-timeline__add-end-text--lg {
19450
+ font-size: 1rem;
18665
19451
  }
18666
- .mld-timeline__card--failed {
18667
- background-color: rgba(239, 68, 68, 0.1);
18668
- border-color: rgba(239, 68, 68, 0.6);
19452
+ .mld-wizard {
19453
+ display: flex;
19454
+ flex-direction: column;
19455
+ gap: 1.5rem;
19456
+ outline: none;
19457
+ }
19458
+
19459
+ /* Progress indicator */
19460
+ .mld-wizard__progress {
19461
+ }
19462
+ .mld-wizard__steps-indicator {
19463
+ display: flex;
19464
+ align-items: flex-start;
19465
+ justify-content: center;
19466
+ }
19467
+ .mld-wizard__step-connector {
19468
+ flex: 1;
19469
+ height: 2px;
19470
+ background-color: var(--border-color);
19471
+ margin-top: 1rem;
19472
+ transition: background-color 0.2s ease;
18669
19473
  }
18670
- .mld-timeline__card--skipped {
18671
- background-color: var(--bg-tertiary);
18672
- border-color: var(--border-color);
19474
+ .mld-wizard__step-connector--completed {
19475
+ background-color: var(--mld-success);
18673
19476
  }
18674
-
18675
- /* Header */
18676
- .mld-timeline__header {
19477
+ .mld-wizard__step-indicator {
18677
19478
  display: flex;
19479
+ flex-direction: column;
18678
19480
  align-items: center;
18679
- }
18680
- .mld-timeline__header--sm {
18681
19481
  gap: 0.5rem;
19482
+ cursor: pointer;
19483
+ min-width: 4rem;
18682
19484
  }
18683
- .mld-timeline__header--md {
18684
- gap: 0.75rem;
18685
- }
18686
- .mld-timeline__header--lg {
18687
- gap: 1rem;
19485
+ .mld-wizard__step-indicator--disabled {
19486
+ cursor: not-allowed;
19487
+ opacity: 0.5;
18688
19488
  }
18689
-
18690
- /* Icon */
18691
- .mld-timeline__icon {
18692
- flex-shrink: 0;
19489
+ .mld-wizard__step-dot {
19490
+ width: 2rem;
19491
+ height: 2rem;
18693
19492
  border-radius: 9999px;
18694
19493
  display: flex;
18695
19494
  align-items: center;
18696
19495
  justify-content: center;
19496
+ font-size: 0.75rem;
19497
+ font-weight: 600;
19498
+ border: 2px solid var(--border-color);
19499
+ background-color: var(--bg-secondary);
19500
+ color: var(--text-muted);
19501
+ transition: all 0.2s ease;
18697
19502
  }
18698
- .mld-timeline__icon--sm {
19503
+
19504
+ /* Size variants for dot */
19505
+ .mld-wizard--sm .mld-wizard__step-dot {
18699
19506
  width: 1.5rem;
18700
19507
  height: 1.5rem;
19508
+ font-size: 0.625rem;
18701
19509
  }
18702
- .mld-timeline__icon--md {
18703
- width: 2rem;
18704
- height: 2rem;
18705
- }
18706
- .mld-timeline__icon--lg {
19510
+ .mld-wizard--lg .mld-wizard__step-dot {
18707
19511
  width: 2.5rem;
18708
19512
  height: 2.5rem;
19513
+ font-size: 0.875rem;
18709
19514
  }
18710
- .mld-timeline__icon svg {
18711
- stroke: currentColor;
18712
- }
18713
- .mld-timeline__icon--sm svg {
18714
- width: 0.75rem;
18715
- height: 0.75rem;
18716
- }
18717
- .mld-timeline__icon--md svg {
18718
- width: 1rem;
18719
- height: 1rem;
19515
+ .mld-wizard__step-indicator--active .mld-wizard__step-dot {
19516
+ border-color: var(--color-primary);
19517
+ background-color: var(--color-primary);
19518
+ color: white;
18720
19519
  }
18721
- .mld-timeline__icon--lg svg {
18722
- width: 1.25rem;
18723
- height: 1.25rem;
19520
+ .mld-wizard__step-indicator--completed .mld-wizard__step-dot {
19521
+ border-color: var(--mld-success);
19522
+ background-color: var(--mld-success);
19523
+ color: white;
18724
19524
  }
18725
-
18726
- /* Status text colors */
18727
- .mld-timeline__icon--pending {
19525
+ .mld-wizard__step-label {
19526
+ font-size: 0.75rem;
18728
19527
  color: var(--text-muted);
19528
+ text-align: center;
19529
+ white-space: nowrap;
18729
19530
  }
18730
- .mld-timeline__icon--in-progress {
18731
- color: #3b82f6;
18732
- }
18733
- .mld-timeline__icon--completed {
18734
- color: #10b981;
18735
- }
18736
- .mld-timeline__icon--failed {
18737
- color: #ef4444;
19531
+ .mld-wizard__step-indicator--active .mld-wizard__step-label {
19532
+ color: var(--text-primary);
19533
+ font-weight: 500;
18738
19534
  }
18739
- .mld-timeline__icon--skipped {
18740
- color: var(--text-muted);
19535
+ .mld-wizard__step-indicator--completed .mld-wizard__step-label {
19536
+ color: var(--text-secondary);
18741
19537
  }
18742
19538
 
18743
- /* Title and meta */
18744
- .mld-timeline__content {
19539
+ /* Body */
19540
+ .mld-wizard__body {
18745
19541
  flex: 1;
18746
- min-width: 0;
19542
+ min-height: 0;
18747
19543
  }
18748
- .mld-timeline__title-row {
19544
+
19545
+ /* Navigation */
19546
+ .mld-wizard__navigation {
18749
19547
  display: flex;
18750
19548
  align-items: center;
18751
19549
  gap: 0.5rem;
19550
+ padding-top: 1rem;
19551
+ border-top: 1px solid var(--border-color);
18752
19552
  }
18753
- .mld-timeline__title {
19553
+ .mld-wizard__nav-btn {
19554
+ padding: 0.5rem 1rem;
19555
+ border-radius: var(--radius-md);
19556
+ font-size: 0.875rem;
18754
19557
  font-weight: 500;
19558
+ cursor: pointer;
19559
+ transition: background-color 0.15s ease, color 0.15s ease;
19560
+ border: none;
19561
+ }
19562
+ .mld-wizard__nav-btn:disabled {
19563
+ opacity: 0.5;
19564
+ cursor: not-allowed;
19565
+ }
19566
+ .mld-wizard__nav-btn--cancel {
19567
+ background: transparent;
19568
+ color: var(--text-muted);
19569
+ }
19570
+ .mld-wizard__nav-btn--cancel:hover:not(:disabled) {
18755
19571
  color: var(--text-primary);
18756
- overflow: hidden;
18757
- text-overflow: ellipsis;
18758
- white-space: nowrap;
18759
19572
  }
18760
- .mld-timeline__title--sm {
18761
- font-size: 0.75rem;
19573
+ .mld-wizard__nav-btn--back {
19574
+ background-color: var(--bg-tertiary);
19575
+ color: var(--text-primary);
18762
19576
  }
18763
- .mld-timeline__title--md {
18764
- font-size: 0.875rem;
19577
+ .mld-wizard__nav-btn--back:hover:not(:disabled) {
19578
+ background-color: var(--bg-hover);
18765
19579
  }
18766
- .mld-timeline__title--lg {
18767
- font-size: 1rem;
19580
+ .mld-wizard__nav-btn--next {
19581
+ background-color: var(--color-primary);
19582
+ color: white;
18768
19583
  }
18769
- .mld-timeline__duration {
18770
- color: var(--text-muted);
18771
- font-size: 0.75rem;
19584
+ .mld-wizard__nav-btn--next:hover:not(:disabled) {
19585
+ background-color: var(--color-primary-hover);
18772
19586
  }
18773
- .mld-timeline__duration--sm {
18774
- font-size: 0.625rem;
19587
+ .mld-wizard__nav-btn--finish {
19588
+ background-color: var(--mld-success);
19589
+ color: white;
18775
19590
  }
18776
- .mld-timeline__type {
18777
- color: var(--text-muted);
18778
- text-transform: capitalize;
19591
+ .mld-wizard__nav-btn--finish:hover:not(:disabled) {
19592
+ opacity: 0.9;
18779
19593
  }
18780
- .mld-timeline__type--sm {
19594
+
19595
+ /* Size variants for connector alignment */
19596
+ .mld-wizard--sm .mld-wizard__step-connector {
19597
+ margin-top: 0.75rem;
19598
+ }
19599
+ .mld-wizard--lg .mld-wizard__step-connector {
19600
+ margin-top: 1.25rem;
19601
+ }
19602
+ .mld-wizard--sm .mld-wizard__step-label {
18781
19603
  font-size: 0.625rem;
18782
19604
  }
18783
- .mld-timeline__type--md {
19605
+ .mld-wizard--sm .mld-wizard__nav-btn {
19606
+ padding: 0.375rem 0.75rem;
18784
19607
  font-size: 0.75rem;
18785
19608
  }
18786
- .mld-timeline__type--lg {
19609
+ .mld-wizard--lg .mld-wizard__nav-btn {
19610
+ padding: 0.625rem 1.25rem;
19611
+ font-size: 1rem;
19612
+ }
19613
+ /* AutoGroupModal - Smart grouping wizard */
19614
+ .mld-auto-group {
19615
+ min-height: 400px;
19616
+ }
19617
+
19618
+ /* --- Mode toggle --- */
19619
+ .mld-auto-group__mode-toggle {
19620
+ display: flex;
19621
+ gap: 0.5rem;
19622
+ margin-bottom: 1rem;
19623
+ }
19624
+
19625
+ /* --- Input step --- */
19626
+ .mld-auto-group__input-step {
19627
+ display: flex;
19628
+ flex-direction: column;
19629
+ }
19630
+ .mld-auto-group__paste {
19631
+ position: relative;
19632
+ }
19633
+ .mld-auto-group__textarea {
19634
+ width: 100%;
19635
+ font-family: 'Fira Code', monospace;
19636
+ font-size: 0.8125rem;
19637
+ line-height: 1.5;
19638
+ padding: 0.75rem;
19639
+ border: 1px solid var(--border-color);
19640
+ border-radius: var(--radius-md);
19641
+ background: var(--bg-secondary);
19642
+ color: var(--text-primary);
19643
+ resize: vertical;
19644
+ box-sizing: border-box;
19645
+ }
19646
+ .mld-auto-group__textarea:focus {
19647
+ outline: none;
19648
+ border-color: var(--color-primary);
19649
+ box-shadow: 0 0 0 2px var(--color-primary-soft);
19650
+ }
19651
+ .mld-auto-group__textarea::placeholder {
19652
+ color: var(--text-muted);
19653
+ }
19654
+ .mld-auto-group__sample-count {
19655
+ position: absolute;
19656
+ bottom: 0.5rem;
19657
+ right: 0.75rem;
18787
19658
  font-size: 0.75rem;
19659
+ color: var(--text-muted);
19660
+ background: var(--bg-secondary);
19661
+ padding: 0.125rem 0.5rem;
19662
+ border-radius: var(--radius-sm);
18788
19663
  }
18789
19664
 
18790
- /* Expand indicator */
18791
- .mld-timeline__expand-icon {
18792
- width: 1rem;
18793
- height: 1rem;
19665
+ /* --- CSV / Dropzone --- */
19666
+ .mld-auto-group__csv {
19667
+ display: flex;
19668
+ flex-direction: column;
19669
+ }
19670
+ .mld-auto-group__dropzone {
19671
+ position: relative;
19672
+ display: flex;
19673
+ flex-direction: column;
19674
+ align-items: center;
19675
+ justify-content: center;
19676
+ gap: 0.75rem;
19677
+ padding: 3rem 2rem;
19678
+ border: 2px dashed var(--border-color);
19679
+ border-radius: var(--radius-md);
19680
+ background: var(--bg-tertiary);
19681
+ cursor: pointer;
19682
+ transition: border-color 0.15s, background 0.15s;
19683
+ }
19684
+ .mld-auto-group__dropzone--dragover {
19685
+ border-color: var(--color-primary);
19686
+ background: var(--color-primary-soft);
19687
+ }
19688
+ .mld-auto-group__file-input {
19689
+ position: absolute;
19690
+ inset: 0;
19691
+ opacity: 0;
19692
+ cursor: pointer;
19693
+ }
19694
+ .mld-auto-group__upload-icon {
19695
+ width: 2.5rem;
19696
+ height: 2.5rem;
18794
19697
  color: var(--text-muted);
18795
- transition: transform 0.2s ease;
18796
19698
  }
18797
- .mld-timeline__expand-icon--expanded {
18798
- transform: rotate(180deg);
19699
+ .mld-auto-group__upload-text {
19700
+ font-size: 0.875rem;
19701
+ color: var(--text-secondary);
19702
+ margin: 0;
19703
+ }
19704
+ .mld-auto-group__upload-highlight {
19705
+ color: var(--color-primary);
19706
+ font-weight: 500;
19707
+ }
19708
+ .mld-auto-group__file-info {
19709
+ display: flex;
19710
+ align-items: center;
19711
+ gap: 0.5rem;
19712
+ padding: 0.75rem 1rem;
19713
+ background: var(--bg-tertiary);
19714
+ border-radius: var(--radius-md);
19715
+ border: 1px solid var(--border-color);
19716
+ }
19717
+ .mld-auto-group__file-icon {
19718
+ width: 1.25rem;
19719
+ height: 1.25rem;
19720
+ color: var(--text-muted);
19721
+ flex-shrink: 0;
19722
+ }
19723
+ .mld-auto-group__file-name {
19724
+ font-size: 0.875rem;
19725
+ font-weight: 500;
19726
+ color: var(--text-primary);
18799
19727
  }
18800
-
18801
- /* Remove button */
18802
- .mld-timeline__remove-btn {
18803
- padding: 0.25rem;
19728
+ .mld-auto-group__file-rows {
19729
+ font-size: 0.75rem;
18804
19730
  color: var(--text-muted);
18805
- background: transparent;
19731
+ margin-left: auto;
19732
+ }
19733
+ .mld-auto-group__file-clear {
19734
+ font-size: 0.75rem;
19735
+ color: var(--color-primary);
19736
+ background: none;
18806
19737
  border: none;
18807
- border-radius: 0.25rem;
18808
19738
  cursor: pointer;
18809
- transition: color 0.15s ease;
18810
- }
18811
- .mld-timeline__remove-btn:hover {
18812
- color: var(--mld-error);
19739
+ padding: 0;
19740
+ margin-left: 0.5rem;
18813
19741
  }
18814
- .mld-timeline__remove-btn svg {
18815
- width: 1rem;
18816
- height: 1rem;
19742
+ .mld-auto-group__file-clear:hover {
19743
+ text-decoration: underline;
18817
19744
  }
18818
19745
 
18819
- /* Expanded content */
18820
- .mld-timeline__expanded {
18821
- margin-top: 0.75rem;
18822
- padding-top: 0.75rem;
18823
- border-top: 1px solid rgba(var(--border-color-rgb, 0, 0, 0), 0.5);
19746
+ /* --- Outlier step --- */
19747
+ .mld-auto-group__outlier-step {
19748
+ display: flex;
19749
+ flex-direction: column;
19750
+ gap: 0.75rem;
18824
19751
  }
18825
- .mld-timeline__description {
18826
- color: var(--text-secondary);
18827
- margin-top: 0 !important;
18828
- margin-bottom: 0.5rem !important;
18829
- padding: 0 !important;
19752
+ .mld-auto-group__outlier-banner {
19753
+ padding: 0.75rem 1rem;
19754
+ background: var(--mld-warning-bg);
19755
+ border: 1px solid rgba(245, 158, 11, 0.3);
19756
+ border-radius: var(--radius-md);
19757
+ font-size: 0.8125rem;
19758
+ color: var(--text-primary);
18830
19759
  }
18831
- .mld-timeline__description--sm {
18832
- font-size: 0.75rem;
19760
+ .mld-auto-group__outlier-banner code {
19761
+ font-family: 'Fira Code', monospace;
19762
+ background: var(--bg-tertiary);
19763
+ padding: 0.125rem 0.375rem;
19764
+ border-radius: var(--radius-sm);
19765
+ font-size: 0.8125rem;
18833
19766
  }
18834
- .mld-timeline__description--md {
18835
- font-size: 0.875rem;
19767
+ .mld-auto-group__outlier-batch {
19768
+ display: flex;
19769
+ gap: 0.5rem;
18836
19770
  }
18837
- .mld-timeline__parameters {
19771
+ .mld-auto-group__outlier-list {
18838
19772
  display: flex;
18839
19773
  flex-direction: column;
18840
- gap: 0.25rem;
19774
+ gap: 0.5rem;
19775
+ max-height: 300px;
19776
+ overflow-y: auto;
18841
19777
  }
18842
- .mld-timeline__param {
19778
+ .mld-auto-group__outlier-item {
18843
19779
  display: flex;
19780
+ align-items: center;
18844
19781
  justify-content: space-between;
19782
+ padding: 0.5rem 0.75rem;
19783
+ background: var(--bg-secondary);
19784
+ border: 1px solid var(--border-color);
19785
+ border-radius: var(--radius);
18845
19786
  }
18846
- .mld-timeline__param--sm {
18847
- font-size: 0.625rem;
19787
+ .mld-auto-group__outlier-info {
19788
+ display: flex;
19789
+ align-items: center;
19790
+ gap: 0.5rem;
19791
+ min-width: 0;
18848
19792
  }
18849
- .mld-timeline__param--md {
18850
- font-size: 0.75rem;
19793
+ .mld-auto-group__outlier-name {
19794
+ font-family: 'Fira Code', monospace;
19795
+ font-size: 0.8125rem;
19796
+ color: var(--text-primary);
19797
+ overflow: hidden;
19798
+ text-overflow: ellipsis;
19799
+ white-space: nowrap;
18851
19800
  }
18852
- .mld-timeline__param-key {
19801
+ .mld-auto-group__outlier-badge {
19802
+ font-size: 0.6875rem;
19803
+ padding: 0.125rem 0.375rem;
19804
+ border-radius: var(--radius-sm);
19805
+ background: var(--bg-tertiary);
18853
19806
  color: var(--text-muted);
19807
+ white-space: nowrap;
19808
+ flex-shrink: 0;
18854
19809
  }
18855
- .mld-timeline__param-value {
18856
- color: var(--text-primary);
18857
- font-weight: 500;
18858
- }
18859
-
18860
- /* Status controls */
18861
- .mld-timeline__status-controls {
18862
- margin-top: 0.75rem;
19810
+ .mld-auto-group__outlier-actions {
18863
19811
  display: flex;
18864
- flex-wrap: wrap;
18865
19812
  gap: 0.25rem;
19813
+ flex-shrink: 0;
19814
+ margin-left: 0.75rem;
18866
19815
  }
18867
- .mld-timeline__status-btn {
18868
- padding: 0.125rem 0.5rem;
18869
- border-radius: 0.25rem;
18870
- font-size: 0.75rem;
18871
- background: transparent;
18872
- border: none;
19816
+ .mld-auto-group__action-btn {
19817
+ font-size: 0.6875rem;
19818
+ padding: 0.25rem 0.5rem;
19819
+ border: 1px solid var(--border-color);
19820
+ border-radius: var(--radius-sm);
19821
+ background: var(--bg-secondary);
19822
+ color: var(--text-secondary);
18873
19823
  cursor: pointer;
18874
- transition: background-color 0.15s ease, color 0.15s ease;
18875
- color: var(--text-muted);
19824
+ transition: all 0.1s;
18876
19825
  }
18877
- .mld-timeline__status-btn:hover {
18878
- background-color: var(--bg-tertiary);
19826
+ .mld-auto-group__action-btn:hover {
19827
+ background: var(--bg-hover);
18879
19828
  }
18880
- .mld-timeline__status-btn--active {
19829
+ .mld-auto-group__action-btn--active {
19830
+ background: var(--color-primary-soft);
19831
+ border-color: var(--color-primary);
19832
+ color: var(--color-primary);
18881
19833
  font-weight: 500;
18882
19834
  }
18883
- .mld-timeline__status-btn--pending.mld-timeline__status-btn--active {
18884
- background-color: var(--bg-tertiary);
18885
- color: var(--text-secondary);
19835
+ .mld-auto-group__action-btn--active.mld-auto-group__action-btn--exclude {
19836
+ background: var(--mld-error-bg);
19837
+ border-color: var(--mld-error);
19838
+ color: var(--mld-error);
18886
19839
  }
18887
- .mld-timeline__status-btn--in-progress.mld-timeline__status-btn--active {
18888
- background-color: rgba(59, 130, 246, 0.1);
18889
- color: #3b82f6;
19840
+ .mld-auto-group__action-btn--active.mld-auto-group__action-btn--qc {
19841
+ background: rgba(107, 114, 128, 0.12);
19842
+ border-color: #6B7280;
19843
+ color: #6B7280;
18890
19844
  }
18891
- .mld-timeline__status-btn--completed.mld-timeline__status-btn--active {
18892
- background-color: rgba(16, 185, 129, 0.1);
18893
- color: #10b981;
19845
+
19846
+ /* --- Field step --- */
19847
+ .mld-auto-group__field-step {
19848
+ display: flex;
19849
+ flex-direction: column;
19850
+ gap: 1rem;
18894
19851
  }
18895
- .mld-timeline__status-btn--failed.mld-timeline__status-btn--active {
18896
- background-color: rgba(239, 68, 68, 0.1);
18897
- color: #ef4444;
19852
+ .mld-auto-group__field-grid {
19853
+ display: grid;
19854
+ grid-template-columns: repeat(2, 1fr);
19855
+ gap: 0.75rem;
18898
19856
  }
18899
- .mld-timeline__status-btn--skipped.mld-timeline__status-btn--active {
18900
- background-color: var(--bg-tertiary);
18901
- color: var(--text-muted);
19857
+ @media (max-width: 600px) {
19858
+ .mld-auto-group__field-grid {
19859
+ grid-template-columns: 1fr;
18902
19860
  }
18903
-
18904
- /* Add step button (inline) */
18905
- .mld-timeline__add-inline {
18906
- position: absolute;
18907
- left: 1rem;
18908
- bottom: -0.5rem;
18909
- transform: translateX(-50%);
18910
- width: 1rem;
18911
- height: 1rem;
18912
- background-color: var(--bg-primary);
19861
+ }
19862
+ .mld-auto-group__field-card {
19863
+ padding: 0.75rem;
18913
19864
  border: 1px solid var(--border-color);
18914
- border-radius: 9999px;
19865
+ border-radius: var(--radius-md);
19866
+ background: var(--bg-secondary);
19867
+ transition: border-color 0.15s, box-shadow 0.15s;
19868
+ }
19869
+ .mld-auto-group__field-card--enabled {
19870
+ border-color: var(--color-primary);
19871
+ box-shadow: 0 0 0 1px var(--color-primary-soft);
19872
+ }
19873
+ .mld-auto-group__field-header {
18915
19874
  display: flex;
18916
19875
  align-items: center;
18917
- justify-content: center;
18918
- color: var(--text-muted);
19876
+ justify-content: space-between;
19877
+ margin-bottom: 0.5rem;
19878
+ }
19879
+ .mld-auto-group__field-toggle {
19880
+ display: flex;
19881
+ align-items: center;
19882
+ gap: 0.375rem;
18919
19883
  cursor: pointer;
18920
- opacity: 0;
18921
- transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease;
18922
- z-index: 10;
19884
+ font-size: 0.8125rem;
19885
+ color: var(--text-secondary);
18923
19886
  }
18924
- .mld-timeline__step:hover .mld-timeline__add-inline,
18925
- .mld-timeline__add-inline:focus {
18926
- opacity: 1;
19887
+ .mld-auto-group__field-toggle input {
19888
+ accent-color: var(--color-primary);
18927
19889
  }
18928
- .mld-timeline__add-inline:hover {
18929
- color: var(--color-primary);
18930
- border-color: var(--color-primary);
19890
+ .mld-auto-group__field-toggle-label {
19891
+ user-select: none;
18931
19892
  }
18932
- .mld-timeline__add-inline svg {
18933
- width: 0.75rem;
18934
- height: 0.75rem;
19893
+ .mld-auto-group__field-cardinality {
19894
+ font-size: 0.6875rem;
19895
+ color: var(--text-muted);
18935
19896
  }
18936
-
18937
- /* Spacer */
18938
- .mld-timeline__spacer--vertical {
18939
- height: 1rem;
19897
+ .mld-auto-group__field-name-input {
19898
+ margin-bottom: 0.5rem;
18940
19899
  }
18941
- .mld-timeline__spacer--horizontal {
18942
- width: 2rem;
19900
+ .mld-auto-group__field-values {
19901
+ display: flex;
19902
+ flex-wrap: wrap;
19903
+ gap: 0.25rem;
19904
+ }
19905
+ .mld-auto-group__field-value {
19906
+ font-size: 0.6875rem;
19907
+ padding: 0.125rem 0.375rem;
19908
+ border-radius: var(--radius-sm);
19909
+ background: var(--bg-tertiary);
19910
+ color: var(--text-secondary);
19911
+ font-family: 'Fira Code', monospace;
19912
+ }
19913
+ .mld-auto-group__field-more {
19914
+ font-size: 0.6875rem;
19915
+ padding: 0.125rem 0.375rem;
19916
+ color: var(--text-muted);
19917
+ font-style: italic;
19918
+ }
19919
+ .mld-auto-group__field-summary {
19920
+ font-size: 0.8125rem;
19921
+ color: var(--text-secondary);
19922
+ padding: 0.5rem 0.75rem;
19923
+ background: var(--bg-tertiary);
19924
+ border-radius: var(--radius);
19925
+ }
19926
+ .mld-auto-group__field-summary strong {
19927
+ color: var(--text-primary);
19928
+ }
19929
+ .mld-auto-group__field-warning {
19930
+ font-size: 0.8125rem;
19931
+ color: var(--mld-warning);
19932
+ padding: 0.5rem 0.75rem;
19933
+ background: var(--mld-warning-bg);
19934
+ border-radius: var(--radius);
18943
19935
  }
18944
19936
 
18945
- /* Empty state */
18946
- .mld-timeline__empty {
19937
+ /* --- Preview step --- */
19938
+ .mld-auto-group__preview-step {
18947
19939
  display: flex;
18948
- align-items: center;
18949
- justify-content: center;
18950
- padding: 2rem;
18951
- border: 2px dashed var(--border-color);
18952
- border-radius: 0.5rem;
19940
+ flex-direction: column;
19941
+ gap: 1rem;
18953
19942
  }
18954
- .mld-timeline__empty-content {
18955
- text-align: center;
19943
+ .mld-auto-group__preview-summary {
19944
+ display: flex;
19945
+ gap: 1rem;
19946
+ padding: 0.75rem 1rem;
19947
+ background: var(--bg-tertiary);
19948
+ border-radius: var(--radius-md);
18956
19949
  }
18957
- .mld-timeline__empty-text {
18958
- color: var(--text-muted);
18959
- margin-top: 0 !important;
18960
- margin-bottom: 0.5rem !important;
18961
- padding: 0 !important;
19950
+ .mld-auto-group__preview-stat {
19951
+ font-size: 0.8125rem;
19952
+ color: var(--text-secondary);
18962
19953
  }
18963
- .mld-timeline__empty-btn {
18964
- padding: 0.375rem 0.75rem;
18965
- font-size: 0.875rem;
18966
- background-color: var(--color-primary);
18967
- color: white;
18968
- border: none;
18969
- border-radius: 0.5rem;
18970
- cursor: pointer;
18971
- transition: background-color 0.15s ease;
19954
+ .mld-auto-group__preview-stat strong {
19955
+ color: var(--text-primary);
18972
19956
  }
18973
- .mld-timeline__empty-btn:hover {
18974
- opacity: 0.9;
19957
+ .mld-auto-group__preview-stat--excluded strong {
19958
+ color: var(--mld-error);
18975
19959
  }
18976
-
18977
- /* Add step button (end) */
18978
- .mld-timeline__add-end {
19960
+ .mld-auto-group__preview-groups {
19961
+ display: flex;
19962
+ flex-direction: column;
19963
+ gap: 0.375rem;
19964
+ max-height: 320px;
19965
+ overflow-y: auto;
19966
+ }
19967
+ .mld-auto-group__preview-group {
19968
+ border: 1px solid var(--border-color);
19969
+ border-radius: var(--radius);
19970
+ overflow: hidden;
19971
+ }
19972
+ .mld-auto-group__preview-group[open] {
19973
+ background: var(--bg-secondary);
19974
+ }
19975
+ .mld-auto-group__preview-group-header {
18979
19976
  display: flex;
18980
19977
  align-items: center;
18981
- justify-content: center;
18982
19978
  gap: 0.5rem;
18983
- border: 2px dashed var(--border-color);
18984
- border-radius: 0.5rem;
18985
- color: var(--text-muted);
18986
- background: transparent;
19979
+ padding: 0.5rem 0.75rem;
18987
19980
  cursor: pointer;
18988
- transition: color 0.15s ease, border-color 0.15s ease;
18989
- }
18990
- .mld-timeline__add-end--sm {
18991
- padding: 0.5rem;
18992
- }
18993
- .mld-timeline__add-end--md {
18994
- padding: 0.75rem;
19981
+ font-size: 0.8125rem;
19982
+ user-select: none;
18995
19983
  }
18996
- .mld-timeline__add-end--lg {
18997
- padding: 1rem;
19984
+ .mld-auto-group__preview-group-header:hover {
19985
+ background: var(--bg-hover);
18998
19986
  }
18999
- .mld-timeline--horizontal .mld-timeline__add-end {
19000
- min-width: 120px;
19987
+ .mld-auto-group__preview-dot {
19988
+ width: 0.625rem;
19989
+ height: 0.625rem;
19990
+ border-radius: 50%;
19001
19991
  flex-shrink: 0;
19002
19992
  }
19003
- .mld-timeline--vertical .mld-timeline__add-end {
19004
- width: 100%;
19005
- margin-top: 1rem;
19993
+ .mld-auto-group__preview-group-name {
19994
+ font-weight: 500;
19995
+ color: var(--text-primary);
19006
19996
  }
19007
- .mld-timeline__add-end:hover {
19008
- color: var(--color-primary);
19009
- border-color: var(--color-primary);
19997
+ .mld-auto-group__preview-group-count {
19998
+ font-size: 0.6875rem;
19999
+ font-weight: 500;
20000
+ padding: 0.0625rem 0.375rem;
20001
+ border-radius: var(--radius-sm);
20002
+ margin-left: auto;
19010
20003
  }
19011
- .mld-timeline__add-end svg {
19012
- width: 1rem;
19013
- height: 1rem;
20004
+ .mld-auto-group__preview-samples {
20005
+ display: flex;
20006
+ flex-wrap: wrap;
20007
+ gap: 0.25rem;
20008
+ padding: 0.5rem 0.75rem;
20009
+ border-top: 1px solid var(--border-light);
19014
20010
  }
19015
- .mld-timeline__add-end-text--sm {
20011
+ .mld-auto-group__preview-sample {
19016
20012
  font-size: 0.75rem;
20013
+ font-family: 'Fira Code', monospace;
20014
+ padding: 0.125rem 0.375rem;
20015
+ border-radius: var(--radius-sm);
20016
+ background: var(--bg-tertiary);
20017
+ color: var(--text-secondary);
19017
20018
  }
19018
- .mld-timeline__add-end-text--md {
19019
- font-size: 0.875rem;
20019
+ .mld-auto-group__preview-sample--excluded {
20020
+ opacity: 0.5;
20021
+ text-decoration: line-through;
19020
20022
  }
19021
- .mld-timeline__add-end-text--lg {
19022
- font-size: 1rem;
20023
+
20024
+ /* --- Excluded section --- */
20025
+ .mld-auto-group__preview-excluded {
20026
+ border-top: 1px solid var(--border-color);
20027
+ padding-top: 0.75rem;
19023
20028
  }
19024
- /* GroupingModal Component Styles */
19025
- .mld-grouping-modal {
20029
+ .mld-auto-group__preview-excluded-title {
20030
+ font-size: 0.75rem;
20031
+ font-weight: 500;
20032
+ color: var(--text-muted);
20033
+ text-transform: uppercase;
20034
+ letter-spacing: 0.05em;
20035
+ margin-bottom: 0.5rem;
20036
+ }
20037
+ .mld-auto-group__preview-excluded-list {
19026
20038
  display: flex;
19027
- flex-direction: column;
19028
- gap: 1rem;
20039
+ flex-wrap: wrap;
20040
+ gap: 0.25rem;
19029
20041
  }
19030
20042
 
19031
- /* Dropzone */
19032
- .mld-grouping-modal__dropzone {
19033
- position: relative;
20043
+ /* --- Navigation --- */
20044
+ .mld-auto-group__nav {
19034
20045
  display: flex;
19035
- flex-direction: column;
19036
20046
  align-items: center;
19037
- justify-content: center;
19038
- padding: 2rem;
19039
- border: 2px dashed var(--border-color);
19040
- border-radius: var(--mld-radius);
19041
- background-color: var(--bg-secondary);
19042
- cursor: pointer;
19043
- transition: border-color var(--mld-transition), background-color var(--mld-transition);
20047
+ gap: 0.5rem;
19044
20048
  }
19045
- .mld-grouping-modal__dropzone:hover,
19046
- .mld-grouping-modal__dropzone--dragover {
19047
- border-color: var(--color-primary);
19048
- background-color: var(--color-primary-soft);
20049
+ /* SampleSelector Component Styles - RFA Design */
20050
+ .mld-sample-selector {
20051
+ display: flex;
20052
+ flex-direction: column;
20053
+ gap: 0.75rem;
20054
+ height: 100%;
20055
+ /* No padding/background/border - let parent container provide styling */
19049
20056
  }
19050
- .mld-grouping-modal__file-input {
19051
- position: absolute;
19052
- inset: 0;
19053
- opacity: 0;
20057
+
20058
+ /* Select All Row */
20059
+ .mld-sample-selector__select-all {
20060
+ display: flex;
20061
+ align-items: center;
20062
+ gap: 0.75rem;
20063
+ padding: 0.625rem 0.75rem;
20064
+ border-radius: 0.5rem;
20065
+ background-color: var(--bg-tertiary);
19054
20066
  cursor: pointer;
20067
+ transition: background-color var(--mld-transition);
19055
20068
  }
19056
- .mld-grouping-modal__upload-icon {
19057
- width: 3rem;
19058
- height: 3rem;
19059
- color: var(--text-muted);
19060
- margin-bottom: 0.75rem;
20069
+ .mld-sample-selector__select-all:hover {
20070
+ background-color: var(--bg-hover);
19061
20071
  }
19062
- .mld-grouping-modal__upload-text {
20072
+ .mld-sample-selector__select-all-label {
19063
20073
  font-size: 0.875rem;
19064
- color: var(--text-primary);
19065
- margin-top: 0 !important;
19066
- margin-bottom: 0 !important;
19067
- padding: 0 !important;
19068
- }
19069
- .mld-grouping-modal__upload-highlight {
19070
- color: var(--color-primary);
19071
20074
  font-weight: 500;
20075
+ color: var(--text-primary);
19072
20076
  }
19073
- .mld-grouping-modal__upload-hint {
20077
+ .mld-sample-selector__select-all-count {
20078
+ margin-left: auto;
19074
20079
  font-size: 0.75rem;
19075
20080
  color: var(--text-muted);
19076
- margin-top: 0.25rem !important;
19077
- margin-bottom: 0 !important;
19078
- padding: 0 !important;
20081
+ font-variant-numeric: tabular-nums;
19079
20082
  }
19080
20083
 
19081
- /* Error */
19082
- .mld-grouping-modal__error {
19083
- padding: 0.75rem;
19084
- border-radius: var(--mld-radius-sm);
19085
- background-color: var(--mld-error-soft);
19086
- color: var(--mld-error);
19087
- font-size: 0.875rem;
20084
+ /* Checkboxes */
20085
+ .mld-sample-selector__checkbox {
20086
+ width: 1.25rem;
20087
+ height: 1.25rem;
20088
+ border-radius: 0.25rem;
20089
+ accent-color: var(--color-primary);
20090
+ cursor: pointer;
20091
+ flex-shrink: 0;
20092
+ }
20093
+ .mld-sample-selector__checkbox--small {
20094
+ width: 0.875rem;
20095
+ height: 0.875rem;
20096
+ }
20097
+ .mld-sample-selector__checkbox--tiny {
20098
+ width: 0.75rem;
20099
+ height: 0.75rem;
19088
20100
  }
19089
20101
 
19090
- /* File info */
19091
- .mld-grouping-modal__file-info {
20102
+ /* Indeterminate checkbox styling */
20103
+ .mld-sample-selector__checkbox:indeterminate {
20104
+ background-color: currentColor;
20105
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
20106
+ background-size: 100% 100%;
20107
+ background-position: center;
20108
+ border-color: transparent;
20109
+ }
20110
+
20111
+ /* Action Buttons Row */
20112
+ .mld-sample-selector__actions {
20113
+ position: relative;
20114
+ }
20115
+ .mld-sample-selector__actions-row {
19092
20116
  display: flex;
19093
20117
  align-items: center;
19094
20118
  gap: 0.5rem;
19095
- padding: 0.5rem 0.75rem;
19096
- background-color: var(--bg-tertiary);
19097
- border-radius: var(--mld-radius-sm);
20119
+ flex-wrap: nowrap; /* Ensure buttons stay on one line */
19098
20120
  }
19099
- .mld-grouping-modal__file-icon {
19100
- width: 1.25rem;
19101
- height: 1.25rem;
19102
- color: var(--text-muted);
20121
+
20122
+ /* BaseButton overrides for action buttons */
20123
+ .mld-sample-selector__action-btn {
20124
+ flex: 1 1 auto;
20125
+ display: flex;
20126
+ align-items: center;
20127
+ justify-content: center;
20128
+ gap: 0.5rem;
20129
+ min-width: 0; /* Allow buttons to shrink below content size */
20130
+ }
20131
+ .mld-sample-selector__action-btn--reset {
20132
+ flex: 0 0 auto; /* Don't grow or shrink */
20133
+ min-width: auto;
20134
+ padding: 0.5rem;
20135
+ }
20136
+ .mld-sample-selector__action-icon {
20137
+ width: 1rem;
20138
+ height: 1rem;
19103
20139
  flex-shrink: 0;
19104
20140
  }
19105
- .mld-grouping-modal__file-name {
19106
- flex: 1;
19107
- font-size: 0.875rem;
19108
- color: var(--text-primary);
19109
- font-weight: 500;
19110
- white-space: nowrap;
20141
+
20142
+ /* Level Popover */
20143
+ .mld-sample-selector__popover {
20144
+ position: absolute;
20145
+ left: 0;
20146
+ right: 0;
20147
+ top: 100%;
20148
+ margin-top: 0.5rem;
20149
+ background-color: var(--bg-primary);
20150
+ border: 1px solid var(--border-color);
20151
+ border-radius: var(--mld-radius-lg);
20152
+ box-shadow: var(--mld-shadow-lg);
19111
20153
  overflow: hidden;
19112
- text-overflow: ellipsis;
20154
+ z-index: 50;
19113
20155
  }
19114
- .mld-grouping-modal__file-clear {
19115
- font-size: 0.75rem;
19116
- color: var(--color-primary);
20156
+ .mld-sample-selector__popover-header {
20157
+ padding: 0.5rem 0.75rem;
20158
+ font-size: 0.6875rem;
20159
+ font-weight: 600;
20160
+ text-transform: uppercase;
20161
+ letter-spacing: 0.05em;
20162
+ color: var(--text-secondary);
20163
+ background-color: var(--bg-secondary);
20164
+ }
20165
+ .mld-sample-selector__popover-body {
20166
+ padding: 0.25rem 0;
20167
+ }
20168
+ .mld-sample-selector__level-btn {
20169
+ width: 100%;
20170
+ padding: 0.625rem 0.75rem;
20171
+ text-align: left;
19117
20172
  background: none;
19118
20173
  border: none;
19119
20174
  cursor: pointer;
19120
- padding: 0;
19121
- }
19122
- .mld-grouping-modal__file-clear:hover {
19123
- text-decoration: underline;
20175
+ transition: background-color var(--mld-transition);
19124
20176
  }
19125
-
19126
- /* Config section */
19127
- .mld-grouping-modal__config {
20177
+ .mld-sample-selector__level-btn:hover {
20178
+ background-color: var(--bg-hover);
20179
+ }
20180
+ .mld-sample-selector__level-info {
19128
20181
  display: flex;
19129
20182
  flex-direction: column;
19130
- gap: 1rem;
20183
+ gap: 0.125rem;
19131
20184
  }
19132
- .mld-grouping-modal__config-row {
20185
+ .mld-sample-selector__level-title {
19133
20186
  display: flex;
19134
- flex-direction: column;
19135
- gap: 0.375rem;
20187
+ align-items: center;
20188
+ gap: 0.5rem;
20189
+ font-size: 0.875rem;
20190
+ font-weight: 500;
20191
+ color: var(--text-primary);
19136
20192
  }
19137
- .mld-grouping-modal__label {
20193
+ .mld-sample-selector__level-badge {
20194
+ font-size: 0.6875rem;
20195
+ padding: 0.125rem 0.375rem;
20196
+ background-color: var(--color-primary);
20197
+ color: white;
20198
+ border-radius: 9999px;
20199
+ font-variant-numeric: tabular-nums;
20200
+ }
20201
+ .mld-sample-selector__level-desc {
19138
20202
  font-size: 0.75rem;
19139
- font-weight: 500;
19140
20203
  color: var(--text-muted);
19141
- text-transform: uppercase;
19142
- letter-spacing: 0.025em;
19143
20204
  }
19144
- .mld-grouping-modal__group-columns {
19145
- display: flex;
19146
- flex-direction: column;
19147
- gap: 0.5rem;
20205
+ .mld-sample-selector__level-example {
20206
+ margin-left: 0.25rem;
19148
20207
  }
19149
- .mld-grouping-modal__selected-columns {
20208
+ .mld-sample-selector__level-example code {
20209
+ font-family: ui-monospace, monospace;
20210
+ font-size: 0.6875rem;
20211
+ }
20212
+
20213
+ /* Grouped View */
20214
+ .mld-sample-selector__grouped {
19150
20215
  display: flex;
19151
20216
  flex-direction: column;
19152
- gap: 0.375rem;
20217
+ flex: 1;
20218
+ min-height: 0;
20219
+ gap: 0.5rem;
19153
20220
  }
19154
- .mld-grouping-modal__selected-column {
20221
+ .mld-sample-selector__groups-header {
19155
20222
  display: flex;
19156
20223
  align-items: center;
19157
20224
  justify-content: space-between;
19158
- padding: 0.5rem 0.75rem;
19159
- background-color: var(--bg-tertiary);
19160
- border-radius: var(--mld-radius-sm);
19161
- border: 1px solid var(--border-color);
19162
20225
  }
19163
- .mld-grouping-modal__column-name {
20226
+ .mld-sample-selector__groups-title {
19164
20227
  font-size: 0.875rem;
20228
+ font-weight: 500;
19165
20229
  color: var(--text-primary);
19166
20230
  }
19167
- .mld-grouping-modal__column-actions {
20231
+ .mld-sample-selector__groups-controls {
19168
20232
  display: flex;
19169
20233
  align-items: center;
19170
20234
  gap: 0.25rem;
19171
20235
  }
19172
- .mld-grouping-modal__column-btn {
20236
+ .mld-sample-selector__expand-btn {
19173
20237
  display: flex;
19174
20238
  align-items: center;
19175
20239
  justify-content: center;
19176
- width: 1.5rem;
19177
- height: 1.5rem;
19178
- padding: 0;
20240
+ padding: 0.25rem;
19179
20241
  background: none;
19180
20242
  border: none;
19181
20243
  border-radius: var(--mld-radius-sm);
19182
20244
  color: var(--text-muted);
19183
20245
  cursor: pointer;
19184
- transition: color var(--mld-transition), background-color var(--mld-transition);
20246
+ transition: background-color var(--mld-transition);
19185
20247
  }
19186
- .mld-grouping-modal__column-btn:hover:not(:disabled) {
19187
- color: var(--text-primary);
20248
+ .mld-sample-selector__expand-btn:hover {
19188
20249
  background-color: var(--bg-hover);
19189
20250
  }
19190
- .mld-grouping-modal__column-btn:disabled {
19191
- opacity: 0.3;
19192
- cursor: not-allowed;
19193
- }
19194
- .mld-grouping-modal__column-btn--remove:hover:not(:disabled) {
19195
- color: var(--mld-error);
19196
- background-color: var(--mld-error-soft);
20251
+ .mld-sample-selector__expand-icon {
20252
+ width: 0.875rem;
20253
+ height: 0.875rem;
19197
20254
  }
19198
20255
 
19199
- /* Match status */
19200
- .mld-grouping-modal__match-status {
19201
- display: flex;
19202
- gap: 1rem;
19203
- padding: 0.75rem;
19204
- background-color: var(--bg-tertiary);
19205
- border-radius: var(--mld-radius-sm);
20256
+ /* Shared scrollbar styles */
20257
+ .mld-sample-selector__tree,
20258
+ .mld-sample-selector__flat-list {
20259
+ scrollbar-width: thin;
20260
+ scrollbar-color: var(--border-color) transparent;
19206
20261
  }
19207
- .mld-grouping-modal__match-stat {
19208
- display: flex;
19209
- align-items: baseline;
19210
- gap: 0.375rem;
20262
+ .mld-sample-selector__tree::-webkit-scrollbar,
20263
+ .mld-sample-selector__flat-list::-webkit-scrollbar {
20264
+ width: 6px;
19211
20265
  }
19212
- .mld-grouping-modal__match-count {
19213
- font-size: 1rem;
19214
- font-weight: 600;
20266
+ .mld-sample-selector__tree::-webkit-scrollbar-track,
20267
+ .mld-sample-selector__flat-list::-webkit-scrollbar-track {
20268
+ background: transparent;
19215
20269
  }
19216
- .mld-grouping-modal__match-label {
19217
- font-size: 0.75rem;
19218
- color: var(--text-muted);
20270
+ .mld-sample-selector__tree::-webkit-scrollbar-thumb,
20271
+ .mld-sample-selector__flat-list::-webkit-scrollbar-thumb {
20272
+ background: var(--border-color);
20273
+ border-radius: 3px;
19219
20274
  }
19220
- .mld-grouping-modal__match-stat--matched .mld-grouping-modal__match-count {
19221
- color: var(--mld-success);
20275
+ .mld-sample-selector__tree::-webkit-scrollbar-thumb:hover,
20276
+ .mld-sample-selector__flat-list::-webkit-scrollbar-thumb:hover {
20277
+ background: var(--text-muted);
19222
20278
  }
19223
- .mld-grouping-modal__match-stat--unmatched .mld-grouping-modal__match-count {
19224
- color: var(--mld-warning);
20279
+
20280
+ /* Tree View */
20281
+ .mld-sample-selector__tree {
20282
+ flex: 1;
20283
+ min-height: 0;
20284
+ overflow-y: auto;
20285
+ padding-right: 0.25rem;
19225
20286
  }
19226
20287
 
19227
- /* Preview */
19228
- .mld-grouping-modal__preview {
20288
+ /* Major Group */
20289
+ .mld-sample-selector__major-group {
20290
+ margin-bottom: 0.25rem;
20291
+ }
20292
+ .mld-sample-selector__major-header {
19229
20293
  display: flex;
19230
- flex-direction: column;
20294
+ align-items: center;
19231
20295
  gap: 0.5rem;
19232
- }
19233
- .mld-grouping-modal__preview-title {
19234
- font-size: 0.75rem;
19235
- font-weight: 500;
19236
- color: var(--text-muted);
19237
- text-transform: uppercase;
19238
- letter-spacing: 0.025em;
19239
- margin-top: 0 !important;
19240
- margin-bottom: 0 !important;
19241
- padding: 0 !important;
19242
- }
19243
- .mld-grouping-modal__table-wrapper {
19244
- overflow-x: auto;
19245
- border: 1px solid var(--border-color);
20296
+ padding: 0.375rem 0.5rem;
19246
20297
  border-radius: var(--mld-radius-sm);
20298
+ cursor: pointer;
20299
+ transition: background-color var(--mld-transition);
19247
20300
  }
19248
- .mld-grouping-modal__table {
19249
- display: table !important;
19250
- overflow: visible !important;
19251
- width: 100%;
19252
- border-collapse: collapse;
19253
- border: none !important;
19254
- margin: 0 !important;
19255
- font-size: 0.8125rem;
19256
- }
19257
- .mld-grouping-modal__table thead {
19258
- display: table-header-group !important;
19259
- }
19260
- .mld-grouping-modal__table tbody {
19261
- display: table-row-group !important;
20301
+ .mld-sample-selector__major-header:hover {
20302
+ background-color: var(--bg-hover);
19262
20303
  }
19263
- .mld-grouping-modal__table tr {
19264
- border: none !important;
20304
+ .mld-sample-selector__major-header:hover .mld-sample-selector__delete-btn--hidden {
20305
+ opacity: 1;
19265
20306
  }
19266
- .mld-grouping-modal__th,
19267
- .mld-grouping-modal__td {
19268
- padding: 0.5rem 0.75rem;
19269
- text-align: left;
20307
+ .mld-sample-selector__major-name {
20308
+ flex: 1;
20309
+ font-size: 0.875rem;
20310
+ font-weight: 600;
20311
+ color: var(--text-primary);
19270
20312
  white-space: nowrap;
20313
+ overflow: hidden;
20314
+ text-overflow: ellipsis;
19271
20315
  }
19272
- .mld-grouping-modal__th {
19273
- font-weight: 500;
20316
+
20317
+ /* Chevron */
20318
+ .mld-sample-selector__chevron {
20319
+ width: 0.875rem;
20320
+ height: 0.875rem;
19274
20321
  color: var(--text-muted);
19275
- background-color: var(--bg-tertiary);
19276
- border-bottom: 1px solid var(--border-color);
20322
+ flex-shrink: 0;
20323
+ transition: transform 0.2s ease;
19277
20324
  }
19278
- .mld-grouping-modal__td {
19279
- color: var(--text-primary);
19280
- border-bottom: 1px solid var(--border-color);
20325
+ .mld-sample-selector__chevron--small {
20326
+ width: 0.75rem;
20327
+ height: 0.75rem;
19281
20328
  }
19282
- .mld-grouping-modal__table tbody tr:last-child .mld-grouping-modal__td {
19283
- border-bottom: none;
20329
+ .mld-sample-selector__chevron--open {
20330
+ transform: rotate(90deg);
19284
20331
  }
19285
- .mld-grouping-modal__th--sample,
19286
- .mld-grouping-modal__td--sample {
19287
- background-color: rgba(59, 130, 246, 0.08);
20332
+
20333
+ /* Color Dot */
20334
+ .mld-sample-selector__color-dot {
20335
+ width: 0.625rem;
20336
+ height: 0.625rem;
20337
+ border-radius: 50%;
20338
+ flex-shrink: 0;
20339
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
19288
20340
  }
19289
- .mld-grouping-modal__th--group,
19290
- .mld-grouping-modal__td--group {
19291
- background-color: rgba(168, 85, 247, 0.08);
20341
+ .mld-sample-selector__color-dot--large {
20342
+ width: 0.75rem;
20343
+ height: 0.75rem;
19292
20344
  }
19293
- .mld-grouping-modal__preview-note {
19294
- font-size: 0.75rem;
19295
- color: var(--text-muted);
19296
- margin-top: 0 !important;
19297
- margin-bottom: 0 !important;
19298
- padding: 0 !important;
20345
+ .mld-sample-selector__color-dot--clickable {
20346
+ cursor: pointer;
20347
+ transition: transform var(--mld-transition);
20348
+ border: none;
20349
+ padding: 0;
20350
+ background: none;
20351
+ }
20352
+ .mld-sample-selector__color-dot--clickable:hover {
20353
+ transform: scale(1.25);
19299
20354
  }
19300
20355
 
19301
- /* Footer */
19302
- .mld-grouping-modal__footer {
19303
- display: flex;
19304
- justify-content: flex-end;
19305
- gap: 0.75rem;
20356
+ /* Count Badge */
20357
+ .mld-sample-selector__count-badge {
20358
+ font-size: 0.625rem;
20359
+ font-weight: 500;
20360
+ padding: 0.125rem 0.375rem;
20361
+ border-radius: 9999px;
20362
+ font-variant-numeric: tabular-nums;
19306
20363
  }
19307
- /* SampleSelector Component Styles - RFA Design */
19308
- .mld-sample-selector {
19309
- display: flex;
19310
- flex-direction: column;
19311
- gap: 0.75rem;
19312
- height: 100%;
19313
- /* No padding/background/border - let parent container provide styling */
20364
+ .mld-sample-selector__count-badge--small {
20365
+ font-size: 0.5625rem;
20366
+ padding: 0.0625rem 0.3125rem;
19314
20367
  }
19315
20368
 
19316
- /* Select All Row */
19317
- .mld-sample-selector__select-all {
20369
+ /* Delete Button */
20370
+ .mld-sample-selector__delete-btn {
19318
20371
  display: flex;
19319
20372
  align-items: center;
19320
- gap: 0.75rem;
19321
- padding: 0.625rem 0.75rem;
19322
- border-radius: 0.5rem;
19323
- background-color: var(--bg-tertiary);
20373
+ justify-content: center;
20374
+ padding: 0.125rem;
20375
+ background: none;
20376
+ border: none;
20377
+ border-radius: var(--mld-radius-sm);
20378
+ color: #F87171;
19324
20379
  cursor: pointer;
19325
- transition: background-color var(--mld-transition);
19326
- }
19327
- .mld-sample-selector__select-all:hover {
19328
- background-color: var(--bg-hover);
19329
- }
19330
- .mld-sample-selector__select-all-label {
19331
- font-size: 0.875rem;
19332
- font-weight: 500;
19333
- color: var(--text-primary);
20380
+ transition: all var(--mld-transition);
19334
20381
  }
19335
- .mld-sample-selector__select-all-count {
19336
- margin-left: auto;
19337
- font-size: 0.75rem;
19338
- color: var(--text-muted);
19339
- font-variant-numeric: tabular-nums;
20382
+ .mld-sample-selector__delete-btn:hover {
20383
+ background-color: rgba(239, 68, 68, 0.2);
20384
+ color: #EF4444;
19340
20385
  }
19341
-
19342
- /* Checkboxes */
19343
- .mld-sample-selector__checkbox {
19344
- width: 1.25rem;
19345
- height: 1.25rem;
19346
- border-radius: 0.25rem;
19347
- accent-color: var(--color-primary);
19348
- cursor: pointer;
19349
- flex-shrink: 0;
20386
+ .mld-sample-selector__delete-btn--hidden {
20387
+ opacity: 0;
19350
20388
  }
19351
- .mld-sample-selector__checkbox--small {
20389
+ .mld-sample-selector__delete-btn svg {
19352
20390
  width: 0.875rem;
19353
20391
  height: 0.875rem;
19354
20392
  }
19355
- .mld-sample-selector__checkbox--tiny {
19356
- width: 0.75rem;
19357
- height: 0.75rem;
19358
- }
19359
20393
 
19360
- /* Indeterminate checkbox styling */
19361
- .mld-sample-selector__checkbox:indeterminate {
19362
- background-color: currentColor;
19363
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
19364
- background-size: 100% 100%;
19365
- background-position: center;
19366
- border-color: transparent;
20394
+ /* Sub Groups */
20395
+ .mld-sample-selector__sub-groups {
20396
+ margin-left: 1rem;
20397
+ padding-left: 0.75rem;
20398
+ border-left: 2px solid;
19367
20399
  }
19368
-
19369
- /* Action Buttons Row */
19370
- .mld-sample-selector__actions {
19371
- position: relative;
20400
+ .mld-sample-selector__sub-group {
20401
+ margin-bottom: 0.125rem;
20402
+ border-radius: var(--mld-radius);
20403
+ transition: background-color var(--mld-transition), box-shadow var(--mld-transition);
19372
20404
  }
19373
- .mld-sample-selector__actions-row {
20405
+ .mld-sample-selector__sub-group--drag-over {
20406
+ background-color: var(--color-primary-soft);
20407
+ box-shadow: inset 0 0 0 2px var(--color-primary);
20408
+ }
20409
+ .mld-sample-selector__sub-header {
19374
20410
  display: flex;
19375
20411
  align-items: center;
19376
20412
  gap: 0.5rem;
19377
- flex-wrap: nowrap; /* Ensure buttons stay on one line */
20413
+ padding: 0.25rem 0.5rem;
20414
+ border-radius: var(--mld-radius-sm);
20415
+ cursor: pointer;
20416
+ transition: background-color var(--mld-transition);
20417
+ }
20418
+ .mld-sample-selector__sub-header:hover {
20419
+ background-color: var(--bg-hover);
20420
+ }
20421
+ .mld-sample-selector__sub-header:hover .mld-sample-selector__delete-btn--hidden {
20422
+ opacity: 1;
20423
+ }
20424
+ .mld-sample-selector__sub-name {
20425
+ flex: 1;
20426
+ font-size: 0.875rem;
20427
+ font-weight: 500;
20428
+ color: var(--text-primary);
20429
+ white-space: nowrap;
20430
+ overflow: hidden;
20431
+ text-overflow: ellipsis;
19378
20432
  }
19379
20433
 
19380
- /* BaseButton overrides for action buttons */
19381
- .mld-sample-selector__action-btn {
19382
- flex: 1 1 auto;
20434
+ /* Samples */
20435
+ .mld-sample-selector__samples {
20436
+ margin-left: 1rem;
20437
+ padding-left: 0.75rem;
20438
+ border-left: 2px solid;
20439
+ }
20440
+ .mld-sample-selector__sample {
19383
20441
  display: flex;
19384
20442
  align-items: center;
19385
- justify-content: center;
19386
20443
  gap: 0.5rem;
19387
- min-width: 0; /* Allow buttons to shrink below content size */
20444
+ padding: 0.125rem 0.5rem;
20445
+ border-radius: var(--mld-radius-sm);
20446
+ transition: background-color var(--mld-transition), opacity var(--mld-transition);
20447
+ cursor: grab;
19388
20448
  }
19389
- .mld-sample-selector__action-btn--reset {
19390
- flex: 0 0 auto; /* Don't grow or shrink */
19391
- min-width: auto;
19392
- padding: 0.5rem;
20449
+ .mld-sample-selector__sample:hover {
20450
+ background-color: var(--bg-hover);
19393
20451
  }
19394
- .mld-sample-selector__action-icon {
19395
- width: 1rem;
19396
- height: 1rem;
19397
- flex-shrink: 0;
20452
+ .mld-sample-selector__sample:hover .mld-sample-selector__remove-btn {
20453
+ opacity: 1;
20454
+ }
20455
+ .mld-sample-selector__sample:hover .mld-sample-selector__drag-handle {
20456
+ opacity: 1;
20457
+ }
20458
+ .mld-sample-selector__sample--dragging {
20459
+ opacity: 0.5;
20460
+ cursor: grabbing;
19398
20461
  }
19399
20462
 
19400
- /* Level Popover */
19401
- .mld-sample-selector__popover {
19402
- position: absolute;
19403
- left: 0;
19404
- right: 0;
19405
- top: 100%;
19406
- margin-top: 0.5rem;
19407
- background-color: var(--bg-primary);
19408
- border: 1px solid var(--border-color);
19409
- border-radius: var(--mld-radius-lg);
19410
- box-shadow: var(--mld-shadow-lg);
19411
- overflow: hidden;
19412
- z-index: 50;
20463
+ /* Drag Handle */
20464
+ .mld-sample-selector__drag-handle {
20465
+ width: 0.875rem;
20466
+ height: 0.875rem;
20467
+ flex-shrink: 0;
20468
+ color: var(--text-muted);
20469
+ opacity: 0;
20470
+ transition: opacity var(--mld-transition);
20471
+ cursor: grab;
19413
20472
  }
19414
- .mld-sample-selector__popover-header {
19415
- padding: 0.5rem 0.75rem;
19416
- font-size: 0.6875rem;
19417
- font-weight: 600;
19418
- text-transform: uppercase;
19419
- letter-spacing: 0.05em;
20473
+ .mld-sample-selector__sample-name {
20474
+ flex: 1;
20475
+ font-size: 0.75rem;
19420
20476
  color: var(--text-secondary);
19421
- background-color: var(--bg-secondary);
19422
- }
19423
- .mld-sample-selector__popover-body {
19424
- padding: 0.25rem 0;
20477
+ white-space: nowrap;
20478
+ overflow: hidden;
20479
+ text-overflow: ellipsis;
19425
20480
  }
19426
- .mld-sample-selector__level-btn {
19427
- width: 100%;
19428
- padding: 0.625rem 0.75rem;
19429
- text-align: left;
20481
+ .mld-sample-selector__remove-btn {
20482
+ display: flex;
20483
+ align-items: center;
20484
+ justify-content: center;
20485
+ padding: 0.125rem;
19430
20486
  background: none;
19431
20487
  border: none;
20488
+ border-radius: var(--mld-radius-sm);
20489
+ color: #FB923C;
19432
20490
  cursor: pointer;
19433
- transition: background-color var(--mld-transition);
20491
+ opacity: 0;
20492
+ transition: all var(--mld-transition);
19434
20493
  }
19435
- .mld-sample-selector__level-btn:hover {
19436
- background-color: var(--bg-hover);
20494
+ .mld-sample-selector__remove-btn:hover {
20495
+ background-color: rgba(251, 146, 60, 0.2);
20496
+ color: #F97316;
19437
20497
  }
19438
- .mld-sample-selector__level-info {
19439
- display: flex;
19440
- flex-direction: column;
19441
- gap: 0.125rem;
20498
+ .mld-sample-selector__remove-btn svg {
20499
+ width: 0.625rem;
20500
+ height: 0.625rem;
19442
20501
  }
19443
- .mld-sample-selector__level-title {
20502
+
20503
+ /* Empty State */
20504
+ .mld-sample-selector__empty {
20505
+ text-align: center;
20506
+ padding: 1rem;
20507
+ font-size: 0.875rem;
20508
+ color: var(--text-muted);
20509
+ }
20510
+
20511
+ /* Ungrouped Section */
20512
+ .mld-sample-selector__ungrouped {
20513
+ margin-top: 0.75rem;
20514
+ padding-top: 0.75rem;
20515
+ border-top: 1px solid var(--border-color);
20516
+ }
20517
+ .mld-sample-selector__ungrouped-header {
19444
20518
  display: flex;
19445
20519
  align-items: center;
19446
20520
  gap: 0.5rem;
20521
+ padding: 0.375rem 0.5rem;
20522
+ border-radius: var(--mld-radius-sm);
20523
+ cursor: pointer;
20524
+ transition: background-color var(--mld-transition);
20525
+ }
20526
+ .mld-sample-selector__ungrouped-header:hover {
20527
+ background-color: var(--bg-hover);
20528
+ }
20529
+ .mld-sample-selector__ungrouped-label {
20530
+ flex: 1;
19447
20531
  font-size: 0.875rem;
19448
20532
  font-weight: 500;
19449
- color: var(--text-primary);
20533
+ color: var(--text-muted);
19450
20534
  }
19451
- .mld-sample-selector__level-badge {
19452
- font-size: 0.6875rem;
20535
+ .mld-sample-selector__ungrouped-count {
20536
+ font-size: 0.625rem;
19453
20537
  padding: 0.125rem 0.375rem;
19454
- background-color: var(--color-primary);
19455
- color: white;
20538
+ background-color: var(--bg-tertiary);
20539
+ color: var(--text-muted);
19456
20540
  border-radius: 9999px;
19457
20541
  font-variant-numeric: tabular-nums;
19458
20542
  }
19459
- .mld-sample-selector__level-desc {
19460
- font-size: 0.75rem;
19461
- color: var(--text-muted);
20543
+ .mld-sample-selector__ungrouped-list {
20544
+ margin-left: 1.25rem;
20545
+ padding-left: 0.75rem;
20546
+ border-left: 2px solid var(--border-color);
19462
20547
  }
19463
- .mld-sample-selector__level-example {
19464
- margin-left: 0.25rem;
20548
+
20549
+ /* New Group Input */
20550
+ .mld-sample-selector__new-group {
20551
+ display: flex;
20552
+ align-items: center;
20553
+ gap: 0.5rem;
20554
+ margin-top: 0.5rem;
20555
+ }
20556
+ .mld-sample-selector__new-group-input {
20557
+ flex: 1;
20558
+ min-width: 0;
20559
+ }
20560
+ .mld-sample-selector__new-group-btn {
20561
+ flex-shrink: 0;
19465
20562
  }
19466
- .mld-sample-selector__level-example code {
19467
- font-family: ui-monospace, monospace;
19468
- font-size: 0.6875rem;
20563
+
20564
+ /* Hidden color input */
20565
+ .mld-sample-selector__color-input {
20566
+ position: absolute;
20567
+ width: 1px;
20568
+ height: 1px;
20569
+ padding: 0;
20570
+ margin: -1px;
20571
+ overflow: hidden;
20572
+ clip: rect(0, 0, 0, 0);
20573
+ white-space: nowrap;
20574
+ border: 0;
19469
20575
  }
19470
20576
 
19471
- /* Grouped View */
19472
- .mld-sample-selector__grouped {
20577
+ /* Flat View */
20578
+ .mld-sample-selector__flat {
19473
20579
  display: flex;
19474
20580
  flex-direction: column;
19475
20581
  flex: 1;
19476
20582
  min-height: 0;
19477
20583
  gap: 0.5rem;
19478
20584
  }
19479
- .mld-sample-selector__groups-header {
19480
- display: flex;
19481
- align-items: center;
19482
- justify-content: space-between;
20585
+ .mld-sample-selector__search {
20586
+ position: relative;
19483
20587
  }
19484
- .mld-sample-selector__groups-title {
20588
+ .mld-sample-selector__search-icon {
20589
+ position: absolute;
20590
+ left: 0.75rem;
20591
+ top: 50%;
20592
+ transform: translateY(-50%);
20593
+ width: 1rem;
20594
+ height: 1rem;
20595
+ color: var(--text-muted);
20596
+ pointer-events: none;
20597
+ }
20598
+ .mld-sample-selector__search-input {
20599
+ width: 100%;
20600
+ padding: 0.5rem 0.75rem 0.5rem 2.25rem;
19485
20601
  font-size: 0.875rem;
19486
- font-weight: 500;
19487
20602
  color: var(--text-primary);
20603
+ background-color: var(--bg-tertiary);
20604
+ border: 1px solid var(--border-color);
20605
+ border-radius: 0.5rem;
20606
+ outline: none;
20607
+ transition: border-color var(--mld-transition);
19488
20608
  }
19489
- .mld-sample-selector__groups-controls {
19490
- display: flex;
19491
- align-items: center;
19492
- gap: 0.25rem;
20609
+ .mld-sample-selector__search-input:focus {
20610
+ border-color: var(--color-primary);
19493
20611
  }
19494
- .mld-sample-selector__expand-btn {
19495
- display: flex;
19496
- align-items: center;
19497
- justify-content: center;
19498
- padding: 0.25rem;
19499
- background: none;
19500
- border: none;
19501
- border-radius: var(--mld-radius-sm);
20612
+ .mld-sample-selector__search-input::placeholder {
19502
20613
  color: var(--text-muted);
19503
- cursor: pointer;
19504
- transition: background-color var(--mld-transition);
19505
- }
19506
- .mld-sample-selector__expand-btn:hover {
19507
- background-color: var(--bg-hover);
19508
- }
19509
- .mld-sample-selector__expand-icon {
19510
- width: 0.875rem;
19511
- height: 0.875rem;
19512
20614
  }
19513
-
19514
- /* Shared scrollbar styles */
19515
- .mld-sample-selector__tree,
19516
20615
  .mld-sample-selector__flat-list {
19517
- scrollbar-width: thin;
19518
- scrollbar-color: var(--border-color) transparent;
19519
- }
19520
- .mld-sample-selector__tree::-webkit-scrollbar,
19521
- .mld-sample-selector__flat-list::-webkit-scrollbar {
19522
- width: 6px;
19523
- }
19524
- .mld-sample-selector__tree::-webkit-scrollbar-track,
19525
- .mld-sample-selector__flat-list::-webkit-scrollbar-track {
19526
- background: transparent;
19527
- }
19528
- .mld-sample-selector__tree::-webkit-scrollbar-thumb,
19529
- .mld-sample-selector__flat-list::-webkit-scrollbar-thumb {
19530
- background: var(--border-color);
19531
- border-radius: 3px;
19532
- }
19533
- .mld-sample-selector__tree::-webkit-scrollbar-thumb:hover,
19534
- .mld-sample-selector__flat-list::-webkit-scrollbar-thumb:hover {
19535
- background: var(--text-muted);
19536
- }
19537
-
19538
- /* Tree View */
19539
- .mld-sample-selector__tree {
19540
20616
  flex: 1;
19541
20617
  min-height: 0;
19542
20618
  overflow-y: auto;
19543
20619
  padding-right: 0.25rem;
19544
20620
  }
19545
-
19546
- /* Major Group */
19547
- .mld-sample-selector__major-group {
19548
- margin-bottom: 0.25rem;
19549
- }
19550
- .mld-sample-selector__major-header {
20621
+ .mld-sample-selector__flat-item {
19551
20622
  display: flex;
19552
20623
  align-items: center;
19553
20624
  gap: 0.5rem;
19554
20625
  padding: 0.375rem 0.5rem;
19555
20626
  border-radius: var(--mld-radius-sm);
19556
- cursor: pointer;
19557
20627
  transition: background-color var(--mld-transition);
19558
20628
  }
19559
- .mld-sample-selector__major-header:hover {
20629
+ .mld-sample-selector__flat-item:hover {
19560
20630
  background-color: var(--bg-hover);
19561
20631
  }
19562
- .mld-sample-selector__major-header:hover .mld-sample-selector__delete-btn--hidden {
19563
- opacity: 1;
19564
- }
19565
- .mld-sample-selector__major-name {
20632
+ .mld-sample-selector__flat-name {
19566
20633
  flex: 1;
19567
20634
  font-size: 0.875rem;
19568
- font-weight: 600;
19569
20635
  color: var(--text-primary);
19570
20636
  white-space: nowrap;
19571
20637
  overflow: hidden;
19572
20638
  text-overflow: ellipsis;
19573
20639
  }
19574
20640
 
19575
- /* Chevron */
19576
- .mld-sample-selector__chevron {
19577
- width: 0.875rem;
19578
- height: 0.875rem;
19579
- color: var(--text-muted);
19580
- flex-shrink: 0;
19581
- transition: transform 0.2s ease;
19582
- }
19583
- .mld-sample-selector__chevron--small {
19584
- width: 0.75rem;
19585
- height: 0.75rem;
20641
+ /* Transitions */
20642
+ .mld-popover-enter-active {
20643
+ transition: all 0.15s ease-out;
19586
20644
  }
19587
- .mld-sample-selector__chevron--open {
19588
- transform: rotate(90deg);
20645
+ .mld-popover-leave-active {
20646
+ transition: all 0.1s ease-in;
19589
20647
  }
19590
-
19591
- /* Color Dot */
19592
- .mld-sample-selector__color-dot {
19593
- width: 0.625rem;
19594
- height: 0.625rem;
19595
- border-radius: 50%;
19596
- flex-shrink: 0;
19597
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
20648
+ .mld-popover-enter-from,
20649
+ .mld-popover-leave-to {
20650
+ opacity: 0;
20651
+ transform: translateY(-0.25rem);
19598
20652
  }
19599
- .mld-sample-selector__color-dot--large {
19600
- width: 0.75rem;
19601
- height: 0.75rem;
20653
+ .mld-collapse-enter-active {
20654
+ transition: all 0.2s ease-out;
20655
+ overflow: hidden;
19602
20656
  }
19603
- .mld-sample-selector__color-dot--clickable {
19604
- cursor: pointer;
19605
- transition: transform var(--mld-transition);
19606
- border: none;
19607
- padding: 0;
19608
- background: none;
20657
+ .mld-collapse-leave-active {
20658
+ transition: all 0.15s ease-in;
20659
+ overflow: hidden;
19609
20660
  }
19610
- .mld-sample-selector__color-dot--clickable:hover {
19611
- transform: scale(1.25);
20661
+ .mld-collapse-enter-from,
20662
+ .mld-collapse-leave-to {
20663
+ opacity: 0;
20664
+ max-height: 0;
19612
20665
  }
19613
-
19614
- /* Count Badge */
19615
- .mld-sample-selector__count-badge {
19616
- font-size: 0.625rem;
19617
- font-weight: 500;
19618
- padding: 0.125rem 0.375rem;
19619
- border-radius: 9999px;
19620
- font-variant-numeric: tabular-nums;
20666
+ .mld-collapse-enter-to,
20667
+ .mld-collapse-leave-from {
20668
+ opacity: 1;
20669
+ max-height: 500px;
19621
20670
  }
19622
- .mld-sample-selector__count-badge--small {
19623
- font-size: 0.5625rem;
19624
- padding: 0.0625rem 0.3125rem;
20671
+ /* GroupingModal Component Styles */
20672
+ .mld-grouping-modal {
20673
+ display: flex;
20674
+ flex-direction: column;
20675
+ gap: 1rem;
19625
20676
  }
19626
20677
 
19627
- /* Delete Button */
19628
- .mld-sample-selector__delete-btn {
20678
+ /* Dropzone */
20679
+ .mld-grouping-modal__dropzone {
20680
+ position: relative;
19629
20681
  display: flex;
20682
+ flex-direction: column;
19630
20683
  align-items: center;
19631
20684
  justify-content: center;
19632
- padding: 0.125rem;
19633
- background: none;
19634
- border: none;
19635
- border-radius: var(--mld-radius-sm);
19636
- color: #F87171;
20685
+ padding: 2rem;
20686
+ border: 2px dashed var(--border-color);
20687
+ border-radius: var(--mld-radius);
20688
+ background-color: var(--bg-secondary);
19637
20689
  cursor: pointer;
19638
- transition: all var(--mld-transition);
20690
+ transition: border-color var(--mld-transition), background-color var(--mld-transition);
19639
20691
  }
19640
- .mld-sample-selector__delete-btn:hover {
19641
- background-color: rgba(239, 68, 68, 0.2);
19642
- color: #EF4444;
20692
+ .mld-grouping-modal__dropzone:hover,
20693
+ .mld-grouping-modal__dropzone--dragover {
20694
+ border-color: var(--color-primary);
20695
+ background-color: var(--color-primary-soft);
19643
20696
  }
19644
- .mld-sample-selector__delete-btn--hidden {
20697
+ .mld-grouping-modal__file-input {
20698
+ position: absolute;
20699
+ inset: 0;
19645
20700
  opacity: 0;
20701
+ cursor: pointer;
19646
20702
  }
19647
- .mld-sample-selector__delete-btn svg {
19648
- width: 0.875rem;
19649
- height: 0.875rem;
20703
+ .mld-grouping-modal__upload-icon {
20704
+ width: 3rem;
20705
+ height: 3rem;
20706
+ color: var(--text-muted);
20707
+ margin-bottom: 0.75rem;
19650
20708
  }
19651
-
19652
- /* Sub Groups */
19653
- .mld-sample-selector__sub-groups {
19654
- margin-left: 1rem;
19655
- padding-left: 0.75rem;
19656
- border-left: 2px solid;
20709
+ .mld-grouping-modal__upload-text {
20710
+ font-size: 0.875rem;
20711
+ color: var(--text-primary);
20712
+ margin-top: 0 !important;
20713
+ margin-bottom: 0 !important;
20714
+ padding: 0 !important;
19657
20715
  }
19658
- .mld-sample-selector__sub-group {
19659
- margin-bottom: 0.125rem;
19660
- border-radius: var(--mld-radius);
19661
- transition: background-color var(--mld-transition), box-shadow var(--mld-transition);
20716
+ .mld-grouping-modal__upload-highlight {
20717
+ color: var(--color-primary);
20718
+ font-weight: 500;
19662
20719
  }
19663
- .mld-sample-selector__sub-group--drag-over {
19664
- background-color: var(--color-primary-soft);
19665
- box-shadow: inset 0 0 0 2px var(--color-primary);
20720
+ .mld-grouping-modal__upload-hint {
20721
+ font-size: 0.75rem;
20722
+ color: var(--text-muted);
20723
+ margin-top: 0.25rem !important;
20724
+ margin-bottom: 0 !important;
20725
+ padding: 0 !important;
20726
+ }
20727
+
20728
+ /* Error */
20729
+ .mld-grouping-modal__error {
20730
+ padding: 0.75rem;
20731
+ border-radius: var(--mld-radius-sm);
20732
+ background-color: var(--mld-error-soft);
20733
+ color: var(--mld-error);
20734
+ font-size: 0.875rem;
19666
20735
  }
19667
- .mld-sample-selector__sub-header {
20736
+
20737
+ /* File info */
20738
+ .mld-grouping-modal__file-info {
19668
20739
  display: flex;
19669
20740
  align-items: center;
19670
20741
  gap: 0.5rem;
19671
- padding: 0.25rem 0.5rem;
20742
+ padding: 0.5rem 0.75rem;
20743
+ background-color: var(--bg-tertiary);
19672
20744
  border-radius: var(--mld-radius-sm);
19673
- cursor: pointer;
19674
- transition: background-color var(--mld-transition);
19675
- }
19676
- .mld-sample-selector__sub-header:hover {
19677
- background-color: var(--bg-hover);
19678
20745
  }
19679
- .mld-sample-selector__sub-header:hover .mld-sample-selector__delete-btn--hidden {
19680
- opacity: 1;
20746
+ .mld-grouping-modal__file-icon {
20747
+ width: 1.25rem;
20748
+ height: 1.25rem;
20749
+ color: var(--text-muted);
20750
+ flex-shrink: 0;
19681
20751
  }
19682
- .mld-sample-selector__sub-name {
20752
+ .mld-grouping-modal__file-name {
19683
20753
  flex: 1;
19684
20754
  font-size: 0.875rem;
19685
- font-weight: 500;
19686
20755
  color: var(--text-primary);
20756
+ font-weight: 500;
19687
20757
  white-space: nowrap;
19688
20758
  overflow: hidden;
19689
20759
  text-overflow: ellipsis;
19690
20760
  }
20761
+ .mld-grouping-modal__file-clear {
20762
+ font-size: 0.75rem;
20763
+ color: var(--color-primary);
20764
+ background: none;
20765
+ border: none;
20766
+ cursor: pointer;
20767
+ padding: 0;
20768
+ }
20769
+ .mld-grouping-modal__file-clear:hover {
20770
+ text-decoration: underline;
20771
+ }
19691
20772
 
19692
- /* Samples */
19693
- .mld-sample-selector__samples {
19694
- margin-left: 1rem;
19695
- padding-left: 0.75rem;
19696
- border-left: 2px solid;
20773
+ /* Config section */
20774
+ .mld-grouping-modal__config {
20775
+ display: flex;
20776
+ flex-direction: column;
20777
+ gap: 1rem;
19697
20778
  }
19698
- .mld-sample-selector__sample {
20779
+ .mld-grouping-modal__config-row {
19699
20780
  display: flex;
19700
- align-items: center;
19701
- gap: 0.5rem;
19702
- padding: 0.125rem 0.5rem;
19703
- border-radius: var(--mld-radius-sm);
19704
- transition: background-color var(--mld-transition), opacity var(--mld-transition);
19705
- cursor: grab;
20781
+ flex-direction: column;
20782
+ gap: 0.375rem;
19706
20783
  }
19707
- .mld-sample-selector__sample:hover {
19708
- background-color: var(--bg-hover);
20784
+ .mld-grouping-modal__label {
20785
+ font-size: 0.75rem;
20786
+ font-weight: 500;
20787
+ color: var(--text-muted);
20788
+ text-transform: uppercase;
20789
+ letter-spacing: 0.025em;
19709
20790
  }
19710
- .mld-sample-selector__sample:hover .mld-sample-selector__remove-btn {
19711
- opacity: 1;
20791
+ .mld-grouping-modal__group-columns {
20792
+ display: flex;
20793
+ flex-direction: column;
20794
+ gap: 0.5rem;
19712
20795
  }
19713
- .mld-sample-selector__sample:hover .mld-sample-selector__drag-handle {
19714
- opacity: 1;
20796
+ .mld-grouping-modal__selected-columns {
20797
+ display: flex;
20798
+ flex-direction: column;
20799
+ gap: 0.375rem;
19715
20800
  }
19716
- .mld-sample-selector__sample--dragging {
19717
- opacity: 0.5;
19718
- cursor: grabbing;
20801
+ .mld-grouping-modal__selected-column {
20802
+ display: flex;
20803
+ align-items: center;
20804
+ justify-content: space-between;
20805
+ padding: 0.5rem 0.75rem;
20806
+ background-color: var(--bg-tertiary);
20807
+ border-radius: var(--mld-radius-sm);
20808
+ border: 1px solid var(--border-color);
19719
20809
  }
19720
-
19721
- /* Drag Handle */
19722
- .mld-sample-selector__drag-handle {
19723
- width: 0.875rem;
19724
- height: 0.875rem;
19725
- flex-shrink: 0;
19726
- color: var(--text-muted);
19727
- opacity: 0;
19728
- transition: opacity var(--mld-transition);
19729
- cursor: grab;
20810
+ .mld-grouping-modal__column-name {
20811
+ font-size: 0.875rem;
20812
+ color: var(--text-primary);
19730
20813
  }
19731
- .mld-sample-selector__sample-name {
19732
- flex: 1;
19733
- font-size: 0.75rem;
19734
- color: var(--text-secondary);
19735
- white-space: nowrap;
19736
- overflow: hidden;
19737
- text-overflow: ellipsis;
20814
+ .mld-grouping-modal__column-actions {
20815
+ display: flex;
20816
+ align-items: center;
20817
+ gap: 0.25rem;
19738
20818
  }
19739
- .mld-sample-selector__remove-btn {
20819
+ .mld-grouping-modal__column-btn {
19740
20820
  display: flex;
19741
20821
  align-items: center;
19742
20822
  justify-content: center;
19743
- padding: 0.125rem;
20823
+ width: 1.5rem;
20824
+ height: 1.5rem;
20825
+ padding: 0;
19744
20826
  background: none;
19745
20827
  border: none;
19746
20828
  border-radius: var(--mld-radius-sm);
19747
- color: #FB923C;
20829
+ color: var(--text-muted);
19748
20830
  cursor: pointer;
19749
- opacity: 0;
19750
- transition: all var(--mld-transition);
20831
+ transition: color var(--mld-transition), background-color var(--mld-transition);
19751
20832
  }
19752
- .mld-sample-selector__remove-btn:hover {
19753
- background-color: rgba(251, 146, 60, 0.2);
19754
- color: #F97316;
20833
+ .mld-grouping-modal__column-btn:hover:not(:disabled) {
20834
+ color: var(--text-primary);
20835
+ background-color: var(--bg-hover);
19755
20836
  }
19756
- .mld-sample-selector__remove-btn svg {
19757
- width: 0.625rem;
19758
- height: 0.625rem;
20837
+ .mld-grouping-modal__column-btn:disabled {
20838
+ opacity: 0.3;
20839
+ cursor: not-allowed;
19759
20840
  }
19760
-
19761
- /* Empty State */
19762
- .mld-sample-selector__empty {
19763
- text-align: center;
19764
- padding: 1rem;
19765
- font-size: 0.875rem;
19766
- color: var(--text-muted);
20841
+ .mld-grouping-modal__column-btn--remove:hover:not(:disabled) {
20842
+ color: var(--mld-error);
20843
+ background-color: var(--mld-error-soft);
19767
20844
  }
19768
20845
 
19769
- /* Ungrouped Section */
19770
- .mld-sample-selector__ungrouped {
19771
- margin-top: 0.75rem;
19772
- padding-top: 0.75rem;
19773
- border-top: 1px solid var(--border-color);
19774
- }
19775
- .mld-sample-selector__ungrouped-header {
20846
+ /* Match status */
20847
+ .mld-grouping-modal__match-status {
19776
20848
  display: flex;
19777
- align-items: center;
19778
- gap: 0.5rem;
19779
- padding: 0.375rem 0.5rem;
20849
+ gap: 1rem;
20850
+ padding: 0.75rem;
20851
+ background-color: var(--bg-tertiary);
19780
20852
  border-radius: var(--mld-radius-sm);
19781
- cursor: pointer;
19782
- transition: background-color var(--mld-transition);
19783
20853
  }
19784
- .mld-sample-selector__ungrouped-header:hover {
19785
- background-color: var(--bg-hover);
20854
+ .mld-grouping-modal__match-stat {
20855
+ display: flex;
20856
+ align-items: baseline;
20857
+ gap: 0.375rem;
19786
20858
  }
19787
- .mld-sample-selector__ungrouped-label {
19788
- flex: 1;
19789
- font-size: 0.875rem;
19790
- font-weight: 500;
19791
- color: var(--text-muted);
20859
+ .mld-grouping-modal__match-count {
20860
+ font-size: 1rem;
20861
+ font-weight: 600;
19792
20862
  }
19793
- .mld-sample-selector__ungrouped-count {
19794
- font-size: 0.625rem;
19795
- padding: 0.125rem 0.375rem;
19796
- background-color: var(--bg-tertiary);
20863
+ .mld-grouping-modal__match-label {
20864
+ font-size: 0.75rem;
19797
20865
  color: var(--text-muted);
19798
- border-radius: 9999px;
19799
- font-variant-numeric: tabular-nums;
19800
- }
19801
- .mld-sample-selector__ungrouped-list {
19802
- margin-left: 1.25rem;
19803
- padding-left: 0.75rem;
19804
- border-left: 2px solid var(--border-color);
19805
- }
19806
-
19807
- /* New Group Input */
19808
- .mld-sample-selector__new-group {
19809
- display: flex;
19810
- align-items: center;
19811
- gap: 0.5rem;
19812
- margin-top: 0.5rem;
19813
- }
19814
- .mld-sample-selector__new-group-input {
19815
- flex: 1;
19816
- min-width: 0;
19817
20866
  }
19818
- .mld-sample-selector__new-group-btn {
19819
- flex-shrink: 0;
20867
+ .mld-grouping-modal__match-stat--matched .mld-grouping-modal__match-count {
20868
+ color: var(--mld-success);
19820
20869
  }
19821
-
19822
- /* Hidden color input */
19823
- .mld-sample-selector__color-input {
19824
- position: absolute;
19825
- width: 1px;
19826
- height: 1px;
19827
- padding: 0;
19828
- margin: -1px;
19829
- overflow: hidden;
19830
- clip: rect(0, 0, 0, 0);
19831
- white-space: nowrap;
19832
- border: 0;
20870
+ .mld-grouping-modal__match-stat--unmatched .mld-grouping-modal__match-count {
20871
+ color: var(--mld-warning);
19833
20872
  }
19834
20873
 
19835
- /* Flat View */
19836
- .mld-sample-selector__flat {
20874
+ /* Preview */
20875
+ .mld-grouping-modal__preview {
19837
20876
  display: flex;
19838
20877
  flex-direction: column;
19839
- flex: 1;
19840
- min-height: 0;
19841
20878
  gap: 0.5rem;
19842
20879
  }
19843
- .mld-sample-selector__search {
19844
- position: relative;
19845
- }
19846
- .mld-sample-selector__search-icon {
19847
- position: absolute;
19848
- left: 0.75rem;
19849
- top: 50%;
19850
- transform: translateY(-50%);
19851
- width: 1rem;
19852
- height: 1rem;
20880
+ .mld-grouping-modal__preview-title {
20881
+ font-size: 0.75rem;
20882
+ font-weight: 500;
19853
20883
  color: var(--text-muted);
19854
- pointer-events: none;
19855
- }
19856
- .mld-sample-selector__search-input {
19857
- width: 100%;
19858
- padding: 0.5rem 0.75rem 0.5rem 2.25rem;
19859
- font-size: 0.875rem;
19860
- color: var(--text-primary);
19861
- background-color: var(--bg-tertiary);
19862
- border: 1px solid var(--border-color);
19863
- border-radius: 0.5rem;
19864
- outline: none;
19865
- transition: border-color var(--mld-transition);
20884
+ text-transform: uppercase;
20885
+ letter-spacing: 0.025em;
20886
+ margin-top: 0 !important;
20887
+ margin-bottom: 0 !important;
20888
+ padding: 0 !important;
19866
20889
  }
19867
- .mld-sample-selector__search-input:focus {
19868
- border-color: var(--color-primary);
20890
+ .mld-grouping-modal__table-wrapper {
20891
+ overflow-x: auto;
20892
+ border: 1px solid var(--border-color);
20893
+ border-radius: var(--mld-radius-sm);
19869
20894
  }
19870
- .mld-sample-selector__search-input::placeholder {
19871
- color: var(--text-muted);
20895
+ .mld-grouping-modal__table {
20896
+ display: table !important;
20897
+ overflow: visible !important;
20898
+ width: 100%;
20899
+ border-collapse: collapse;
20900
+ border: none !important;
20901
+ margin: 0 !important;
20902
+ font-size: 0.8125rem;
19872
20903
  }
19873
- .mld-sample-selector__flat-list {
19874
- flex: 1;
19875
- min-height: 0;
19876
- overflow-y: auto;
19877
- padding-right: 0.25rem;
20904
+ .mld-grouping-modal__table thead {
20905
+ display: table-header-group !important;
19878
20906
  }
19879
- .mld-sample-selector__flat-item {
19880
- display: flex;
19881
- align-items: center;
19882
- gap: 0.5rem;
19883
- padding: 0.375rem 0.5rem;
19884
- border-radius: var(--mld-radius-sm);
19885
- transition: background-color var(--mld-transition);
20907
+ .mld-grouping-modal__table tbody {
20908
+ display: table-row-group !important;
19886
20909
  }
19887
- .mld-sample-selector__flat-item:hover {
19888
- background-color: var(--bg-hover);
20910
+ .mld-grouping-modal__table tr {
20911
+ border: none !important;
19889
20912
  }
19890
- .mld-sample-selector__flat-name {
19891
- flex: 1;
19892
- font-size: 0.875rem;
19893
- color: var(--text-primary);
20913
+ .mld-grouping-modal__th,
20914
+ .mld-grouping-modal__td {
20915
+ padding: 0.5rem 0.75rem;
20916
+ text-align: left;
19894
20917
  white-space: nowrap;
19895
- overflow: hidden;
19896
- text-overflow: ellipsis;
19897
20918
  }
19898
-
19899
- /* Transitions */
19900
- .mld-popover-enter-active {
19901
- transition: all 0.15s ease-out;
20919
+ .mld-grouping-modal__th {
20920
+ font-weight: 500;
20921
+ color: var(--text-muted);
20922
+ background-color: var(--bg-tertiary);
20923
+ border-bottom: 1px solid var(--border-color);
19902
20924
  }
19903
- .mld-popover-leave-active {
19904
- transition: all 0.1s ease-in;
20925
+ .mld-grouping-modal__td {
20926
+ color: var(--text-primary);
20927
+ border-bottom: 1px solid var(--border-color);
19905
20928
  }
19906
- .mld-popover-enter-from,
19907
- .mld-popover-leave-to {
19908
- opacity: 0;
19909
- transform: translateY(-0.25rem);
20929
+ .mld-grouping-modal__table tbody tr:last-child .mld-grouping-modal__td {
20930
+ border-bottom: none;
19910
20931
  }
19911
- .mld-collapse-enter-active {
19912
- transition: all 0.2s ease-out;
19913
- overflow: hidden;
20932
+ .mld-grouping-modal__th--sample,
20933
+ .mld-grouping-modal__td--sample {
20934
+ background-color: rgba(59, 130, 246, 0.08);
19914
20935
  }
19915
- .mld-collapse-leave-active {
19916
- transition: all 0.15s ease-in;
19917
- overflow: hidden;
20936
+ .mld-grouping-modal__th--group,
20937
+ .mld-grouping-modal__td--group {
20938
+ background-color: rgba(168, 85, 247, 0.08);
19918
20939
  }
19919
- .mld-collapse-enter-from,
19920
- .mld-collapse-leave-to {
19921
- opacity: 0;
19922
- max-height: 0;
20940
+ .mld-grouping-modal__preview-note {
20941
+ font-size: 0.75rem;
20942
+ color: var(--text-muted);
20943
+ margin-top: 0 !important;
20944
+ margin-bottom: 0 !important;
20945
+ padding: 0 !important;
19923
20946
  }
19924
- .mld-collapse-enter-to,
19925
- .mld-collapse-leave-from {
19926
- opacity: 1;
19927
- max-height: 500px;
20947
+
20948
+ /* Footer */
20949
+ .mld-grouping-modal__footer {
20950
+ display: flex;
20951
+ justify-content: flex-end;
20952
+ gap: 0.75rem;
19928
20953
  }
19929
20954
  /* GroupAssigner Component Styles */
19930
20955
  .mld-group-assigner {
@@ -22172,167 +23197,6 @@ to {
22172
23197
  color: var(--text-muted);
22173
23198
  padding-left: 0.125rem;
22174
23199
  }
22175
- .mld-wizard {
22176
- display: flex;
22177
- flex-direction: column;
22178
- gap: 1.5rem;
22179
- outline: none;
22180
- }
22181
-
22182
- /* Progress indicator */
22183
- .mld-wizard__progress {
22184
- }
22185
- .mld-wizard__steps-indicator {
22186
- display: flex;
22187
- align-items: flex-start;
22188
- justify-content: center;
22189
- }
22190
- .mld-wizard__step-connector {
22191
- flex: 1;
22192
- height: 2px;
22193
- background-color: var(--border-color);
22194
- margin-top: 1rem;
22195
- transition: background-color 0.2s ease;
22196
- }
22197
- .mld-wizard__step-connector--completed {
22198
- background-color: var(--mld-success);
22199
- }
22200
- .mld-wizard__step-indicator {
22201
- display: flex;
22202
- flex-direction: column;
22203
- align-items: center;
22204
- gap: 0.5rem;
22205
- cursor: pointer;
22206
- min-width: 4rem;
22207
- }
22208
- .mld-wizard__step-indicator--disabled {
22209
- cursor: not-allowed;
22210
- opacity: 0.5;
22211
- }
22212
- .mld-wizard__step-dot {
22213
- width: 2rem;
22214
- height: 2rem;
22215
- border-radius: 9999px;
22216
- display: flex;
22217
- align-items: center;
22218
- justify-content: center;
22219
- font-size: 0.75rem;
22220
- font-weight: 600;
22221
- border: 2px solid var(--border-color);
22222
- background-color: var(--bg-secondary);
22223
- color: var(--text-muted);
22224
- transition: all 0.2s ease;
22225
- }
22226
-
22227
- /* Size variants for dot */
22228
- .mld-wizard--sm .mld-wizard__step-dot {
22229
- width: 1.5rem;
22230
- height: 1.5rem;
22231
- font-size: 0.625rem;
22232
- }
22233
- .mld-wizard--lg .mld-wizard__step-dot {
22234
- width: 2.5rem;
22235
- height: 2.5rem;
22236
- font-size: 0.875rem;
22237
- }
22238
- .mld-wizard__step-indicator--active .mld-wizard__step-dot {
22239
- border-color: var(--color-primary);
22240
- background-color: var(--color-primary);
22241
- color: white;
22242
- }
22243
- .mld-wizard__step-indicator--completed .mld-wizard__step-dot {
22244
- border-color: var(--mld-success);
22245
- background-color: var(--mld-success);
22246
- color: white;
22247
- }
22248
- .mld-wizard__step-label {
22249
- font-size: 0.75rem;
22250
- color: var(--text-muted);
22251
- text-align: center;
22252
- white-space: nowrap;
22253
- }
22254
- .mld-wizard__step-indicator--active .mld-wizard__step-label {
22255
- color: var(--text-primary);
22256
- font-weight: 500;
22257
- }
22258
- .mld-wizard__step-indicator--completed .mld-wizard__step-label {
22259
- color: var(--text-secondary);
22260
- }
22261
-
22262
- /* Body */
22263
- .mld-wizard__body {
22264
- flex: 1;
22265
- min-height: 0;
22266
- }
22267
-
22268
- /* Navigation */
22269
- .mld-wizard__navigation {
22270
- display: flex;
22271
- align-items: center;
22272
- gap: 0.5rem;
22273
- padding-top: 1rem;
22274
- border-top: 1px solid var(--border-color);
22275
- }
22276
- .mld-wizard__nav-btn {
22277
- padding: 0.5rem 1rem;
22278
- border-radius: var(--radius-md);
22279
- font-size: 0.875rem;
22280
- font-weight: 500;
22281
- cursor: pointer;
22282
- transition: background-color 0.15s ease, color 0.15s ease;
22283
- border: none;
22284
- }
22285
- .mld-wizard__nav-btn:disabled {
22286
- opacity: 0.5;
22287
- cursor: not-allowed;
22288
- }
22289
- .mld-wizard__nav-btn--cancel {
22290
- background: transparent;
22291
- color: var(--text-muted);
22292
- }
22293
- .mld-wizard__nav-btn--cancel:hover:not(:disabled) {
22294
- color: var(--text-primary);
22295
- }
22296
- .mld-wizard__nav-btn--back {
22297
- background-color: var(--bg-tertiary);
22298
- color: var(--text-primary);
22299
- }
22300
- .mld-wizard__nav-btn--back:hover:not(:disabled) {
22301
- background-color: var(--bg-hover);
22302
- }
22303
- .mld-wizard__nav-btn--next {
22304
- background-color: var(--color-primary);
22305
- color: white;
22306
- }
22307
- .mld-wizard__nav-btn--next:hover:not(:disabled) {
22308
- background-color: var(--color-primary-hover);
22309
- }
22310
- .mld-wizard__nav-btn--finish {
22311
- background-color: var(--mld-success);
22312
- color: white;
22313
- }
22314
- .mld-wizard__nav-btn--finish:hover:not(:disabled) {
22315
- opacity: 0.9;
22316
- }
22317
-
22318
- /* Size variants for connector alignment */
22319
- .mld-wizard--sm .mld-wizard__step-connector {
22320
- margin-top: 0.75rem;
22321
- }
22322
- .mld-wizard--lg .mld-wizard__step-connector {
22323
- margin-top: 1.25rem;
22324
- }
22325
- .mld-wizard--sm .mld-wizard__step-label {
22326
- font-size: 0.625rem;
22327
- }
22328
- .mld-wizard--sm .mld-wizard__nav-btn {
22329
- padding: 0.375rem 0.75rem;
22330
- font-size: 0.75rem;
22331
- }
22332
- .mld-wizard--lg .mld-wizard__nav-btn {
22333
- padding: 0.625rem 1.25rem;
22334
- font-size: 1rem;
22335
- }
22336
23200
  /* AuditTrail Component Styles */
22337
23201
  .mld-audit-trail {
22338
23202
  position: relative;