diff --git a/packages/frontend/@n8n/design-system/package.json b/packages/frontend/@n8n/design-system/package.json
index 2e139f205fa..eff52e7bbc4 100644
--- a/packages/frontend/@n8n/design-system/package.json
+++ b/packages/frontend/@n8n/design-system/package.json
@@ -3,7 +3,6 @@
"name": "@n8n/design-system",
"version": "2.32.0",
"main": "src/index.ts",
- "import": "src/index.ts",
"scripts": {
"dev": "pnpm run --dir=../storybook dev",
"clean": "rimraf dist .turbo",
@@ -46,6 +45,7 @@
"autoprefixer": "^10.4.19",
"emojibase-data": "^17.0.0",
"eslint-plugin-storybook": "catalog:storybook",
+ "pinia": "catalog:frontend",
"postcss": "^8.4.38",
"sass": "^1.71.1",
"storybook": "catalog:storybook",
@@ -90,7 +90,6 @@
"markdown-it-link-attributes": "catalog:",
"markdown-it-task-lists": "^2.1.1",
"parse-diff": "^0.11.1",
- "pinia": "catalog:frontend",
"reka-ui": "^2.5.0",
"sanitize-html": "catalog:",
"vue": "catalog:frontend",
diff --git a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.legacy.scss b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.legacy.scss
index 146f13ad5fa..b6eb68baed5 100644
--- a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.legacy.scss
+++ b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.legacy.scss
@@ -11,10 +11,15 @@
* Usage:
* Save
* Info
+ *
+ * Do not wrap these selectors in `:global()`. This file is `@use`d from
+ * Button.vue's plain (non-module) style block, where selectors are already
+ * global, so `:global()` is never transformed away — it ships as an invalid
+ * pseudo-class and browsers drop the whole rule.
*/
/** @deprecated Use a semantic variant instead of success color */
-:global(.n8n-button--success) {
+.n8n-button--success {
--button--color--background: var(--color--success);
--button--color--background-hover: var(--color--success--shade-1);
--button--color--background-active: var(--color--success--shade-1);
@@ -31,7 +36,7 @@
}
/** @deprecated Use a semantic variant instead of warning color */
-:global(.n8n-button--warning) {
+.n8n-button--warning {
--button--color--background: var(--color--warning);
--button--color--background-hover: var(--color--warning--shade-1);
--button--color--background-active: var(--color--warning--shade-1);
diff --git a/packages/frontend/@n8n/design-system/src/components/index.ts b/packages/frontend/@n8n/design-system/src/components/index.ts
index e7e2c0305a4..3702cd7189a 100644
--- a/packages/frontend/@n8n/design-system/src/components/index.ts
+++ b/packages/frontend/@n8n/design-system/src/components/index.ts
@@ -111,6 +111,7 @@ export { default as N8nResizeWrapper } from './N8nResizeWrapper';
export { default as N8nSelect } from './N8nSelect';
export { default as N8nSpinner } from './N8nSpinner';
export { default as N8nStatusDot } from './N8nStatusDot';
+export { default as N8nStepper } from './N8nStepper/Stepper.vue';
export { default as N8nSticky } from './N8nSticky';
export { default as N8nResizeableSticky } from './N8nResizeableSticky';
export { default as N8nSuggestedActions } from './N8nSuggestedActions';
diff --git a/packages/frontend/@n8n/design-system/src/css/globalSelectorPlacement.test.ts b/packages/frontend/@n8n/design-system/src/css/globalSelectorPlacement.test.ts
new file mode 100644
index 00000000000..c7157110c5e
--- /dev/null
+++ b/packages/frontend/@n8n/design-system/src/css/globalSelectorPlacement.test.ts
@@ -0,0 +1,55 @@
+import { readdirSync, readFileSync } from 'node:fs';
+import { resolve } from 'node:path';
+
+/**
+ * `:global()` is a CSS-Modules construct. It is only transformed away in a
+ * `