@morscherlab/mint-sdk 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/{ExperimentSelectorModal-DCXmwKNS.js → ExperimentSelectorModal-DHE9k8TP.js} +3 -3
  2. package/dist/{ExperimentSelectorModal-DCXmwKNS.js.map → ExperimentSelectorModal-DHE9k8TP.js.map} +1 -1
  3. package/dist/{SettingsModal-BYR20I4c.js → SettingsModal-DELMkUFR.js} +39 -16
  4. package/dist/SettingsModal-DELMkUFR.js.map +1 -0
  5. package/dist/{Skeleton-BAF3CKY7.js → Skeleton-jhF9wUkU.js} +17 -7
  6. package/dist/Skeleton-jhF9wUkU.js.map +1 -0
  7. package/dist/__tests__/components/ChartContainer.test.d.ts +1 -0
  8. package/dist/__tests__/components/ChemicalFormula.test.d.ts +1 -0
  9. package/dist/__tests__/components/FormField.test.d.ts +1 -0
  10. package/dist/__tests__/components/LayoutResizeHandle.test.d.ts +1 -0
  11. package/dist/__tests__/components/NumberInput.test.d.ts +1 -0
  12. package/dist/__tests__/components/SearchableSelect.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellPlate.decoration.test.d.ts +1 -0
  14. package/dist/__tests__/composables/localFiles.test.d.ts +1 -0
  15. package/dist/__tests__/composables/useManualLayoutResize.test.d.ts +1 -0
  16. package/dist/__tests__/composables/usePickerSelection.test.d.ts +1 -0
  17. package/dist/__tests__/styles/tokenOnlyColors.test.d.ts +1 -0
  18. package/dist/components/AdductText.vue.d.ts +17 -0
  19. package/dist/components/AppSidebar.vue.d.ts +7 -7
  20. package/dist/components/BasePill.vue.d.ts +3 -0
  21. package/dist/components/BaseTabs.vue.d.ts +1 -4
  22. package/dist/components/ChartContainer.vue.d.ts +19 -5
  23. package/dist/components/ChemicalFormula.vue.d.ts +28 -2
  24. package/dist/components/DataFrame.vue.d.ts +1 -1
  25. package/dist/components/FileUploader.vue.d.ts +3 -0
  26. package/dist/components/FormField.vue.d.ts +8 -1
  27. package/dist/components/LayoutResizeHandle.vue.d.ts +23 -0
  28. package/dist/components/PlotlyChart.vue.d.ts +34 -6
  29. package/dist/components/PluginWorkspaceView.props.d.ts +3 -3
  30. package/dist/components/SearchableSelect.vue.d.ts +57 -0
  31. package/dist/components/WellPlate.vue.d.ts +5 -1
  32. package/dist/components/index.d.ts +3 -1
  33. package/dist/components/index.js +6 -6
  34. package/dist/{components-DIum5hkx.js → components-CxQVQCpP.js} +1215 -546
  35. package/dist/components-CxQVQCpP.js.map +1 -0
  36. package/dist/composables/index.d.ts +1 -0
  37. package/dist/composables/index.js +8 -8
  38. package/dist/composables/pluginWorkspaceModel.d.ts +0 -3
  39. package/dist/composables/useManualLayoutResize.d.ts +56 -0
  40. package/dist/composables/useToast.d.ts +22 -1
  41. package/dist/{composables-mFXsTA4g.js → composables-DAqOU8Aq.js} +97 -8
  42. package/dist/composables-DAqOU8Aq.js.map +1 -0
  43. package/dist/index.js +11 -11
  44. package/dist/install.js +2 -2
  45. package/dist/styles.css +855 -320
  46. package/dist/templates/index.js +2 -2
  47. package/dist/{templates-CmGfmBRA.js → templates-NuaNHohp.js} +2 -2
  48. package/dist/{templates-CmGfmBRA.js.map → templates-NuaNHohp.js.map} +1 -1
  49. package/dist/types/componentLabTypes.d.ts +3 -0
  50. package/dist/types/components.d.ts +26 -1
  51. package/dist/types/form-builder.d.ts +2 -0
  52. package/dist/types/generated-ui.d.ts +2 -0
  53. package/dist/types/index.d.ts +1 -1
  54. package/dist/{useControlSchema-DldpxNOP.js → useControlSchema-vLiRPUmj.js} +181 -71
  55. package/dist/useControlSchema-vLiRPUmj.js.map +1 -0
  56. package/dist/{useExperimentSelector-CEcIaueJ.js → useExperimentSelector-G_CAOFTX.js} +2 -2
  57. package/dist/{useExperimentSelector-CEcIaueJ.js.map → useExperimentSelector-G_CAOFTX.js.map} +1 -1
  58. package/dist/{useFormBuilder-z5L_dUIy.js → useFormBuilder-D37ajgS8.js} +2 -2
  59. package/dist/{useFormBuilder-z5L_dUIy.js.map → useFormBuilder-D37ajgS8.js.map} +1 -1
  60. package/dist/{validation-uwoJGEb6.js → validation-ChMyixAf.js} +21 -9
  61. package/dist/validation-ChMyixAf.js.map +1 -0
  62. package/package.json +1 -1
  63. package/src/__tests__/components/AppSidebar.test.ts +84 -94
  64. package/src/__tests__/components/AppToastContainer.test.ts +55 -1
  65. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -21
  66. package/src/__tests__/components/ChartContainer.test.ts +24 -0
  67. package/src/__tests__/components/ChemicalFormula.test.ts +27 -0
  68. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -2
  69. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -2
  70. package/src/__tests__/components/FormBuilder.test.ts +26 -0
  71. package/src/__tests__/components/FormField.test.ts +26 -0
  72. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -0
  73. package/src/__tests__/components/LayoutResizeHandle.test.ts +19 -0
  74. package/src/__tests__/components/NumberInput.test.ts +149 -0
  75. package/src/__tests__/components/PlotlyChart.test.ts +48 -0
  76. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +1 -2
  77. package/src/__tests__/components/PluginWorkspaceView.test.ts +1 -2
  78. package/src/__tests__/components/RackEditor.test.ts +9 -0
  79. package/src/__tests__/components/SearchableSelect.test.ts +61 -0
  80. package/src/__tests__/components/WellPlate.decoration.test.ts +28 -0
  81. package/src/__tests__/composables/localFiles.test.ts +57 -0
  82. package/src/__tests__/composables/useManualLayoutResize.test.ts +21 -0
  83. package/src/__tests__/composables/usePickerSelection.test.ts +98 -0
  84. package/src/__tests__/generatedUi.test.ts +111 -0
  85. package/src/__tests__/styles/tokenOnlyColors.test.ts +16 -0
  86. package/src/components/AdductText.story.vue +15 -0
  87. package/src/components/AdductText.vue +40 -0
  88. package/src/components/AppLayout.story.vue +1 -1
  89. package/src/components/AppSidebar.story.vue +7 -10
  90. package/src/components/AppSidebar.vue +178 -58
  91. package/src/components/AppToastContainer.vue +65 -23
  92. package/src/components/BasePill.story.vue +2 -0
  93. package/src/components/BasePill.vue +4 -0
  94. package/src/components/BaseTabs.story.vue +0 -42
  95. package/src/components/BaseTabs.vue +3 -6
  96. package/src/components/ChartContainer.story.vue +21 -0
  97. package/src/components/ChartContainer.vue +27 -6
  98. package/src/components/ChemicalFormula.story.vue +7 -0
  99. package/src/components/ChemicalFormula.vue +40 -11
  100. package/src/components/FileUploader.vue +10 -1
  101. package/src/components/FormField.vue +10 -3
  102. package/src/components/GeneratedPathInput.vue +11 -7
  103. package/src/components/LayoutResizeHandle.story.vue +26 -0
  104. package/src/components/LayoutResizeHandle.vue +62 -0
  105. package/src/components/NumberInput.story.vue +32 -13
  106. package/src/components/NumberInput.vue +145 -56
  107. package/src/components/PlotlyChart.vue +77 -11
  108. package/src/components/PluginWorkspaceView.props.ts +3 -3
  109. package/src/components/RackEditor.vue +38 -32
  110. package/src/components/SearchableSelect.story.vue +24 -0
  111. package/src/components/SearchableSelect.vue +223 -0
  112. package/src/components/WellPlate.story.vue +16 -0
  113. package/src/components/WellPlate.vue +17 -8
  114. package/src/components/index.ts +3 -1
  115. package/src/components/internal/FormFieldRendererInternal.vue +17 -0
  116. package/src/components/internal/WorkspaceSidebarInternal.vue +1 -2
  117. package/src/composables/filePicker/localFiles.ts +21 -14
  118. package/src/composables/filePicker/usePickerSelection.ts +15 -4
  119. package/src/composables/index.ts +10 -0
  120. package/src/composables/pluginWorkspaceModel.ts +0 -3
  121. package/src/composables/useManualLayoutResize.ts +165 -0
  122. package/src/composables/usePluginWorkspace.ts +1 -2
  123. package/src/composables/useToast.ts +21 -5
  124. package/src/generated/schema.ts +58 -18
  125. package/src/styles/components/adduct-text.css +45 -0
  126. package/src/styles/components/app-sidebar.css +282 -121
  127. package/src/styles/components/chart-container.css +92 -0
  128. package/src/styles/components/chemical-formula.css +34 -4
  129. package/src/styles/components/form-builder.css +1 -1
  130. package/src/styles/components/form-field.css +28 -0
  131. package/src/styles/components/layout-resize-handle.css +60 -0
  132. package/src/styles/components/number-input.css +75 -91
  133. package/src/styles/components/pill.css +49 -51
  134. package/src/styles/components/rack-editor.css +31 -9
  135. package/src/styles/components/searchable-select.css +63 -0
  136. package/src/styles/components/segmented-control.css +16 -11
  137. package/src/styles/components/tabs.css +18 -34
  138. package/src/styles/components/toast.css +136 -27
  139. package/src/styles/components/well-plate.css +9 -0
  140. package/src/styles/index.css +3 -0
  141. package/src/styles/variables.css +25 -5
  142. package/src/types/componentLabTypes.ts +6 -0
  143. package/src/types/components.ts +30 -0
  144. package/src/types/form-builder.ts +2 -0
  145. package/src/types/generated-ui.ts +2 -0
  146. package/src/types/index.ts +5 -0
  147. package/dist/SettingsModal-BYR20I4c.js.map +0 -1
  148. package/dist/Skeleton-BAF3CKY7.js.map +0 -1
  149. package/dist/components-DIum5hkx.js.map +0 -1
  150. package/dist/composables-mFXsTA4g.js.map +0 -1
  151. package/dist/useControlSchema-DldpxNOP.js.map +0 -1
  152. package/dist/validation-uwoJGEb6.js.map +0 -1
package/dist/styles.css CHANGED
@@ -1,9 +1,9 @@
1
1
  @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');
2
- .mint-generated-path-input[data-v-9011f2f2] {
2
+ .mint-generated-path-input[data-v-9147bd02] {
3
3
  display: grid;
4
4
  gap: 0.75rem;
5
5
  }
6
- .mint-generated-path-input__modes[data-v-9011f2f2] {
6
+ .mint-generated-path-input__modes[data-v-9147bd02] {
7
7
  display: flex;
8
8
  flex-wrap: wrap;
9
9
  gap: 0.5rem;
@@ -36,11 +36,11 @@
36
36
  cursor: pointer;
37
37
  }
38
38
 
39
- .mint-plotly-chart__plot[data-v-ee2f733a] {
39
+ .mint-plotly-chart__plot[data-v-7b24d547] {
40
40
  width: 100%;
41
41
  min-height: 24rem;
42
42
  }
43
- .mint-plotly-chart__error[data-v-ee2f733a] {
43
+ .mint-plotly-chart__error[data-v-7b24d547] {
44
44
  margin: 0;
45
45
  padding: 1rem;
46
46
  border: 1px solid var(--mint-error-border);
@@ -48,7 +48,7 @@
48
48
  background: var(--mint-error-bg);
49
49
  color: var(--mint-error-hover);
50
50
  }
51
- .mint-plotly-chart__error[data-v-ee2f733a] p {
51
+ .mint-plotly-chart__error[data-v-7b24d547] p {
52
52
  margin: 0;
53
53
  }
54
54
 
@@ -899,20 +899,37 @@ code, pre {
899
899
  /* ==========================================================================
900
900
  Scrollbar Styling
901
901
  ========================================================================== */
902
+ /* Hidden until hover: the thumb is transparent by default and appears on hover
903
+ (or focus) of the scroll area. The gutter is always reserved so the reveal
904
+ never reflows content. Standard properties first; the ::-webkit-* rules are
905
+ the Safari fallback (Chrome ignores them once scrollbar-color is set). */
906
+ * {
907
+ scrollbar-width: thin;
908
+ scrollbar-color: transparent transparent;
909
+ }
910
+ *:hover,
911
+ *:focus-within {
912
+ scrollbar-color: var(--scrollbar-thumb) transparent;
913
+ }
902
914
  ::-webkit-scrollbar {
903
915
  width: 8px;
904
916
  height: 8px;
905
917
  }
906
918
  ::-webkit-scrollbar-track {
907
- background: var(--scrollbar-track);
908
- border-radius: 4px;
919
+ background: transparent;
909
920
  }
910
921
  ::-webkit-scrollbar-thumb {
911
- background: var(--scrollbar-thumb);
912
- border-radius: 4px;
922
+ background: transparent;
923
+ border: 2px solid transparent;
924
+ border-radius: 9999px;
925
+ background-clip: content-box;
926
+ }
927
+ :hover::-webkit-scrollbar-thumb,
928
+ :focus-within::-webkit-scrollbar-thumb {
929
+ background-color: var(--scrollbar-thumb);
913
930
  }
914
931
  ::-webkit-scrollbar-thumb:hover {
915
- background: var(--scrollbar-hover);
932
+ background-color: var(--scrollbar-hover);
916
933
  }
917
934
  /* ==========================================================================
918
935
  Score/Status Colors
@@ -1460,6 +1477,44 @@ code, pre {
1460
1477
  cursor: not-allowed;
1461
1478
  opacity: var(--mint-disabled-opacity);
1462
1479
  }
1480
+ .mint-adduct-text {
1481
+ display: inline-flex;
1482
+ align-items: center;
1483
+ flex-shrink: 0;
1484
+ max-width: 100%;
1485
+ overflow: hidden;
1486
+ color: var(--text-muted);
1487
+ font-variant-numeric: tabular-nums;
1488
+ font-weight: 600;
1489
+ letter-spacing: 0;
1490
+ text-overflow: ellipsis;
1491
+ white-space: nowrap;
1492
+ }
1493
+ .mint-adduct-text--mono { font-family: var(--font-mono); font-feature-settings: 'liga' 0, 'calt' 0; }
1494
+ .mint-adduct-text--sans { font-family: var(--font-sans); font-feature-settings: 'liga' 1, 'calt' 1; font-weight: 650; }
1495
+ .mint-adduct-text--xs {
1496
+ font-size: 0.625rem;
1497
+ line-height: 1rem;
1498
+ }
1499
+ .mint-adduct-text--inherit {
1500
+ font-size: inherit;
1501
+ line-height: inherit;
1502
+ }
1503
+ .mint-adduct-text--badge {
1504
+ padding: 0.125rem 0.25rem;
1505
+ border-radius: var(--radius-sm);
1506
+ background: var(--bg-tertiary);
1507
+ }
1508
+ .mint-adduct-text--on-primary {
1509
+ color: rgb(255 255 255 / 0.82);
1510
+ }
1511
+ .mint-adduct-text--badge.mint-adduct-text--on-primary {
1512
+ background: rgb(255 255 255 / 0.2);
1513
+ }
1514
+ .mint-adduct-text--muted,
1515
+ .mint-adduct-text--empty {
1516
+ color: var(--text-muted);
1517
+ }
1463
1518
  /* AlertBox Component Styles */
1464
1519
  .mint-alert {
1465
1520
  display: flex;
@@ -1792,6 +1847,8 @@ code, pre {
1792
1847
  border-right: none;
1793
1848
  border-left: 1px solid var(--border-color);
1794
1849
  }
1850
+ /* Floating shell — the platform's layout language. Kept as-is; only the
1851
+ nested per-section card inside it was removed. */
1795
1852
  .mint-sidebar--floating {
1796
1853
  position: absolute;
1797
1854
  top: 0;
@@ -1811,23 +1868,9 @@ code, pre {
1811
1868
  height: 100%;
1812
1869
  border-right: 1px solid var(--border-color);
1813
1870
  }
1814
- .mint-sidebar--analysis {
1815
- background-color: var(--bg-secondary);
1816
- }
1817
- .mint-sidebar--analysis .mint-sidebar__header {
1818
- padding: 1rem;
1819
- }
1820
- .mint-sidebar--analysis .mint-sidebar__sections {
1821
- padding: 0.75rem;
1822
- gap: 0.75rem;
1823
- }
1824
- .mint-sidebar--analysis.mint-sidebar--dense .mint-sidebar__sections {
1825
- padding: 0.75rem;
1826
- gap: 0.75rem;
1827
- }
1828
1871
  /* Header / Footer slots */
1829
1872
  .mint-sidebar__header {
1830
- padding: 0.75rem;
1873
+ padding: 0.625rem 0.875rem;
1831
1874
  flex-shrink: 0;
1832
1875
  display: flex;
1833
1876
  align-items: center;
@@ -1835,6 +1878,9 @@ code, pre {
1835
1878
  gap: 0.5rem;
1836
1879
  border-bottom: 1px solid var(--border-color);
1837
1880
  }
1881
+ .mint-sidebar--comfortable .mint-sidebar__header {
1882
+ padding: 0.875rem 1rem;
1883
+ }
1838
1884
  .mint-sidebar__heading {
1839
1885
  min-width: 0;
1840
1886
  display: flex;
@@ -1915,7 +1961,7 @@ code, pre {
1915
1961
  padding-inline: 0.5rem;
1916
1962
  }
1917
1963
  .mint-sidebar__footer {
1918
- padding: 0.75rem;
1964
+ padding: 0.625rem 0.875rem;
1919
1965
  flex-shrink: 0;
1920
1966
  border-top: 1px solid var(--border-color);
1921
1967
  }
@@ -1924,11 +1970,214 @@ code, pre {
1924
1970
  flex: 1 1 0;
1925
1971
  min-height: 0;
1926
1972
  overflow-y: auto;
1927
- padding: 0.75rem;
1928
1973
  display: flex;
1929
1974
  flex-direction: column;
1975
+ }
1976
+ /* ---------- Flat section groups: header rows separated by one hairline ---------- */
1977
+ .mint-sidebar__group {
1978
+ flex-shrink: 0;
1979
+ }
1980
+ .mint-sidebar__group + .mint-sidebar__group {
1981
+ border-top: 1px solid var(--border-light);
1982
+ }
1983
+ .mint-sidebar__group-head {
1984
+ display: flex;
1985
+ align-items: center;
1986
+ transition: background-color 120ms ease;
1987
+ }
1988
+ .mint-sidebar__group-head:hover {
1989
+ background: var(--bg-hover);
1990
+ }
1991
+ .mint-sidebar__group-toggle {
1992
+ flex: 1;
1993
+ min-width: 0;
1994
+ display: flex;
1995
+ align-items: center;
1930
1996
  gap: 0.5rem;
1997
+ min-height: 2.25rem;
1998
+ padding: 0.4375rem 0.5rem 0.4375rem 0.875rem;
1999
+ border: 0;
2000
+ background: transparent;
2001
+ cursor: pointer;
2002
+ text-align: left;
2003
+ font-family: inherit;
2004
+ }
2005
+ .mint-sidebar__group-toggle:focus-visible {
2006
+ outline: none;
2007
+ box-shadow: inset var(--focus-ring-soft);
2008
+ }
2009
+ .mint-sidebar__group-icon {
2010
+ display: flex;
2011
+ align-items: center;
2012
+ justify-content: center;
2013
+ flex-shrink: 0;
2014
+ width: 1.25rem;
2015
+ height: 1.25rem;
2016
+ border-radius: 0.3125rem;
2017
+ }
2018
+ .mint-sidebar__group-svg {
2019
+ width: 0.75rem;
2020
+ height: 0.75rem;
2021
+ }
2022
+ .mint-sidebar__group-text-icon {
2023
+ font-size: 0.75rem;
2024
+ line-height: 1;
2025
+ }
2026
+ .mint-sidebar__group-copy {
2027
+ flex: 1;
2028
+ min-width: 0;
2029
+ display: flex;
2030
+ align-items: baseline;
2031
+ gap: 0.4375rem;
2032
+ }
2033
+ .mint-sidebar__group-label {
2034
+ flex: 0 1 auto;
2035
+ min-width: max-content;
2036
+ overflow: hidden;
2037
+ color: var(--text-primary);
2038
+ font-size: 0.8125rem;
2039
+ font-weight: 600;
2040
+ line-height: 1.3;
2041
+ white-space: nowrap;
2042
+ text-overflow: ellipsis;
2043
+ transition: color 120ms ease;
2044
+ }
2045
+ .mint-sidebar__group--closed .mint-sidebar__group-label {
2046
+ color: var(--text-secondary);
2047
+ }
2048
+ /* Subtitle carries file names and parameter values, not prose: mono, and the
2049
+ disposable half when the row truncates. */
2050
+ .mint-sidebar__group-subtitle {
2051
+ flex-shrink: 1;
2052
+ min-width: 0;
2053
+ overflow: hidden;
2054
+ color: var(--text-muted);
2055
+ font-family: var(--font-mono);
2056
+ font-size: 0.6875rem;
2057
+ line-height: 1.3;
2058
+ white-space: nowrap;
2059
+ text-overflow: ellipsis;
2060
+ }
2061
+ .mint-sidebar__group-tail {
2062
+ display: flex;
2063
+ align-items: center;
2064
+ flex-shrink: 0;
2065
+ gap: 0.375rem;
2066
+ padding-right: 0.625rem;
2067
+ }
2068
+ .mint-sidebar__tag {
2069
+ display: inline-flex;
2070
+ align-items: center;
2071
+ justify-content: center;
2072
+ min-width: 1.125rem;
2073
+ height: 1rem;
2074
+ padding: 0 0.25rem;
2075
+ border-radius: 0.1875rem;
2076
+ background: color-mix(in srgb, var(--mint-sidebar-tone) 14%, transparent);
2077
+ color: var(--mint-sidebar-tone);
2078
+ font-family: var(--font-mono);
2079
+ font-size: 0.625rem;
2080
+ font-weight: 600;
2081
+ line-height: 1;
2082
+ font-variant-numeric: tabular-nums;
2083
+ }
2084
+ .mint-sidebar__group-action,
2085
+ .mint-sidebar__chevron-button {
2086
+ display: inline-flex;
2087
+ align-items: center;
2088
+ justify-content: center;
2089
+ width: 1.25rem;
2090
+ height: 1.25rem;
2091
+ padding: 0;
2092
+ border: 0;
2093
+ border-radius: var(--radius-sm);
2094
+ background: transparent;
2095
+ color: var(--text-muted);
2096
+ cursor: pointer;
2097
+ transition: color 120ms ease, background-color 120ms ease;
2098
+ }
2099
+ .mint-sidebar__group-action {
2100
+ color: var(--mint-sidebar-tone, var(--text-secondary));
2101
+ }
2102
+ .mint-sidebar__group-action:hover:not(:disabled),
2103
+ .mint-sidebar__chevron-button:hover:not(:disabled) {
2104
+ color: var(--text-primary);
2105
+ background: var(--bg-tertiary);
1931
2106
  }
2107
+ .mint-sidebar__group-action:focus-visible,
2108
+ .mint-sidebar__chevron-button:focus-visible {
2109
+ outline: none;
2110
+ box-shadow: var(--focus-ring);
2111
+ }
2112
+ .mint-sidebar__group-action:disabled {
2113
+ opacity: var(--mint-disabled-opacity);
2114
+ cursor: not-allowed;
2115
+ }
2116
+ .mint-sidebar__group-action-icon,
2117
+ .mint-sidebar__chevron {
2118
+ width: 0.75rem;
2119
+ height: 0.75rem;
2120
+ }
2121
+ .mint-sidebar__chevron {
2122
+ transition: transform 180ms var(--mint-ease-out-quart);
2123
+ }
2124
+ .mint-sidebar__chevron--open {
2125
+ transform: rotate(180deg);
2126
+ }
2127
+ /* Inline enable switch: 26×15 track, 11px knob. */
2128
+ .mint-sidebar__switch {
2129
+ position: relative;
2130
+ display: inline-block;
2131
+ flex-shrink: 0;
2132
+ width: 26px;
2133
+ height: 15px;
2134
+ padding: 0;
2135
+ border: 0;
2136
+ border-radius: 9999px;
2137
+ background: var(--bg-tertiary);
2138
+ cursor: pointer;
2139
+ transition: background-color 150ms ease;
2140
+ }
2141
+ .mint-sidebar__switch--on {
2142
+ background: var(--color-primary);
2143
+ }
2144
+ .mint-sidebar__switch:focus-visible {
2145
+ outline: none;
2146
+ box-shadow: var(--focus-ring-offset);
2147
+ }
2148
+ .mint-sidebar__switch-knob {
2149
+ position: absolute;
2150
+ top: 2px;
2151
+ left: 2px;
2152
+ width: 11px;
2153
+ height: 11px;
2154
+ border-radius: 9999px;
2155
+ background: white;
2156
+ box-shadow: var(--shadow-sm);
2157
+ transition: left 180ms var(--mint-ease-out-quart);
2158
+ }
2159
+ .mint-sidebar__switch--on .mint-sidebar__switch-knob {
2160
+ left: 13px;
2161
+ }
2162
+ .mint-sidebar__group-body {
2163
+ display: flex;
2164
+ flex-direction: column;
2165
+ gap: 0.625rem;
2166
+ padding: 0.125rem 0.875rem 0.75rem;
2167
+ }
2168
+ /* Comfortable density: the old roomier spacing as an opt-in. */
2169
+ .mint-sidebar--comfortable .mint-sidebar__group-toggle {
2170
+ min-height: 2.625rem;
2171
+ padding: 0.625rem 0.5rem 0.625rem 1rem;
2172
+ }
2173
+ .mint-sidebar--comfortable .mint-sidebar__group-tail {
2174
+ padding-right: 0.75rem;
2175
+ }
2176
+ .mint-sidebar--comfortable .mint-sidebar__group-body {
2177
+ gap: 0.875rem;
2178
+ padding: 0.25rem 1rem 1rem;
2179
+ }
2180
+ /* ---------- Collapsed rail ---------- */
1932
2181
  .mint-sidebar__collapsed {
1933
2182
  flex: 1 1 0;
1934
2183
  min-height: 0;
@@ -1994,7 +2243,7 @@ code, pre {
1994
2243
  height: 1rem;
1995
2244
  padding: 0 0.25rem;
1996
2245
  border-radius: 9999px;
1997
- background: var(--mint-sidebar-rail-badge-color);
2246
+ background: var(--mint-sidebar-tone);
1998
2247
  color: white;
1999
2248
  font-size: 0.625rem;
2000
2249
  font-weight: 700;
@@ -2002,97 +2251,44 @@ code, pre {
2002
2251
  text-align: center;
2003
2252
  font-variant-numeric: tabular-nums;
2004
2253
  }
2005
- .mint-sidebar__rail-badge--primary {
2006
- --mint-sidebar-rail-badge-color: var(--color-primary);
2007
- }
2008
- .mint-sidebar__rail-badge--cta {
2009
- --mint-sidebar-rail-badge-color: var(--color-cta);
2010
- }
2011
- .mint-sidebar__rail-badge--success {
2012
- --mint-sidebar-rail-badge-color: var(--mint-success);
2013
- }
2014
- .mint-sidebar__rail-badge--warning {
2015
- --mint-sidebar-rail-badge-color: var(--mint-warning);
2016
- }
2017
- .mint-sidebar__rail-badge--error {
2018
- --mint-sidebar-rail-badge-color: var(--mint-error);
2019
- }
2020
- .mint-sidebar__rail-badge--info {
2021
- --mint-sidebar-rail-badge-color: var(--mint-info);
2022
- }
2023
- .mint-sidebar__rail-badge--neutral {
2024
- --mint-sidebar-rail-badge-color: var(--text-secondary);
2025
- }
2026
- /* Dense sidebar variant — compact sections */
2027
- .mint-sidebar--dense .mint-sidebar__sections {
2028
- padding: 0.5rem;
2029
- gap: 0.375rem;
2030
- }
2031
- .mint-sidebar--dense .mint-sidebar__sections > .mint-collapsible-card {
2032
- box-shadow: none;
2033
- border-color: var(--border-light);
2254
+ /* Semantic tones shared by the rail badge, the inline tag and section actions. */
2255
+ .mint-sidebar__rail-badge--primary,
2256
+ .mint-sidebar__tag--primary,
2257
+ .mint-sidebar__group-action--primary {
2258
+ --mint-sidebar-tone: var(--color-primary);
2034
2259
  }
2035
- /* CollapsibleCard appearance inside sidebar */
2036
- .mint-sidebar__sections > .mint-collapsible-card {
2037
- flex-shrink: 0;
2038
- border: 1px solid var(--border-light);
2039
- border-radius: var(--radius-md);
2040
- background-color: var(--bg-card);
2041
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
2260
+ .mint-sidebar__rail-badge--cta,
2261
+ .mint-sidebar__tag--cta,
2262
+ .mint-sidebar__group-action--cta {
2263
+ --mint-sidebar-tone: var(--color-cta);
2042
2264
  }
2043
- .mint-sidebar--analysis .mint-sidebar__sections > .mint-collapsible-card {
2044
- border-color: var(--border-color);
2045
- border-radius: var(--radius-lg);
2265
+ .mint-sidebar__rail-badge--success,
2266
+ .mint-sidebar__tag--success,
2267
+ .mint-sidebar__group-action--success {
2268
+ --mint-sidebar-tone: var(--mint-success);
2046
2269
  }
2047
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__header {
2048
- padding: 0.625rem 0.75rem;
2049
- min-height: auto;
2050
- }
2051
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon-badge {
2052
- width: 1.75rem;
2053
- height: 1.75rem;
2054
- border-radius: var(--radius-md);
2270
+ .mint-sidebar__rail-badge--warning,
2271
+ .mint-sidebar__tag--warning,
2272
+ .mint-sidebar__group-action--warning {
2273
+ --mint-sidebar-tone: var(--mint-warning);
2055
2274
  }
2056
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon {
2057
- width: 0.9375rem;
2058
- height: 0.9375rem;
2059
- }
2060
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon-text {
2061
- font-size: 0.9375rem;
2062
- }
2063
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__title {
2064
- font-size: 0.875rem;
2065
- font-weight: 600;
2066
- color: var(--text-primary);
2067
- }
2068
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__subtitle {
2069
- font-size: 0.75rem;
2070
- color: var(--text-muted);
2071
- }
2072
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__chevron {
2073
- width: 0.875rem;
2074
- height: 0.875rem;
2275
+ .mint-sidebar__tag--warning {
2276
+ color: var(--mint-warning-text);
2075
2277
  }
2076
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-track {
2077
- width: 1.75rem;
2078
- height: 1rem;
2278
+ .mint-sidebar__rail-badge--error,
2279
+ .mint-sidebar__tag--error,
2280
+ .mint-sidebar__group-action--error {
2281
+ --mint-sidebar-tone: var(--mint-error);
2079
2282
  }
2080
- /* Scaled-down knob: 12px circle inside a 28px track. Must also override the
2081
- base `--on` left position (1.125rem = 18px, calibrated for the 36px track)
2082
- because otherwise the knob overflows the narrower track. */
2083
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-knob {
2084
- width: 0.75rem;
2085
- height: 0.75rem;
2086
- margin-top: -0.375rem;
2283
+ .mint-sidebar__rail-badge--info,
2284
+ .mint-sidebar__tag--info,
2285
+ .mint-sidebar__group-action--info {
2286
+ --mint-sidebar-tone: var(--mint-info);
2087
2287
  }
2088
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-knob--on {
2089
- left: 0.875rem;
2090
- }
2091
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__content {
2092
- padding: 0.75rem;
2093
- display: flex;
2094
- flex-direction: column;
2095
- gap: 0.75rem;
2288
+ .mint-sidebar__rail-badge--neutral,
2289
+ .mint-sidebar__tag--neutral,
2290
+ .mint-sidebar__group-action--neutral {
2291
+ --mint-sidebar-tone: var(--text-secondary);
2096
2292
  }
2097
2293
  .mint-sidebar__footer--collapsed {
2098
2294
  padding: 0.5rem;
@@ -2100,7 +2296,10 @@ code, pre {
2100
2296
  @media (prefers-reduced-motion: reduce) {
2101
2297
  .mint-sidebar,
2102
2298
  .mint-sidebar__rail-item,
2103
- .mint-sidebar__rail-icon {
2299
+ .mint-sidebar__rail-icon,
2300
+ .mint-sidebar__chevron,
2301
+ .mint-sidebar__switch,
2302
+ .mint-sidebar__switch-knob {
2104
2303
  transition: none;
2105
2304
  }
2106
2305
 
@@ -3982,6 +4181,29 @@ code, pre {
3982
4181
  flex-direction: column;
3983
4182
  gap: 0.375rem;
3984
4183
  }
4184
+ /* Row layout: label left, control in a fixed 120px column. For numbers, toggles
4185
+ and short enums; anything that would truncate in 120px stays stacked. */
4186
+ .mint-form-field--row {
4187
+ flex-direction: row;
4188
+ align-items: center;
4189
+ justify-content: space-between;
4190
+ gap: 0.75rem;
4191
+ }
4192
+ .mint-form-field--row .mint-form-field__label-row {
4193
+ flex: 1;
4194
+ min-width: 0;
4195
+ }
4196
+ .mint-form-field--row .mint-form-field__label {
4197
+ letter-spacing: 0.04em;
4198
+ }
4199
+ .mint-form-field--row .mint-form-field__control {
4200
+ flex: 0 0 7.5rem;
4201
+ min-width: 0;
4202
+ }
4203
+ .mint-form-field--row .mint-form-field__error,
4204
+ .mint-form-field--row .mint-form-field__hint {
4205
+ flex-basis: 100%;
4206
+ }
3985
4207
  .mint-form-field__label-row {
3986
4208
  display: flex;
3987
4209
  align-items: baseline;
@@ -4965,6 +5187,56 @@ code, pre {
4965
5187
  transform: none;
4966
5188
  }
4967
5189
  }
5190
+ .mint-layout-resize-handle {
5191
+ display: flex;
5192
+ flex-shrink: 0;
5193
+ align-items: center;
5194
+ justify-content: center;
5195
+ background: transparent;
5196
+ cursor: col-resize;
5197
+ }
5198
+ .mint-layout-resize-handle--vertical { width: 1rem; min-height: 2.75rem; }
5199
+ .mint-layout-resize-handle--horizontal { min-width: 2.75rem; height: 1rem; cursor: row-resize; }
5200
+ .mint-layout-resize-handle--edge-left,
5201
+ .mint-layout-resize-handle--edge-right { position: absolute; top: 0; bottom: 0; z-index: 10; height: auto; }
5202
+ .mint-layout-resize-handle--edge-left { left: 0; transform: translateX(-100%); }
5203
+ .mint-layout-resize-handle--edge-right { right: 0; transform: translateX(100%); }
5204
+ .mint-layout-resize-handle__bar {
5205
+ display: block;
5206
+ width: 0.25rem;
5207
+ height: 2.75rem;
5208
+ border-radius: 999px;
5209
+ background: var(--border-color);
5210
+ opacity: 0.72;
5211
+ transition: background-color 150ms ease, opacity 150ms ease, transform 150ms ease;
5212
+ }
5213
+ .mint-layout-resize-handle--horizontal .mint-layout-resize-handle__bar {
5214
+ width: 2.75rem;
5215
+ height: 0.25rem;
5216
+ }
5217
+ .mint-layout-resize-handle:hover .mint-layout-resize-handle__bar,
5218
+ .mint-layout-resize-handle:focus-visible .mint-layout-resize-handle__bar {
5219
+ background: var(--color-primary);
5220
+ opacity: 1;
5221
+ }
5222
+ .mint-layout-resize-handle--vertical:hover .mint-layout-resize-handle__bar,
5223
+ .mint-layout-resize-handle--vertical:focus-visible .mint-layout-resize-handle__bar { transform: scaleX(1.35); }
5224
+ .mint-layout-resize-handle--horizontal:hover .mint-layout-resize-handle__bar,
5225
+ .mint-layout-resize-handle--horizontal:focus-visible .mint-layout-resize-handle__bar { transform: scaleY(1.35); }
5226
+ .mint-layout-resize-handle:focus-visible {
5227
+ outline: 2px solid var(--color-primary);
5228
+ outline-offset: 2px;
5229
+ }
5230
+ .mint-layout-resize-handle--edge-left:focus-visible,
5231
+ .mint-layout-resize-handle--edge-right:focus-visible { outline-offset: -2px; }
5232
+ .mint-layout-resize-handle[aria-disabled='true'] { cursor: not-allowed; opacity: 0.5; }
5233
+ @media (prefers-reduced-motion: reduce) {
5234
+ .mint-layout-resize-handle__bar { transition: none; }
5235
+ }
5236
+ @media (pointer: coarse) {
5237
+ .mint-layout-resize-handle--vertical { width: 2.75rem; }
5238
+ .mint-layout-resize-handle--horizontal { height: 2.75rem; }
5239
+ }
4968
5240
  /* BaseInput Component Styles */
4969
5241
  .mint-input {
4970
5242
  display: block;
@@ -5592,21 +5864,22 @@ code, pre {
5592
5864
  max-height: 60vh;
5593
5865
  }
5594
5866
  }
5595
- /* NumberInput Component Styles */
5867
+ /* NumberInput Component Styles — one object: the field is the slider. */
5596
5868
  .mint-number-input {
5597
5869
  display: flex;
5598
- flex-direction: column;
5599
- gap: 0.375rem;
5600
5870
  max-width: 100%;
5601
5871
  }
5602
- /* ---------- Field wrapper (numeric input + steppers + optional unit) ---------- */
5872
+ /* ---------- Field wrapper (scrub area + steppers) ---------- */
5603
5873
  .mint-number-input__field {
5604
5874
  position: relative;
5605
5875
  display: flex;
5606
- align-items: center;
5876
+ flex: 1;
5877
+ min-width: 0;
5878
+ align-items: stretch;
5879
+ overflow: hidden;
5607
5880
  background-color: var(--bg-secondary);
5608
5881
  border: 1px solid var(--border-color);
5609
- border-radius: 0.5rem;
5882
+ border-radius: var(--radius);
5610
5883
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
5611
5884
  }
5612
5885
  .mint-number-input--sm .mint-number-input__field { min-height: var(--form-height-sm); }
@@ -5629,20 +5902,59 @@ code, pre {
5629
5902
  opacity: var(--mint-disabled-opacity);
5630
5903
  background-color: var(--bg-tertiary);
5631
5904
  }
5905
+ /* ---------- Scrub area: range fill (wash + rule) lives under the value ---------- */
5906
+ .mint-number-input__scrub {
5907
+ position: relative;
5908
+ display: flex;
5909
+ flex: 1;
5910
+ min-width: 0;
5911
+ align-items: center;
5912
+ gap: 0.375rem;
5913
+ }
5914
+ .mint-number-input--slider .mint-number-input__scrub {
5915
+ cursor: ew-resize;
5916
+ touch-action: none;
5917
+ }
5918
+ .mint-number-input--slider .mint-number-input__scrub:focus-visible {
5919
+ outline: none;
5920
+ box-shadow: inset var(--focus-ring-soft);
5921
+ }
5922
+ .mint-number-input__wash,
5923
+ .mint-number-input__rule {
5924
+ position: absolute;
5925
+ left: 0;
5926
+ bottom: 0;
5927
+ width: var(--mint-number-input-fill, 0%);
5928
+ pointer-events: none;
5929
+ transition: width 0.1s ease;
5930
+ }
5931
+ .mint-number-input__wash {
5932
+ top: 0;
5933
+ background: color-mix(in srgb, var(--color-primary) 9%, transparent);
5934
+ }
5935
+ .mint-number-input__rule {
5936
+ height: 2px;
5937
+ background: var(--color-primary);
5938
+ }
5632
5939
  /* ---------- Numeric input — left-aligned, Fira Code ---------- */
5633
5940
  .mint-number-input__input {
5941
+ position: relative;
5634
5942
  flex: 1;
5635
5943
  min-width: 0;
5944
+ width: 100%;
5636
5945
  text-align: left;
5637
5946
  background-color: transparent;
5638
5947
  color: var(--text-primary);
5639
5948
  border: none;
5640
5949
  outline: none;
5641
5950
  line-height: 1.25;
5642
- font-family: var(--font-mono, 'Fira Code', monospace);
5951
+ font-family: var(--font-mono);
5952
+ font-variant-numeric: tabular-nums;
5643
5953
  -webkit-appearance: textfield;
5644
5954
  -moz-appearance: textfield;
5645
5955
  appearance: textfield;
5956
+ cursor: ew-resize;
5957
+ touch-action: pan-y;
5646
5958
  }
5647
5959
  .mint-number-input__input::-webkit-outer-spin-button,
5648
5960
  .mint-number-input__input::-webkit-inner-spin-button {
@@ -5652,114 +5964,59 @@ code, pre {
5652
5964
  .mint-number-input__input:disabled { cursor: not-allowed; }
5653
5965
  /* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
5654
5966
  12px label indent aligns with the numeric text across all input types. */
5655
- .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.875rem; }
5967
+ .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.8125rem; }
5656
5968
  .mint-number-input__input--md { padding: 0.5rem 0.75rem; font-size: 0.875rem; }
5657
5969
  .mint-number-input__input--lg { padding: 0.75rem 1rem; font-size: 1rem; }
5658
5970
  /* ---------- Unit suffix ---------- */
5659
5971
  .mint-number-input__unit {
5660
- padding: 0 0.625rem 0 0;
5972
+ position: relative;
5973
+ flex-shrink: 0;
5974
+ padding-right: 0.5rem;
5661
5975
  color: var(--text-muted);
5662
- font-size: 0.8125rem;
5663
- font-family: var(--font-mono, 'Fira Code', monospace);
5976
+ font-size: 0.6875rem;
5977
+ font-family: var(--font-mono);
5664
5978
  user-select: none;
5665
5979
  white-space: nowrap;
5666
5980
  }
5667
- /* ---------- Steppers — hover/focus reveal ---------- */
5981
+ /* ---------- Steppers — always visible, horizontal, hairline-divided ---------- */
5668
5982
  .mint-number-input__steppers {
5669
5983
  display: flex;
5670
- flex-direction: column;
5671
- margin-right: 0.25rem;
5672
- opacity: 0;
5673
- transform: translateX(-2px);
5674
- transition: opacity 0.15s ease, transform 0.15s ease;
5675
- pointer-events: none;
5676
- }
5677
- .mint-number-input__field:hover .mint-number-input__steppers,
5678
- .mint-number-input__field:focus-within .mint-number-input__steppers {
5679
- opacity: 1;
5680
- transform: translateX(0);
5681
- pointer-events: auto;
5984
+ flex-shrink: 0;
5682
5985
  }
5683
5986
  .mint-number-input__stepper {
5684
5987
  display: flex;
5685
5988
  align-items: center;
5686
5989
  justify-content: center;
5687
- width: 1.125rem;
5688
- height: 0.875rem;
5990
+ width: 1.625rem;
5689
5991
  padding: 0;
5690
5992
  background: transparent;
5691
- color: var(--text-muted);
5993
+ color: var(--text-secondary-strong);
5692
5994
  border: none;
5995
+ border-left: 1px solid var(--border-color);
5693
5996
  cursor: pointer;
5694
- transition: color 0.1s ease;
5997
+ transition: background-color 0.12s ease, color 0.12s ease;
5695
5998
  }
5696
5999
  .mint-number-input__stepper:hover:not(:disabled) {
5697
- color: var(--color-primary);
6000
+ background: var(--color-primary-soft);
6001
+ color: var(--color-primary-hover);
5698
6002
  }
5699
6003
  .mint-number-input__stepper:disabled {
5700
- opacity: 0.35;
6004
+ color: var(--text-muted);
6005
+ opacity: 0.45;
5701
6006
  cursor: not-allowed;
5702
6007
  }
5703
6008
  .mint-number-input__stepper svg {
5704
6009
  width: 0.625rem;
5705
- height: 0.375rem;
6010
+ height: 0.625rem;
5706
6011
  }
5707
6012
  @media (prefers-reduced-motion: reduce) {
5708
- .mint-number-input__steppers {
6013
+ .mint-number-input__field,
6014
+ .mint-number-input__wash,
6015
+ .mint-number-input__rule,
6016
+ .mint-number-input__stepper {
5709
6017
  transition: none;
5710
- opacity: 1;
5711
- transform: none;
5712
- pointer-events: auto;
5713
6018
  }
5714
6019
  }
5715
- /* ---------- Slider (variant="slider" auto-activated by min+max) ---------- */
5716
- .mint-number-input__slider {
5717
- -webkit-appearance: none;
5718
- appearance: none;
5719
- width: 100%;
5720
- height: 4px;
5721
- background: linear-gradient(
5722
- to right,
5723
- var(--color-primary) 0%,
5724
- var(--color-primary) var(--mint-slider-fill, 0%),
5725
- var(--bg-tertiary) var(--mint-slider-fill, 0%),
5726
- var(--bg-tertiary) 100%
5727
- );
5728
- border-radius: 9999px;
5729
- outline: none;
5730
- cursor: pointer;
5731
- }
5732
- .mint-number-input__slider::-webkit-slider-thumb {
5733
- -webkit-appearance: none;
5734
- appearance: none;
5735
- width: 14px;
5736
- height: 14px;
5737
- background: var(--bg-secondary);
5738
- border: 2px solid var(--color-primary);
5739
- border-radius: 50%;
5740
- cursor: pointer;
5741
- box-shadow: var(--shadow-sm);
5742
- transition: transform 0.1s ease;
5743
- }
5744
- .mint-number-input__slider::-webkit-slider-thumb:hover {
5745
- transform: scale(1.12);
5746
- }
5747
- .mint-number-input__slider::-moz-range-thumb {
5748
- width: 14px;
5749
- height: 14px;
5750
- background: var(--bg-secondary);
5751
- border: 2px solid var(--color-primary);
5752
- border-radius: 50%;
5753
- cursor: pointer;
5754
- box-shadow: var(--shadow-sm);
5755
- }
5756
- .mint-number-input__slider:focus-visible {
5757
- box-shadow: var(--focus-ring-soft);
5758
- }
5759
- .mint-number-input__slider:disabled {
5760
- cursor: not-allowed;
5761
- opacity: var(--mint-disabled-opacity);
5762
- }
5763
6020
  /* PlateMapEditor Component Styles */
5764
6021
  .mint-plate-editor {
5765
6022
  display: flex;
@@ -6775,6 +7032,64 @@ button.mint-section-card__row:hover {
6775
7032
  height: 1rem;
6776
7033
  color: var(--text-muted);
6777
7034
  }
7035
+ .mint-searchable-select { position: relative; min-width: 0; }
7036
+ .mint-searchable-select__trigger {
7037
+ display: flex;
7038
+ align-items: center;
7039
+ width: 100%;
7040
+ min-height: var(--form-height-md);
7041
+ gap: 0.5rem;
7042
+ padding: 0.5rem 0.75rem;
7043
+ border: 1px solid var(--border-color);
7044
+ border-radius: var(--radius-md);
7045
+ background: var(--bg-secondary);
7046
+ color: var(--text-primary);
7047
+ font: inherit;
7048
+ font-size: 0.8125rem;
7049
+ cursor: pointer;
7050
+ transition: border-color 150ms ease, box-shadow 150ms ease;
7051
+ }
7052
+ .mint-searchable-select--sm .mint-searchable-select__trigger { min-height: var(--form-height-sm); padding: 0.3rem 0.5rem; font-size: 0.75rem; }
7053
+ .mint-searchable-select--lg .mint-searchable-select__trigger { min-height: var(--form-height-lg); padding: 0.75rem 1rem; font-size: 1rem; }
7054
+ .mint-searchable-select__trigger:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
7055
+ .mint-searchable-select__trigger:disabled { background: var(--bg-tertiary); cursor: not-allowed; opacity: var(--mint-disabled-opacity); }
7056
+ .mint-searchable-select__trigger svg { width: 1rem; height: 1rem; flex: none; color: var(--text-muted); }
7057
+ .mint-searchable-select__value { flex: 1; min-width: 0; overflow: hidden; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
7058
+ .mint-searchable-select__value--placeholder { color: var(--text-muted); }
7059
+ .mint-searchable-select__panel {
7060
+ position: absolute;
7061
+ top: calc(100% + 0.25rem);
7062
+ right: 0;
7063
+ left: 0;
7064
+ z-index: 30;
7065
+ display: flex;
7066
+ max-height: min(38rem, 80vh);
7067
+ flex-direction: column;
7068
+ overflow: hidden;
7069
+ border: 1px solid var(--border-color);
7070
+ border-radius: var(--radius-md);
7071
+ background: var(--bg-card);
7072
+ box-shadow: var(--shadow-lg);
7073
+ }
7074
+ .mint-searchable-select__search-wrap { position: relative; padding: 0.5rem; border-bottom: 1px solid var(--border-color); }
7075
+ .mint-searchable-select__search-wrap svg { position: absolute; top: 50%; left: 1rem; width: 0.875rem; height: 0.875rem; color: var(--text-muted); transform: translateY(-50%); pointer-events: none; }
7076
+ .mint-searchable-select__search { width: 100%; min-height: var(--form-height-sm); padding: 0.375rem 0.625rem 0.375rem 1.75rem; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-primary); color: var(--text-primary); font: inherit; font-size: 0.8125rem; box-sizing: border-box; }
7077
+ .mint-searchable-select__search:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
7078
+ .mint-searchable-select__list { min-height: 0; margin: 0; padding: 0.25rem; overflow-y: auto; list-style: none; }
7079
+ .mint-searchable-select__option { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0.5rem; border-radius: var(--radius-sm); color: var(--text-primary); cursor: pointer; }
7080
+ .mint-searchable-select__option--active { background: var(--bg-tertiary); }
7081
+ .mint-searchable-select__option--selected { background: var(--color-primary-soft); color: var(--text-primary); }
7082
+ .mint-searchable-select__option--disabled { cursor: not-allowed; opacity: 0.5; }
7083
+ .mint-searchable-select__option-text { display: flex; min-width: 0; flex: 1; flex-direction: column; }
7084
+ .mint-searchable-select__option-label { overflow: hidden; font-size: 0.75rem; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
7085
+ .mint-searchable-select__option-description { font-size: 0.625rem; line-height: 1.35; color: var(--text-muted); }
7086
+ .mint-searchable-select__option-meta { flex: none; padding: 0.0625rem 0.3125rem; border-radius: var(--radius-sm); background: var(--bg-secondary); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.5625rem; letter-spacing: 0.04em; text-transform: uppercase; }
7087
+ .mint-searchable-select__check { width: 1rem; height: 1rem; flex: none; }
7088
+ .mint-searchable-select__empty { padding: 1rem; text-align: center; color: var(--text-muted); font-size: 0.75rem; }
7089
+ .mint-searchable-select__footer { padding: 0.625rem; border-top: 1px solid var(--border-color); color: var(--text-secondary); font-size: 0.6875rem; }
7090
+ @media (prefers-reduced-motion: reduce) {
7091
+ .mint-searchable-select__trigger { transition: none; }
7092
+ }
6778
7093
  /* Skeleton Component Styles */
6779
7094
  /* ========================================================================
6780
7095
  Shimmer animation — background-position sweep
@@ -6882,22 +7197,13 @@ button.mint-section-card__row:hover {
6882
7197
  font-variant-numeric: tabular-nums;
6883
7198
  color: var(--text-secondary, #64748B);
6884
7199
  }
6885
- /* BaseTabs Component Styles */
7200
+ /* BaseTabs Component Styles — underline only; SegmentedControl owns the card look */
6886
7201
  .mint-tabs {
6887
7202
  display: flex;
6888
7203
  }
6889
7204
  .mint-tabs--underline {
6890
7205
  border-bottom: 1px solid var(--border-color);
6891
7206
  }
6892
- .mint-tabs--pills {
6893
- width: fit-content;
6894
- max-width: 100%;
6895
- gap: 0.5rem;
6896
- padding: 0.25rem;
6897
- background-color: var(--bg-tertiary);
6898
- border-radius: var(--radius-md);
6899
- overflow-x: auto;
6900
- }
6901
7207
  .mint-tab {
6902
7208
  padding: 0.5rem 1rem;
6903
7209
  font-size: 0.875rem;
@@ -6931,21 +7237,6 @@ button.mint-section-card__row:hover {
6931
7237
  border-bottom-color: var(--color-primary);
6932
7238
  color: var(--color-primary);
6933
7239
  }
6934
- /* Pills variant — visually identical to SegmentedControl card */
6935
- .mint-tabs--pills .mint-tab {
6936
- border-radius: var(--radius);
6937
- color: var(--text-muted);
6938
- background-color: transparent;
6939
- }
6940
- .mint-tabs--pills .mint-tab:hover:not(.mint-tab--disabled):not(.mint-tab--active) {
6941
- color: var(--text-primary);
6942
- background-color: var(--bg-hover);
6943
- }
6944
- .mint-tabs--pills .mint-tab--active {
6945
- background-color: var(--bg-card);
6946
- color: var(--text-primary);
6947
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
6948
- }
6949
7240
  /* Tab content */
6950
7241
  .mint-tab__content {
6951
7242
  display: flex;
@@ -6960,12 +7251,22 @@ button.mint-section-card__row:hover {
6960
7251
  height: 1rem;
6961
7252
  flex-shrink: 0;
6962
7253
  }
6963
- .mint-tab__badge {
6964
- margin-left: 0.25rem;
6965
- padding: 0.125rem 0.375rem;
6966
- font-size: 0.75rem;
6967
- border-radius: 9999px;
6968
- background-color: var(--color-primary-soft, rgba(99, 102, 241, 0.12));
7254
+ /* Mono count block */
7255
+ .mint-tab__badge {
7256
+ padding: 0.0625rem 0.25rem;
7257
+ border-radius: 0.1875rem;
7258
+ background-color: var(--bg-tertiary);
7259
+ color: var(--text-secondary);
7260
+ font-family: var(--font-mono);
7261
+ font-size: 0.625rem;
7262
+ font-weight: 600;
7263
+ font-variant-numeric: tabular-nums;
7264
+ }
7265
+ .mint-tab--active .mint-tab__badge {
7266
+ background-color: var(--color-primary-soft);
7267
+ color: var(--color-primary-hover);
7268
+ }
7269
+ html.dark .mint-tab--active .mint-tab__badge {
6969
7270
  color: var(--color-primary);
6970
7271
  }
6971
7272
  /* TagsInput Component Styles */
@@ -7206,7 +7507,7 @@ button.mint-section-card__row:hover {
7206
7507
  width: 100%;
7207
7508
  height: 100%;
7208
7509
  }
7209
- /* ToastNotification Component Styles */
7510
+ /* ToastNotification Component Styles — neutral surface, accent only on icon + TTL bar */
7210
7511
  .mint-toast__container {
7211
7512
  position: fixed;
7212
7513
  top: 1rem;
@@ -7220,48 +7521,136 @@ button.mint-section-card__row:hover {
7220
7521
  .mint-toast__item {
7221
7522
  position: relative;
7222
7523
  display: flex;
7223
- align-items: center;
7224
- gap: 0.5rem;
7225
- padding: 0.75rem 1rem;
7524
+ align-items: flex-start;
7525
+ gap: 0.625rem;
7526
+ width: 22rem;
7527
+ max-width: calc(100vw - 2rem);
7528
+ padding: 0.625rem 1.75rem 0.6875rem 0.75rem;
7226
7529
  border-radius: var(--radius-md);
7227
7530
  background-color: var(--bg-card);
7228
7531
  border: 1px solid var(--border-color);
7229
- border-left: 4px solid;
7230
- box-shadow: var(--shadow-md);
7532
+ box-shadow: var(--card-shadow);
7231
7533
  pointer-events: auto;
7232
7534
  cursor: pointer;
7233
- max-width: 24rem;
7234
7535
  overflow: hidden;
7235
7536
  }
7236
- /* Dark mode: near-black bg + white text — toast always contrasts with page */
7537
+ /* Dark mode: near-black bg so the toast always contrasts with the page */
7237
7538
  html.dark .mint-toast__item {
7238
- background-color: #0F172A;
7239
- border-color: rgba(255, 255, 255, 0.08);
7539
+ background-color: var(--bg-primary);
7540
+ }
7541
+ /* Severity reads from the icon and the TTL bar only */
7542
+ .mint-toast__item--success { --mint-toast-tone: var(--mint-success); }
7543
+ .mint-toast__item--error { --mint-toast-tone: var(--mint-error); }
7544
+ .mint-toast__item--warning { --mint-toast-tone: var(--mint-warning); }
7545
+ .mint-toast__item--info { --mint-toast-tone: var(--mint-info); }
7546
+ /* Collapsed stack: one offset sheet drawn with box-shadow, not a second node. */
7547
+ .mint-toast__item--stacked {
7548
+ box-shadow:
7549
+ 0 3px 0 -1px var(--bg-card),
7550
+ 0 3px 0 0 var(--border-color),
7551
+ var(--card-shadow);
7240
7552
  }
7241
7553
  .mint-toast__icon {
7242
7554
  width: 1rem;
7243
7555
  height: 1rem;
7244
7556
  flex-shrink: 0;
7557
+ margin-top: 0.0625rem;
7558
+ color: var(--mint-toast-tone);
7245
7559
  }
7246
- /* In dark mode, shift icons to 400-level (lighter) for contrast against near-black */
7247
- html.dark .mint-toast__item--success .mint-toast__icon { color: #34D399 !important; }
7248
- html.dark .mint-toast__item--error .mint-toast__icon { color: #F87171 !important; }
7249
- html.dark .mint-toast__item--warning .mint-toast__icon { color: #FBBF24 !important; }
7250
- html.dark .mint-toast__item--info .mint-toast__icon { color: #60A5FA !important; }
7251
- .mint-toast__message {
7252
- font-size: 0.875rem;
7253
- color: var(--text-primary);
7560
+ .mint-toast__body {
7254
7561
  flex: 1;
7255
7562
  min-width: 0;
7256
7563
  }
7257
- /* Light mode: keep semantic-colored message text (existing behavior) */
7258
- .mint-toast__item--success .mint-toast__message { color: var(--mint-success-hover); }
7259
- .mint-toast__item--error .mint-toast__message { color: var(--mint-error-hover); }
7260
- .mint-toast__item--warning .mint-toast__message { color: var(--mint-warning-hover); }
7261
- .mint-toast__item--info .mint-toast__message { color: var(--color-primary-hover); }
7262
- /* Dark mode: white text, accent stays on left stripe + icon */
7263
- html.dark .mint-toast__item .mint-toast__message {
7264
- color: #FFFFFF;
7564
+ .mint-toast__title {
7565
+ display: flex;
7566
+ align-items: center;
7567
+ gap: 0.5rem;
7568
+ font-size: 0.8125rem;
7569
+ font-weight: 600;
7570
+ line-height: 1.35;
7571
+ color: var(--text-primary);
7572
+ }
7573
+ .mint-toast__count {
7574
+ display: inline-flex;
7575
+ align-items: center;
7576
+ justify-content: center;
7577
+ flex-shrink: 0;
7578
+ min-width: 1.125rem;
7579
+ height: 1rem;
7580
+ padding: 0 0.25rem;
7581
+ border-radius: 0.1875rem;
7582
+ background: var(--bg-tertiary);
7583
+ color: var(--text-secondary);
7584
+ font-family: var(--font-mono);
7585
+ font-size: 0.625rem;
7586
+ font-weight: 600;
7587
+ font-variant-numeric: tabular-nums;
7588
+ }
7589
+ .mint-toast__detail {
7590
+ margin-top: 0.125rem;
7591
+ font-size: 0.75rem;
7592
+ line-height: 1.45;
7593
+ color: var(--text-secondary);
7594
+ }
7595
+ .mint-toast__actions {
7596
+ display: flex;
7597
+ align-items: center;
7598
+ gap: 0.5rem;
7599
+ margin-top: 0.4375rem;
7600
+ }
7601
+ .mint-toast__action {
7602
+ padding: 0.1875rem 0.5rem;
7603
+ border: 1px solid var(--border-color);
7604
+ border-radius: var(--radius-sm);
7605
+ background: var(--bg-secondary);
7606
+ font-family: inherit;
7607
+ font-size: 0.75rem;
7608
+ font-weight: 500;
7609
+ color: var(--text-secondary-strong);
7610
+ cursor: pointer;
7611
+ transition: background-color 0.12s ease, border-color 0.12s ease;
7612
+ }
7613
+ .mint-toast__action:hover {
7614
+ background: var(--bg-hover);
7615
+ border-color: var(--text-muted);
7616
+ }
7617
+ .mint-toast__action--primary {
7618
+ background: var(--color-primary);
7619
+ border-color: var(--color-primary);
7620
+ color: white;
7621
+ }
7622
+ .mint-toast__action--primary:hover {
7623
+ background: var(--color-primary-hover);
7624
+ border-color: var(--color-primary-hover);
7625
+ }
7626
+ .mint-toast__action:focus-visible,
7627
+ .mint-toast__close:focus-visible {
7628
+ outline: none;
7629
+ box-shadow: var(--focus-ring);
7630
+ }
7631
+ .mint-toast__close {
7632
+ position: absolute;
7633
+ top: 0.3125rem;
7634
+ right: 0.3125rem;
7635
+ display: flex;
7636
+ align-items: center;
7637
+ justify-content: center;
7638
+ width: 1.25rem;
7639
+ height: 1.25rem;
7640
+ border: 0;
7641
+ border-radius: var(--radius-sm);
7642
+ background: transparent;
7643
+ color: var(--text-muted);
7644
+ cursor: pointer;
7645
+ transition: color 0.12s ease, background-color 0.12s ease;
7646
+ }
7647
+ .mint-toast__close:hover {
7648
+ color: var(--text-primary);
7649
+ background: var(--bg-hover);
7650
+ }
7651
+ .mint-toast__close svg {
7652
+ width: 0.75rem;
7653
+ height: 0.75rem;
7265
7654
  }
7266
7655
  /* TTL progress bar — shrinks 100% → 0 over duration */
7267
7656
  .mint-toast__progress {
@@ -7270,14 +7659,22 @@ html.dark .mint-toast__item .mint-toast__message {
7270
7659
  bottom: 0;
7271
7660
  height: 2px;
7272
7661
  width: 100%;
7662
+ background: var(--mint-toast-tone);
7273
7663
  transform-origin: left center;
7274
7664
  animation: mint-toast-progress linear forwards;
7275
7665
  /* animation-duration set inline via toast.duration */
7276
7666
  }
7667
+ .mint-toast__progress--indeterminate {
7668
+ animation: mint-toast-indeterminate 1.4s ease-in-out infinite;
7669
+ }
7277
7670
  @keyframes mint-toast-progress {
7278
7671
  from { transform: scaleX(1); }
7279
7672
  to { transform: scaleX(0); }
7280
7673
  }
7674
+ @keyframes mint-toast-indeterminate {
7675
+ 0% { transform: translateX(-100%) scaleX(0.4); }
7676
+ 100% { transform: translateX(250%) scaleX(0.4); }
7677
+ }
7281
7678
  @media (prefers-reduced-motion: reduce) {
7282
7679
  .mint-toast__progress { animation: none; opacity: 0.4; }
7283
7680
  }
@@ -7576,6 +7973,13 @@ html.dark .mint-toast__item .mint-toast__message {
7576
7973
  box-shadow: 0 0 0 2px #10b981, 0 0 0 3px var(--bg-card);
7577
7974
  background-color: rgba(16, 185, 129, 0.2);
7578
7975
  }
7976
+ /* Optional semantic classes for `wellClass` callbacks. */
7977
+ .mint-well-plate__well--outlier {
7978
+ box-shadow: inset 0 0 0 1.6px var(--mint-warning);
7979
+ }
7980
+ .mint-well-plate__well--conflict {
7981
+ box-shadow: inset 0 0 0 1.6px var(--mint-error);
7982
+ }
7579
7983
  /* Draggable well — explicit -webkit-user-drag for Chrome inside <table> cells */
7580
7984
  .mint-well-plate__well--draggable {
7581
7985
  cursor: grab;
@@ -10595,13 +10999,17 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10595
10999
  border-radius: var(--radius);
10596
11000
  overflow: hidden;
10597
11001
  }
10598
- /* Card variant container - matches RFA design */
11002
+ /* Card variant container - matches RFA design.
11003
+ `width: fit-content` is load-bearing: `inline-grid` alone gets blockified and
11004
+ stretched when the control is a stretching flex/grid item. */
10599
11005
  .mint-segmented-control--card {
10600
- display: grid;
11006
+ display: inline-grid;
10601
11007
  grid-auto-flow: column;
10602
11008
  grid-auto-columns: 1fr;
10603
- gap: 0.25rem;
10604
- padding: 0.25rem;
11009
+ width: fit-content;
11010
+ max-width: 100%;
11011
+ gap: 0.1875rem;
11012
+ padding: 0.1875rem;
10605
11013
  border-radius: var(--radius-md);
10606
11014
  background-color: var(--bg-tertiary);
10607
11015
  overflow: visible;
@@ -10611,6 +11019,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10611
11019
  width: 100%;
10612
11020
  }
10613
11021
  .mint-segmented-control--card.mint-segmented-control--full-width {
11022
+ display: grid;
10614
11023
  width: 100%;
10615
11024
  }
10616
11025
  .mint-segmented-control--disabled {
@@ -10671,8 +11080,8 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10671
11080
  /* Card variant - matches RFA raised card design */
10672
11081
  .mint-segmented-control__option--card {
10673
11082
  flex: 1;
10674
- padding: 0.75rem 1rem;
10675
- gap: 0.25rem;
11083
+ padding: 0.5rem 0.75rem;
11084
+ gap: 0.0625rem;
10676
11085
  border: none;
10677
11086
  border-radius: var(--radius);
10678
11087
  background-color: transparent;
@@ -10685,7 +11094,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10685
11094
  .mint-segmented-control__option--card.mint-segmented-control__option--active {
10686
11095
  background-color: var(--bg-card);
10687
11096
  color: var(--text-primary);
10688
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
11097
+ box-shadow: var(--shadow-sm);
10689
11098
  }
10690
11099
  /* Size variants - simple */
10691
11100
  .mint-segmented-control__option--simple.mint-segmented-control__option--sm {
@@ -10705,13 +11114,13 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10705
11114
  }
10706
11115
  /* Size variants - card */
10707
11116
  .mint-segmented-control__option--card.mint-segmented-control__option--sm {
10708
- padding: 0.5rem 0.75rem;
11117
+ padding: 0.3125rem 0.625rem;
10709
11118
  }
10710
11119
  .mint-segmented-control__option--card.mint-segmented-control__option--md {
10711
- padding: 0.75rem 1rem;
11120
+ padding: 0.5rem 0.75rem;
10712
11121
  }
10713
11122
  .mint-segmented-control__option--card.mint-segmented-control__option--lg {
10714
- padding: 1rem 1.25rem;
11123
+ padding: 0.75rem 1rem;
10715
11124
  }
10716
11125
  /* Label */
10717
11126
  .mint-segmented-control__label {
@@ -10736,7 +11145,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10736
11145
  }
10737
11146
  /* Description color in active state - use text-muted for card variant, primary for simple */
10738
11147
  .mint-segmented-control__option--simple.mint-segmented-control__option--active .mint-segmented-control__description {
10739
- color: rgba(255, 255, 255, 0.8);
11148
+ color: color-mix(in srgb, white 80%, transparent);
10740
11149
  }
10741
11150
  .mint-segmented-control__option--card.mint-segmented-control__option--active .mint-segmented-control__description {
10742
11151
  color: var(--text-muted);
@@ -10940,46 +11349,49 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10940
11349
  padding: 0.375rem 0.75rem;
10941
11350
  font-size: 0.8125rem;
10942
11351
  }
11352
+ /* Semantic tones — every color resolves from a token. `--mint-pill-tone` is the
11353
+ accent (soft-tint background, dot, outline border); `--mint-pill-ink` the text. */
11354
+ .mint-pill--primary { --mint-pill-tone: var(--color-primary); --mint-pill-ink: var(--color-primary-hover); }
11355
+ .mint-pill--success { --mint-pill-tone: var(--mint-success); --mint-pill-ink: var(--mint-success-hover); }
11356
+ .mint-pill--warning { --mint-pill-tone: var(--mint-warning); --mint-pill-ink: var(--mint-warning-text); }
11357
+ .mint-pill--error { --mint-pill-tone: var(--mint-error); --mint-pill-ink: var(--mint-error-hover); }
11358
+ .mint-pill--info { --mint-pill-tone: var(--mint-info); --mint-pill-ink: color-mix(in srgb, var(--mint-info) 78%, black); }
11359
+ .mint-pill--neutral { --mint-pill-tone: var(--text-secondary); --mint-pill-ink: var(--text-secondary-strong); }
11360
+ html.dark .mint-pill--primary,
11361
+ html.dark .mint-pill--success,
11362
+ html.dark .mint-pill--warning,
11363
+ html.dark .mint-pill--error,
11364
+ html.dark .mint-pill--info {
11365
+ --mint-pill-ink: var(--mint-pill-tone);
11366
+ }
10943
11367
  /* Variants */
10944
11368
  .mint-pill--default,
10945
11369
  .mint-pill--neutral {
10946
11370
  background-color: var(--bg-tertiary);
10947
11371
  color: var(--text-secondary);
10948
11372
  }
10949
- .mint-pill--primary {
10950
- background-color: rgba(59, 130, 246, 0.1);
10951
- color: var(--color-primary);
10952
- }
10953
- html.dark .mint-pill--primary {
10954
- background-color: rgba(59, 130, 246, 0.2);
10955
- }
10956
- .mint-pill--success {
10957
- background-color: rgba(16, 185, 129, 0.1);
10958
- color: var(--mint-success);
10959
- }
10960
- html.dark .mint-pill--success {
10961
- background-color: rgba(16, 185, 129, 0.2);
10962
- }
10963
- .mint-pill--warning {
10964
- background-color: rgba(245, 158, 11, 0.1);
10965
- color: var(--mint-warning);
10966
- }
10967
- html.dark .mint-pill--warning {
10968
- background-color: rgba(245, 158, 11, 0.2);
10969
- }
10970
- .mint-pill--error {
10971
- background-color: rgba(239, 68, 68, 0.1);
10972
- color: var(--mint-error);
10973
- }
10974
- html.dark .mint-pill--error {
10975
- background-color: rgba(239, 68, 68, 0.2);
10976
- }
11373
+ .mint-pill--primary,
11374
+ .mint-pill--success,
11375
+ .mint-pill--warning,
11376
+ .mint-pill--error,
10977
11377
  .mint-pill--info {
10978
- background-color: rgba(59, 130, 246, 0.1);
10979
- color: var(--mint-info);
11378
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 12%, transparent);
11379
+ color: var(--mint-pill-ink);
10980
11380
  }
11381
+ html.dark .mint-pill--primary,
11382
+ html.dark .mint-pill--success,
11383
+ html.dark .mint-pill--warning,
11384
+ html.dark .mint-pill--error,
10981
11385
  html.dark .mint-pill--info {
10982
- background-color: rgba(59, 130, 246, 0.2);
11386
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 22%, transparent);
11387
+ }
11388
+ /* Status dot */
11389
+ .mint-pill__dot {
11390
+ flex-shrink: 0;
11391
+ width: 0.375rem;
11392
+ height: 0.375rem;
11393
+ border-radius: 9999px;
11394
+ background-color: var(--mint-pill-tone, currentColor);
10983
11395
  }
10984
11396
  /* ========================================================================
10985
11397
  Variant: Outline
@@ -10993,13 +11405,16 @@ html.dark .mint-pill--info {
10993
11405
  border: 1px solid var(--border-color);
10994
11406
  color: var(--text-secondary);
10995
11407
  }
10996
- .mint-pill--outline.mint-pill--neutral { border-color: var(--text-muted); color: var(--text-primary); }
10997
- .mint-pill--outline.mint-pill--primary { border-color: var(--color-primary); color: var(--color-primary); }
10998
- .mint-pill--outline.mint-pill--success { border-color: var(--mint-success); color: var(--mint-success); }
10999
- /* Warning text uses -hover (darker) so AA contrast holds on white; border uses the lighter primary warning tone. */
11000
- .mint-pill--outline.mint-pill--warning { border-color: var(--mint-warning); color: var(--mint-warning-hover); }
11001
- .mint-pill--outline.mint-pill--error { border-color: var(--mint-error); color: var(--mint-error); }
11002
- .mint-pill--outline.mint-pill--info { border-color: var(--mint-info); color: var(--mint-info); }
11408
+ .mint-pill--outline.mint-pill--neutral { border-color: var(--text-muted); color: var(--text-primary); }
11409
+ .mint-pill--outline.mint-pill--primary,
11410
+ .mint-pill--outline.mint-pill--success,
11411
+ .mint-pill--outline.mint-pill--warning,
11412
+ .mint-pill--outline.mint-pill--error,
11413
+ .mint-pill--outline.mint-pill--info {
11414
+ background-color: transparent;
11415
+ border-color: var(--mint-pill-tone);
11416
+ color: var(--mint-pill-ink);
11417
+ }
11003
11418
  /* Disabled */
11004
11419
  .mint-pill--disabled {
11005
11420
  opacity: var(--mint-disabled-opacity);
@@ -11050,10 +11465,7 @@ html.dark .mint-pill--info {
11050
11465
  }
11051
11466
  .mint-pill__remove:hover {
11052
11467
  opacity: 1;
11053
- background-color: rgba(0, 0, 0, 0.1);
11054
- }
11055
- html.dark .mint-pill__remove:hover {
11056
- background-color: rgba(255, 255, 255, 0.1);
11468
+ background-color: color-mix(in srgb, currentColor 12%, transparent);
11057
11469
  }
11058
11470
  .mint-pill__remove:focus-visible {
11059
11471
  outline: none;
@@ -12205,6 +12617,11 @@ html.dark .mint-dataframe__loading {
12205
12617
  align-items: center;
12206
12618
  gap: 2px;
12207
12619
  }
12620
+ .mint-rack-editor__tab-item {
12621
+ position: relative;
12622
+ display: flex;
12623
+ align-items: flex-end;
12624
+ }
12208
12625
  .mint-rack-editor__tab {
12209
12626
  position: relative;
12210
12627
  display: flex;
@@ -12217,7 +12634,7 @@ html.dark .mint-dataframe__loading {
12217
12634
  border-top-right-radius: 0.5rem;
12218
12635
  border: 1px solid transparent;
12219
12636
  cursor: grab;
12220
- transition: all 0.2s;
12637
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, opacity 0.2s;
12221
12638
  background: transparent;
12222
12639
  color: var(--text-muted);
12223
12640
  white-space: nowrap;
@@ -12229,6 +12646,10 @@ html.dark .mint-dataframe__loading {
12229
12646
  background-color: var(--bg-tertiary);
12230
12647
  color: var(--text-secondary);
12231
12648
  }
12649
+ .mint-rack-editor__tab:focus-visible {
12650
+ outline: 2px solid var(--color-primary);
12651
+ outline-offset: -2px;
12652
+ }
12232
12653
  .mint-rack-editor__tab--active {
12233
12654
  background-color: var(--bg-secondary);
12234
12655
  color: var(--text-primary);
@@ -12241,7 +12662,7 @@ html.dark .mint-dataframe__loading {
12241
12662
  opacity: 0.5;
12242
12663
  }
12243
12664
  .mint-rack-editor__tab--drag-over {
12244
- box-shadow: 0 0 0 2px #6366f1, 0 0 0 3px white;
12665
+ box-shadow: var(--focus-ring);
12245
12666
  }
12246
12667
  /* Slot color dot */
12247
12668
  .mint-rack-editor__slot-dot {
@@ -12259,8 +12680,8 @@ html.dark .mint-dataframe__loading {
12259
12680
  font-weight: 500;
12260
12681
  }
12261
12682
  .mint-rack-editor__count--active {
12262
- background-color: rgba(16, 185, 129, 0.15);
12263
- color: #10b981;
12683
+ background-color: color-mix(in srgb, var(--mint-success) 15%, transparent);
12684
+ color: var(--mint-success);
12264
12685
  }
12265
12686
  .mint-rack-editor__count--inactive {
12266
12687
  background-color: var(--bg-tertiary);
@@ -12279,19 +12700,28 @@ html.dark .mint-dataframe__loading {
12279
12700
  justify-content: center;
12280
12701
  font-size: 10px;
12281
12702
  font-weight: 700;
12282
- background-color: rgba(239, 68, 68, 0.9);
12703
+ background-color: color-mix(in srgb, var(--mint-error) 90%, transparent);
12283
12704
  color: white;
12284
12705
  border: none;
12285
12706
  cursor: pointer;
12286
12707
  opacity: 0;
12287
12708
  transition: opacity 0.15s, transform 0.15s;
12288
12709
  }
12289
- .mint-rack-editor__tab:hover .mint-rack-editor__tab-remove {
12710
+ .mint-rack-editor__tab-item:hover .mint-rack-editor__tab-remove,
12711
+ .mint-rack-editor__tab-item:focus-within .mint-rack-editor__tab-remove {
12290
12712
  opacity: 1;
12291
12713
  }
12292
12714
  .mint-rack-editor__tab-remove:hover {
12293
12715
  transform: scale(1.1);
12294
12716
  }
12717
+ .mint-rack-editor__tab-remove:focus-visible {
12718
+ opacity: 1;
12719
+ outline: 2px solid var(--color-primary);
12720
+ outline-offset: 2px;
12721
+ }
12722
+ @media (hover: none) {
12723
+ .mint-rack-editor__tab-remove { opacity: 1; }
12724
+ }
12295
12725
  /* Add rack button */
12296
12726
  .mint-rack-editor__add-btn {
12297
12727
  display: flex;
@@ -12303,14 +12733,14 @@ html.dark .mint-dataframe__loading {
12303
12733
  font-weight: 500;
12304
12734
  border-radius: var(--radius-md);
12305
12735
  cursor: pointer;
12306
- transition: all 0.2s;
12736
+ transition: background-color 0.2s, color 0.2s;
12307
12737
  border: none;
12308
12738
  background: transparent;
12309
12739
  color: var(--text-muted);
12310
12740
  }
12311
12741
  .mint-rack-editor__add-btn:hover {
12312
- background-color: rgba(16, 185, 129, 0.1);
12313
- color: #10b981;
12742
+ background-color: color-mix(in srgb, var(--mint-success) 10%, transparent);
12743
+ color: var(--mint-success);
12314
12744
  }
12315
12745
  /* Toolbar */
12316
12746
  .mint-rack-editor__toolbar {
@@ -13241,6 +13671,15 @@ html.dark .mint-dataframe__loading {
13241
13671
  border-radius: var(--radius-lg);
13242
13672
  overflow: hidden;
13243
13673
  }
13674
+ .mint-chart--frame {
13675
+ display: flex;
13676
+ flex-direction: column;
13677
+ height: 100%;
13678
+ min-height: 0;
13679
+ border: 0;
13680
+ border-radius: 0;
13681
+ background: var(--bg-card);
13682
+ }
13244
13683
  .mint-chart__header {
13245
13684
  display: flex;
13246
13685
  align-items: flex-start;
@@ -13279,6 +13718,38 @@ html.dark .mint-dataframe__loading {
13279
13718
  position: relative;
13280
13719
  min-height: 12rem;
13281
13720
  }
13721
+ .mint-chart--frame .mint-chart__header {
13722
+ align-items: center;
13723
+ gap: 0.5rem;
13724
+ padding: 0.625rem 0.875rem;
13725
+ flex-shrink: 0;
13726
+ }
13727
+ .mint-chart--frame .mint-chart__header-text {
13728
+ display: flex;
13729
+ align-items: center;
13730
+ gap: 0.5rem;
13731
+ }
13732
+ .mint-chart--frame .mint-chart__title {
13733
+ overflow: hidden;
13734
+ font-size: 0.8125rem;
13735
+ letter-spacing: -0.005em;
13736
+ text-overflow: ellipsis;
13737
+ white-space: nowrap;
13738
+ }
13739
+ .mint-chart--frame .mint-chart__description {
13740
+ margin-top: 0 !important;
13741
+ overflow: hidden;
13742
+ font-size: 0.75rem;
13743
+ text-overflow: ellipsis;
13744
+ white-space: nowrap;
13745
+ }
13746
+ .mint-chart--frame .mint-chart__toolbar {
13747
+ gap: 0.375rem;
13748
+ }
13749
+ .mint-chart--frame .mint-chart__body {
13750
+ flex: 1;
13751
+ min-height: 0;
13752
+ }
13282
13753
  .mint-chart__loading-overlay {
13283
13754
  position: absolute;
13284
13755
  inset: 0;
@@ -13288,12 +13759,50 @@ html.dark .mint-dataframe__loading {
13288
13759
  background-color: var(--bg-card);
13289
13760
  z-index: 1;
13290
13761
  }
13762
+ .mint-chart--frame .mint-chart__loading-overlay {
13763
+ z-index: 10;
13764
+ padding: 1.5rem;
13765
+ }
13766
+ .mint-chart--frame .mint-chart__body > .mint-empty-state {
13767
+ position: absolute;
13768
+ inset: 0;
13769
+ z-index: 10;
13770
+ max-width: none;
13771
+ padding: 1.5rem;
13772
+ background: var(--bg-card);
13773
+ }
13774
+ .mint-chart--frame .mint-empty-state__icon-wrapper {
13775
+ width: 2.5rem;
13776
+ height: 2.5rem;
13777
+ margin-bottom: 0.5rem;
13778
+ background: transparent;
13779
+ }
13780
+ .mint-chart--frame .mint-empty-state__title {
13781
+ font-size: 0.8125rem;
13782
+ }
13291
13783
  .mint-chart__legend {
13292
13784
  padding: 0.75rem 1.5rem;
13293
13785
  border-top: 1px solid var(--border-color);
13294
13786
  font-size: 0.8125rem;
13295
13787
  color: var(--text-secondary);
13296
13788
  }
13789
+ .mint-chart__footer {
13790
+ padding: 0.625rem 0.875rem;
13791
+ border-top: 1px solid var(--border-color);
13792
+ color: var(--text-secondary);
13793
+ font-size: 0.75rem;
13794
+ }
13795
+ .mint-chart--frame .mint-chart__footer {
13796
+ display: flex;
13797
+ align-items: center;
13798
+ gap: 0.75rem;
13799
+ padding: 0.4375rem 0.875rem;
13800
+ background: var(--bg-primary);
13801
+ color: var(--text-muted);
13802
+ font-family: var(--font-mono);
13803
+ font-size: 0.65625rem;
13804
+ flex-shrink: 0;
13805
+ }
13297
13806
  /* SettingsModal Component Styles
13298
13807
  Tab strip / rail / pane / footer chrome lives in BaseModal (modal.css);
13299
13808
  only pane content styles remain here. */
@@ -13414,16 +13923,42 @@ html.dark .mint-settings-modal__option-btn--active {
13414
13923
  }
13415
13924
  /* ChemicalFormula Component Styles */
13416
13925
  .mint-chem-formula {
13417
- display: inline;
13418
- font-family: Arial, Helvetica, sans-serif;
13926
+ display: inline-flex;
13927
+ align-items: baseline;
13928
+ gap: 0.25rem;
13929
+ max-width: 100%;
13930
+ font-family: var(--font-mono);
13931
+ font-weight: 600;
13419
13932
  color: var(--text-primary);
13420
- letter-spacing: 0.01em;
13933
+ letter-spacing: 0;
13934
+ white-space: nowrap;
13421
13935
  }
13422
13936
  .mint-chem-formula--block {
13423
- display: block;
13937
+ display: flex;
13424
13938
  font-size: 1.25em;
13425
13939
  padding: 0.25rem 0;
13426
13940
  }
13941
+ .mint-chem-formula--xs { font-size: 0.625rem; line-height: 1rem; }
13942
+ .mint-chem-formula--sm { font-size: 0.75rem; line-height: 1rem; }
13943
+ .mint-chem-formula--primary { color: var(--text-primary); }
13944
+ .mint-chem-formula--secondary { color: var(--text-secondary); }
13945
+ .mint-chem-formula--muted,
13946
+ .mint-chem-formula--empty { color: var(--text-muted); }
13947
+ .mint-chem-formula--pill {
13948
+ padding: 0.125rem 0.375rem;
13949
+ border-radius: 0.375rem;
13950
+ background: var(--bg-tertiary);
13951
+ }
13952
+ .mint-chem-formula--pill.mint-chem-formula--sm {
13953
+ padding: 0.125rem 0.625rem;
13954
+ border: 1px solid var(--border-color);
13955
+ border-radius: 999px;
13956
+ }
13957
+ .mint-chem-formula__formula {
13958
+ min-width: 0;
13959
+ overflow: hidden;
13960
+ text-overflow: ellipsis;
13961
+ }
13427
13962
  .mint-chem-formula__element {
13428
13963
  /* default styling inherited */
13429
13964
  }
@@ -15352,7 +15887,7 @@ html.dark .mint-settings-modal__option-btn--active {
15352
15887
  gap: 1.5rem;
15353
15888
  }
15354
15889
  .mint-form-builder--sm {
15355
- gap: 1rem;
15890
+ gap: 0.625rem;
15356
15891
  }
15357
15892
  .mint-form-builder--lg {
15358
15893
  gap: 2rem;