+
diff --git a/site/src/components/docs/demos/time/html/css/CurrentDuration.html b/site/src/components/docs/demos/time/html/css/CurrentDuration.html
index 843cceaf..70e99b00 100644
--- a/site/src/components/docs/demos/time/html/css/CurrentDuration.html
+++ b/site/src/components/docs/demos/time/html/css/CurrentDuration.html
@@ -1,14 +1,16 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/site/src/components/docs/demos/time/html/css/CurrentTime.html b/site/src/components/docs/demos/time/html/css/CurrentTime.html
index 777247fc..8caa1487 100644
--- a/site/src/components/docs/demos/time/html/css/CurrentTime.html
+++ b/site/src/components/docs/demos/time/html/css/CurrentTime.html
@@ -1,10 +1,12 @@
-
-
+
+
+
+
diff --git a/site/src/components/docs/demos/time/html/css/CustomNegativeSign.html b/site/src/components/docs/demos/time/html/css/CustomNegativeSign.html
index b41d2084..5f199e3f 100644
--- a/site/src/components/docs/demos/time/html/css/CustomNegativeSign.html
+++ b/site/src/components/docs/demos/time/html/css/CustomNegativeSign.html
@@ -1,14 +1,16 @@
-
-
+
+
+
+
diff --git a/site/src/components/docs/demos/time/html/css/CustomSeparator.html b/site/src/components/docs/demos/time/html/css/CustomSeparator.html
index 29dea2b7..bd2e7fd0 100644
--- a/site/src/components/docs/demos/time/html/css/CustomSeparator.html
+++ b/site/src/components/docs/demos/time/html/css/CustomSeparator.html
@@ -1,14 +1,16 @@
-
-
-
- of
-
-
+
+
+
+
+ of
+
+
+
diff --git a/site/src/components/docs/demos/time/html/css/Remaining.html b/site/src/components/docs/demos/time/html/css/Remaining.html
index 90d80f5c..d123fe56 100644
--- a/site/src/components/docs/demos/time/html/css/Remaining.html
+++ b/site/src/components/docs/demos/time/html/css/Remaining.html
@@ -1,10 +1,12 @@
-
-
+
+
+
+
diff --git a/site/src/content/docs/reference/container-mixin.mdx b/site/src/content/docs/reference/container-mixin.mdx
index 96f609a3..9ff465ad 100644
--- a/site/src/content/docs/reference/container-mixin.mdx
+++ b/site/src/content/docs/reference/container-mixin.mdx
@@ -12,7 +12,13 @@ import DocsLink from "@/components/docs/DocsLink.astro";
Use `ContainerMixin` when the provider and container live in different elements. This is common when the store owner sits higher in the tree (e.g., a layout shell) while the media element sits deeper in a content area.
-For a single element that both owns the store and attaches media, use `PlayerMixin` instead.
+For a single element that both owns the store and attaches media, compose both mixins on the same base class:
+
+```ts
+const { ProviderMixin, ContainerMixin } = createPlayer({ features: features.video });
+
+class VideoPlayer extends ProviderMixin(ContainerMixin(MediaElement)) {}
+```
### How media discovery works
diff --git a/site/src/content/docs/reference/html-create-player.mdx b/site/src/content/docs/reference/html-create-player.mdx
index 95ae3b39..33f81e9a 100644
--- a/site/src/content/docs/reference/html-create-player.mdx
+++ b/site/src/content/docs/reference/html-create-player.mdx
@@ -6,33 +6,60 @@ description: Factory function that creates a player instance with typed store, m
import UtilReference from "@/components/docs/api-reference/UtilReference.astro";
import Demo from "@/components/docs/demos/Demo.astro";
import DocsLink from "@/components/docs/DocsLink.astro";
-import FrameworkCase from "@/components/docs/FrameworkCase.astro";
import StyleCase from "@/components/docs/StyleCase.astro";
import BasicUsageDemoHtml from "@/components/docs/demos/html-create-player/html/css/BasicUsage.astro";
import basicUsageHtml from "@/components/docs/demos/html-create-player/html/css/BasicUsage.html?raw";
import basicUsageHtmlCss from "@/components/docs/demos/html-create-player/html/css/BasicUsage.css?raw";
import basicUsageHtmlTs from "@/components/docs/demos/html-create-player/html/css/BasicUsage.ts?raw";
-`createPlayer` is the entry point for setting up a Video.js player with HTML custom elements. It accepts a configuration object with a `features` array and returns everything needed to build a player: a pre-composed `PlayerElement`, typed `PlayerController`, `context`, individual mixins, and a `create` factory.
+`createPlayer` is the entry point for setting up a Video.js player with HTML custom elements. It accepts a configuration object with a `features` array and returns a typed `PlayerController`, `context`, `ProviderMixin`, `ContainerMixin`, and a `create` store factory.
```ts
import { createPlayer, features, MediaElement } from '@videojs/html';
const {
- PlayerElement,
PlayerController,
context,
- PlayerMixin,
ProviderMixin,
ContainerMixin,
create,
} = createPlayer({ features: features.video });
-// Register the pre-composed player element
-customElements.define('video-player', PlayerElement);
+// Provider element: owns and publishes the store
+class VideoPlayer extends ProviderMixin(MediaElement) {}
+
+// Container element: discovers