@morscherlab/mint-sdk 1.2.0 → 1.2.1

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 (99) 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-DOcCf0Vo.js} +39 -16
  4. package/dist/SettingsModal-DOcCf0Vo.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/FormField.test.d.ts +1 -0
  8. package/dist/__tests__/components/NumberInput.test.d.ts +1 -0
  9. package/dist/__tests__/composables/localFiles.test.d.ts +1 -0
  10. package/dist/__tests__/composables/usePickerSelection.test.d.ts +1 -0
  11. package/dist/__tests__/styles/tokenOnlyColors.test.d.ts +1 -0
  12. package/dist/components/AppSidebar.vue.d.ts +7 -7
  13. package/dist/components/BasePill.vue.d.ts +3 -0
  14. package/dist/components/BaseTabs.vue.d.ts +1 -4
  15. package/dist/components/FileUploader.vue.d.ts +3 -0
  16. package/dist/components/FormField.vue.d.ts +8 -1
  17. package/dist/components/PluginWorkspaceView.props.d.ts +3 -3
  18. package/dist/components/index.js +5 -5
  19. package/dist/{components-DIum5hkx.js → components-Cp8DcNrU.js} +472 -259
  20. package/dist/components-Cp8DcNrU.js.map +1 -0
  21. package/dist/composables/index.js +7 -7
  22. package/dist/composables/pluginWorkspaceModel.d.ts +0 -3
  23. package/dist/composables/useToast.d.ts +22 -1
  24. package/dist/{composables-mFXsTA4g.js → composables-D_4qqOlp.js} +6 -6
  25. package/dist/{composables-mFXsTA4g.js.map → composables-D_4qqOlp.js.map} +1 -1
  26. package/dist/index.js +10 -10
  27. package/dist/install.js +2 -2
  28. package/dist/styles.css +560 -303
  29. package/dist/templates/index.js +2 -2
  30. package/dist/{templates-CmGfmBRA.js → templates-Dd9bBSs6.js} +2 -2
  31. package/dist/{templates-CmGfmBRA.js.map → templates-Dd9bBSs6.js.map} +1 -1
  32. package/dist/types/components.d.ts +21 -0
  33. package/dist/types/form-builder.d.ts +2 -0
  34. package/dist/types/generated-ui.d.ts +2 -0
  35. package/dist/types/index.d.ts +1 -1
  36. package/dist/{useControlSchema-DldpxNOP.js → useControlSchema-BB2GRPhW.js} +151 -71
  37. package/dist/useControlSchema-BB2GRPhW.js.map +1 -0
  38. package/dist/{useExperimentSelector-CEcIaueJ.js → useExperimentSelector-G_CAOFTX.js} +2 -2
  39. package/dist/{useExperimentSelector-CEcIaueJ.js.map → useExperimentSelector-G_CAOFTX.js.map} +1 -1
  40. package/dist/{useFormBuilder-z5L_dUIy.js → useFormBuilder-BnGSdSRG.js} +2 -2
  41. package/dist/{useFormBuilder-z5L_dUIy.js.map → useFormBuilder-BnGSdSRG.js.map} +1 -1
  42. package/dist/{validation-uwoJGEb6.js → validation-CTxuzLIX.js} +21 -9
  43. package/dist/validation-CTxuzLIX.js.map +1 -0
  44. package/package.json +1 -1
  45. package/src/__tests__/components/AppSidebar.test.ts +84 -94
  46. package/src/__tests__/components/AppToastContainer.test.ts +55 -1
  47. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -21
  48. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -2
  49. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -2
  50. package/src/__tests__/components/FormBuilder.test.ts +26 -0
  51. package/src/__tests__/components/FormField.test.ts +26 -0
  52. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -0
  53. package/src/__tests__/components/NumberInput.test.ts +105 -0
  54. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +1 -2
  55. package/src/__tests__/components/PluginWorkspaceView.test.ts +1 -2
  56. package/src/__tests__/composables/localFiles.test.ts +57 -0
  57. package/src/__tests__/composables/usePickerSelection.test.ts +98 -0
  58. package/src/__tests__/generatedUi.test.ts +111 -0
  59. package/src/__tests__/styles/tokenOnlyColors.test.ts +16 -0
  60. package/src/components/AppLayout.story.vue +1 -1
  61. package/src/components/AppSidebar.story.vue +7 -10
  62. package/src/components/AppSidebar.vue +178 -58
  63. package/src/components/AppToastContainer.vue +65 -23
  64. package/src/components/BasePill.story.vue +2 -0
  65. package/src/components/BasePill.vue +4 -0
  66. package/src/components/BaseTabs.story.vue +0 -42
  67. package/src/components/BaseTabs.vue +3 -6
  68. package/src/components/FileUploader.vue +10 -1
  69. package/src/components/FormField.vue +10 -3
  70. package/src/components/GeneratedPathInput.vue +11 -7
  71. package/src/components/NumberInput.story.vue +32 -13
  72. package/src/components/NumberInput.vue +116 -55
  73. package/src/components/PluginWorkspaceView.props.ts +3 -3
  74. package/src/components/internal/FormFieldRendererInternal.vue +17 -0
  75. package/src/components/internal/WorkspaceSidebarInternal.vue +1 -2
  76. package/src/composables/filePicker/localFiles.ts +21 -14
  77. package/src/composables/filePicker/usePickerSelection.ts +15 -4
  78. package/src/composables/pluginWorkspaceModel.ts +0 -3
  79. package/src/composables/usePluginWorkspace.ts +1 -2
  80. package/src/composables/useToast.ts +21 -5
  81. package/src/generated/schema.ts +58 -18
  82. package/src/styles/components/app-sidebar.css +282 -121
  83. package/src/styles/components/form-builder.css +1 -1
  84. package/src/styles/components/form-field.css +28 -0
  85. package/src/styles/components/number-input.css +73 -91
  86. package/src/styles/components/pill.css +49 -51
  87. package/src/styles/components/segmented-control.css +16 -11
  88. package/src/styles/components/tabs.css +18 -34
  89. package/src/styles/components/toast.css +136 -27
  90. package/src/styles/variables.css +25 -5
  91. package/src/types/components.ts +23 -0
  92. package/src/types/form-builder.ts +2 -0
  93. package/src/types/generated-ui.ts +2 -0
  94. package/src/types/index.ts +2 -0
  95. package/dist/SettingsModal-BYR20I4c.js.map +0 -1
  96. package/dist/Skeleton-BAF3CKY7.js.map +0 -1
  97. package/dist/components-DIum5hkx.js.map +0 -1
  98. package/dist/useControlSchema-DldpxNOP.js.map +0 -1
  99. 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;
@@ -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
@@ -1792,6 +1809,8 @@ code, pre {
1792
1809
  border-right: none;
1793
1810
  border-left: 1px solid var(--border-color);
1794
1811
  }
1812
+ /* Floating shell — the platform's layout language. Kept as-is; only the
1813
+ nested per-section card inside it was removed. */
1795
1814
  .mint-sidebar--floating {
1796
1815
  position: absolute;
1797
1816
  top: 0;
@@ -1811,23 +1830,9 @@ code, pre {
1811
1830
  height: 100%;
1812
1831
  border-right: 1px solid var(--border-color);
1813
1832
  }
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
1833
  /* Header / Footer slots */
1829
1834
  .mint-sidebar__header {
1830
- padding: 0.75rem;
1835
+ padding: 0.625rem 0.875rem;
1831
1836
  flex-shrink: 0;
1832
1837
  display: flex;
1833
1838
  align-items: center;
@@ -1835,6 +1840,9 @@ code, pre {
1835
1840
  gap: 0.5rem;
1836
1841
  border-bottom: 1px solid var(--border-color);
1837
1842
  }
1843
+ .mint-sidebar--comfortable .mint-sidebar__header {
1844
+ padding: 0.875rem 1rem;
1845
+ }
1838
1846
  .mint-sidebar__heading {
1839
1847
  min-width: 0;
1840
1848
  display: flex;
@@ -1915,7 +1923,7 @@ code, pre {
1915
1923
  padding-inline: 0.5rem;
1916
1924
  }
1917
1925
  .mint-sidebar__footer {
1918
- padding: 0.75rem;
1926
+ padding: 0.625rem 0.875rem;
1919
1927
  flex-shrink: 0;
1920
1928
  border-top: 1px solid var(--border-color);
1921
1929
  }
@@ -1924,11 +1932,214 @@ code, pre {
1924
1932
  flex: 1 1 0;
1925
1933
  min-height: 0;
1926
1934
  overflow-y: auto;
1927
- padding: 0.75rem;
1928
1935
  display: flex;
1929
1936
  flex-direction: column;
1937
+ }
1938
+ /* ---------- Flat section groups: header rows separated by one hairline ---------- */
1939
+ .mint-sidebar__group {
1940
+ flex-shrink: 0;
1941
+ }
1942
+ .mint-sidebar__group + .mint-sidebar__group {
1943
+ border-top: 1px solid var(--border-light);
1944
+ }
1945
+ .mint-sidebar__group-head {
1946
+ display: flex;
1947
+ align-items: center;
1948
+ transition: background-color 120ms ease;
1949
+ }
1950
+ .mint-sidebar__group-head:hover {
1951
+ background: var(--bg-hover);
1952
+ }
1953
+ .mint-sidebar__group-toggle {
1954
+ flex: 1;
1955
+ min-width: 0;
1956
+ display: flex;
1957
+ align-items: center;
1930
1958
  gap: 0.5rem;
1959
+ min-height: 2.25rem;
1960
+ padding: 0.4375rem 0.5rem 0.4375rem 0.875rem;
1961
+ border: 0;
1962
+ background: transparent;
1963
+ cursor: pointer;
1964
+ text-align: left;
1965
+ font-family: inherit;
1966
+ }
1967
+ .mint-sidebar__group-toggle:focus-visible {
1968
+ outline: none;
1969
+ box-shadow: inset var(--focus-ring-soft);
1970
+ }
1971
+ .mint-sidebar__group-icon {
1972
+ display: flex;
1973
+ align-items: center;
1974
+ justify-content: center;
1975
+ flex-shrink: 0;
1976
+ width: 1.25rem;
1977
+ height: 1.25rem;
1978
+ border-radius: 0.3125rem;
1979
+ }
1980
+ .mint-sidebar__group-svg {
1981
+ width: 0.75rem;
1982
+ height: 0.75rem;
1983
+ }
1984
+ .mint-sidebar__group-text-icon {
1985
+ font-size: 0.75rem;
1986
+ line-height: 1;
1987
+ }
1988
+ .mint-sidebar__group-copy {
1989
+ flex: 1;
1990
+ min-width: 0;
1991
+ display: flex;
1992
+ align-items: baseline;
1993
+ gap: 0.4375rem;
1994
+ }
1995
+ .mint-sidebar__group-label {
1996
+ flex: 0 1 auto;
1997
+ min-width: max-content;
1998
+ overflow: hidden;
1999
+ color: var(--text-primary);
2000
+ font-size: 0.8125rem;
2001
+ font-weight: 600;
2002
+ line-height: 1.3;
2003
+ white-space: nowrap;
2004
+ text-overflow: ellipsis;
2005
+ transition: color 120ms ease;
2006
+ }
2007
+ .mint-sidebar__group--closed .mint-sidebar__group-label {
2008
+ color: var(--text-secondary);
2009
+ }
2010
+ /* Subtitle carries file names and parameter values, not prose: mono, and the
2011
+ disposable half when the row truncates. */
2012
+ .mint-sidebar__group-subtitle {
2013
+ flex-shrink: 1;
2014
+ min-width: 0;
2015
+ overflow: hidden;
2016
+ color: var(--text-muted);
2017
+ font-family: var(--font-mono);
2018
+ font-size: 0.6875rem;
2019
+ line-height: 1.3;
2020
+ white-space: nowrap;
2021
+ text-overflow: ellipsis;
2022
+ }
2023
+ .mint-sidebar__group-tail {
2024
+ display: flex;
2025
+ align-items: center;
2026
+ flex-shrink: 0;
2027
+ gap: 0.375rem;
2028
+ padding-right: 0.625rem;
2029
+ }
2030
+ .mint-sidebar__tag {
2031
+ display: inline-flex;
2032
+ align-items: center;
2033
+ justify-content: center;
2034
+ min-width: 1.125rem;
2035
+ height: 1rem;
2036
+ padding: 0 0.25rem;
2037
+ border-radius: 0.1875rem;
2038
+ background: color-mix(in srgb, var(--mint-sidebar-tone) 14%, transparent);
2039
+ color: var(--mint-sidebar-tone);
2040
+ font-family: var(--font-mono);
2041
+ font-size: 0.625rem;
2042
+ font-weight: 600;
2043
+ line-height: 1;
2044
+ font-variant-numeric: tabular-nums;
2045
+ }
2046
+ .mint-sidebar__group-action,
2047
+ .mint-sidebar__chevron-button {
2048
+ display: inline-flex;
2049
+ align-items: center;
2050
+ justify-content: center;
2051
+ width: 1.25rem;
2052
+ height: 1.25rem;
2053
+ padding: 0;
2054
+ border: 0;
2055
+ border-radius: var(--radius-sm);
2056
+ background: transparent;
2057
+ color: var(--text-muted);
2058
+ cursor: pointer;
2059
+ transition: color 120ms ease, background-color 120ms ease;
2060
+ }
2061
+ .mint-sidebar__group-action {
2062
+ color: var(--mint-sidebar-tone, var(--text-secondary));
2063
+ }
2064
+ .mint-sidebar__group-action:hover:not(:disabled),
2065
+ .mint-sidebar__chevron-button:hover:not(:disabled) {
2066
+ color: var(--text-primary);
2067
+ background: var(--bg-tertiary);
2068
+ }
2069
+ .mint-sidebar__group-action:focus-visible,
2070
+ .mint-sidebar__chevron-button:focus-visible {
2071
+ outline: none;
2072
+ box-shadow: var(--focus-ring);
2073
+ }
2074
+ .mint-sidebar__group-action:disabled {
2075
+ opacity: var(--mint-disabled-opacity);
2076
+ cursor: not-allowed;
2077
+ }
2078
+ .mint-sidebar__group-action-icon,
2079
+ .mint-sidebar__chevron {
2080
+ width: 0.75rem;
2081
+ height: 0.75rem;
2082
+ }
2083
+ .mint-sidebar__chevron {
2084
+ transition: transform 180ms var(--mint-ease-out-quart);
2085
+ }
2086
+ .mint-sidebar__chevron--open {
2087
+ transform: rotate(180deg);
2088
+ }
2089
+ /* Inline enable switch: 26×15 track, 11px knob. */
2090
+ .mint-sidebar__switch {
2091
+ position: relative;
2092
+ display: inline-block;
2093
+ flex-shrink: 0;
2094
+ width: 26px;
2095
+ height: 15px;
2096
+ padding: 0;
2097
+ border: 0;
2098
+ border-radius: 9999px;
2099
+ background: var(--bg-tertiary);
2100
+ cursor: pointer;
2101
+ transition: background-color 150ms ease;
2102
+ }
2103
+ .mint-sidebar__switch--on {
2104
+ background: var(--color-primary);
2105
+ }
2106
+ .mint-sidebar__switch:focus-visible {
2107
+ outline: none;
2108
+ box-shadow: var(--focus-ring-offset);
1931
2109
  }
2110
+ .mint-sidebar__switch-knob {
2111
+ position: absolute;
2112
+ top: 2px;
2113
+ left: 2px;
2114
+ width: 11px;
2115
+ height: 11px;
2116
+ border-radius: 9999px;
2117
+ background: white;
2118
+ box-shadow: var(--shadow-sm);
2119
+ transition: left 180ms var(--mint-ease-out-quart);
2120
+ }
2121
+ .mint-sidebar__switch--on .mint-sidebar__switch-knob {
2122
+ left: 13px;
2123
+ }
2124
+ .mint-sidebar__group-body {
2125
+ display: flex;
2126
+ flex-direction: column;
2127
+ gap: 0.625rem;
2128
+ padding: 0.125rem 0.875rem 0.75rem;
2129
+ }
2130
+ /* Comfortable density: the old roomier spacing as an opt-in. */
2131
+ .mint-sidebar--comfortable .mint-sidebar__group-toggle {
2132
+ min-height: 2.625rem;
2133
+ padding: 0.625rem 0.5rem 0.625rem 1rem;
2134
+ }
2135
+ .mint-sidebar--comfortable .mint-sidebar__group-tail {
2136
+ padding-right: 0.75rem;
2137
+ }
2138
+ .mint-sidebar--comfortable .mint-sidebar__group-body {
2139
+ gap: 0.875rem;
2140
+ padding: 0.25rem 1rem 1rem;
2141
+ }
2142
+ /* ---------- Collapsed rail ---------- */
1932
2143
  .mint-sidebar__collapsed {
1933
2144
  flex: 1 1 0;
1934
2145
  min-height: 0;
@@ -1994,7 +2205,7 @@ code, pre {
1994
2205
  height: 1rem;
1995
2206
  padding: 0 0.25rem;
1996
2207
  border-radius: 9999px;
1997
- background: var(--mint-sidebar-rail-badge-color);
2208
+ background: var(--mint-sidebar-tone);
1998
2209
  color: white;
1999
2210
  font-size: 0.625rem;
2000
2211
  font-weight: 700;
@@ -2002,97 +2213,44 @@ code, pre {
2002
2213
  text-align: center;
2003
2214
  font-variant-numeric: tabular-nums;
2004
2215
  }
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);
2216
+ /* Semantic tones shared by the rail badge, the inline tag and section actions. */
2217
+ .mint-sidebar__rail-badge--primary,
2218
+ .mint-sidebar__tag--primary,
2219
+ .mint-sidebar__group-action--primary {
2220
+ --mint-sidebar-tone: var(--color-primary);
2013
2221
  }
2014
- .mint-sidebar__rail-badge--warning {
2015
- --mint-sidebar-rail-badge-color: var(--mint-warning);
2222
+ .mint-sidebar__rail-badge--cta,
2223
+ .mint-sidebar__tag--cta,
2224
+ .mint-sidebar__group-action--cta {
2225
+ --mint-sidebar-tone: var(--color-cta);
2016
2226
  }
2017
- .mint-sidebar__rail-badge--error {
2018
- --mint-sidebar-rail-badge-color: var(--mint-error);
2227
+ .mint-sidebar__rail-badge--success,
2228
+ .mint-sidebar__tag--success,
2229
+ .mint-sidebar__group-action--success {
2230
+ --mint-sidebar-tone: var(--mint-success);
2019
2231
  }
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;
2232
+ .mint-sidebar__rail-badge--warning,
2233
+ .mint-sidebar__tag--warning,
2234
+ .mint-sidebar__group-action--warning {
2235
+ --mint-sidebar-tone: var(--mint-warning);
2030
2236
  }
2031
- .mint-sidebar--dense .mint-sidebar__sections > .mint-collapsible-card {
2032
- box-shadow: none;
2033
- border-color: var(--border-light);
2034
- }
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);
2042
- }
2043
- .mint-sidebar--analysis .mint-sidebar__sections > .mint-collapsible-card {
2044
- border-color: var(--border-color);
2045
- border-radius: var(--radius-lg);
2046
- }
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);
2055
- }
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;
2237
+ .mint-sidebar__tag--warning {
2238
+ color: var(--mint-warning-text);
2075
2239
  }
2076
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-track {
2077
- width: 1.75rem;
2078
- height: 1rem;
2240
+ .mint-sidebar__rail-badge--error,
2241
+ .mint-sidebar__tag--error,
2242
+ .mint-sidebar__group-action--error {
2243
+ --mint-sidebar-tone: var(--mint-error);
2079
2244
  }
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;
2245
+ .mint-sidebar__rail-badge--info,
2246
+ .mint-sidebar__tag--info,
2247
+ .mint-sidebar__group-action--info {
2248
+ --mint-sidebar-tone: var(--mint-info);
2087
2249
  }
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;
2250
+ .mint-sidebar__rail-badge--neutral,
2251
+ .mint-sidebar__tag--neutral,
2252
+ .mint-sidebar__group-action--neutral {
2253
+ --mint-sidebar-tone: var(--text-secondary);
2096
2254
  }
2097
2255
  .mint-sidebar__footer--collapsed {
2098
2256
  padding: 0.5rem;
@@ -2100,7 +2258,10 @@ code, pre {
2100
2258
  @media (prefers-reduced-motion: reduce) {
2101
2259
  .mint-sidebar,
2102
2260
  .mint-sidebar__rail-item,
2103
- .mint-sidebar__rail-icon {
2261
+ .mint-sidebar__rail-icon,
2262
+ .mint-sidebar__chevron,
2263
+ .mint-sidebar__switch,
2264
+ .mint-sidebar__switch-knob {
2104
2265
  transition: none;
2105
2266
  }
2106
2267
 
@@ -3982,6 +4143,29 @@ code, pre {
3982
4143
  flex-direction: column;
3983
4144
  gap: 0.375rem;
3984
4145
  }
4146
+ /* Row layout: label left, control in a fixed 120px column. For numbers, toggles
4147
+ and short enums; anything that would truncate in 120px stays stacked. */
4148
+ .mint-form-field--row {
4149
+ flex-direction: row;
4150
+ align-items: center;
4151
+ justify-content: space-between;
4152
+ gap: 0.75rem;
4153
+ }
4154
+ .mint-form-field--row .mint-form-field__label-row {
4155
+ flex: 1;
4156
+ min-width: 0;
4157
+ }
4158
+ .mint-form-field--row .mint-form-field__label {
4159
+ letter-spacing: 0.04em;
4160
+ }
4161
+ .mint-form-field--row .mint-form-field__control {
4162
+ flex: 0 0 7.5rem;
4163
+ min-width: 0;
4164
+ }
4165
+ .mint-form-field--row .mint-form-field__error,
4166
+ .mint-form-field--row .mint-form-field__hint {
4167
+ flex-basis: 100%;
4168
+ }
3985
4169
  .mint-form-field__label-row {
3986
4170
  display: flex;
3987
4171
  align-items: baseline;
@@ -5592,21 +5776,22 @@ code, pre {
5592
5776
  max-height: 60vh;
5593
5777
  }
5594
5778
  }
5595
- /* NumberInput Component Styles */
5779
+ /* NumberInput Component Styles — one object: the field is the slider. */
5596
5780
  .mint-number-input {
5597
5781
  display: flex;
5598
- flex-direction: column;
5599
- gap: 0.375rem;
5600
5782
  max-width: 100%;
5601
5783
  }
5602
- /* ---------- Field wrapper (numeric input + steppers + optional unit) ---------- */
5784
+ /* ---------- Field wrapper (scrub area + steppers) ---------- */
5603
5785
  .mint-number-input__field {
5604
5786
  position: relative;
5605
5787
  display: flex;
5606
- align-items: center;
5788
+ flex: 1;
5789
+ min-width: 0;
5790
+ align-items: stretch;
5791
+ overflow: hidden;
5607
5792
  background-color: var(--bg-secondary);
5608
5793
  border: 1px solid var(--border-color);
5609
- border-radius: 0.5rem;
5794
+ border-radius: var(--radius);
5610
5795
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
5611
5796
  }
5612
5797
  .mint-number-input--sm .mint-number-input__field { min-height: var(--form-height-sm); }
@@ -5629,17 +5814,54 @@ code, pre {
5629
5814
  opacity: var(--mint-disabled-opacity);
5630
5815
  background-color: var(--bg-tertiary);
5631
5816
  }
5817
+ /* ---------- Scrub area: range fill (wash + rule) lives under the value ---------- */
5818
+ .mint-number-input__scrub {
5819
+ position: relative;
5820
+ display: flex;
5821
+ flex: 1;
5822
+ min-width: 0;
5823
+ align-items: center;
5824
+ gap: 0.375rem;
5825
+ }
5826
+ .mint-number-input--slider .mint-number-input__scrub {
5827
+ cursor: ew-resize;
5828
+ touch-action: none;
5829
+ }
5830
+ .mint-number-input--slider .mint-number-input__scrub:focus-visible {
5831
+ outline: none;
5832
+ box-shadow: inset var(--focus-ring-soft);
5833
+ }
5834
+ .mint-number-input__wash,
5835
+ .mint-number-input__rule {
5836
+ position: absolute;
5837
+ left: 0;
5838
+ bottom: 0;
5839
+ width: var(--mint-number-input-fill, 0%);
5840
+ pointer-events: none;
5841
+ transition: width 0.1s ease;
5842
+ }
5843
+ .mint-number-input__wash {
5844
+ top: 0;
5845
+ background: color-mix(in srgb, var(--color-primary) 9%, transparent);
5846
+ }
5847
+ .mint-number-input__rule {
5848
+ height: 2px;
5849
+ background: var(--color-primary);
5850
+ }
5632
5851
  /* ---------- Numeric input — left-aligned, Fira Code ---------- */
5633
5852
  .mint-number-input__input {
5853
+ position: relative;
5634
5854
  flex: 1;
5635
5855
  min-width: 0;
5856
+ width: 100%;
5636
5857
  text-align: left;
5637
5858
  background-color: transparent;
5638
5859
  color: var(--text-primary);
5639
5860
  border: none;
5640
5861
  outline: none;
5641
5862
  line-height: 1.25;
5642
- font-family: var(--font-mono, 'Fira Code', monospace);
5863
+ font-family: var(--font-mono);
5864
+ font-variant-numeric: tabular-nums;
5643
5865
  -webkit-appearance: textfield;
5644
5866
  -moz-appearance: textfield;
5645
5867
  appearance: textfield;
@@ -5652,114 +5874,59 @@ code, pre {
5652
5874
  .mint-number-input__input:disabled { cursor: not-allowed; }
5653
5875
  /* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
5654
5876
  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; }
5877
+ .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.8125rem; }
5656
5878
  .mint-number-input__input--md { padding: 0.5rem 0.75rem; font-size: 0.875rem; }
5657
5879
  .mint-number-input__input--lg { padding: 0.75rem 1rem; font-size: 1rem; }
5658
5880
  /* ---------- Unit suffix ---------- */
5659
5881
  .mint-number-input__unit {
5660
- padding: 0 0.625rem 0 0;
5882
+ position: relative;
5883
+ flex-shrink: 0;
5884
+ padding-right: 0.5rem;
5661
5885
  color: var(--text-muted);
5662
- font-size: 0.8125rem;
5663
- font-family: var(--font-mono, 'Fira Code', monospace);
5886
+ font-size: 0.6875rem;
5887
+ font-family: var(--font-mono);
5664
5888
  user-select: none;
5665
5889
  white-space: nowrap;
5666
5890
  }
5667
- /* ---------- Steppers — hover/focus reveal ---------- */
5891
+ /* ---------- Steppers — always visible, horizontal, hairline-divided ---------- */
5668
5892
  .mint-number-input__steppers {
5669
5893
  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;
5894
+ flex-shrink: 0;
5682
5895
  }
5683
5896
  .mint-number-input__stepper {
5684
5897
  display: flex;
5685
5898
  align-items: center;
5686
5899
  justify-content: center;
5687
- width: 1.125rem;
5688
- height: 0.875rem;
5900
+ width: 1.625rem;
5689
5901
  padding: 0;
5690
5902
  background: transparent;
5691
- color: var(--text-muted);
5903
+ color: var(--text-secondary-strong);
5692
5904
  border: none;
5905
+ border-left: 1px solid var(--border-color);
5693
5906
  cursor: pointer;
5694
- transition: color 0.1s ease;
5907
+ transition: background-color 0.12s ease, color 0.12s ease;
5695
5908
  }
5696
5909
  .mint-number-input__stepper:hover:not(:disabled) {
5697
- color: var(--color-primary);
5910
+ background: var(--color-primary-soft);
5911
+ color: var(--color-primary-hover);
5698
5912
  }
5699
5913
  .mint-number-input__stepper:disabled {
5700
- opacity: 0.35;
5914
+ color: var(--text-muted);
5915
+ opacity: 0.45;
5701
5916
  cursor: not-allowed;
5702
5917
  }
5703
5918
  .mint-number-input__stepper svg {
5704
5919
  width: 0.625rem;
5705
- height: 0.375rem;
5920
+ height: 0.625rem;
5706
5921
  }
5707
5922
  @media (prefers-reduced-motion: reduce) {
5708
- .mint-number-input__steppers {
5923
+ .mint-number-input__field,
5924
+ .mint-number-input__wash,
5925
+ .mint-number-input__rule,
5926
+ .mint-number-input__stepper {
5709
5927
  transition: none;
5710
- opacity: 1;
5711
- transform: none;
5712
- pointer-events: auto;
5713
5928
  }
5714
5929
  }
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
5930
  /* PlateMapEditor Component Styles */
5764
5931
  .mint-plate-editor {
5765
5932
  display: flex;
@@ -6882,22 +7049,13 @@ button.mint-section-card__row:hover {
6882
7049
  font-variant-numeric: tabular-nums;
6883
7050
  color: var(--text-secondary, #64748B);
6884
7051
  }
6885
- /* BaseTabs Component Styles */
7052
+ /* BaseTabs Component Styles — underline only; SegmentedControl owns the card look */
6886
7053
  .mint-tabs {
6887
7054
  display: flex;
6888
7055
  }
6889
7056
  .mint-tabs--underline {
6890
7057
  border-bottom: 1px solid var(--border-color);
6891
7058
  }
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
7059
  .mint-tab {
6902
7060
  padding: 0.5rem 1rem;
6903
7061
  font-size: 0.875rem;
@@ -6931,21 +7089,6 @@ button.mint-section-card__row:hover {
6931
7089
  border-bottom-color: var(--color-primary);
6932
7090
  color: var(--color-primary);
6933
7091
  }
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
7092
  /* Tab content */
6950
7093
  .mint-tab__content {
6951
7094
  display: flex;
@@ -6960,12 +7103,22 @@ button.mint-section-card__row:hover {
6960
7103
  height: 1rem;
6961
7104
  flex-shrink: 0;
6962
7105
  }
7106
+ /* Mono count block */
6963
7107
  .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));
7108
+ padding: 0.0625rem 0.25rem;
7109
+ border-radius: 0.1875rem;
7110
+ background-color: var(--bg-tertiary);
7111
+ color: var(--text-secondary);
7112
+ font-family: var(--font-mono);
7113
+ font-size: 0.625rem;
7114
+ font-weight: 600;
7115
+ font-variant-numeric: tabular-nums;
7116
+ }
7117
+ .mint-tab--active .mint-tab__badge {
7118
+ background-color: var(--color-primary-soft);
7119
+ color: var(--color-primary-hover);
7120
+ }
7121
+ html.dark .mint-tab--active .mint-tab__badge {
6969
7122
  color: var(--color-primary);
6970
7123
  }
6971
7124
  /* TagsInput Component Styles */
@@ -7206,7 +7359,7 @@ button.mint-section-card__row:hover {
7206
7359
  width: 100%;
7207
7360
  height: 100%;
7208
7361
  }
7209
- /* ToastNotification Component Styles */
7362
+ /* ToastNotification Component Styles — neutral surface, accent only on icon + TTL bar */
7210
7363
  .mint-toast__container {
7211
7364
  position: fixed;
7212
7365
  top: 1rem;
@@ -7220,48 +7373,136 @@ button.mint-section-card__row:hover {
7220
7373
  .mint-toast__item {
7221
7374
  position: relative;
7222
7375
  display: flex;
7223
- align-items: center;
7224
- gap: 0.5rem;
7225
- padding: 0.75rem 1rem;
7376
+ align-items: flex-start;
7377
+ gap: 0.625rem;
7378
+ width: 22rem;
7379
+ max-width: calc(100vw - 2rem);
7380
+ padding: 0.625rem 1.75rem 0.6875rem 0.75rem;
7226
7381
  border-radius: var(--radius-md);
7227
7382
  background-color: var(--bg-card);
7228
7383
  border: 1px solid var(--border-color);
7229
- border-left: 4px solid;
7230
- box-shadow: var(--shadow-md);
7384
+ box-shadow: var(--card-shadow);
7231
7385
  pointer-events: auto;
7232
7386
  cursor: pointer;
7233
- max-width: 24rem;
7234
7387
  overflow: hidden;
7235
7388
  }
7236
- /* Dark mode: near-black bg + white text — toast always contrasts with page */
7389
+ /* Dark mode: near-black bg so the toast always contrasts with the page */
7237
7390
  html.dark .mint-toast__item {
7238
- background-color: #0F172A;
7239
- border-color: rgba(255, 255, 255, 0.08);
7391
+ background-color: var(--bg-primary);
7392
+ }
7393
+ /* Severity reads from the icon and the TTL bar only */
7394
+ .mint-toast__item--success { --mint-toast-tone: var(--mint-success); }
7395
+ .mint-toast__item--error { --mint-toast-tone: var(--mint-error); }
7396
+ .mint-toast__item--warning { --mint-toast-tone: var(--mint-warning); }
7397
+ .mint-toast__item--info { --mint-toast-tone: var(--mint-info); }
7398
+ /* Collapsed stack: one offset sheet drawn with box-shadow, not a second node. */
7399
+ .mint-toast__item--stacked {
7400
+ box-shadow:
7401
+ 0 3px 0 -1px var(--bg-card),
7402
+ 0 3px 0 0 var(--border-color),
7403
+ var(--card-shadow);
7240
7404
  }
7241
7405
  .mint-toast__icon {
7242
7406
  width: 1rem;
7243
7407
  height: 1rem;
7244
7408
  flex-shrink: 0;
7409
+ margin-top: 0.0625rem;
7410
+ color: var(--mint-toast-tone);
7245
7411
  }
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);
7412
+ .mint-toast__body {
7254
7413
  flex: 1;
7255
7414
  min-width: 0;
7256
7415
  }
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;
7416
+ .mint-toast__title {
7417
+ display: flex;
7418
+ align-items: center;
7419
+ gap: 0.5rem;
7420
+ font-size: 0.8125rem;
7421
+ font-weight: 600;
7422
+ line-height: 1.35;
7423
+ color: var(--text-primary);
7424
+ }
7425
+ .mint-toast__count {
7426
+ display: inline-flex;
7427
+ align-items: center;
7428
+ justify-content: center;
7429
+ flex-shrink: 0;
7430
+ min-width: 1.125rem;
7431
+ height: 1rem;
7432
+ padding: 0 0.25rem;
7433
+ border-radius: 0.1875rem;
7434
+ background: var(--bg-tertiary);
7435
+ color: var(--text-secondary);
7436
+ font-family: var(--font-mono);
7437
+ font-size: 0.625rem;
7438
+ font-weight: 600;
7439
+ font-variant-numeric: tabular-nums;
7440
+ }
7441
+ .mint-toast__detail {
7442
+ margin-top: 0.125rem;
7443
+ font-size: 0.75rem;
7444
+ line-height: 1.45;
7445
+ color: var(--text-secondary);
7446
+ }
7447
+ .mint-toast__actions {
7448
+ display: flex;
7449
+ align-items: center;
7450
+ gap: 0.5rem;
7451
+ margin-top: 0.4375rem;
7452
+ }
7453
+ .mint-toast__action {
7454
+ padding: 0.1875rem 0.5rem;
7455
+ border: 1px solid var(--border-color);
7456
+ border-radius: var(--radius-sm);
7457
+ background: var(--bg-secondary);
7458
+ font-family: inherit;
7459
+ font-size: 0.75rem;
7460
+ font-weight: 500;
7461
+ color: var(--text-secondary-strong);
7462
+ cursor: pointer;
7463
+ transition: background-color 0.12s ease, border-color 0.12s ease;
7464
+ }
7465
+ .mint-toast__action:hover {
7466
+ background: var(--bg-hover);
7467
+ border-color: var(--text-muted);
7468
+ }
7469
+ .mint-toast__action--primary {
7470
+ background: var(--color-primary);
7471
+ border-color: var(--color-primary);
7472
+ color: white;
7473
+ }
7474
+ .mint-toast__action--primary:hover {
7475
+ background: var(--color-primary-hover);
7476
+ border-color: var(--color-primary-hover);
7477
+ }
7478
+ .mint-toast__action:focus-visible,
7479
+ .mint-toast__close:focus-visible {
7480
+ outline: none;
7481
+ box-shadow: var(--focus-ring);
7482
+ }
7483
+ .mint-toast__close {
7484
+ position: absolute;
7485
+ top: 0.3125rem;
7486
+ right: 0.3125rem;
7487
+ display: flex;
7488
+ align-items: center;
7489
+ justify-content: center;
7490
+ width: 1.25rem;
7491
+ height: 1.25rem;
7492
+ border: 0;
7493
+ border-radius: var(--radius-sm);
7494
+ background: transparent;
7495
+ color: var(--text-muted);
7496
+ cursor: pointer;
7497
+ transition: color 0.12s ease, background-color 0.12s ease;
7498
+ }
7499
+ .mint-toast__close:hover {
7500
+ color: var(--text-primary);
7501
+ background: var(--bg-hover);
7502
+ }
7503
+ .mint-toast__close svg {
7504
+ width: 0.75rem;
7505
+ height: 0.75rem;
7265
7506
  }
7266
7507
  /* TTL progress bar — shrinks 100% → 0 over duration */
7267
7508
  .mint-toast__progress {
@@ -7270,14 +7511,22 @@ html.dark .mint-toast__item .mint-toast__message {
7270
7511
  bottom: 0;
7271
7512
  height: 2px;
7272
7513
  width: 100%;
7514
+ background: var(--mint-toast-tone);
7273
7515
  transform-origin: left center;
7274
7516
  animation: mint-toast-progress linear forwards;
7275
7517
  /* animation-duration set inline via toast.duration */
7276
7518
  }
7519
+ .mint-toast__progress--indeterminate {
7520
+ animation: mint-toast-indeterminate 1.4s ease-in-out infinite;
7521
+ }
7277
7522
  @keyframes mint-toast-progress {
7278
7523
  from { transform: scaleX(1); }
7279
7524
  to { transform: scaleX(0); }
7280
7525
  }
7526
+ @keyframes mint-toast-indeterminate {
7527
+ 0% { transform: translateX(-100%) scaleX(0.4); }
7528
+ 100% { transform: translateX(250%) scaleX(0.4); }
7529
+ }
7281
7530
  @media (prefers-reduced-motion: reduce) {
7282
7531
  .mint-toast__progress { animation: none; opacity: 0.4; }
7283
7532
  }
@@ -10595,13 +10844,17 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10595
10844
  border-radius: var(--radius);
10596
10845
  overflow: hidden;
10597
10846
  }
10598
- /* Card variant container - matches RFA design */
10847
+ /* Card variant container - matches RFA design.
10848
+ `width: fit-content` is load-bearing: `inline-grid` alone gets blockified and
10849
+ stretched when the control is a stretching flex/grid item. */
10599
10850
  .mint-segmented-control--card {
10600
- display: grid;
10851
+ display: inline-grid;
10601
10852
  grid-auto-flow: column;
10602
10853
  grid-auto-columns: 1fr;
10603
- gap: 0.25rem;
10604
- padding: 0.25rem;
10854
+ width: fit-content;
10855
+ max-width: 100%;
10856
+ gap: 0.1875rem;
10857
+ padding: 0.1875rem;
10605
10858
  border-radius: var(--radius-md);
10606
10859
  background-color: var(--bg-tertiary);
10607
10860
  overflow: visible;
@@ -10611,6 +10864,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10611
10864
  width: 100%;
10612
10865
  }
10613
10866
  .mint-segmented-control--card.mint-segmented-control--full-width {
10867
+ display: grid;
10614
10868
  width: 100%;
10615
10869
  }
10616
10870
  .mint-segmented-control--disabled {
@@ -10671,8 +10925,8 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10671
10925
  /* Card variant - matches RFA raised card design */
10672
10926
  .mint-segmented-control__option--card {
10673
10927
  flex: 1;
10674
- padding: 0.75rem 1rem;
10675
- gap: 0.25rem;
10928
+ padding: 0.5rem 0.75rem;
10929
+ gap: 0.0625rem;
10676
10930
  border: none;
10677
10931
  border-radius: var(--radius);
10678
10932
  background-color: transparent;
@@ -10685,7 +10939,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10685
10939
  .mint-segmented-control__option--card.mint-segmented-control__option--active {
10686
10940
  background-color: var(--bg-card);
10687
10941
  color: var(--text-primary);
10688
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
10942
+ box-shadow: var(--shadow-sm);
10689
10943
  }
10690
10944
  /* Size variants - simple */
10691
10945
  .mint-segmented-control__option--simple.mint-segmented-control__option--sm {
@@ -10705,13 +10959,13 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10705
10959
  }
10706
10960
  /* Size variants - card */
10707
10961
  .mint-segmented-control__option--card.mint-segmented-control__option--sm {
10708
- padding: 0.5rem 0.75rem;
10962
+ padding: 0.3125rem 0.625rem;
10709
10963
  }
10710
10964
  .mint-segmented-control__option--card.mint-segmented-control__option--md {
10711
- padding: 0.75rem 1rem;
10965
+ padding: 0.5rem 0.75rem;
10712
10966
  }
10713
10967
  .mint-segmented-control__option--card.mint-segmented-control__option--lg {
10714
- padding: 1rem 1.25rem;
10968
+ padding: 0.75rem 1rem;
10715
10969
  }
10716
10970
  /* Label */
10717
10971
  .mint-segmented-control__label {
@@ -10736,7 +10990,7 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10736
10990
  }
10737
10991
  /* Description color in active state - use text-muted for card variant, primary for simple */
10738
10992
  .mint-segmented-control__option--simple.mint-segmented-control__option--active .mint-segmented-control__description {
10739
- color: rgba(255, 255, 255, 0.8);
10993
+ color: color-mix(in srgb, white 80%, transparent);
10740
10994
  }
10741
10995
  .mint-segmented-control__option--card.mint-segmented-control__option--active .mint-segmented-control__description {
10742
10996
  color: var(--text-muted);
@@ -10940,46 +11194,49 @@ html.dark .sg-summary code { background: rgba(255, 255, 255, 0.1); }
10940
11194
  padding: 0.375rem 0.75rem;
10941
11195
  font-size: 0.8125rem;
10942
11196
  }
11197
+ /* Semantic tones — every color resolves from a token. `--mint-pill-tone` is the
11198
+ accent (soft-tint background, dot, outline border); `--mint-pill-ink` the text. */
11199
+ .mint-pill--primary { --mint-pill-tone: var(--color-primary); --mint-pill-ink: var(--color-primary-hover); }
11200
+ .mint-pill--success { --mint-pill-tone: var(--mint-success); --mint-pill-ink: var(--mint-success-hover); }
11201
+ .mint-pill--warning { --mint-pill-tone: var(--mint-warning); --mint-pill-ink: var(--mint-warning-text); }
11202
+ .mint-pill--error { --mint-pill-tone: var(--mint-error); --mint-pill-ink: var(--mint-error-hover); }
11203
+ .mint-pill--info { --mint-pill-tone: var(--mint-info); --mint-pill-ink: color-mix(in srgb, var(--mint-info) 78%, black); }
11204
+ .mint-pill--neutral { --mint-pill-tone: var(--text-secondary); --mint-pill-ink: var(--text-secondary-strong); }
11205
+ html.dark .mint-pill--primary,
11206
+ html.dark .mint-pill--success,
11207
+ html.dark .mint-pill--warning,
11208
+ html.dark .mint-pill--error,
11209
+ html.dark .mint-pill--info {
11210
+ --mint-pill-ink: var(--mint-pill-tone);
11211
+ }
10943
11212
  /* Variants */
10944
11213
  .mint-pill--default,
10945
11214
  .mint-pill--neutral {
10946
11215
  background-color: var(--bg-tertiary);
10947
11216
  color: var(--text-secondary);
10948
11217
  }
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
- }
11218
+ .mint-pill--primary,
11219
+ .mint-pill--success,
11220
+ .mint-pill--warning,
11221
+ .mint-pill--error,
10977
11222
  .mint-pill--info {
10978
- background-color: rgba(59, 130, 246, 0.1);
10979
- color: var(--mint-info);
11223
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 12%, transparent);
11224
+ color: var(--mint-pill-ink);
10980
11225
  }
11226
+ html.dark .mint-pill--primary,
11227
+ html.dark .mint-pill--success,
11228
+ html.dark .mint-pill--warning,
11229
+ html.dark .mint-pill--error,
10981
11230
  html.dark .mint-pill--info {
10982
- background-color: rgba(59, 130, 246, 0.2);
11231
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 22%, transparent);
11232
+ }
11233
+ /* Status dot */
11234
+ .mint-pill__dot {
11235
+ flex-shrink: 0;
11236
+ width: 0.375rem;
11237
+ height: 0.375rem;
11238
+ border-radius: 9999px;
11239
+ background-color: var(--mint-pill-tone, currentColor);
10983
11240
  }
10984
11241
  /* ========================================================================
10985
11242
  Variant: Outline
@@ -10993,13 +11250,16 @@ html.dark .mint-pill--info {
10993
11250
  border: 1px solid var(--border-color);
10994
11251
  color: var(--text-secondary);
10995
11252
  }
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); }
11253
+ .mint-pill--outline.mint-pill--neutral { border-color: var(--text-muted); color: var(--text-primary); }
11254
+ .mint-pill--outline.mint-pill--primary,
11255
+ .mint-pill--outline.mint-pill--success,
11256
+ .mint-pill--outline.mint-pill--warning,
11257
+ .mint-pill--outline.mint-pill--error,
11258
+ .mint-pill--outline.mint-pill--info {
11259
+ background-color: transparent;
11260
+ border-color: var(--mint-pill-tone);
11261
+ color: var(--mint-pill-ink);
11262
+ }
11003
11263
  /* Disabled */
11004
11264
  .mint-pill--disabled {
11005
11265
  opacity: var(--mint-disabled-opacity);
@@ -11050,10 +11310,7 @@ html.dark .mint-pill--info {
11050
11310
  }
11051
11311
  .mint-pill__remove:hover {
11052
11312
  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);
11313
+ background-color: color-mix(in srgb, currentColor 12%, transparent);
11057
11314
  }
11058
11315
  .mint-pill__remove:focus-visible {
11059
11316
  outline: none;
@@ -15352,7 +15609,7 @@ html.dark .mint-settings-modal__option-btn--active {
15352
15609
  gap: 1.5rem;
15353
15610
  }
15354
15611
  .mint-form-builder--sm {
15355
- gap: 1rem;
15612
+ gap: 0.625rem;
15356
15613
  }
15357
15614
  .mint-form-builder--lg {
15358
15615
  gap: 2rem;