diff --git a/packages/core/src/core/index.ts b/packages/core/src/core/index.ts
index d0dc03ba..4339caeb 100644
--- a/packages/core/src/core/index.ts
+++ b/packages/core/src/core/index.ts
@@ -9,6 +9,8 @@ export * from './ui/captions-button/captions-button-core';
export * from './ui/captions-button/captions-button-data-attrs';
export * from './ui/controls/controls-core';
export * from './ui/controls/controls-data-attrs';
+export * from './ui/error-dialog/error-dialog-core';
+export * from './ui/error-dialog/error-dialog-data-attrs';
export * from './ui/fullscreen-button/fullscreen-button-core';
export * from './ui/fullscreen-button/fullscreen-button-data-attrs';
export * from './ui/mute-button/mute-button-core';
diff --git a/packages/core/src/core/ui/error-dialog/error-dialog-core.ts b/packages/core/src/core/ui/error-dialog/error-dialog-core.ts
new file mode 100644
index 00000000..531b40b1
--- /dev/null
+++ b/packages/core/src/core/ui/error-dialog/error-dialog-core.ts
@@ -0,0 +1,12 @@
+import { AlertDialogCore, type AlertDialogState } from '../alert-dialog/alert-dialog-core';
+
+export interface ErrorDialogState extends AlertDialogState {}
+
+/** Error-dialog core: an alert dialog whose open state is driven by media error state. */
+export class ErrorDialogCore extends AlertDialogCore {
+ override setProps(): void {}
+}
+
+export namespace ErrorDialogCore {
+ export type State = ErrorDialogState;
+}
diff --git a/packages/core/src/core/ui/error-dialog/error-dialog-data-attrs.ts b/packages/core/src/core/ui/error-dialog/error-dialog-data-attrs.ts
new file mode 100644
index 00000000..46217826
--- /dev/null
+++ b/packages/core/src/core/ui/error-dialog/error-dialog-data-attrs.ts
@@ -0,0 +1 @@
+export { AlertDialogDataAttrs as ErrorDialogDataAttrs } from '../alert-dialog/alert-dialog-data-attrs';
diff --git a/packages/html/src/define/audio/minimal-skin.tailwind.ts b/packages/html/src/define/audio/minimal-skin.tailwind.ts
index c5b263a1..42ba24da 100644
--- a/packages/html/src/define/audio/minimal-skin.tailwind.ts
+++ b/packages/html/src/define/audio/minimal-skin.tailwind.ts
@@ -5,6 +5,7 @@ import {
button,
buttonGroup,
controls,
+ error,
icon,
iconContainer,
iconFlipped,
@@ -22,6 +23,7 @@ import { SkinMixin } from '../skin-mixin';
// Side-effect imports: register all custom elements used in the template.
import '../media/container';
+import '../ui/error-dialog';
import '../ui/mute-button';
import '../ui/play-button';
import '../ui/playback-rate-button';
@@ -42,6 +44,18 @@ function getTemplateHTML() {