diff --git a/.changeset/adaptive-bone-colors.md b/.changeset/adaptive-bone-colors.md
deleted file mode 100644
index a6223ef..0000000
--- a/.changeset/adaptive-bone-colors.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@camp.dev/bones": minor
----
-
-Bone colors derive from the inherited text color instead of the OS color scheme. `--bone-base` defaults to the text color at 12% opacity and `--bone-highlight` at 6%, and the `prefers-color-scheme` media query is gone. Bones are now visible on any background the surrounding text is readable on. Before this, a dark-mode OS over a page that kept a light canvas painted white bones on white (BON-13). Overriding the custom properties works unchanged. Internally, bones hide their content by zeroing the alpha of `color` so the channels survive into the derivation, and the measured overlay's no-stylesheet fallbacks derive the same way. The stylesheets now use relative color syntax, which is Baseline 2024 (Chrome 119, Safari 18, Firefox 128).
diff --git a/.changeset/animate-on-carrier.md b/.changeset/animate-on-carrier.md
deleted file mode 100644
index 86b9c25..0000000
--- a/.changeset/animate-on-carrier.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@camp.dev/bones": patch
----
-
-`data-bone-animate` now takes effect from the element that carries it: a marked bone can animate itself, and an `aria-busy` region can be stilled or switched from its own tag instead of a wrapper. The animation variants live in `@scope` blocks, and a scoped selector's implicit `:scope` prefix matches strict descendants only, so the attribute was a silent no-op on the scope root itself. The scoped selectors now include the root via `:is(:scope, :scope *)`.
diff --git a/.changeset/marked-bones-shimmer-by-default.md b/.changeset/marked-bones-shimmer-by-default.md
deleted file mode 100644
index 287f914..0000000
--- a/.changeset/marked-bones-shimmer-by-default.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@camp.dev/bones": minor
----
-
-Marked bones (`data-bone`) now shimmer by default, matching auto bones and the measured overlay. Before this, `bones.css` only animated inside a `data-bone-animate` scope, so a page that mixed an `aria-busy` region with explicit `data-bone` markup showed shimmering auto bones beside frozen marked ones. Set `data-bone-animate="none"` on a bone, a wrapper, or `
` to keep skeletons still. `"pulse"` still switches the animation. Under `prefers-reduced-motion: reduce`, the default and the `shimmer` and `pulse` scopes all downgrade to a slow pulse, and `none` stays still. This replaces the old reduced-motion rule, which pulsed the whole `aria-busy` element on top of the bar's own animation.
diff --git a/.changeset/sole-boundary-component.md b/.changeset/sole-boundary-component.md
deleted file mode 100644
index 6641f6b..0000000
--- a/.changeset/sole-boundary-component.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-"@camp.dev/bones": minor
----
-
-`` is now the sole skeleton component. The React entry removes `` and `` and keeps `createBones`, `forceBones`, `readPromise`, `minMax`, `isMinMax`, and the `BonesBoundary` wrapper for ``.
-
-`` is gone. Write the Suspense boundary yourself. Pass `forceBones` where the fallback needs a pending prop:
-
-```tsx
-}>
-
-
-```
-
-`` is gone. Pass `forceBones` as the data prop of each component you want forced, or wrap unmarked content in ``.
-
-The ambient loading flag went with them. `createBones` no longer reads any context. It shows bones only for the `loading` option, the `forceBones` sentinel, or a pending promise.
diff --git a/apps/demo/CHANGELOG.md b/apps/demo/CHANGELOG.md
index 0cf9fd1..74c8070 100644
--- a/apps/demo/CHANGELOG.md
+++ b/apps/demo/CHANGELOG.md
@@ -1,5 +1,12 @@
# bones-demo
+## 0.0.4
+
+### Patch Changes
+
+- Updated dependencies [[`f4d1362`](https://github.com/campdotdev/bones/commit/f4d1362e1c638ed0bc7145fbd20a46e2d1508c1a), [`14ff496`](https://github.com/campdotdev/bones/commit/14ff49692bfbb5de6c3949b6569ca0662bcd6bbb), [`dc790c3`](https://github.com/campdotdev/bones/commit/dc790c32ea61c614085d2c7d9115b6b384637a4e), [`3a690bb`](https://github.com/campdotdev/bones/commit/3a690bb50b3f2bcf898f2218457d519a85223103)]:
+ - @camp.dev/bones@0.4.0
+
## 0.0.3
### Patch Changes
diff --git a/apps/demo/package.json b/apps/demo/package.json
index e5dc666..1fb2f1d 100644
--- a/apps/demo/package.json
+++ b/apps/demo/package.json
@@ -1,6 +1,6 @@
{
"name": "bones-demo",
- "version": "0.0.3",
+ "version": "0.0.4",
"private": true,
"scripts": {
"dev": "next dev",
diff --git a/apps/docs/CHANGELOG.md b/apps/docs/CHANGELOG.md
index ccf21bc..b040e80 100644
--- a/apps/docs/CHANGELOG.md
+++ b/apps/docs/CHANGELOG.md
@@ -1,5 +1,12 @@
# bones-docs
+## 0.0.4
+
+### Patch Changes
+
+- Updated dependencies [[`f4d1362`](https://github.com/campdotdev/bones/commit/f4d1362e1c638ed0bc7145fbd20a46e2d1508c1a), [`14ff496`](https://github.com/campdotdev/bones/commit/14ff49692bfbb5de6c3949b6569ca0662bcd6bbb), [`dc790c3`](https://github.com/campdotdev/bones/commit/dc790c32ea61c614085d2c7d9115b6b384637a4e), [`3a690bb`](https://github.com/campdotdev/bones/commit/3a690bb50b3f2bcf898f2218457d519a85223103)]:
+ - @camp.dev/bones@0.4.0
+
## 0.0.3
### Patch Changes
diff --git a/apps/docs/package.json b/apps/docs/package.json
index c64592c..23b3f3a 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "bones-docs",
- "version": "0.0.3",
+ "version": "0.0.4",
"private": true,
"scripts": {
"dev": "next dev",
diff --git a/apps/stream/CHANGELOG.md b/apps/stream/CHANGELOG.md
index 6bf6cdb..7dc810c 100644
--- a/apps/stream/CHANGELOG.md
+++ b/apps/stream/CHANGELOG.md
@@ -1,5 +1,12 @@
# bones-stream
+## 0.0.2
+
+### Patch Changes
+
+- Updated dependencies [[`f4d1362`](https://github.com/campdotdev/bones/commit/f4d1362e1c638ed0bc7145fbd20a46e2d1508c1a), [`14ff496`](https://github.com/campdotdev/bones/commit/14ff49692bfbb5de6c3949b6569ca0662bcd6bbb), [`dc790c3`](https://github.com/campdotdev/bones/commit/dc790c32ea61c614085d2c7d9115b6b384637a4e), [`3a690bb`](https://github.com/campdotdev/bones/commit/3a690bb50b3f2bcf898f2218457d519a85223103)]:
+ - @camp.dev/bones@0.4.0
+
## 0.0.1
### Patch Changes
diff --git a/apps/stream/package.json b/apps/stream/package.json
index 40dd0ac..f0e1291 100644
--- a/apps/stream/package.json
+++ b/apps/stream/package.json
@@ -1,6 +1,6 @@
{
"name": "bones-stream",
- "version": "0.0.1",
+ "version": "0.0.2",
"private": true,
"type": "module",
"scripts": {
diff --git a/apps/vanilla/CHANGELOG.md b/apps/vanilla/CHANGELOG.md
new file mode 100644
index 0000000..51baf28
--- /dev/null
+++ b/apps/vanilla/CHANGELOG.md
@@ -0,0 +1,8 @@
+# bones-vanilla
+
+## 0.0.2
+
+### Patch Changes
+
+- Updated dependencies [[`f4d1362`](https://github.com/campdotdev/bones/commit/f4d1362e1c638ed0bc7145fbd20a46e2d1508c1a), [`14ff496`](https://github.com/campdotdev/bones/commit/14ff49692bfbb5de6c3949b6569ca0662bcd6bbb), [`dc790c3`](https://github.com/campdotdev/bones/commit/dc790c32ea61c614085d2c7d9115b6b384637a4e), [`3a690bb`](https://github.com/campdotdev/bones/commit/3a690bb50b3f2bcf898f2218457d519a85223103)]:
+ - @camp.dev/bones@0.4.0
diff --git a/apps/vanilla/package.json b/apps/vanilla/package.json
index 115b03b..ad83249 100644
--- a/apps/vanilla/package.json
+++ b/apps/vanilla/package.json
@@ -1,6 +1,6 @@
{
"name": "bones-vanilla",
- "version": "0.0.1",
+ "version": "0.0.2",
"private": true,
"type": "module",
"scripts": {
diff --git a/packages/bones/CHANGELOG.md b/packages/bones/CHANGELOG.md
index abbf737..35becd4 100644
--- a/packages/bones/CHANGELOG.md
+++ b/packages/bones/CHANGELOG.md
@@ -1,5 +1,31 @@
# bones
+## 0.4.0
+
+### Minor Changes
+
+- [#42](https://github.com/campdotdev/bones/pull/42) [`f4d1362`](https://github.com/campdotdev/bones/commit/f4d1362e1c638ed0bc7145fbd20a46e2d1508c1a) Thanks [@hunterbecton](https://github.com/hunterbecton)! - Bone colors derive from the inherited text color instead of the OS color scheme. `--bone-base` defaults to the text color at 12% opacity and `--bone-highlight` at 6%, and the `prefers-color-scheme` media query is gone. Bones are now visible on any background the surrounding text is readable on. Before this, a dark-mode OS over a page that kept a light canvas painted white bones on white (BON-13). Overriding the custom properties works unchanged. Internally, bones hide their content by zeroing the alpha of `color` so the channels survive into the derivation, and the measured overlay's no-stylesheet fallbacks derive the same way. The stylesheets now use relative color syntax, which is Baseline 2024 (Chrome 119, Safari 18, Firefox 128).
+
+- [#51](https://github.com/campdotdev/bones/pull/51) [`dc790c3`](https://github.com/campdotdev/bones/commit/dc790c32ea61c614085d2c7d9115b6b384637a4e) Thanks [@hunterbecton](https://github.com/hunterbecton)! - Marked bones (`data-bone`) now shimmer by default, matching auto bones and the measured overlay. Before this, `bones.css` only animated inside a `data-bone-animate` scope, so a page that mixed an `aria-busy` region with explicit `data-bone` markup showed shimmering auto bones beside frozen marked ones. Set `data-bone-animate="none"` on a bone, a wrapper, or `` to keep skeletons still. `"pulse"` still switches the animation. Under `prefers-reduced-motion: reduce`, the default and the `shimmer` and `pulse` scopes all downgrade to a slow pulse, and `none` stays still. This replaces the old reduced-motion rule, which pulsed the whole `aria-busy` element on top of the bar's own animation.
+
+- [#47](https://github.com/campdotdev/bones/pull/47) [`3a690bb`](https://github.com/campdotdev/bones/commit/3a690bb50b3f2bcf898f2218457d519a85223103) Thanks [@hunterbecton](https://github.com/hunterbecton)! - `` is now the sole skeleton component. The React entry removes `` and `` and keeps `createBones`, `forceBones`, `readPromise`, `minMax`, `isMinMax`, and the `BonesBoundary` wrapper for ``.
+
+ `` is gone. Write the Suspense boundary yourself. Pass `forceBones` where the fallback needs a pending prop:
+
+ ```tsx
+ }>
+
+
+ ```
+
+ `` is gone. Pass `forceBones` as the data prop of each component you want forced, or wrap unmarked content in ``.
+
+ The ambient loading flag went with them. `createBones` no longer reads any context. It shows bones only for the `loading` option, the `forceBones` sentinel, or a pending promise.
+
+### Patch Changes
+
+- [#45](https://github.com/campdotdev/bones/pull/45) [`14ff496`](https://github.com/campdotdev/bones/commit/14ff49692bfbb5de6c3949b6569ca0662bcd6bbb) Thanks [@hunterbecton](https://github.com/hunterbecton)! - `data-bone-animate` now takes effect from the element that carries it: a marked bone can animate itself, and an `aria-busy` region can be stilled or switched from its own tag instead of a wrapper. The animation variants live in `@scope` blocks, and a scoped selector's implicit `:scope` prefix matches strict descendants only, so the attribute was a silent no-op on the scope root itself. The scoped selectors now include the root via `:is(:scope, :scope *)`.
+
## 0.3.0
### Minor Changes
diff --git a/packages/bones/package.json b/packages/bones/package.json
index 60e9d57..0bcf1cf 100644
--- a/packages/bones/package.json
+++ b/packages/bones/package.json
@@ -1,6 +1,6 @@
{
"name": "@camp.dev/bones",
- "version": "0.3.0",
+ "version": "0.4.0",
"description": "Skeleton loaders designed for React Server Components and streaming.",
"homepage": "https://github.com/campdotdev/bones#readme",
"bugs": {