diff --git a/.changeset/silly-fishes-deny.md b/.changeset/silly-fishes-deny.md
new file mode 100644
index 000000000000..a77098c5978b
--- /dev/null
+++ b/.changeset/silly-fishes-deny.md
@@ -0,0 +1,5 @@
+---
+"svelte": patch
+---
+
+fix: allow custom element styles to be updated in HMR mode
diff --git a/.changeset/wild-mice-look.md b/.changeset/wild-mice-look.md
new file mode 100644
index 000000000000..535ace2fa53d
--- /dev/null
+++ b/.changeset/wild-mice-look.md
@@ -0,0 +1,5 @@
+---
+"svelte": patch
+---
+
+fix: inject styles correctly when mounting inside an iframe
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
index 690cdb43454f..45e48e565e73 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js
@@ -494,18 +494,7 @@ export function client_component(analysis, options) {
if (analysis.css.hash) {
// remove existing `
diff --git a/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/_config.js b/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/_config.js
new file mode 100644
index 000000000000..0f04e9659a3f
--- /dev/null
+++ b/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/_config.js
@@ -0,0 +1,22 @@
+import { flushSync } from 'svelte';
+import { test } from '../../assert';
+
+export default test({
+ async test({ target, assert }) {
+ const button = target.querySelector('button');
+ const h1 = () =>
+ /** @type {HTMLHeadingElement} */ (
+ /** @type {Window} */ (
+ target.querySelector('iframe')?.contentWindow
+ ).document.querySelector('h1')
+ );
+
+ assert.equal(h1().textContent, 'count: 0');
+ assert.equal(getComputedStyle(h1()).color, 'rgb(255, 0, 0)');
+
+ flushSync(() => button?.click());
+
+ assert.equal(h1().textContent, 'count: 1');
+ assert.equal(getComputedStyle(h1()).color, 'rgb(255, 0, 0)');
+ }
+});
diff --git a/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/main.svelte b/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/main.svelte
new file mode 100644
index 000000000000..358698f8ecdd
--- /dev/null
+++ b/packages/svelte/tests/runtime-browser/samples/mount-in-iframe/main.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+{#key count}
+
+{/key}