From b43a0306d2745d1cd8508d2b8c9a2b8ffd392ef9 Mon Sep 17 00:00:00 2001 From: Kairo Date: Fri, 26 Jun 2026 20:36:55 -0400 Subject: [PATCH] bop --- .gitattributes | 6 + .gitignore | 29 + .vscode/extensions.json | 4 + .vscode/launch.json | 11 + README.md | 62 + astro.config.mjs | 10 + package-lock.json | 14442 ++++++++++++++++ package.json | 30 + public/about.txt | 6 + public/admin/config.yml | 108 + public/favicon.ico | Bin 0 -> 15406 bytes public/site.webmanifest | 1 + src/components/BaseHead/BaseHead.astro | 36 + src/components/LatestFeed/LatestFeed.astro | 48 + src/components/LatestFeed/LatestLink.astro | 29 + src/components/LatestFeed/styles.css | 55 + src/components/NavLinks/NavLinks.astro | 14 + src/components/NavLinks/styles.css | 9 + .../common/AdultFlag/AdultFlag.astro | 5 + src/components/common/AdultFlag/styles.css | 28 + .../common/FormattedDate/FormattedDate.astro | 15 + .../common/FormattedDate/styles.css | 3 + src/components/common/Link/Link.astro | 10 + .../common/LinkToPost/LinkToPost.astro | 49 + src/components/common/LinkToPost/styles.css | 24 + src/components/common/NewFlag/NewFlag.astro | 5 + src/components/common/NewFlag/styles.css | 53 + src/components/common/index.ts | 5 + .../gallery/AudioItem/AudioItem.astro | 19 + src/components/gallery/AudioItem/styles.css | 3 + .../gallery/ImageItem/ImageItem.astro | 64 + src/components/gallery/ImageItem/styles.css | 49 + .../gallery/WritingItem/WritingItem.astro | 18 + src/components/gallery/WritingItem/styles.css | 0 src/components/gallery/index.ts | 3 + src/components/index.ts | 5 + src/const/collectionKeyMaps.ts | 40 + src/const/index.ts | 11 + src/const/strings.ts | 9 + src/const/urls.ts | 8 + src/content.config.ts | 79 + src/content/apps/Disic.md | 14 + src/content/apps/Hare Trigger.md | 42 + src/content/apps/JOLB.md | 8 + .../001-1492415364-boxerbunny-boxer.md | 7 + ...0346995-boxerbunny-icon-boxerbunny-both.md | 8 + ...03-1500347120-boxerbunny-pride17bb_copy.md | 8 + .../004-1500347268-boxerbunny-boxerbuns2.0.md | 8 + ...3019784-boxerbunny-photo-2017-08-17.jpg.md | 8 + ...504452641-boxerbunny-1p1hoto-aug-19.jpg.md | 8 + ...15022119-boxerbunny-djyhkeavaaaptqz.jpg.md | 8 + ...5022210-boxerbunny-photo-2017-11-30.jpg.md | 8 + src/content/commissions/009-Boxer2.0-ref.md | 7 + ...010-1520214373-dragonessdrei-boxer-icon.md | 8 + ...1581447-boxerbunny-photo-2018-03-09.jpg.md | 8 + .../012-1521581566-spreaderbar-boxer.png.md | 8 + .../013-1535688982-boxerbunny-hypno-ych.md | 8 + .../014-1578748845-snow-bun.jpg.md | 8 + .../015-1592572897-boxerbunny-ref3.jpg.md | 8 + .../016-1594665478-boxerbunny-ref4.jpg.md | 8 + .../017-1672705093-snezz-boxerbunny.png.md | 8 + .../018-1672705143-all-you-need.jpg.md | 8 + .../019-1672705271-dusty-sweater1.jpg.md | 8 + .../020-1672705388-dusty-sweater2.png.md | 8 + .../021-1672705575-merrin-ref.png.md | 7 + .../022-1672800799-merrin-sketch-sheet.jpg.md | 8 + .../023-1673639819-merrin-aerial.png.md | 8 + .../024-1675300541-stuck-ych.png.md | 8 + .../025-1675300601-stuck-chastity.png.md | 8 + .../026-1676735351-merrin-pfp.png.md | 8 + .../027-1676735498-merrin-pfp2.png.md | 8 + .../028-1676735606-nautilus-friend.png.md | 8 + .../029-1677494199-quizzical.png.md | 8 + .../030-1691172816-hypno-icon.jpg.md | 8 + .../commissions/031-1692198216-paws.jpg.md | 8 + .../032-IMG_0071-first-commission.png.md | 6 + .../033-IMG_4558-boxer-sketch.jpg.md | 8 + .../034-photo-2020-03-25-candy-gore.jpg.md | 7 + .../035-photo-2024-04-22-twinks.jpg.md | 7 + .../036-photo-2024-11-11-kit-and-kairo.jpg.md | 7 + ...168159333425023839-fem-kairo-sketch.jpg.md | 8 + src/content/commissions/038-orgy-ych.png.md | 12 + .../039-1683349109-shibari-ych.png.md | 8 + .../040-photo-2024-04-29-kairo-pinup.jpg.md | 8 + ...oto-2023-10-16-kairo-bondage-sketch.jpg.md | 8 + .../042-pink-jackrabbit-hypnotic-wallpaper.md | 8 + src/content/poems/A fox drags the dusk.md | 40 + src/content/poems/Anchorite Autumn.md | 14 + src/content/poems/Caustics.md | 19 + src/content/poems/Gender (noun).md | 10 + src/content/poems/Image18(Fixed).BMP.md | 26 + src/content/poems/Lostwave Girl.md | 29 + src/content/poems/MOON10.RAW.md | 18 + .../My old neighborhood is not that old.md | 16 + src/content/poems/November 5th, Petworth.md | 28 + src/content/poems/Slushwave Girl.md | 18 + .../Sonnet for Your Werewolf Boyfriend.md | 20 + .../poems/Sonnet for a Silent House.md | 22 + ...tion Currently Destroying Our Cathedral.md | 20 + src/content/poems/The Darkest Wild.md | 35 + src/content/poems/Three Ideas About Maine.md | 39 + .../Unsent Letters I - To Lacey, From Gray.md | 92 + ...Unsent Letters II - To Gray, From Lacey.md | 112 + src/content/poems/field_thing_9.jpg.md | 16 + src/content/songs/001-640x480.md | 6 + .../002-photograph-canon-in-deez-remix.md | 6 + src/content/songs/003-ocean-planet.md | 6 + .../songs/004-maple-buttered-groovecakes.md | 6 + src/content/songs/005-doom-treadings.md | 6 + src/content/songs/006-interlude.md | 6 + src/content/songs/007-lisa-frank-dolphins.md | 6 + .../songs/008-cold-hell-beyond-the-moon.md | 6 + ...istmas-but-only-when-she-says-christmas.md | 6 + src/content/songs/010-dechristmased.md | 5 + src/content/stories/21 Church Rd.md | 236 + src/content/stories/A Snowy Day.md | 321 + src/content/stories/All the Way Dark.md | 792 + src/content/stories/Career Shift.md | 538 + src/content/stories/Carpe Diem, My Dude.md | 510 + src/content/stories/Cinnamon.md | 431 + src/content/stories/Cottonbrain.md | 344 + .../stories/Dale Cooper at Anthrocon.md | 247 + src/content/stories/Dreamer in the Dunes.md | 413 + src/content/stories/Feel Good.md | 316 + src/content/stories/Floating and Sinking.md | 591 + src/content/stories/Furniture.md | 310 + src/content/stories/Moongazer.md | 215 + src/content/stories/Punch Bowl.md | 52 + src/content/stories/Sunbask.md | 198 + src/content/stories/Tell Me Your Secret.md | 616 + src/content/stories/The Corpse Road.md | 8 + src/content/stories/The Onyx Palace, Pt. I.md | 258 + .../stories/The Onyx Palace, Pt. II.md | 270 + .../stories/The Onyx Palace, Pt. III.md | 212 + .../stories/The Quarry Junction Challenge.md | 110 + src/content/stories/The Serve.md | 536 + src/content/stories/Wisteria.md | 448 + src/content/stories/Zendian.md | 255 + src/content/visuals/001-hoarse-man.md | 6 + src/content/visuals/002-glitch-demon.md | 6 + src/content/visuals/003-window-inspector.md | 5 + src/content/visuals/004-four.png.md | 6 + .../visuals/005-moonless-rooms-zine.md | 6 + src/layouts/Gallery/Gallery.astro | 75 + src/layouts/Gallery/index.ts | 1 + src/layouts/Gallery/styles.css | 44 + src/layouts/Post/index.astro | 57 + src/layouts/Post/styles.css | 73 + src/layouts/index.ts | 2 + src/pages/404.astro | 5 + src/pages/[collection]/[id].astro | 33 + src/pages/[collection]/index.astro | 19 + src/pages/admin.html | 13 + src/pages/index.astro | 40 + src/pages/rss.xml.js | 17 + src/pages/styles.css | 338 + src/styles/global.css | 43 + src/types/index.ts | 3 + src/utils/chunkItemsByYear.ts | 20 + src/utils/css-snips.css | 19 + src/utils/dateSortFn.ts | 10 + src/utils/formatters.ts | 11 + src/utils/getAllCollections.ts | 9 + src/utils/getAllPosts.ts | 13 + src/utils/getAllPostsByYear.ts | 26 + src/utils/getDateObj.ts | 8 + src/utils/getFileExtension.ts | 3 + src/utils/getPostData.ts | 6 + src/utils/getPostUrl.ts | 10 + src/utils/getPropByString.ts | 17 + src/utils/index.ts | 12 + src/utils/isNew.ts | 22 + src/utils/sortPosts.ts | 27 + tsconfig.json | 18 + 174 files changed, 25684 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 README.md create mode 100644 astro.config.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/about.txt create mode 100644 public/admin/config.yml create mode 100644 public/favicon.ico create mode 100644 public/site.webmanifest create mode 100644 src/components/BaseHead/BaseHead.astro create mode 100644 src/components/LatestFeed/LatestFeed.astro create mode 100644 src/components/LatestFeed/LatestLink.astro create mode 100644 src/components/LatestFeed/styles.css create mode 100644 src/components/NavLinks/NavLinks.astro create mode 100644 src/components/NavLinks/styles.css create mode 100644 src/components/common/AdultFlag/AdultFlag.astro create mode 100644 src/components/common/AdultFlag/styles.css create mode 100644 src/components/common/FormattedDate/FormattedDate.astro create mode 100644 src/components/common/FormattedDate/styles.css create mode 100644 src/components/common/Link/Link.astro create mode 100644 src/components/common/LinkToPost/LinkToPost.astro create mode 100644 src/components/common/LinkToPost/styles.css create mode 100644 src/components/common/NewFlag/NewFlag.astro create mode 100644 src/components/common/NewFlag/styles.css create mode 100644 src/components/common/index.ts create mode 100644 src/components/gallery/AudioItem/AudioItem.astro create mode 100644 src/components/gallery/AudioItem/styles.css create mode 100644 src/components/gallery/ImageItem/ImageItem.astro create mode 100644 src/components/gallery/ImageItem/styles.css create mode 100644 src/components/gallery/WritingItem/WritingItem.astro create mode 100644 src/components/gallery/WritingItem/styles.css create mode 100644 src/components/gallery/index.ts create mode 100644 src/components/index.ts create mode 100644 src/const/collectionKeyMaps.ts create mode 100644 src/const/index.ts create mode 100644 src/const/strings.ts create mode 100644 src/const/urls.ts create mode 100644 src/content.config.ts create mode 100644 src/content/apps/Disic.md create mode 100644 src/content/apps/Hare Trigger.md create mode 100644 src/content/apps/JOLB.md create mode 100644 src/content/commissions/001-1492415364-boxerbunny-boxer.md create mode 100644 src/content/commissions/002-1500346995-boxerbunny-icon-boxerbunny-both.md create mode 100644 src/content/commissions/003-1500347120-boxerbunny-pride17bb_copy.md create mode 100644 src/content/commissions/004-1500347268-boxerbunny-boxerbuns2.0.md create mode 100644 src/content/commissions/005-1503019784-boxerbunny-photo-2017-08-17.jpg.md create mode 100644 src/content/commissions/006-1504452641-boxerbunny-1p1hoto-aug-19.jpg.md create mode 100644 src/content/commissions/007-1515022119-boxerbunny-djyhkeavaaaptqz.jpg.md create mode 100644 src/content/commissions/008-1515022210-boxerbunny-photo-2017-11-30.jpg.md create mode 100644 src/content/commissions/009-Boxer2.0-ref.md create mode 100644 src/content/commissions/010-1520214373-dragonessdrei-boxer-icon.md create mode 100644 src/content/commissions/011-1521581447-boxerbunny-photo-2018-03-09.jpg.md create mode 100644 src/content/commissions/012-1521581566-spreaderbar-boxer.png.md create mode 100644 src/content/commissions/013-1535688982-boxerbunny-hypno-ych.md create mode 100644 src/content/commissions/014-1578748845-snow-bun.jpg.md create mode 100644 src/content/commissions/015-1592572897-boxerbunny-ref3.jpg.md create mode 100644 src/content/commissions/016-1594665478-boxerbunny-ref4.jpg.md create mode 100644 src/content/commissions/017-1672705093-snezz-boxerbunny.png.md create mode 100644 src/content/commissions/018-1672705143-all-you-need.jpg.md create mode 100644 src/content/commissions/019-1672705271-dusty-sweater1.jpg.md create mode 100644 src/content/commissions/020-1672705388-dusty-sweater2.png.md create mode 100644 src/content/commissions/021-1672705575-merrin-ref.png.md create mode 100644 src/content/commissions/022-1672800799-merrin-sketch-sheet.jpg.md create mode 100644 src/content/commissions/023-1673639819-merrin-aerial.png.md create mode 100644 src/content/commissions/024-1675300541-stuck-ych.png.md create mode 100644 src/content/commissions/025-1675300601-stuck-chastity.png.md create mode 100644 src/content/commissions/026-1676735351-merrin-pfp.png.md create mode 100644 src/content/commissions/027-1676735498-merrin-pfp2.png.md create mode 100644 src/content/commissions/028-1676735606-nautilus-friend.png.md create mode 100644 src/content/commissions/029-1677494199-quizzical.png.md create mode 100644 src/content/commissions/030-1691172816-hypno-icon.jpg.md create mode 100644 src/content/commissions/031-1692198216-paws.jpg.md create mode 100644 src/content/commissions/032-IMG_0071-first-commission.png.md create mode 100644 src/content/commissions/033-IMG_4558-boxer-sketch.jpg.md create mode 100644 src/content/commissions/034-photo-2020-03-25-candy-gore.jpg.md create mode 100644 src/content/commissions/035-photo-2024-04-22-twinks.jpg.md create mode 100644 src/content/commissions/036-photo-2024-11-11-kit-and-kairo.jpg.md create mode 100644 src/content/commissions/037-5168159333425023839-fem-kairo-sketch.jpg.md create mode 100644 src/content/commissions/038-orgy-ych.png.md create mode 100644 src/content/commissions/039-1683349109-shibari-ych.png.md create mode 100644 src/content/commissions/040-photo-2024-04-29-kairo-pinup.jpg.md create mode 100644 src/content/commissions/041-photo-2023-10-16-kairo-bondage-sketch.jpg.md create mode 100644 src/content/commissions/042-pink-jackrabbit-hypnotic-wallpaper.md create mode 100644 src/content/poems/A fox drags the dusk.md create mode 100644 src/content/poems/Anchorite Autumn.md create mode 100644 src/content/poems/Caustics.md create mode 100644 src/content/poems/Gender (noun).md create mode 100644 src/content/poems/Image18(Fixed).BMP.md create mode 100644 src/content/poems/Lostwave Girl.md create mode 100644 src/content/poems/MOON10.RAW.md create mode 100644 src/content/poems/My old neighborhood is not that old.md create mode 100644 src/content/poems/November 5th, Petworth.md create mode 100644 src/content/poems/Slushwave Girl.md create mode 100644 src/content/poems/Sonnet for Your Werewolf Boyfriend.md create mode 100644 src/content/poems/Sonnet for a Silent House.md create mode 100644 src/content/poems/Sonnet for the Abomination Currently Destroying Our Cathedral.md create mode 100644 src/content/poems/The Darkest Wild.md create mode 100644 src/content/poems/Three Ideas About Maine.md create mode 100644 src/content/poems/Unsent Letters I - To Lacey, From Gray.md create mode 100644 src/content/poems/Unsent Letters II - To Gray, From Lacey.md create mode 100644 src/content/poems/field_thing_9.jpg.md create mode 100644 src/content/songs/001-640x480.md create mode 100644 src/content/songs/002-photograph-canon-in-deez-remix.md create mode 100644 src/content/songs/003-ocean-planet.md create mode 100644 src/content/songs/004-maple-buttered-groovecakes.md create mode 100644 src/content/songs/005-doom-treadings.md create mode 100644 src/content/songs/006-interlude.md create mode 100644 src/content/songs/007-lisa-frank-dolphins.md create mode 100644 src/content/songs/008-cold-hell-beyond-the-moon.md create mode 100644 src/content/songs/009-all-i-want-christmas-but-only-when-she-says-christmas.md create mode 100644 src/content/songs/010-dechristmased.md create mode 100644 src/content/stories/21 Church Rd.md create mode 100644 src/content/stories/A Snowy Day.md create mode 100644 src/content/stories/All the Way Dark.md create mode 100644 src/content/stories/Career Shift.md create mode 100644 src/content/stories/Carpe Diem, My Dude.md create mode 100644 src/content/stories/Cinnamon.md create mode 100644 src/content/stories/Cottonbrain.md create mode 100644 src/content/stories/Dale Cooper at Anthrocon.md create mode 100644 src/content/stories/Dreamer in the Dunes.md create mode 100644 src/content/stories/Feel Good.md create mode 100644 src/content/stories/Floating and Sinking.md create mode 100644 src/content/stories/Furniture.md create mode 100644 src/content/stories/Moongazer.md create mode 100644 src/content/stories/Punch Bowl.md create mode 100644 src/content/stories/Sunbask.md create mode 100644 src/content/stories/Tell Me Your Secret.md create mode 100644 src/content/stories/The Corpse Road.md create mode 100644 src/content/stories/The Onyx Palace, Pt. I.md create mode 100644 src/content/stories/The Onyx Palace, Pt. II.md create mode 100644 src/content/stories/The Onyx Palace, Pt. III.md create mode 100644 src/content/stories/The Quarry Junction Challenge.md create mode 100644 src/content/stories/The Serve.md create mode 100644 src/content/stories/Wisteria.md create mode 100644 src/content/stories/Zendian.md create mode 100644 src/content/visuals/001-hoarse-man.md create mode 100644 src/content/visuals/002-glitch-demon.md create mode 100644 src/content/visuals/003-window-inspector.md create mode 100644 src/content/visuals/004-four.png.md create mode 100644 src/content/visuals/005-moonless-rooms-zine.md create mode 100644 src/layouts/Gallery/Gallery.astro create mode 100644 src/layouts/Gallery/index.ts create mode 100644 src/layouts/Gallery/styles.css create mode 100644 src/layouts/Post/index.astro create mode 100644 src/layouts/Post/styles.css create mode 100644 src/layouts/index.ts create mode 100644 src/pages/404.astro create mode 100644 src/pages/[collection]/[id].astro create mode 100644 src/pages/[collection]/index.astro create mode 100644 src/pages/admin.html create mode 100644 src/pages/index.astro create mode 100644 src/pages/rss.xml.js create mode 100644 src/pages/styles.css create mode 100644 src/styles/global.css create mode 100644 src/types/index.ts create mode 100644 src/utils/chunkItemsByYear.ts create mode 100644 src/utils/css-snips.css create mode 100644 src/utils/dateSortFn.ts create mode 100644 src/utils/formatters.ts create mode 100644 src/utils/getAllCollections.ts create mode 100644 src/utils/getAllPosts.ts create mode 100644 src/utils/getAllPostsByYear.ts create mode 100644 src/utils/getDateObj.ts create mode 100644 src/utils/getFileExtension.ts create mode 100644 src/utils/getPostData.ts create mode 100644 src/utils/getPostUrl.ts create mode 100644 src/utils/getPropByString.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/isNew.ts create mode 100644 src/utils/sortPosts.ts create mode 100644 tsconfig.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4a9a7cc --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +*.zip filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a1f113d --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +stfolder/ + +# sub-projects +src/content/apps/disic + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..56f043d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"], + "unwantedRecommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..d20e864 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Astro Starter Kit: Blog + +```sh +npm create astro@latest -- --template blog +``` + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! + +Features: + +- ✅ Minimal styling (make it your own!) +- ✅ 100/100 Lighthouse performance +- ✅ SEO-friendly with canonical URLs and OpenGraph data +- ✅ Sitemap support +- ✅ RSS Feed support +- ✅ Markdown & MDX support + +## 🚀 Project Structure + +Inside of your Astro project, you'll see the following folders and files: + +```text +├── public/ +├── src/ +│   ├── components/ +│   ├── content/ +│   ├── layouts/ +│   └── pages/ +├── astro.config.mjs +├── README.md +├── package.json +└── tsconfig.json +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + +The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more. + +Any static assets, like images, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## 👀 Want to learn more? + +Check out [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). + +## Credit + +This theme is based off of the lovely [Bear Blog](https://github.com/HermanMartinus/bearblog/). diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..99f2f32 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,10 @@ +// @ts-check +import mdx from "@astrojs/mdx"; +import sitemap from "@astrojs/sitemap"; +import { defineConfig } from "astro/config"; + +// https://astro.build/config +export default defineConfig({ + site: "https://jackrabbits.gay", + integrations: [mdx(), sitemap()], +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bdb12d1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14442 @@ +{ + "name": "jackrabbits-gay", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "jackrabbits-gay", + "version": "0.0.1", + "dependencies": { + "@astrojs/mdx": "^5.0.3", + "@astrojs/rss": "^4.0.18", + "@astrojs/sitemap": "^3.7.2", + "astro": "^6.1.3", + "better-auth": "^1.5.5", + "decap-cms-app": "^3.10.1", + "sharp": "^0.34.3" + }, + "devDependencies": { + "@types/node": "^25.2.1", + "astro-compress": "2.3.9" + }, + "engines": { + "node": ">=24", + "npm": ">=11" + } + }, + "node_modules/@astrojs/compiler": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.1.tgz", + "integrity": "sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.8.0.tgz", + "integrity": "sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w==", + "license": "MIT", + "dependencies": { + "picomatch": "^4.0.3" + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.0.tgz", + "integrity": "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.8.0", + "@astrojs/prism": "4.0.1", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-5.0.3.tgz", + "integrity": "sha512-zv/OlM5sZZvyjHqJjR3FjJvoCgbxdqj3t4jO/gSEUNcck3BjdtMgNQw8UgPfAGe4yySdG4vjZ3OC5wUxhu7ckg==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "7.1.0", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.16.0", + "es-module-lexer": "^2.0.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "astro": "^6.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.1.tgz", + "integrity": "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.18.tgz", + "integrity": "sha512-wc5DwKlbTEdgVAWnHy8krFTeQ42t1v/DJqeq5HtulYK3FYHE4krtRGjoyhS3eXXgfdV6Raoz2RU3wrMTFAitRg==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^5.5.7", + "piccolore": "^0.1.3", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.2.tgz", + "integrity": "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@better-auth/core": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.5.5.tgz", + "integrity": "sha512-1oR/2jAp821Dcf67kQYHUoyNcdc1TcShfw4QMK0YTVntuRES5mUOyvEJql5T6eIuLfaqaN4LOF78l0FtF66HXA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@cloudflare/workers-types": ">=4", + "better-call": "1.3.2", + "jose": "^6.1.0", + "kysely": "^0.28.5", + "nanostores": "^1.0.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/@better-auth/drizzle-adapter": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.5.5.tgz", + "integrity": "sha512-HAi9xAP40oDt48QZeYBFTcmg3vt1Jik90GwoRIfangd7VGbxesIIDBJSnvwMbZ52GBIc6+V4FRw9lasNiNrPfw==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/utils": "^0.3.0", + "drizzle-orm": ">=0.41.0" + }, + "peerDependenciesMeta": { + "drizzle-orm": { + "optional": true + } + } + }, + "node_modules/@better-auth/kysely-adapter": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.5.5.tgz", + "integrity": "sha512-LmHffIVnqbfsxcxckMOoE8MwibWrbVFch+kwPKJ5OFDFv6lin75ufN7ZZ7twH0IMPLT/FcgzaRjP8jRrXRef9g==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/utils": "^0.3.0", + "kysely": "^0.27.0 || ^0.28.0" + } + }, + "node_modules/@better-auth/memory-adapter": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.5.5.tgz", + "integrity": "sha512-4X0j1/2L+nsgmObjmy9xEGUFWUv38Qjthp558fwS3DAp6ueWWyCaxaD6VJZ7m5qPNMrsBStO5WGP8CmJTEWm7g==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/utils": "^0.3.0" + } + }, + "node_modules/@better-auth/mongo-adapter": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.5.5.tgz", + "integrity": "sha512-P1J9ljL5X5k740I8Rx1esPWNgWYPdJR5hf2CY7BwDSrQFPUHuzeCg0YhtEEP55niNateTXhBqGAcy0fVOeamZg==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/utils": "^0.3.0", + "mongodb": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@better-auth/prisma-adapter": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.5.5.tgz", + "integrity": "sha512-CliDd78CXHzzwQIXhCdwGr5Ml53i6JdCHWV7PYwTIJz9EAm6qb2RVBdpP3nqEfNjINGM22A6gfleCgCdZkTIZg==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/utils": "^0.3.0", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@prisma/client": { + "optional": true + }, + "prisma": { + "optional": true + } + } + }, + "node_modules/@better-auth/telemetry": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.5.5.tgz", + "integrity": "sha512-1+lklxArn4IMHuU503RcPdXrSG2tlXt4jnGG3omolmspQ7tktg/Y9XO/yAkYDurtvMn1xJ8X1Ov01Ji/r5s9BQ==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21" + }, + "peerDependencies": { + "@better-auth/core": "1.5.5" + } + }, + "node_modules/@better-auth/utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.3.1.tgz", + "integrity": "sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==", + "license": "MIT" + }, + "node_modules/@better-fetch/fetch": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.1.21.tgz", + "integrity": "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==" + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.1.0.tgz", + "integrity": "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==", + "license": "MIT", + "dependencies": { + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.1.0.tgz", + "integrity": "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.1.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/accessibility/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@dnd-kit/modifiers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-6.0.1.tgz", + "integrity": "sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.6", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/modifiers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@dnd-kit/sortable": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-7.0.2.tgz", + "integrity": "sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.0.7", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "license": "ISC" + }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", + "license": "Apache-2.0" + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-style-spec": { + "version": "13.28.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.28.0.tgz", + "integrity": "sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/unitbezier": "^0.0.0", + "csscolorparser": "~1.0.2", + "json-stringify-pretty-compact": "^2.0.0", + "minimist": "^1.2.6", + "rw": "^1.3.3", + "sort-object": "^0.3.2" + }, + "bin": { + "gl-style-composite": "bin/gl-style-composite.js", + "gl-style-format": "bin/gl-style-format.js", + "gl-style-migrate": "bin/gl-style-migrate.js", + "gl-style-validate": "bin/gl-style-validate.js" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "license": "BSD-2-Clause" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", + "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@noble/ciphers": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", + "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@petamoriken/float16": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.9.3.tgz", + "integrity": "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==", + "license": "MIT" + }, + "node_modules/@playform/pipe": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@playform/pipe/-/pipe-0.1.4.tgz", + "integrity": "sha512-SM3iJ5VHA61NsYMrtvk8DAZwkrpPtBCiJnfWjj1iX6Ke/hnHLqVjTmkXG087UMOa9Z+3J/zUoAkzf3Al6tiS8A==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@types/node": "25.0.3", + "deepmerge-ts": "7.1.5", + "fast-glob": "3.3.3" + } + }, + "node_modules/@playform/pipe/node_modules/@types/node": { + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@playform/pipe/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-dnd/asap": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", + "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==", + "license": "MIT" + }, + "node_modules/@react-dnd/invariant": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", + "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==", + "license": "MIT" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", + "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==", + "license": "MIT" + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "license": "MIT", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz", + "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz", + "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz", + "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz", + "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@types/css-tree": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@types/css-tree/-/css-tree-2.3.11.tgz", + "integrity": "sha512-aEokibJOI77uIlqoBOkVbaQGC9zII0A+JH1kcTNKW2CwyYWD8KM6qdo+4c77wD3wZOQfJuNWAr9M4hdk+YhDIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/csso": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/csso/-/csso-5.0.4.tgz", + "integrity": "sha512-W/FsRkm/9c04x9ON+bj+HQ0cSgNkG1LvcfuBCpkP7cpikM7+RkrNFLGtiofb++xBG6KGMUycLoDbi9/K621ZCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/css-tree": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz", + "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.2.tgz", + "integrity": "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.34", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", + "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/zen-observable": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.7.tgz", + "integrity": "sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vercel/stega": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@vercel/stega/-/stega-0.1.2.tgz", + "integrity": "sha512-P7mafQXjkrsoyTRppnt0N21udKS9wUmLXHRyP9saLXLHw32j/FgUJ3FscSWgvSqRs4cj7wKZtwqJEvWJ2jbGmA==", + "license": "MPL-2.0" + }, + "node_modules/@wry/context": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.4.4.tgz", + "integrity": "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag==", + "license": "MIT", + "dependencies": { + "@types/node": ">=6", + "tslib": "^1.9.3" + } + }, + "node_modules/@wry/equality": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", + "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^8.0.1" + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/apollo-cache": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.5.tgz", + "integrity": "sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA==", + "license": "MIT", + "dependencies": { + "apollo-utilities": "^1.3.4", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-cache-inmemory": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz", + "integrity": "sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A==", + "license": "MIT", + "dependencies": { + "apollo-cache": "^1.3.5", + "apollo-utilities": "^1.3.4", + "optimism": "^0.10.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-client": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.10.tgz", + "integrity": "sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA==", + "license": "MIT", + "dependencies": { + "@types/zen-observable": "^0.8.0", + "apollo-cache": "1.3.5", + "apollo-link": "^1.0.0", + "apollo-utilities": "1.3.4", + "symbol-observable": "^1.0.2", + "ts-invariant": "^0.4.0", + "tslib": "^1.10.0", + "zen-observable": "^0.8.0" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-link": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", + "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", + "license": "MIT", + "dependencies": { + "apollo-utilities": "^1.3.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.21" + }, + "peerDependencies": { + "graphql": "^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-link-context": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.20.tgz", + "integrity": "sha512-MLLPYvhzNb8AglNsk2NcL9AvhO/Vc9hn2ZZuegbhRHGet3oGr0YH9s30NS9+ieoM0sGT11p7oZ6oAILM/kiRBA==", + "license": "MIT", + "dependencies": { + "apollo-link": "^1.2.14", + "tslib": "^1.9.3" + } + }, + "node_modules/apollo-link-http": { + "version": "1.5.17", + "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.17.tgz", + "integrity": "sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg==", + "license": "MIT", + "dependencies": { + "apollo-link": "^1.2.14", + "apollo-link-http-common": "^0.2.16", + "tslib": "^1.9.3" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-link-http-common": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz", + "integrity": "sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==", + "license": "MIT", + "dependencies": { + "apollo-link": "^1.2.14", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/apollo-utilities": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", + "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", + "license": "MIT", + "dependencies": { + "@wry/equality": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/array-move": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/array-move/-/array-move-4.0.0.tgz", + "integrity": "sha512-+RY54S8OuVvg94THpneQvFRmqWdAHeqtMzgMW6JNurHxe8rsS07cHQdfGkXnTUXiBcyZ0j3SiDIxxj0RPiqCkQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-6.1.3.tgz", + "integrity": "sha512-FUKbBYOdYYrRNZwDd9I5CVSfR6Nj9aZeNzcjcvh1FgHwR0uXawkYFR3HiGxmdmAB2m8fs0iIkDdsiUfwGeO8qA==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^3.0.1", + "@astrojs/internal-helpers": "0.8.0", + "@astrojs/markdown-remark": "7.1.0", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^1.1.1", + "devalue": "^5.6.3", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.27.3", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "rehype": "^13.0.2", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unist-util-visit": "^5.1.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^7.3.1", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-compress": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-2.3.9.tgz", + "integrity": "sha512-nTaOqWtKq2dZw4LquHgZJobsdobgZXpt+pSU/uYZVrYhOSK1zecM4fgQc1RR5/xS6QsOne0fYdkhUQw4PD1WQw==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@playform/pipe": "0.1.4", + "@types/csso": "5.0.4", + "@types/html-minifier-terser": "7.0.2", + "astro": "5.16.8", + "commander": "14.0.2", + "csso": "5.0.5", + "deepmerge-ts": "7.1.5", + "fast-glob": "3.3.3", + "html-minifier-terser": "7.2.0", + "kleur": "4.1.5", + "lightningcss": "1.30.2", + "sharp": "0.34.5", + "svgo": "4.0.0", + "terser": "5.44.1" + } + }, + "node_modules/astro-compress/node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/astro-compress/node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "dev": true, + "license": "MIT" + }, + "node_modules/astro-compress/node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/astro-compress/node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/astro-compress/node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/astro-compress/node_modules/astro": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.8.tgz", + "integrity": "sha512-gzZE+epuCrNuxOa8/F1dzkllDOFvxWhGeobQKeBRIAef5sUpUKMHZo/8clse+02rYnKJCgwXBgjW4uTu9mqUUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.1", + "diff": "^5.2.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.20.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.1", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.3", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-compress/node_modules/astro/node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/astro-compress/node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "license": "ISC" + }, + "node_modules/astro-compress/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/astro-compress/node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/astro-compress/node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/astro-compress/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/astro-compress/node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/astro-compress/node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astro-compress/node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astro-compress/node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astro-compress/node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/astro-compress/node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/astro-compress/node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/astro-compress/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/astro-compress/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/astro-compress/node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "dev": true, + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-auth": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.5.5.tgz", + "integrity": "sha512-GpVPaV1eqr3mOovKfghJXXk6QvlcVeFbS3z+n+FPDid5rK/2PchnDtiaVCzWyXA9jH2KkirOfl+JhAUvnja0Eg==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.5.5", + "@better-auth/drizzle-adapter": "1.5.5", + "@better-auth/kysely-adapter": "1.5.5", + "@better-auth/memory-adapter": "1.5.5", + "@better-auth/mongo-adapter": "1.5.5", + "@better-auth/prisma-adapter": "1.5.5", + "@better-auth/telemetry": "1.5.5", + "@better-auth/utils": "0.3.1", + "@better-fetch/fetch": "1.1.21", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "better-call": "1.3.2", + "defu": "^6.1.4", + "jose": "^6.1.3", + "kysely": "^0.28.11", + "nanostores": "^1.1.1", + "zod": "^4.3.6" + }, + "peerDependencies": { + "@lynx-js/react": "*", + "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", + "@sveltejs/kit": "^2.0.0", + "@tanstack/react-start": "^1.0.0", + "@tanstack/solid-start": "^1.0.0", + "better-sqlite3": "^12.0.0", + "drizzle-kit": ">=0.31.4", + "drizzle-orm": ">=0.41.0", + "mongodb": "^6.0.0 || ^7.0.0", + "mysql2": "^3.0.0", + "next": "^14.0.0 || ^15.0.0 || ^16.0.0", + "pg": "^8.0.0", + "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0", + "solid-js": "^1.0.0", + "svelte": "^4.0.0 || ^5.0.0", + "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "@tanstack/react-start": { + "optional": true + }, + "@tanstack/solid-start": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-kit": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "next": { + "optional": true + }, + "pg": { + "optional": true + }, + "prisma": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vitest": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/better-call": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.3.2.tgz", + "integrity": "sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==", + "license": "MIT", + "dependencies": { + "@better-auth/utils": "^0.3.1", + "@better-fetch/fetch": "^1.1.21", + "rou3": "^0.7.12", + "set-cookie-parser": "^3.0.1" + }, + "peerDependencies": { + "zod": "^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-7.2.0.tgz", + "integrity": "sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camel-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chain-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz", + "integrity": "sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg==", + "license": "MIT" + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codemirror": { + "version": "5.65.21", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.21.tgz", + "integrity": "sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ==", + "license": "MIT" + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, + "node_modules/consolidated-events": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", + "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", + "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decap-cms-app": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/decap-cms-app/-/decap-cms-app-3.10.1.tgz", + "integrity": "sha512-i8y49qkgc8Yy3CcCBnlEtvkH0cZRssO7ck0xzLN1LKo1V4+/vXI+82ZcatTfFRuJOqCxD8ZYezsGFuZNJ8Ktiw==", + "license": "MIT", + "dependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "ajv": "^8.17.1", + "ajv-errors": "^3.0.0", + "ajv-keywords": "^5.1.0", + "codemirror": "^5.46.0", + "dayjs": "^1.11.10", + "decap-cms-backend-aws-cognito-github-proxy": "^3.5.0", + "decap-cms-backend-azure": "^3.4.0", + "decap-cms-backend-bitbucket": "^3.3.1", + "decap-cms-backend-git-gateway": "^3.5.1", + "decap-cms-backend-gitea": "^3.3.0", + "decap-cms-backend-github": "^3.5.0", + "decap-cms-backend-gitlab": "^3.4.0", + "decap-cms-backend-proxy": "^3.3.0", + "decap-cms-backend-test": "^3.2.1", + "decap-cms-core": "^3.10.1", + "decap-cms-editor-component-image": "^3.2.1", + "decap-cms-lib-auth": "^3.0.6", + "decap-cms-lib-util": "^3.4.0", + "decap-cms-lib-widgets": "^3.3.0", + "decap-cms-locales": "^3.5.1", + "decap-cms-ui-auth": "^3.3.0", + "decap-cms-ui-default": "^3.5.1", + "decap-cms-widget-boolean": "^3.2.0", + "decap-cms-widget-code": "^3.4.0", + "decap-cms-widget-colorstring": "^3.2.0", + "decap-cms-widget-datetime": "^3.4.1", + "decap-cms-widget-file": "^3.2.0", + "decap-cms-widget-image": "^3.2.1", + "decap-cms-widget-list": "^3.5.0", + "decap-cms-widget-map": "^3.2.0", + "decap-cms-widget-markdown": "^3.6.1", + "decap-cms-widget-number": "^3.2.0", + "decap-cms-widget-object": "^3.4.0", + "decap-cms-widget-relation": "^3.5.2", + "decap-cms-widget-select": "^3.3.0", + "decap-cms-widget-string": "^3.2.0", + "decap-cms-widget-text": "^3.2.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react-immutable-proptypes": "^2.1.0", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-aws-cognito-github-proxy": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-aws-cognito-github-proxy/-/decap-cms-backend-aws-cognito-github-proxy-3.5.0.tgz", + "integrity": "sha512-DOfltCwgXqNrBcHpMlEgq7dMTrS34vZTu/Ud8p7dAzC/ne3Mer6c78w5uCXwU5fwr9kB2T7pk7/NaT+we/T7vQ==", + "license": "MIT", + "dependencies": { + "apollo-cache-inmemory": "^1.6.2", + "apollo-client": "^2.6.3", + "apollo-link-context": "^1.0.18", + "apollo-link-http": "^1.5.15", + "common-tags": "^1.8.0", + "graphql": "^15.0.0", + "graphql-tag": "^2.10.1", + "js-base64": "^3.0.0", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-backend-github": "^3.0.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-auth": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-azure": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-azure/-/decap-cms-backend-azure-3.4.0.tgz", + "integrity": "sha512-+CPPTDnp9n85OF6CoKje3ei4V0krzgnN6wRxmCqYJRACFLZXtE5YIQDQdRsS+9RdLZK9UPIDF6yx83AnO+gsaw==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.0.0", + "path-browserify": "^1.0.1", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-bitbucket": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/decap-cms-backend-bitbucket/-/decap-cms-backend-bitbucket-3.3.1.tgz", + "integrity": "sha512-t9KKzqgPGFpGKAh8AzXi4R5wjmZyeDNea+wCbAA7ul6HQhu/0mnIPqfhuL+C+NYtBpEY8THy8N4sjnx24SMqfQ==", + "license": "MIT", + "dependencies": { + "common-tags": "^1.8.0", + "js-base64": "^3.0.0", + "minimatch": "^7.0.0", + "path-browserify": "^1.0.1", + "semaphore": "^1.1.0", + "what-the-diff": "^0.6.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-git-gateway": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/decap-cms-backend-git-gateway/-/decap-cms-backend-git-gateway-3.5.1.tgz", + "integrity": "sha512-h1vlvKcB+J6WpqFfSrFJ2Q2D6pXFjd/wbH5fxHAkjNgqjyhTan4nkzblbQMWYJgFgtp1WOqSUvIMdOO1qKgICQ==", + "license": "MIT", + "dependencies": { + "gotrue-js": "^0.9.24", + "ini": "^2.0.0", + "jwt-decode": "^3.0.0", + "minimatch": "^7.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-backend-bitbucket": "^3.0.0", + "decap-cms-backend-github": "^3.0.0", + "decap-cms-backend-gitlab": "^3.0.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-auth": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-gitea": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-gitea/-/decap-cms-backend-gitea-3.3.0.tgz", + "integrity": "sha512-AABTNA8fKznYwchfCvnh+n0yTVDSzz5Z+d2HgY+BFSITjg1fo61iq75/qCuTZTEDz2Y1jrWDx6GFst1YbYO9PA==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.0.0", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-github": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-github/-/decap-cms-backend-github-3.5.0.tgz", + "integrity": "sha512-phRMaz8jQhQsbTyhnKd9E60EHHc1YL6l/nvwIxJn2rST9oZPN1o2nE7ZZTESgGTpsBYxxC8wQy2TY3xKMH+NRg==", + "license": "MIT", + "dependencies": { + "apollo-cache-inmemory": "^1.6.2", + "apollo-client": "^2.6.3", + "apollo-link-context": "^1.0.18", + "apollo-link-http": "^1.5.15", + "common-tags": "^1.8.0", + "graphql": "^15.0.0", + "graphql-tag": "^2.10.1", + "js-base64": "^3.0.0", + "path-browserify": "^1.0.1", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-gitlab": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-gitlab/-/decap-cms-backend-gitlab-3.4.0.tgz", + "integrity": "sha512-N4Vhl//tNcvznnEi4PaDUu6M56eI2vQFReqjek5XiUZk/7MAJHWDA5eFovI+B5yYedSTmnCzoWg9jyH5RgXMuA==", + "license": "MIT", + "dependencies": { + "apollo-cache-inmemory": "^1.6.2", + "apollo-client": "^2.6.3", + "apollo-link-context": "^1.0.18", + "apollo-link-http": "^1.5.15", + "js-base64": "^3.0.0", + "path-browserify": "^1.0.1", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-proxy": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decap-cms-backend-proxy/-/decap-cms-backend-proxy-3.3.0.tgz", + "integrity": "sha512-Tq+thq5JdjLEHr3mprI7tAmVIy+nIftL2Zqt+ndNo/QQX7LvBrottqXRZ6pg2HNQLl5tUQ8qozBTNpeLYkxGlQ==", + "license": "MIT", + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-backend-test": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/decap-cms-backend-test/-/decap-cms-backend-test-3.2.1.tgz", + "integrity": "sha512-ZsUnZ1wB0NNIFRDcU9GJiR3hvx40xHZVp978HVasEXlzleG9VgBfWODgagWnX5NFyl9m4NUCQ2Yx/QaP+fBo0A==", + "license": "MIT", + "dependencies": { + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "uuid": "^8.3.2" + } + }, + "node_modules/decap-cms-core": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/decap-cms-core/-/decap-cms-core-3.10.1.tgz", + "integrity": "sha512-X2HzWJ6naFYdi2s2DJwSx2DIX9FRAz8ihqLyrb2fmCMicAHqV6CK87WKGg0AyrKVIbulC8rEqmIPox+lJ2ihUg==", + "license": "MIT", + "dependencies": { + "@iarna/toml": "2.2.5", + "@reduxjs/toolkit": "^1.9.1", + "@vercel/stega": "^0.1.2", + "buffer": "^6.0.3", + "copy-text-to-clipboard": "^3.0.0", + "dayjs": "^1.11.10", + "deepmerge": "^4.2.2", + "diacritics": "^1.3.0", + "fuzzy": "^0.1.1", + "gotrue-js": "^0.9.24", + "gray-matter": "^4.0.2", + "history": "^4.7.2", + "immer": "^9.0.0", + "js-base64": "^3.0.0", + "jwt-decode": "^3.0.0", + "node-polyglot": "^2.3.0", + "path-browserify": "^1.0.1", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-dnd": "^14.0.0", + "react-dnd-html5-backend": "^14.0.0", + "react-dom": "^19.1.0", + "react-frame-component": "^5.2.1", + "react-immutable-proptypes": "^2.1.0", + "react-is": "16.13.1", + "react-markdown": "^6.0.2", + "react-modal": "^3.8.1", + "react-polyglot": "^0.7.0", + "react-redux": "^7.2.0", + "react-router-dom": "^5.2.0", + "react-scroll-sync": "^0.11.2", + "react-split-pane": "^0.1.85", + "react-toastify": "^9.1.1", + "react-topbar-progress-indicator": "^4.0.0", + "react-virtualized-auto-sizer": "^1.0.2", + "react-waypoint": "^10.0.0", + "react-window": "^1.8.5", + "redux": "^4.0.5", + "redux-devtools-extension": "^2.13.8", + "redux-notifications": "^4.0.1", + "redux-thunk": "^2.3.0", + "remark-gfm": "1.0.0", + "sanitize-filename": "^1.6.1", + "semaphore": "^1.0.5", + "tomlify-j0.4": "^3.0.0-alpha.0", + "url": "^0.11.0", + "url-join": "^4.0.1", + "what-input": "^5.1.4", + "yaml": "^1.8.3" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-editor-component-image": "^3.0.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-lib-util": "^3.0.0", + "decap-cms-lib-widgets": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-core/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/decap-cms-core/node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "license": "MIT", + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "license": "MIT", + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "license": "MIT", + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-core/node_modules/remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "license": "MIT", + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-core/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/decap-cms-core/node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-editor-component-image": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/decap-cms-editor-component-image/-/decap-cms-editor-component-image-3.2.1.tgz", + "integrity": "sha512-uFnPqLRaqL7FmRupKvMtL9oaE6d6gTuutcIJvuRkNmmToP/PeuFrpEIOBThyPxzjgX4AJm5OkdApiCeC1d0bzQ==", + "license": "MIT", + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-lib-auth": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/decap-cms-lib-auth/-/decap-cms-lib-auth-3.0.6.tgz", + "integrity": "sha512-AhssFTm/DOZFHpoFv5eoXTF4P2NvFeQDQ0aFsVxOwz3hGnx/uZ/PtAqJkkz1zdRp4bMB8BM6Eh+lkVB2RQhSww==", + "license": "MIT", + "peerDependencies": { + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "uuid": "^8.3.2" + } + }, + "node_modules/decap-cms-lib-util": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decap-cms-lib-util/-/decap-cms-lib-util-3.4.0.tgz", + "integrity": "sha512-dzqhNkafRCweJNRDe6A1n6cnkqfyXmmkYJIHjuIqf8IFQ+MVkLY909aBMsSkCn5DQiWKYwnAi83fcQfFa1BG4Q==", + "license": "MIT", + "dependencies": { + "js-sha256": "^0.9.0", + "localforage": "^1.7.3", + "semaphore": "^1.1.0" + }, + "peerDependencies": { + "immutable": "^3.7.6", + "lodash": "^4.17.11" + } + }, + "node_modules/decap-cms-lib-widgets": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decap-cms-lib-widgets/-/decap-cms-lib-widgets-3.3.0.tgz", + "integrity": "sha512-ua4JCcbF7HY+zJS2kWewq2/nnQnermTdehdFOYTDZEqcEtwN/6ONa36POeS5Bnu7rBw1M3K+YtY8v3BlXt5qWw==", + "license": "MIT", + "dependencies": { + "dayjs": "^1.11.10", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "immutable": "^3.7.6", + "lodash": "^4.17.11" + } + }, + "node_modules/decap-cms-locales": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/decap-cms-locales/-/decap-cms-locales-3.5.1.tgz", + "integrity": "sha512-vrLM7iLaFO/hQtQt18VLuRd3fLyKbphehz0QlhikVNkISLRWX9brlmsgPfLPfZ6dkzwTTkfeWqIBxaVWXJWGdQ==", + "license": "MIT" + }, + "node_modules/decap-cms-ui-auth": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decap-cms-ui-auth/-/decap-cms-ui-auth-3.3.0.tgz", + "integrity": "sha512-fepJ1wMxbYAD8awyAN1n4yWbeb5oWe5nd2DOAyt9zQI5m89p3Wsp4oXVwD2pLGFceU8F9PycHJ62AQ827sFqtw==", + "license": "MIT", + "dependencies": { + "jwt-decode": "^3.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-auth": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-ui-default": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/decap-cms-ui-default/-/decap-cms-ui-default-3.5.1.tgz", + "integrity": "sha512-pyQnb+FPDL3Cr8GQrXEfksJ9qJ++8IJ1vlS8dz2mGPdGRq0DcZCaN9IsGwYTWdcVnoqTeziAiMgwAhX823uwDw==", + "license": "MIT", + "dependencies": { + "react-aria-menubutton": "^7.0.0", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-boolean/-/decap-cms-widget-boolean-3.2.0.tgz", + "integrity": "sha512-T4dId4WPmmWids+GOK5xK3CA7IzSfH1bLNCGE7OGOG/r9EIuDaHW5rIsVkAhLGz2Spg39xyPNk3dfHfBd3b4Dw==", + "license": "MIT", + "peerDependencies": { + "@emotion/react": "^11.11.1", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-code": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-code/-/decap-cms-widget-code-3.4.0.tgz", + "integrity": "sha512-/lddVH/1+pb7D4lJQ2TZPIL4+WIJOWnasjLhTSc7fK+HW58ATKNg1MmIGDrxahyPSSZyxKfjqflYSGOGJihbfg==", + "license": "MIT", + "dependencies": { + "react-codemirror2": "^7.0.0", + "react-select": "^5.10.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "codemirror": "^5.46.0", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-colorstring": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-colorstring/-/decap-cms-widget-colorstring-3.2.0.tgz", + "integrity": "sha512-dz1z5XxrQ9JZ/QTXOyk9Wcsx54BlTsgqxYgAQYZcjOpPTj4drXj0JJNmn0KzGxvWKhj0jzMWPhT1VC4Uvgw99Q==", + "license": "MIT", + "dependencies": { + "react-color": "^2.18.1", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-ui-default": "^3.0.0", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-datetime": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/decap-cms-widget-datetime/-/decap-cms-widget-datetime-3.4.1.tgz", + "integrity": "sha512-Mh5vgtVb77IE++W2laA10IHJolNEJx/uYtoQ4iubtAhCnwjVxpBsxkFqtXL96MX3cSxC8OKJ6UvVgGrTxtxu1Q==", + "license": "MIT", + "dependencies": { + "dayjs": "^1.11.10" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-file/-/decap-cms-widget-file-3.2.0.tgz", + "integrity": "sha512-QlId1KLaY+7kOK1ESqlevqSU3CCOIY0MlpUw6JPO3josRj39En7InraFWOewzdr9f+raKI6M0pf2RFTRYg7zPg==", + "license": "MIT", + "dependencies": { + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2", + "array-move": "4.0.0", + "common-tags": "^1.8.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0", + "uuid": "^8.3.2" + } + }, + "node_modules/decap-cms-widget-image": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/decap-cms-widget-image/-/decap-cms-widget-image-3.2.1.tgz", + "integrity": "sha512-LCzIqUVNm+tWiLa56e1xe1w2Rfrjwie6gNhnchbX2o8XZoobNPbrg6kytp2+DiAuZGeEXKcv9E+HvPIeyzT1AA==", + "license": "MIT", + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-ui-default": "^3.0.0", + "decap-cms-widget-file": "^3.0.0", + "immutable": "^3.7.6", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-list": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-list/-/decap-cms-widget-list-3.5.0.tgz", + "integrity": "sha512-qkEvymI6CrXnhannRguaYhV7rhCQGyRE9zqqeihXU3+FtxWisS8xAJD237Amyxf1e4EvghIXUJ2ALdBW/ENLNQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-widgets": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "decap-cms-widget-object": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-map": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-map/-/decap-cms-widget-map-3.2.0.tgz", + "integrity": "sha512-vCLkVFUO3pU5pDAxJziHMOwXvryBqqHLBMkzbHn07kByAvWx9TbqssbBS5/V/iXOW6e18vb+aw0ZJSvclD+Mwg==", + "license": "MIT", + "dependencies": { + "ol": "^6.9.0" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "decap-cms-ui-default": "^3.0.0", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-markdown": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/decap-cms-widget-markdown/-/decap-cms-widget-markdown-3.6.1.tgz", + "integrity": "sha512-d3Hw+FM8KQVbtz1wuLyq+9LW8ncXKtgNHgI4z0kcu7kbB+FgFs/COGHdgARXtOdcY4XbM+DwR6MUzTKAPhiwaQ==", + "license": "MIT", + "dependencies": { + "detab": "^2.0.4", + "dompurify": "^3.2.6", + "is-hotkey": "^0.2.0", + "is-url": "^1.2.4", + "mdast-util-definitions": "^1.2.3", + "mdast-util-to-string": "^1.0.5", + "rehype-parse": "^6.0.0", + "rehype-remark": "^8.0.0", + "rehype-stringify": "^7.0.0", + "remark-parse": "^6.0.3", + "remark-rehype": "^4.0.0", + "remark-slate": "^1.8.6", + "remark-slate-transformer": "^0.7.4", + "remark-stringify": "^6.0.4", + "slate": "^0.118.1", + "slate-base64-serializer": "^0.2.107", + "slate-dom": "^0.118.1", + "slate-history": "^0.113.1", + "slate-hyperscript": "^0.100.0", + "slate-plain-serializer": "^0.7.3", + "slate-react": "^0.117.4", + "slate-soft-break": "^0.9.0", + "unified": "^9.2.0", + "unist-builder": "^1.0.3", + "unist-util-visit-parents": "^2.0.1", + "vfile-location": "^2.0.6" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/decap-cms-widget-markdown/node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/hast-util-to-html": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz", + "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/mdast-util-definitions": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz", + "integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/mdast-util-to-hast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-4.0.0.tgz", + "integrity": "sha512-yOTZSxR1aPvWRUxVeLaLZ1sCYrK87x2Wusp1bDM/Ao2jETBhYUKITI3nHvgy+HkZW54HuCAhHnS0mTcbECD5Ig==", + "license": "MIT", + "dependencies": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/rehype-stringify": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-7.0.0.tgz", + "integrity": "sha512-u3dQI7mIWN2X1H0MBFPva425HbkXgB+M39C9SM5leUS2kh5hHUn2SxQs2c2yZN5eIHipoLMojC0NP5e8fptxvQ==", + "license": "MIT", + "dependencies": { + "hast-util-to-html": "^7.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "license": "MIT", + "dependencies": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/remark-rehype": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-4.0.1.tgz", + "integrity": "sha512-k1GzhtRhXr1sZjX86OS7H4asQu5uOM9Tro//SpOdRaxax6o43mr7M7Np20ubJ+GM6eYjlEHtPv1rDN2hXs2plw==", + "license": "MIT", + "dependencies": { + "mdast-util-to-hast": "^4.0.0" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/trim-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz", + "integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "license": "MIT", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "license": "MIT", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "license": "MIT" + }, + "node_modules/decap-cms-widget-markdown/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-markdown/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/decap-cms-widget-number": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-number/-/decap-cms-widget-number-3.2.0.tgz", + "integrity": "sha512-+H57DZSPZduk/Z0hGNNGoCcd89/zPUgiPDn8lXmTzALqusK1GOReOvhfwwEK69/UYQ8NxJl8m+ipjKKLY2P7Aw==", + "license": "MIT", + "peerDependencies": { + "decap-cms-ui-default": "^3.0.0", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-object": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-object/-/decap-cms-widget-object-3.4.0.tgz", + "integrity": "sha512-Q/p5IHmANLs7J0SXv/fcdyXChtT/7YuhVHMvztDZQTjnEdV40F4EZzmQybYu1JvKL1LllFudRCeXbjULl7ql2A==", + "license": "MIT", + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-relation": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/decap-cms-widget-relation/-/decap-cms-widget-relation-3.5.2.tgz", + "integrity": "sha512-ceeOvY3J11xZXD6ijk6spvC0HrK5GwDYTGVkaDYo3ex5HGnIgxDDh9Z302lYp+WIWC85Q6j+SN6Qc+Vk4BOulQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/core": "^6.0.8", + "@dnd-kit/modifiers": "^6.0.1", + "@dnd-kit/sortable": "^7.0.2", + "react-select": "^5.10.0", + "react-window": "^1.8.5" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "decap-cms-lib-widgets": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "lodash": "^4.17.11", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "uuid": "^8.3.2" + } + }, + "node_modules/decap-cms-widget-select": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-select/-/decap-cms-widget-select-3.3.0.tgz", + "integrity": "sha512-5xeOhlImDDZYhXMzMYn2lzwsMDeBtK9IGJK2V5rq6jEi5wBZK0MVwSyDwAttUcp/WCJDEtNiZowjElC/f9bgsw==", + "license": "MIT", + "dependencies": { + "react-select": "^5.10.0" + }, + "peerDependencies": { + "decap-cms-lib-widgets": "^3.0.0", + "decap-cms-ui-default": "^3.0.0", + "immutable": "^3.7.6", + "prop-types": "^15.7.2", + "react": "^19.1.0", + "react-immutable-proptypes": "^2.1.0" + } + }, + "node_modules/decap-cms-widget-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-string/-/decap-cms-widget-string-3.2.0.tgz", + "integrity": "sha512-RcdSQEhvyIPDNlKm0GZcPWIlCDO+SpxewxK424RKazodimSwJGjmBfUWhDkVbbzS8TNQkgXVOqycYNGkWGKW9g==", + "license": "MIT", + "peerDependencies": { + "decap-cms-ui-default": "^3.0.0", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decap-cms-widget-text": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/decap-cms-widget-text/-/decap-cms-widget-text-3.2.0.tgz", + "integrity": "sha512-dUZzNW1YQwbrylGMLu+bDSfvLOsMlpCMb1AoOEeHgTyNvKS5/x+7t0vVh8Insz78i+z2eSv4uM9j31z4VzZfPg==", + "license": "MIT", + "dependencies": { + "react-textarea-autosize": "^8.0.0" + }, + "peerDependencies": { + "decap-cms-ui-default": "^3.0.0", + "prop-types": "^15.7.2", + "react": "^19.1.0" + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diacritics": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", + "integrity": "sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==", + "license": "MIT" + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", + "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dnd-core": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", + "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", + "license": "MIT", + "dependencies": { + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.1.1" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", + "license": "BSD-3-Clause" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-builder": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.1.3" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.10.tgz", + "integrity": "sha512-go2J2xODMc32hT+4Xr/bBGXMaIoiCwrwp2mMtAvKyvEFW6S/v5Gn2pBmE4nvbwNjGhpcAiOwEv7R6/GZ6XRa9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "fast-xml-builder": "^1.1.4", + "path-expression-matcher": "^1.2.1", + "strnum": "^2.2.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/focus-group": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/focus-group/-/focus-group-0.3.1.tgz", + "integrity": "sha512-IA01dzk2cStQso/qnt2rWhXCFBZlBfjZmohB9mXUx9feEaJcORAK0FQGvwaApsNNGwzEnqrp/2qTR4lq8PXfnQ==", + "license": "MIT" + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/geotiff": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.4.tgz", + "integrity": "sha512-aG8h9bJccGusioPsEWsEqx8qdXpZN71A20WCvRKGxcnHSOWLKmC5ZmsAmodfxb9TRQvs+89KikGuPzxchhA+Uw==", + "license": "MIT", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "lru-cache": "^6.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2" + }, + "engines": { + "browsers": "defaults", + "node": ">=10.19" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gotrue-js": { + "version": "0.9.29", + "resolved": "https://registry.npmjs.org/gotrue-js/-/gotrue-js-0.9.29.tgz", + "integrity": "sha512-NSFwJlFfWxHd1zHDitysbh+amFPHBAyQG1YmecZJTaSe8TlC7Wja1ewdUBikfJBblN3SqghS6aViMd+Q/pPzGQ==", + "license": "MIT", + "dependencies": { + "micro-api-client": "^3.2.1" + } + }, + "node_modules/graphql": { + "version": "15.10.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", + "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-tag/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/h3": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.8.tgz", + "integrity": "sha512-iOH6Vl8mGd9nNfu9C0IZ+GuOAfJHcyf3VriQxWaSWIB76Fg4BnFuk4cxBxjmQSSxJS664+pgjP6e7VBnUzFfcg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-embedded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-1.0.6.tgz", + "integrity": "sha512-JQMW+TJe0UAIXZMjCJ4Wf6ayDV9Yv3PBDPsHD4ExBpAspJ6MOcCX+nzVF+UJVv7OqPcg852WEMSHQPoRA+FVSw==", + "license": "MIT", + "dependencies": { + "hast-util-is-element": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-embedded/node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz", + "integrity": "sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-7.1.3.tgz", + "integrity": "sha512-3vER9p8B8mCs5b2qzoBiWlC9VnTkFmr8Ufb1eKdcvhVY+nipt52YfMRshk5r9gOE1IZ9/xtlSxebGCv1ig9uKA==", + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "hast-util-has-property": "^1.0.0", + "hast-util-is-element": "^1.1.0", + "hast-util-to-text": "^2.0.0", + "mdast-util-phrasing": "^2.0.0", + "mdast-util-to-string": "^1.0.0", + "rehype-minify-whitespace": "^4.0.3", + "repeat-string": "^1.6.1", + "trim-trailing-lines": "^1.1.0", + "unist-util-is": "^4.0.0", + "unist-util-visit": "^2.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/hast-util-to-mdast/node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/hast-util-to-text": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", + "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", + "license": "MIT", + "dependencies": { + "hast-util-is-element": "^1.0.0", + "repeat-string": "^1.0.0", + "unist-util-find-after": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/mdast-util-phrasing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-2.0.0.tgz", + "integrity": "sha512-G1rNlW/sViwzbBYD7+k3mKGtoWV2v4GBFky66OYHfktHe7Hg9R+hH4xpeoOtjYiwTvle8C8wlKMpgqPCkaeK8Q==", + "license": "MIT", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/unist-util-find-after": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", + "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", + "license": "MIT", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-mdast/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.3.tgz", + "integrity": "sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "license": "MIT" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", + "license": "MIT" + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isomorphic-base64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/isomorphic-base64/-/isomorphic-base64-1.0.2.tgz", + "integrity": "sha512-pQFyLwShVPA1Qr0dE1ZPguJkbOsFGDfSq6Wzz6XaO33v74X6/iQjgYPozwkeKGQxOI1/H3Fz7+ROtnV1veyKEg==", + "license": "MIT" + }, + "node_modules/jose": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.1.tgz", + "integrity": "sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "license": "MIT" + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kysely": { + "version": "0.28.12", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.12.tgz", + "integrity": "sha512-kWiueDWXhbCchgiotwXkwdxZE/6h56IHAeFWg4euUfW0YsmO9sxbAxzx1KLLv2lox15EfuuxHQvgJ1qIfZuHGw==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==", + "license": "Apache-2.0" + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "devOptional": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/mapbox-to-css-font": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.5.tgz", + "integrity": "sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==", + "license": "BSD-2-Clause" + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "license": "MIT" + }, + "node_modules/mdast-util-compact/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "license": "MIT", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/mdast-util-compact/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "license": "MIT", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-2.0.2.tgz", + "integrity": "sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/mdast-util-math/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/mdast-util-math/node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/mdast-util-math/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/mdast-util-math/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/mdast-util-math/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-math/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-math/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "license": "MIT" + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-api-client": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", + "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==", + "license": "ISC" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "7.4.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.9.tgz", + "integrity": "sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mongodb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.1.0.tgz", + "integrity": "sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^7.1.1", + "mongodb-connection-string-url": "^7.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": ">=7.0.0 <7.1.0", + "snappy": "^7.3.2", + "socks": "^2.8.6" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz", + "integrity": "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/whatwg-url": "^13.0.0", + "whatwg-url": "^14.1.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanostores": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-1.2.0.tgz", + "integrity": "sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/node-polyglot": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-polyglot/-/node-polyglot-2.6.0.tgz", + "integrity": "sha512-ZZFkaYzIfGfBvSM6QhA9dM8EEaUJOVewzGSRcXWbJELXDj0lajAtKaENCYxvF5yE+TgHg6NQb0CmgYMsMdcNJQ==", + "license": "BSD-2-Clause", + "dependencies": { + "hasown": "^2.0.2", + "object.entries": "^1.1.8", + "warning": "^4.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/ol": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/ol/-/ol-6.15.1.tgz", + "integrity": "sha512-ZG2CKTpJ8Q+tPywYysVwPk+yevwJzlbwjRKhoCvd7kLVWMbfBl1O/+Kg/yrZZrhG9FNXbFH4GeOZ5yVRqo3P4w==", + "license": "BSD-2-Clause", + "dependencies": { + "geotiff": "2.0.4", + "ol-mapbox-style": "^8.0.5", + "pbf": "3.2.1", + "rbush": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/ol-mapbox-style": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-8.2.1.tgz", + "integrity": "sha512-3kBBuZC627vDL8vnUdfVbCbfkhkcZj2kXPHQcuLhC4JJEA+XkEVEtEde8x8+AZctRbHwBkSiubTPaRukgLxIRw==", + "license": "BSD-2-Clause", + "dependencies": { + "@mapbox/mapbox-gl-style-spec": "^13.23.1", + "mapbox-to-css-font": "^2.4.1" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/optimism": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.10.3.tgz", + "integrity": "sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw==", + "license": "MIT", + "dependencies": { + "@wry/context": "^0.4.0" + } + }, + "node_modules/p-limit": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", + "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/param-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-headers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-expression-matcher": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.2.1.tgz", + "integrity": "sha512-d7gQQmLvAKXKXE2GeP9apIGbMYKz88zWdsn/BN2HRWVQsDFdUY36WSLTY0Jvd4HWi7Fb30gQ62oAOzdgJA6fZw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "license": "MIT", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-aria-menubutton": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/react-aria-menubutton/-/react-aria-menubutton-7.0.3.tgz", + "integrity": "sha512-Ql4W3rNiZmuVJ1wQ0UUeV4OZX3IZq2evsfEqJGefSMdfkK6o8X/6Ufxrzu0wL+/Dr7JUY3xnrnIQimSCFghlCQ==", + "license": "MIT", + "dependencies": { + "focus-group": "^0.3.1", + "prop-types": "^15.6.0", + "teeny-tap": "^0.2.0" + }, + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0" + } + }, + "node_modules/react-codemirror2": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-7.3.0.tgz", + "integrity": "sha512-gCgJPXDX+5iaPolkHAu1YbJ92a2yL7Je4TuyO3QEqOtI/d6mbEk08l0oIm18R4ctuT/Sl87X63xIMBnRQBXYXA==", + "license": "MIT", + "peerDependencies": { + "codemirror": "5.x", + "react": ">=15.5 <=17.x" + } + }, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "license": "MIT", + "dependencies": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-dnd": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz", + "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", + "license": "MIT", + "dependencies": { + "@react-dnd/invariant": "^2.0.0", + "@react-dnd/shallowequal": "^2.0.0", + "dnd-core": "14.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dnd-html5-backend": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", + "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", + "license": "MIT", + "dependencies": { + "dnd-core": "14.0.1" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-frame-component": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-5.2.7.tgz", + "integrity": "sha512-ROjHtSLoSVYUBfTieazj/nL8jIX9rZFmHC0yXEU+dx6Y82OcBEGgU9o7VyHMrBFUN9FuQ849MtIPNNLsb4krbg==", + "license": "MIT", + "peerDependencies": { + "prop-types": "^15.5.9", + "react": ">= 16.3", + "react-dom": ">= 16.3" + } + }, + "node_modules/react-immutable-proptypes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz", + "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.2" + }, + "peerDependencies": { + "immutable": ">=3.6.2" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz", + "integrity": "sha512-kQbpWiMoBHnj9myLlmZG9T1JdoT/OEyHK7hqM6CqFT14MAkgWiWBUYijLyBmxbntaN6dCDicPcUhWhci1QYodg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "prop-types": "^15.7.2", + "property-information": "^5.3.0", + "react-is": "^17.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "space-separated-tokens": "^1.1.0", + "style-to-object": "^0.3.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/react-markdown/node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/react-markdown/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/react-markdown/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/react-markdown/node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-markdown/node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/react-markdown/node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-markdown/node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/remark-rehype": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", + "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", + "license": "MIT", + "dependencies": { + "mdast-util-to-hast": "^10.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", + "license": "MIT", + "dependencies": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-polyglot": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/react-polyglot/-/react-polyglot-0.7.2.tgz", + "integrity": "sha512-d/075aofJ4of9wOSBewl+ViFkkM0L1DgE3RVDOXrHZ92w4o2643sTQJ6lSPw8wsJWFmlB/3Pvwm0UbGNvLfPBw==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "^3.3.0", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "node-polyglot": "^2.0.0", + "react": ">=16.8.0" + } + }, + "node_modules/react-redux": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-scroll-sync": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/react-scroll-sync/-/react-scroll-sync-0.11.3.tgz", + "integrity": "sha512-jKu5mqOaTSfryXbGn14+Rw1+tyc7gNTCHtkCUPBkwSvIp8IQ8AwYrts1BpZszyGVXj4LyBdz8GgPxqVv+uV+CA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.7" + }, + "peerDependencies": { + "react": "16.x || 17.x || 18.x", + "react-dom": "16.x || 17.x || 18.x" + } + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-split-pane": { + "version": "0.1.92", + "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.92.tgz", + "integrity": "sha512-GfXP1xSzLMcLJI5BM36Vh7GgZBpy+U/X0no+VM3fxayv+p1Jly5HpMofZJraeaMl73b3hvlr+N9zJKvLB/uz9w==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4", + "react-style-proptype": "^3.2.2" + }, + "peerDependencies": { + "react": "^16.0.0-0", + "react-dom": "^16.0.0-0" + } + }, + "node_modules/react-style-proptype": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.2.2.tgz", + "integrity": "sha512-ywYLSjNkxKHiZOqNlso9PZByNEY+FTyh3C+7uuziK0xFXu9xzdyfHwg4S9iyiRRoPCR4k2LqaBBsWVmSBwCWYQ==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.4" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", + "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-toastify": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", + "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", + "license": "MIT", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-toastify/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react-topbar-progress-indicator": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-topbar-progress-indicator/-/react-topbar-progress-indicator-4.1.1.tgz", + "integrity": "sha512-Oy3ENNKfymt16zoz5SYy/WOepMurB0oeZEyvuHm8JZ3jrTCe1oAUD7fG6HhYt5sg8Wcg5gdkzSWItaFF6c6VhA==", + "license": "MIT", + "dependencies": { + "topbar": "^0.1.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-virtualized-auto-sizer": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.26.tgz", + "integrity": "sha512-CblNyiNVw2o+hsa5/49NH2ogGxZ+t+3aweRvNSq7TVjDIlwk7ir4lencEg5HxHeSzwNarSkNkiu0qJSOXtxm5A==", + "license": "MIT", + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-waypoint": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/react-waypoint/-/react-waypoint-10.3.0.tgz", + "integrity": "sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "consolidated-events": "^1.1.0 || ^2.0.0", + "prop-types": "^15.0.0", + "react-is": "^17.0.1 || ^18.0.0" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-waypoint/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-window": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.11.tgz", + "integrity": "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-window/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "license": "MIT", + "dependencies": { + "lodash": "^4.0.1" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-devtools-extension": { + "version": "2.13.9", + "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", + "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", + "deprecated": "Package moved to @redux-devtools/extension.", + "license": "MIT", + "peerDependencies": { + "redux": "^3.1.0 || ^4.0.0" + } + }, + "node_modules/redux-notifications": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux-notifications/-/redux-notifications-4.0.1.tgz", + "integrity": "sha512-mRVaEcsvu5B4P8x8kW0uY83EQqaWL/0+/NvL4bdbHGJVg+Rwx54MgBU1s+tB6RAA2E6NX/DmQrO4EbFDcQSi+w==", + "license": "BSD-3-Clause", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.5.10", + "react-redux": "^4.0.0", + "react-transition-group": "^1.1.3" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0-0 || ^15.4.0-0 || ^16.0.0-0", + "react-dom": "^0.14.0 || ^15.0.0-0 || ^15.4.0-0 || ^16.0.0-0" + } + }, + "node_modules/redux-notifications/node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/redux-notifications/node_modules/react-redux": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz", + "integrity": "sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg==", + "license": "MIT", + "dependencies": { + "create-react-class": "^15.5.1", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.0.0", + "lodash": "^4.17.11", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0-0 || ^15.4.0-0 || ^16.0.0-0", + "redux": "^2.0.0 || ^3.0.0" + } + }, + "node_modules/redux-notifications/node_modules/react-transition-group": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz", + "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "chain-function": "^1.0.0", + "dom-helpers": "^3.2.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.5.6", + "warning": "^3.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0" + } + }, + "node_modules/redux-notifications/node_modules/redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" + } + }, + "node_modules/redux-notifications/node_modules/warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", + "license": "BSD-3-Clause", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "license": "MIT", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-minify-whitespace": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-4.0.5.tgz", + "integrity": "sha512-QC3Z+bZ5wbv+jGYQewpAAYhXhzuH/TVRx7z08rurBmh9AbG8Nu8oJnvs9LWj43Fd/C7UIhXoQ7Wddgt+ThWK5g==", + "license": "MIT", + "dependencies": { + "hast-util-embedded": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.4", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-minify-whitespace/node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-minify-whitespace/node_modules/hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-minify-whitespace/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "license": "MIT", + "dependencies": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "license": "MIT", + "dependencies": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "license": "MIT" + }, + "node_modules/rehype-parse/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-remark": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/rehype-remark/-/rehype-remark-8.1.1.tgz", + "integrity": "sha512-8HCmub9Fcy208A7RGbjmVlxTMYZXGaF7jsUE2tuvNKuaGFrk9yrYuKAXoTVC7QFwBPzTvEc5AOZKpUiWRkamlw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "hast-util-to-mdast": "^7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-remark/node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/rehype-remark/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/rehype-remark/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slate": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/remark-slate/-/remark-slate-1.8.6.tgz", + "integrity": "sha512-1Gmt5MGw25MRVP+0xTXqw9JQDWfRNWujD4YFCPg036a9DZYhn7mLFjM6jreHB+9hKa6RCMOm5thiXznAmdn8Ug==", + "license": "MIT", + "dependencies": { + "@types/escape-html": "^1.0.0", + "escape-html": "^1.0.3" + } + }, + "node_modules/remark-slate-transformer": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/remark-slate-transformer/-/remark-slate-transformer-0.7.5.tgz", + "integrity": "sha512-jyLLjp0wNoQnzy6kwDjUkyjpInCb3NoeJ+sEoNkWVWYpLNSln0toXtsqkYWvM9SH36RpNIxJyNRM/i2nhoJJdw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.10", + "mdast-util-math": "^2.0.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "unified": ">=10.1.0" + } + }, + "node_modules/remark-slate-transformer/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/remark-slate-transformer/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/remark-slate-transformer/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-stringify/node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "license": "MIT" + }, + "node_modules/remark-stringify/node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/remark-stringify/node_modules/stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rou3": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.7.12.tgz", + "integrity": "sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz", + "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/sitemap/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/slate": { + "version": "0.118.1", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.118.1.tgz", + "integrity": "sha512-6H1DNgnSwAFhq/pIgf+tLvjNzH912M5XrKKhP9Frmbds2zFXdSJ6L/uFNyVKxQIkPzGWPD0m+wdDfmEuGFH5Tg==", + "license": "MIT", + "dependencies": { + "immer": "^10.0.3", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-base64-serializer": { + "version": "0.2.115", + "resolved": "https://registry.npmjs.org/slate-base64-serializer/-/slate-base64-serializer-0.2.115.tgz", + "integrity": "sha512-GnLV7bUW/UQ5j7rVIxCU5zdB6NOVsEU6YWsCp68dndIjSGTGLaQv2+WwV3NcnrGGZEYe5qgo33j2QWrPws2C1A==", + "license": "MIT", + "dependencies": { + "isomorphic-base64": "^1.0.2" + }, + "peerDependencies": { + "slate": ">=0.32.0 <0.50.0" + } + }, + "node_modules/slate-dom": { + "version": "0.118.1", + "resolved": "https://registry.npmjs.org/slate-dom/-/slate-dom-0.118.1.tgz", + "integrity": "sha512-D6J0DF9qdJrXnRDVhYZfHzzpVxzqKRKFfS0Wcin2q0UC+OnQZ0lbCGJobatVbisOlbSe7dYFHBp9OZ6v1lEcbQ==", + "license": "MIT", + "dependencies": { + "@juggle/resize-observer": "^3.4.0", + "direction": "^1.0.4", + "is-hotkey": "^0.2.0", + "is-plain-object": "^5.0.0", + "lodash": "^4.17.21", + "scroll-into-view-if-needed": "^3.1.0", + "tiny-invariant": "1.3.1" + }, + "peerDependencies": { + "slate": ">=0.99.0" + } + }, + "node_modules/slate-dom/node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "license": "MIT" + }, + "node_modules/slate-history": { + "version": "0.113.1", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.113.1.tgz", + "integrity": "sha512-J9NSJ+UG2GxoW0lw5mloaKcN0JI0x2IA5M5FxyGiInpn+QEutxT1WK7S/JneZCMFJBoHs1uu7S7e6pxQjubHmQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/slate-hyperscript": { + "version": "0.100.0", + "resolved": "https://registry.npmjs.org/slate-hyperscript/-/slate-hyperscript-0.100.0.tgz", + "integrity": "sha512-fb2KdAYg6RkrQGlqaIi4wdqz3oa0S4zKNBJlbnJbNOwa23+9FLD6oPVx9zUGqCSIpy+HIpOeqXrg0Kzwh/Ii4A==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/slate-plain-serializer": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/slate-plain-serializer/-/slate-plain-serializer-0.7.13.tgz", + "integrity": "sha512-TtrlaslxQBEMV0LYdf3s7VAbTxRPe1xaW10WNNGAzGA855/0RhkaHjKkQiRjHv5rvbRleVf7Nxr9fH+4uErfxQ==", + "license": "MIT", + "peerDependencies": { + "immutable": ">=3.8.1", + "slate": ">=0.46.0 <0.50.0" + } + }, + "node_modules/slate-react": { + "version": "0.117.4", + "resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.117.4.tgz", + "integrity": "sha512-9ckilyUzQS1VHJnstIpgInhcWnTDgv2Cd7m1HOQVl3zasChoapPSMftzT/wl/48grZaZYZIi4xVuzGTcFRUWFg==", + "license": "MIT", + "dependencies": { + "@juggle/resize-observer": "^3.4.0", + "direction": "^1.0.4", + "is-hotkey": "^0.2.0", + "lodash": "^4.17.21", + "scroll-into-view-if-needed": "^3.1.0", + "tiny-invariant": "1.3.1" + }, + "peerDependencies": { + "react": ">=18.2.0", + "react-dom": ">=18.2.0", + "slate": ">=0.114.0", + "slate-dom": ">=0.116.0" + } + }, + "node_modules/slate-react/node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "license": "MIT" + }, + "node_modules/slate-soft-break": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/slate-soft-break/-/slate-soft-break-0.9.0.tgz", + "integrity": "sha512-iTy2bl/G+tphN10YQBOPDRxDqgM46ZH1UUz0ublmL6PLtwJ3jJK1n08w37YxnY/ge4aW31UN386KV6qvFx6Hsw==", + "license": "MIT", + "peerDependencies": { + "slate": ">=0.42.2", + "slate-react": ">=0.19.3" + } + }, + "node_modules/slate/node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/sort-asc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", + "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", + "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", + "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", + "dependencies": { + "sort-asc": "^0.1.0", + "sort-desc": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz", + "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-js/node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/style-to-js/node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/svgo/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/teeny-tap": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/teeny-tap/-/teeny-tap-0.2.0.tgz", + "integrity": "sha512-HnA3I2sxRQe/SZgQTQgQvvA17DhfzhBJ1LfSOXZ5VUTbxGLvnAqUef84ZGNNSEbk1ZMEIDeghTHZagJ7LifAgg==", + "license": "MIT" + }, + "node_modules/terser": { + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "devOptional": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz", + "integrity": "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tomlify-j0.4": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", + "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==", + "license": "MIT" + }, + "node_modules/topbar": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/topbar/-/topbar-0.1.4.tgz", + "integrity": "sha512-P3n4WnN4GFd2mQXDo30rQmsAGe4V1bVkggtTreSbNyL50Fyc+eVkW5oatSLeGQmJoan2TLIgoXUZypN+6nw4MQ==", + "license": "MIT" + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unifont/node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/unifont/node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/unist-builder": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", + "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.0" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/use-composed-ref": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/what-input": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/what-input/-/what-input-5.2.12.tgz", + "integrity": "sha512-3yrSa7nGSXGJS6wZeSkO6VNm95pB1mZ9i3wFzC1hhY7mn4/afue/MvXz04OXNdBC8bfo4AB4RRd3Dem9jXM58Q==", + "license": "MIT" + }, + "node_modules/what-the-diff": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/what-the-diff/-/what-the-diff-0.6.0.tgz", + "integrity": "sha512-8BgQ4uo4cxojRXvCIcqDpH4QHaq0Ksn2P3LYfztylC5LDSwZKuGHf0Wf7sAStjPLTcB8eCB8pJJcPQSWfhZlkg==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "peer": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xml-utils": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", + "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==", + "license": "CC0-1.0" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", + "license": "MIT" + }, + "node_modules/zen-observable-ts": { + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", + "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..94a0961 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "jackrabbits-gay", + "type": "module", + "version": "0.0.1", + "engines": { + "node": ">=24", + "npm": ">=11" + }, + "scripts": { + "dev": "astro dev", + "build": "npm run astro:build", + "astro:build": "astro build", + "clean-dist": "rm -rf .astro dist", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/mdx": "^5.0.3", + "@astrojs/rss": "^4.0.18", + "@astrojs/sitemap": "^3.7.2", + "astro": "^6.1.3", + "better-auth": "^1.5.5", + "decap-cms-app": "^3.10.1", + "sharp": "^0.34.3" + }, + "devDependencies": { + "@types/node": "^25.2.1", + "astro-compress": "2.3.9" + } +} diff --git a/public/about.txt b/public/about.txt new file mode 100644 index 0000000..1d77682 --- /dev/null +++ b/public/about.txt @@ -0,0 +1,6 @@ +This favicon was generated using the following font: + +- Font Title: Puppies Play +- Font Author: undefined +- Font Source: https://fonts.gstatic.com/s/puppiesplay/v10/wlp2gwHZEV99rG6M3NR9uB9vaAJSA_JN3Q.ttf +- Font License: undefined) diff --git a/public/admin/config.yml b/public/admin/config.yml new file mode 100644 index 0000000..87fd3ff --- /dev/null +++ b/public/admin/config.yml @@ -0,0 +1,108 @@ +# Use DecapBridge PKCE auth (required) +backend: + name: gitlab + repo: merrin2/my-website + branch: main + auth_type: pkce + base_url: https://auth.decapbridge.com + auth_endpoint: /sites/398abb39-6842-4b10-b57f-e69c47709e27/pkce + auth_token_endpoint: /sites/398abb39-6842-4b10-b57f-e69c47709e27/token + gateway_url: https://gateway.decapbridge.com + + # See who did what (optional) + commit_messages: + create: Create {{collection}} “{{slug}}” - {{author-name}} <{{author-login}}> via DecapBridge + update: Update {{collection}} “{{slug}}” - {{author-name}} <{{author-login}}> via DecapBridge + delete: Delete {{collection}} “{{slug}}” - {{author-name}} <{{author-login}}> via DecapBridge + uploadMedia: Upload “{{path}}” - {{author-name}} <{{author-login}}> via DecapBridge + deleteMedia: Delete “{{path}}” - {{author-name}} <{{author-login}}> via DecapBridge + openAuthoring: Message {{message}} - {{author-name}} <{{author-login}}> via DecapBridge + +# Enable PKCE fields (optional, recommended) +auth: + email_claim: email + first_name_claim: first_name + last_name_claim: last_name + avatar_url_claim: avatar_url + +# Better Decap + Bridge logo (optional) +logo_url: https://decapbridge.com/decapcms-with-bridge.svg + +# Add site links in Decap CMS (optional) +site_url: https://jackrabbits.gay + +media_folder: static/media +public_folder: /media + +collections: + - name: "apps" + label: "Apps" + folder: "src/content/apps" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Body", name: "body", widget: "markdown", required: false } + + - name: "commissions" + label: "Commissions" + folder: "src/content/commissions" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Artist Name", name: "artistName", widget: "list", required: false, field: { label: "Name", name: "name", widget: "string" } } + - { label: "Artist URL", name: "artistUrl", widget: "list", required: false, field: { label: "URL", name: "url", widget: "string" } } + - { label: "Custom Source", name: "customSrc", widget: "string", required: false } + - { label: "Source Image", name: "src", widget: "image", required: false } + + - name: "poems" + label: "Poems" + folder: "src/content/poems" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Body", name: "body", widget: "markdown", required: false } + + - name: "songs" + label: "Songs" + folder: "src/content/songs" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Audio Source", name: "src", widget: "file", required: true } + + - name: "stories" + label: "Stories" + folder: "src/content/stories" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Body", name: "body", widget: "markdown", required: false } + + - name: "visuals" + label: "Visuals" + folder: "src/content/visuals" + create: true + fields: + - { label: "Title", name: "title", widget: "string" } + - { label: "Publish Date", name: "pubDate", widget: "datetime" } + - { label: "Adult", name: "adult", widget: "boolean", required: false } + - { label: "Description", name: "description", widget: "text", required: false } + - { label: "Artist Name", name: "artistName", widget: "list", required: false, field: { label: "Name", name: "name", widget: "string" } } + - { label: "Artist URL", name: "artistUrl", widget: "list", required: false, field: { label: "URL", name: "url", widget: "string" } } + - { label: "Custom Source", name: "customSrc", widget: "string", required: false } + - { label: "Source Image", name: "src", widget: "image", required: false } \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3bca06c7704c3987b49af219caf7f3d2adf6c79 GIT binary patch literal 15406 zcmeHO35-=&8GcjIIM%Sud+)wCJCE5ImiM6CHCL}G&@%zquXSna&<=wYn(xxxDbM8Io zU%s>b=Rf~BeaZ(f&6idD-HOoY0NrOd3 z42O?(GGp$jUoQ&ti{j|pCasP8rY`cRwo)b27+*TsB3Jd1nV;{GqHcHWcV4O{rtxYFtQJ*R1>m^6N_D38>L&E4O%@RCN2Npt@(e{AtMF}rEI zPYh^Q)?BF2@}i*@tABKh<4@`mK7@k4(6;>Is!GG2WmBeJ7lnr@%VK)<`4bc2ljB*9E6^u1e}`lw^FljQ zjHewB?NhqHQKLqU2nU19b3?%=fd5=>$oLo1oAQaiBQN*_X-J!{KE?0%`%A;2;FHjE z!`$X>@1!LUd6k?L((JGid<3%Ib<^cmMqbK*ZpU$9hYR+r1Y_~Mo9txD&=%(@(@vM3 zhc>Ir4F_L$lF#`=`)6l&oOqZ|nY7EgKJzy*I_WORD-es@PlzL{FNneAzY#kZpA|cL z&tNUuhPiLGVRl$z7@XQ6o9$%BNBJ8&zah5wJ|}I@ZJMyOBdg||5(RnrLpJDkxplpz z4%FE)9>PZ8q!VBJq;*nvVSb^lj!Bhs1nr^|zn)KB=62^iaU18f^OYsmb0$u^*^0v=b}vSRj^JjuPc>)W97 zIu?x^F`GJ|Fgc}O`*zjbQ|PBgPgto7wt65GG9Gu*tMZ$wdc>64Wfr-*|3?3=sk+BP zr{w4G^iw^IP@}`Clw&e>aSe`eTZ|f99itKArkblu|c*oi`HEsdD-abDQ^w z=?(XY$yMDJJ!{}kwM|-M$yfY(O5MQlA3ZC^M6 zJDK*^`OV*B;8UO2@DIT~iaFoyJ=Xr7#-E!UmT_-zV#5_tm}hUJ?f6mub6)139j~6Z zV9Eh;811j;yM0qPZGan%URD;V7JV~5CpudXiG{5PMcc&HQYU?Ju8%ss+c$N4vA;?N zeUClMeipX|myfNJI`{YgO01syxM%%ndue~U1|(X4l>X}SsbbfXA6s;AU4C%GWwEI3 zQ&e%JjE>c`K;|GHf#?w1D#UK0H?KQGE+F^CrI?Ww=D zZuyY@F@+^V?{T^v{4WA<^FPfpiVDVH@3=?M-fr&xp4hP9>r(&fxu>N+$XEmSsAe9% zC-6TBfn&kd|JG&ln|0-SSO_24uH2;C)&G_N@Q3Yy@#)|T-|h=1U3xxcQKpjbF~$BX zaFSzHm*@4Hys@!n@wYu`hde!Gd7xNYW@B42jJnxr$#z{CS z*5b)ToCIR*ep$nZ4dlU-n1FmQATsDt$FYl<=Rmp1v217YH^}vg$_?`ca9z7cH0#C!{ z{*!I%1*;oPw2y+XQ)Y0)h{&C)fnnSoMBnd)zUyvy(kX-Nf5R>wq%PDWD^qoWjc>uY z{t@KAlMX&FyzCF^GIDa-Gk`xU7z}R0{NsM?mKXh*prJ14yk;1I9clE#M?xY09?0@M zUKpz?h7VJeUo7L{>DC3hZvew?)ZwGa_65$Sw&sPs?ZGP%^PkzcMaH@q>sUGa%Yt#I zDYbp5PsGvp@l-!xU^^y*pJRq~Pb8oF7W&Me7&s>$Sa(T$a@8whQ|GrNe)^7s%U{C2 z<^`Oq%uA~d#9|o!onGn?^84E`_O2wt&hn{s1LEkKS7qFFcGC_^Tjygu&1l>#cJ`h{ z{AFcYV~X>E*iZ*YyF_0IHu4PW>v*QA>Qz(Tj(zbT#-J)Fz2JbeU`XL^ zDX{_LAv^pdM~*DQIo8`=WY(0oiGwSC8*5MR`v#7;fmvUaHp+`0I~vsCy3IO04EE-< z9lc#%+oaWUUOL6y?Rc2SSk(FjUlTPI?J4&G<wBhokExh3Fcy$(Jj%?^cR3G? zzyV;t3%gF!{Gk%>`|0Zt6s@Mj4Su)?m4D99b^E&XJv~RY2<`)F-Svc8q-W^c)G0eC)hxhgU zQZTM+&QJE8n6Z!R#(H%$SzgkYjj0xE=RGCr#?7$B!8lXngicEtV?z7-ej%1l|BR(9 zSscLrFviid$?_@sim?+Bn>~#+X?`3Q-sfTbxCHk?6s<}b&)VPrVv6=FeyzcN`V8#m zpOoxW(u&ALdA`_-GiaVMaZGhjJBs^1O&08w&pIE#IknfbLpMy=Kfj9hf76Y|TUoBW z@4~Z+>hfu>XVzT14#Mx~oAIb^{k-Xm_5-lLg?W&%b1pBso2nOy`{8FN6O(t6OYEpa zLVwMPKb3r*F&svhCc)2Cw^YJ)r;pt53au~_YQ7!Udp25C-_G%w3(pc z{+NCf&l7oHFI}0Kzlif0&!j8ID}QmpSi!pp#2+avPai+_GpVj$UNM{Lc(;hY1Mm8n z^HY82`h_@V8`t7gWhBGLI~d2;|6S}_{CwK@iP`Y`7Xp76W60Bf-3=>a5mjX^VnNG( zd4|>x|A@Xm*95iC;T;B^r_t|lljWt1m>I)P#ecSwPrJ@@w@#crb3b2!^WTY;v&DSW zN6l5PS;U_S+Yj3#{b%l9upirp{_wni(ecyY;hNgpe%!M5vR?}FqvvWM5(>VSNSgxlR61sYYoEYgzJa)Sv$?&U-VuvigZg@kB`ORmB{tpxp`UPQ#mi#D!l%W& zmc3$W$7dz}Lo0rdJ9<6%KY<3h*WrF`CSuh5KMo~BPl4q+WBN{b?edd3ztHtDCQ*TT zKzlkD|BJwNfp@F8CUf6DuZ4FFH_AJec6;PFc`2M<#Ogzv%K4m9Kg3}`eHc%n|I9SL z%z5ts-8erAYyqAR+qJQWye#mq#@KrevXY+DUUBMl)CHYaFlIIaqvLsn2mF%cJ$!yT zR7H88&j@VG%y_aNGmw2f6!h<=t|7%4e&ITeF?AX~$VKQ&+2>PZhB6qtr%axqWEifK zxcBV+4Xr|1+&^#+#Pfcvk4LzlM&G=G`F9P^yJ%nDpSi|3AJS(@1KR22Aur^mJwG)} MAAEk$0-jsoe component. +import "../../styles/global.css"; + +interface Props { + title: string; + pageDescription?: string; +} + +const canonicalURL = new URL(Astro.url.pathname, Astro.site); + +const { title, pageDescription } = Astro.props; +--- + + + + + + + + + + + + + +{title} + + diff --git a/src/components/LatestFeed/LatestFeed.astro b/src/components/LatestFeed/LatestFeed.astro new file mode 100644 index 0000000..501a4d8 --- /dev/null +++ b/src/components/LatestFeed/LatestFeed.astro @@ -0,0 +1,48 @@ +--- +import { LinkToPost } from "components"; +import { type Post } from "types"; +import type { getAllPostsByYear } from "utils"; +import "./styles.css"; + +type Props = { + posts: Post[] | Awaited>; + title: string; +}; + +const { posts, title } = Astro.props as Props; +--- + +
+
+

{title}

+
+
+
    + { + Array.isArray(posts) + ? posts.map((post) => ( +
  • + +
  • + )) + : Object.keys(posts) + .sort((a, b) => Number(b) - Number(a)) + .map((year) => { + const yearPosts = posts[year]; + return ( +
  • +

    {year}

    +
      + {yearPosts.map((post) => ( +
    • + +
    • + ))} +
    +
  • + ); + }) + } +
+
+
diff --git a/src/components/LatestFeed/LatestLink.astro b/src/components/LatestFeed/LatestLink.astro new file mode 100644 index 0000000..1eeb64f --- /dev/null +++ b/src/components/LatestFeed/LatestLink.astro @@ -0,0 +1,29 @@ +--- +import { AdultFlag, FormattedDate } from "components"; +import type { PostProps } from "content.config"; +import { type Post } from "types"; +import { pathNameFromTitle } from "utils"; +import "./styles.css"; +import { keyTypeNameMap } from "const"; + +export interface Props { + item: Post; +} + +const { item } = Astro.props as Props; +const { collection } = item; +const { adult, customSrc, description, pubDate, src, title } = + item.data as PostProps; + +const url = customSrc || src || `${collection}/${pathNameFromTitle(title)}/`; +--- + + diff --git a/src/components/LatestFeed/styles.css b/src/components/LatestFeed/styles.css new file mode 100644 index 0000000..28f9ef1 --- /dev/null +++ b/src/components/LatestFeed/styles.css @@ -0,0 +1,55 @@ +.feed-container { + --headerHeight: 60px; + --sidePadding: 40px; + + background-color: var(--darkBackground); + box-sizing: border-box; + color: var(--lightText); + position: relative; + z-index: 2; + + .feed-header { + align-items: center; + background-color: #fff; + display: flex; + height: var(--headerHeight); + padding: 0px var(--sidePadding); + position: sticky; + top: 0; + z-index: 3; + + h2 { + color: #000; + margin: 0; + } + } + + .feed { + overflow-y: scroll; + + ul { + box-sizing: border-box; + height: calc(100vh - var(--headerHeight)); + line-height: 25px; + list-style: none; + margin: 0px; + padding: 15px var(--sidePadding); + + li { + margin-bottom: 10px; + } + + li:last-child { + padding-bottom: 50px; + } + + a { + color: var(--lightLinkText); + } + + ul { + height: auto; + } + } + } +} diff --git a/src/components/NavLinks/NavLinks.astro b/src/components/NavLinks/NavLinks.astro new file mode 100644 index 0000000..f10da84 --- /dev/null +++ b/src/components/NavLinks/NavLinks.astro @@ -0,0 +1,14 @@ +--- +import { allCollectionKeys, keyPageNameMap, keyUrlMap } from "const"; +import "./styles.css"; +--- + + diff --git a/src/components/NavLinks/styles.css b/src/components/NavLinks/styles.css new file mode 100644 index 0000000..41c4364 --- /dev/null +++ b/src/components/NavLinks/styles.css @@ -0,0 +1,9 @@ +ul.list-links { + margin: 0; + padding: 0; + + li { + display: inline; + margin-right: 10px; + } +} \ No newline at end of file diff --git a/src/components/common/AdultFlag/AdultFlag.astro b/src/components/common/AdultFlag/AdultFlag.astro new file mode 100644 index 0000000..cde4f2e --- /dev/null +++ b/src/components/common/AdultFlag/AdultFlag.astro @@ -0,0 +1,5 @@ +--- +import "./styles.css"; +--- + +18+ diff --git a/src/components/common/AdultFlag/styles.css b/src/components/common/AdultFlag/styles.css new file mode 100644 index 0000000..0cb4519 --- /dev/null +++ b/src/components/common/AdultFlag/styles.css @@ -0,0 +1,28 @@ +.adult-flag-container { + .adult-flag { + color: red; + font-family: mono; + font-size: small; + } +} + +ul.collection-links { + border: 1px solid red; + display: none; + position: absolute; + top: 0px; +} + +.see-more { + position: relative; +} + +.see-more:hover { + ul.collection-links { + display: block; + } +} + +ul.collection-links:hover { + display: block; +} diff --git a/src/components/common/FormattedDate/FormattedDate.astro b/src/components/common/FormattedDate/FormattedDate.astro new file mode 100644 index 0000000..303e983 --- /dev/null +++ b/src/components/common/FormattedDate/FormattedDate.astro @@ -0,0 +1,15 @@ +--- +import { getDateObj } from "utils"; +import "./styles.css"; + +interface Props { + date: string | Date; +} + +const { date } = Astro.props; +const dateObj = getDateObj(date); +--- + + diff --git a/src/components/common/FormattedDate/styles.css b/src/components/common/FormattedDate/styles.css new file mode 100644 index 0000000..99ee9b9 --- /dev/null +++ b/src/components/common/FormattedDate/styles.css @@ -0,0 +1,3 @@ +time.formatted-date { + font-size: small; +} diff --git a/src/components/common/Link/Link.astro b/src/components/common/Link/Link.astro new file mode 100644 index 0000000..1a0915d --- /dev/null +++ b/src/components/common/Link/Link.astro @@ -0,0 +1,10 @@ +--- +export interface Props { + href: string; + text: string; +} + +const { href, text } = Astro.props; +--- + +{text} diff --git a/src/components/common/LinkToPost/LinkToPost.astro b/src/components/common/LinkToPost/LinkToPost.astro new file mode 100644 index 0000000..7294f23 --- /dev/null +++ b/src/components/common/LinkToPost/LinkToPost.astro @@ -0,0 +1,49 @@ +--- +import { AdultFlag, FormattedDate, NewFlag } from "components"; +import type { PostProps } from "content.config"; +import { keyTypeNameMap } from "const"; +import { type Post } from "types"; +import { getPostUrl, isNew } from "utils"; +import "./styles.css"; + +type DatePosition = "top" | "bottom"; + +export interface Props { + datePosition?: DatePosition; + includeCollection?: boolean; + includeDescription?: boolean; + item: Post; +} + +const { + datePosition: pDatePosition, + includeCollection, + includeDescription, + item, +} = Astro.props as Props; +const { collection } = item; +const { adult, description, pubDate, title } = item.data as PostProps; +const showNewFlag = await isNew(item); +const url = getPostUrl(collection, item); +const datePosition: DatePosition = pDatePosition || "top"; +--- + +
+ { + includeCollection && ( + {keyTypeNameMap[collection]} + ) + } + {datePosition === "top" && } +
+ {showNewFlag && } + {title} + {adult && } +
+ {datePosition === "bottom" && } + { + !!description && includeDescription && ( +

{description}

+ ) + } +
diff --git a/src/components/common/LinkToPost/styles.css b/src/components/common/LinkToPost/styles.css new file mode 100644 index 0000000..7730547 --- /dev/null +++ b/src/components/common/LinkToPost/styles.css @@ -0,0 +1,24 @@ +.link-to-post-container { + .collection-name { + font-weight: bold; + font-variant: all-small-caps; + margin-right: 10px; + text-transform: uppercase; + } + + .link-to-post { + align-items: center; + border-radius: var(--br); + display: flex; + gap: 5px; + max-width: 300px; + + a { + font-size: large; + } + } + + .item-description { + max-width: 550px; + } +} diff --git a/src/components/common/NewFlag/NewFlag.astro b/src/components/common/NewFlag/NewFlag.astro new file mode 100644 index 0000000..ea66c94 --- /dev/null +++ b/src/components/common/NewFlag/NewFlag.astro @@ -0,0 +1,5 @@ +--- +import "./styles.css"; +--- + +New! diff --git a/src/components/common/NewFlag/styles.css b/src/components/common/NewFlag/styles.css new file mode 100644 index 0000000..0bad199 --- /dev/null +++ b/src/components/common/NewFlag/styles.css @@ -0,0 +1,53 @@ +.new-flag-container { + animation: bob 2s linear infinite; + + .new-flag { + font-size: smaller; + text-transform: uppercase; + background: linear-gradient( + 270deg, + #ff0000, + #ff9900, + #ffff00, + #33cc33, + #0066ff, + #6600cc, + #ff3399, + #ff0000 + ); + background-size: 200% 200%; + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + filter: brightness(2); + animation: rainbowMove 3s linear infinite; + } +} + +@keyframes rainbowMove { + 0% { + background-position: 0% 50%; + } + + 100% { + background-position: 200% 50%; + } +} + +@keyframes bob { + 0% { + transform: translateY(0px); + } + + 25% { + transform: translateY(-2px); + } + + 75% { + transform: translateY(2px); + } + + 100% { + transform: translateY(0px); + } +} diff --git a/src/components/common/index.ts b/src/components/common/index.ts new file mode 100644 index 0000000..c7d3204 --- /dev/null +++ b/src/components/common/index.ts @@ -0,0 +1,5 @@ +export { default as AdultFlag } from "./AdultFlag/AdultFlag.astro"; +export { default as LinkToPost } from "./LinkToPost/LinkToPost.astro"; +export { default as FormattedDate } from "./FormattedDate/FormattedDate.astro"; +export { default as Link } from "./Link/Link.astro"; +export { default as NewFlag } from "./NewFlag/NewFlag.astro"; diff --git a/src/components/gallery/AudioItem/AudioItem.astro b/src/components/gallery/AudioItem/AudioItem.astro new file mode 100644 index 0000000..cc9daa6 --- /dev/null +++ b/src/components/gallery/AudioItem/AudioItem.astro @@ -0,0 +1,19 @@ +--- +import type { PostProps } from "content.config"; +import type { Post } from "types"; +import "./styles.css"; +import { getFileExtension } from "utils"; + +export interface Props { + item: Post; +} + +const { item } = Astro.props; +const { src, title } = item.data as PostProps; +const type = `audio/${getFileExtension(src!)}`; +--- + +
+

{title}

+ +
diff --git a/src/components/gallery/AudioItem/styles.css b/src/components/gallery/AudioItem/styles.css new file mode 100644 index 0000000..1d5519b --- /dev/null +++ b/src/components/gallery/AudioItem/styles.css @@ -0,0 +1,3 @@ +.audio-container { + flex-basis: 100%; +} \ No newline at end of file diff --git a/src/components/gallery/ImageItem/ImageItem.astro b/src/components/gallery/ImageItem/ImageItem.astro new file mode 100644 index 0000000..00d32fd --- /dev/null +++ b/src/components/gallery/ImageItem/ImageItem.astro @@ -0,0 +1,64 @@ +--- +import { Image } from "astro:assets"; +import type { CollectionKey } from "astro:content"; +import { Link } from "components"; +import type { PostProps } from "content.config"; +import type { Post } from "types"; +import "./styles.css"; + +export interface Props { + item: Post; + collection?: CollectionKey; +} + +const { item } = Astro.props; +const { artistName, artistUrl, customSrc, src, title } = item.data as PostProps; + +const artistUrlPairs: [string, string][] = []; +if (Array.isArray(artistName)) { + artistName.forEach((artist, i) => { + artistUrlPairs.push([artist, (artistUrl as string[])[i]]); + }); +} else if (artistName) { + artistUrlPairs.push([artistName, artistUrl as string]); +} + +const images = import.meta.glob<{ default: ImageMetadata }>( + `/public/assets/**/*.{jpeg,jpg,png,gif}`, +); +--- + + diff --git a/src/components/gallery/ImageItem/styles.css b/src/components/gallery/ImageItem/styles.css new file mode 100644 index 0000000..044d3b1 --- /dev/null +++ b/src/components/gallery/ImageItem/styles.css @@ -0,0 +1,49 @@ +.gallery-image-container, +.gallery-image-container a { + height: var(--thumbnailWidth); + width: var(--thumbnailWidth); +} + +.gallery-image-container { + position: relative; + transition: all 0.2s; + + .info-overlay { + background-color: var(--darkBackground); + border-radius: 0 0 var(--br) var(--br); + color: var(--lightText); + font-size: small; + opacity: 0; + padding: 10px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + transform: translateY(5px); + transition: 0.3s all; + + p { + margin: 0; + } + + a { + color: var(--lightLinkText); + } + } + + img { + border-radius: var(--br); + object-fit: scale-down; + width: 100%; + height: 100%; + } +} + +.gallery-image-container:hover { + transform: scale(105%); + + .info-overlay { + opacity: 1; + transform: translateY(0px); + } +} diff --git a/src/components/gallery/WritingItem/WritingItem.astro b/src/components/gallery/WritingItem/WritingItem.astro new file mode 100644 index 0000000..d0c8f32 --- /dev/null +++ b/src/components/gallery/WritingItem/WritingItem.astro @@ -0,0 +1,18 @@ +--- +import { LinkToPost } from "components"; +import { type Post } from "types"; +import "./styles.css"; + +export interface Props { + item: Post; + includeDescription?: boolean; +} + +const { item, includeDescription } = Astro.props; +--- + + diff --git a/src/components/gallery/WritingItem/styles.css b/src/components/gallery/WritingItem/styles.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/gallery/index.ts b/src/components/gallery/index.ts new file mode 100644 index 0000000..14ce3c6 --- /dev/null +++ b/src/components/gallery/index.ts @@ -0,0 +1,3 @@ +export { default as GalleryAudioItem } from "./AudioItem/AudioItem.astro"; +export { default as GalleryImageItem } from "./ImageItem/ImageItem.astro"; +export { default as GalleryWritingItem } from "./WritingItem/WritingItem.astro"; diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..a8188f9 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,5 @@ +export { default as BaseHead } from "./BaseHead/BaseHead.astro"; +export * from "./common"; +export * from "./gallery"; +export { default as LatestFeed } from "./LatestFeed/LatestFeed.astro"; +export { default as NavLinks } from "./NavLinks/NavLinks.astro"; diff --git a/src/const/collectionKeyMaps.ts b/src/const/collectionKeyMaps.ts new file mode 100644 index 0000000..cf9e9d0 --- /dev/null +++ b/src/const/collectionKeyMaps.ts @@ -0,0 +1,40 @@ +import type { CollectionKey } from "astro:content"; +import { + APPS_URL, + COMMISSIONS_URL, + POEMS_URL, + SONGS_URL, + STORIES_URL, + VISUAL_ART_URL, +} from "./urls"; + +export const keyUrlMap: { [key in CollectionKey]: string } = { + apps: APPS_URL, + commissions: COMMISSIONS_URL, + poems: POEMS_URL, + songs: SONGS_URL, + stories: STORIES_URL, + visuals: VISUAL_ART_URL, +}; + +export const keyPageNameMap: { [key in CollectionKey]: string } = { + apps: "Apps", + commissions: "Commissioned Art", + poems: "Poems", + songs: "Songs", + stories: "Stories", + visuals: "Visual Art", +}; + +export const keyTypeNameMap: { [key in CollectionKey]: string } = { + apps: "App", + commissions: "Commissioned Art", + poems: "Poem", + songs: "Song", + stories: "Story", + visuals: "Visual Art", +}; + +export const allCollectionKeys: CollectionKey[] = Object.keys( + keyPageNameMap, +).map((key) => key as CollectionKey); diff --git a/src/const/index.ts b/src/const/index.ts new file mode 100644 index 0000000..c433e84 --- /dev/null +++ b/src/const/index.ts @@ -0,0 +1,11 @@ +import type { CollectionKey } from "astro:content"; + +export * from "./collectionKeyMaps"; +export * from "./strings"; +export * from "./urls"; + +export const noSubrouteCollections: CollectionKey[] = [ + "commissions", + "songs", + "visuals", +]; diff --git a/src/const/strings.ts b/src/const/strings.ts new file mode 100644 index 0000000..af3d0eb --- /dev/null +++ b/src/const/strings.ts @@ -0,0 +1,9 @@ +import type { CollectionKey } from "astro:content"; +import { keyPageNameMap } from "./collectionKeyMaps"; + +export const SITE_TITLE = "Jack of All Rabbits"; +export const SITE_DESCRIPTION = ""; + +export const getListPageDescription = (collection: CollectionKey) => { + return `All ${keyPageNameMap[collection].toLocaleLowerCase()}, sorted by date descending.`; +}; diff --git a/src/const/urls.ts b/src/const/urls.ts new file mode 100644 index 0000000..57fe147 --- /dev/null +++ b/src/const/urls.ts @@ -0,0 +1,8 @@ +export const APPS_URL = "/apps"; +export const COMMISSIONS_URL = "/commissions"; +export const POEMS_URL = "/poems"; +export const SONGS_URL = "/songs"; +export const STORIES_URL = "/stories"; +export const VISUAL_ART_URL = "/visuals"; + +export const LIVE_APP_PATH = "/live"; diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..45e8630 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,79 @@ +import { defineCollection } from "astro:content"; +import { glob } from "astro/loaders"; +import { z } from "astro/zod"; + +const commonProps = { + adult: z.boolean().optional(), + description: z.string().optional(), + pubDate: z.string(), + title: z.string(), +}; + +const imageProps = { + ...commonProps, + artistName: z.union([z.string(), z.array(z.string())]).optional(), + artistUrl: z.union([z.string(), z.array(z.string())]).optional(), + customSrc: z.string().optional(), // used in cases where thumbnail is different from file + src: z.string().optional(), +}; + +const zodSchema = z.object({ + ...imageProps, +}); + +export type PostProps = z.infer; + +export const collectionNames = [ + "apps", + "commissions", + "poems", + "songs", + "stories", + "visuals", +]; + +const commonSchema = z.object({ + ...commonProps, +}); + +const imageSchema = z.object({ ...imageProps }); + +const appSchema = commonSchema; +const commissionSchema = imageSchema; +const poemSchema = commonSchema; +const songSchema = z.object({ + ...commonProps, + src: z.string(), +}); +const storySchema = commonSchema; +const visualSchema = imageSchema; + +const getGlob = (name: string) => + glob({ pattern: "**/*.md", base: `./src/content/${name}` }); + +export const collections = { + apps: defineCollection({ + loader: getGlob("apps"), + schema: appSchema, + }), + commissions: defineCollection({ + loader: getGlob("commissions"), + schema: commissionSchema, + }), + poems: defineCollection({ + loader: getGlob("poems"), + schema: poemSchema, + }), + songs: defineCollection({ + loader: getGlob("songs"), + schema: songSchema, + }), + stories: defineCollection({ + loader: getGlob("stories"), + schema: storySchema, + }), + visuals: defineCollection({ + loader: getGlob("visuals"), + schema: visualSchema, + }), +}; diff --git a/src/content/apps/Disic.md b/src/content/apps/Disic.md new file mode 100644 index 0000000..21c12db --- /dev/null +++ b/src/content/apps/Disic.md @@ -0,0 +1,14 @@ +--- +title: "Disic" +pubDate: "Apr 19 2024" +--- + +Disic is an app that uses cellular automata to generate pretty animated patterns. Runs 7 games, including Conway's Game of Life, with many options for customizing colors and rulesets. + +[Try it out.](https://disic.jackrabbits.gay) + +![Disic screenshot 1](/assets/apps/disic1.png) + +![Disic screenshot 2](/assets/apps/disic2.png) + +![Disic screenshot 3](/assets/apps/disic3.png) \ No newline at end of file diff --git a/src/content/apps/Hare Trigger.md b/src/content/apps/Hare Trigger.md new file mode 100644 index 0000000..1222050 --- /dev/null +++ b/src/content/apps/Hare Trigger.md @@ -0,0 +1,42 @@ +--- +title: "Hare Trigger" +pubDate: "Sep 15 2024" +--- + +_A no-horse town in a shimmering valley. A mysterious crate. A bounty hunter with a twitching nose and an itchy trigger finger._ + +_Hare Trigger_ is a short exploration game featuring knowledge-based progression and shotgun-related mishaps. Its cozy setting is populated with twelve colorful characters, all of whom you have a random chance of blowing away as you talk to them. + +Made in ten days for SuperNoVA Game Jam 2024. + +[Download](/assets/apps/Hare%20Trigger.zip) + +![Hare Trigger screenshot 1](/assets/apps/ht1.png) + +![Hare Trigger screenshot 2](/assets/apps/ht2.png) + +![Hare Trigger screenshot 3](/assets/apps/ht3.png) + +**Credits** + +_sakura Hz_ + +- "Vintage Radio Station" +- "jazzy" +- "watching anime (piano version)" +- "neon samurai" + +_FSM Team_ +- "Downtown Walk" + +_Mixaund_ +- "Motivate Me" + +_Nine Inch Nails_ +- "Ghosts II - 15" + +_jsfxr_ +- All generated sound effects + +_Godot_ +- Engine diff --git a/src/content/apps/JOLB.md b/src/content/apps/JOLB.md new file mode 100644 index 0000000..a7ca700 --- /dev/null +++ b/src/content/apps/JOLB.md @@ -0,0 +1,8 @@ +--- +title: "JOLB" +pubDate: "Jan 18 2026" +--- + +**JOLB is currently offline while I work on moving it to new hosting.** + +JOLB is a poetry-writing game in which each player must add a line to a poem having only seen the line written by the previous player. It's packaged as a Telegram bot and can be played by messaging `/start` to **@jolb_bot**. diff --git a/src/content/commissions/001-1492415364-boxerbunny-boxer.md b/src/content/commissions/001-1492415364-boxerbunny-boxer.md new file mode 100644 index 0000000..0cb4c6e --- /dev/null +++ b/src/content/commissions/001-1492415364-boxerbunny-boxer.md @@ -0,0 +1,7 @@ +--- +title: "Boxer 1.0 Ref Sheet" +artistName: "Me (using template)" +src: "/assets/commissions/1492415364.boxerbunny_boxer.png" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/002-1500346995-boxerbunny-icon-boxerbunny-both.md b/src/content/commissions/002-1500346995-boxerbunny-icon-boxerbunny-both.md new file mode 100644 index 0000000..5f3f7da --- /dev/null +++ b/src/content/commissions/002-1500346995-boxerbunny-icon-boxerbunny-both.md @@ -0,0 +1,8 @@ +--- +title: "PFP" +artistName: "PFP" +artistUrl: "https://www.furaffinity.net/user/etuix" +src: "/assets/commissions/1500346995.boxerbunny_icon_boxerbunny-both.png" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/003-1500347120-boxerbunny-pride17bb_copy.md b/src/content/commissions/003-1500347120-boxerbunny-pride17bb_copy.md new file mode 100644 index 0000000..62b57b9 --- /dev/null +++ b/src/content/commissions/003-1500347120-boxerbunny-pride17bb_copy.md @@ -0,0 +1,8 @@ +--- +title: "Pride YCH" +artistName: "Fauxor" +artistUrl: "https://www.furaffinity.net/user/fauxor" +src: "/assets/commissions/1500347120.boxerbunny_pride17bb_copy.png" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/004-1500347268-boxerbunny-boxerbuns2.0.md b/src/content/commissions/004-1500347268-boxerbunny-boxerbuns2.0.md new file mode 100644 index 0000000..42e36e2 --- /dev/null +++ b/src/content/commissions/004-1500347268-boxerbunny-boxerbuns2.0.md @@ -0,0 +1,8 @@ +--- +title: "Buns!" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/1500347268.boxerbunny_boxerbuns2.0.png" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/005-1503019784-boxerbunny-photo-2017-08-17.jpg.md b/src/content/commissions/005-1503019784-boxerbunny-photo-2017-08-17.jpg.md new file mode 100644 index 0000000..7439cad --- /dev/null +++ b/src/content/commissions/005-1503019784-boxerbunny-photo-2017-08-17.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Booty YCH" +artistName: "obliviousally" +artistUrl: "https://www.furaffinity.net/user/obliviousally" +src: "/assets/commissions/1503019784.boxerbunny_photo_2017-08-17_21-23-36.jpg" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/006-1504452641-boxerbunny-1p1hoto-aug-19.jpg.md b/src/content/commissions/006-1504452641-boxerbunny-1p1hoto-aug-19.jpg.md new file mode 100644 index 0000000..0b7aeab --- /dev/null +++ b/src/content/commissions/006-1504452641-boxerbunny-1p1hoto-aug-19.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Boxer Hypno Icon" +artistName: "Rai" +artistUrl: "https://www.furaffinity.net/user/shibarin" +src: "/assets/commissions/1504452641.boxerbunny_1p1hoto_aug_19,_10_03_34_pm__1_.jpg" +pubDate: "Jan 01 2017" +--- + diff --git a/src/content/commissions/007-1515022119-boxerbunny-djyhkeavaaaptqz.jpg.md b/src/content/commissions/007-1515022119-boxerbunny-djyhkeavaaaptqz.jpg.md new file mode 100644 index 0000000..f6bda21 --- /dev/null +++ b/src/content/commissions/007-1515022119-boxerbunny-djyhkeavaaaptqz.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Karate Bunz" +artistName: "FayV" +artistUrl: "https://www.furaffinity.net/user/fayv" +src: "/assets/commissions/1515022119.boxerbunny_djyhkeavaaaptqz.jpg" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/008-1515022210-boxerbunny-photo-2017-11-30.jpg.md b/src/content/commissions/008-1515022210-boxerbunny-photo-2017-11-30.jpg.md new file mode 100644 index 0000000..0e72d66 --- /dev/null +++ b/src/content/commissions/008-1515022210-boxerbunny-photo-2017-11-30.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Gameboy Icons" +artistName: "Jess CyanSorcery" +artistUrl: "https://www.furaffinity.net/user/cyanroxanne" +src: "/assets/commissions/1515022210.boxerbunny_photo_2017-11-30_18-35-12.jpg" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/009-Boxer2.0-ref.md b/src/content/commissions/009-Boxer2.0-ref.md new file mode 100644 index 0000000..77d1445 --- /dev/null +++ b/src/content/commissions/009-Boxer2.0-ref.md @@ -0,0 +1,7 @@ +--- +title: "Boxer 2.0 Ref Sheet" +artistName: "Me (using template)" +src: "/assets/commissions/Boxer2.0 ref.png" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/010-1520214373-dragonessdrei-boxer-icon.md b/src/content/commissions/010-1520214373-dragonessdrei-boxer-icon.md new file mode 100644 index 0000000..87442d9 --- /dev/null +++ b/src/content/commissions/010-1520214373-dragonessdrei-boxer-icon.md @@ -0,0 +1,8 @@ +--- +title: "PFP" +artistName: "DragonessDrei" +artistUrl: "https://www.furaffinity.net/user/dragonessdrei" +src: "/assets/commissions/1520214373.boxerbunny_1517951027.dragonessdrei_boxer_icon.png" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/011-1521581447-boxerbunny-photo-2018-03-09.jpg.md b/src/content/commissions/011-1521581447-boxerbunny-photo-2018-03-09.jpg.md new file mode 100644 index 0000000..a127b2c --- /dev/null +++ b/src/content/commissions/011-1521581447-boxerbunny-photo-2018-03-09.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Boxer Badge" +artistName: "Gamibrii" +artistUrl: "https://www.deviantart.com/gamibrii" +src: "/assets/commissions/1521581447.boxerbunny_photo_2018-03-09_14-28-27.jpg" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/012-1521581566-spreaderbar-boxer.png.md b/src/content/commissions/012-1521581566-spreaderbar-boxer.png.md new file mode 100644 index 0000000..e965e22 --- /dev/null +++ b/src/content/commissions/012-1521581566-spreaderbar-boxer.png.md @@ -0,0 +1,8 @@ +--- +title: "Spreader Bar YCH" +artistName: "Soft Mallow" +artistUrl: "https://x.com/softieMallow" +src: "/assets/commissions/1521581566.boxerbunny_spreadbar_boxer.png" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/013-1535688982-boxerbunny-hypno-ych.md b/src/content/commissions/013-1535688982-boxerbunny-hypno-ych.md new file mode 100644 index 0000000..de25e4d --- /dev/null +++ b/src/content/commissions/013-1535688982-boxerbunny-hypno-ych.md @@ -0,0 +1,8 @@ +--- +title: "Hypno Icon YCH" +artistName: "raccoonsnuggles" +artistUrl: "https://www.furaffinity.net/user/raccoonsnuggles" +src: "/assets/commissions/1535688982.boxerbunny_1533941385.raccoonsnuggles_boxer_bunny_hypno_ych.png" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/014-1578748845-snow-bun.jpg.md b/src/content/commissions/014-1578748845-snow-bun.jpg.md new file mode 100644 index 0000000..adff282 --- /dev/null +++ b/src/content/commissions/014-1578748845-snow-bun.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Snow Bun" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/1578748845.boxerbunny_1d1a5c8a-728d-4830-bfe8-8e65126dd3cc_jpeg.jpg" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/commissions/015-1592572897-boxerbunny-ref3.jpg.md b/src/content/commissions/015-1592572897-boxerbunny-ref3.jpg.md new file mode 100644 index 0000000..0c46f4c --- /dev/null +++ b/src/content/commissions/015-1592572897-boxerbunny-ref3.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Boxer 3.0 Ref Sheet" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/1592572897.boxerbunny_ab81e558-47e0-4358-8c13-4e816ce4cb8a_jpeg.jpg" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/commissions/016-1594665478-boxerbunny-ref4.jpg.md b/src/content/commissions/016-1594665478-boxerbunny-ref4.jpg.md new file mode 100644 index 0000000..6f1f496 --- /dev/null +++ b/src/content/commissions/016-1594665478-boxerbunny-ref4.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Boxer 3.0 Ref Sheet (Bust)" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/1594665478.boxerbunny_a3ebd4f5-cc8c-40c1-92ff-a51304e3172a_jpeg.jpg" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/commissions/017-1672705093-snezz-boxerbunny.png.md b/src/content/commissions/017-1672705093-snezz-boxerbunny.png.md new file mode 100644 index 0000000..794c6cf --- /dev/null +++ b/src/content/commissions/017-1672705093-snezz-boxerbunny.png.md @@ -0,0 +1,8 @@ +--- +title: "Pretty in Pink" +artistName: "Snezz" +artistUrl: "https://www.furaffinity.net/user/snebzz" +src: "/assets/commissions/1672705093.boxerbunny__boxerbunny.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/018-1672705143-all-you-need.jpg.md b/src/content/commissions/018-1672705143-all-you-need.jpg.md new file mode 100644 index 0000000..72cb19b --- /dev/null +++ b/src/content/commissions/018-1672705143-all-you-need.jpg.md @@ -0,0 +1,8 @@ +--- +title: "All You Need" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/1672705143.boxerbunny_1631027204_slyasafoxibou_1583031570_vaynthefox_20200109_boxerserenade_v2__1_.jpg" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/019-1672705271-dusty-sweater1.jpg.md b/src/content/commissions/019-1672705271-dusty-sweater1.jpg.md new file mode 100644 index 0000000..9ec131c --- /dev/null +++ b/src/content/commissions/019-1672705271-dusty-sweater1.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Sweater YCH 1" +artistName: "Dusty" +artistUrl: "t.me/dustydoodles" +src: "/assets/commissions/1672705271.boxerbunny_photo_2023-01-02_19-16-31.jpg" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/020-1672705388-dusty-sweater2.png.md b/src/content/commissions/020-1672705388-dusty-sweater2.png.md new file mode 100644 index 0000000..56cf30c --- /dev/null +++ b/src/content/commissions/020-1672705388-dusty-sweater2.png.md @@ -0,0 +1,8 @@ +--- +title: "Sweater YCH 2" +artistName: "Dusty" +artistUrl: "t.me/dustydoodles" +src: "/assets/commissions/1672705388.boxerbunny_sweatercommission2.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/021-1672705575-merrin-ref.png.md b/src/content/commissions/021-1672705575-merrin-ref.png.md new file mode 100644 index 0000000..6bdca2d --- /dev/null +++ b/src/content/commissions/021-1672705575-merrin-ref.png.md @@ -0,0 +1,7 @@ +--- +title: "Merrin/Val Ref Sheet" +artistName: "Me (using template)" +src: "/assets/commissions/1672705575.boxerbunny_merrin_ref_sheet.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/022-1672800799-merrin-sketch-sheet.jpg.md b/src/content/commissions/022-1672800799-merrin-sketch-sheet.jpg.md new file mode 100644 index 0000000..a05e82f --- /dev/null +++ b/src/content/commissions/022-1672800799-merrin-sketch-sheet.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Merrin Sketch Sheet" +artistName: "Hatch The Pigeon" +artistUrl: "https://ko-fi.com/hatchthepigeon" +src: "/assets/commissions/1672800799.boxerbunny_useruploads_1652be89-cbc2-48b2-94ff-b7af58a5f75d_sketchpage.jpg" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/023-1673639819-merrin-aerial.png.md b/src/content/commissions/023-1673639819-merrin-aerial.png.md new file mode 100644 index 0000000..28960c7 --- /dev/null +++ b/src/content/commissions/023-1673639819-merrin-aerial.png.md @@ -0,0 +1,8 @@ +--- +title: "Merrin Aerial Yoga" +artistName: "Zavlekat." +artistUrl: "https://www.furaffinity.net/user/zavlekat." +src: "/assets/commissions/1673639819.boxerbunny_img_20230110_082652_272.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/024-1675300541-stuck-ych.png.md b/src/content/commissions/024-1675300541-stuck-ych.png.md new file mode 100644 index 0000000..cf8c555 --- /dev/null +++ b/src/content/commissions/024-1675300541-stuck-ych.png.md @@ -0,0 +1,8 @@ +--- +title: "Stuck YCH" +artistName: "Cairo Steele" +artistUrl: "https://www.furaffinity.net/user/vesrin" +src: "/assets/commissions/1675300541.boxerbunny_stuck_v1_small.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/025-1675300601-stuck-chastity.png.md b/src/content/commissions/025-1675300601-stuck-chastity.png.md new file mode 100644 index 0000000..6eeb539 --- /dev/null +++ b/src/content/commissions/025-1675300601-stuck-chastity.png.md @@ -0,0 +1,8 @@ +--- +title: "Stuck YCH (chastity version)" +artistName: "Cairo Steele" +artistUrl: "https://www.furaffinity.net/user/vesrin" +src: "/assets/commissions/1675300601.boxerbunny_stuck_v2_small.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/026-1676735351-merrin-pfp.png.md b/src/content/commissions/026-1676735351-merrin-pfp.png.md new file mode 100644 index 0000000..61d1057 --- /dev/null +++ b/src/content/commissions/026-1676735351-merrin-pfp.png.md @@ -0,0 +1,8 @@ +--- +title: "PFP" +artistName: "Th3Geo" +artistUrl: "https://t.me/CrowParadeArt" +src: "/assets/commissions/1676735351.boxerbunny_lowres__60_.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/027-1676735498-merrin-pfp2.png.md b/src/content/commissions/027-1676735498-merrin-pfp2.png.md new file mode 100644 index 0000000..2f920fe --- /dev/null +++ b/src/content/commissions/027-1676735498-merrin-pfp2.png.md @@ -0,0 +1,8 @@ +--- +title: "PFP" +artistName: "Hatch The Pigeon" +artistUrl: "https://ko-fi.com/hatchthepigeon" +src: "/assets/commissions/1676735498.boxerbunny_download.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/028-1676735606-nautilus-friend.png.md b/src/content/commissions/028-1676735606-nautilus-friend.png.md new file mode 100644 index 0000000..25990d0 --- /dev/null +++ b/src/content/commissions/028-1676735606-nautilus-friend.png.md @@ -0,0 +1,8 @@ +--- +title: "Nautilus Friend!" +artistName: "Crow Parade" +artistUrl: "https://t.me/CrowParadeArt" +src: "/assets/commissions/1676735606.boxerbunny_img_20230213_225439_652.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/029-1677494199-quizzical.png.md b/src/content/commissions/029-1677494199-quizzical.png.md new file mode 100644 index 0000000..984e8c2 --- /dev/null +++ b/src/content/commissions/029-1677494199-quizzical.png.md @@ -0,0 +1,8 @@ +--- +title: "Quizzical" +artistName: "Daud_Dalmata" +artistUrl: "https://www.furaffinity.net/user/dauddalmata" +src: "/assets/commissions/1677494199.boxerbunny_merrin__1_.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/030-1691172816-hypno-icon.jpg.md b/src/content/commissions/030-1691172816-hypno-icon.jpg.md new file mode 100644 index 0000000..452df16 --- /dev/null +++ b/src/content/commissions/030-1691172816-hypno-icon.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Quizzical" +artistName: "zangerdanger" +artistUrl: "https://zangerdanger.carrd.co/" +src: "/assets/commissions/1691172816.boxerbunny_img_20230804_141229_274.jpg" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/031-1692198216-paws.jpg.md b/src/content/commissions/031-1692198216-paws.jpg.md new file mode 100644 index 0000000..b6439d8 --- /dev/null +++ b/src/content/commissions/031-1692198216-paws.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Paws YCH" +artistName: "hita9" +artistUrl: "https://www.furaffinity.net/user/eugenyblack" +src: "/assets/commissions/1692198216.boxerbunny_37647440_paws_3.jpg" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/commissions/032-IMG_0071-first-commission.png.md b/src/content/commissions/032-IMG_0071-first-commission.png.md new file mode 100644 index 0000000..6d4f41a --- /dev/null +++ b/src/content/commissions/032-IMG_0071-first-commission.png.md @@ -0,0 +1,6 @@ +--- +title: "First Ever Commission" +artistName: "Unknown" +src: "/assets/commissions/IMG_0071.png" +pubDate: "Jan 01 2010" +--- diff --git a/src/content/commissions/033-IMG_4558-boxer-sketch.jpg.md b/src/content/commissions/033-IMG_4558-boxer-sketch.jpg.md new file mode 100644 index 0000000..d6fffa6 --- /dev/null +++ b/src/content/commissions/033-IMG_4558-boxer-sketch.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Boxer Sketch" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/IMG_4558.jpg" +pubDate: "Jan 01 2018" +--- + diff --git a/src/content/commissions/034-photo-2020-03-25-candy-gore.jpg.md b/src/content/commissions/034-photo-2020-03-25-candy-gore.jpg.md new file mode 100644 index 0000000..c6c7dee --- /dev/null +++ b/src/content/commissions/034-photo-2020-03-25-candy-gore.jpg.md @@ -0,0 +1,7 @@ +--- +title: "PFP" +artistName: "Unknown" +src: "/assets/commissions/photo_2020-03-25_09-36-18.jpg" +pubDate: "Jan 01 2021" +--- + diff --git a/src/content/commissions/035-photo-2024-04-22-twinks.jpg.md b/src/content/commissions/035-photo-2024-04-22-twinks.jpg.md new file mode 100644 index 0000000..ef082b5 --- /dev/null +++ b/src/content/commissions/035-photo-2024-04-22-twinks.jpg.md @@ -0,0 +1,7 @@ +--- +title: "YCH" +artistName: "Unknown" +src: "/assets/commissions/photo_2024-04-22_15-05-38.jpg" +pubDate: "Jan 01 2024" +--- + diff --git a/src/content/commissions/036-photo-2024-11-11-kit-and-kairo.jpg.md b/src/content/commissions/036-photo-2024-11-11-kit-and-kairo.jpg.md new file mode 100644 index 0000000..341faf4 --- /dev/null +++ b/src/content/commissions/036-photo-2024-11-11-kit-and-kairo.jpg.md @@ -0,0 +1,7 @@ +--- +title: "Kit and Kairo" +artistName: "Unknown" +src: "/assets/commissions/photo_2024-11-11_07-55-24.jpg" +pubDate: "Jan 01 2024" +--- + diff --git a/src/content/commissions/037-5168159333425023839-fem-kairo-sketch.jpg.md b/src/content/commissions/037-5168159333425023839-fem-kairo-sketch.jpg.md new file mode 100644 index 0000000..0273179 --- /dev/null +++ b/src/content/commissions/037-5168159333425023839-fem-kairo-sketch.jpg.md @@ -0,0 +1,8 @@ +--- +title: "PFP" +artistName: "DivineFollyArt" +artistUrl: "https://www.furaffinity.net/user/divinefollyart/" +src: "/assets/commissions/-5168159333425023839_121.jpg" +pubDate: "Jan 01 2025" +--- + diff --git a/src/content/commissions/038-orgy-ych.png.md b/src/content/commissions/038-orgy-ych.png.md new file mode 100644 index 0000000..51209f1 --- /dev/null +++ b/src/content/commissions/038-orgy-ych.png.md @@ -0,0 +1,12 @@ +--- +title: "Orgy YCH" +artistName: + - "Dasher" + - "Chockloss" +artistUrl: + - "https://www.furaffinity.net/user/d4s3r/" + - "https://www.furaffinity.net/user/chockloss/" +src: "/assets/commissions/Orgycolor.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/039-1683349109-shibari-ych.png.md b/src/content/commissions/039-1683349109-shibari-ych.png.md new file mode 100644 index 0000000..bf5d797 --- /dev/null +++ b/src/content/commissions/039-1683349109-shibari-ych.png.md @@ -0,0 +1,8 @@ +--- +title: "Shibari YCH" +artistName: "Soroka" +artistUrl: "https://www.furaffinity.net/user/soroka-ne-soroka/" +src: "/assets/commissions/1683349109.soroka-ne-soroka_юч_27_af.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/commissions/040-photo-2024-04-29-kairo-pinup.jpg.md b/src/content/commissions/040-photo-2024-04-29-kairo-pinup.jpg.md new file mode 100644 index 0000000..107f33b --- /dev/null +++ b/src/content/commissions/040-photo-2024-04-29-kairo-pinup.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Kairo Pinup" +artistName: "KwiK" +artistUrl: "https://www.furaffinity.net/user/kwik/" +src: "/assets/commissions/photo_2024-04-29_15-18-42.jpg" +pubDate: "Jan 01 2024" +--- + diff --git a/src/content/commissions/041-photo-2023-10-16-kairo-bondage-sketch.jpg.md b/src/content/commissions/041-photo-2023-10-16-kairo-bondage-sketch.jpg.md new file mode 100644 index 0000000..d72d1cf --- /dev/null +++ b/src/content/commissions/041-photo-2023-10-16-kairo-bondage-sketch.jpg.md @@ -0,0 +1,8 @@ +--- +title: "Kairo Bondage Sketch" +artistName: "Sly" +artistUrl: "https://www.furaffinity.net/user/slyasafoxibou" +src: "/assets/commissions/photo_2023-10-16_00-47-08.jpg" +pubDate: "Jan 01 2024" +--- + diff --git a/src/content/commissions/042-pink-jackrabbit-hypnotic-wallpaper.md b/src/content/commissions/042-pink-jackrabbit-hypnotic-wallpaper.md new file mode 100644 index 0000000..da6c084 --- /dev/null +++ b/src/content/commissions/042-pink-jackrabbit-hypnotic-wallpaper.md @@ -0,0 +1,8 @@ +--- +title: "Retro CGI Mystery Commission" +artistName: "zer0rei" +artistUrl: "https://www.zer0rei.com/store/mystery" +src: "/assets/commissions/Pink Jackrabbit Hypnotic 2160p Wallpaper.png" +pubDate: "Jan 01 2025" +--- + diff --git a/src/content/poems/A fox drags the dusk.md b/src/content/poems/A fox drags the dusk.md new file mode 100644 index 0000000..4a18dac --- /dev/null +++ b/src/content/poems/A fox drags the dusk.md @@ -0,0 +1,40 @@ +--- +title: "A fox drags the dusk" +pubDate: "Oct 13 2025" +--- + +from the clouds, jaws gripped round +the light that slots the rumpled birches' +just-unburdened boughs + +trackless in the frowzled leaves, +she suddens over yearning +roots, +scarlet ember of the summer's +afterlife, tugging sunset +taut +along the eaves + +skies groan grateful +as their skin stretches +thin +and their bones show through + +no one hears her straining +breath +before the snap + +no one sees her tumble to her +den in the hollow +-chested +night + +bottomless hours on, +pushed in the barrow of a robin's +song, +dawn +overflows the dark + +yet no one knows if or when +she'll wake again +to save the day from day diff --git a/src/content/poems/Anchorite Autumn.md b/src/content/poems/Anchorite Autumn.md new file mode 100644 index 0000000..cd3e3c6 --- /dev/null +++ b/src/content/poems/Anchorite Autumn.md @@ -0,0 +1,14 @@ +--- +title: "Anchorite Autumn" +pubDate: "Oct 18 2025" +--- + +the rain-hooded monk of october +shades a stony cell +wafer-pale +lips tight +in +waning +votive twilight +thumbing beads of leaves +remembering sins of summer diff --git a/src/content/poems/Caustics.md b/src/content/poems/Caustics.md new file mode 100644 index 0000000..abd7840 --- /dev/null +++ b/src/content/poems/Caustics.md @@ -0,0 +1,19 @@ +--- +title: "Caustics" +pubDate: "Oct 3 2025" +--- + +cracked glass wobble +leaky veins of sun +coral bed carousel +fizzled ribs of sea + +sabre-fencing phantoms on +supermarket lobsters on +superyacht keels on +high school pool room tile + +physics in the haunted sand +an ancient urgent transmission +a nebula-sized qr code +too close to scan diff --git a/src/content/poems/Gender (noun).md b/src/content/poems/Gender (noun).md new file mode 100644 index 0000000..401cc3a --- /dev/null +++ b/src/content/poems/Gender (noun).md @@ -0,0 +1,10 @@ +--- +title: "Gender (noun)" +pubDate: "Sep 24 2025" +--- + +1. a correlation cluster of consumer preferences +2. a set of proscriptions surrounding expressions of anger +3. synesthesia. e.g. "harps are pink, saxes are blue." +4. any game whose players: cannot explain the rules; righteously enforce the rules; lose repeatedly but never win +5. the right or left handedness of shirt buttons diff --git a/src/content/poems/Image18(Fixed).BMP.md b/src/content/poems/Image18(Fixed).BMP.md new file mode 100644 index 0000000..0ea6263 --- /dev/null +++ b/src/content/poems/Image18(Fixed).BMP.md @@ -0,0 +1,26 @@ +--- +title: "Image18(Fixed).BMP" +pubDate: "Sep 21 2025" +--- + +xp +bliss + dazzles moonless + rooms like razor burn + +dial +up + colics to a quiet + world + +alt.consciousness.near-death-exp + re: please interpret... + re: please interpret... + re: please interpret... + > what recompense for sorrow? + only wind in the branches + +you have been +online + -5000000000 second(s) + & diff --git a/src/content/poems/Lostwave Girl.md b/src/content/poems/Lostwave Girl.md new file mode 100644 index 0000000..18c3b93 --- /dev/null +++ b/src/content/poems/Lostwave Girl.md @@ -0,0 +1,29 @@ +--- +title: "Lostwave Girl" +pubDate: "Sep 10 2025" +--- + +Woken by umami-ripened sewage, +she greets another morning like "I can't do this." +Piss-puss mixture foams and glows golden +Cavatappi maggots swarm and grow swollen + +Tumblrborne cognitohazard plague-rat girly +("Reblog to turn your brain to masticated slurry") +gets off to a turboprop voring an Accord +and adds a shadow person to her salvinorin stimboard + +Darknet Sorceress in her Hello Kitty bed +reanimates to summon a glass menagerie of meds +Eyes made of dread, practice smile mildly upsetting, +morning flossing mostly acts as black bile bloodletting + +Thesis on Deleuze decomposing on a USB +as she dapples caramel fraps with toasted sucralose debris +And every drive-thru order's immediate "Hello, sir!" +tends to get her wishing for a euthanasia coaster + +She daydreams an Insta feed of last known photos: +CEOs reported missing from Palermo to Kyoto +Interpol too flustered to ever crack the case +because she's just too stunning wearing black leather and lace. diff --git a/src/content/poems/MOON10.RAW.md b/src/content/poems/MOON10.RAW.md new file mode 100644 index 0000000..1008748 --- /dev/null +++ b/src/content/poems/MOON10.RAW.md @@ -0,0 +1,18 @@ +--- +title: "MOON10.RAW" +pubDate: "Sep 21 2025" +--- + +moon like a searchbar +cradling a hesitating +cursor + +flat clouds hemming the waiting +silence of the world + +anyone can clip through concrete +no one can clip through the skybox + +a neon sign once named the night + PSYCHIC +3am smothers it diff --git a/src/content/poems/My old neighborhood is not that old.md b/src/content/poems/My old neighborhood is not that old.md new file mode 100644 index 0000000..bf1dbed --- /dev/null +++ b/src/content/poems/My old neighborhood is not that old.md @@ -0,0 +1,16 @@ +--- +title: "My old neighborhood is not that old." +pubDate: "Jan 9 2026" +--- + +Its body is still warm. But +its skies have thinned to treacherous +mountain roads. Its clouds seem just about +to burst the seams of the well-worn winter. +To the shapes un-peopling its misty windows, +I hope I've grown unrecognizable. +Every cradle eventually hollows. Abandoned +bars lay like thickets of ribs +in an elephant graveyard. Or, maybe, +as mile markers for the next ones +on their way. diff --git a/src/content/poems/November 5th, Petworth.md b/src/content/poems/November 5th, Petworth.md new file mode 100644 index 0000000..fb4a08e --- /dev/null +++ b/src/content/poems/November 5th, Petworth.md @@ -0,0 +1,28 @@ +--- +title: "November 5th, Petworth" +pubDate: "Sep 29 2025" +--- + +Parked behind St. Paul's, +raindrops blither on the glass +like an ad read: +Honey, DraftKings, BetterHelp + +6% +ABV King Cobra +in the cupholder + +19% +draining phone battery +USB-C cable +Proudly Made in the USA + +64% +turnout + +There's something dull about a wildfire + +About a country plunking a mining +rig in the tub, expecting +something beyond +electrocution diff --git a/src/content/poems/Slushwave Girl.md b/src/content/poems/Slushwave Girl.md new file mode 100644 index 0000000..ad264ff --- /dev/null +++ b/src/content/poems/Slushwave Girl.md @@ -0,0 +1,18 @@ +--- +title: "Slushwave Girl" +pubDate: "Sep 29 2025" +--- + +she dreams you through cerulean curves of sky +and sighs you to her moth-soft bed +into a blanket of fog and whispering screens +which she vows you'll never want to leave +ascii angels haunt the ocean overhead +special characters circling like patient cumuli +she shivers you to airwaves where test patterns liquefy +station sign-offs flocking like gulls in infrared + +haven't you always counted on sprouting wings? +or spindling delicate air on gossamer strings? +she glitters you to the web's last forum thread +and vows its gleaming vowels will never die diff --git a/src/content/poems/Sonnet for Your Werewolf Boyfriend.md b/src/content/poems/Sonnet for Your Werewolf Boyfriend.md new file mode 100644 index 0000000..78709a0 --- /dev/null +++ b/src/content/poems/Sonnet for Your Werewolf Boyfriend.md @@ -0,0 +1,20 @@ +--- +adult: true +title: "Sonnet for Your Werewolf Boyfriend" +pubDate: "Jul 12 2025" +--- + +He looms above you laden as a cloud +He beasts upon you furious as rain +Refusal smells to him like fertile ground, +like racing heat - and big breeds need to chase +He bites away your cries and marks you his +And every fevered thrust that runs you through +is made to stain your unclaimed scent with *his* +until his knot triumphs into you +You didn't used to know this feral quake +which bows your body down to pliant crawl +You didn't used to need his teeming weight; +you used to be afraid to need at all. +With sheepish thanks he licks your face and sighs, +and you feel like a giant in his eyes \ No newline at end of file diff --git a/src/content/poems/Sonnet for a Silent House.md b/src/content/poems/Sonnet for a Silent House.md new file mode 100644 index 0000000..87abb34 --- /dev/null +++ b/src/content/poems/Sonnet for a Silent House.md @@ -0,0 +1,22 @@ +--- +title: "Sonnet for a Silent House" +pubDate: "Jul 5 2025" +--- + +A brittle bend of stone approached the house +A little stand of trees concealed the world +The space between was flushed with corpse-fed sprouts +Above, the bony gray of fall unfurled + +Explorers trembled past the dreaming door +and showed their paper throats to spiral stairs +They found the thing that they'd been looking for, +but only after snapping in its snare + +The ashy glare of dawn reveals the end +result of lusting for the shadow of +the world. A spine askew in jawbone bend, +a rusty stain upon a dusty rug + +The house traverses folding maps of time +to welcome you the hour you arrive. \ No newline at end of file diff --git a/src/content/poems/Sonnet for the Abomination Currently Destroying Our Cathedral.md b/src/content/poems/Sonnet for the Abomination Currently Destroying Our Cathedral.md new file mode 100644 index 0000000..7d5d5ff --- /dev/null +++ b/src/content/poems/Sonnet for the Abomination Currently Destroying Our Cathedral.md @@ -0,0 +1,20 @@ +--- +title: "Sonnet for the Abomination Currently Destroying Our Cathedral" +pubDate: "Sep 3 2025" +--- + +An embered sky insists upon the roof +Cathedral peaks trepan its clouded brain +The beast below still madders her refrain, +stampeding fraying twilight underhoof +Entramping shards of stained glass glutter, while +serrated winter wind affronts the saints +We ensconced in slattern rafters scorn her gait +which paces coarse as blood on marble tile + and rage. +Rage ever at the watchman's slip. +She snuffles at our holy tome to gnaw +and mangle in the glammer of her maw +She bursts the guarded silence from our lips, +our cries at last attract her gaze full vile, +but worst of all comes her beatific smile diff --git a/src/content/poems/The Darkest Wild.md b/src/content/poems/The Darkest Wild.md new file mode 100644 index 0000000..314b3f8 --- /dev/null +++ b/src/content/poems/The Darkest Wild.md @@ -0,0 +1,35 @@ +--- +title: "The Darkest Wild" +pubDate: "Aug 29 2025" +--- + + +Come the roar of the darkest wild + Come the vilest kind of dream +Come the glut of the storm with a flood in its throat + Let all vicious things be freed + +Come your trembling and sweating righteous + Come your regiment's jagged horn +Come your litany of galloping. Try us. Retreat + with less than no remains to mourn + +We've long since flensed our leather shells, + the armor you rely on +Harried arrows carom off us + We wear the night like iron + +Come the sun to conceal the shadow - + come to leer on the ones you felled +Come the dusk, we'll petition our pardons from death; + unlike you, we know him well + +We've learned to drink the ink from paper + and feast on scarecrow bristles +Getting drunk on mountain fog + and moonlight from the river + +We've learned the words that twist your fear + We watched you from our hold +Dancing when the cave winds sang + Thriving on each other's breath alone \ No newline at end of file diff --git a/src/content/poems/Three Ideas About Maine.md b/src/content/poems/Three Ideas About Maine.md new file mode 100644 index 0000000..28d6d37 --- /dev/null +++ b/src/content/poems/Three Ideas About Maine.md @@ -0,0 +1,39 @@ +--- +title: "Three Ideas About Maine" +pubDate: "Feb 28 2026" +--- + +*After a line by David Berman.* + +I + +Fishermen, of course, but jaded electricians too. +I'll even allow a few painters, +the kind that specialize in plain air [*sic*] +portraiture of faded doors, sickly tabbies, +put-upon Saabs; a cellar boarded up +from before we moved in. +Endless pebbled shores. Deficient gray +dreams of candystripe towers. + +II + +A salt-encrusted rocking chair stars +in ten estate sales this year alone. +The previous owner, the auctioneer confabulates, +was a highly successful prosecutor +and he sat his last twenty summers *right here*. +He doesn't mention the coffee stains +which aren't really coffee stains, just like this +isn't really about Maine. + +III + +The end of the shore is the end of the world +and the wind comes in from beyond it. +Its break-ins grow bolder by the year. +Some March, a stereotyped nor'easter +will rattle the bottles of howls in the cellar, +too loud to ignore. +All the while we'll sit *right here*, +sipping Pinot Gris with the throaty seagulls. \ No newline at end of file diff --git a/src/content/poems/Unsent Letters I - To Lacey, From Gray.md b/src/content/poems/Unsent Letters I - To Lacey, From Gray.md new file mode 100644 index 0000000..1bc2d9f --- /dev/null +++ b/src/content/poems/Unsent Letters I - To Lacey, From Gray.md @@ -0,0 +1,92 @@ +--- +title: "Unsent Letters I - To Lacey, From Gray" +pubDate: "Oct 6 2025" +--- + +You can choose your family +but you can't choose your roommates + +A girl in Inwood calls me Mommy while +you + +halve this apartment where all four +corners of the living + +room +flex toward the radiator + +where the hung-up +sleeves of our coats + +tangle in the stains +of black iron burners + +where the ceiling comes +pre-installed with recessed nooses + +this apartment where +two +microns of drywall louden + +your Discord breakups your +mechanical bull mattress springs + +your Pepto-colored hyperpop your +witching hour buzzing and bawling + +your pink sock striptease streams your +WASD MOBA RGB keyclack tapdances + +You're freshly decanted from Claire's +Shoplifted foundation spontaneous + +-ly generates from your pores +I'm a single + +lingering +look + +from spreading your +purple mascara like jam + +from making you drool my name +in trickles of candy glitter + +from sheathing my workout sweat +in the lust of your 127 subs + +You thought I was sleeping +when you said + +_I can't stand_ +_my hot butch roommate_ and + +_I can't stand_ +_the name on the landlord app_ and + +_I can't stand_ +_another fifty years of this or_ + +_even another_ +_week_ + +Shot out of our parent's +houses + +we've both shed miles of skin +to get here + +(_Living in a city where nothing_ +_gets you down_) + +but sometimes I picture the camera +holding on my Kubrick stare before + +the smash +cut to a body bag + +Goddammit +Lacey + +We've all gotta do the dishes +sometime diff --git a/src/content/poems/Unsent Letters II - To Gray, From Lacey.md b/src/content/poems/Unsent Letters II - To Gray, From Lacey.md new file mode 100644 index 0000000..f4f098d --- /dev/null +++ b/src/content/poems/Unsent Letters II - To Gray, From Lacey.md @@ -0,0 +1,112 @@ +--- +title: "Unsent Letters II - To Gray, From Lacey" +pubDate: "Oct 7 2025" +--- + +you grind your teeth +so loud + +i hear your enamel +safeword through the wall + +every +night + +you launch from the +world like a hypersonic + +missile to crumple +on our bombed-out couch + +you glower at a phone that +glowers back at you + +for three straight +hours and then you + +cook more +pasta + +than i could eat in a week +and then you + +think my music +drowns you out + +saying +_at least i_ + +_use social media to +stay informed_ + +saying +_i like stupid girls_ + +_but-_ +saying + +_i will be okay_ +_if i can survive_ + +_another year_ +_probably_ + +some smiling +yellow xanny bars would reset + +your jaw +we're all in this + +shit but you don't have to breathe +it in + +you don't have to splash +when you swim + +when you're not working you're working +out when you're not working + +out you're working out +your stress on some girl + +you think is beneath you +girls you can leave + +covered +in maps + +of continents +we'll never see + +you think i don't do +_real work_ + +you call +me _precarious_ + +like we aren't +all + +one more election +one more crash + +one more east coast superstorm +away + +like we're headed for retirement +homes + +for deathbeds instead +of tarps on the ground + +by the way +if you want me + +if you want to do +_real work_ with me + +say more than +three words to me + +do your own +goddamn dishes gray diff --git a/src/content/poems/field_thing_9.jpg.md b/src/content/poems/field_thing_9.jpg.md new file mode 100644 index 0000000..55823e3 --- /dev/null +++ b/src/content/poems/field_thing_9.jpg.md @@ -0,0 +1,16 @@ +--- +title: "field_thing_9.jpg" +pubDate: "Sep 21 2025" +--- + +jpeg eddies blend + dessicant tawny husks + & + october black + +phone flash flattens + space + gapless rows & sky + +breathless us & teeth + guttering in stalks diff --git a/src/content/songs/001-640x480.md b/src/content/songs/001-640x480.md new file mode 100644 index 0000000..a3e27a3 --- /dev/null +++ b/src/content/songs/001-640x480.md @@ -0,0 +1,6 @@ +--- +title: "640x480" +src: "/assets/songs/640x480.wav" +pubDate: "Jan 01 2022" +--- + diff --git a/src/content/songs/002-photograph-canon-in-deez-remix.md b/src/content/songs/002-photograph-canon-in-deez-remix.md new file mode 100644 index 0000000..49c473f --- /dev/null +++ b/src/content/songs/002-photograph-canon-in-deez-remix.md @@ -0,0 +1,6 @@ +--- +title: "Photograph but it's a chipmunk and chiptune remix" +src: "/assets/songs/Photograph (Canon in Deez Remix).mp3" +pubDate: "Feb 01 2025" +--- + diff --git a/src/content/songs/003-ocean-planet.md b/src/content/songs/003-ocean-planet.md new file mode 100644 index 0000000..3d2c19e --- /dev/null +++ b/src/content/songs/003-ocean-planet.md @@ -0,0 +1,6 @@ +--- +title: "Ocean Planet" +src: "/assets/songs/[OKC 168] Ocean Planet.wav" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/songs/004-maple-buttered-groovecakes.md b/src/content/songs/004-maple-buttered-groovecakes.md new file mode 100644 index 0000000..0555442 --- /dev/null +++ b/src/content/songs/004-maple-buttered-groovecakes.md @@ -0,0 +1,6 @@ +--- +title: "Maple Buttered Groovecakes" +src: "/assets/songs/[OKC 169] Maple Buttered Groovecakes.wav" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/songs/005-doom-treadings.md b/src/content/songs/005-doom-treadings.md new file mode 100644 index 0000000..35fa898 --- /dev/null +++ b/src/content/songs/005-doom-treadings.md @@ -0,0 +1,6 @@ +--- +title: "doom-treadings" +src: "/assets/songs/[OKC 199] doom-treadings.wav" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/songs/006-interlude.md b/src/content/songs/006-interlude.md new file mode 100644 index 0000000..b2434e6 --- /dev/null +++ b/src/content/songs/006-interlude.md @@ -0,0 +1,6 @@ +--- +title: "i n t e r l u d e" +src: "/assets/songs/i n t e r l u d e .mp3" +pubDate: "Jan 01 2025" +--- + diff --git a/src/content/songs/007-lisa-frank-dolphins.md b/src/content/songs/007-lisa-frank-dolphins.md new file mode 100644 index 0000000..8e33061 --- /dev/null +++ b/src/content/songs/007-lisa-frank-dolphins.md @@ -0,0 +1,6 @@ +--- +title: "lisa frank dolphins" +src: "/assets/songs/lisa frank dolphins.wav" +pubDate: "Jan 01 2022" +--- + diff --git a/src/content/songs/008-cold-hell-beyond-the-moon.md b/src/content/songs/008-cold-hell-beyond-the-moon.md new file mode 100644 index 0000000..04fd004 --- /dev/null +++ b/src/content/songs/008-cold-hell-beyond-the-moon.md @@ -0,0 +1,6 @@ +--- +title: "some cold hell beyond the moon" +src: "/assets/songs/some cold hell beyond the moon.wav" +pubDate: "Jan 01 2020" +--- + diff --git a/src/content/songs/009-all-i-want-christmas-but-only-when-she-says-christmas.md b/src/content/songs/009-all-i-want-christmas-but-only-when-she-says-christmas.md new file mode 100644 index 0000000..768f952 --- /dev/null +++ b/src/content/songs/009-all-i-want-christmas-but-only-when-she-says-christmas.md @@ -0,0 +1,6 @@ +--- +title: "All I Want For Christmas is You But Only When She Says Christmas" +src: "/assets/songs/but only when she says christmas.mp3" +pubDate: "Dec 25 2025" +--- + diff --git a/src/content/songs/010-dechristmased.md b/src/content/songs/010-dechristmased.md new file mode 100644 index 0000000..5fb7c97 --- /dev/null +++ b/src/content/songs/010-dechristmased.md @@ -0,0 +1,5 @@ +--- +title: "All I Want for Christmas is You but it's de-Christmased" +src: "/assets/songs/All I Want for Christmas is You (War on Christmas Version).mp3" +pubDate: "Dec 20 2025" +--- diff --git a/src/content/stories/21 Church Rd.md b/src/content/stories/21 Church Rd.md new file mode 100644 index 0000000..1c4d419 --- /dev/null +++ b/src/content/stories/21 Church Rd.md @@ -0,0 +1,236 @@ +--- +adult: true +description: "During a long night of paranormal investigation, Kairo encounters a ghost who plans to feed on more than just their fear. Full title: '21 Church Rd, West Bend, WI 53090'" +pubDate: "Sep 27 2024" +title: "21 Church Rd" +--- + +Alone in the haunted house, Kairo thought about paws. The rabbit had been on the road for almost a week, bouncing from investigation to investigation like a band on a Midwest tour, and, with few opportunities to get off, they were getting pretty pent up. + +For at least the third time that night, they reached for their phone where they had set it down on the coffee table. It would be so easy to pull up some paw porn they had bookmarked and let out a shuddering load or two. But, once again, they forced their mind back to the present. After all, there was still a job to do. + +They glanced at their EMF meter. Seeing that the readings were still nominal, they pulled out their audio recorder. + +"Is there anyone here who wishes to communicate?" they asked the empty living room. + +Pause for response. Rewind. Play back. Still no EVPs. + +Kairo imagined fluffy paws propped up on a desk, soft digits flexing and spreading. Or maybe Kairo would be under the desk, a helpless pawrest made to massage and worship every inch. + +The fantasy was interrupted by Jake's voice crackling through the walkie. "It's your fifteen-minute check-in. Everything still boring in there?" + +Kairo shook their head clear and reached for the walkie instead of the phone. "All readings still nominal. How about in the van? Over." + +"I thought I saw something on the thermal earlier, but it was probably a bird or something." + +"Did you mark the timestamp so we can review the footage later? Also, say 'over' so I don't cut you off. Over." + +"Yeah, yeah, I marked it. But we're not going to find anything, so who cares? Let's get out of here and grab some veggie burgers. *Over*." + +Kairo let out a long sigh before pressing the talk button. "HQ won't certify a ghost insurance policy with only two hours of data. We need to stay here until at least 3 a.m. Over." + +"Whatever. Over, out." + +Kairo flopped onto the couch and pinched the bridge of their nose. A partner outside the house was a necessity on the job, but Jake's professionalism left a lot to be desired. + +To complicate matters more, the rabbit had found themself stealing glances at him for the last few days. However they might feel about Jake's personality, they couldn't deny that the short, fit goat had a great body. And in the days they'd spent cramped together in cheap highway motels or the air mattress in the back of the van, there had been plenty of opportunities for Kairo to see that body in nothing but a pair of briefs - once with an impressive bulge of morning wood that practically started them drooling. It was fortunate that Jake was straight, or the rabbit might have done something regrettable by now. + +Kairo's paw, reaching for their phone and some much-needed sexual relief, found only the cool wooden surface of the coffee table. Confused, they looked around and noticed it hovering at the foot of the stairs, ten feet away. + +Their eyes went wide. All horniness forgotten, they pulled out their walkie once more. "Jake, we have a gross manifestation. Over." + +"What do you mean, 'gross?' Bile? Ecto?" + +"'Gross' as in 'visible to the naked eye.' Over." + +Jake huffed. "Obviously. I knew that. So what do you see?" + +"Something, uh, has my phone." The moment they said that, the phone began to drift up the stairs. "It's carrying it away right now. Over." + +"Well, get after it." + +"We don't know the strength or category of the haunt. We should call for backup. Over." + +Jake groaned. "Dude, it'll take hours for HQ to get someone out here. Just follow it, take some measurements, and then we can report a positive result and get out of here." + +Danger aside, Jake had a point. Besides, who knew what the presence was going to do to Kairo's phone? The last thing they needed was an exorcist bill if it ended up haunted. + +Kairo steeled themself against the hardwired instinct to flee from the supernatural, stood, and walked toward the hovering phone. As soon as they drew close, it mischievously sped up and vanished into the darkness of the upper floor. + +Although they flicked the light switch, the upstairs remained dark. The buzz of fear in their head grew louder, and Kairo wondered whether it wouldn't be better to call for backup after all. But there was no way they could call Jake back to say they were chickening out. It would be fine. All they had to do was record some spectrometer readings and grab the phone, they reminded themself. + +Pulling out their flashlight, they padded slowly up the creaky steps. According to the blueprints they had studied earlier that day, the second floor had only a bedroom, bathroom, and linen closet. After verifying there was nothing in the bathroom or linen closet, Kairo took a deep breath and pulled open the door to the bedroom. + +They flicked the light switch, and this time the room lit up. Maybe the manifestation was already fading, they thought hopefully. Stepping inside, they saw that, besides a king-sized bed in the far corner and a TV on a small stand across from it, the room was spacious and empty. Their phone was nowhere in sight. + +Their long ears swiveled to the sound of the door clicking shut behind them. Startled, they turned and reached for the handle only to find that it had disappeared, leaving only a flat wooden surface. It seemed the manifestation was nowhere near finished, and Kairo was now trapped in the room with it. + +Turning back to face the room, they finally saw their phone. A sleek black panther, laying on her back, held it above her muzzle as she scrolled idly. This might not have been so strange, except that she was not laying on the bed, but rather floated in the middle of the room, bobbing slightly up and down. + +She was entirely nude and the pink pads of her footpaws hovered exactly at Kairo's eye level. Despite the danger of the situation, a throb of heat pulsed between the rabbit's legs. + +The panther's ears twitched, as though Kairo, not she, was the unexpected guest. She propped herself up on her elbow as though on some invisible surface and lifted herself slightly to look at them. Her golden eyes glowed unnaturally. + +"Ghost hunter?" she asked. Her voice was deep and husky. + +Kairo, unsure of themself, could only nod. They had been in the presence of spirits before, but none had ever addressed them so directly. + +"I'm a poltergeist, psychic vampire subtype," she said. "Strength F3. The name's Nahlia. Write it in your logbook." + +"I, uh, keep my logbook on my phone." + +Nahlia raised herself to a full sitting position, and her tail twitched with sudden predatory interest. + +Holding up the phone, she said, "Then come get it, mortal." + +With a quick glance at her admittedly gorgeous footpaws, Kairo walked awkwardly around her outstretched legs to reach for it. As they did, the panther's body turned in the air to keep her legs and those magnetic paws between them. If Kairo took one step forward, their muzzle would be buried in them - an image they could picture vividly, and which they found difficult to dismiss. + +"What's the matter?" she asked. + +"Could you, uh, move your legs, or maybe hand me the phone?" + +"Oh, I see. My paws are distracting you." + +"What? No way." + +She curled her digits alluringly. "I know you're a slut for them. I've seen the bookmarks on your phone." + +Kairo could say nothing in response. + +"'Caged pawboy begs to cum on perfect paws,'" Nahlia recited. "'Paws in your face compilation.' 'Subby bunny plugged and stepped on.'" + +"Okay, okay!" Kairo's ears burned, undoubtedly red as tomatoes. It was impossible to look the panther in the eye without her tempting footpaws taking up the lower half of their vision, so they looked away. + +"There are a lot more here. I could go on." + +"No. Please stop." + +"Normally, I wouldn't. I'm a psychic vampire, like I said, and I've made a whole meal of your fear and embarrassment already. But you're so pitiful that I think I *will* give your phone back." + +Kairo sighed in relief. "Thank you." + +"On one condition." Flexing one footpaw, she said, "Kiss it." + +Their heart throbbed with a combination of lust and fear. Physically touching a ghost was never a good idea, especially not an F3. "I don't know." + +"I'm not going to posses you. I just want one taste of that lust." Her glowing eyes flashed even brighter. + +As Kairo considered it, their eyes inevitably drifted back to the panther's footpaw. It would feel incredible to bury their sensitive nose in those digits, to press their muzzle to that soft pad, but the rational part of their brain knew they shouldn't. + +"I'll help you decide," Nahlia said. Her body, again without visible means of movement, darted forward and her right footpaw crushed against Kairo's face. Startled, they gave a muffled cry. + +"Kiss," she commanded. + +Unable to resist, they parted their muzzle and planted a kiss on the broad pad. It was unbelievably soft and warm, and Kairo felt their cock throb and stiffen. As if on instinct, they put out their tongue and ran it along the pad. + +"I never said you could lick, horny bunny. But if you want more, I'm happy to oblige." + +Without removing the paw from Kairo's face, she stood, or rather her body rotated to an upright position. She pressed down until she stepped on their face with practically her full weight, and Kairo sank to their knees as their tongue explored every texture of the footpaw filling their vision and mind. + +Nahlia continued lowering her body until Kairo was forced onto their back on the carpet. She now looked as though she were sitting in an invisible chair above the rabbit. + +"Since we're renegotiating the deal, here's my proposal. You stay down there, do whatever your perverted little heart desires, and I'll let you go when you're finished. But I get to make a little video." She pointed the phone down at the rabbit melting beneath her. + +"Wait, you're-" Their words came out slurred and muffled, so they struggled to extract their face from under the panther's footpaw before continuing. "You're not going to send it to anyone, are you?" + +"Of course I will. It would give me an abundance of humiliation to feed on." + +"Please," they begged. "I can't let people see me like this." Besides revealing the depths of their fetish, it would make them look *unprofessional*. + +Nahlia chuckled. "It's not up to you. But, since I'm a generous poltergeist, how about this: I'll only send it to your contacts if you cum." + +Though ashamed of their neediness, they were unable to keep the whine from their voice. "I don't get to cum?" + +"If I can't get your humiliation, I want your sexual frustration. Is that a problem?" + +Nahlia may not have been possessing Kairo, but staying in her presence for so long was undoubtedly affecting their judgment. They should have radioed Jake by now, or jumped out the window - anything would be better than letting the ghost frame the terms of their escape. + +Their eyes returned to the paw in their face. "No, it's not a problem..." they said helplessly. + +"Then get back to worshiping, pawbrain. Say, 'Yes, Nahlia.'" + +"I..." + +"Say it, mortal." + +"Yes, Nahlia." + +"And start stroking." + +"Yes, Nahlia." + +As if they had been waiting for permission, the rabbit unbuttoned their pants immediately, letting their rock-hard cock spring loose and fall against their belly. + +She scoffed. "You're that hard over *paws*? Weirdo." + +The panther placed both her footpaws on Kairo's muzzle and smothered the rabbit's face with them. Plush, velvety black fur, warm pads, and her digits curling and gripping filled their mind, and they let everything else go. Her claws slid out whenever the rabbit's tongue ran over a sensitive spot, but she managed never to scratch them. + +At the edge of their awareness, they saw the unblinking lens of their phone camera hovering overhead and, just behind it, a feline grin glittering with sharp teeth. As Kairo lost themself in paw worship, huffing, licking, and eagerly stroking their cock, the poltergeist drew energy from the rabbit, making the lights in the room flicker and dim. + +"We both know how this is going to end," Nahlia said. "That thing between your legs is doing the thinking for you, and it's not going to let you stop." + +As lost in pleasure and lust as Kairo was, they were sure she was wrong. They would enjoy another minute of this, maybe two or three, and stop as soon as they got close. Later that night, they could find some quiet moment away from Jake and drain their balls while fantasizing about those perfect paws. It wouldn't feel as good as it would to get off right now, but the consequences of that video going out weren't worth a few moments of quaking pleasure. + +"You're nothing but a typical breeder," she continued. "You saw something that made your cock hard, and now you can't think straight. The only relief is to leave the object of your lust sticky and dripping." + +She lifted her footpaws from Kairo's face and they gasped for fresh air. Sliding back as though on a rolling chair, the panther now placed her footpaws on either side of the rabbit's cock. + +"This is a good angle," she said. "Cum all over them for the camera." + +Kairo met the gaze of the phone camera. They pictured how they must look on video - panting, expression glazed-over, paw frantically working their cock. *Pathetic *was the only word for it. + +Hot pressure built up in their balls. It was almost the point of no return, but the rabbit had no willpower left to resist. Pleasure clouded their mind, and Nahlia's words echoed in their ears: the only way to get relief was to drain their balls onto those addictive footpaws. + +There had never been a choice, they told themself. Nahlia used some kind of mind control, hypnotized them with her glowing eyes. Hadn't she? In any case, it was no use resisting at this point. + +"Let me fuck them," they panted. "I'm close." + +"That didn't take long," she laughed. "Look right in the camera when you cum. I want to capture that stupid face you're going to make." + +She put her footpaws together, easily enveloping Kairo's cock, and the rabbit pumped their hips in and out between them. It was inevitable now. + +"Keep looking at the camera or I'll ruin your orgasm, pawfucker," Nahlia said. + +Eyes already half-closed in anticipation, they forced their gaze away from their cock and back to the camera. As soon as they did, climax struck them like lightning. They cried out as overwhelming pleasure raced up the length of their cock and soaked through their body. Ropes of hot seed drenched the panther's pads, lubricating the rabbit's final thrusts and splattering her dark paws with white, dripping cum. + +The lights went out completely as Nahlia absorbed the energy of the rabbit's pleasure, and the air crackled with electricity as her power swelled. Once the lights flickered back to life, Nahlia returned to her position over Kairo's face. + +"Clean up your mess," she commanded them. + +With the camera still staring down, they ran their tongue over every inch of her footpaws and between her digits, messily slurping up their own salty cum and swallowing every drop. To finish the job, she wiped off her sodden paws on either side of Kairo's muzzle. + +She stood with her full weight onto the rabbit, pinning them down. "Stupid bunny. Hold still now while I send the video." + +Remembering the consequences of their pleasure, they cried, "No, wait!" + +"A deal's a deal, isn't it?" she tapped rapidly, selecting contact after contact. + +The rabbit squirmed as they tried to escape from under her. They might have succeeded when they first entered the room, but she was so much stronger now - F5 at least - that they couldn't move. To their shame, part of them enjoyed being beneath her even now. + +"Sent," she said simply. "Thanks for the food, mortal. Come play again sometime." + +Nahlia's body swelled uncannily for a moment, and then she melted into sticky green ectoplasm that rained down on Kairo and soaked into their fur. Their phone dropped onto the carpet beside them. They snatched for it. There was still one desperate hope: they could send out follow-up texts, something like, "haunted attachment, do not open!" - but the screen was dead. + +As they tried uselessly to reboot the phone, they didn't notice the congealing ectoplasm rolling down their body. The globs hardened into a solid green shell around the rabbit's cock, then fastened itself in place around the balls. It was already done by the time Kairo noticed. + +Kairo would not be getting off again for awhile, and no doubt Nahlia would be feeding on their frustration from here. The cage pulsed teasingly around their still-sensitive cock as if to confirm that suspicion. + +In the bathroom, Kairo plugged in their phone, then hopped in the shower to scrub off the ectoplasm and cum. They anxiously checked their phone every minute, but it refused to turn on. Nahlia must have shorted it out entirely. + +They sighed. There was nothing they could do but hope that their friends understood that the video was just one of the hazards of the job. After all, the poltergeist had used mind control on them, hadn't she? It wasn't their fault. + +As they left the house, they saw Jake waiting for them next to the van, holding a disposable vape in one hand while looking down at his phone. Kairo's mouth went dry. + +The goat looked up. "Hey." + +"Hey." + +He took a long drag from his vape. "You're not into hooves too, are you?" + +"Jake!" + +"Should I start wearing shoes around you, or what?" + +"Don't be like that! I was mind controlled!" + +"Whatever. Let's break down the equipment and get out of here. I'm starving." He reached into the van, pulled out a clipboard, and clicked a pen. "I'm guessing we should mark the place as haunted?" diff --git a/src/content/stories/A Snowy Day.md b/src/content/stories/A Snowy Day.md new file mode 100644 index 0000000..27bdc99 --- /dev/null +++ b/src/content/stories/A Snowy Day.md @@ -0,0 +1,321 @@ +--- +description: "A non-porn Kairoverse story that takes place during their time as a student at Fathom University." +pubDate: "Oct 8 2024" +title: "A Snowy Day" +--- + +*CW: Suicide, transphobia* + +I wake up in your body. I can tell it's not mine before I even open your eyes because your weight, temperature, pace of breathing, and a million other qualities are different than what I'm used to. Not in a bad way - just different. + +I try to remember how I got here, but nothing comes. In fact, I can't remember anything from before. That's disconcerting, but I'll figure it out. I don't want to stay here, and I'm sure you want to get your body back too. + +Leaving the bed, I look around at the grungy dorm room I've found myself in. Your clothes are all over the floor, your textbooks and scrawled notes cover the desk, and the smell of liquor wafts from a plastic water bottle on your bedside table. You're kind of a mess, huh? + +Since you sleep naked, the mirror hanging on the door shows me everything. Hope you don't mind. Your soft fur is gray with cream-colored chest and hair, your long ears are droopy with sleep, and you've got a pair of muscular legs over big padless stompers. When I open your muzzle, I see a pair of long buck teeth. Those are going to take some getting used to - I can't stop running your tongue over them. + +You've got the vibes of a shy twink who doesn't know how hot they are. I can't help wondering what it would be like to play with your cock, even though it would feel wrong to do so. Your body instantly gets excited at the thought, just like I'd expect from your typically high-libido species. + +Your student ID hangs on a hook above the mirror. Studying it, I learn your name is Kairo, you use "they/them" pronouns, and you go to Fathom University. The name is familiar - it's a college in Ann Arbor known for paranormal studies. In the photo, your fur is shiny and you're smiling bright, your long ears so perked up that they're out of frame - quite a contrast to the disheveled bunny in the mirror. + +Your drawers are empty, so I guess all your clean clothes are somewhere on the floor. I find a few things that pass the sniff test, but they're barely acceptable to go out in. These faded jeans barely fit you, and these ratty graphic tees should have been thrown out a decade ago. It's probably not my place to say it, but you're too hot to dress this bad. + +After putting together the most acceptable outfit I can, I head out. Checking your phone, I see that it's 7:30 a.m. Based on the early wake-up time, the smell of liquor in your room, and the slight nausea I feel, I conclude you were drinking last night - probably alone. As strange as this situation is, I have to admit there's a thrill in playing detective. + +It's a brisk November morning. The dawn shines on fresh-fallen snow, unplowed and unmarked by pawprints. Everything is new and clean, all made of the same gentle curves of white, and the branches on the trees are sheathed with ice that glitters in the low sun. There is an otherworldly beauty here, but the beads of water forming below the branches tell me it won't last. + +Your long footpaws make easy work of the snow and, as I follow the sidewalk to the end of the street, I look up at the red brick student housing I pass. Somewhere inside must be friends of yours, or enemies, or lovers, or fuckbuddies, or some combination of those descriptors. If I can get in touch with some of them, I can find out what you were up to last night that might have pulled me in and figure out a way to reverse it. As a Fathom student, you're probably studying ghost stuff, so maybe this is some class project gone wrong. + +Guided by instinct, I turn right on Madison St and the warm smell of coffee hits your sensitive, twitching nose. The 24-Hour Starlight Diner sits just at the edge of campus, a retro chrome and neon building whose promise of greasy burgers and bacon at all hours undoubtedly pulls in dozens of drunken students every night. Your mouth waters at the thought, and I realize how hungry you are. + +A bell above the door rings when I go in, and for some reason your body floods with adrenaline when a server at the counter looks over. It seems like you have some bad social anxiety. Pushing past it, I gesture to a booth by the window and she nods. + +When she drops off the menu, I ask what is probably a weird question. "Was I here last night?" + +"Sounds like someone partied a little too hard," the beagle laughs. "Finals stress, baby?" + +"Something like that." + +"Well, I wasn't working last night, so I couldn't say. But if you did, I'm glad you decided to come back." + +"Of course. It smells amazing." + +I order coffee and a plate of bacon and eggs. She gives me an odd look, and, remembering what species you are, I amend the order. + +"Um, actually I'll take the pancakes and some veggie sausage." + +That satisfies her, and soon enough I have a hot cup of coffee to wrap my paws around. Outside, students start to trudge their way through the snow to their early classes, carving trenches which will make it easier for the next students to follow. + +That thought sets something off in me, and your eyes water. Maybe it's the stress of this experience catching up with me, but I don't think so - actually, I feel happy. Everything feels *real *- the warmth and smell of the coffee, the contrasting chill that emanates from the window, the pop song playing from the overhead speakers, the weight of your body against the vinyl seat, the linoleum under your footpaws. Mundane sensations, but sensations nonetheless. + +"Kai!" someone calls. I look up and see a mouse boy and a skunk girl making their way toward me. They must see my teary eyes, because they hesitate before sitting down, frowning. + +"Everything okay, Kai?" the skunk asks. + +"I'm not Kairo," I blurt. + +"Huh?" + +"I don't know who I am, exactly, but I'm not Kairo. I just woke up in their body this morning." + +"Uh-oh," the mouse says. "Zoey, do you still have that loaner Trifield meter from Professor Karroway's class?" + +The skunk, Zoey, pulls out a gray box and runs it over me. The server watches suspiciously, which makes sense since there's no non-suspicious explanation for this. Fortunately, Zoey finishes taking her readings quickly. + +"It's a possession," she concludes. "Someone else is definitely in there." + +If I'm a ghost, that would explain why everything feels so vivid - I probably haven't felt *anything* in a long time. + +"Should we call the police?" the mouse asks. He says it quietly, as though your huge ears wouldn't be able to hear him across the narrow table. + +"It doesn't *seem *dangerous. It wouldn't have revealed itself if it was." + +Turning to me, Jay says, "Regardless, you've got to go, man." He checks the time on his phone. "And you've got to do it soon, because we've got a Phasmology final in an hour." + +As much as I don't want to give this all up, they're right. It's your body and you should get it back. + +"All right," I say. "Give me a second." + +Unsure how to go about this, I try closing your eyes and shutting out everything around me, separating myself from the sensations of your body. Starting at the digits of your footpaws and working my way up, I begin to surrender territory, each inch of your body blinking out of my awareness as I go. It's working, I think. + +Then you pull me back. Your heavy hand soars out of the darkness, grabs me hard enough to rip the air from my lungs, and your eyes fly open as I snap back into your body. + +"I, uh, don't think they want to let me go," I say. + +Your friends share a worried look. Zoey mouths something to Jay, of which I can only make out "-by ghost?" + +"In any case, that's a problem," the skunk says. "If we tell anyone about this, they'll have you arrested and the police will perform an exorcism. But if Kairo wants you to stay, an exorcism would be dangerous - both identities could end up fragmented." + +"Yeah..." Jay says. "And Kairo has enough going on right now, mentally, to handle that." + +Before I can ask what the mouse means, the server arrives with my plate. + +Jay says to her, "I'll take the veggie poutine, side of hash browns, and some toast." When she leaves, Zoey shoots him a scornful look. "What?" he protests. "I'm supposed to starve because Kairo's in trouble? My brain needs the calories before the final." + +To get us back on track, I say, "What do we do?" + +Zoey sighs. "The two of you will naturally separate on your own, so I guess we just wait it out. In the meantime, you need an excuse to skip the final. Unless you've memorized the ten categories of poltergeist?" + +I definitely haven't. "Can't I just say Kairo is sick?" + +"That won't work. Professor Archer is a serious hardass," Jay says. + +"Well, I'll figure something out." + +Your stomach is too empty for me to resist the food in front of me, so I dig in. I feel like crying again when the rich veggie butter and sweet syrup hits your tongue. + +"What should we call you, anyway?" Jay asks. + +I pause eating for a moment. Despite the amnesia, I can feel my name in the back of my mind, its dim shape swimming just out of reach. I almost give us a headache fighting for it, but then it finally comes. + +"Henry," I say. It's a powerful name - *my *name - and I'm proud to say it. "And I use he/him." + +"Nice to meet you, Henry." Jay extends his fleshy pink paw to shake, but Zoey slaps it out of the way. + +"Don't. Touch. Ghosts," Zoey says. "Especially not ones that have already demonstrated the capacity for possession." + +"Oh, right. I knew that." + +We wrap up breakfast and head to class. Your breath is still visible as it swirls out of your muzzle, but the day is warming up. The snow on the sidewalk has been crushed down by pawprints, and the snow in the street is getting dark with the dirt of passing cars. A plow truck passes us by and pushes more of it into a pile in the student parking lot. + +Between the main school buildings, Fathom University has a huge stretch of open grass dotted with ancient, gnarled oaks, and the infamous Charles Walker Library building rises at the far end. Your school is gorgeous. + +Zoey and Jay lead me along the winding, shaded paths to a two-story brick building on the east side and up the stairs to an auditorium-style classroom. There are already two dozen students here, and I swear they all turn to look at us when we enter. + +Your heart pounds and your mouth goes dry. I know prey species are prone to anxiety disorders, and I remember Jay mentioning your mental health struggles. I hope you're doing something to help yourself because, if going out feels like this, it's a wonder you go out at all. + +As Zoey and Jay find their seats, I take the stairs down to where a middle-aged mink is shuffling papers on a wooden desk. The whiteboards behind him are filled with names, places, dates, and abstract concepts related to ghost theory, with "DNE!!!" written beside the scribblings in huge letters. + +"Professor Archer?" I ask in a shaky voice. + +He looks over his rectangular glasses without responding. + +"I can't take the test today." + +"Who died?" + +"What?" + +"If you're standing up and talking, you're not sick enough to get out of the test. If you have a scheduling conflict, you would have told me about it before this morning. That leaves only a family emergency as a possible excuse. Therefore, I'll ask you again - who died?" + +"No one." + +"Then take your seat." + +Your body wants to shrink away from conflict, but I fight against it. "I can't." + +He shrugs. "If you want to flush 30% of your grade down the toilet, I won't stop you. You're an adult - ostensibly, anyway." + +The shape of the room allows everyone to hear our conversation, and your heart beats even faster when I notice every eye is pointed down at us. Not wanting to wreck your grades, I make a risky decision that I hope you're okay with. + +I brace myself, then say, "I can't take the test because Kairo is possessed. By me. I'm a ghost." Glancing back, I see Zoey put her muzzle in her paws as Jay looks on, agape. + +Professor Archer looks dubious at first as he looks me up and down. Then his eyes widen. "Call campus security!" he shouts to the classroom. + +Time to bounce. I make the most of your strong legs as I hop the stairs three at a time on my way to the doors. One student tries to stop me, but I shoulder them out of the way, sending their notebook and papers flying. + +"Sorry!" I call behind me. + +I shove the doors open, narrowly missing the muzzle of a fox on their way in, and I don't stop until I reach the lobby. When I get there, a member of campus security is already talking into a two-way radio strapped on his shoulder. He recognizes me instantly and drops the radio as he goes to block the door. + +Weird as this situation is, temporary as it is, and whatever your motivations, I know neither of us want it to end like this, so I need you to tell me if there's another way out of this building. + +Left? I turn your head and spot a side exit. The security guard sees me look and moves to cut me off, but you're faster than him. I reach the door and push through, and I don't stop running until I reach the edge of the yard, your lungs burning and footpaws throbbing. + +You're naturally fast, but you're out of shape, and the diner food sitting in your stomach doesn't help. Regardless, I can't afford to slow down. I keep a sprinting pace to the street, cars honking as I cross without waiting. + +There's a public park just outside of campus, and I take cover among the trees on the walking trails there. Overhead, the ice on the branches overhead is rapidly thinning and their melting run-off falls like drizzling rain. I pass a park employee shoveling the snow and wave awkwardly, praying a Green alert with your description hasn't been put out yet. + +I need to get some distance from here. I pull out your phone, which fortunately unlocks with Face ID, to search public transit. I know U-M nearby has the MagicBus, but I don't know if you need a student ID to ride it. + +I open a browser and start searching "how to ride magicbus," but something stops me. Your browser suggests a result from your history - "how to commit suicide by ghost." + +I don't know how to respond. Actually, I do, and as someone who *is *dead, I think I have some authority to ask this: what the hell is wrong with you? You're young, you're hot, and you're going to school on a beautiful campus. Even if you're stressed about finals or whatever, just take a walk and enjoy the gorgeous autumn day. + +That's probably not helpful, is it? + +I tap the search suggestion and, below a box with the 988 suicide hotline, see several purple links you've visited. + +On one of them, a Redditor says, "A lot of people use Silencers for sbg. Those things don't play with their food like poltergeists do - they just want you dead. Not that I condone suicide, but if someone is going to use a Silent House for it, you better hope they go in headfirst and fast. Silencers start ripping* *the second someone enters their territory so, if the victim leads with their leg or hesitates at the threshold, it's always gruesome and agonizing." + +How can you read stuff like this and still want to go through with it? Regardless, this is a useful clue - your intent to commit suicide by ghost must have something to do with the current situation. + +The sound of sirens in the distance interrupts my thoughts, so I push on through the park. Two streets over, I find a thrift store and hide among the racks. No Green alert gets pushed to my phone and the sirens soon fade, which must mean the cops have decided I'm low priority. I'm a little offended at that. + +At some point, I stop pretending to browse and start actually browsing. You really need new clothes, and maybe looking better will help you feel better. I find a blue cardigan from the women's section that looks great against your fur and brings out your enby energy; a denim jacket with torn-off sleeves for more of a punk look; and a stripey set of pink-and-black thigh-highs and arm warmers that I think would be a hit at the gay bar. + +Four outfits later, I end up spending about $250 of your money. Sorry. Actually, I'm *not* sorry - it's not like the money would have been any good to you if you were dead. + +My next stop is the CVS next door where I pick up an energy drink and, on impulse, a can of pink hair dye which I spray on in the public restroom. I'm a fan of pink, I discover, and it happens to look good on you too. You're lucky enough to have hair, as opposed to just head fluff, so I figure you might as well have *cool *hair. Since you seem to have put me in charge of your body, I get to make those kinds of decisions. + +Back out on the streets, my new outfit and vibrant hair draws the attention of the local college gays. It lifts my mood, and I hope it lifts yours too. + +I get a text from Zoey. "Meet us at Jay's dorm," it says, followed by an address. + +When I arrive, Jay is sitting on the bed and Zoey is at the desk chair. "How did the final go?" I ask. + +"It got canceled," Jay says. "Instead, the cops asked us all questions for like two hours. Thanks to you, we have another week to study." + +"You're welcome," I say. + +"More importantly," Zoey says, "what did you do to Kairo's hair?" + +"Well, I had to do something. They looked..." I search for the right word. "*Straight*." + +"I think he looks good," Jay says. "Like, really good." The mouse is openly ogling me, and the attraction is definitely mutual. Would you mind if I hooked up with him later? + +Zoey interrupts, "Henry, are you any closer to leaving Kairo's body?" + +I think about it. "Maybe? I can't tell." + +She takes out her Trifield meter again. "Your readings are slightly lower. Based on the rate of change since this morning, I'd say you'll be out of Kairo by 6 a.m. tomorrow." + +"That's...not long," I say. + +A flash of sympathy crosses the skunk's face. "I'm sorry." + +I think for a long moment, and then ask a question that's been on my mind. "What would you two do if you only had one day left to live?" + +Zoey looks unsure, but Jay answers right away. "Drop molly, hit the club, and get laid." + +"Jay!" Zoey snaps. + +"What? Okay, fine. I think he should 'spend his last moments with his friends and loved ones.'" He says it with the digits of his fleshy pink paws forming scare quotes. + +"I don't know why you say it sarcastically like that - it's actually a good point," Zoey says. "Do you have any family members you want to reach out to?" + +For some reason, he word *family *sends a wave of cold dread over your body and, unlike your body's reflexive anxiety from earlier, this feeling is entirely my own. Unable to speak, I shake your head. + +"That's what I figured," Jay says. "What do you think, Zoey?" + +She rolls her eyes. "Well, we *were* planning to celebrate the end of finals at Nocturne tonight. I guess the ghost can come along." + +"Rad," he says. + +"I don't think he should drop molly, though," she says. "We don't know what medications Kairo is on." + +Oops. "Actually, I didn't take any of their meds this morning." + +"Then he's set," Jay concludes. + +The skunk can't come up with a counter-argument, so she just shrugs. I'm glad to see you have friends that let you make bad decisions. + +The mention of meds reminds me to bring something up. Sorry for violating your privacy, but they have to know. "By the way, I found something on Kairo's phone earlier. It seems to indicate that they were actively planning to kill themself." + +They exchange a guilty look that tells me that this news isn't surprising. + +Zoey says, "Kairo...has been having a lot of problems since in-person classes started up again. They were always socially anxious, but it's been really bad since then." + +Jay adds, "Not to mention the fact that they graduate next year. They've told me before that they don't know what they want to do and can't imagine life after college." + +Come on, Kairo. You're going to do fine. I was anxious before graduation too. Come to think of it though, I don't remember whether I even *did *graduate before I died. The fact that I was in college at all is more information than I had before. + +"Kairo definitely needs help," I say. + +"We know," Zoey says. "We just don't know what to do other than be there for them." + +"I'm sure that helps," I say. + +Jay and Zoey have other classes to get to so, to kill time, I take Jay's bike and follow a path along the Huron River to Gallup Park. Your strong legs are perfect for biking, but I can tell your body isn't used to the effort. I lock up the bike and take a walk along the water, enjoying the day, but pretty soon the sun is setting at around 5:00 p.m. + +On the way back, I find myself in another yet space filled with trees, and I walk Jay's bike along the quiet path. This is Forest Hill Cemetery, I realize. It's not on the way back to the dorm, but some instinct pushes me on. The solemn headstones and the dead trees silhouetted against the purple dusk are eerie, and I'm sure your ghost-hunting classmates could have a field day here - literally, I guess. + +I come to a stop before I realize why, but I see it when I turn your head. A small headstone which bears a death date of November 16th, 2021 and a feminine name. It stands out from all the others because someone has spray painted over the name with "HENRY" in tall pink letters. The paint is so fresh that I can smell it. + +It all comes back to me. I had just gotten out of Sociology finals when my dad called me. I assumed he was calling to ask how they went, so I was taken completely off-guard at his furious tone as he told me he knew I had been taking T and that I was looking into top surgery. I could hear my mom sobbing in the background as he threatened to cut off my tuition payments if I didn't stop "poisoning my body" and didn't start "using the name my mother gave me." + +Everything else happened so fast, almost automatically. I didn't even have time to realize I was dead. + +You remember coming to my grave yesterday. There was an article about me in the student newspaper on the anniversary of my death, and it stirred mixed emotions in you considering your own suicidal intentions. As you stood beside my headstone, you wished we could trade places and, in the murky place where I slept, I heard you. + +I wouldn't give you what you asked for even if I could, but you've given me another day to say goodbye to life, and I hope in some small way I can give you something you need in return. + +--- + +"Ready to drop?" Jay asks me when I get back. + +I'm still emotional from the trip to the cemetery earlier, so I take a moment to steady your voice before responding. "I haven't done this before. Or, if I have, I don't remember. Is there anything I should know?" + +"You're going to feel good, you're going to want to move, and every idea is going to sound great even when it's not. Oh, and drink lots of water." + +I nod. "I'm down." + +"How does Kairo feel about it?" Zoey asked. + +I wait for your response, but don't get one. "I still can't hear them." + +Jay shrugs. "Whatever. It'll be good for them." + +Zoey says, "I'm not sure how I feel about you both making decisions for Kairo." + +"Kairo *chose* to hand control over to me," I point out. + +"I guess," she says, frowning. "It's just a weird situation and I don't know what the rules are." + +I say, "If there's one thing I'm realizing, it's that there aren't any rules." Jay hands out tablets from a plastic bag and I throw mine down your muzzle before I can worry about it. I don't know if this is really the best way I can spend my last day, but I'm going to focus on what's in front of me rather than waste time thinking about nonexistent alternatives. + +After we drop, time speeds up. Nocturne is cool as hell, but then again everything is cool as hell right now - even the backseat of Zoey's Camry felt so amazing that I spent the whole ride over rubbing it with your paws. The club has a stage and I watch, mesmerized, as a buff otter twirls on a pole, colored lights shimmering on their oiled fur. + +I chug water from a dispenser at the end of the bar before making my way to the center of the crowd. Your body is tired from the run and the bike ride today, but I barely feel it as I start going. Dancing in front of speakers that throb loud enough to vibrate your whiskers, I keep brushing the exposed fur of the men around me, a lot of them wearing tank tops and shorts despite the freezing night outside. + +At first I think the iguana next to me is brushing me accidentally, and I'm so lost in the music that I ignore him until he says, "Having a good time, cutie?" In a blur, we dance for awhile and then sit down at the bar, though neither of us order anything. + +"You're rolling too, right?" the iguana asks. "First time? How long ago did you drop?" His questions have been coming rapid fire since we started talking. Then he asks, "Want to re-dose?" He holds out another tablet, heedless of the dozens of eyes around us. + +I want to ask Jay whether that's a good idea, but he and Zoey are at the opposite end of the bar, looking so cute as they run their paws all over each other. Seeing me hesitate, the iguana throws the tablet back himself to show it's safe, then holds out a new one for me. Fuck it. I swallow it down and we keep moving. + +Then it's 3:00 a.m. The club has closed, Jay and Zoey disappeared at some point, and the iguana and I are freezing on the corner trying to figure out what address to put in as our Uber destination. + +"I can host," he says. "I'm at my mom's place right now, but she won't bother us if we hang out in the basement. We can sit on the couch and cuddle or, you know, whatever. Plus I have a vaporizer if you want to smoke." + +"How does weed interact with molly?" I can't control the volume of your voice right now, and someone across the street gives a drunken cheer at that. + +He says, "It should make the effects kick back in if they're fading." Sounds perfect to me. + +We do a lot more than cuddle until, at some point, the iguana passes out. Your phone died a while ago, so I feel my way back to campus on footpaw through a combination of memory and dumb luck. I have no idea what time it is, but it's still dark out. + +Snow starts falling, a little at first and then a lot, refilling the streets and sidewalks and refreezing the branches of the trees. The flakes are cold as they melt on your fur and drip through to your skin, but it feels nice after so much time dancing and fucking. + +By the time I get back to your dorm, I'm starting to lose my grip on you and vice-versa. That's fine. Or, if not fine, then *acceptable*. I've had my chance to process that the end is coming, which I didn't get to have the first time around. I got to have another day fully in the knowledge that it was my last. I'm as satisfied as I'm going to be. + +I'm going to pass out and pass on soon, hopefully to somewhere with MDMA, loud music, and scaly boys, but since I'm not sure how much you're going to remember about today, I decide to write you a note and stick it to your mirror. I'm too tired for anything long or fancy. All it says is, "This is it." diff --git a/src/content/stories/All the Way Dark.md b/src/content/stories/All the Way Dark.md new file mode 100644 index 0000000..d088a1d --- /dev/null +++ b/src/content/stories/All the Way Dark.md @@ -0,0 +1,792 @@ +--- +description: "A ghost story of divorce, dysphoria, and digital dreams." +pubDate: "Aug 15 2025" +title: "All the Way Dark" +--- + +*Thanks to the following critters for their help editing this story:* + +- [Chid](https://www.furaffinity.net/user/chidchud) +- [Lilac](https://www.furaffinity.net/user/misslilac) +- [Sly](https://www.furaffinity.net/user/slyasafoxibou) + +
+ +Seeing Mom's car in the driveway startled Jacob worse than the ending of *Paranormal Activity*. It was only 3 p.m., so he should have had another three hours. What the heck was she doing back already? + +Jacob was sweaty from walking around all day with his bookbag full of heavy gear, and the straps were getting itchy even through his shirt and gray fur. He hated being sweaty and had been excited for air conditioning, but now he wished he could stay outside all day. But Mom might be watching from inside, and she would get suspicious if he kept standing there. He couldn't see through the windows because of the glare from the sun, but the longer he stood there the more he was sure that Mom was looking out at him. + +She had come home early to catch him, he realized. She was going to yell at him, throw his gear away, and probably ground him from the computer and the Xbox for the rest of summer vacation. + +The rabbit thumped his footpaw on the sidewalk until his stomach settled down, then made himself keep walking to his house. It was brown, one story tall, and had a tiny yard, same as all the others in the neighborhood. Like every other afternoon, there were a bunch of normal kids yelling and playing sports on the street in front of it. As Jacob walked by, one of the kids yelled something at him that made the other kids laugh, but he didn't understand it. It might have been about how Jacob dressed wrong, walked wrong, or had ears that were too big for his face, but either way he pretended he didn't hear it even though it made him walk faster. + +When he got inside, he saw Mom wasn't even at the window. She was doing dishes. "Hi, Mom," he said. + +She didn't turn around. "Hi, Jacob. Where have you been?" + +"I was going door-to-door getting signatures for my petition." Jacob's voice always shook when he lied to Mom, but he was getting better at sounding normal. + +"Right, your summer project. Whose class is that for again?" + +"Mr. Thaxton, the science teacher." + +"Right." + +It looked like Jacob wasn't in trouble after all. He was so happy he wanted to hop around the dining room. "Why are you home, Mom?" he asked. + +She sighed. "Work was a nightmare this morning. After lunch, I told them I was sick and took the rest of the day off." + +"Wow, I wish I could ditch school whenever I wanted." + +He meant it as a joke, but Mom didn't laugh. "What's so bad about school?" + +"It's boring and I don't learn anything. I just sit there for seven hours watching the clock and every minute feels like it takes forever." In History he couldn't even read one page of the textbook without yawning so much that his eyes watered. And then there were the other kids, but Jacob didn't want to talk about that. + +"Well, do you want to spend the rest of your life flipping burgers?" + +"No!" + +"Too bad. That's what happens to people who don't try in school." Mom finished cleaning a pot and put it on the drying rack. "You don't get any summer vacations as an adult either, so enjoy *that* while it lasts." She wiped her paw on a dish towel and started the garbage disposal. + +"I know." He wished he hadn't made the joke. + +She sighed again. "Work was a *nightmare*. The deadline is next Friday, but the three teams involved are acting like they've never even talked to each other. There's not even a *design *yet. And, as always, I'm going to be the one blamed when everything falls apart." + +"Oh. That sounds bad." Jacob wished he was older or smarter so he would know what to say. Instead he said, "I'm going to put my bookbag in my room. I'm also going to change clothes." + +"Mhm." + +Jacob went to his room and closed the door behind him, which wasn't suspicious because he said he was going to change clothes. Keeping his ears up in case Mom came in, he unzipped his bookbag as quiet as he could. He took his gear out one piece at a time and stuffed it into its usual hiding spot in the closet, under the thick blankets he wasn't using because it was summer. Then the only things left in his bookbag were his water bottle and clipboard. The front page of the clipboard said "Petition to Stop Global Warming" in rainbow WordArt letters at the top, and the rest of the page was covered in signatures Jacob had traced off the Internet in all different colored pens. + +Mom was quiet at dinner that night. Maybe she was still thinking about her job, or maybe she was worried about money again. Or maybe it was because it was Tuesday, which used to be family movie night. + +She finally said something after Jacob finished his peas. "Do you ever hang out with the other kids in the neighborhood? I see them playing outside all the time." + +Jacob frowned. "Uh, not really. I don't know any of them." + +"Maybe you should *get* to know them." + +"Yeah, maybe." Actually, Jacob had tried once. He had gone up to say hi and ask what game they were playing, but they figured out he was weird right away and from then on they always made fun of him. He didn't know what he had done wrong, so he couldn't tell Mom about it. + +"I just think it would be good for you to spend time around kids your own age. You need to learn how to get along with people if you want to get a good job." + +"Yeah." + +She got quiet again and Jacob went back to eating. Then a couple minutes later she said, "Is there anything you want to tell me?" + +His stomach flip-flopped like it had when he saw her car in the driveway, and he had to force his footpaw not to thump. "No." + +"Nothing hurts worse than being lied to, Jacob. You know that, right?" + +"I know." + +"Your dad and I separated because he couldn't stop lying, so it's really important to me that people be honest." + +"I'm not lying." + +"You're *sure* there's nothing you want to tell me?" + +"I'm totally sure." + +Mom looked Jacob in the eyes for a long time. Jacob wanted to squirm out of his fur. "Fine." She stood up and picked up all the dishes even though clearing the table was Jacob's job. "You have an hour of computer time before bed." + +Even though he wasn't in trouble, Jacob still felt bad and his stomach was still upset when he got in the spinny chair in front of the computer. Mom put in her password for him, then sat on the loveseat so she could see the screen over Jacob's shoulder. She always sat there since the stuff with Dad. + +--- + +When Mom left for work the next day, Jacob waited an extra twenty minutes just to be safe. Then he got all his gear back in his bookbag, filled up his water bottle, and crossed the creek to Park Drive. Jacob always took Park Drive. There were never cars on it, it was shady because it had lots of trees, and it went right to where all the rich people houses were. + +The day before, Jacob had found a big pretty one on Drexel Avenue. He liked it because it was surrounded with tall hedges like the hedge maze from *The Shining*. The porch was made out of brick and had big columns around it like a Greek temple, and the front door had a knocker shaped like a gargoyle holding a ring in its mouth. If Jacob ever bought a house, he would definitely put columns and gargoyles on it. *Black* columns, and the gargoyles would have glowing red eyes. And instead of Greek columns they would be Ancient Egyptian and covered in hieroglyphics. The only thing he didn't like about the Drexel house was that it was painted white, which was boring and also blinded him because the sun was so bright outside. + +When he got there, he made sure there were still no cars out front and that there were still bits of mail sticking out of the filled-up mailbox. That was the green light that meant "go" because it meant the family was away. A lot of the rich people were away because they traveled in summer. Either that or the kids were at camp during the day while the moms and dads were at work. Mom had talked about sending Jacob to summer camp too, but luckily she couldn't afford it. + +As Jacob walked up the long driveway, he held his clipboard to make it look like he was going up to ask for signatures. He hopped up the steps to the porch, stretched his arm up high to reach the knocker, and hit it against the door four times. He counted to fifty. Then he rang the doorbell and counted to fifty again. + +No one answered. That was good, but it also made Jacob nervous because now it was time for the scary part. Jacob looked around to make sure no one was watching, then hopped off the porch and ran around to the other side of the house. He was terrified he would hear police sirens, but as usual nothing happened. Behind the house, he found a huge backyard that had two big climbing trees, a pool, a hammock, and a grill. If he were this rich, he wouldn't even *want* to go away on vacation. + +The back porch had a sliding door that looked into the kitchen. Jacob pressed his paws and muzzle against the glass to triple-check that the house was empty, then pulled the handle. It was locked, so he moved down the wall until he found a kid's bedroom window. That one opened because kids were always bad at locking their windows. Jacob jumped up and climbed inside. On the way in, he almost stepped on the kid's bed on accident and had to stretch his legs over it so he wouldn't put his dirty footpaws on it. + +The room was definitely a boys room, because it was full of space stuff. The blankets had planets and rockets on them, the walls were painted dark purple, and there were glow-in-the-dark stars everywhere. It was also definitely a rich kid's room. The boy who lived there had his own TV, a PlayStation 3, *and *his own computer. He probably got to go on the Internet all the time without even needing his parents' permission. + +Jacob tip-toed to the front door and wiped his footpaws. Then he cracked his knuckles and got to work. As always, he started by going around and closing all the blinds. Besides the boy's bedroom, the first floor had a living room, a kitchen, and a dining room, all of which Jacob made dark. Mostly, anyway. You could never make a house all the way dark when it was daytime. + +There was also a bathroom with a mirror that took up the whole wall. Mirrors freaked Jacob out. He was weird-looking and, plus, he always had nightmares about his reflection moving on its own and making creepy faces at him. He went past the bathroom door as quick as he could. + +Upstairs was the parents' room. Jacob could tell the parents in this house were still together because there were both guy and girl clothes, including girl jewelry. The mom's nightstand had some dangling earrings that reminded Jacob of the ones David wore (David was the head vampire in *The Lost Boys*), and also the ones people on the goth forum wore. Jacob wished he could get his ears pierced. Maybe Dad would let him do it the next time he saw him. + +Once all the blinds were closed, Jacob went to the living room, put his bookbag down, and pulled out his gear one piece at a time. First was the EMF meter. Next was the nightvision camera. Last was the EVP recorder. Jacob started shaking, but it was because he was excited, not because he was afraid. + +Maybe he was a *little *afraid. But that didn't mean he was a wuss. Someone on the ghost hunting forum had said, "If you're not afraid, you're not approaching the spirits with respect," so actually it was *good* that he was afraid. + +As he picked up the EVP recorder, he had to breathe slow and force himself to relax because he knew the second he pressed Start he would be inviting ghosts to manifest and talk. His thumb hovered over the button for a long time while his blood went hot and cold, but somehow he pressed it. The red light went on. + +His voice was shaky as he asked the first question you were supposed to ask. "Is there anyone here who wishes to communicate?" + +The tape recorded for thirty seconds, then automatically rewound itself and played what it recorded. Jacob didn't hear any voices, so he tried again. + +"My name is Jacob. I'm eleven years old and I'm a ghost hunter. Is there anyone in this house? Or any...*thing*?" + +He waited another thirty seconds for an answer but there was still nothing. The EVPs he listened to online were really scary, so even though his mission was to find evidence he was always kind of relieved when he didn't have to hear one while all alone in a dark house. + +Everything was normal on the EMF meter too, but Jacob still felt like he was on a roller coaster clickety-clacking to the top of the first hill. The Drexel house was way too big, old, and fancy to *not *be haunted. Even though Jacob had been just as sure about the other six houses, he had had a good feeling about this one ever since he saw the hedges outside. + +It was time for the walkaround. Jacob clipped the EVP recorder to his jeans pocket, then stood up with the EMF meter in one paw and the nightvision camera in the other. As he went from room to room, he tensed up every time he had to peek around a corner, then relaxed again when he didn't see anything. There was nothing interesting in the kitchen or the dining room, but the boy's room was cool because the glow-in-the-dark stars were all lit up and blindingly white on the nightvision camera. Jacob knew it wasn't really dark enough for nightvision to work right, but the old camcorder from the closet made everything too dark. Besides, all real ghost hunters used nightvision cameras. + +When Jacob got to the bathroom door, his heart started pounding like the bass drum in band class. Even though he tried not to, he started imagining creepy stuff: the ghost lady from *The Shining *behind the shower curtain, the alien from *Dreamcatcher *jumping out of the toilet, or his reflection turning evil with fangs and glowing red eyes. + +Jacob stared at the ground as he walked in and only looked up at the mirror once he was standing on the bathroom rug. His reflection *did* have red eyes, but only the red eyeshine all rabbits had, like how cats had a green one. Otherwise it was just Jacob's normal reflection, which was weird and kind of ugly but not *supernatural*. + +Then Jacob checked the nightvision camera and what he saw made him jump straight in the air. In the mirror, there was something shaped like a person glowing white - a *full-body apparition*, which was the rarest and most powerful type of ghost sighting. Jacob gasped, backed away until he almost tripped backwards into the bathtub, and dug his claws into the shower curtain. He couldn't see the ghost with his naked eyes, so he held up the camera again but now he didn't see anything. He lifted his ears higher and straighter than they'd ever gone before, but he didn't hear anything either. + +"H-hello?" He sounded like he was in a car on a bumpy road. + +Jacob's heart pounded so hard he was sure the EVP recorder would hear it, and it felt like it took hours for the tape to record and play back. When it finally did, there still weren't any voices, just staticky background noise. + +Once he was calm enough to move, Jacob pulled himself away from the wall and looked at the mirror. He only saw his reflection again, and it was the same as before other than the eyes being wide and scared-looking. Then he checked the nightvision camera. + +The glowing person was still there. He started to freak out again, but after a second he finally realized it just was his own shirt and gray fur blowing up, just like the glow-in-the-dark stars had. + +Jacob laughed. "Okay, okay. No big deal. It's just me." He kept his eyes on the nightvision camera and turned the lights on to make the glow go away, then turned the lights off again to make the glow come back. + +The glow didn't come back. + +Confused, he flipped the lights on and off, on and off, but no matter how many times he tried it *still* didn't come back. + +Suddenly, Jacob felt terrified. He ran around the whole house opening all the blinds and turning on all the lights and then sat down hard on the living room couch, breathing heavy. Once he caught his breath, he replayed the footage. It was all there like Jacob remembered it: he was glowing in the mirror and then he wasn't, even with the lights off like they were the first time. What *was *that? It had to have been a camera glitch, right? The online reviews *had *said the camera was crappy - he only got it because he couldn't afford better stuff. + +Jacob paused on the part with the glow. For some weird reason it reminded him of the episode of *The Simpsons* where Mr. Burns turned into an alien. He imagined the glowing rabbit on the recording saying "I bring you love" in a high-pitched voice and felt like laughing. When he thought of it that way, it wasn't scary at all. + +He wished Dad was here with him. He was the one who had shown Jacob both *The Simpsons *and *Ghost Hunters*. And, before the divorce, Dad had promised he would buy Jacob ghost hunting gear for his birthday and take him to an old abandoned hospital to try it out. But when October 1st came around, Mom just got Jacob a chemistry set and a dumb remote control truck. She said ghost hunting was "morbid" and told him to stop thinking about it. + +But it wasn't fair for Mom to change the rules like that. Dad had *promised*. So Jacob had spent eight whole months saving up his allowance, bought an Amazon gift card from the Kroger's, and ordered the gear himself. At first it looked like the gear would arrive on a day Mom was home, which would have been horrible. Mom would have taken it away *and *figured out that he knew how to get on the computer without her. That whole week, he worried about the delivery date so much that his stomach hurt, and he couldn't even eat the Kraft macaroni and cheese Mom made even though it was his favorite food. + +Luckily, the gear got delivered at noon on a weekday, and he'd spent the two weeks since then investigating houses like a real ghost hunter. If Mom ever said ghost hunting was "morbid" again, Jacob would play her the footage he got today. That would show her. It didn't even matter if it wasn't a real ghost - she wouldn't know the difference. + +Plus, he was having fun. Going from house to house like this felt like Halloween. + +The Drexel house was all lit up and normal now and Jacob had evidence to take home and analyze, so he was good to go. He packed up his stuff, went to the front door, and stood on tippy-toes to look through the peephole. When he saw the coast was clear, he locked the front door and left the house. It was already so hot outside that Jacob could hear Mom and Dad in his head telling him he should be wearing shorts. But he hated showing his legs, so he was wearing jeans like always. + +Once he got back on the sidewalk, he put on his headphones and played an album called *Clear Hearts Grey Flowers* by a band called Jack Off Jill. He had downloaded it off LimeWire because someone on the goth forum said it was their favorite album ever. Even though Jack Off Jill had a girl singer who always sang about girly stuff, she could also scream like Marilyn Manson and the guitars sounded like they were from a metal band. + +Jacob just wished the band had a different name. Kids at school would say it was gay, and Mom *definitely *wouldn't like it, so before he put it on his iPod he had to change all the filenames so the album looked like *The Sound of Madness *by Shinedown. Because of that, Jacob didn't know what the songs were actually called, but he liked the second one on the album. It went: + +*I'm not afraid of looking ugly* +*I couldn't care what they say* +*I'm not afraid of happy endings* +*I'm just afraid my life won't work that way* +*I'm not afraid of forgiveness, I'll absolve you everything* +*I'm not afraid of lying, but I am afraid of dying* + +When the time he got to Park Drive he was on the second-to-last song, where they said the name of the album. But he got snapped out of the music when someone said, "Do you know where you're going?" + +Jacob yanked off his headphones and looked around until he saw an old mouse lady in the grass off the trail. She wore an old-timey dress covered in bright pink and blue flowers and had big pink glasses on. She was standing under a tree, and the shadows of the branches looked kind of weird because they blended in with the flowers on her dress. + +"I'm getting signatures for a petition," he said. + +She just looked at him without saying anything. It had taken Jacob a second to answer her, and he hoped that hadn't made her suspicious. Since kids weren't supposed to be out alone, this lady might call Mom or the police. + +He opened his bookbag, took out his clipboard, and walked up to her to show it as proof. "Do you want to sign it? It's to stop global warming. I have pens, too." + +She didn't even look at it. "You shouldn't be out here, you know. It'll be dark soon." + +"Huh? Are you sure? It's only like 12 p.m." + +She nodded. "It gets dark earlier and earlier every year." + +"You mean *hot*, right? That's global warming." + +The woman just looked at him again and Jacob realized the old mouse was like Grandma. Her brain wasn't working right. + +"I need to get back home," he said. + +"Do you know where you're going? Do you know?" she asked. + +Jacob turned and ran. He didn't know why he ran, he just did it. He ran back down Park Drive and when he got back to his house he saw the kids playing sports on the street again. A couple of them looked up at him but luckily they didn't come up to him or say anything and Jacob got back inside. + +"Whew!" he said. He was safe and in the air conditioning again. The only things he had to worry about now were Mom coming home early or that old lady calling the police. Hopefully she had forgotten about him already. + +Jacob locked the door, put his gear away, and sat down in front of the computer in the living room. After he booted it up, he clicked on Dad's account. Mom would have deleted it except she didn't know how, and she thought Jacob didn't know the password anyway. But Jacob had learned it a whole year earlier. It was the same night he learned the word "morbid." + +--- + +It was family movie night and Dad had picked *The Lost Boys*, which was a scary vampire movie from the 80s. Back then, Jacob had never seen a scary movie before, and this one was rated R which meant they could show anything they wanted. + +"How scary is* *it?" Jacob asked. + +"Why? Are you chicken?" Dad asked. + +"No way!" + +"Bawk-bawk-bawk! I'm Jacob and I'm a chicken! Bawk-bawk-bawk!" + +Jacob had to force himself not to laugh at Dad's chicken noises as he said, "I'm not chicken! I'm just asking because I'm *curious*!" + +That was a lie though. Jacob was so afraid of just the *boxes* of scary movies that he always had to run past the horror shelves at Blockbuster. The *Fright Night* box had a big evil cloud on it, H-E-double-hockey-sticks-raiser had a guy with needles sticking out of his head, and *Candyman* had a *bee *crawling into someone's *eye*. Those pictures felt evil, like he shouldn't be allowed to look at them. If those were just the *boxes* he didn't even want to imagine what was in the actual movies. + +"Are we sure about this, Christopher?" Mom asked. She always called Dad "Christopher" when she was getting mad. + +"Oh come on, it's just a cheesy 80s movie." + +Jacob spoke up before they could start fighting. "What does 'cheesy' mean?" + +"Old and silly," Dad said. + +"Just like your dad," Mom said. Then she sighed. "Jacob, just tell us if you want to turn the movie off at any point and we'll watch *Aladdin* instead. Okay?" + +Jacob rolled his eyes. "I don't want to watch *Aladdin*. I want to watch *The Lost Boys*." Even though there were butterflies bouncing around in his stomach, there was no way he was chickening out now. He sat down on his spot on the couch and crossed his arms. + +"The prince has spoken," Dad said. + +"Alright," Mom said. "But I get veto power too." + +"Sure," Dad said, and put in the DVD. + +Jacob's entire body tensed up when the movie started. While the names came up on the screen, a bunch of kids sang a creepy song and Jacob imagined the kids had white hair and glowing red eyes like the cover of *Village of the Darned*. He had to dig his claws into the couch cushions because he kept thinking the movie was going to show the creepy kids. + +After the song was finally over, some stuff happened at a carnival, and then the camera started flying around in the sky. + +"What's happening?" Jacob asked. + +"The movie just started, Jacob," Mom said. + +"But why is it up in the sky?" + +"The camera is from the vampire's perspective," Dad said. "We're seeing what they see." + +Jacob was shocked. As he wondered whether the movie was going to actually show the vampires, the vampires/the camera flew at a police officer and *killed him*. + +Then there were two kids named Michael and Sam, who were moving to California. Michael met a girl with a super cool name - Star. Jacob would totally change his name to "Star" when he grew up, except for the fact that it was a girl's name. + +"Her parents must have been hippies," Dad said. + +"Imagine trying to get a job with a name like that," Mom said. + +Maybe Star wasn't a good name after all. + +Then *Michael turned into a vampire*. Or he started to, anyway, and if he turned into a full vampire he would have super strength and live forever. Jacob didn't understand the story after that, and there was so much blood and dying that he wanted to put his paws over his eyes. But he didn't want to be a wuss or a chicken, so he just looked down at the entertainment center whenever he got too scared. But when one of the bad vampires got electrocuted in the bathtub, it was so loud that Jacob's footpaw thumped once before he could stop it. + +Mom turned to him right away like she had been waiting for him to do that. "Are you okay, Jacob?" + +"Yeah, Mom." + +"Are you sure? You can tell me." + +"Yeah." + +"Okay..." + +After the movie ended and the names went up on the screen again, Jacob kept seeing stuff from the movie in his head. Michael eating *maggots* and drinking from a *bottle of blood*, vampires *exploding*, people falling off a bridge into clouds... + +"Well, what did you think?" Dad asked. "Pretty cheesy, right?" + +Jacob didn't think before he spoke or even know what he was going to say. It just came out. "I want to be a vampire." + +Mom gasped. "That's so *morbid*! Vampires *murder* people! Do you *want* to murder people?" + +"Hon, he's ten," Dad said. + +Jacob knew he had to say something to stop Mom and Dad from fighting and to distract Mom from being mad at him. "What does 'morbid' mean?" he asked. + +"It means gross things that little boys shouldn't be thinking about," Mom said. "I mean, why would you even *say *that?" + +"I don't know! They look cool, they can fly and not show up in mirrors, and...I don't know!" Jacob felt like squirming out of his fur and he wished he could take it back. + +"It's not a big deal, Jacob. Just go to bed," Dad said. + +"Yeah, and good luck sleeping. He's going to be up all night now. You *did *know it was a school night, didn't you?" Mom said to Dad. + +The fur on the back of Jacob's neck stood up and he ran to the bathroom to brush his teeth. He couldn't hear them fighting while the sink was running, so he would have stayed in there longer except for the mirror. He stared at the floor the whole time and ran away as soon as the toothbrush finished its two-minute timer. + +"What's the big deal?" Dad said. He and Mom were in their room now. "I watched movies like that all the time when I was his age." + +"Well, maybe that's the problem." + +"What does that mean?" + +"You know exactly what it means." + +"No, I don't. Explain it to me." + +"I'm not *blind. *I *saw *the men in that movie. He said he wanted to *be *one of them. Aren't you worried about putting ideas in our son's head?" + +"Sure, hon - you see one man without a shirt and you're permanently warped. That's totally how it works." + +"Well, *I* don't know how it works. Why don't you tell me? Why don't you pull up one of your websites, and-" + +"The *websites*? Come on! It's been *months*!" + +"How would I know that when you use a password?" + +"You want to check my search history whenever you want? Fine. I'll change my password right now." The door to Mom and Dad's room opened and Jacob ducked back into the bathroom. Dad walked to the living room, woke the computer up by moving the mouse, and typed something really loud. "There. I'm changing my password to 'trustworthy.' Okay?" + +"Nice. Passive aggressive as always." + +"Yeah, you would know." + +Jacob went to his room and closed the door. He could still hear his parents' voices even with it closed so he put on his headphones and played the song "Best of You" by Foo Fighters on repeat. + +*Has someone taken your faith?* +*It's real, the pain you feel* +*The life, the love you'd die to heal* +*The hope that starts the broken hearts* +*You trust, you must confess* +*Is someone getting the best* +*The best, the best, the best of you?* + +He kept the covers pulled up over his neck the whole night in case a vampire flew in through the window. Why had he said he wanted to be a vampire, anyway? Vampires were evil. They went to H-E-double-hockey-sticks. And you had to drink blood from a bottle to turn into one, which would be disgusting. + +Two months later, Mom filed for divorce and Dad moved in with his best friend in Cleveland. Jacob regretted saying he wanted to be a vampire and would have given anything to take it back. From then on, he knew to keep stuff like that secret. + +--- + +Jacob remembered that night every time he typed in "trustworthy," but once he logged in he stopped thinking about it. There was just too much cool stuff to see online. + +First, he tried searching Google for what kind of ghost he had seen at the haunted house that day. But the only kind of glowing ghosts he found were "orbs," and those were tiny specks, so he gave up searching. + +Instead he caught up on the forums, starting with the goth forum. The fashion board was at the top, and almost every day people would post pictures of themselves in all kinds of mesh and straps and spikes, like a vampire movie in real life. Boys *and *girls wore makeup and claw polish, and sometimes Jacob couldn't even tell which was which. Jacob liked the idea of going to school without anyone being able to tell he was a boy. No one would be able to make fun of him for being a wuss and not knowing about sports. + +On the music board, there was a thread arguing about whether Marilyn Manson counted as goth. Jacob loved goth stuff and loved Marilyn Manson so he was on the side of Marilyn Manson being goth and he got angry every time he saw someone flame a Marilyn Manson fan. + +"Real goth music is ethereal and Romantic (as in the art movement, not poppy love songs). What goth is *not*, is some rich famous person screaming about how rich famous people are full of shit as if we don't all already know that." + +"His songs are a lot deeper than they seem, especially once you've absorbed his entire discography. All his lyrics build on each other and faithful listeners are rewarded." + +Jacob liked Marilyn Manson's lyrics even though he usually didn't understand them. They *felt *"ethereal and Romantic" to him. Jacob would just have to keep being a faithful listener and maybe he would understand it all eventually. + +He went on the ghost hunting forum next. As always, it was full of threads like "Is my house haunted?" or "I found this box at an antique store - is it cursed?" All of them got locked by a moderator because the forum had a rule that people had to investigate stuff for themselves first. There was also a thread for telling scary stories, and a thread for sharing scary pictures. + +One of the scary pictures was a guy in a creepy mask standing over someone's bed at night and looking down at the camera. As Jacob looked at that picture, he felt like it was burning into his brain. He knew it would keep him awake that night, so he didn't know why he kept looking at it other than that he wanted to know what it was. Then he pictured the guy in the mask standing right behind him, and that freaked him out so much that he shut the computer down and spent the rest of the day playing Xbox. + +That night, Mom had her friend Alexis over after dinner. They always talked about boring stuff and Jacob hated the sour smell of their red wine, so Jacob went to bed early and watched a movie called *Drag Me to Hell *on his iPod under the covers (he had changed the filename to "Lilo and Stitch"). He clicked one headphone around his ear but left the other one off so he could hear if Mom was coming. Because of that, he got distracted from the movie when Mom and Alexis started talking about Dad. + +"Girl, when are you going to start dating again?" Alexis asked. + +"Who has time? Between Jacob and work, I barely even have time for girls night anymore." + +Jacob thought about how one day *he* would have a kid, be stressed all the time, and never be able to do anything fun. While he was thinking about that, he missed a big jumpscare in the movie and had to go back. + +"You're definitely over Chris, though?" + +"Definitely." + +Alexis sighed. "I always thought Chris was such a *man*. He was so *normal*, you know? And I used to hang out with people in the OU GSA, so I can usually tell. With Chris, though, I *never* would have guessed he was a-" + +"Shh. Jacob can hear us." + +"Oh right, sorry. But you're over it?" + +"I'm over *him*. I'm not over *it*. What he did doesn't even matter - it matters that he lied about it." + +"I hear that." + +Jacob gave up on the movie and put both headphones on to fall asleep to Nine Inch Nails - *With Teeth *as he tried not to think about the guy in the creepy mask. + +--- + +Elm Avenue made Jacob think of *Nightmare on Elm Street*. He knew it was another rich people area because it had fancy metal lampposts instead of regular streetlights and because there was a tennis court. The house he wanted to investigate there was made of stone like a medieval castle, with a stone arch over the front door. This one was easy to get into because there was a key under the welcome mat. + +The living room had wood floors that creaked when Jacob walked on them, a huge couch covered with a big blue blanket, and a leather massage chair. Jacob wanted to try the massage chair out, but that felt wrong. They would never do that on *Ghost Hunters*. Also, he would leave gray fur on it which might let the police find him. + +He went from room to room closing the blinds like normal, but this time he also had to unplug night lights in four different kids' rooms. The last one was a girl's room. The walls were painted pink, the covers on the bed were pink, and all the toys on the floor were pink, too. There was an Easy-Bake Oven, a dollhouse that opened on hinges, and two dolls sitting in a rolly princess carriage. + +Jacob wrinkled his nose. "Gross." Why did girls have to have everything in pink just because they were girls? If he was a girl, he'd paint his room black. He'd wear all black too, like the girls from *The Craft*, or the girls on the goth forum. A lot of the goth girls picked their own names too, and he'd pick something like Raven or Lilith, definitely not something girly like Ashley or Megan like this girl was probably called. He closed the pink curtains of the girl's room and the pink all turned dark. Good. + +The parents' room had bras hanging in the bathroom and nothing but dresses and other girls' clothes in the closet. Jacob thought at first that the kids only lived with a mom like he did, but then he saw there were two nightstands that both had girl stuff on them. Maybe the mom was just rich enough to have two of everything. + +Jacob went back to the living room and was about to get out his gear when he noticed he'd missed a door next to the refrigerator. When he opened it, all his fur stood up and his blood got cold. There were concrete stairs going down to a basement that was pitch black and smelled like a cave. He was sure something was down there and he felt like it was going to run up the stairs at him at any second. Jacob shut the door and locked it. + +He decided he would investigate the basement last and tried not to think about it when he turned on the EVP recorder. + +"Is there anyone there who wishes to communicate?" + +No one answered. + +"My name is Jacob. I'm a sixth-grader. I mean, I will be when school starts. What's your name?" + +There was still nothing, so he started the walkaround. When he got to the mom's room, the EMF meter jumped up for a second and he thumped his footpaw. The ghost hunter forum said EMF fluctuations could be from bad wiring or something, but Jacob was *sure* it was something supernatural this time. Before he tried talking to the ghost, he backed into the corner so he could see the closet and bathroom in case anything appeared in there. + +"Hello? Hello?" + +No one answered, and the EMF meter went back to normal. + +"Damn." That meant there was nowhere left to go but the basement. Jacob wanted to leave and go back to his house, but he knew he had to be brave. It was just like watching a scary movie - it might make you jump and you might not be able to sleep for a few nights, but eventually you could remember it without getting scared and it would always be a cool thing to think about. + +Jacob went to the kitchen and stood in front of the basement door. Maybe the guy in the creepy mask was on the other side, waiting for the door to open so he could jump on top of Jacob and rip him to pieces. He thought about taking one of the big knives from the kitchen counter, but then he wouldn't be able to hold his gear. Besides, knives didn't work on ghosts. + +"Okay. Okay. Just relax. There's nothing there. Just open the door." + +He unlocked the door with a click that sounded really loud, then slowly turned the handle. When the door was half-cracked, it reminded him of the cover of one of Dad's *Goosebumps* books called *Stay Out of the Basement*, the one that showed the hand of a plant monster reaching out of a door. It didn't show the rest of the monster - just the hand, which was green and had leaves growing out of it. As soon as he pictured that, he threw the door open the rest of the way rather than waiting for something to come out. He pointed the nightvision camera down the stairs and was relieved to see there was nothing there. + +Jacob went a few steps down and turned his nightvision camera to look under the railing at the rest of the basement. There was a futuristic washer and dryer with circle-shaped doors like portholes on a submarine, a bunch of cardboard boxes, and a exercise machine. The exercise machine must have belonged to the dad before he left. + +Or maybe he died. Maybe the dad was the ghost haunting the house. + +When Jacob got to the bottom of the stairs, the concrete floor felt cold under his footpaws. Actually the entire basement felt cold, which was another sign of ghosts. He wished he had one of those EMF meters with a thermometer on it, but those had been too expensive. + +"Is there anyone here?" he asked. It felt like the basement got even colder while he waited and he started shivering even though he was wearing jeans. The EVP didn't say anything but Jacob *felt* something there, and people on the ghost hunting forum always said "trust your feelings." + +He looked at the exercise machine, the one that belonged to the dead dad, and imagined telling Dad that he had investigated a real haunted house. Dad could get him on TV to show his evidence and they would be famous. Even though Jacob wanted to stay in the corner, thinking about being on TV got him to start walking further into the basement. He pointed his nightvision camera straight ahead of him but also pointed it at the ground every couple seconds to make sure he wouldn't trip on anything. Every time he brought it up again he was sure he would see a demon face on the screen. There was a foam floor under the exercise machine like in a little kid's play area, which was lucky because his footpaws were starting to freeze. + +"I want to talk to you," he said. His voice was quiet and he was surprised by how serious he sounded. "What's your name? How old are you? How did you die? What's it like to be dead?" + +The basement was so quiet that Jacob could hear the tape recorder hiss. While he waited, he turned around in circles to make sure nothing was coming at him from behind. On the plus side, the cave smell was going away. Now it smelled like the lawn after it got mowed. + +When the EVP played back, it was a *voice*. "When...plar...arm...hit." It was crystal clear like someone was standing right next to the microphone, only it kept breaking up like the radio when Mom drove through a tunnel. + +"I couldn't hear you. Please, please, *please* try again. I want to talk to you." He held his breath while the tape recorded again. + +"r...wi...and...rem...ck." + +Jacob could almost hear where the spaces between the words went. The voice was so clear that he was *sure *he could figure out what it was saying, so instead of asking more questions he rewound the tape and replayed it three times. + +"You're wi...stand...m...st." + +"...num...-velop...amb...row..." + +"t-...a-...em..." + +"Come on," Jacob said, his voice sounding small. He remembered the person on the goth forum saying *faithful listeners are rewarded *and played the tape again. He got *so close *to understanding the words, but every time he replayed the tape it made less and less sense. After playing it five more times, he didn't even hear the words anymore - it just sounded like static. And after he played it ten more times, even the static sounded like it was getting quieter and emptier. + +The EMF meter was back to normal, and the basement felt warmer. The ghost was gone, and Jacob had spent the whole time trying to understand the one answer he got instead of asking more questions. He sank down onto the exercise machine and put his face in his paws for a few minutes. Then he climbed out of the basement without looking back. + +As he sat in the living room putting his gear back in his bookbag, he started feeling like all of this was stupid. Why was he even here? He could get arrested for breaking in, or expelled from school, or Mom might kick him out of the house. Was some dumb voice on a tape worth it if he had to spend the rest of his life flipping burgers? + +Suddenly the big blue blanket on the couch moved and Jacob almost screamed. He was sure it was a ghost at first, but then a dog nose poked out between the blanket and a pillow that was all wet with drool. It wasn't a ghost, it was a living person who had been sleeping on the couch *the whole time*. + +Jacob ran* *to the front door, threw it open, and ran away without even closing it behind him. He turned down street after street to shake off the police and get as far away from Elm Avenue as he possibly could. By the time he got to Park Drive, his legs were shaking and it hurt to breathe. He found a big tree, dumped his bookbag in the grass next to it, and practically fell over when he sat down. + +That was a close one. What would have happened if that guy had woken up and heard Jacob talking? Jacob played it in his head. The guy would have gone to see who was there, and since he lived in a haunted house he probably would have thought Jacob was one of the ghosts. He and Jacob would have seen each other, freaked out, and both run away at the same time. + +It was a funny idea and Jacob felt like laughing, but he starting crying instead. He didn't know why, and was completely surprised when it started. Tears started gushing out and he started making squeaky whiny sounds, so he pulled his knees up to his chest and buried his muzzle in them to hide his face. If any kid from school saw him, he'd get made fun of forever. + +Why was this happening? He wasn't even thinking about anything sad. Mostly he felt like he was in a booby trap with walls closing in on him, like that room with spiky walls in the Shadow Temple from *Ocarina of Time*. + +It took ten minutes for the crying to finally stop. As he pulled on his bookbag another sob tried to come out like a frog jumping out of his stomach and he had to swallow to keep it down. Luckily, no one had walked by the whole time. + +Jacob scrolled through his iPod but didn't feel like listening to anything he had on it, so even though he kept his headphones on he didn't listen to anything the whole way back to his house. The normal kids were playing sports on his street again, and Jacob cut through the grass to avoid them so they wouldn't see the dried tears on his muzzle. That just got their attention more though, and some of them yelled something at him that he didn't understand. That reminded him of the EVP recording, which for some reason made him want to start crying all over again. + +When he got inside, he was exhausted. His bedroom felt like it was a million miles away from the front door, and when he got there he didn't even have the energy to take the gear out of his bookbag. He just got under the covers with all his clothes on, closed his eyes, and fell asleep right away. + +--- + +When Jacob woke up it was dark, and he didn't know where he was for a minute. His bedroom reminded him of all the other bedrooms he had been in over the last two weeks even though all his stuff was there, and he stared at the wall for a long time trying to make it feel normal again. + +Suddenly, his stomach seized up and he hacked up a sour wad of phlegm. He coughed it into his paw and wiped it off on his shirt before he got a good look at it (he didn't even *want* to look at it), but it seemed weirdly dark. The sour taste stayed stuck in his mouth, so he went to the kitchen, poured a glass of water, and drank it all in one gulp. The microwave clock said 11:06. + +"Finally awake, huh?" Mom asked from behind him. + +Jacob turned and saw her sitting at the table with a bottle of red wine and a glass in front of her. Now that the taste was out of his mouth, he could smell the gross vinegar from here. He could also tell she had had a couple glasses already because her eyes were droopy. + +"Yeah. I was really tired when I got home today." + +"Uh-huh." She sipped her wine. "Where do you go while I'm at work, Jacob?" + +How did she know? "What do you mean? I'm getting signatures for my petition." + +Mom pulled held up a clipboard - *his *clipboard. "It's been a week and you haven't gotten any more signatures than the fake ones you put on it when you started." + +Jacob's eyes widened. "Mom, that's not true, I-" + +"I'm not even going to ask about the camera and that other junk in your backpack. I don't want to know." + +He scrambled to think. "It's thermometers and CO2 detectors to show people how global warming is-" Suddenly his stomach cramped up again and he couldn't keep talking. + +"Please don't lie to me. What's going on with you, Jacob? You used to tell me everything." + +"I'm not lying!" + +"Is this because you wanted to live with your dad instead of me?" + +How did she know *that*? He never told her that, would never tell her that in a million years. + +"That hurts me, but it doesn't matter." She took another sip of wine. "Hurt me if you want. All that matters is that we're able to trust each other, okay?" + +"You *can* trust me!" + +She looked at Jacob for a long time and then sighed. "Nevermind. It's just your mom feeling sad for no reason again. Go to bed and don't worry about me." + +"But-" + +"Just go to bed." + +He wanted another glass of water to take with him, but instead he just turned and went to his room with his ears down. When he sat down on his bed, Mom's words kept replaying in his head like the words on the EVP. And just like the EVP, they made less and less sense every time. + +He had been worried about Mom finding him out for a long time, but the conversation hadn't gone at all like he thought it would. He thought she would yell or break his gear with a hammer, but she hadn't raised her voice or even told him to stop doing his investigations. So why did he feel so bad? + +--- + +Jacob woke up early the next morning and felt sick. His stomach kept cramping up and shooting lightning pain up and down his body, so he curled up under the covers and hugged a pillow tight. He put on his headphones and played some music to distract himself, but he couldn't focus on it. Somehow, listening to the music made his stomach hurt even more. + +He thought he might need to throw up, so he pulled himself out of bed to go to the bathroom. When he did, it felt like he got stabbed and he had to bend in half and hold onto the wall the whole way. He sat by the toilet for a long time, but nothing came up. Part of him was relieved. It felt like it would hurt really bad to throw up whatever this was. + +Eventually, he felt okay enough to stand up as long as he leaned his elbows on the sink. When he looked up at the mirror, his eyes were foggy and there were dark circles under them. For some reason he wondered what would happen if he turned the lights off and looked at himself on the nightvision camera. Would he be glowing again? + +He showered, brushed his teeth, and got dressed. When he went to the dining room, he smelled fresh cinnamon rolls and there was a place already set for him at the table with a glass of milk. Cinnamon rolls were his favorite breakfast food, and even though his stomach still hurt a little he was excited for the huge amount of frosting Mom always put on his half. + +Right when he thought this, he saw Mom in the kitchen putting the frosting on. She looked at him for a second but didn't say anything and just went back to spreading the frosting. When she was done, she brought the cinnamon rolls out on a plate and set them in the middle of the table. She pulled two of the cinnamon rolls - the ones with tons of frosting - away with a fork and set them down on Jacob's plate. Then she put two of the ones with less frosting onto her plate and sat down. She still wasn't saying anything. + +"Good morning," Jacob said. + +"Yeah." + +"Thanks for making cinnamon rolls!" he said. He made himself sound cheerful to try to make her feel better. + +"I always try my best to take care of you." She took a bite of her cinnamon roll and then took a long sip of coffee. + +Jacob took a bite of his own cinnamon roll, but it didn't make him feel good even though it tasted it amazing. He felt like he was doing something wrong by eating it. + +Mom looked at the time on the microwave clock. "Well, time for another day of work. You know, so I can pay the rent and keep feeding you cinnamon rolls." She stood up. Jacob looked at the clock and saw it was only 8:15. Mom didn't need to leave for another twenty minutes at least. + +She was obviously still mad at him, but she wouldn't say it so he didn't know what to do. "Okay." Suddenly, he got that stabbing feeling again and he folded up until his muzzle almost touched his plate. + +Mom looked back at him. "Are you feeling okay?" + +Jacob nodded. "Yeah. I'm fine." + +"You look sick." + +"I'm fine." + +She sighed. "Alright. Anyway, do whatever you want today." Then she was gone. + +Jacob sat alone with his cooling cinnamon rolls as he listened to her car start up and back out of the driveway. Normally he liked hearing that sound because it meant he had the whole day to himself, but this time it felt like she was still in the room with him. + +He sliced off a piece of cinnamon roll with his fork and brought it to his muzzle. But before he even got it past his big front teeth his stomach jumped and it hurt so much that he yelled. He couldn't keep sitting up, so he rolled off his chair and onto the ground. He stayed on his paws and knees and crawled toward the bathroom without letting his belly touch the carpet, and his face felt hot by the time he got there. For some dumb reason, he had closed the bathroom door and now he had to sit up with burning hot pain to reach the doorknob. As soon as it was open, he felt sicker than he had ever been before and he went to the toilet as quick as he could. + +He barfed. It was boiling hot and it didn't come out easily like the time he had the flu and kept throwing up soup. This throw up was solid and chunky and he had to keep coughing and spitting to get it all out. When it was done, he was shaking and his mouth was burning while the rest of him was somehow cold and sweaty. + +He didn't want to look in the toilet. Just smelling it was bad enough. But he looked anyway and saw the bowl was splattered with black dots, the water was totally black, and there was something floating at the top. It was long, shiny, and all curled up like a dead worm. Jacob realized it was ribbon from a cassette tape. He flushed the toilet and pretended he hadn't just seen that. + +After taking Tums and Pepto-Bismol and using mouthwash, Jacob felt okay. He went to his room, checked his bookbag, and saw that all his gear was still in there even though Mom had seen it. She had even put his petition back even though she knew it was fake. + +It might have been better to stay home in case his stomach got worse again, but he wanted to be outside to get that smell out of his nose. Besides, he shouldn't just stay in the house and goof off when Mom had to work. + +He went to Stanberry Avenue and saw a big rich person house there right away even though his eyes were still watery and blurry from throwing up. There was an iron gate in front of the driveway, but it was wide open so he walked up to the door. No one answered when he knocked, so he walked around to look for an open window or backdoor. He wasn't nervous this time. He didn't really feel anything. + +The Stanberry house's backyard had a pool like the Drexel house except even bigger, and it also had a hot tub. Jacob really wanted to jump in the pool. Even though it wasn't that hot compared to the last few days, he was already totally covered in gross sweat. + +The sliding door on the back porch didn't open, so he moved on to the windows. The third window he tried was unlocked, and it went to a dining room with a long wooden table. Jacob grabbed the windowsill and jumped to climb in, but he didn't make it. Jumping made his stomach feel like it was full of needles and doing front-flips. He rested his head on the wall of the house until it stopped hurting. Then he got a lawn chair, dragged it to the window, and stood on top of it. + +The dining room had a table and chairs made of pretty dark wood, and there were fancy plates and bowls in a glass cabinet. The fancy plates had pink and blue flowers all over them that looked weirdly familiar, but Jacob couldn't remember why. + +Down the street a car honked, and Jacob jumped off the lawn chair on reflex. When he hit the ground he got another excruciating stomach cramp and his legs turned into jelly. He rolled on the grass and saw stars. Somehow, he managed to crawl away, stand up, and get back to the sidewalk where he leaned against a tree to catch his breath. Ghost hunting would have to wait until he felt better - he didn't even know if he had the energy to read forums at this rate. + +What if this was a heart attack? What if his appendix was blowing up? He knew he should go to a doctor, but that wasn't an option. That would mean having to tell Mom, and she would get mad because he had lied about being sick. There had been other times he had gotten sick and hadn't told Mom and Dad because he didn't want to make them worry about money and start fighting again. He had gotten better on his own those times, so he was sure this time would be the same. + +--- + +Jacob was back in the basement of the Elm Avenue house and listening to the EVP tape again. But this time the cassette ribbon was all coming out of the tape - a *bunch* of ribbons, like the hydra from *Hercules*. It was all going into Jacob's body - into his ears, mouth, arms, and stomach. He played the tape over and over again, and every time he hit Play more ribbon rolled into him. + +When the last of it disappeared under his fur, Jacob jumped up and ran his paws over himself to find the marks it had left, but he didn't find anything because it had all been a dream. He stayed sitting up in his bed until he felt calm again. + +He heard Mom pull into the driveway and got out of bed right away. If she saw him in bed at 5 p.m. again, she would definitely know he was sick, so he went to meet her at the door. "Hi, Mom." + +"Hi, Jacob." She put her purse down on the kitchen counter. "Do anything fun today?" + +"No, not really." + +"Not getting signatures for your petition?" + +"No. I have enough." + +"Uh-huh." Mom pulled a booklet out of her purse and walked to the dining room table. "Sit down for a minute. I want to talk." + +That always made Jacob nervous. "Sure," he said, acting calm. + +Once he sat down Mom said, "I'm sorry for the way I've been acting the last couple days, Jacob. I've been under a lot of stress." + +He pulled at the fur on his arm nervously. "It's okay." + +"No, it's not. I've been dealing with work, with money, with chores, and I've had to do it all on my own now that your father is gone. I haven't had the time or energy to make sure that you're being taken care of this summer." + +"I'm doing fine, Mom. I'm okay just playing Xbox." + +"That's exactly the problem. Playing video games all day will rot your brain, and I'm not even going to bring up whatever it is you've been doing out of the house." + +Jacob stayed quiet. + +"You need to have a social life, get some exercise, and have some kind of structure and discipline. So I've signed you up for Aqua Day Camp." + +Mom put the booklet down on the table and slid it over to Jacob. It had a picture of smiling kids wearing goggles and bathing suits, and Jacob's stomach started to hurt again as he looked at it. + +He frowned. "What's Aqua Day Camp?" + +"It's a place where they'll teach you to swim, let you play games, and make you lunch." + +"Oh. Okay. When is it?" + +"It starts Monday, and then it will be every weekday from 9 a.m. to 4 p.m." + +Jacob's eyes widened in disbelief. "*Every* weekday?" + +"Every weekday for the whole summer." + +Before he could even think about *that*, he had another horrifying thought. "Wait, are they going to make me change and shower in front of everyone?" + +"I don't know. Probably." + +"And wear a bathing suit and no shirt?" + +"Yes. That's how swimming works, Jacob." + +"But I-I-" + +"When you grow up, you can't keep wearing jeans in the middle of summer or wearing a shirt in the pool. I know you're shy, but you'll get over it." + +His ears started ringing. "I can't go." + +"What do you mean, you *can't*?" + +Jacob didn't know how to explain it. Wasn't it obvious? The other kids would see his gross body being bad at swimming and they would make fun of him every day. It was like summer was already over and he had to go back to school. "I can't!" he said again. + +"Too bad. I've already paid for it and they don't do refunds." + +"But how? I thought you didn't have any money." + +"I don't. But it's either pay for this or pay the hospital bill when you get hit by a car running around in the street." + +Jacob buried his face in his paws. He felt like crying again. "How long until it starts?" + +"It starts Monday. I told you that already." + +"But how many days do I have?" + +She laughed. "It must be nice to have no responsibilities and not have to know what day of the week it is. Today is Friday, so you have Saturday and Sunday." + +Only two days? And they were both days when Mom was home? Jacob couldn't talk. His tongue had blown up like a balloon. + +"Sooner or later we all have to do things we don't want to do, Jacob. And it's not like you're going to be changing diapers - you're going to be hanging out in a pool all day. Who wouldn't want to do that?" + +Jacob got his voice back, and now it sounded angry. "Why are you making me do this?" + +"Do you not listen? You need something to do all day." + +"I *do *do things!" + +"You need *healthy, normal *things to do." + +His face got hot and he started shaking. "What did I do? Why do you hate me?" + +Her ears fell back. "I don't hate you, Jacob! Do you have any idea how much I do for you?" + +"You do hate me! And, and, I *did *want to live with Dad!" + +"Jacob!" + +"He wouldn't make me do this!" + +"I don't care what your oh-so-wonderful father would do! You're going!" + +"I'm going to hate it!" His eyes started to fill up with tears, but he blinked fast to stop them from coming out. "I'm going to hate it just like I hate school!" + +"That's up to you and your attitude." + +The pit of his stomach was lighting on fire. Jacob stood up, ripped the booklet in half, and threw the two halves to opposite sides of the room. He didn't even know he was going to do that until he did it. + +"Pick those up." + +"No." + +"Then go to bed. No computer time." + +"Fine. I don't care." He walked past Mom to his room while keeping his eyes down in case he started crying again. He kicked his door shut behind him hard enough to make it slam, then locked it. + +Jacob fell on his knees and black vomit exploded out of his muzzle like Old Faithful. It burned so much that he had to squeeze his eyes shut, and when he could open them again he saw it was full of cassette ribbon all tangled up like spaghetti covered in sauce. + +A bunch of it was still connected to him and stuck down his throat. He realized he couldn't breathe and started panicking. He pulled at the ribbons, but they started breaking so he had to reach far back in his mouth and pull from there. It hurt *so much*, like he was giving himself papercuts from the inside out, and no matter how much he pulled it seemed like there was still more. But then his fingers touched the dangling thing at the back of his throat and that finally made him throw up the rest of it. + +When the last clump of it plopped out, he sat back and gasped for air, and he stared at the ceiling because he didn't want to look at the stuff on the carpet. But even though it was gross and smelled awful, Jacob felt better than he had all day. It seemed like it was all finally out of him. + +He went to his closet and grabbed his gray Ohio State hoodie. It was Dad's, so it was way too big for him, but Jacob used to like wearing it and putting his knees inside it when he sat down. Then some kids at school called it a dress and he hadn't worn it since. He threw it on the ground and watched it get soaked in puke. + +Mom knocked at the door. "Hey. I'm sorry, Jacob. I shouldn't have told you about camp that way. Are you doing okay?" + +Her voice practically made him sick all over again. He didn't say anything. + +"Listen...my mom was really mean to me when I was growing up. I don't want to be mean like her. I'm trying to do what's best for you." + +"Okay," he said. He just wanted her to stop talking. + +"Think about it this way. You're going to make friends and learn skills...one day you're going to look back and be grateful you had this opportunity." She paused for a second. "Do you want dinner, at least?" + +"No." + +"Alright. Well, come out if you change your mind. I'm making your favorite mac and cheese." She stood by the door a little longer and then walked away. + +Jacob sat down on his bed. It felt like spiky walls were closing in again, but he didn't cry this time or really even think about anything. He just dug his claws into his jeans until they started poking his legs. It felt like an hour went by. + +He got out his iPod and put on the movie *Splinter*, which someone on the goth forum said had a really scary monster in it. But Jacob's paws felt too weak to hold the iPod so he just listened to the sound. + +The walls kept getting tighter until he had to stand up and get out of the bed even though he didn't have anything to do. He went and got the kid's dictionary he'd got for English class and flipped to the back. For some reason the back had times tables and other stuff that wasn't words, and one page had a map of America on it. + +Jacob held the map up close to his face so he could see Ohio. Columbus was right in the middle and Cleveland was at the top. They were barely an inch apart. + +Cleveland was where Dad lived now. If Jacob could get up there, he wouldn't have to go to Aqua Day Camp and he could start at a different school where no one knew him. But what if Dad didn't want Jacob to move in, or he tried to send him back to Mom? Jacob looked at the map again. He decided in that case he would keep going north and go to Canada. It was so cold there that no one would want to swim and Jacob could wear whatever he wanted. + +He got his bookbag out before he even realized he had made up his mind. Actually, it didn't even feel like he was making a decision. He just *couldn't* stay. The walls were squeezing him out whether he liked it or not. He stuffed three shirts and three pairs of jeans into his bookbag, then dug out his old Nintendo DS. He didn't play the DS anymore, but he could probably sell it at a pawnshop to pay for a bus ticket and a hotel. + +Something made a weird sound like wind blowing through leaves. Jacob looked at where it had come from and saw the middle of the Ohio State hoodie blowing up like a balloon. He threw the dictionary on top of it and stomped it and it went flat again. It didn't come up again, so Jacob must have squished it, whatever it was. + +He packed everything else he thought he'd need including his library card, a notebook, pencils, and a charger for his iPod. Pretty soon his bookbag was so full that it was practically bursting, but he somehow got it zipped shut. It was heavy, but he could get used to it just like he'd gotten used to lots of other stuff before. + +Mom didn't knock on his door again, and Jacob watched the rest of *Splinter* while he waited for the sun to set. He didn't really focus on the movie and mostly just wanted every character to die and get absorbed into the monster. It was dark when the movie ended, so he opened his window and got ready to climb out, just like he'd climbed *in* so many of them. + +Then something stopped him. For some reason, he was curious about the throw-up he'd left on the carpet. How big a mess would Mom have to clean up? Would she see it and think he was so sick he was dying? Jacob hoped so. + +He bent down to move the hoodie and almost fell over when his heavy bookbag shifted around on his back. But he stayed standing and dragged the hoodie away by the sleeve with the dictionary still on top of it. Underneath, the vomit had dried up and left a big dark stain like the time Alexis knocked over a whole bottle of wine and Mom had to rent a carpet cleaner. But there was no cassette ribbon. + +Jacob looked around the room and wondered whether it had somehow crawled away and hid somewhere even though that didn't make any sense. Maybe he only ever imagined he threw up the ribbon because of the dream he'd had. Either way, it didn't matter. Earlier he'd hoped it would go away on its own, and now it had. + +He climbed out the window and cut through the yard to the sidewalk, sticking to the dark side of the street. He knew he had to go north, so he took his usual route across the creek to Park Drive. There weren't any streetlights there, so it was completely dark other than the fireflies and the light from one of the fancy lampposts every now and then. Jacob had a flashlight somewhere in his bookbag, but it would be too hard to dig it out and re-pack everything. Besides, right now he liked walking in the dark. He felt like a vampire, all alone in the shadows where no one knew where he was. But, unlike a vampire, he didn't have super-strength and his back started to hurt after only twenty minutes. He ignored it and kept going. + +If he got *really *tired, he could stop at one of the parks around town and find a bench to sleep on. Maybe he could go all the way to Eastlawn Cemetery. He remembered Dad always said they had to hold their breaths when they passed by it, but there was no way you had to follow that rule when you weren't in a car, right? Maybe Jacob would sleep right on top of a grave - Mom would definitely call *that* "morbid." + +He wondered whether she had noticed he was gone yet. If she had, she probably didn't care. She was probably grateful that her stressful kid was gone so she could watch TV and drink wine on her own. Or maybe she was completely freaking out. Jacob hoped she was. Maybe then she would let him use the computer or play Xbox whenever he wanted, and let him stay home whenever he really really didn't want to go to school or see Grandma. Come to think of it, he didn't even *care* what Mom thought. + +An owl hooted somewhere, making Jacob jump and almost fall over when his bookbag shifted. Even though there was nothing but grass and trees around, getting startled like that made him feel like there were walls closing in again and he realized anyone or any*thing *could be hiding in the dark. + +He got out his iPod and played "The Fight Song" by Marilyn Manson, which made him feel tough again. + +*And when we were good* +*You just closed your eyes* +*So when we are bad* +*We'll scar your minds* + +Jacob totally understood *these* lyrics and he wished Mom could hear them too. When it got to the "fight" part, he sang along under his breath: + +*Fight! Fight!* +*Fight! Fight!* +*Fight! Fight!* +*Fight! Fight!* + +He decided to go to the mansion museum at Jeffrey Park. It would be easy to get inside it, just like all the other rich people houses were, and it would have huge fancy beds to sleep in. He followed the trail next to Alum Creek until he got to the parking lot, but he didn't cut through. Instead, he got in the bushes and went all the way around so no one would see him. Twigs and grass got all over his fur and he felt bugs crawling on him so he had to keep stopping to brush them off. + +Once he got past the chain in front of the trail, he was officially trespassing. Over the trees Jacob saw the top of the mansion, which was made of red bricks. He got excited at first, but then he saw there were lights on in the windows. The people who ran the museum must have kept it lit up at night to scare off burglars, which meant he couldn't get in there without someone seeing. His heart sank. + +Luckily, he found a pavilion with picnic tables. There was a lamppost near it, but it was far enough away that he could stay hidden. He walked to the pavilion and felt relief when he put his bag down on one of the tables. He was so sweaty that he almost wished he could take his shirt off. + +Jacob lay down on the wooden seat. It was uncomfortable on his back and neck, so he got out a pair of jeans and rolled it up to make a pillow. That was a little better. He closed his eyes and tried not to think about anything, and after a couple minutes he felt like he was starting to fall asleep. Then he started wanting a blanket even though it was warm outside, so he sat up again and dug through his bookbag for more clothes to put over himself. He wished he still had the Ohio State hoodie. + +Out of the corner of his eye, a shadow moved in front of the lamppost. He froze. He didn't want to look because he was afraid it might be the guy in the creepy mask, but he knew he had to in case it was a security guard. He turned toward it while keeping his eyes on the ground, then looked up slowly so he wouldn't get startled if it was scary. + +It was the old mouse lady from a couple days earlier. She was still wearing that dress with pink and blue flowers all over it, and she was looking up at the light where a bunch of moths were flying around. What was she doing here? Was this like the time there was a Silver Alert on Grandma? + +"Um, hey," Jacob said. His voice came out as a whisper so he was pretty sure she didn't hear him. "Hey," he tried again. "Just so you know, I'm not trespassing. The park was open when I got here, but then I got lost for so long that it closed so now I'm stuck inside." She looked like a statue. Her ears didn't even move when he talked. + +Jacob looked down and saw something weird. On the spot where the light from the lamppost made a circle on the ground, the grass was moving around like water. The mouse lady even cast a reflection in it. The upside-down reflection was looking right at him, smiling with teeth the way Mom always made Jacob smile for pictures. It said, "Sta...though...min...pra..." + +Jacob had never screamed before, not even when he watched *The Exorcist, *which was the scariest movie ever made. But now he* *screamed so loud he hurt his own ears and he ran away as fast as he could. He was too afraid to look back or even think about where he was going. He just ran and ran until he couldn't breathe and his footpaws started to hurt every time they hit the ground. + +When he got back to the Alum Creek trail, everything looked different. It was cold out now, the moon was too bright, and the dirt had turned smooth and shiny. When Jacob realized it was made of cassette ribbon, he screamed again and hundreds of owls in the trees took off and also screamed. + +He must have passed out, because the next thing he knew he was laying on the trail where it went behind the Kroger's. It was daytime, and he could see cars driving around in the parking lot on the other side of the fence. Everything looked normal again. + +Jacob's head hurt, his bag was gone, and he must have fallen and scraped his knees at some point because they stung and had dirt and dried blood on them. Whatever had happened at Jeffrey Park, it was over now. Maybe it was all just a bad dream. + +He sighed and hugged himself. Mom had been right about everything. He shouldn't have gotten that stupid ghost hunting junk off Amazon, he shouldn't have listened to evil music, he shouldn't have watched scary movies, he shouldn't have run away. All he wanted was to be back home eating macaroni and cheese in the house Mom paid for him to live in. He should have been grateful and just gone to Aqua Day Camp like a normal kid. + +He got up, brushed himself off, and started walking. Each step was really hard and made his knees and footpaws hurt, but he didn't take any breaks because of how bad he wanted to be home. Mom was going to ask where he had been, but he would be honest and say he ran away. It didn't even matter if she grounded him as long as he could be back in his own bed and have everything go back to the way it was. + +It must have been the afternoon when he got to his street, because the kids were playing sports like always. One of them saw Jacob and pointed, which made all the other kids turn and look at him. He figured they would say something mean again, maybe because he was all sweaty and dirty, and this time he didn't even care. But then some of the kids turned and looked at something else. They were looking back and forth between Jacob and his house. + +Jacob looked too and stared in horror at what he'd done. All the blinds were open, but every window was pitch black. It was all the way dark inside, and Mom's car was in the driveway. diff --git a/src/content/stories/Career Shift.md b/src/content/stories/Career Shift.md new file mode 100644 index 0000000..cd8ec54 --- /dev/null +++ b/src/content/stories/Career Shift.md @@ -0,0 +1,538 @@ +--- +adult: true +description: "Lost? Aimless? Seeking a sense of purpose? Consider dronification today! A short story set in the USS universe created by Cobalt." +title: "Career Shift" +pubDate: "Jun 20 2025" +--- + +*Thanks to the following critters for their help editing this story:* + +- [Chid](https://www.furaffinity.net/user/chidchud) +- Cobalt +- [Lilac](https://www.furaffinity.net/user/misslilac) + +
+ +After 3 years of burrowing through black highways under huge starry skies, Kai knew it was time to leave the Midwest and its ghosts behind. Whatever secret they had hoped was waiting for them in the dark, they would never find it there - only the endless slideshow of fluorescent-buzzing gas stations, yellow streelights through motel curtains, and dusty houses of secret misery. + +Even the misery had grown predictable. *I'm dead and angry and I'm going to throw things.* Log it as a poltergeist. *I'm dead and sad and I'm going to cry until the walls are streaked with black mold.* Log it as a weeping wraith. *I'm dead and lonely and I crave your body, little rabbit.* Leave the house immediately, no matter how tempting its offers, and log it as a hungry ghost. By this point, Kai could practically guess a house's haunting type by the shade of taupe on its living room walls. + +When Kai got on Zoom for their exit interview with Spectrex, they had a bitter speech prepared - *how dare you sneak "some travel may be required" into your job description when you know full well that your ghost hunters will spend at least 100 days a year on the road - *but there was no point. They could only move forward. + +But where? Nothing came to mind, and they spent two weeks burning through their meager savings waiting for an answer to appear. Finally, inspiration struck one night at 2 a.m. after buzzing out a mediocre orgasm. + +The session's decisive image belonged to Kai's favorite OnlyFans model, a slinky lizard who often posted from the balcony of his twenty-third floor waterfront condo. The luxurious backdrop made the $10/month subscription feel slightly more justified, but other than that Kai had never paid it any mind. + +That night, however, they found their bleary eyes wandering past the scaly feet that filled most of the frame and to the jagged skyline and cloud-wrapped mountain beyond. + +*Seattle*. Bound to the west by an ocean, bound to the north by the Canadian border, and densely connected by public transit, Seattle would surely feel small and manageable compared to the infinite plains where Kai had always lived. + +The vision appeared before them fully-formed. They would find an apartment in a walkable queer neighborhood, get a couple queer roommates, and fall into an awkward situationship with one or both of them that would eventually develop into full-fledged romance. They would make actual friends and meet up with them every week for D&D, rock climbing, orgies, or whatever it was that normal people did in their mid-twenties. + +They booked airfare and a week-long hostel stay on the spot. It was only when they awoke the next afternoon that they realized the flaw in their otherwise perfect plan: getting to Seattle would mean having to fly. + +--- + +Kai's footpaw thumped the epoxy flooring, drawing sideways glances from the other passengers in the check-in line. That anxious thumping had been growing more frequent as the departure date approached, and now that Kai was actually at the Columbus airport it was so constant that their shin ached. + +It was the fear of being *trapped *more than anything. If Kai started panicking on take-off, they would be stuck panicking for the next five hours. Their chest tightened like a straitjacket at the thought of being pinned between two other passengers as turbulence tossed the plane from side to side. + +Fortunately, Kai had a plan. After printing their boarding pass and checking their bags, they ducked into the stall of a unisex bathroom and pulled out the two tallboy IPAs they had stashed in their carry-on. + +It was time to regress to their college-age problem drinking. It wasn't ideal, but since their psych wouldn't prescribe them Ativan it was the next best option to calm their lapine limbic system. + +As they drank, pausing between each gulp to let the carbonation settle in their stomach, they realized that the out-of-order stall next to theirs was haunted. It gave off that familiar ghost-scent in waves, something astringent like cut grass. + +At a young age, Kai had been diagnosed with HSC, High Spectral Conductivity - colloquially, they were ghost bait. If they wanted to, they could provoke the spirit into manifesting with just the standard opening question, "Is there anyone there who wishes to communicate?" + +Curiosity tempted them as always. But three years with Spectrex had drained their wonder at the supernatural, traded it for a permanently warped sleeping schedule and candy corn-yellow teeth from lack of dental insurance. + +Suddenly, the temperature plunged. The shadow of a skeletal claw faded into existence beneath the stall divider, unfurled its bony digits, and slithered along the tile floor toward Kai's footpaw. The rabbit moved their legs out of its reach and ignored the manifestation as they drained the rest of their second IPA. + +By the time they reached security, their anxiety had melted into warm fuzz that made their whiskers feel like they were vibrating. It felt so nice that they wondered whether they had gone too far in cutting back their alcohol intake the last few years. + +Even the TSA's vaguely perverted prodding at their footpaws didn't bother them. Sure, it was ridiculous to still do this twenty years after that one guy taped bomb components between his pads, but Kai could deal. They just counted themself lucky they didn't have a sheath. + +At the other end, they reassembled their belt and bag with only a few minor stumbles. After scrutinizing their boarding pass for their gate number, they looked up and were surprised to find a tall, strikingly attractive fox woman in a blue vest smiling down at them. + +"Hi!" she chirped. "I'm Becky, representing Northwest Airlines. I understand this is your first time flying with us?" + +"Yeah?" + +"Let me guess - is it also your first time *ever* flying?" + +"Yeah," they said again. With the vixen's face getting blurrier every second, Kai figured shorter sentences were a safer bet. + +"Aw, that's great! I'm here this morning to talk to you about our incentive package for first-time flyers. The package includes priority boarding, access to our rewards member lounge, and complimentary gummies for promoting wellness and relaxation. I noticed you seemed a *bit* nervous, and I think the gummies will be a big help." + +Before Kai could respond, she produced a small, square-shaped carton and practically shoved it into their paws. The packaging was plain black, with a silver label that read, "Relax-a-cation Gummies. NEW! From FetTech." No further information was printed on it. + +They frowned. "What's in these?" + +"Special tea leaves and herbal remedies. And maybe one or two *secret* ingredients," she added with a wink. + +Kai guessed it was CBD, maybe with some other dubious anxiolytics like lavender or ashwagandha. Becky was gazing at them expectantly with her bright blue eyes, so they shrugged, pulled a circular yellow gummy out of the package, and popped it in their muzzle. It was strangely earthy and bitter, somewhere between matcha and burnt popcorn. + +She flashed a smile. It looked mischievous, but then again foxes just had that look sometimes. "You should feel the effects soon! Now if you'll follow me, I'll show you to the lounge." + +"Hang on. I only have-" Kai pulled out their phone and squinted at the wiggling numbers. "-fifteen minutes until my plane starts boarding." + +"You can spare a minute or two," she laughed with a dismissive wave of her paw. "Even if you don't stay long, you can always load up on free food and drinks for the flight," she added conspiratorially." + +Kai had a well-trained sense for the weird, and this was *weird*. Not weird like a room that contained an unseen presence or a person who was secretly possessed, but weird nonetheless. + +"No thanks," they said. + +"Oh? Why not?" Her tone suggested that she found the refusal absurd. + +"I appreciate all this, but I don't need special treatment. I kind of just want to get to my gate." + +"Oh. I see. Well, you seemed happy enough for special treatment when you accepted our complimentary wellness and relaxation gummy." + +The vulpine's tail drooped and her smile crushed into disappointment, stinging Kai with guilt. She must have been depending on Kai's agreement for a performance rating, they realized sympathetically. + +"Alright, I guess I can come see the lounge," Kai said. + +Becky's tail shot back up and her pointed teeth glittered in a huge smile that made Kai's ears grow warm. "Great! Right this way, please." + +She turned, so quickly that Kai heard her toeclaws scratch the floor, and strode away. The rabbit lurched forward, struggling to match her long-legged pace as she headed for Concourse C. + +"I understand you're flying to Seattle with us today. What brings you there?" + +"I'm moving." + +"Oh, how exciting! Seattle is a *beautiful *city - I'm sure you'll love it. Are you moving there for work?" + +"Not exactly. I don't have a job lined up just yet." + +"Any family there?" + +Kai nervously scratched one of their long ears. "No, none." + +"Friends? *Anyone* expecting you at the other end?" + +"No." They paused. "I need a new start. I don't know what I'm looking for, but hopefully I'll know it when I see it." + +That was more personal than Kai had intended to share, but thankfully Becky only grinned. "Sounds like you've come to the right place." + +Near the C gates, the crowd of other travelers grew so dense that Kai struggled to keep after Becky, occasionally losing sight of all but her billowy tail fluff. It didn't help that Kai now felt like they were walking in a bouncy castle. Even accounting for their decreased tolerance, the alcohol was hitting much harder than they would have expected. + +Overhead, a blizzard of shed fur hung in the air, catching the low morning sun as it drifted toward the airport's gargantuan air purifiers. Kai paused as the shimmering murmurations held their attention. + +"Still following?" Becky asked. + +They pulled their eyes away and back to the fox. "Yeah." + +"Great!" + +As the rabbit's ears grew warm again at her earnest approval, they realized their earlier suspicion had melted away. In fact, they were glad to have Becky leading them. Without her, they would be overwhelmed by the skitter of bags, the beeping of golf carts, and the robotic voices warning of the endings of moving walkways. *With* her, Kai only had to follow the wave of her tail. + +The rising planes out the big windows made their best effort to rekindle Kai's anxiety, but alcohol made the rabbit's brain too wet to light. They laughed aloud at the stupid metaphor, drawing a curious look from a nearby businessman who suddenly hugged his briefcase closer to his body. + +Becky stopped before a door so nondescript Kai would have assumed it was for maintenance. After tapping out a long sequence of numbers on the adjacent keypad, she opened it and stood aside. + +It led to a luxuriously carpeted room dimly lit by pleasant, warm-colored light. It was surprisingly small, furnished with only a plush couch facing a projector screen. Kai thought distantly that it was odd for the lounge to have only a single piece of furniture, but that piece of furniture looked so appealing that they couldn't stay worried about it. To the increasingly groggy rabbit, the couch looked like exactly what they needed. + +"Here we are!" Becky said brightly. + +"Thanks, miss," they said with a dumb smile. + +"Safe travels, Kai." + +With that, she placed her paw on their back and eased them through the door. Thinking of nothing but laying down, Kai didn't even hear it click shut behind them. + +The rabbit flopped onto the cushions with a sigh, leaning their head back and letting their long ears drape over the arm. They were so comfortable here that they wondered whether they even needed to go all the way to Seattle at all. + +A projector started up somewhere behind them - a sound that always reminded them of their brief stint working at a movie theater. They lifted their increasingly heavy head just high enough to see the screen and found an uncomfortable-looking canine glaring into the camera. "Hello. My name is Tiger Sapphire, and I am the CEO of FetTech," he said. + +Kai giggled at the name's rhyming sound, the fact that "Tiger" wasn't a tiger at all, and the coincidental return of the name "FetTech." "'Hello, hello, Tiger,'" they sang back cheerfully. + +The recording continued obliviously. "I'm speaking to you today because you have been selected for an exciting cross-world employment opportunity." Mr. Sapphire squinted as though trying to read a cue card. "By now, you should have been provided with our patented suggestibility-heightening medication. If you have not received this medication, please locate the nearest FetTech sub-contractor in your world for assistance." + +By "medication," Tiger must have meant the gummy. Was that why Kai felt so loopy? CBD had never done anything for them before, but maybe it had some interaction with alcohol they weren't aware of. + +Tiger continued, "In a moment, this screen will play a color pattern. This sequence will install preliminary conditioning to ease your onboarding process." + +Kai yawned. As much as they felt compelled to listen to Tiger, they could barely keep their eyes open. It didn't help that Tiger kept using big words, or that his delivery was so *flat* and *boring*. The CEO sounded like he wanted to be anywhere else. + +"Please do not remove your eyes from the screen," he droned. "Failure to continue watching this recording may result in-" + +Kai didn't hear the rest. By the time the colorful concentric diamonds began to unravel from the center of the screen, they were already snoring. + +--- + +Kai remembered why they had cut back on drinking the instant they floated back to consciousness. An icepick vibrated in their skull, their breath was rancid, and their stomach was liquefying. Somehow, even their tail ached. No more alcohol for awhile, they resolved. No more weird gummies either. + +They were no longer in the mysterious Northwest lounge of the Columbus airport but instead on the concrete floor of a dark warehouse. Dozens of strangers surrounded them, all facing the same direction in neat rows as if in military formation. Most alarmingly, they were all naked - even Kai had been stripped to their gray fur. + +Kai rose to their footpaws, grunting as their brain sloshed in their skull. "Hello?" + +Getting no response, they circled to the front of the man to their right. The man had a strangely shaped muzzle that made it impossible to identify his species, and was completely hairless. It was weird to see so much bare skin. It reminded Kai of an alternative health fad from a few years earlier where people would shave off patches of fur and lay in the sun, hypothetically to megadose vitamin D in lieu of getting vaccinated. + +A flash of movement drew Kai's attention away from the man's bare chest and up to his eyes. It took a moment for their vision to adjust to the dark, but once it did they saw colorful diamonds flowing continuously out from the man's pupils. His expression was blank, and a trickle of drool flowed from one corner of his flat muzzle. As Kai moved down the row, they saw the same diamonds in the eyes of a raccoon, an otter, and a husky. + +Kai had seen hypnosis before - had fallen victim to it themself more times than they could count. They had even once encountered a mesmeric diamond pattern exactly like this one. But what could hypnotize so many people so thoroughly? Why was Kai unaffected? Where *were *they? + +Startled, the rabbit jumped as floodlights around the warehouse lit up. Exposed and uncomfortably aware of their nudity under the harsh glare, Kai scurried back to their original place in the formation so as not to stand out. + +As they mimicked the slack posture of those around them, a holographic projection the size of a movie theater screen flickered to life above the crowd. It showed another species Kai had never seen before - a two-headed naga with bright blue scales. The naga wore a suit divided down the middle: on the right, plain formal black; on the left, magenta and neon yellow pinstripes. Somehow those garish colors were more offensive to Kai's hangover-induced light sensitivity than the floodlights. + +"Welcome, new recruits!" the left head boomed. "It's lovely to be here. The name's Junior - Johnny Args, Jr. How's everyone feeling tonight?" + +With zombie-like moans, the hypnotized crowd called back variants of "great," or "wonderful." + +It seemed the video was live, because Junior responded by tutting and shaking his head dramatically. The naga's other head dodged away from the exaggerated motion with an irritated look and a flick of his tongue. "Come on, put some life into it. I *said* - how are we *feeling* tonight?" Junior cried. + +This time, the response was ecstatic, and Kai imitated the energy as well as they could as they mouthed along. Whatever this weird gathering was, it felt uncomfortably like a high school pep rally. + +"Now *that's* what I'm talking about! Keep up that enthusiasm and I think we'll be looking at some future employees of the month," he said with a wink. Kai was no closer to understanding what was going on, but the word 'employee' added to their mounting dread. + +"Now, you may be asking yourself, 'How did I end up in this strange place, listening to this handsome, charismatic man?' I'm sure you saw Ol' Tiger's little orientation video, but I doubt you remember much besides those pretty diamonds." + +Kai started to piece things together. Those "pretty diamonds" Junior mentioned must have been at the end of the video in the Northwest lounge. Some part of Kai had theorized they had escaped hypnosis because they were especially strong-willed, but it seemed they had just passed out and missed the hypnotic part of the video thanks to the combination of the alcohol and the sedative. + +The naga's other head sighed. "Brother, do we have to do this every time? They're entranced. We can simply give them commands." + +"And here's my brother, my business partner, and my other half!" Junior said. "Give it up for Big J, everybody!" + +The other head glowered down at the vacantly applauding crowd. "My name is Jonathan Argent II and you will refer to me as sssuch," he hissed, half to his audience and half to Junior. + +"Come on, being friendly with the recruits helps smooth the process, Big J!" + +"*Don't* call me that. And that's never been proven. You just like to hear yourself talk." + +"Well, who *doesn't *love to hear me talk?" With that, Junior faced the camera again. "Am I right, folks? Anyhow, since my brother seems to have woken up on the wrong side of the heat rock this morning, I suppose we'll just have to get this show on the road. Come on now, step right up and follow the shiny arrows to the next room!" + +A dozen hovering neon arrows flickered into existence, lending the warehouse the chintzy atmosphere of the Las Vegas strip. From the direction they pointed, Kai heard a whir of machinery and saw a large metal door slide open. + +Despite the intense floodlights, the room it led to remained dark. It was a waiting, heavy darkness like a storm cloud, and gazing into it for too long felt like a 9-Volt battery on Kai's retinas. Their nose twitched to the smell of fresh vegetation inside, so palpable that it took them a moment to recognize it: ghost-scent. Whatever was in there was *strong*. Kai sensed it was dormant now, but if it woke up it could make the strongest haunting they had ever seen look like a kid in a sheet. They shuddered at the thought. + +But as Kai looked around the warehouse they saw there was no other way out. Moreover, the other strangers had begun filing into the dark maw before them, leaving no choice but to follow or expose the fact that they had escaped hypnosis. Reluctantly, they let the crowd sweep them forward one hesitant pawstep at a time. The black door loomed larger and larger until Kai finally stood before its wall of shadow. Taking a breath and bracing themself, they took a step inside. + +For the first several feet, there was nothing but dizzying void. Then the darkness slowly lifted as they neared another floodlight. However, despite the high-powered buzzing of the intense light, it lit only a small circle of concrete floor, leaving the ceiling and the rest of the room out of sight. + +Examining the dark fog more closely, Kai realized it wasn't a continuous mass, but was actually composed of countless smaller entities. Each spirit would be an F1 if it registered on the Flynn Scale at all, but together they became something qualitatively different, like snowflakes forming an avalanche. The place was a wasp nest. It was an especially dangerous one for Kai, who felt the spirits align around them as if the rabbit were a magnet passing over a bowl of iron filings. + +"Keep it moving, now! Plenty of room for everyone, no need for pushing!" Junior sang. The fog dampened sound as much as light, making it impossible to tell where his voice was coming from. + +Kai continued to play along. Once they got a better idea of what they were dealing with, they could form an escape plan. And if they needed to run, the ominous ghost-fog would at least lend them cover. + +More new shapes appeared, dark blobs resolving into blurry pillars which resolved into vertical glass tubes as Kai got closer. They could only see one at a time clearly, but they sensed there were countless more in orderly rows. Each stood seven feet tall and had enough space inside to contain each of the hypnotized captives who began to sleepwalk inside. + +A raccoon woman clambered into the nearest one, and a second layer of glass slid shut over the opening as soon as she tucked her ringed tail inside. It was only then that Kai noticed two mechanical arms dangling into the tube from the darkness above. One of the arms held a glass visor, which she took in her paws and pressed firmly against the dark mask of her face fur. + +As soon as it was in place, straps launched from the back and fastened together with a click. As if woken by the sound, the raccoon jolted out of her trance, the last of the diamonds leaving her eyes and fading away. + +"Huh? What the hell?" she asked. + +Startled into action, Kai ran to the now-lucid captive. "Hold on, I'll try to get you out of there!" They ran their paws over the glass chamber but found no controls or other ways of opening it. + +The visor flashed on with an eerie electronic buzz and projected that familiar diamond pattern, only much brighter and far more intense in its effect. The moment it kicked on the raccoon immediately slumped forward, drooling muzzle resting against the wall of the tube. + +The other mechanical arm hissed, and as Kai looked up they found that this one was a nozzle at the end of a hose. The nozzle bobbed once, twice, then jerked and sprayed a load of black, sticky goo into the tank below, splattering the raccoon with clingy webs. As Kai watched they saw the goo *move*, wriggling under her fur and down to her skin. + +Yet more machinery whirred to life overhead. Tearing their gaze from the horrifying sight before them, they looked up and saw an industrial fan suck in huge gulps of ghost-fog. In the brief moment of visibility it created, Kai saw the fan was attached to a tangled mass of piping, one branch of which fed the hose going into the chamber. + +The nozzle bounced again and shot a spray which fully enrobed the raccoon, drenching her head and torso with shiny latex which rapidly slithered down to her legs. Despite the powerfully hypnotic visor, she must have still retained some resistance because her tail lashed weakly in an attempt to shake off the liquid. Then she went still. + +Before Kai stood a sleek, shiny silhouette, perfectly black besides the colors endlessly washing over her helpless eyes. Between her legs, the latex slowly caved in to form a slick onahole, making the purpose of this process clear. + +The chamber sounded an electronic ping and an unseen projector shone a label on the glass: "#7041" - no name or other descriptor. Kai swallowed back a rising nausea that had nothing to do with their hangover. + +Black mist unspooled from the drone and rose out of the tube. At first Kai thought the latex was somehow evaporating, but as they looked closer they realized it was fragments of the raccoon's shattered psyche joining the other ghosts filling the air. + +So this was how the Argents operated: they adulterated their living, liquid latex with the recycled spirits of their own victims. It was sick, but the logic behind it was no different than the way Spectrex would cut back staff and safety measures year after year, preaching the need for budget cuts at the same time as it exponentially increased executive payroll. The same system that had controlled Kai all their life ruled this place too, wherever it was. And as much as they wanted to hold on to their fantasies, it would have been just the same in Seattle. + +They balled their paws into fists. "Let her go!" The words burst out of them so suddenly that even *they* didn't know who they were addressing. + +Then the hypnagogic shapes flickered out of the fog in distorted, knife-thin parodies of the anthropomorphic form. Hot blood pounded in Kai's ears as the manifestations crowded around them. + +*Go away. *Their voices were distant and scratchy, but their malice toward the mortal rabbit was unmistakable. This rage was unsurprising given the trauma of their identity death. + +Kai swallowed and said in a shaky voice, "Please, let her go. Some of you are inside that stuff, right? You can work together and-" + +*GO AWAY. *The inflection was unchanged, but the words now clipped and distorted as if played from blown out speakers. + +Spindly limbs flailed for Kai, as numerous and flexile as the legs of a house centipede. The rabbit wheeled away just in time for one freezing claw to graze their tail, then fled blindly down the row of tanks, passing under the blind gazes of a dozen of other drones on the way. Sliding to a stop at the end of the row, they crouched behind a pile of machinery, ears straining for any sound of their pursuers. Everything was quiet now. However, Kai remained acutely aware of the ghost-fog around them like a blade ready to fall. + +Spectrex would award this place a brutal "C-minus" on a workplace safety inspection, Kai thought distantly. Maybe even a "D" depending on the owner's political connections. + +"Well, well. Looking at our monitors here, it seems one of our recruits has decided to play hooky," Junior's unwelcome voice chimed in. + +Kai's long ears shot up again. They turned every direction looking for the source of the sound, but it was too muffled by the fog. The naga's head might have been speaking from a distant loudspeaker or from mere feet away. + +"I told you we shouldn't have skimped on those sub-contractorsss," Jonathan hissed. "This is the third time they have failed to ensure the recruits are fully entrancssed." + +"Don't blow your stack, little brother-" + +"We're the same age!" + +"-we know how to deal with layabouts here, don't we?" Junior cleared his throat and softened his tone. "It says here your name's Kai. Nice to meet you, Kai! Now, before you make any rash decisions, let me tell you a little bit about the opportunity we're offering." + +Kai felt blindly through the dark for the wall they sensed was nearby. When their paw met the solid surface, they looked down and found a metal grate. They saw it was an air duct, one large enough to crawl through, and felt a swell of hope for the first time since they arrived. + +"We're talking guaranteed job security, Kai. *Useful *work making people happy. And isn't that what life ought to be about? Trust me, Kai, nothing out there will give your life as much meaning as getting passed around as one of our toys. You'll feel incredible doing it, too! Nothing but bliss all day every day, Kai. What else are you really doing with your so-called freedoms, anyway?" + +"Enough!" Jonathan broke in. "Lisssten to me, little mammal. If you don't sssurender now, I will place you with an owner who will beat you and break you. I will leave your pain receptors intact so you will experiencsse every moment, unable to protessst, unable to ssscream. Make your decisssion now, little mammal, because I'm coming for you." With that came the pop of an intercom switching off. + +Cold dread blanketed Kai. There was no way the Argents would do something like that, was there? Surely it was just good-cop, bad-cop. Then again, that was little comfort considering the "good cop" was, by definition, always the one putting on an act. + +Kai shook their head. The raccoon's fate was painfully burned into their mind, and there was no way they would let themself go out the same way. Bending down, they yanked at the grate. It popped off easily, but their trembling paws slipped and it fell to the ground in a clatter that sounded explosively loud in the otherwise silent space. Fortunately, there was still no one nearby - no one that Kai could see, anyway. They crawled into the opening, paws and knees banging on the sheet metal. + +It felt like being squeezed through of a tube of toothpaste, but Kai didn't mind. Like most rabbits, they were comfortable with tight spaces as long as they didn't feel trapped. And, having investigated a number of industrial sites like the one in which they now found themselves, they knew the duct must lead *somewhere* - maybe another part of the building, or maybe an outdoor exhaust vent if they were lucky. + +But what would they find outside? Surely not Columbus - nor Seattle for that matter. Kai remembered Tiger using the phrase "cross-world." They had, of course, noticed that the Argent Company's technology was different than any they had seen before, to say nothing of the naga themself. But surely "cross-world" was just meaningless corporate speak, right? + +Kai froze at a sudden bang from behind them. Panicked, they ducked their head to look between their legs, but didn't see anything in the upside-down way they had come. It must have just been the metal cooling, they decided. + +Then a shadowy shape pounced from the foggy distance and scrabbled toward them. The shiny black drone moved with alarming speed, kaleidoscopic gaze fixed on Kai with deadly purpose, and the rabbit squeaked in alarm as their flight instinct took over. They kicked frantically to propel themself faster, but their padless footpaws only slid off the metal and the drone caught up to them in seconds. + +Smooth, squishy latex wrapped around the rabbit's ankle with crushing strength and dragged them backward. Kai flipped onto their back, banging every limb in the confined space as they did, and tried to wrench the drone's grip open. Even as they dug their claws in, the drone felt no pain and continued to hold firm. + +Finally, Kai coiled one of their spring-loaded legs and launched their footpaw into the thing's flashing visor. Shockingly, their single kick put a spiderweb crack in it. Its diamonds were replaced by solid red, and as the drone went limp the screen flashed the text "MAINTENANCE REQUIRED." + +The hypnovisors were nothing but flimsy plastic. If Kai *had* to be abducted by an evil fetish company, couldn't it at least have been a good one? They giggled at the absurdity between adrenaline-filled gasps for air. Once they caught their breath, they continued on, ears straining for other danger. + +The duct soon ended at a vertical shaft too high to climb, leaving another grate beside it as the only exit. Kai's heart sank when they saw the darkness on the other side. The grate would lead back into the same room they had left, leaving no choice but to go back in and seek another escape route. + +A horribly familiar voice greeted them as soon as they crawled out. "Kai! Glad you could make it!" cheered Junior. + +Kai sprung to their footpaws and broke into a run, but skidded to a stop when they found three drones waiting for them. Another group of three closed in from the other direction and the naga emerged from the shadows, fully encircling Kai. + +In person, the naga was surprisingly small, scarcely taller than the rabbit, but their squad of drones made up the difference. Worst of all, Jonathan's arm held the end of a latex hose while Junior's held a hypnovisor. + +"You can't do this!" Kai yelled. + +"That's demonstrably falssse," Jonathan said. + +"Be reasonable, Kai," Junior purred. "I feel for you, I really do, but I have *obligations*. I promised FetTech a product, and I can't very well go back on my word just because I *feel* like it, can I? Like it or not, we've all got jobs to do. That's just the way things work in this sad world of ours." + +"Sssad? I don't feel sad when I'm counting my creditsss." + +"There's no call to be vulgar now, Big J." + +Jonathan rolled his eyes and returned his attention to Kai. "My earlier deal still standsss. Sssubmit and it will be easssy." + +Kai looked around at the drones. Their varying bodies and minds, their life experiences, all reduced to disposable tools for the appetites of the rich. It was infuriating. If only the drones could return to awareness long enough to realize that they far outnumbered the two-headed naga. + +Inspiration struck. "Fine," Kai said. "I submit. I'll...accept the job offer." + +"Great to have you onboard, Kai!" Junior said, flashing a grin. "You're gonna love it - we're all one big happy family here." + +Jonathan, for his part, simply hefted the latex hose and steadied it on his shoulder. Without another word, he turned his head, clamped his jaw around the handle of the nozzle, and yanked it back. The hose trailing behind it puffed up and expanded as thick poison raced down its length. + +Kai waited until the precise moment it was ready to erupt before diving out of the way, gushing fluid splattering the wall behind them. The shot would have missed them entirely had they not extended their right arm, letting gooey, surprisingly warm latex soak their paw. It moved on its own, itching like spiders burrowing through Kai's fur as it spread down to their elbow. + +Jonathan cursed and pumped the nozzle to ready another spurt. As he did, the rabbit softened their gaze to focus on the ghost-fog around them. That attention alone was enough to cause a shift in the air like a dozen ears swiveling toward them. Few other people would have gotten such an instant reaction, and for once Kai found themself grateful to be ghost bait. + +Oblivious to the manifestation, Jonathan found his target and fired again. This time the jet hit Kai in the stomach hard enough to knock the air out of them, but they ignored it and held their paw higher. "I'm one of you, and I say we get these guys," they told the ghost-fog. Kai pointed at the Argent brothers with their tainted paw, prepared to say more, but then the latex overtook Kai's throat and cut off their ability to speak. + +"Now what was that all about?" Junior asked his brother. + +"Foolishnesss of a cornered animal," Jonathan answered. "Get the visssor ready." + +Kai sensed the air shift uncertainly. The spirits were awake now, even the ones inside the drones and in the latex swimming over Kai's fur. Kai felt them bounce intermittently like popcorn kernels popping in a microwave, but it was only agitated, unorganized chaos. There was no one coming to rescue the rabbit. + +The latex hugged Kai's head, leaving only a narrow gap where the hypnovisor would inevitably go. The goo even rolled up the inside of their sensitive ears, itching so horribly that they would have torn them off were their body not stuck in place too firmly to move. + +"That ought to do 'em," Junior said. He raised the visor and the naga slithered toward Kai. + +The rabbit squirmed in their tightening encasement. Even their muzzle was covered to their nose, forcing them to gasp for air. At this point, they were almost eager for the hypnovisor so at least this awful fear and discomfort would be wiped away. + +"I do so love seeing them break," Junior said. "By the way, we're selling the bunny to Oceanus, right?" + +"I was leaning toward Anther myssself." + +"Oh, that's a *great* idea. Little cottontail's in for a *world *of hurt." + +Kai's lungs burned, but the latex clung too tightly to their chest to allow a full breath of air. How did the other drones breathe in these things? Horrified, it occurred to Kai that maybe they didn't. + +"You know, maybe I'll have this one myself before we ship it off to Anther," Junior said. + +"Absolutely not. Be professssional," Jonathan said. He put his jaw over the handle again, apparently ready to fire a superfluous third load onto his victim. But when he pulled it back, nothing happened. + +Startled by the empty click, Junior turned to his brother. "Don't tell me it's jammed again." + +Jonathan opened his mouth to respond, then frowned. Kai's vision was growing dark, but they thought they saw something strange in his mouth. Jonathan started to ask a question, then coughed. One of his fangs dropped to the floor, and Kai saw it had turned completely black. + +Junior eyes widened as it began to steam. "Everything alright there, Big J?" + +"Don't-" Jonathan began, then coughed again. This time, his forked tongue wriggled out of his mouth and hit the ground with a wet smack. It was followed by a splatter of black fluid which should have been blood. + +Junior dropped the hypnovisor in a panic and turned to run, but only the left side of the naga's body responded. "J!" he cried. Then he, too, was wracked by a coughing fit and the naga fell to the ground. + +The drones turned toward the Argents, their once-solid forms now rippling like grass in the wind. A wave across one's body reached so high that it touched another drone, and their shells snapped together like two water droplets. Their amalgamation soon pulled in the other drones and then began to pull in the ghost-fog itself, becoming an undulating, pulsing mass that Kai could not begin to categorize or rate on the Flynn Scale. + +Kai struggled in their bonds again and this time found the latex pliable enough to tear off with a swipe of their claws. The latex writhed on the ground like a wounded animal before it too swarmed into the growing mass. + +The naga shook uncontrollably and Jonathan vomited a long tangle of wet, black cords. Kai realized it had been an intestine. The ghost-fog which had been in the naga's lungs was rebelling and rotting them from the inside out. + +The intestine lashed back and forth until it found Junior's mouth and forced its way inside the screaming man. Even as it did, Junior dug his claws into the concrete floor to pull himself along, only stopping when his arm popped off at the shoulder in a thick spurt of black goo. + +Kai shook with adrenaline, triumph, and anger. "You ever hear of OSHA, assholes?" they said to the unrecognizable shape on the floor. + +The room was finally clear of ghost-fog. Unhindered, the powerful floodlights were blinding, throwing the now-massive black amalgamation into sharp contrast with the white walls and gray concrete. + +The creature half-walked and half-rolled over the dark smear that had been the naga and drew it up into its body like a shoe pulling sticky strands of gum from the sidewalk. When all traces were gone it throbbed and rotated toward Kai, then waited as if expecting something. + +"Thank you," Kai told it. + +It tilted forward and slopped toward the rabbit. As the towering mass loomed larger, Kai reflexively backed away step by step until their back hit the wall. As the thing kept coming Kai realized it wouldn't stop, and they broke away just as it crashed an orifice-tipped vine against the wall where they had stood a fraction of a second earlier. + +Not looking back, they sprinted toward the now-visible exit - a large metal garage door beyond the drone chambers. The sounds of squelching and shattering glass pursued them, and even the walls shook under the force of the juggernaut. + +Suddenly, Kai tumbled dizzyingly off-balance. It was only as the room wheeled around them and went dark that they realized it was already over. The latex shell sealed around them, boiling hot and buzzing around their entire body. + +--- + +This part of the waterfront was disgusting, Glenn thought. Nothing but ugly warehouses, barnacle-infested pilings, and shanty towns subsisting on whatever pollution-poisoned fish happened to belly-up each morning. He expected that at any moment some roving gang of drug-addled thugs might rush at him out of the night, tempted like dogs in heat by the glitter of his diamond-encrusted watch and platinum-plated limousine flyer. + +If anyone *did *try anything, of course, his security team would splatter them across the rotted wood of the dock before they could spew their first halitotic vulgarity. Still, it was a sight Glenn would rather not have souring his evening. + +The ermine had better plans. FetTech had just announced a new drone drop courtesy of their contractor, the Argent Company, and he planned to purchase at least a dozen the moment they became available. It was best to sample them straight from the conversion chambers, when the latex was still hot and their brains were still addled. If Glenn was lucky, some of the drones might have some lingering resistance which he could personally snuff out. + +He wasn't the only one there for the drop, of course. From his vantage point, he could see three other limousines glinting under the yellow lamps of the wharf and the red glow of several cigarettes hovering around them. They were the types to treat this as a social occasion, practically a "tailgate party." The ermine had once tried to join them, but the tenor of their conversation was far too base for him. + +He wasn't here for a mere "fuck." He was a connoisseur of sensation, of which sexual gratification was only one. In fact, he had a grand design for this current batch of drones - an opera of sadism in which he would star and direct before those few who shared his sophisticated palette. As with his prior works, half the drones would likely be non-operational after a single performance, but this was no great loss. There would always be more, especially with FetTech's recent innovations in cross-world recruitment. + +The tall door of the factory creaked open. At the sound, Glenn's fellow people of means stubbed out their cigarettes or finished swilling their drinks and came forward to join him near the entrance. + +That familiar unnatural shadow filled the interior. The Argent brothers always insisted that that deep darkness was only a trick of the light, that they would *never *cut their living latex material with other organisms, and it was only out of respect for their father's name that Glenn pretended to believe them. + +A minute ticked by, during which time Glenn was forced to overhear a fox woman bragging about the size and shape of the various silicone phalli with which she intended to outfit her drones. He did his best to shut out her claptrap as he waited for the Argent brothers to appear. + +Where was that jumped-up naga, anyway? As distasteful as Glenn found them, they could usually at least be counted on to be punctual. At this rate, the latex would be room temperature by the time Glenn got his new drones back home for quality testing. The Argent Company had fallen off disappointingly quickly following the death of the senior John Argent, and not for the first time Glenn considered whether it would be prudent to take his business elsewhere. + +Glenn saw a darker portion of shadow shift inside the factory. It was massive, nearly reaching the top of the huge doors. + +This was hardly unusual. For awhile there had been one regular customer, some reptilian or other, who made a habit of ordering bespoke drones designed to fulfill his fantasy of being stepped on by giantesses. The last Glenn had heard, the lizard or whatever he was had gambled away the remains of his inheritance - typical for one of such lowly, submissive tastes. The ermine glanced around the small crowd, wondering which of them had picked up that man's depraved mantle. + +The shape continued to swell as it approached. It had none of that obnoxious thumping as it took each ponderous pawstep, but instead seemed to roll or glide along the ground. + +Now Glenn was curious enough to engage socially with the bores around him. "Which one of you ordered that juggernaut?" + +The bores glanced at each other, none taking the credit. That was odd. The gaudy, undoubtedly expensive purchase should have been a point of pride among such people. + +"Wow, would you look at that thing?" exclaimed a mouse. Yazen was his name, Glenn remembered - a *nouveau riche* finance type rumored to have relations with his twin sisters. + +Despite Glenn's reluctance to follow the suggestion of such a man, he turned back to the warehouse and saw that the juggernaut had come out of the shadows far enough to be seen. He grimaced. Its matte black could hardly be called latex at all and its rippling, saggy texture was nothing short of abominable. The latex had not even solidified - as it bobbled awkwardly along the ground, it left steaming black puddles behind. + +The ermine's nose flared. The thing even *smelled* foul, stinging like cut grass. Glenn so hated that smell that he had had his assistant memorize his golf courses' landscaping schedules in order to avoid it. + +He could bear this no longer. "Right. Whoever commissioned this atrocious thing, speak up now. This has gone quite far enough." + +"I don't think *any* of us ordered it," the vulpine size queen said. + +"Where are the Argents anyway?" the incestuous mouse asked. + +Glenn frowned. Yazen had a point - the naga should have been leading their drones, yet here was the drone leaving the warehouse of its own accord. + +The hideous blob turned like a globe on a tilted axis to reveal something like its face. The familiar, colorful diamonds of the Argent's hypnovisors glowed at dozens of random positions and angles along its uneven surface. + +Glenn felt a chill. Turning to his bodyguards, he said, "Tell the driver to start the car." The nearest one nodded and leaned into the driver-side window and a moment later the propulsion jets flared to life. + +Meanwhile, the juggernaut extruded several tubes from its body like disgusting, crooked coral. The tubes twitched and launched sticky globs into the air like mortar fire. + +"Run!" one of Glenn's security cried. + +Hardly needing to be told twice, the ermine and the others turned and sprinted down the wharf moments before the missiles touched down where they had been standing. As Glenn's limousine dissolved in a splat and crunch of steel, he automatically calculated the financial loss - over a million credits for the car itself, twenty thousand for the liquors in the cabin, and five hundred for the driver's lifetime employment contract. (The driver was no great loss - he had been middling at best, and Glenn long suspected him of stealing sips of the fifty-year scotch.) + +As Glenn raced past the "tailgating" vehicles, a second missile landed among the cars and shattered into webs that writhed and slithered along the ground. Glenn had to hop over one of these as he continued to flee down the wharf with his security, who threw panicked looks over their shoulders as they ran. + +The third landed much closer, in the very midst of the refugees. The resulting splash encased four of them so thoroughly that their humanoid shapes were no longer recognizable, and another two were glued to the ground. The victims' bodyguards bent to scrape them free, but only managed to enmesh themselves as well. + +One of Glenn's security grabbed him by the shoulder and pointed to the shanties nearby. "We need to take cover inside while we wait for backup." + +Horrified, the ermine shook his head. "Imagine the diseases I might catch in one of those hovels. I'd rather take my chances out here." + +The bodyguard seemed about to protest when his body collapsed under the impact of yet another missile. This one shot out writhing tentacles in an attempt to grab Glenn, and he fell back onto his tail as he dodged away from them. + +Yazen appeared over him, wild-eyed in panic, and offered a paw. The mouse was the only other individual still standing, Glenn realized in horror. The ermine's entire security team had been overtaken, the nearest one currently pinned down with a vine forcing its way down his defenseless throat. Glenn took the pink outstretched paw, stood, and continued his flight beside Yazen. + +Distant police sirens rang out from somewhere high above. *Finally*. Capillus City's privatized law enforcement could be so *useless *sometimes. + +"I suggest we take cover inside until they arrive," Glenn declared, gesturing to the shanties. The mouse only nodded. + +They had to circle around a fence of corrugated metal to find an opening, missiles exploding on their trail and dripping tentacles pursuing them all the while. When they finally reached a gap in the fence, they were alarmed to find a dozen of the shanty's denizens blocking their entrance. + +"Evening," said one particularly foul elderly human woman. + +"Good evening," Glenn said through gritted teeth. "My companion and I have found ourselves in a great deal of danger and would be in your debt if you would let us pass." + +The human woman chuckled. "Hear that, Rossi? The rich pervert wants us to let him in." + +A young doe crossed her arms. "Why, so you can take more of us to be turned into fuck dolls?" + +Glenn grimaced. "I assure you, miss, that *no one* would source their drones from this...population." + +"Oh, we're not *good* enough for sex slavery, are we?" the old woman asked. + +"Can we *please *put petty class resentments aside? We're all sentient beings here, and should have compassion for each other. I'm in *danger*!" Glenn hated the pleading tone creeping into his voice. + +A hulking tiger pushed his way through the crowd. Glenn backed away at the sight of a two-foot length of rebar in his huge orange paw. + +"If you're not gone in five seconds, I'll show you what *danger *looks like," the tiger said. + +"Hey, Neso. Make him hand over his watch," a cougar suggested. His eyes shone green as they fixed on the diamonds at Glenn's wrist. + +"Good idea, Cane. You heard him, rich man." The tiger, Neso, banged the rebar twice on the asphalt to emphasize the point. + +Glenn's body shook with rage. He desperately wished he had brought his incendiary pistol, but its gunmetal gray had struck an insufficient compliment to his maroon vest. + +Before Glenn could exclaim his protest, Yazen shot out his pink paw, ripped the watch from the ermine's wrist, and tossed it to Neso. The ermine glared at the mouse. He would make the man pay for that eventually, and not just monetarily. + +The tiger caught it easily. "Thanks. Now piss off." + +Tears of outrage stung Glenn's eyes as he and Yazen backed out of the fence. To his great relief, he didn't see any more vines in pursuit, and the juggernaut across the water had vanished. Perhaps they were in the clear after all. + +The sirens were getting close now, Glenn heard to his relief. Once they landed and he was safely back in his penthouse, he would make a few calls to have that shanty torn apart and his watch recovered. Not that he would ever wear the befouled thing again, of course. + +A wave splashed against the wharf, an oddity in the otherwise still night-time waters. He looked down in curiosity and saw the juggernaut half-submerged below. It now resembled a distorted humanoid face with an open maw like a cavern. As if in a dream, Glenn turned just in time to see a great muscular arm of black latex that swept him into the waiting dark. + +--- + +Kai awoke to the feeling of cool water against their cheek. Everything was scrambled in their mind, and they couldn't remember where they were for several long moments. It came back to them in patches - the warehouse, the naga, and the latex katamari. They couldn't remember what happened after the blob rolled them up, but at least it was done with them now. + +When Kai finally rose to their footpaws, they saw they were on the dark shore of an industrial waterfront with an unfamiliar skyline towering overhead. Garish neon advertisements washed over its obscenely tall buildings and silhouettes of flying cars swarmed around them like gnats. + +Kai knew only one thing about this city: it was a place that bought and sold hypnotized latex sex drones, and did so in such great numbers that it had to get them from other worlds. It was an evil place, and at the center of it all was a monstrous black tower dwarfing even the other monuments to excess around it. Kai hoped above all that they could find a way back to their own world. However, the next best thing would be to burn this city to the ground, starting with that central spire. + +Blue and red lights splashed the concrete of the wharf only two hundred feet away. Taking a deep breath and collecting themself, the rabbit broke into a run and vanished into the night. + +--- + +Lilac approached the CEO's desk meekly, datapad in its paws. "News for you, Maestro." + +"Hand it here." + +"Yes, Maestro." + +The dragon took the pad, and as she began to read she leaned back in her huge chair and put her feet up on her desk. Squirming, the kittypup blushed and tried to look away, but its eyes magnetized to those huge red talons exactly as Cobalt had intended. The fae creature was well broken by this point, but a little reinforcement of conditioning never hurt. + +According to the report, someone had just wiped out the Argent Company. The organization was only a bit player in FetTech's operation, but at this point any break in their revenue stream could prove devastating. + +"It's good news, right Maestro?" Lilac asked in a strained voice. It was visibly fighting to keep its paws off the caged-up clit beneath its skirt. + +"On the surface, yes. We can't say for sure until we know who carried it out and why." + +"Um, it must have been another rival of FetTech, right?" + +Cobalt tapped the report. "Did you even read this, kittypup? Several of the oligarchs who died on the wharf had controlling interests in FetTechs' competitors." + +"Oh. Right." Lilac tried to turn its head away from the huge paws in front of it, but failed. Cobalt recognized the look on its face with a thrill - the kittypup knew the last dregs of its willpower were draining second by second, that it would soon be unable to stop itself from begging, yet it *still *couldn't look away. + +Cobalt continued, "Besides *who *and *why*, there's also the question of *how *this was done. Causes of death include blunt trauma, suffocation, and spontaneous necrosis of tissue from the inside out." + +"M-maybe the factory exploded?" + +The dragon shook her head. "Two of the deceased died far away from the site. They were *pursued*." + +Lilac closed her eyes. "I don't know, then. You're just so much smarter than me, Maestro." + +"Mm, that's right. So why don't you worship my paws while I do the thinking for both of us, princess?" + +The kittypup squealed and transformed into a familiar rabbit boy - the most subservient of her forms. "Yes, Maestro!" he said. He was so small that Cobalt could envelop his entire head with a curl of her talons, keeping him from breathing anything but her scent. + +So she did. And as the bunny whined and huffed, Cobalt continued to ponder the report in front of her. She had many of the puzzle pieces of Capillus City and a detailed plan to arrange those pieces to her advantage, and although this attack accelerated her plan as regarded FetTech, it was a piece that didn't fit. + +She set the pad down. Much as she hated to admit it, she couldn't know and control everything in the city - not yet, anyway. Eventually, she would identify the ones responsible for this, assess their motives and capabilities, and, as surely as she had defeated the once-proud fae witch who was presently on the verge of cumming to her paws, she would twist them to suit her own needs and desires. It was only a matter of time. diff --git a/src/content/stories/Carpe Diem, My Dude.md b/src/content/stories/Carpe Diem, My Dude.md new file mode 100644 index 0000000..2ecf9de --- /dev/null +++ b/src/content/stories/Carpe Diem, My Dude.md @@ -0,0 +1,510 @@ +--- +adult: true +description: "Kairo plans to impress cute frat boys by showing off his ghost hunting skills. The ghost in their house has other plans." +pubDate: "Nov 27 2024" +title: "Carpe Diem, My Dude" +--- + +"The ghost boy's here!" Adam called. A few partygoers glanced up at the rabbit standing in the door, equipment case in one paw. + +Kairo shrank from the attention. "That's me." + +"Come in, man. You can put your stuff wherever." + +"Thanks." + +"Want to do a jello shot?" + +"Uh, sure." + +Kairo followed the husky into the house, pausing in the living room to set his case down. It was only 9pm but, judging by the empty bottles, cans, and plastic cups littering every available surface, the party had already been going for some time. + +Frat boys filled the small space, chatting loudly over throbbing pop music. All were canids and all had groomed fur, confident grins, and bodies trimmed sleek or else toned with muscle. Statistically unlikely as it was, they were all hot. Or maybe that was just the rabbit's pent-up libido talking. + +Arriving in the kitchen, Adam reached into a cooler and pulled out several cups of brightly-colored goo. "Ever had one of these before?" + +"Once, I think," Kairo lied. + +"Hey, Big Ben!" Adam shouted down the hall. + +"What?" someone shouted back. + +"Jellies!" + +A huge Bernese lumbered over to join them. Towering over the dogs around him, he wore a tank top over his round belly and tight athletic shorts over his thick thighs. Kairo, unable to resist looking down, found he could practically trace the outline of his sheath. + +When he was able to look up, he noticed with a blush that the dog was looking back at him. "Who's this?" Big Ben asked Adam. + +"This is Kai. I texted you about him, bro. He's in the ghost hunter class." + +He shrugged. "Nice to meet you, Kai. I'm Ben." He put out his wide paw and nearly pushed Kairo backward when they bumped fists. + +Adam peeled open three shots. As if summoned by the sound, an already-sloshed collie appeared and made puppy dog eyes at Adam, tail wagging dumbly. The husky feigned a dramatic sigh before opening a fourth one for him. + +"Thanks, babe!" said the sloppy collie. He slurped it down and melted back into the party. + +Kairo picked up a neon green shot and, through a combination of squeezing and shaking the plastic cup, managed to get the cold jelly to slide down his muzzle. + +He coughed, startled. "That's strong!" + +Adam laughed and clapped Kairo on the back. "Right? Aiden's gotten really good at making them." + +As the warmth of the alcohol bloomed under his fur, Kairo realized the drink had been mixed for a carnivore's tolerance. One more of those would put him on his tail. Unbidden, he remembered a common porn trope featuring this exact situation, in which an herbivore would get too drunk too quickly in a room full of carnivores, who would then proceed to take advantage of the weakened prey. + +"How do you and Adam know each other?" Big Ben asked. + +"I only met him yesterday," Kairo replied, grateful for the distraction. "I was on my way to Phasmology class and he stopped me to ask about the spirit box I was carrying. I explained what it was, and then he invited me to the party." + +Adam nodded eagerly. "'La Casa Perro' is old as shit, and I swear stuff moves around on its own sometimes. I figured Kai would get a lot of ghosts to talk to for sure." + +Kairo, meanwhile, figured a demonstration might impress the husky or his frat brothers, and maybe even lead to a hookup. Pi Beta was famously queer, and with so many people in the house that night surely *someone *would be attracted to the gawky little rabbit. + +Big Ben was unimpressed by Adam's claim. "Pi Beta has the house exorcised at the end of every semester." + +"They *say *they do, but I lived in a haunted house growing up and this totally feels the same." He turned to Kairo. "What do you think?" + +Kairo didn't want to dampen Adam's enthusiasm, nor challenge the imposing Bernese. "I wouldn't know." + +Adam had already dashed elsewhere by the time he got the words out. Sliding open the glass door to the backyard, he called to a group sharing a pipe outside, "Get in here! We're about to do ghost stuff!" When they didn't move right away, he let out two high-pitched yips and ran out to them. The husky was drawn into their conversation immediately and it didn't look like he would return soon. + +In the ensuing silence, Kairo turned to Big Ben, trying and failing to settle his gaze somewhere that wouldn't turn him on. "So, what's your major?" + +"I'm pre-med." + +"Oh cool, so you want to be a doctor?" + +"Yep. That's the plan." + +Kairo wanted that second drink already. "Uh, Adam mentioned stuff moving around the house on its own. Have you seen anything like that?" + +Big Ben shrugged. "Not really. I think Adam is just ADHD and forgets where he puts things. Then again, who knows? You're the expert." + +"Yeah." His ears warmed. "Well, I'm not an *expert*. I'm just a freshman. But I can still take a look." + +Adam reappeared in a cloud of weed smoke, trailed by two other canines. One was a soft-looking jackal in round glasses, red flannel, and a beanie. The other was a rail-thin fox, obviously the more avid stoner judging by the ostentatious pot leaf on his baseball hat. + +The husky clapped his paws together. "Let's do this!" + +They went to the living room. Adam sat on the couch and put his arms around the shoulders of Flannel Jackal and Stoner Fox on either side of him, leading Kairo to wonder just how friendly the three would be with each other behind closed doors. Sloppy Collie took a nearby armchair while Big Ben, lacking the enthusiasm of the others, leaned against the wall with his huge arms crossed. A surprisingly large crowd of other canines joined them as Kairo unpacked his equipment. + +"Ooh, what's that thing?" asked Sloppy Collie. + +"This is a temperature gun," Kairo explained. "Ghosts draw energy from the surrounding environment in order to manifest, creating 'cold spots.' This will beep if it detects one." + +"What about that thing?" Stoner Fox asked. "It looks like a desktop vape." + +"That's actually a spirit box." Between the alcohol settling into his system, his familiarity with the topic, and the attention of the hot boys, Kairo's confidence was lifting. "It scans radio frequencies to create random noise that paranormal entities can manipulate." + +"In English, doc!" Adam called in a joking tone. + +"In English," he answered, smiling, "it means the spirit box will let us talk to ghosts. That is, assuming there are any here, that they want to talk, and that they can manifest with enough strength to do so." + +Kairo switched on the temperature gun and waited for it to calibrate to the ambient temperature. Everyone watched with surprisingly rapt attention, even Big Ben, who couldn't keep his ears pointed away even as he buried his muzzle in his phone. Although ghost hunting had become a mundane blue-collar profession, somewhere between home inspector and pest exterminator, Kairo suspected that most people still held a secret fascination with the paranormal. + +"I'm ready to start," he said. "Can someone turn the music off?" + +"Aw man, I've been waiting for this song to come up on the playlist all night," Adam whined. + +"Just do what the rabbit says," Flannel Jackal said. His voice was surprisingly deep and authoritative, and Kairo flushed at the sight of the cute dog coming to his defense. Pouting, Adam switched off the speakers and a tense silence filled the house. + +"Thanks," Kairo said. "Okay, I'm turning on the spirit box now." Kairo had only conducted a séance once before, and it had been under the close supervision of Professor Englund. He considered giving the same warnings that the professor had given him - "use a calm tone of voice," "be polite," "don't invite possession, even as a joke," and so on - but decided that would make him look too dorky in front of the frat boys. + +He flipped the switch, and the speaker began to chug rhythmic bursts of static as the device changed frequencies. The rabbit took a breath and asked the standard opening question. "Is there anyone here who wishes to communicate?" + +Every ear in the room perked, straining to detect a signal in the noise. Some of the harsh hisses almost formed syllables, whether by random chance or by picking up stray transmissions from nearby radio stations, but none were a coherent response. + +He increased the scan speed and tried again. "We're here tonight to speak with you. Can you tell us your name?" + +The spirit box cycled through every available frequency twice, but still no voice answered the call. Kairo worried he was losing his audience, some of whom had resumed sipping their drinks and checking their phones. + +"Sometimes it takes a minute," he said apologetically, then decided to give it a third and final attempt. "Is there anyone here who-" + +The temperature gun beeped as a voice cut in, "Seth." + +Eyes widened, tails puffed up, and Sloppy Collie gasped and choked on his drink. Even Big Ben straightened and uncrossed his arms in open shock. The voice, shaped as it was from whatever random noise could be snatched from the air, was startlingly uncanny even without considering its supernatural origin. + +Despite the fur standing up on the back of his neck, Kairo managed to collect himself and ask another standard question. "Did you used to live here?" + +"Used to." Assuming Seth was being honest, that narrowed down the type of entity he was - not a shade, poltergeist, or demon, but a formerly living person. + +"How long ago did you live here?" + +"Long ago." Considering his short answers and his repetition of Kairo's own words, Seth must not have had much power. Even his cold spot was imperceptible without the temperature gun. + +"Can I ask how you died?" + +The static chugged on for a long moment before Seth answered. "Drowned. Winter." + +Big Ben stepped forward. "Seth...Stephenson?" + +Another pause. "Seth Stephenson." + +"I read about you," the Bernese said wonderingly. "My class used you as a case study for hypothermia. You fell through the ice of the Huron River in 1996, right?" + +Two brief crackles. "Fell. Ice. Cold. Cold." Another long pause and then, more quietly, "Cold." + +Kairo realized now how morbid this whole thing was. He had put a damper on the party, and no one would want to speak to him again after this. + +Flannel Jackal pushed his glasses up on his muzzle and cleared his throat. "Were you also in Pi Beta?" + +"Pi Beta. Brother." The random noise that shaped Seth's voice sounded brighter, easing some of the tension. + +Sloppy Collie's ears lifted. "Hey," he slurred. "You said '96, right? Our team was good that year! We would have made the Sugar Bowl if it wasn't for goddamn Florida." The room murmured its negative feelings toward the Sunshine State. + +"Florida," Seth agreed. + +Stoner Fox grinned. "At least he didn't live to see us get knocked out like that." + +Though the ghost didn't respond, Kairo hoped he appreciated the humor, dark as it was. Choosing another standard question, he asked, "Are you bothered by the changes in the house since you died? You can answer 'yes' or 'no.'" + +"No." + +"I'm glad to hear that. Do you feel that you left unfinished business in life? 'Yes,' 'no.'" + +"Yes." + +Dying so suddenly, it was natural that he would, Kairo thought with a pang of sorrow. "Is it anything we can help you with? 'Yes,' 'no.'" Another long moment passed with no response. + +Adam's ears perked and he sat bolt upright, nearly elbowing the heads of Flannel Jackal and Stoner Fox. "You said ghosts draw energy from the environment, right? What if we let Seth charge from our phones?" + +That definitely went against best safety practices, as it was impossible to tell whether a spirit was really benign or only pretending. However, the room had formed a real bond with Seth and Kairo didn't want to get in the way of that. + +He nodded. "Sure. Go ahead and put them next to the spirit box." The frat boys did so eagerly, and the rabbit added his own phone to the pile of offerings. "Seth, you have our permission to draw power from the electronic devices on the table. Do you think you can do that?" + +No answer, just the ongoing churn of meaningless noise. Then Kairo's phone pinged from the top of the pile - an alert of a sudden decrease in battery. "This may indicate a ghost manifestation nearby," the notification text said helpfully. + +"Seth?" he asked in anticipation. "Are you still with us?" + +"I am now, dude!" Seth replied. Though tinny, his voice was now as natural as any living person's. + +Big Ben and Flannel Jackal visibly startled, and Kairo was surprised by the dramatic change as well. "That's good!" + +"You're coming through, like, crystal. Thanks, man, I feel way freakin' better." + +"No problem, Seth. We can always recharge our phones later, so feel free to take what you need. Earlier, you said you had unfinished business - can you tell us what that is?" + +"Yeah, I was supposed to get *crunk *at a homie's party the night I died. Since then, I've watched you all throw rager after rager and I've been mad jealous." + +Kairo was surprised by Seth's retro vocabulary, almost a parody of 90s slang, but it made sense. He had learned in class that ghosts often clung to the differences between their own time and the present, resulting in stereotyped language like this. + +Seth concluded, "All I want to do is drink and get laid one more time." + +"Fuck yeah!" Sloppy Collie shouted, loud enough that the neighbors probably heard him. + +Kairo's fears eased. Seth was just another himbo, one who happened to be dead. Even the scratchy static behind his voice had softened into a gentle whisper. "Is there any way we can help you with that?" + +"I don't think so but I appreciate the offer, little dude." + +Kairo looked back at the other boys. "Does anyone else have questions for Seth?" + +Stoner Fox raised his paw as if in class. "Ever smoke weed?" + +"Hey, wassup? No, I never tried it and I'm hella mad about it!" + +"Really?" Stoner Fox asked, dumbstruck. "Never?" + +"Never!" + +"Damn." + +Flannel Jackal asked, "What kind of music were you into?" + +"All kinds of stuff, but mostly alternative. Pearl Jam rules! Best band ever!" + +"Pearl Jam is grunge, not alternative," he muttered. + +"Don't correct the ghost!" Adam chastised him. + +Big Ben asked, "Did you have a girlfriend?" + +The static returned as the question sank in. Two more phones pinged battery drain alerts. "I'm, like, gay," Seth answered finally. "The other guys in the frat weren't chill with it like you all are, so I never told them." + +Kairo asked the natural next question. "Did you have a boyfriend?" + +"I did back in Minnesota. When I moved down here, I left him behind without saying anything. That was bogus of me, and I totally regret it." + +"Maybe we could look him up online to see how he's doing," Adam suggested. + +"As if! That was like twenty years ago. Plus only nerds use the Internet, and Evan wasn't no nerd." + +It seemed Seth was aware of some of the things that had changed since he died, but not all of them. It was charming, but deeply sad as well. For all the flaws of the world of 2018, Seth should have had the chance to see it. + +"I wish there was a way for you to really be here," the rabbit said. "You would love it. Most people here are gay-" Pausing for confirmation, he was happy to see nods from Adam, Big Ben, Flannel Jackal, Sloppy Collie, Stoner Fox, and several other canines around them. "And this party is...*totally extreme*." + +Dissonant thunderclaps erupted from the spirit box, making Kairo hop several inches in the air, but he relaxed when he realized it was the sound of Seth laughing. "You sound like such a dweeb, little dude." Kairo blushed at that. "That would be so gnarly, though. Thanks." + +The background whisper of the spirit box softened further, a soothing caress against Kairo's long ears. He could almost hear Seth's upbeat personality in it, could almost visualize him. Having been born in 1999, Kairo could only work with stereotypes, so he imagined baggy, distressed jeans, frosted ear tips, and a chain wallet. As for species, for some reason he felt certain Seth was a coyote. + +As the static droned on, Kairo's head began to spin. Apparently the jello shot had hit him harder than he thought. Now quite dizzy, he glanced at Sloppy Collie's armchair, wondering if he should ask to sit. Sloppy Collie returned the look with an uncomprehending wink. + +Distantly, he heard Big Ben ask Seth, "Is the afterlife...okay?" + +"It's great. I have a halo and hang out all day on a cloud playing a harp. Not! Honestly though, it's a'ight. Not as bad as the worst parts of being alive, but not as good as the best stuff either." + +"Sounds like a good reminder to *carpe diem*!" someone said. When everyone looked up at Kairo, he was surprised to realize that he himself had said it. + +Big Ben frowned, confused. The rabbit tried to express confusion of his own, but found that he couldn't work his muzzle. His vision swam and his hearing grew muffled as though he were underwater. A half dozen phones beeped power drain alerts, but the only thing he could hear clearly was the comforting static filling his head. + +Seth lifted Kairo's arm and switched off the spirit box. + +"Kai? What are you doing, bro?" Adam asked. + +"Yeah, what the hell?" Stoner Fox protested. "Seth was still talking to us." + +Whether he meant it or not, Kairo had totally invited Seth in with that whole "I wish you could really be here" thing, but he didn't think the other guys would see it that way. "Chillax," he said. "Seth would want us to enjoy the party instead of dwelling on sad old shit." + +"You're so right, bestie!" Sloppy Collie said, apparently unable to read the room. When he failed to find agreement he sulked into his drink, lapping it up with his tongue like a puppy. + +"You're acting strange," Big Ben said to the rabbit. + +These guys were totally cramping his style. Fortunately, he now had spooky ghost powers to persuade them with. "*Carpe diem*, my dude," he said to the room, putting as much energy into his words as he could spare. Another phone beeped, and then one after another followed like popcorn popping off in the microwave. + +Adam's eyes glazed over immediately. "He's got a point. *Carpe diem.*" Several others softly echoed the phrase. Their postures slackened as soon as they said it, and Seth even saw some of their muzzles fall open. + +Flannel Jackal nodded. "*Carpe diem*." With those words, his ears drooped in relaxation. + +Stoner Fox was already so high that the difference barely registered. "*Carpe diem *or, as I like to say, *carpe *blaze 'em." Someone threw an empty cup at him for that. + +"One hundred percent *carpe diem*. What does it mean, though?" Sloppy Collie asked dreamily. + +Seth answered, "It's some saying the Romans invented. I think it means, like, 'don't worry, just party.'" + +The Bernese was unmoved. "I just think it's weird that we hung up without saying goodbye." + +Seth leaned down to the spirit box. "Peace out!" he said with a wave. "Happy, big dude?" + +"Whatever. I'm not going to argue about it." The Bernese sighed in resignation. "Thanks for the demo, Kai. Adam, I guess you were right about the house being haunted after all." + +"Hell yeah I was!" the husky said, wagging his tail. + +"What do you say, Big Ben?" Seth asked. "*Carpe diem*?" + +"Why do you keep saying that?" + +Seth thought for a moment. "Because it's true, dude. There's so much stuff to appreciate if you chill out and take it in. Like, it's so quiet in here without the music on that you can hear so much freakin' stuff outside. Birds, crickets, cars." + +"Okay?" + +"So just focus on that. Just relax and enjoy what you've got. It's a party, right? It's the perfect place to let everything go. All that stress from class, all that worrying, all that tension in your body." + +Big Ben still looked guarded, but less so than before. "I do need to unwind, but-" + +"Then just repeat after me, dude, and I bet you'll feel better. *Carpe diem.*" + +He sighed. "Sure, why not? *Carpe diem*." The moment he said the words, the tension left his bulky frame and he relaxed back against the wall. Like the others, he was now soft and pliable. + +Seth wished he could veg with these guys without using the bogus hypno stuff, but he was glad it was done. Being in a body again was rad. He could taste and smell the air, appreciate every vibrant color, and feel his weight sink those big bunny footpaws into the cool wood of the floor. As much as he wanted to take the time to absorb it all, he had mad unfinished business and not much time to settle it. With all those obnoxious exorcists always coming around, forcing him to make himself small, he never thought he'd get an opportunity like this. + +He padded to the middle of the room, moving slowly so he wouldn't trip over Kairo's floppy stompers, then yanked the leashes he'd fastened to the boys' minds. Every canine in the room snapped to attention and turned toward him. + +"Let's get down to biz," he announced. "Raise your paw if you want to fuck me!" + +No one treated the question as odd, and at least half the paws in the room went up. He felt Kairo's shock and excitement at the sight and grinned. This was going to be a hell of a ride for the little dude. + +He gave the leashes another tug. "Sick. So, here's the dillio - everyone who has their paw up is going to stay here. Everyone else, go *carpe diem* somewhere else for awhile." + +The room thinned out. With less body heat to cover Seth's cold spot the temperature gun on the table began to beep rapidly. He bent down and switched it off. + +"Who wants to drink?" he said. + +Sloppy Collie ran to the kitchen and came back with a bottle of gold liquor and a stack of plastic shot glasses. He laid the cups on the coffee table and clumsily filled them, barely managing to avoid spilling on the ghost hunting equipment and phones. + +After the shots were distributed, Big Ben raised his cup. "To our fallen brother, Seth." + +There were solemn nods all around the room. It was a total bummer. "I've got a better one," Seth said. "Fuck Florida!" + +That got some tails wagging. "Fuck Florida!" they agreed, and tapped their cups together. + +Seth nearly splashed himself with liquor as he mistakenly tipped the cup where his coyote muzzle would have ended, but he felt Kairo guide his paw to the right place. He mentally thanked the little dude, glad to see he was on board for all this. + +The drink was sweet, and it soaked into his small body instantly. The little dude was going to get *wasted* at this rate. Then the burn of raw cinnamon filled his sensitive nose. "What *is* this stuff?" he asked through watering eyes. + +"Fireball!" Sloppy Collie said. + +"Of course you would drink that shit," Big Ben grumbled, to which Sloppy Collie stuck his tongue out. + +"Huh," Seth said. "I thought Fireball was only, like, a Canada thing." Judging by the confused looks the dogs gave him, it seemed he had said something wack. He would have to be more careful to avoid tipping them off - his leashes could only pull so far. + +"Anyway," Adam said, changing the subject. "*Someone* mentioned fucking earlier - we still on for that?" + +Every dog fixed their eyes on Seth. Some of their looks were hungry, predatory instincts lit up by the sight of increasingly inebriated prey. It would be intimidating if not for the total control Seth held. But what exactly did Seth want to do with that control? + +He looked between the tall, skinny Stoner Fox and the short, muscular Adam. Either of them would have been his type when he had been a buff coyote who could easily bend them in half, but looking through Kairo's eyes changed his perspective. Not just literally, in the way that he now had to look up so much, but also in the exciting way the rabbit's shorter, weaker body (*No offense, little dude*, he thought) made him so vulnerable. + +Deciding to solicit ideas from his captive audience, he turned to Big Ben. "You had your paw up, big dude. What do you want to do to me tonight?" + +The Bernese crossed his arms and looked down, surprisingly shy. "I'd like to, uh..." Seth gave the leash a tug to encourage honesty. "I wanted to tie with you. If you're into that." + +The tent in Big Ben's shorts stretched the tight fabric, and Seth could only imagine how big it would get when he was fully unsheathed. He was unsure whether Kairo's body could even handle a knot, but the idea made his chest flutter and the alcohol buzzing in his blood made it hard to worry about the consequences. + +"I want to huff your musk." Stoner Fox volunteered this information with no tug needed. "Bunnies smell so good." + +"Same," Flannel Jackal said. Then his ears flattened. "Why did I just say that?" + +"Don't be embarrassed," Sloppy Collie reassured him. "You two can take his pits and Adam will take his paws." + +"Shut the fuck up, dude!" Adam said, sounding shocked. "But...yeah, I would be into that." + +The other dogs around them nodded and murmured about fucking his muzzle or sucking his cock or cumming all over him. Heat rushed between his legs. The sight of so many boys eager to use him got Seth going, and holding their leashes was a mondo power trip. + +He looked back at Big Ben. "How about you carry me up to your room?" he asked. + +Without hesitation, the Bernese squatted and wrapped his huge arms around the rabbit's waist. Seth let out a very un-coyote-like squeak as the ground slipped from under his footpaws and his body draped over Big Ben's shoulder. If Big Ben wanted to, he could snap the rabbit's body in half, or just pin him down and *take *what he wanted. Such a submissive thought was alien to Seth but, from the wordless thrill it sent through Kairo, he figured he could give it a try. + +"Wait up!" Adam said. He scrambled after the Bernese, trailed by Flannel Jackal and then by Sloppy Collie and Stoner Fox when their dulled reflexes kicked in. After them followed other canines - an African wild dog, a fennec, a maned wolf, a tanuki, and even another coyote. + +Big Ben climbed the stairs and stopped in front of a bedroom. He shifted Seth to free up a paw, opened the door, then unceremoniously dumped the rabbit's body face-first on the bed. Before he could raise himself up, the huge dog crawled over top of him, shading his vision and replacing every smell in the room with aroused musk. + +Seth felt an iron-hard rod grind under his tail. Big Ben moved softly at first but soon picked up the pace, humping so hard that the cheap headboard banged against the wall in time with his weight crashing into Seth's body. When a particularly hard thrust drew a squeak out of Seth, Big Ben stopped immediately. "Too hard?" he asked with concern. + +Seth tried to shake his head, buried in the pillow as it was. "Naw, dude - that was a good sound." + +That was all the encouragement Big Ben needed, and Seth let out another squeak as the Bernese instantly resumed the same pace as before. Hot breath and a wet tongue met Seth's upturned footpaw - likely belonging to Adam, going by Sloppy Collie's comment. Then a different muzzle slid over his other footpaw - he had no idea whose. Since Seth was used to having pads he was more sensitive than expected, but the needy moans of the two boys were worth it. + +Growing bolder, Big Ben bent his muzzle to the rabbit's sensitive ears and gently nuzzled the soft fur. Then he nibbled at the edges, making Seth shiver. When he went on to drag his teeth across Seth's neck, Seth felt the rabbit's body flood with adrenaline in a physiological prey response. It might have been terrifying in other contexts, but here it made his cock pound and hazed his mind with submissive lust. Maybe Seth could get used to this "bottoming" thing. + +"Give us some room, Big Ben," Stoner Fox said. His voice was muffled to Seth's ears, sunk into the mattress as he was. + +Big Ben grunted his assent and pulled back from Seth. It was a welcome respite from the weight and radiating body heat of the big dog, but it didn't last long. Those huge arms wrapped around his waist again and lifted him, and then Big Ben rolled over with Seth on his back on top of him. + +Fresh air flooded his nose only to be replaced by the smell of a half dozen other aroused dogs. At some point, they had whipped out their cocks and most were eagerly stroking. He felt Kairo get excited at the sight of all these guys getting so hard for him - Seth hadn't even hypnotized them other than to loosen them up a little. + +Sloppy Collie had his shorts around his ankles, which he nearly tripped over as he came toward Seth. Kicking them out of the way with an embarrassed giggle, he knelt between Big Ben's legs and stripped Seth of his pants, letting his heavy cock spring free. + +Without hesitating, he took Seth in his muzzle. It had been so long since Seth had felt that stimulation that it was shocking in its intensity at first, but soon the pleasure sunk into his mind and body and his eyes fluttered shut. *This *was what he had been missing. + +Big Ben's continued humping and grinding forced Seth to lightly face-fuck the collie, and the dog lived up to the moniker Kairo had given him as slobber drizzled down his shaft. Big Ben's tight grasp rendered Seth helpless to resist the devoted laps of the dog's tongue, making the sensation of the warm, wet sliding all the more powerful. + +Flannel Jackal shoved his muzzle into Seth's pit without bothering to remove his glasses, tilting them crooked over his half-closed eyes. As promised, Stoner Fox took the other side, huffing as deep as he would from a bong, and the tongues of Adam and the tanuki resumed worshiping his footpaws. The boys were using every part of him, he thought wonderingly. + +A small fennec hopped up onto the bed and crammed into the little available space to stand over Seth. "I'm gonna cum," he panted, paw working frantically. + +There was something hot about how little time it had taken the guy. "My muzzle's right here," Seth said, and opened it invitingly. + +The fennec slipped in tentatively at first, then deeper when Seth moaned at the taste and warmth. It almost triggered Seth's gag reflex, but he realized he could reshape Kairo's throat to better take it with a slight exertion of ghost power. With that done, he craned his head forward to take the fennec to the knot. + +Looking astounded to find no resistance, the fennec moaned and worked his hips eagerly. In seconds, he was pouring his load down Seth's throat, so deep that he didn't taste it even as he felt the throb on his tongue. + +Big Ben grunted, "Good boy," in Seth's ear, making him shiver again. + +"T-that was really good," the fennec said weakly before dismounting. + +When he was gone, Seth saw Sloppy Collie looking up at him agape, drool-slick cock in one paw. "Wow, you can take it deep." + +Seth grinned. "Lots of practice." + +Sloppy Collie stood, revealing that he had been stroking himself to the point that his knot was red and swollen. "I'll have to try some of that." He replaced the fennec over top of Seth and slipped in to the base just as easily despite having at least two inches on him. He even worked his knot in, shuddering his climax as the rabbit's muzzle milked him dry. + +"I've had enough dry humping," Big Ben said. "Are you ready for me?" + +"You know it, dude." + +Big Ben pulled his cock through the fly of his athletic shorts, nearly ripping the fabric as he worked the knot out, and let it flop against Seth's balls. The thing was a monster - so thick that Kairo would have had trouble even getting the head in without tons of prep. Seth shifted Kairo's insides around again to make things easier. + +"Do we have lube?" Big Ben asked. + +"I got you," Seth replied. Another flex of his power and a dollop of green ectoplasm oozed out of his paw, with which he reached down and began to stroke Big Ben. + +"What *is* that stuff?" + +"Don't worry about it.* Carpe diem, *dude." + +"Right. *Carpe diem*." Satisfied, he panted at the sensation of it sliding over his shaft. + +Seth maneuvered his hips to put his tailhole against the head of the dripping cock. Big Ben's push was tentative at first, so Seth forced himself down several inches in one go to show just how ready he really was. The worked-up Bernese readily took advantage and shoved himself in up to the base with a groan. + +Seth may have loosened the rabbit's body up, but the sensation of that huge cock crammed into him was no less intense for it. He had never taken anything but fingers when he'd been alive, and was stunned at how good it felt to get stretched open like this. + +Out the corner of his eye, Seth saw Flannel Jackal stand up on shaky legs and lean forward over the bed. Without warning, a rope of hot seed shot across Seth's chest and seeped into the fur. + +Adam pulled himself from Seth's footpaw, a trail of saliva still connecting his muzzle to the toes. "Dude! You can't just cum on someone's fur without asking!" + +"It's fine," Seth assured him. He produced another glob of ectoplasm in his paw, this time formulating it into a kind of fur shampoo that easily separated the cum from the hair. There sure was a lot he could do with the power of all those phones, Seth reflected as he shoved his cum-covered digits into the offending jackal's muzzle. + +Another cock suddenly arrived in front of Seth and forced itself down his throat. Apparently taking Seth's "It's fine" as permission, more dogs came over Seth's chest, muzzle, and footpaws, until his head was dizzy with the smell of seed. + +Stoner Fox groaned and spurted his own load directly onto the bed, eyes clenching shut. + +"What the hell?" Big Ben growled. "Cumming on my sheets isn't any better, you stupid mutt." + +"Sorry," Stoner Fox muttered. "I couldn't hold it." + +Setting his annoyance aside, Big Ben continued thrusting away. He wrapped his arms tighter around the small rabbit, holding him in the perfect the perfect position to pound Seth's pleasure button. + +Seth and Big Ben began to float over the bed, and Seth turned them over in the air so that Big Ben could take him from behind. Adam lay down beneath them under Seth's dangling footpaws, using the convenient angle to grind against them. This quickly became too much for the pawboy to take, and he spurted hard enough to hit Seth's hovering body. + +"I'm going to cum," the Bernese grunted. + +He and Evan had always finished at the same time, and he was eager to relive that empathetic experience. "Knot me, big dude!" + +Big Ben pushed the knot in up to the midpoint with an unrestrained howl of neediness. Seth thought for a moment that even his ghost powers wouldn't let him accommodate it, but with another firm thrust it popped in with an explosion of pleasure. The big dog ground against the rabbit's hips, tugging his firmly lodged knot back and forth as jet after jet flooded Seth's insides. + +Unable to hold back any longer, Seth sprayed his own load all over Adam and the sheets below. After so long without those waves of pleasure washing over his body, he couldn't believe how incredible his climax felt. Why didn't living people just do this all the time? + +Seth was so overwhelmed that his grip on Kairo's body slipped, the bright room receding into the twilit fog he had grown used to over the long decades. He felt despair at the thought of returning to it, but even this despair was muted - at least that was a consolation. Then he felt Kairo pull him back in, and the world flooded back fresh and new again. + +Looking around, Seth saw that he and Big Ben had fallen back onto the bed. He also saw that the spent canines had swapped out for fresh new ones, hungry and hard. There was still a long night ahead of him, he thought with a grin. + +--- + +After every boy was satisfied and Seth himself had cum more times than he could count, Kairo resurfaced, still on the same rumpled bed. Big Ben lay sprawled out asleep beside him, muzzle and cock alike drooling. No one else was in the room. + +Despite being back in control, Kairo was too stunned to move. Everything about that had been reckless and dangerous, yet he realized he didn't regret a second of it. He hoped Seth had gotten what he needed out of it too. + +As if on cue, a translucent coyote faded in above the bed, lying casually on his side. + +"Hey, Seth," he said. A familiar tone felt appropriate at this point. + +"Wassup? Thanks for letting me borrow your body, little dude!" He extended his paw. + +One of the basic rules of Phasmology was to avoid physical contact with ghosts, but any risk that carried was long since out the window. Kairo bumped fists with Seth. His spectral form felt as cold and viscous as refrigerated jelly. + +"How was it?" Kairo asked awkwardly. Now that they were separated, he felt self-conscious around Seth. After all, they had shared something that was arguably more intimate than sex. + +"Being a bunny was a trip," he replied. "Your eyes, ears, thighs, teeth, and footpaws are all ginormous, but your tail is so small that you can barely wag it. What's up with that?" + +"I'm...kind of used to it." + +He nodded sagely. "Makes sense." Suddenly, his tail drooped. "By the way, sorry for messing with your throat and your, uh, other junk without asking." + +Kairo's ears grew hot at the reminder. "No problem. Things would have been complicated otherwise." + +"I probably have enough juice to put you back to normal if you want." + +That would be the right decision. Having a supernaturally reshaped body carried ramifications he lacked the education to even guess at. Then he was struck by a sudden fantasy: a bear picking him up at a public park, taking him to the backseat of his truck, and fucking him rough with no prep. "No, leave it," he found himself saying hurriedly. + +Seth grinned in understanding. "Slut." + +"Shut up," he said, returning the grin. + +"Anyway, how about you? How'd you like my brain being all up in you?" + +"It felt..." Big Ben's snores filled the silence as Kairo tried and failed to find the right words. "It felt great." + +"Right?" he agreed enthusiastically. "I came so hard! Even as a bunny, I bet your balls are gonna be empty for days." + +Kairo shook his head. "I don't mean physically. The physical sensations were actually kind of distant, like they were happening behind a closed door." + +"Oh. That sucks." + +"No, it's okay - I felt your *emotions*. You were having such a great time. I could tell you really needed that." + +Seth nodded and his face turned serious. "Yeah, I really did. And I appreciate you pulling me back in when I was about to slip." + +"Of course. I wasn't going to let you leave before you got everything you came for." + +"I hope you got something you needed too," the coyote said. "I mean, you wanted to use your ghost stuff to get in with cute boys, right? You've got their attention now." + +"It wasn't me they were into," he protested. "It was all your personality." + +"I'm pretty sure those guys were into you before I even got here, little dude. Have some confidence!" + +Kairo shrugged and changed the subject. "You said you wanted to drink and get laid one more time. Does this mean that now you'll be...moving on?" + +He scoffed. "As if! I'm going to stick around here and party as long as I can!" + +Kairo laughed. Seth's continued presence was another thing whose ramifications he couldn't begin to predict, but it wasn't worth worrying about. Instead, he picked up a half-empty cup of beer from the dresser. Seth grabbed one of his own, dimming the lights as he drew the power needed for physical contact. + +The rabbit raised the cup. "*Carpe diem*?" + +"Hell yeah!" Seth agreed. "And fuck Florida!" diff --git a/src/content/stories/Cinnamon.md b/src/content/stories/Cinnamon.md new file mode 100644 index 0000000..bd9fe55 --- /dev/null +++ b/src/content/stories/Cinnamon.md @@ -0,0 +1,431 @@ +--- +adult: true +description: "We've all been there: Roscoe made a mistake, and needs to make it up to his boyfriend. The problem is, his boyfriend is a powerful fae exchange student with his own ideas about fairness. Who knows how far he'll take things? (Spoiler: he does indulgent horny stuff about it)" +pubDate: "Mar 1 2026" +title: "Cinnamon" +--- + +The room party is fun, but the whole time I'm there, teasing and ogling and being ogled, I have this nagging feeling that I've forgotten something. It's only in the elevator back to my floor that I remember what it was. *Shit. Felix is gonna turn me into a cockroach.* + +For weeks now, he's been talking about getting me and his thrall together at the con. Just today, he's reminded me at least twice that we're meeting in the room at 9:00. My phone now says 10:22 - harsh digital numbers hanging above multiple unread messages from Felix. + +Waving my key over the ward of our hotel room door, I let myself in. "Hey, guys," I say sheepishly. Hard for a bear to do, but I manage it. + +Felix looks up from a sliding block game on his phone. "Pleasant evening, Roscoe." + +"I'm so sorry, man. I got caught up at that room party in 1406 and totally forgot." + +The rabbit waves this aside. Although he lets go of his phone to do so, it hovers perfectly in place until he returns his paw to it. "It's only natural for you mortals to make mistakes. After all, you need only live with the consequences of your actions a short few years at most." + +"Come on, Felix. I've been dating you long enough to know when you're doing the above-it-all fae thing to cope." + +"I *am* 'above it all'. I can *literally fly* 'above it all,' Bear Roscoe." + +"Still, it's okay to say you're upset." + +"What could possibly indicate that I'm upset?" + +"For one thing, you've stuck Art to the ceiling." + +The thrall dangles from a corner above the TV, an upside-down laptop open on his crossed legs. The otter's small ears twitch at the sound of his name, and he looks down at me with his typical brain-wiped grin. "Hi, Roscoe!" + +"Yes, well...I did not 'stick Art to the ceiling' out of anger," Felix assures me. "I tasked Otter Thrall to finish editing my midterm paper before the convention and he failed to do so. Since our original plans did not materialize, I've set him to do so now." + +"Sorry again about that, Master. I got so excited about the con that I forgor." + + Felix snaps the digits of his paw. "Back to work." Art's face goes slack and his webbed paws start racing across the upside-down keyboard. The rabbit *tsks* at his thrall. "Do no mortals have respect for the verbal contract?" + +I set down my stuff, feeling particularly guilty when I set the neon mesh skirt I'd been wearing on top of the pile. "Okay, glad to hear Art is making it up to you. Is there anything *I* can do to make up for showing up late?" + +Felix's eyes flash - literally: his glamour shimmers, and for a split second I see his three fluorescent yellow orbs staring me down. *Yep. I'm definitely getting turned into a cockroach.* + +He swings his legs off the bed, hops down, and strides toward me. The rabbit is a full head shorter than me, so to make eye contact he has to swivel his ears out of the way before looking up. I've always found that adorable. But right now I feel uneasy with the way those lapine red eyes pop out of his stark white fur. + +"A new contract, then?" he asks. + +I swallow. "Yeah. New contract." + +His muzzle softens into a grin that shows off his buck teeth, gnawed to a perfectly manicured shape. He stands on tiptoe, matching my height thanks to his long footpaws, and plants a kiss at the end of my snout. "You know me too well." + +As is typical for a fae, Felix is obsessed with deals, language games, and trickery. It's rare that we can even decide where to go for dinner without me having to solve a riddle or two. He thinks hard for a moment, then smiles. "To fulfill the original purpose of getting to know each other, perhaps we could play a game. All *three* of us." With a wave of his paw, Art comes unstuck from the ceiling and drifts down to the bed. + +"What game did you have in mind?" I ask. + +"The kind of game you like." + +"Boomer shooter?" + +"It *might* involve you quaking, and it *may* end in your doom." + +I groan. "Well, whatever. I trust you." + +He raises his eyebrows. "You grant me open-ended permission to set the rules?" + +"No way." I was reckless with my words; it's a wonder he's giving me a chance to rephrase at all. Putting on the best legalese I've picked up from him, I say, "I, Bear Roscoe, consent to one game of Fae Felix's choosing, so long as it does not not involve permanent damage to the mind or body of any participant. *Or permanent change*," I hastily add. + +The otter stretches and blinks away his trance. "Good save. I had to learn that one the hard way." + +Felix considers this, then nods. "Art, do you agree to the terms Bear Roscoe has proposed?" + +"Yes, Master!" + +"Then I declare it done," Felix says. There's no need to shake paws or sign anything; a cold wind carrying the fragrance of moonflowers signals that binding magic has flowed from the fae realm to seal the pact. "Allow me a moment to prepare my things." + +With that, he goes to the closet and pulls out a Pelican case, the kind meant to hold expensive cameras. It's covered in stickers, some of which move their eyes around the room with some form of sentience. One in particular draws my notice: an unassuming Bad Dragon sticker, loaded with at least a dozen wards protecting the case from intrusion. That familiar logo contains so much power that it's as terrifying as the maw of a literal dragon. + +After speaking several passphrases, the rabbit pops the case open. I look away just in time, and I don't look back until I hear it latch closed again. When I do, Felix is wrapping a dark purple cloth around his right paw like a boxer before a match. The cloth hums with magic like the whir of a gaming PC fan at max load. Once his right paw is fully wrapped, he picks up the other item he's withdrawn: a silver vape pen. + +He puts it to his muzzle and draws in a hiss of vapor before letting it out in two streams from his snout. It has a strong undercurrent of cinnamon - unusual for Felix, who usually prefers it unflavored. Underneath is the familiar smell of morning dew - the fae equivalent of food and/or alcohol when they're in the mortal realm. Against the Internet's advice, I tried smoking it once. I couldn't see straight for a week, and it took even longer for the unicorn horn to disappear. Even that wouldn't have been so bad if the horn had least been on my head. + +"Ready?" Felix asks. + +I shrug. "As ready as I can be." + +"Then we begin. Sit down beside Art." + +Art is on the room's second bed, a shorter, narrower one made for smaller species. Felix and I haven't used it all con, so I lower myself carefully to gauge whether it'll hold my weight. It groans in protest and I have to curl my legs under me to be able to sit on the edge, but it holds. + +Felix leans against the dresser in front of the TV and folds his arms in front of him, tucking the cinnamon vape in the crook of his elbow. "In case you were wondering, the three of us *are* going to fuck - as if there was any doubt of that." The rabbits nods to Art. "You will get to be under my footpaws." + +Art nervously pulls at the webbing of his paws and pushes his legs together. "O-okay. If that's what Master wants." + +"And you," the rabbit nods to me, "will get to be between my legs." + +I still want to get to know Art properly tonight, since he's Felix's closest thrall - but it seems like that'll happen the way that's typical for me at cons: fuck first, small talk later. My body wouldn't give me any other choice anyway. Between midterms and con prep, it's been over a week since I last bred Felix, and I'm practically vibrating at the thought of getting to do it again tonight. Faeboy pussy should be a Schedule I enchantment. + +"So, what's the catch?" I ask. + +Felix nods. "A perceptive question, Bear Roscoe. The 'catch' is that only *one* of you will be allowed to cum." + +I growl. Edging and denial have never been my go-to kinks; getting worked up only to end frustrated is the kind of thing that straddles the line between "punishment" and actual punishment. + +"So, how do we decide?" Art asks. There's a nervous squeak in the otter's voice, so I guess he feels the same way. + +"*You* don't decide anything. It's to be a contest." Without looking away from us, Felix moves his thumb as if operating an invisible remote control and the TV flicks on. "Whoever can keep their eyes on the screen longer wins." + +"Huh?" Art asks. + +Felix takes another draw from the pen and when he breathes out the cinnamon-scented vapor catches the blue light of the hotel channel. "Don't worry - it's harder than it sounds." He touches the TV with his right paw - the one wrapped in the enchanted purple cloth. It flicks between several channels, then lands on a cartoon in which bright, colorful dinosaurs argue over who should get to eat a fallen coconut. + +The cloth glows, and the image on the screen wavers as its magic interferes with the signal. The cartoon dinosaurs stop what they're doing and look confused for a second. Then they stretch. Their two-dimensional bodies distort farther and farther until they become fields of color that fill the whole screen. The colors start to move with purpose, curling around themselves and spiraling inward. + +I growl again, but this time it sounds needy even to my own ears. Hypnosis *is* one of my go-tos, and Felix knows it. The more I've played around with it, the harder resistance games like this have become. He knows *that* too. + +"*Ooh*, it's a hypno thing!" Art says with a giddy look on his face. Then, as pinks and blues start to reflect in his brown eyes, his smile freezes and his muzzle slackens. "Wow, the colors are really...really..." As the little otter trails off, part of me thinks I should stand over him menacingly and bully him into letting me win. I bet he'd do it. + +"Roscoe?" Felix says. "I will grant only this one warning. Stop looking at the otter and look at the screen." + +I brace myself and force myself to face forward like turning a ratchet. The light hits me full in the face like a feral animal pouncing. It really is *pretty*, so much so that that word is the only thought in my mind for several full seconds. + +"May the stronger will prevail," Felix says with a grin. The glamour of his preferred form slips again, and in the corner of my eye I glimpse the sharp teeth that zig-zag crocodile-like from his muzzle. + +I'm grateful for his taunt, despite myself. I was already slipping into the lure of swirling and swirling colors. They're impossibly vivid, and their simple repeating pattern hooks into my brain like a favorite song I can't tune out. I compare it to getting into a flow with a solid shooter game, with every circuits of my brain engaging to meet the challenge. The longer I play, the more the patterns of enemies and projectiles become regular and predictable, just like the spiral on the screen... + +Art raises the back of his paw to wipe his muzzle. Felix sees it too and says, "You're going to drool. Get used to it." + +"Okay, Master..." Art says, and lets his paw fall to his thigh with an audible slap. He's pretty far gone, I realize with satisfaction. And why wouldn't he be with those captivating colors on the screen, swimming closer and closer the longer they play? + +My satisfaction vanishes when I feel a trail of saliva on my own chin. I start to close my muzzle, but I remember Felix's words - "You're going to drool. Get used to it." I know he's right. I should put my energy into resisting instead. + +I have to push back against the trance that wants to pull me down. I can't surrender to the heavy weight that wants me to just slump over into easy, blissful dreams. *Just keep thinking about breeding Felix. How good you're going to feel after putting a load in him - how relaxed, heavy and sleepy...* I shake my head clear. *No - think about the* look on his face *when he sees that you've won.* + +The spirals shift their colors away from the cartoonish pinks and blues and into earth tones - clay, gold, and a burned red that I can practically smell waves of cinnamon wafting from. There are whole worlds in those never-ending curves. I get totally immersed in one just as the next one appears. It's so hard to keep track. It would be so much easier to close my eyes and let my brain rest. Even just to close them halfway. Having been dropped by Felix before, I know it would feel *so good* to let it happen. + +As my eyes flutter shut, Felix brings that silver vape pen to his muzzle and takes an extra long draw. This time when he exhales, he blows a huge cloud of vapor in our direction. It moves like syrup, against all laws of physics, and comes to rest in a thick mist around Art and I's heads. The smell of cinnamon rushes up my snout and shifts all the hues in the room to the warmer end of the spectrum. I'm sure that if I could see myself in a mirror, my eyes would be totally orange and red. + +Thankfully, the vapor breaks up the pattern of the spirals on the screen. I have to struggle to remember why I want to fight this bliss to begin with, but after a moment I manage to use the break to shake my head and claw my way back to consciousness. However, the relief doesn't last long. + +"*Ooh*," Art says. + +I see it at the same time. Every drop of moisture in the air reflects the intense spirals, refracting them into kaleidoscopic galaxies. The smell of cinnamon rolls and pumpkin pie overwhelms me and the room disappears. I float in a world of infinitely faceted gems, each more soothing and fascinating than the last. I know I can't fight for much longer. I just want to let them envelop me and pull me down deeper and deeper. Deeper and deeper. + +The light cuts out. "It is decided," a voice says. + +I blink, forcing my eyes to adjust. The spirals are gone from the screen, and the vape cloud disperses rapidly. On the TV, the cartoon dinosaurs look around in confusion, saying their lines haltingly as they struggle to remember the storyline they were acting out before. + +Art wipes his muzzle again, his eyes still half-closed. "Um, who won, Master?" + +I realize I don't know either. Did I actually slump over and close my eyes, or did I just badly *want* to? The trance is getting hard to remember, other than the bliss and the all-consuming smell of cinnamon. I couldn't even say how much time has passed. Suddenly, I realize that my paw has been on the bulging crotch of my pants for a while now and quickly pull it away. + +"I could tell you both enjoyed yourselves. Doesn't that make you both winners?" Felix asks with a grin. + +"No," I answer. "Seriously, which of us won? Which of us can get off?" + +He shrugs. "There's an easy way to find out. If you can cum, that must mean you won." + +I've never seen the rabbit this pleased with himself before. "That's not fair," I protest. + +"Shall we review the rules?" He partially unwinds the cloth from his paw, where text in elaborately decorated calligraphy has appeared in white ink. + +1. Fae Felix shall conceive of a game having of its qualities: + 1. Proscription from permanent alteration to: + 1. The mind of Bear Roscoe; The mind of Otter Arthur + 2. The body of Bear Roscoe; The body of Otter Arthur + 2. And possessing the following rules: + 1. Conditional to a players' earliest surrender to entrancement, that player: + 1. Shall not reach sexual climax until morning. +2. This game shall be played once to completion. + +"Nowhere is it said that I must disclose the winner," Felix says. + +Art's rudder tail twitches. "If that's what you want, Master." + +"Come *on*," I say. I was already worked up from the room party, and now - after getting dropped into that mind-melting trance - I really need it. + +"'Come on' is not a recognized term in fae legal code." He grins and his crocodile teeth flicker in and out again. "I plan to make you both *ravenous* before I let either of you get off. *If* I do." + +My muzzle falls open. "What do you mean *if*?" + +"The rules don't say the winner *shall* climax, only that the loser *shall not*." He watches my face for a moment, which I'm sure is as pathetic as its ever looked. My ears pin back in hot embarrassment. "Since you look *so* needy, I will allow the winner their satisfaction. You're lucky I'm so generous." + +"Yes, Master, thank you Master," Art squeaks. + +"That's a good thrall. Roscoe could learn some things from you - and maybe he will." Felix takes another pull from the pen and lets it out. That mulled wine smell is getting etched deep in the air of the hotel room. Every time I get a fresh whiff of it I snap back to the memory of that hypnotic, psychedelic cloud and my paw drifts back to my increasingly sensitive cock. + +I realize Felix asked me something that I didn't catch. "What's up?" + +"I said, where would you like to start?" + +I turn my attention to the otter, an idea forming in my mind. If I need to figure out who gets to cum, I'll just have to get him close as quick as possible. Whether he can or can't get off, that'll give me the information I need. + +I've always thought Art was cute when I've run into him before - usually carrying Felix's stuff, doing Felix's homework, or giving out paw rubs in class. He also seems chill and he's probably cool when he's allowed to have more than half his brain. But none of that matters at the present moment. + +"I say we start by working your otter thrall over. He's waited long enough," I say. + +Art nods eagerly and his big tail flips back and forth. He's such a puppy. I should really get him in a hood and a leash sometime. + +"You heard him, thrall. Get under those big bear paws," Felix says. With a snap of his digits, he points at the floor between the beds. Art slides in as easily as getting into water and lays on his back. + +Paw guys are fun. I never think of my footpaws as hot, but they always tell me how nice they look and taste and smell. They're always so grateful and/or embarrassed about it. It's cute. Plus, since I'm not into them, keeping Art down there should give me some time for the raging lust in my cock to subside. It better. If I don't do *something* about it, I'm on track to agree to anything Felix wants. + +When I step on the otter, my footpaw is big enough to cover Art's whole chest as it sinks into his soft, dense otter fur. He scoots down enough for my toes to wrap around his muzzle and he shoves his snout between them right away. + +"Look at him go," Felix says. "So eager. Say, 'Thank you for making me your pawrest, Mister Bear." + +Art starts to say, "Thank you for-" when Felix suddenly exhales a long, thin stream of cinnamon vapor that hits him right in the snout. The otter's eyes flutter and his tongue flops out, damp and warm against my pawpad. I didn't even see Felix inhale from the vape first this time. + +I turn to him. "Why do you keep taking that stuff? You must have had enough dew to eat by now. Are you just trying to get drunk?" + +"Conventions are all about excess, aren't they?" + +"I guess? But-" + +The rabbit sits on the bed next to me, seizing my attention. He puts one digit of his wrapped paw - carefully - under my chin and turns my muzzle toward him. Face-to-face with those powerful red eyes of his - which, up close, have a visible glow - I shudder. + +"Shh," he says. "I'm not going to hurt you. Not *permanently*, remember?" Before I can answer, he pushes his short muzzle against mine, our whiskers brushing against each other. His mouth tastes like cinnamon, like the warm balm of a spiced tea for a sore throat. Somehow, I haven't gotten enough of it - with every taste or smell I find myself wanting more. + +The kiss feels like it takes place outside the context of the kink scene. It's a "I'm ready to put this behind us" from him and a "I value you and won't take you for granted again" from me. + +Then it snaps back to base horniness, the two of us making out intensely as Art huffs my paws. The rabbit's kissing stays gentle even as he works his tongue deeper down my muzzle. It's hot feeling it rub against mine, but then it keeps going, growing longer and longer until it prods its way down my throat. I start to gag, but he holds my muzzle in place with his wrapped-up paw, and I have to remain still to avoid a nasty shock from the enchanted cloth. + +Finally, he withdraws his tongue and I see its true forked, prehensile shape for a second before it flashes back to normal. I gasp for breath and swallow a mawful of saliva that tastes like cinnamon. + +Keeping his eyes on me, he dangles his footpaws just enough to grip the head of Art's leaking cock, pulling a brand new series of sounds from the otter. "How is Otter Thrall?" he asks. + +"Thrall is doing amazing, Master" Art mumbles. + +"Describe it." + +"Um." He pauses for a moment, either to collect his thoughts or out of embarrassment, I can't tell. "Roscoe, it's really hot how big your paws are and how big bear pads are because, um, that's the best part to put my tongue against." + +"And mine?" Felix asks. + +Art groans and pushes his cock between the rabbit's footpaws. "Soft. Really, really soft, Master." + +Felix shifts position to run one footpaw down the length of Art's cock, making the otter moan and flop back onto the floor. + +Suddenly, the rabbit grabs my muzzle with his wrapped paw and pulls me in close. Where the cloth makes contact, magic soaks into my blood and my head spins like a Gravitron. "Doesn't that paw worship feel good?" he asks me. + +Art's muzzle on my paws had faded into the background, but at Felix's words I pay more attention to it. It *does* feel nice, his warm tongue almost like a massage. + +"I, uh, think Art is getting more out of it than I am." + +"Is he?" + +"Um." With magic filling my thoughts with static, I'm not sure. + +"Can't you just imagine how good each stroke of his tongue feels for him?" + +Art moans as if to agree. + +Felix leans in and whispers in my ear - close enough that his breath tickles. I swear I even feel his forked tongue flick the sensitive hairs. "His pleasure is your pleasure." + +The spell takes hold right away, Art's paw worship growing in significance to dominate my mind. Each time his tongue washes over my pads, my cock throbs with electric pleasure. + +I need more of it. + +I force myself to pull my paw away long enough to stand up from the bed. I tower over the otter, who looks up at me with wide eyes. With a growl, I bring my footpaw down to smother his face, and he resumes his worship eagerly. It feels unbelievable - it's no wonder he's obsessed with this. + +Still on the bed, Felix strips out of his pants and the smell of his wet pussy hits my nose right away - his familiar male musk, but somehow tinged with hot notes of cinnamon. He puts his paw between his legs and slowly teases at his lips as he watches us. + +"See, isn't it good to focus on the pleasure of others?" Felix asks with a grin. + +Art's tongue pulls away as he prepares to respond, but I push down harder with my paw. "Don't stop until I tell you, pawslut." + +He nods and gets back to it. Standing over him, I stroke my cock harder and faster. I imagine cumming right here and now, making him lick it all off my footpaw, and how good that would feel. I at least get the satisfaction of seeing him lick up the drops of precum that I dribble onto him. + +We go like this for awhile. As far as I can tell neither me nor Art get close to cumming, so I still have no way of knowing who won the contest - that is, whether I'll be able to get off tonight. The pressure in my balls is hard to stand; at this rate, if I'm *not* allowed to cum, I'll be up all night waiting to get off the second the sun rises. + +Felix gasps, a surprisingly needy sound of pleasure from the fae, and I turn to see that he's worked two fingers into his pussy, popping them in and out with a shudder. + +I grin. "Does the rabbit need something?" + +He glowers. "A fae doesn't *need* anything from mortals." + +"Uh-huh." + +"But it *is* time to put more work in on Bear Roscoe. *Come*." He snaps and points to the spot in front of him on the bed. The smell of cinnamon singes my nostrils and shades my vision in warm orange. Before I know what I'm doing, I'm crawling to the bed and kneeling between the rabbit's legs. + +"That smell-" I say, shaking my head free of it. + +Art flops down beside me. "It's so *good*." + +"It is, isn't it?" Felix strokes the otter's head. Then the rabbit leans over and exhales a steady stream directly into one of the otter's small ears. His muscles go slack and he flops over Felix's thigh like a noodle - moreso than usual for an otter, that is. + +Art's eyes pulse in waves of scarlet, and when he drools on Felix's leg the saliva sparkles with red glitter. Felix doesn't stop exhaling until his lungs are completely empty, even as the otter moans and grinds against the rabbit's leg. + +"What is that cinnamon stuff doing?" I finally ask. The smell is so omnipresent that I want to cover my nose - but not because I find it irritating. The opposite, in fact; I have to fight to stay as far away from Felix as I currently am. + +"Nothing *permanent*," Felix assures me. + +My ears flatten back against my head. "And what does 'permanent' mean?" + +"Now that you mention it, that particular word was not defined in the contract, was it?" The rabbit pretends to consider it. "Perhaps I'll keep you spice-addicted until, let's say, next year's con." + +"You wouldn't actually do that," I say, sounding as though I'm trying to convince myself. + +"And why not?" + +I realize I may have gotten in over my head as I fail to come up with an answer. + +Art manages to speak through his haze, though it comes out entirely in vowels. + +"You want more?" Felix asks. "Here - you'll enjoy this." He pulls his knees up to his chest, puts his long, fluffy footpaws together right under my muzzle, and draws a deep breath from his pen. Then he exhales another thick, slow-moving cloud. + +My head feels light, but the smell is so enticing that every breath I take erases more of my anxiety. The otter is obviously enjoying himself; surely I could take just *one* year of the brainless daze he's in, couldn't I? + +The spice soaks into Felix's white footpaws and dyes them a deep orange. Every fiber of thick, soft fur there is radioactive with spice and magical warmth. + +He snaps his fingers in front of Art's face, then spreads his legs. "Get back to work, thrall," he says, pointing to one of his lifted footpaws. + +Art squeaks and slides in close. Felix shoves his psychoactive-loaded paw into the otter's sensitive snout and he collapses in bliss. His eyes close, but their scarlet glow is so bright that I can still see it through his lids. + +Art would probably agree to decades of enthrallment to Felix at this point. But I have a thesis to finish; I don't want to have to restart this school year *and* get a reputation as a fae plaything - even as hot as that's starting to sound right now. + +"Felix-" I start to say. + +"Yes, Bear Roscoe?" + +The rabbit's legs are spread, and I'm paralyzed by the sight. I've never wanted to do anything more than I now want to pin him down with my full weight and pound into him like a feral creature. But before I do that, I *need* to clarify what's going to happen if I keep getting exposed to whatever alchemy he's filled the air with. + +Instead, I find myself asking something else. "Please just tell me - are you going to let me cum?" + +"It's not about *let*. The rules are what they are. You either won the contest of wills, or you lost it." + +"Okay, but did I win or lose?" + +"You're having a lot of thoughts for a big breeder bear." He reaches between his legs and runs a long, teasing stroke up my cock, pausing to squeeze gently at the swollen head. + +I could still get out of this. There's nothing in the rules that says I can't go to the bathroom, turn the fan on, and at least get some oxygen into my brain. + +Instead, I push my knees under Felix's thighs, hook my elbows under his knees, and force the rabbit into a mating press. Art is startled out of his trance for a moment but his snout finds its way back to Felix's paw and he resumes his urgent stroking. + +I slip into Felix's hot and waiting pussy as though guided there by magic. As his tight, warm folds caress my sensitive length, I try to let out a growl of pleasure that instead turns into a needy whimper. + +"That poor cock had to wait so long for a hole," Felix teases. "How could you stand it?" He hooks one arm around my neck for leverage, arches his back and wiggles his hips to force me in deeper. Inch by inch of agonizing pleasure wracks my brain until I bottom out inside him. + +"*Fuck*." + +"Even that thought is still too complex," Felix says. His snout looms close enough that his breath brushes my whiskers. + +I know it's coming. But with his legs clamped around me, his arm pulling me in close, his red eyes filling my vision, and that pleasure holding a vice grip on my brain, there's nothing I can do. He presses his muzzle against mine, pries it open with his flexible tongue, and exhales. + +I see stars. Everything becomes red and gold spirals. There are no thoughts anymore, only overwhelming need and blinding pleasure filling my body. I saw in and out of Felix hard enough to slam the bed into the wall with every thrust. + +"That's it, bear. Pump and breed." + +I can't imagine doing anything else. + +Content with his work, Felix lays his head back on the pillow and closes his eyes as I stretch his pussy and Art worships his footpaw. The rabbit runs his paw down his lithe body to his clit and rubs himself in small, quick circles, showing his cute buck teeth with each moan. + +I speed up my thrusts, and as if to slow me down he pushes his free footpaw into my face. Huffing the cinnamon still saturating the fur there, the stars grow brighter. "I like my toys to have many ways of being controlled," he says. "I think I'll make you just as addicted to my paws as the otter. Take a deep breath." His words go directly to my body, bypassing my brain entirely, and I huff so deep that I get dizzy. Sparks of red and orange pop like fireworks, and I envision it as the circuitry of my brain being rewired to *need* this. + +"A big bear like you would make a beautiful paw decoration," Felix teases. "I'd wrap a gold chain around your neck, tie it to an anklet, and keep you where you belong. It would be a small, dainty chain; everyone would know you could easily break it - but you wouldn't want to, would you?" + +I shake my head in automatic agreement, which brushes my snout through the fur of his paw. It's *so* soft, and I'm suddenly struck by its length and the tight muscles behind his powerful hops. Felix notices me staring and pulls the paw back to give me a better view, curling his toes and flexing for me. + +"You would keep staring, just like you are now. I would snap my fingers and you would rub them for me for as long as I wanted, no matter where we were or who was watching. Eventually, I'd have you conditioned to cum your brains out just from touching them, right in front of everyone." + +I want to protest, but then he pushes the overpowering scent back into my snout and stomps away any possibility of thought. I can't even visualize the consequences of this scenario, only the image of being chained close to his beautiful paws at all times. Imitating the way Art treated my paws, I push my tongue out and flick it between Felix's toes. This feels more correct than anything I've ever done. I keep it up as, all the while, Felix's tight pussy tugs and tugs on my aching cock. + +"That's it, bear, that's it, just like that-" Without warning, he convulses from tight ab muscles to thighs; his toes curls against my muzzle and his powerful bunny legs shake as he cums. His glamour slips and his face and body flicker through a Spirit Halloween's worth of alien shapes. The fae loses his practiced articulation of the mortal tongue, moaning in dozens of voices. + +With each quiver, his pussy clamps down on me in tight, rapid flutters. There's nothing that pushes me to the edge faster than feeling someone cum around my cock, and without warning all that pent-up pressure is about to burst the seams. + +Felix's eyes flutter open, fading from reptilian yellow to his preferred lapine red as he regains control of his glamour. Then he grins. "Oh, is the bear close?" + +I don't even nod; I just snap my teeth together and my moans become a feral roar. + +"Then cum - if you can." + +There's no other possibility. Instinct has taken total control, and every nerve ending screams for me to fill the rabbit boy with bear cubs. I'm at the inevitable point of release, so close that there's no doubt that I won the contest of wills, that I'll be allowed to cum and Art won't- + +Suddenly, the otter squeaks out a cry of pleasure. I turn, dumbstruck, as his hips buck, his rudder tail lashes wildly, and, finally, he blasts a thick jet of seed far enough to splatter Felix on the cheek. + +"*Good thrall*," Felix says. He unfurls his long tongue and licks up the ropes of cum from his face and under his chin. + +I put it out of my mind. I'm right on the verge of finally exploding inside Felix's tight pussy, and there's nothing that can stop me, no matter what the rules of the game say. Every muscle in my body is tight, and there's only one way they'll relax again. + +Suddenly, an unseen force shoves me backward. I slip out of Felix with a pop, and the lack of stimulation slaps me like a plunge into ice water. I force my hips forward again, but it's like trying to push through concrete. In desperation, I try to at least use my paw to finish myself, but it's like there's an invisible wall around my cock. + +"Rules are rules," Felix says with a grin. + +Even without further stimulation, it's too late to stop it. Thick, white seed slips out without the pleasure of a real orgasm. Felix laughs as each contraction makes my cock bob ridiculously in the air, sending rope after rope to fall wasted on the bed. Each pulse should be a reward for all of the energy and need I've built up. Instead, they're uncomfortable, involuntary convulsions; instead of ending in relief, they only slow to a stop. + +"Felix, *please*," I say pathetically. + +"Sorry, bear. I couldn't change the rules even if I wanted to. You'll just have to wait until morning." + +I turn to Art. "How did you beat me?" + +He shrugs. "I don't know. I just thought about stuff other than spirals." The otter still pants with relief from his real orgasm, each breath killing me with jealousy. + +"That's settled, then," Felix says. "Otter Thrall, would you like to make Roscoe watch you breed me?" + +The otter's eyes glow even brighter orange and he nods eagerly. + +--- + +Watching Art cum his brains out inside Felix over and over, I'm pissed at first. But the frustration gradually gives way to appreciating just how *hot* they are together. I soon have to go back in for more bunny paw worship, and eventually even get my face under Art's webbed footpaws. + +It's 3:00 a.m. by the time the smell of cinnamon dissipates and things start to wind down. Felix rests his head on Art's chest, the otter's cum still trickling out of his drenched pussy. I'm at the foot of the bed with my snout between their four footpaws. + +"Sorry again," I say suddenly. + +"For what?" Felix asks. + +"For forgetting about our meet up? Losing time at the room party?" + +He waves this away. "On-demand paw rubs from now on is a more than fair exchange." + +My cock jumps with a dull ache of unsatisfied need. "Fuck. I think I might *actually* be addicted to paws now." + +"I thought the game wasn't supposed to do anything permanent?" Art asks. + +"It wasn't. If this *is* permanent, it just means the bear was *always* a pawslut," Felix says with a grin. + +I protest with a growl, but it's weak. + +"Either way, this was fun," Art says. "It was nice to finally hang out, Roscoe. Master talks about you a lot." + +"Oh? What does he say?" + +"Stuff like, 'Roscoe always thinks with his cock. I pretend to hate it, but it's actually really cute.'" + +"Really? How interesting." + +"Art," Felix says in warning. + +"'Roscoe has taught me so much about the mortal realm. He's the best-'" + +Felix snakes his tongue down the otter's throat to shut him up and I watch the kissing turn to yet another round between my partner and his thrall. When the sun finally comes up, my belly feels full of warm, sweet spice. \ No newline at end of file diff --git a/src/content/stories/Cottonbrain.md b/src/content/stories/Cottonbrain.md new file mode 100644 index 0000000..289c272 --- /dev/null +++ b/src/content/stories/Cottonbrain.md @@ -0,0 +1,344 @@ +--- +adult: true +description: "No one knows where the bunnygirls came from, but everyone agrees on one thing: they're irresistible. Well, almost everyone agrees. Dylan wants a return to sanity, but how long will be able to hold out against their adorable temptations?" +pubDate: "Feb 26 2025" +title: "Cottonbrain" +--- + +The junior senator from New York was fucking a bunnygirl on the floor of the Senate Chamber again. C-SPAN2 no longer bothered shooting around it, but did at least filter the audio. Nonetheless, Dylan could easily fill in the moans, wet slaps, and the bunnygirl's desperate pleas to be impregnated - sounds which had become unavoidable over the last two months. + +Forcing those sounds from his mind, he focused on the proceedings, in which Senator Bradley was arguing in favor of *H.R. 16: Allow states to limit public intercourse with Lagomorphs.* + +"So-called 'bunnygirls,'" he was saying, "have spread to every corner of the globe like an invasive species, yet we know nothing about them. Unrestricted contact with them is a dangerous, radical experiment with unforeseeable consequences for the American public." + +The senator was quoting, almost verbatim, part of the testimony Dylan and his fellow biologists had given the day before. He could only hope it would bring people to their senses. + +The bartender set down a second scotch in front of Dylan, which he anxiously raised to his lips without taking his eyes from the screen. + +"Take, for example, what is commonly known as 'cottonbrain,'" the senator continued. "The word is used as a joke, but what if it really were a symptom of some contagion endemic to the bunnygirls' species? What if-" + +Dylan felt a tap on his shoulder, and turned to see an attractive young man in a red jersey smiling down at him. "Hey, sorry to bother you, but do you mind if I change the channel? The Commanders game starts in ten minutes." + +"There's an important piece of legislation being considered right now," Dylan said. + +The man's smile flickered in confusion. "Oh, okay. I'll find another TV." He turned back to the front entrance. "Bro! You coming in or what?" + +A man in a matching jersey entered, this one with a bunnygirl on his arm. "Sorry," he said. "Just got distracted petting this cutie." + +"You're friggin' cottonbrained, I swear." + +Despite himself, Dylan's eyes locked on the bunnygirl. Like all of her kind, she was small - a head shorter than the man she walked with, even from the tips of her long ears - shy, and utterly captivating. Her soft, white fur cried out to be stroked, the sensitive spots on the back of her neck and between her ears to be scritched, and her nervous demeanor to be soothed by any means possible. + +And if that meant getting her full and pregnant, who could deny her? Despite their alien appearance, bunnygirls were undeniably hot and, anecdotally at least, *extremely *compatible with human cock. And they *always *wanted it. + +Dylan could stand up, press her naked, furry body against the wall, and sheath his unprotected cock deep inside her right then. It would feel amazing, and no one would mind - hell, somebody might even reward him with a free drink if he got enough of those musical moans out of her. + +The bunnygirl was returning his stare with a spark of recognition in her huge, sparkling purple eyes. He frowned. Had he seen this particular bunnygirl before? Several had approached him for sex since his arrival in DC, all of whom he had, of course, turned down. Had she been one of them? + +"Come on, bun-bun," the man beside her said. + +She turned her eager eyes back up to him. "Coming!" + +"You sure will be." + +She giggled. "You're so funny." + +That adorable little tail vanished around the corner of the bar and Dylan returned to his senses. He shuddered. Bunnygirls were *dangerously* alluring. It didn't help that, with so much material to prepare for his testimony, he hadn't had time or energy to get himself off in at least a week. + +He drained his scotch and refocused his attention on CSPAN-2, where the Senate clerk was now taking the roll call vote. The vote was expected to break along party lines, the parties having split for "pro-bunnyfucking" and "anti-bunnyfucking" a month prior. So far, it was on track for 50-50, a tie which would be broken by the "anti-bunnyfucking" vice president. + +The camera wandered the Senate Chamber until it found another bunnygirl. She had undoubtedly been waved through security in exchange for puppy dog eyes or maybe a blowjob, and now knelt beside another senator. Unable to resist a closer look at the pretty thing, the camera operator zoomed in. + +Dylan realized with a start that the bunnygirl was with Senator Felzkowski, nuzzling her and receiving enthusiastic pets in return. But Felzkowski was part of the "anti-bunnyfucking" party. Why would she allow herself to be caught on camera like this? + +Dylan's worst fears came true as, when the clerk called her name, she crossed the aisle to vote "Nay." The final vote tallied 51-49 against. + +That bunnygirl's affections had had such convenient timing that Dylan almost wondered whether it had been intentional. Of course, that was ridiculous. Bunnygirls couldn't count to five, let alone fifty. His side had lost, plain and simple. + +Dylan slumped in despair. It was over. His cross-country trip and all his work had been for nothing. At that very moment, as if to rub it in, the man in the red jersey from earlier bent his bunnygirl companion over the bar and began to rut her, not even pausing his conversation with his friend. + +Was everyone out of their minds? How had public sex with bunnygirls become so normalized? If any two humans did what those two were doing, they would be ejected from the establishment or even jailed. + +If this were a Hollywood alien invasion with saucers and ray guns, it would be easier to deal with. But the bunnygirls had no leaders with which to negotiate - they didn't even seem to understand the concept when asked. And no one had yet managed to investigate their warrens without suffering cottonbrained delirium. + +The bartender returned, interrupting his ruminations. "The game's starting, so I have to change the channel." + +"Go ahead. It's over now." + +"Well, I hope the vote went your way," she said, and switched over to the game. "Another scotch, rocks?" + +"Please." She nodded and moved on to take orders from the incoming crowd of sports fans. + +This would be his third drink of the day at only 1 o'clock, but what did it matter? For all Dylan knew, every human on Earth might soon be dead of some unknown bunnygirl virus. + +The man at the other end of the bar surrendered his load to the bunnygirl with a shuddering cry of pleasure. She thanked him over and over, her high, delightful tones momentarily hushing the crowd into appreciative silence. When it was over, he ordered her a carrot juice, which of course the bartender prepared immediately despite the long queue of orders. + +The bunnygirl's supernaturally fertile womb was certain to bear a litter now, Dylan reflected bitterly. Not that it mattered - the man could copulate with a dozen bunnygirls a day and the resulting offspring would be a drop in the ocean. + +Dylan himself could go out right now, track down each bunnygirl that had previously approached him, look into their colorful, mesmerizing eyes, and agree to give them what they wanted. + +No. Someone had to hold the line of sanity, and he wouldn't surrender just because of a minor setback. Tomorrow, he would meet with his fellow biologists and discuss their next steps. For now, he turned his attention to the meaningless game on screen and let his feelings dissolve into a daze. + +"Hi!" a voice broke in. + +Dylan blinked, realizing that several minutes had passed and the game had at some point paused for commercials. Lowering his gaze from the screen, and then down even farther, he saw the recently-inseminated bunnygirl standing behind the bar. + +"The nice bartender lady asked me to help her because she's really really busy," the bunnygirl said. She set down a fresh scotch in front of Dylan. "She also said you looked sad and might feel better if you pet me." + +Dylan had never even touched a bunnygirl before, fearing that unknown contaminants might be spread by contact. However, it was hard to refuse now that one was right in front of him, dumb, innocent, and practically bouncing in place with eagerness. + +He hesitantly reached for the spot between her ears that bunnygirls enjoyed so much. Before even making contact, her fur tickled his fingertips as if with static electricity, and then his palm touched down in her fluff. + +She felt *incredible*. Her fur was the softest thing he had ever felt, and he couldn't resist burying his fingers in it. As he stroked her head, the bunnygirl's eyes fluttered shut and her footpaw thumped happily. His chest swelled with affection, as though she were a long-lost stuffed animal he had missed since childhood. + +The petting felt like it went on for ages, yet it was too soon when the bunnygirl's eyes opened again. "I've gotta go," she said. "That human and his friend said they want 'seconds.'" She practically swooned at the thought. "Can you join too? Please? I can smell that you're horny!" + +He wanted so badly to say "yes." However, there were more important things to worry about than his cock, no matter how achingly hard it may be. Dylan swallowed before responding, "No. I'm sorry." + +"Aw. Well, let me know if you change your mind!" With that, she hopped away. + +Halfway down the bar, the bunnygirl looked back over her shoulder. She met Dylan's eyes one last time, and he saw in them again that strange look of recognition. He wondered again how he would know her or, conversely, how she would know him. + +Once the source of temptation had gone, Dylan sighed in relief. No wonder people got cottonbrained over these things. It was easy to imagine foregoing work and social obligations, returning to bunnygirls for more and more like they were an addiction. + +Dylan *needed *to get back to his hotel and get himself off before he made a decision he would regret. It would help relieve his stress, anyway. He swallowed his drink in one gulp, counted out a pile of cash on the edge of the bar, and walked out. + +"Hey! Sir!" the bartender called after him. "Don't you want your drink?" + +"Already got it," he called back. The bartender must have gotten confused among the rush of orders. + +Outside, the bright spring day did nothing to lift his spirits, but the numbing buzz of alcohol was rising up to take care of that. As he walked the three blocks to the Gallery Place-Chinatown station, he counted three men fucking bunnygirls, a couple walking one on a leash, and a woman giving eager cunnilingus to yet another. + +Dylan lacked the energy to be outraged. The scotch was hitting much harder than he expected but, fortunately, his hotel was only a few stops away. Once there, he could jerk off, sleep the rest of the day, and then book the next flight back to California. Anything more complicated than that was out of reach for now. + +By the time he passed through the fare gate, he was unsteady on his feet and had to pause to lean on a pillar. Chugging that third scotch had been a mistake. *This might be the most drunk I've ever been*, he thought. He found himself oddly proud of this; after all, reacting to current events this way only proved that he was still sane. + +"Oh jeez, are you okay?" + +Forcing his vision into focus, he spotted a chai-colored bunnygirl looking up at him with concern. This one's eyes, unnaturally colorful as always, were scarlet and flecked with fascinating hues of gold. + +"I'm fine," he slurred. "Leave me alone." + +"But you look so sleepy and sick." + +"I'm fine," he said again. "Go away." + +She shook her head. "Nuh-uh. C'mon, sleepyhead, I'll help you to the train." + +Even through the drunken haze, Dylan knew this was unusual. Normally, bunnygirls were so deferential to humans that the lightest admonition would send them scurrying away. + +She offered her paw to Dylan. The padless, fluffy fur, lighter in color than the rest of her body, was tempting. He knew he shouldn't take it, given how worked up he had gotten the last time he touched a bunnygirl, but the trip to the Yellow Line side of the platform would only take a minute. Besides, he *really* needed the support. + +He reluctantly took her paw. It was warm and inviting and, in his intoxicated state, he couldn't suppress a sigh of pleasure at the touch. + +"Aw, sounds like you like that!" the bunnygirl cooed. + +"Feels nice," he agreed. He was too out of it to lie. + +"Yay!" + +She pulled him along one plodding step at a time. Trying to stave off the dizziness, he fixed his eyes on the hexagonal tiles passing under his shoes (and her footpaws) as she led the way. + +Dylan frowned. They had been walking for a long time now, and he *really *needed to sit down. He lifted his heavy head and was surprised to see the end of the platform before him, train tunnels agape on either side of the concrete wall. + +"Where-" + +"It's okay," she said soothingly. "Just relax." + +He noticed a bright yellow sign on the concrete wall, and as he drew closer its text came into focus: "WARREN AHEAD. DO NOT ENTER." Below it lay a section of cracked floor leading down into darkness. + +"Wait-" he protested. He tried to pull away from the bunnygirl's grasp, but she wrapped that plush fur tighter around his hand and held him in place. + +"It's okay, Dylan. You can go to sleep now." + +His muscles gave out as though they had been waiting for permission. With surprising strength, she held his weight and guided him safely to the floor. The last thing he saw before passing out were three more bunnygirls emerging from the warren and sauntering toward him. + +--- + +He awoke in a small, warm chamber, furnished only by the soft bed in which he lay. Its walls were hung with tapestries of elaborate geometric patterns of concentric diamonds, which held Dylan's fascination for a long moment. + +Then he noticed the bare rock behind them. Recalling his last conscious moments, he realized with horror that he must be in the underground bunnygirl warrens. + +He tried to bolt out of the bed, only to realize that his wrists and ankles were bound by ropes attached to each corner of the bed. He was trapped. + +"At last," a familiar voice said. "I was worried I'd given you too much sedative and you'd never wake up." + +Dylan turned to see three bunnygirls cuddling in a pile on the floor. The one who had spoken was the white-furred and purple-eyed one from the bar. To her left lay the chai-furred, scarlet-eyed one from the Metro station, and to her right lay an unfamiliar bunnygirl, gunmetal gray with golden eyes. + +White yawned and stretched, every delicate muscle in her tight frame rippling under her soft fur. The other two followed suit, easing each other awake with affectionate nuzzles. The sight was equal parts erotic and adorable, and Dylan had to avert his gaze before speaking. + +"What are you doing?" he demanded. "Why have you kidnapped me?" + +White cocked her head. "You don't know?" + +"Of course I don't!" + +Chai giggled. "It's because of your testimony, stupid! You said a lot of mean lies about us, like how we're 'invasive.'" + +"Well, we are* literally* invading his planet," Gray countered. Chai stuck out her tongue at this. + +Dylan was dumbstruck. "You...watched my testimony? I didn't think any of you would even understand it." + +White laughed. "As you can tell, we're not so air-headed as we may seem." + +"*Most *of us aren't," Gray said, inclining her head toward Chai. + +"Hey!" Chai protested. + +Ignoring them, White continued, "To be sure, we *do* tend to get a bit dopey on the surface. Our breeding instinct is so strong that it can be hard to think straight." + +She glanced down at Dylan's cock. It was only then that he realized he was naked and, despite the danger, semi-erect. He blushed and looked away again. "Please, just let me go. I'm not a threat to you." + +"No, you're not," White agreed. "But you *could* be an asset." + +"What? What do you mean?" + +"You did well in front of the Senate yesterday. I want to put your handsome face in front of even more cameras, only this time to spread *our *messages." + +The gorgeous bunnygirl thought he was *handsome*? Shaking the thought from his mind, he asked, "What messages?" + +Gray stepped in to explain. "'The bunnygirl population is shrinking, not growing.' 'Cottonbrain is a myth.' ''There is no need to investigate the warrens.'" + +Chai hopped up beside Gray. "'Bunnygirls are cute and sweet and deserve all your pets and big plates of vegetables!'" Gray rolled her eyes at this. + +They were asking Dylan to betray a lifetime of loyalty to the truth. "No," he said. "I'd rather die." + +Gray scoffed. "That's a little dramatic, don't you think?" + +White padded to the bed and sat beside Dylan. Her fur was on the verge of brushing his bare skin, and he couldn't help imagining how wonderful it would feel to press his naked body against hers. His cock throbbed, and he didn't dare look down to see how much harder he was getting. + +"No one wants to kill you," White said. "In fact, I'll even give you a chance to earn your freedom." + +Dylan met her purple eyes. Though they now shone with unmistakable intelligence, they held no malice. "What are your terms?" + +"Prove you're too strong-willed for us to seduce, and we'll let you go. You would hardly make a reliable asset if you could resist us, after all." + +"And how would you try to..." Dylan swallowed. "...seduce me?" + +Chai flopped onto the bed beside White, wriggling with excitement. "Let me do it! He can feed me and wrap me in cozy warm blankets and after that he'll be obsessed with taking care of me! Humans *never *get enough of spoiling me!" She leaned over Dylan, her scarlet eyes practically glowing. "Wouldn't you just *love* to have me as your pet?" + +Suddenly appearing on the other side of Dylan, Gray lifted her surprisingly large footpaw and thumped it down on the bed. "I'll do it. One minute under my paws is all it takes for humans to get addicted. A lot of them are already wired to like feet, not to mention how potent our pheromones are there." + +White held up her paw. "Both good ideas, girls, but I think I know how we should treat our guest." She turned back to Dylan. "In your testimony, you were quite concerned about the explosion in our population and the need to control human-bunnygirl breeding." + +"Yes. What about it?" + +"Well, since you feel that way so strongly, it should be easy for you to resist impregnating one of us. For example..." She looked between Chai and Gray for a moment before finally gesturing to Gray. "Her." + +"Aw," Chai whined. + +Gray grinned down at Dylan, her golden eyes shining. "How about it, future cottonbrain?" + +Dylan's eyes wandered from Gray's muzzle down to her small, shapely breasts, down further to her delicate belly fur, and finally to the pink opening between her muscular thighs. + +Forcing his voice steady, he answered, "What do I do?" + +"It's simple," White replied. "Put that hard, needy cock of yours where it wants to go so badly. Once you've had a taste, you're free to leave. But," she said, raising a digit of her paw, "if you finish inside her, you're ours." + +"Oh, that's so mean!" Chai said. "Humans *love* cumming inside us!" + +Dylan closed his eyes. That was all he had to do? There had to be some trick. Sure, he was horny - more horny than he had ever been in his life, in fact - but there were countless times he had put more important things before sex. + +"I'll do it," he agreed. + +"No shit, you will," Gray said. + +"But, before we start, can we speak for a minute?" he pleaded. "Please, I have so many questions." + +"Boring!" Chai complained. "Get to the sex!" + +"A scientist to the end, are you?" White mused. She paused to consider this. "I don't know. It wouldn't be prudent to give away *all *our secrets should you make it out of here a free man." + +"Not going to happen," Gray vowed. Her grin was somehow menacing despite the adorable buck teeth it showed off. + +"Still," White concluded, "I suppose there's no harm in answering *one *question if it will bring you peace of mind." + +Only one question? Dylan's mind raced with possibilities. + +Where did they come from? How were they related to Earth lagomorphs, if at all? How did bunnygirls gestate and reach maturity so quickly? Did they have some technology that accelerated these processes? How were they able to interbreed with humans? *Why *did they interbreed with humans, if their offspring were all bunnygirls? + +Gray sighed impatiently. "I could have stepped his mind away in the time he's taken to think of something." + +Finally coming to a decision, Dylan said, "What is your *goal *here on Earth?" + +White smiled. "Is *that* what you want to know? I thought it was obvious. We're here to consume your resources and multiply. Your species will provide us food, water, and sperm until the moment the last of you starve, and be happy to do it." + +Still reeling from this answer, Dylan lay still as the bunnygirls removed his restraints. White and Chai helped him to his feet, their paws pressing into his back with such hot pleasure that he imagined them leaving glowing imprints. After he was upright, Gray took his place, laying down on her back. + +"Not like that," White admonished her. "On all fours. Putting your paws in his face would be an unfair advantage. You have more than enough paw addicts on the surface anyway." + +"Fine," Gray grumbled. + +She turned over and propped herself up on her knees and elbows, giving Dylan a full view of her thick rear and powerful legs. Her short tail puffed up above her inviting opening, which was already puffy and wet. In fact, Dylan could *smell *her arousal from where he stood. Did she want this as badly as he did? + +Chai hopped around the bed and lay her head cheek to cheek with Gray's, looking up at Dylan. "This is the perfect spot to watch from! I'll get to see the exact moment he gets cottonbrained!" + +White joined Chai, though she remained standing. "Whenever you're ready, human." + +"Hurry up and let me break you," Gray said. + +Dylan hesitantly placed his hands on Gray's hips. That luxurious fur was no longer merely pleasant to the touch but *intoxicating*. With every passing moment, her enticing scent was growing stronger and her naked form more appealing. If Dylan was going to do this, he would have to do it soon. + +The height of the bed put his trembling cock only an inch below her pussy, close enough to feel the heat pouring out from it. That warmth would feel so good, so *right *wrapped around his shaft and ready to milk out every pulse of seed. + +But he wouldn't let it get to that point. He would only penetrate and withdraw, proving he was stronger than they thought. That *humanity *was stronger than they thought. + +He put one foot on the bed to raise himself up, bringing the tip of his cock against Gray's slick, hot sex. It brushed the velvety lips, making Dylan shiver in anticipation, and his hips thrust forward of their own accord. + +"Oh, fuck," he moaned. He was barely inside the bunnygirl, yet it felt like his entire nervous system had rearranged itself into that single inch. Overwhelming pleasure washed over him, making his head spin. + +He pushed deeper, moving hesitantly as though he couldn't believe what he was feeling and needed to confirm it. He sank in until his hips touched down on the silky fur of her rear, her pussy rippling around his sensitive cock all the way. + +"I still think it should've been paws," Gray groaned. Her breathy voice belied the frustration her words tried to convey. + +All Dylan had to do now was pull out. His cockhead throbbed at the entrance of her womb, ready to spurt enough hot cum to fertilize a litter if he let this go any further. Heedless of his conscious desires, his body burned for it. After all, evolution had wired his cock to all the pleasure chemicals his brain could produce, ensuring that if he found himself inside a warm, fertile mate, he wouldn't stop until the job was done. + +The bunnygirls, wherever they had come from, seemed designed to exploit this primal instinct. But no matter how good it felt, continuing to fuck Gray would only hasten the end of his species. Dylan gathered his resolve and began to slip himself out. + +Her pussy tightened around his shaft as he did, as if trying to hold onto it. It felt even better than it had going in, and he paused at the last moment, not wanting to give up that last bit of rich pleasure. It was like trying to get out of bed after a night of insufficient sleep. + +Looking down, he saw the portion of his shaft still squeezed into her under that gorgeous little tail, and felt how cold and needy the rest of his length was by comparison. How slick and ready it was. Without any conscious decision, he slid back in. + +"There he goes!" Chai cheered. + +"Enjoy it," White said with a mischievous smile. "Just don't *cum.*" + +Dylan was being ridiculous. He was better than this, wasn't he? Yet with each thrust came the thought *just one more*, and each "one more" felt even better than the last. Gray moaned and pushed back against him openly, unable to maintain her stoic facade. Making her feel good made Dylan feel like the most important person on the planet. + +He climbed fully onto the bed and mounted her like an animal, bending over her and pressing his chest into the fur of her back. As he pounded harder and harder, her cries grew louder and more urgent until finally her pussy clenched around his cock as she came. He walked his legs forward to get even deeper inside her, to feel even more of that incredible milking sensation, and with a few more shallow thrusts felt the inevitable swell of his own climax. + +This was his last chance to end this. He could still pull out, have a slightly less enjoyable orgasm, and leave here free. He could tell everyone what he knew of the bunnygirls and organize a defense. + +Then Gray spoke up. "Cum inside me," she whimpered. "I want you to get me pregnant with a litter so bad, please-" + +If the blinding pleasure of his cock hadn't been enough to convince him, Gray's words were. She *really *needed it - somehow even more than he did. She needed this even more than he needed to be free, he thought hazily. + +He let it happen. As if moving on its own, his cock found the deepest part of her and paused there as every muscle in his body tightened around the impending orgasm. Then the dam burst and his eyes clenched shut. Every thought was washed away in the pounding, spurting release. + +Gray babbled her gratitude over and over as rich human seed flooded her insides. Dylan pictured it doing its work, and could only hope it would fertilize every last ovum for her. + +When he could finally open his eyes, he saw Gray panting happily beneath him, with White and Chai looking pleased behind her. + +The bunnygirls were *perfect*. Utterly adorable, impossibly attractive. *Cottonbrain *was exactly the right word; his mind was completely swaddled in the softness of those little tails. Whatever priorities he had had before were distant now. Nothing could be more important than taking care of their needs. + +Basking in the warm afterglow, Dylan looked down at his twitching cock, still buried inside Gray. As it softened, a trickle of seed flowed out around it. He had certainly taken care of *Gray's* needs, he thought proudly. + +"Looks like you lost, human," White said with a smile. + +Still panting, Dylan returned her smile. "No. No, I didn't." + +--- + +Gray still wanted her footpaws appreciated, so Dylan spent an uncountable span of time with his nose buried in her huge, pillowy stompers as she enjoyed a post-coital nap. They smelled and felt unbelievable, and he knew he would do anything to be under them again. He could have shot load after mind-melting load while huffing them, but he knew his cum was exclusively for making more bunnygirls now. + +Fortunately, he soon got the relief he needed when Chai asked to be stuffed full of bunnies next. Now that he had accepted his purpose, he could simply lose himself in the pleasure as he hosed her insides down with seed. When it was done, he tucked her into bed with a kiss on her cute little nose. + +Afterward, White offered Dylan a tour of the warren, which he eagerly accepted. From the velvet seat of a human-pulled wagon, he got to see frolicking crowds of bunnygirls, the strange, spiraling trees that took them between worlds, and the butterfly gardens which reversed their aging. He even saw other humans, scientists like him, hard at work drawing up plans for how humanity could better serve the bunnygirls. + +It was all fascinating, but Dylan was more fixated on White. When the tour was over, he got to give her a bath, a long massage, and yet another bellyfull of bunnies. + +He couldn't believe the lucky circumstance of biology that had brought him here. His body could satisfy those perfect bunnygirls, bring even *more *bunnygirls into the world, and, as an added bonus, let him feel *incredible* doing it. + +After stepping off the wagon, Dylan ran into Gray, who introduced him to the fully-mature bunnygirls he had sired. She had gone to another world to raise them, she explained, one where time flowed faster relative to Earth. Although twenty years had passed for her, she had never forgotten him. He was honored beyond words to hear this, and his bliss only multiplied when she requested another session of paw worship. + +Later, when White reminded him that other humans didn't feel about bunnygirls the way he did, he was dumbstruck and asked what he could do to help change that. She was only too happy to tell him. diff --git a/src/content/stories/Dale Cooper at Anthrocon.md b/src/content/stories/Dale Cooper at Anthrocon.md new file mode 100644 index 0000000..86ede58 --- /dev/null +++ b/src/content/stories/Dale Cooper at Anthrocon.md @@ -0,0 +1,247 @@ +--- +description: "A goofy fanfic written for my partner, who was distressed by the ending of the original series." +pubDate: "Jun 26 2024" +title: "Dale Cooper at Anthrocon" +--- + +Diane, it’s 12:05 a.m. I am lying on a queen-sized bed in room 1004 of the Homewood Suites by Hilton. This room was one of the last available, and it was not rented cheaply. To keep my expenses within the allotted per diem, I have been confining my coffee intake to the complimentary packets provided, which, as you can imagine, has been no easy sacrifice. Otherwise, the accommodations here have been more than adequate. + +You can probably hear the faint sound of music emanating from my portable compact disc player. I have been playing an album continuously in a vain attempt to cover the din of late-night revelry taking place in neighboring rooms. + +The album was sold to me on the pretense that it contained recordings of Tibetan Buddhist chants, but it is in fact comprised of secular folk songs in the Mongol-Tuvan throat singing style, also called *khoomei*. Despite this misrepresentation, these melodious songs have pleasant harmonies that soothe the mind after a long day in the field. I will be sure to dig into the genre more deeply when I next have time off. + +I will now recap the events of the day. As you know, I have been on the trail of Lukas Burke, a.k.a. the Fibonacci Killer, for four months now. I was unsuccessful in preventing his quintuple murder in Houston, a failure which weighs heavily on my conscience, and now find myself faced with the enormous task of bringing this madman to justice before he can carry out an unprecedented octuple murder here in the great Commonwealth of Pennsylvania. + +Upon arriving in Pittsburgh, I arranged a meeting with the woman who had tipped me off to the killer’s movements in the city, a young Ms. Rose. I found a booth in the diner where we were to meet, and ordered a plate of steak and eggs to replenish my energy following the five-hour drive from Philadelphia. Despite the tempting aroma of the nearby brewing machines, I forewent my usual order of pitch-black coffee for the budgetary reasons previously outlined, and opted instead for ice water. + +Ms. Rose arrived eleven minutes after I sat down, and a hostess guided her to the table. The moment she saw me, her eyes went as wide as football goalposts. Perhaps she recognized me from my fictionalized portrayal on a popular television program, or perhaps she was taken aback by the disheveled appearance with which the long drive and humid afternoon had left me. + +Either way, I was no less surprised by her appearance, and found myself unable to recite my planned apology for placing my food order ahead of her arrival. Ms. Rose so short of stature that she could barely see over the top of the table, but, were this the only unusual thing about her, it would not rise to the level of comment. The true anomaly was her animalistic facial features - a mix of feline and canine - and the fact that she was covered entirely in fluffy pink fur, even sporting a long, swishing tail. + +Although I had never seen someone like her, I make it a policy not to inquire about another’s physical appearance, much less that of a stranger. There are many types of people in this world, Diane, and something new to learn from each person you meet. + +In any case, I knew of Ms. Rose by her reputation as a freelance journalist. As you know, local journalists are an invaluable source of information when one finds oneself in an unfamiliar place. They are tied in with their community by necessity, and often know a great deal more about goings-on than they ever dare put down in black and white. + +I stood and extended my hand, and she stood on tiptoe to take it in her paw. + +“Agent Cooper,” she said. If you can believe it, Diane, I detected a slight purr in her voice. “I wish it were under better circumstances, but I’m pleased to meet you.” + +“The pleasure is mine, but, unfortunately, we don’t have much time for pleasantries. What can you tell me about the Fibonacci Killer, Ms. Rose?” + +“Please, call me Lilac.” + +“What do you have for me, Lilac?” + +She pulled a brown envelope from her purse and set it on the table. On the envelope was printed the words, “Soon. Love, F.” + +I said, “That’s our man’s handwriting all right. Where did you get this?” + +“I found it at the home of a man who disappeared recently - an Avery Clarkson. The Pittsburgh P.D. missed it entirely.” She frowned. “And they wouldn’t listen to me when I went to them with this information, which is why I reached out to the FBI.” + +“Say no more - I am more than familiar with the small-minded prejudices of local law enforcement. May I open the envelope?” + +“Please.” + +Inside was a snail shell -    yet another object associated with Fibonacci’s Golden Ratio. This one was painted salmon pink. With great care, I used a pair of tweezers to reach into the shell, and found a small square of paper clipped from a magazine. On it was printed the letter “T.” + +I said, “It seems that the Fibonacci Killer really has made Pittsburgh his new hunting grounds, just as you said.” + +“That’s not all, Agent Cooper. Six other people across the city have gone missing, each with shells sent to friends and loved ones.” + +Rudimentary arithmetic revealed that the killer had only to kidnap one more victim before he would carry out his simultaneous execution. + +“We don’t have much time,” I said. “Lilac, as I’m sure you know, our man likes an audience for his murders - the bigger, the better. Now, you know this city better than I. Can you think of a place he would choose as his stage?” + +She nodded. “I know exactly where he’s going.” + +- + +Apologies for the cliffhanger, Diane. I had to swap to Side B of this cassette tape, and took the opportunity to change locations. It is now 12:46 a.m. I am on the hotel’s designated smoking balcony among a dozen young people with cigarettes and electronic nicotine delivery systems. As you can hear, it’s not exactly quiet, but it is a pleasant change of scenery from my hotel room. + +I will resume my story starting now. Lilac and I drove to the place she had in mind, and it was a perfect fit for our killer’s M.O. There had even been posters for the event hanging around the city, but I would have paid them no mind if not for her. + +I opened the car door, but Lilac stopped me with a light touch of her paw. “You can’t go in looking like that,” she said. + +I looked down at my black suit, which I had carefully ironed the night before, and then at the dense crowd surrounding the convention center. Only some of them were animal-people like Lilac, but all of them were dressed in ways that strayed far from the mainstream. + +“You’re right. The killer could be anyone in this crowd, and if he realizes the FBI is here, he’ll make himself scarce. This operation is going to require a more delicate approach. Any advice?” + +“Drive to the Doubletree Hotel up the street. I have a friend staying there who’s good at this kind of thing.” + +Finding parking was so difficult that I was forced to pay a hefty $19.95 fee just to leave my Dodge Diplomat in a mildewy garage. I made sure to get a receipt so that I could add it to my expense report. + +Lilac led me to room 412 and knocked on the door. The woman who answered was a fox - and I don’t mean that in the sense that she was attractive. She was, in my opinion, but that’s neither here nor there. I mean that she was literally a fox - she had orange fur and a long, bewhiskered muzzle. She also bore a regal set of antlers which once again left my understanding of this situation scrambled. + +“Agent Cooper, this is Sly,” Lilac said. + +Sly was already looking at me agape. “Aren’t you the person that they based Dale Cooper on?” + +“I am, but aren’t you a little young to have seen that program?” + +She looked confused. “I saw it on streaming.” + +This wasn’t the first time I had heard mention of Internet-based video services. Diane, remind me to look into a subscription when I get back. Although I prefer books on tape to the medium of television, it would be a comfort to pass an hour or two with Dorothy and the other Golden Girls again. + +Lilac spoke up. “Sly, Cooper needs a makeover. We need him to pass as a furry so that he can catch a serial killer who’s hiding here in the convention.” + +“You said ‘Sly Cooper,’” she said with a laugh. Then her face grew serious as she looked me over. Her eyes were as bright green as a fresh avocado. “We can give him some of Kairo’s clothes and maybe one of their bracelets. Then we’ll trim his hair and do some makeup - we’ll go for a genderqueer look.” + +“Whatever it takes,” I said. “You both are the experts here, and I merely a passing traveler.” + +“He needs a fursona too,” Lilac said. + +“You’re right,” Sly agreed. + +“What’s a fursona?” I inquired. + +“It’s an animal that represents you,” Sly explained. “Do you have a favorite animal, or an animal that you feel connected to?” + +I answered instantly. “I have always held great sympathy for the noble vulture, a beautiful and misunderstood bird.” Sly and Lilac exchanged a look which made it clear that I had made some sort of *faux pas*, so I offered up my second choice. “I also feel a strong connection to basset hounds. As I child, I had one - a very good dog by the name of Beau.” + +Sly nodded. “That works.” + +Sly and Lilac worked quickly to trim my hair into a short undercut, apply eyeliner and dark purple lipstick, and to paint my nails midnight blue. When I looked in the mirror, I saw a whole new man looking back. + +“Good work, both of you,” I said. “If I manage to apprehend this lunatic, I’ll make sure that you receive appropriate commendations from the Bureau.” + +“One more thing,” Sly said. “You’ll need a badge to complete the look.” + +Working quickly, Sly sketched a bust of a basset hound which resembled me to an extraordinary degree, then cut it out and attached it to a backing of stiff cardstock. + +“Now you just need a name to put on it,” she said. + +“Dale Bartholomew Cooper,” I said. + +“No, no, you need a *furry* name. It’s usually a noun, like a color or a food, or an adjective.” + +My eyes drifted to the coffee maker on the dresser, and I remembered how little coffee I had had that day. I said, “How about ‘Beans?’ As in, coffee beans.” + +Sly and Lilac exchanged another look which told me I had said something wrong again. + +Lilac said, “‘Beans’ already…refers to something else in the fandom. Can you think of anything else?” + +I looked around the room for another source of inspiration and noticed a painting on the wall. It was a typical example of unremarkable hotel art and depicted a maritime scene. + +“How about ‘Knot,’ evoking the rigging of a great ship?” + +With an almost choreographed simultaneity, both women slapped their heads with their paws. + +Sly said, “You mentioned coffee before. How about ‘Caffeine?’” + +I snapped my fingers in satisfaction. “Perfect! And I think we could all use some as soon as I crack this case.” + +“I’m sure Kairo could go for some too,” Sly said. Then she frowned. “Speaking of which, where are they? I haven’t seen or heard from them in awhile.” + +“They’re probably still at the hypno panel,” Lilac said. + +It was then that I noticed, with a sinking feeling, that a brown envelope had been slipped under the door while we had been crafting my undercover identity. I picked it up and read the words written in what was by now an all-too-familiar handwriting. It said, “It’s time. Love, F.” + +Lilac said, “Tell me that’s not what I think it is.” + +“What is it?” Sly asked, worry tinging her voice. + +“I’m afraid it is,” I said. I opened the envelope and found another snail shell. This one was a sickly yellow, and contained the letter “E.” + +“Sly,” I said, “You may want to sit down before I tell you this. It looks like your partner Kairo has been kidnapped as the eighth and final victim of the Fibonacci Killer. But I assure you that I will track him down and stop him.” + +“No,” she said, closing her paws into fists. “We’re going to stop him. + +- + +Combining the letters Lilac had collected from the other snail shells formed an anagram of the word “sabotage.” + +“If the killer follows his usual pattern, ‘sabotage’ will be the method of homicide,” I informed my new associates as we hurried down the street toward the convention center. “Are there any large events taking place soon that could be lethally sabotaged?” + +“The dance comp!” they both said simultaneously. + +“The dance comp,” I repeated. “Am I to understand that ‘comp’ is short for ‘competition?’” + +“Yes. And it’s one of the biggest events at any fur con,” Sly explained. + +“You did say he wanted an audience,” Lilac said. + +“Then that’s where we’ll go,” I said. “Which way?” + +Sly and Lilac led me through the convention center to a small gate, where a security guard was checking attendee badges. Discreetly, I flashed him a more substantial badge - my FBI badge - and he allowed me to pass. We took an escalator to the second floor, where a long line trailed from the ballroom. + +“We don’t have time to wait, but we can’t afford to draw attention,” I said. “What do we do?” + +“I’ll handle this,” Lilac said. + +She tapped the shoulder of the man at the end of the line, who turned around. + +“Excuse me,” she said in a soft voice, then raised a paw. + +I am no stranger to the mind-altering phenomena we call ‘hypnosis,’ ‘mesmerism,’ or ‘mind control,’ but I have never seen it deployed so effectively and powerfully as when the pads of Lilac’s paw lit up with pink light before the man’s eyes. + +“You don’t mind if we cut, do you?” she asked in a soft voice. He gently shook his head and we moved ahead of him. If Lilac had this sort of power, it was no wonder she was so skilled at uncovering otherwise inaccessible information in her line of work. + +We proceeded this way until we reached the ballroom. Someone was already performing on the stage, a dancer who wore an elaborate goat costume and moved with great agility to a style of modern music which I could not begin to classify. The audience cheered when it was over, and then a panel of judges began offering feedback. + +“What now?” I asked. + +Sly peered around the crowd anxiously. “I don’t know,” she said. “The killer could be hiding anywhere.” + +Just then, a host took the stage to announce the next dancer. “We have something unusual next,” he said. “We have a team of not one, not two, not three, but *eight* dancers. Let’s hear it for the Fibonacci Octet!” + +“Not exactly subtle,” Lilac muttered. + +The eight potential victims walked sluggishly out on stage - coerced, maybe even drugged. All of them were concealed within full-body animal costumes, Sly’s partner Kairo presumably among them. A song began to play that began with a spoken word section: “There sure are a lot of dogs out this evening. Perhaps they can assist me in a song…” + +I reached for my service weapon, prepared to stop the show by any means necessary, but, to my surprise, Sly stopped me. + +“No,” she whispered. “This song is called ‘Bombs Away.’” She pointed to the dancers. “And look at the suits.” + +It took me a moment to see what she meant, but then I noticed the bulges around each dancer’s waist. + +“Bombs!” Lilac said. + +“Brilliant observation, Sly,” I said. “Assuming we survive this, and assuming you have an interest in a law enforcement career, I would be happy to furnish a recommendation to Director Cole.” Realizing my impertinence, I stopped. “My apologies - perhaps now is not the best time.” + +“No,” Sly agreed. + +Lilac exclaimed, “Look!” Her eyes, glowing green like a cat’s, were trained on a distant spot on the high ceiling. + +I followed her gaze and saw a man crouched on the catwalk above. He held a small device in one hand - undoubtedly the detonator for the eight bombs. Here was the killer I had been pursuing for so long. + +Sly was way ahead of me. She raised her paws in his direction, and a strange green glow lit her face. Looking back at the killer, I saw him startle and grab his wrist. Diane, you may not believe me, but half a dozen flowers bloomed from his body and their slithering stems held his fingers back from the detonator’s button. The flowers were peonies, if I’m not mistaken. + +The detonator slipped from his grasp, clattered on the rafter, then fell. Lilac slipped around me and reached the spot beneath it before I could move. She reached her paws out for the fast-falling device, but just barely missed it. + +I was prepared to dive for it before it could hit the ground, but something else snatched it first. I looked up and was surprised to see a ghostly ermine standing beside Lilac. + +“Get going, Agent Cooper,” the ermine snapped. “You have a killer to catch.” + +I nodded, accepting this creature’s sudden appearance as one strange thing among many others. “Right. Ladies, ermine, be safe. I’ll catch up with you later.” + +Sly raced for the stage to help Kairo and the other victims out of their booby-trapped suits, while the judges and audience murmured in confusion. + +Meanwhile, the killer rose to his feet and stumbled for the exit doors. I found a ladder nearby and scrambled up it with ease thanks to the Bureau’s biannual fitness tests. I quickly caught up to the killer, who found himself trapped on a rooftop balcony with no other exits. + +I drew my service weapon, and we locked eyes. “Lukas Burke, you’re under arrest for the cold-blooded murder of twelve innocents, and the attempted murder of eight more. Put your hands up and surrender yourself into federal custody.” + +He looked small and harmless on the other side of my gun sights. Nonetheless, a cornered criminal is a dangerous thing, and I was sure that the diabolical mind of the Fibonacci Killer would not surrender easily. + +“You’re looking good, Agent Cooper,” he said with a smirk. “Gone native, have you?” Of course, ‘going native’ is rightly considered an impolite phrase, but it is my duty to record what he said verbatim. + +“Put your hands up!” I repeated, and cocked the pistol as a warning. + +“Sure, I’ll put my hands up,” he said, slowing raising them. “I’m unarmed, aren’t I? Nothing up my sleeves.” + +The squeak of concealed springs was my only warning before two knives appeared in his hands. He rushed me and tackled me to the ground as I attempted to squeeze the trigger, and the resulting stray bullet most likely landed somewhere near the Duquesne Incline. + +I struggled with him on the ground as he fought me with the ferocity that only a man facing a life in prison can muster. Despite my best efforts, he managed to pin me in place and slowly wrestle one of his knives to my throat. + +“Goodbye, Agent Cooper,” he grunted. + +Suddenly, there was a burst of blue light accompanied by a horrific, otherworldly sound. A stream of unnaturally distorted humanoid figures raced past and *through* the Fibonacci Killer, throwing him aside. They enveloped him in a thick fog for several seconds, screaming and howling. After they dissipated, the killer was shivering but otherwise unmoving. His lips were blue, as if from cold, and his hair had turned stark white. + +I stood and looked toward my savior with some trepidation. A dark gray rabbit with pink hair stood in the doorway. + +“Hey, I’m Kairo.” They had an empty jar in their paw, which they held up to show me. “I have a thing with ghosts,” they said by way of explanation. + +- + +Other than the usual procedural paperwork, that about wraps it up, Diane. The Fibonacci Killer was taken into custody, the snail shells and envelopes were filed into evidence, and the Pittsburgh P.D. has no small amount of egg on their face for ignoring Lilac’s warnings. + +I now find myself with a few days of leave before I’m required back at the Philadelphia offices, and I see no reason not to spend them here at this convention. The people I’ve met are friendly, in their strange way, and have a great deal to teach me about their way of living. It is now 1:31 a.m., and my presence has been requested at a “room party” downstairs. I will be sure to update you on how that goes. diff --git a/src/content/stories/Dreamer in the Dunes.md b/src/content/stories/Dreamer in the Dunes.md new file mode 100644 index 0000000..ecfaf98 --- /dev/null +++ b/src/content/stories/Dreamer in the Dunes.md @@ -0,0 +1,413 @@ +--- +description: "When a young Shere joins a crew of treasure hunters to plunder the Mirage City, he encounters the unspeakably ancient secrets that sleep beneath the sand." +pubDate: "Oct 20 2024" +title: "Dreamer in the Dunes" +--- + +Under a ghostly dawn beyond the firelight of the camp, the desert began to sink. Miles of sterile dunes sagged to form a shallow depression, a wide valley, and finally a colossal canyon ringed by rust-colored cliffs of exposed bedrock. + +Shere winced at the sound of the sand. Its sinister whisper had begun late the previous night, filling his dreams with omens of death and destruction and things better left forgotten. Though the journey through the Khardahai had been long and hard it was only now, so near its end, that he began to feel misgivings. + +"Get your head together, bear," Adalard said, breaking Shere from his rumination. The fennec had approached unseen and now stood on the other side of the fire, boiling water for coffee. + +"I'm fine," Shere said, sounding more bitter than he intended. "I just slept poorly." + +"So did I, in truth." Adalard looked blankly into the fire for a moment. Then his ears lifted and his face brightened. "You should have called me to your tent. I could have tired you out." + +The tension eased and the bear chuckled. "Who would tire out whom? In ten minutes, I would turn you to jelly." + +"Prove it." + +"Some night on the way back, I will." + +Adalard was the only friend Shere had made among the crew. The bear was initially drawn to him because he spoke Aprean, a language close enough to Penemerish for the two to communicate fluently (though the difference in formal registers caused some friction at first). It also didn't hurt that the small fox was attractive, bright, and constantly flirtatious. + +The other hirelings, motley dozens from all corners of Uborea, mainly spoke Doletan or Ellaran and had shown little interest in the foreign bear. As the sun crawled toward the horizon, those crewmates now woke and filtered toward the center of camp to join Shere and Adalard. Somewhere to the west, one of Captain Yesui's lieutenants walked among the tents and hammered an iron pan like a bell to wake the laggards and soon a dense crowd converged around the fires. Uneasy anticipation filled the air. + +Two of Yesui's attendants appeared and erected her wooden speaking platform. The captain wasted no time hopping onto it, and the unruly crowd fell silent at the sight of her. The desert hare's oversized ears and short stature failed to diminish her air of menace, aided in no small part by her habit of resting her paw on her holstered flintlock. + +"The engineers say we have twenty minutes, so I'll spare the formalities," she said in Doletan, and the translators scattered throughout the crowd repeated her words in various other tongues. None spoke Penemerish, of course, but Shere had picked up enough of the local language to follow her meaning. + +"First of all," she said, "if you have a fear of heights, take a strong drink now because when that sand finishes draining, we're going a thousand *kil *down. + +"Otherwise, you all know the plan. When we reach the bottom we split up, grab every valuable in sight, and get back to the lifts the second the sun is over the ridge. At noon, that sand will fill back in faster than you would believe and you don't want to be down there when it happens. + +"One last thing." She tilted her head forward and angled her ears toward the crowd, as she always did when she meant to emphasize a point. "Those who paid for our journey here expect a return from their investment. If any of you fail to bring back enough spoils to pay your share, they will find a way to recover that debt, and their methods of doing so will be infinitely more terrible than anything you will encounter in the Mirage City today." + +She flicked her gun out of its holster, pointed it toward the sky, and cried out, "Who here wants to get rich?" + +This galvanized the crowd in a way the rest of her short speech had not. The hirelings roared their enthusiasm, fired guns of their own in the air, and clinked together flasks of liquor to toast the success of the venture. Even Shere was taken with the positive energy as he and the others made their way to the lifts. + +Working through the night, the crew's engineers had found shallow sand at the edge of what would become the chasm, drilled anchors into the bedrock, and constructed wooden frames from the lumber the party had been hauling since Arkorat. These frames now held huge wooden platforms suspended over the cliff edge by pulleys and thick rope. As the crew approached, the engineers were loading the platforms with stone weights to test their strength. + +Meanwhile, at dozens of points along the edge of the still-deepening chasm, other parties making similar preparations stood silhouetted against the rising sun. It was said that any who set out for the Mirage City returned in riches or not at all, and so its inexplicable emergence every six years drew scholars, plunderers, and explorers from across the continent. + +Shere, who had left the rocky isles of Penemere for the first time only a year before, could hardly resist the opportunity. He had heard legends of the elder places all his life - the Inverted Towers, the Wailing Labyrinth, the Onyx Palace, and so many others, and burned to lay eyes on them. Secretly, he even held a naive belief that he would be the first to unravel their mysteries. + +As they filed into queues, Adalard asked, "Ready to go, bear?" + +"Ready to collect double the loot that you do, fennec," Shere teased. + +"I'll have collected a dozen diamonds before you've crossed your first street, lumbering oaf." + +"As if your tiny paws could hold that much, runt." + +A cry from the engineers drew Shere's attention. He turned in time to see one of the ropes snap under the strain of the test weight, the platform and its cargo silently vanishing over the edge. + +Seeing the startled look on Shere's face, Adalard said, "Don't worry. I overheard them saying they would overload one of the lifts intentionally. That way they know how much weight they can handle." + +Shere could not stop thinking about the fallen platform. Hundreds of tons of sand would soon return to smother it, and it would remain part of the Mirage City forever. It was hard not to imagine himself or Adalard suffering the same fate, becoming dessicated corpses swallowed by the whispering sand. Moreover, as he looked at the dumbfounded faces of the engineers, Shere was not so sure that the break really had been intentional. + +Captain Yesui clapped her paws on both men's shoulders. “Enough dawdling. Get on board.” + +Shere swallowed his fear and followed Adalard to the nearest lift, one which already held a dozen hirelings. With one glance at the bear's massive frame, however, the engineer manning it pointed Shere to another with fewer passengers. + +“See you at the bottom, then,” Adalard said as they separated. + +“Remember,” Shere said. “Double.” + +“And what should you do for me when you lose? I’ll be thinking about that all day.” + +The moment Shere crammed in, shoulder to shoulder with the others, Yesui called out, “Rooftops!” She waved frantically for the engineers to start lowering, and the platform lurched alarmingly under Shere’s footpaws. Whatever doubts he had, there was no turning back now. + +Overtaken by curiosity, he dared a step closer to the edge and looked down. The rock wall plunged through cavernous gulfs of warm desert air, making the bear's head spin. He silently willed the engineers to make the descent a quick one. Whatever evils the Mirage City held could not be worse than this wretched lift, he thought as the platform swayed nauseatingly in the wind. + +Although Yesui had announced the emergence of rooftops, Shere could only make out the spires of the tallest buildings, which looked more like scattered boulders from this height. Nonetheless, there was a change in the air. It might have been Shere's imagination, but it felt as though something was waking up. Primordial instinct told him to turn back - that this place was better left to the wastes. + +The others aboard obviously felt it too. The mouse to his right clenched his eyes shut and repeated a mantra in a language Shere did not recognize; the coyote to his left had her eyes firmly fixed on the platform below her footpaws to shut out the knowledge of how high they stood; and there was among them all obvious anxiety in the bristle of fur, puff of tails, or flattening of ears. + +A sudden creak in the ropes drew Shere's attention, unmistakably the same sound the other lift had made before it failed. He shot a look up the cliff, saw the panicked flurry of the engineers, and was again reminded of his perilous height in the delay between the sight and the sound of their cries. However, they were not rushing to secure the ropes which held Shere's platform. Rather, they buzzed around the adjacent lift - the one which held Adalard. + +Shere looked at the fennec, who met his eyes as the others on his platform chattered nervously and scrambled to keep their balance. Then two of the four ropes snapped. + +"Adalard!" Shere cried. + +As the platform fell open like a trapdoor, the fennec moved with lightning speed to grab its top edge while most of his fellow passengers toppled and were swallowed by the soft sand below. The others managed to keep hold of the two remaining ropes or to hook their claws into the wood, but with the descent barely half over it seemed doubtful that they could hold on long enough. + +With Adalard too far to reach, he could do nothing but call out to him, "Hold on!" and, craning his neck, bellow up to the engineers, "You stupid fools!" The others beside him likewise shouted impotently to their friends and comrades, with nothing to do but watch and wait in terrible dread. + +A third rope frayed. When it snapped, the platform, now supported at only one corner, spun and sent several more hirelings tumbling to the earth below. This was how Shere noticed that the ancient city was now fully uncovered - in the sight of bodies snapping upon balustrades, skulls shattered in the shadows of marble colonnades, and black stone streets splattered with bright red. Was this what he had come so far to see? + +Adalard managed to keep holding on, but Shere saw the fennec's small body trembling with the strain. The final rope lasted one minute longer, and then the platform and its lone passenger plummeted to the earth. + +Shere roared in inarticulate grief and rage, unable to take his eyes away as his friend crashed onto a sloped rooftop, rolled to the street, and then lay still. The moment the platform was low enough, Shere leapt off and ran to kneel beside him. + +To his surprise, the fennec opened his eyes and looked up at the bear. "I think I broke something," he grumbled. He tried to raise himself up, but screamed in pain after only a slight movement. Looking down at his leg, he said simply, "I was right." The leg bent at a grotesque angle, and blood was blooming through his trousers. + +"You're going to be all right," Shere said. "We'll take you back up the lift to the healers." + +"Don't be ridiculous - *we're *not doing anything. You need to get out there and start looting." + +Turning back to the platform, he saw the hirelings he had ridden with scattering down the street, at most casting a guilty glance his way. "I'm not leaving you." + +"Yes you are," came the voice of Captain Yesui. "I'll make sure he's taken care of, but right now you have a job to do and not much time to do it." Only a portion of her attention was even devoted to him and Adalard as she scanned the streets, long ears swiveling. It was only when Shere didn't move that she glared down at him. "Do you want to be rich, or do you want to rot in debtors' prison? You think crying over your boyfriend helps either of you? Get going now and maybe you'll be able to cover his share." + +Shere asked, dumbstruck, "You're not seriously expecting him to still settle up, are you?" She only looked coolly at him. + +Adalard grunted, "Run, you stupid bear. I'll be fine." + +Shere growled in frustration. In a choice he would later look back on with shame, he forced down his pride and conscience and took off down the street, leaving Adalard behind. As he did, he overheard Yesui say to one of the engineers, "We're down two lifts. How does that impact our expected haul?" + +Even as the sun climbed, the high cliffs kept the Mirage City in shadow under the red and purple glow of dawn. The dead city was grotesque in its scale, far larger than it appeared from above, and lavishly ornamented at every cornice, arched window, and twisting spire. A sprawling cathedral of a city long since ravaged by time, its finer engravings were eroded smooth, many of its roofs and buttresses long since lay collapsed, and sand barnacles encrusted huge swathes of its once-shining marble and black stone. + +These were the fleeting impressions in Shere's mind as he pounded down the street in his blind search. Everywhere he looked, hirelings were already hammering down doors, throwing treasure from upper floor windows to their comrades below, or wheeling full carts back to the lifts. + +Realizing he needed to break from the crowd, he cut through an alley and entered the first open door he saw. It was impossible to guess the original purpose of the structure but its arched ceiling, so tall that the light did not reach it, suggested a temple. Stained glass like bloody sunbursts washed the room with sickly red, though the windows were so covered in sand barnacles that the light was dimmed and flickered like a candle in the pulsing movements of so many filter tongues. + +Before the altar, two fossas (brother and sister, Shere remembered) toppled and shattered a porcelain vessel containing offerings to long-forgotten gods - gold figurines, jewelry, metal coins, and treasures of less stable materials which had long since turned to dust. + +As Shere watched, a third hireling swept away the treasure as the pair moved like clockwork to haul and shatter the next one. Along with offerings, this vessel also held several nesting sand creatures that unfolded their wings and shrieked at the disturbance. Yet another hireling stepped forward and doused them in lantern oil before striking a match and setting the beasts ablaze. The looting continued apace. + +Noticing an untouched row of offering vessels, Shere started toward them, but a voice from the darkness stopped him. "Where do you think you're going, bear?" He turned to see a Dodrec aiming an arquebus at him, low light throwing his reptilian face in deep shadow. + +"I'm seeking spoils, just like you," Shere answered. + +"This is ours. Go somewhere else." + +"But there's more here than you can possibly carry." + +The Dodrec stalked toward him and Shere raised his paws as he backed away from the barrel of the long gun. "If we let you in on our find, soon all your brothers and cousins will be here. We're not here to share. We're not here for a fun adventure with friends. We're here to *earn*. I'll give you three seconds to leave, and even that's generous. Three. Two-" + +Turning tail and running back to the entrance, Shere fumed as his ears burned in outrage and humiliation. Was nothing on this venture going to be in his control? + +As he returned to the temple doors, he was startled to see a huge shadow flick by outside. Uncertain what it had been, he crouched low and peeked out just in time to see something like a silverfish skitter over a distant rooftop. Based on its distance, Shere guessed it must have been at least two dozen feet long, yet it moved blindingly fast and utterly silently. + +A wide-eyed lemur stood flat against a marble column, panting. "It took him," she said. + +"Who? What did?" + +"I don't even know his name. We had just agreed to work together, and then he was gone." + +Shere shook his head. With the day already getting brighter and hotter, they didn't have time for this. "You should get back to the lifts. You've obviously been through enough." + +The lemur steadied herself. "No. I came here to get my father *out *of debtors' prison, not join him myself." After taking a deep breath, she tore down the street to continue her search for treasure. + +What had come over everyone here? Even Shere himself had become possessed by the lust for treasure, or at least the fear of returning with empty paws. Perhaps it was not so strange - he could not let so many days on his journey come to nothing after all and, moreover, he needed to collect for Adalard. + +No longer feeling safe on the streets, Shere quickly found another building to duck inside. This one was a long, squat structure topped with a golden dome and with wide steps climbing to its entrance. When he reached the open doors and looked into the darkness inside, a strange thought surfaced from the depths of his unconscious mind. + +The Mirage City was not a city at all, he thought - or was only incidentally so for those who once lived there. It was actually vast machinery, the beating clockwork heart of the world, and the sand draining away from it every six years was only a side effect of its slow, rhythmic pulses. Shere shook his head clear of the idea. He had been warned about the strange psychic impressions which struck visitors to the city and knew it was best to ignore them. + +After confirming the interior was unoccupied, he pressed on. Inside was a dark rotunda lined with columns like ancient tree trunks and dotted with colossal statues whose faces were worn completely smooth. When Shere saw the dry fountain in the center of the rotunda glittering with gems, he ran to it as a drowning man would swim for the light of the surface. + +Kneeling down, he drew his knife and dug at the edges of a large ruby to free it but found it was embedded too deeply. The stone would need to be shattered, a task for which he lacked the tools or time. As his eyes adjusted to the dim light, Shere noticed older scratch marks in the stone and, beside his knee, the fallen knife of another would-be plunderer who had made the same attempt. + +Something far above him hissed and he looked up to see that the ceiling was moving. A frothing mass of broad, razor-lined leaves covered the entire underside of the dome and, from the center of the monstrous plant, a dripping tendril like a tongue began to unfurl. + +Glowing green spores puffed out of its many orifices, and Shere's vision dimmed when they passed into his snout. He covered his muzzle and turned back to the entrance only to find that barbed vines now draped the doorway in wait for him. The entire building was a Venus fly trap, and he had fallen into it. + +As he sought any other exit, the increasing light of the spores revealed a marble staircase leading down. As he ran toward it the plant's tongue lapped over the fountain, coating it with syrupy ooze as it blindly sought its prey. + +Shere only chanced a breath when he reached the darkness at the bottom of the stairs, and leaned heavily on the banister until his burning lungs recovered. The bear sensed his time running out with each second that passed, and could only hope that the inky blackness ahead concealed a way back to the street, if not some secret cache of treasure. + +As the plant beast continued its damp slithering on the floor above, he made his way forward carefully, dragging each footpaw slowly along the ground. His caution paid off when the digits of his right footpaw caught on the edge of a crevasse and he stopped just in time. The sound of his claws scraping on the stone echoed for an impossibly long time, and he shuddered to think how long he might have fallen in the darkness. + +Feeling his way around it carefully, he continued on until he rounded a corner and found a plain wooden door. Flickering light spilled from beneath which could only be from the torches of other hirelings. + +"Hello?" he said in Doletan, then repeated the greeting in Ellaran. His voice came out choked as some instinct urged him to keep his voice low. + +When no response came, he eased the door open. The room was indeed lit by torchlight, but the torches stood on the walls in ancient sconces. There were no sand barnacles here and, other than the stale smell of the air, the room stood exactly as it had in ancient times. + +Filling the center of the round room was a large iron cage with no visible lock or door. Inside it, along with a luxurious dresser, table, and bath, stood a four-poster bed flowing with ornate gold curtains. Beneath its silk sheets slept a young oryx with long, sweeping horns. Her white-furred face was peaceful in slumber and Shere could see the rise and fall of her chest as she breathed softly. + +The sight was so astonishing that Shere almost failed to notice what was outside the cage - the dozens of dessicated corpses kneeling around its circumference. All were in the same posture, their arms forced through the bars up to the shoulder in a futile attempt to reach the sleeping oryx. The dry sand had perfectly preserved them, so it was impossible to say how many centuries or even millennia they had been there. + +The fur stood up on the back of the bear's neck. This was an unnatural place, and Shere decided he would rather face the beast on the upper floor than remain here. But before he could turn away the oryx yawned gently and rolled onto her side, causing an amulet at her throat to glint in the torchlight. It was deep blue with a floral burst of blood red in the middle - the same shade of red that had shone so vividly in the temple earlier. + +Shere's eyes went wide. It was suddenly of desperate importance that he possess that amulet. He somehow knew that it offered protection from unspeakable doom and, no matter what danger was here, continuing on without that protection was a far greater risk. + +He stepped toward the cage and tried the bars. Although they appeared thin, all the might of the huge bear could not bend them. Anxiety building, he circled the cage multiple times looking for a weak point but found nothing. + +Finally, he stopped at a place he judged to be closest to the sleeping oryx and slid his arm between the bars, straining his muscles as he reached toward her mere feet away. As he did, he found himself kneeling muzzle to muzzle with an ancient corpse and gasped in horror as he realized what he was doing. Yet he could not pull himself away. He screwed his eyes shut to drive away the temptation of the amulet and decided on a last, desperate course of action. + +Unsure how to address the regal oryx, he called, "My lady! Please help me!" His voice was hoarse and shaking, restrained as it was by that primal instinct to make as little sound as possible in this place. + +In the ensuing silence, the hold the amulet had on him only grew, and his body shook in fear of the mortal danger he faced without it. If the oryx did not answer his plea, he would almost rather meet his end here. + +"Rise," came a slow, soft voice. + +Shere opened his eyes and saw the oryx standing over him, elegant form and scimitar-like horns silhouetted in red torchlight. "My lady-" + +"You may call me Amma." + +The bear rose shakily to his footpaws. "My name is Shere." + +She nodded as though she already knew it. "Has our sovereign returned, Shere?" + +Much as he now wanted to answer anything the being before him asked, he couldn't. "I'm sorry, but I don't understand." + +Amma looked him up and down as though seeing him for the first time. "Ah, I see - you are Untouched." She yawned and stretched, causing her amulet to once more glimmer in the light. + +"'Untouched?'" + +Without answering, she gestured for him to follow. "Sit with me awhile. I desire a moment's company before I return to the long dream." + +The oryx was physically much smaller than Shere, yet her regal bearing and the room's enchanted atmosphere held total control over the bear. As he followed her to the bed, he didn't wonder at the fact that his way had been barred only moments before, just as he did not wonder at the fact that she spoke perfect Penemerish. Similarly, he did not find it odd that the outstretched arms of the dead turned to follow Amma wherever she walked. + +Amma sat on the bed and gestured to a plush chair beside it. Despite Shere's reluctance to soil the velvet with his sandy, sweat-soaked fur, he sat where she indicated. + +"Why have you come, Shere?" she asked. + +"I wanted to see this city," he answered truthfully. + +"Why did you want to see it?" + +Despite the effort he had made in getting here, he now found himself uncertain. "The Mirage City - that's what we call it - is mysterious. I was curious." + +"'Mysterious,'" she said. She pondered this for a long time, long enough for Shere's dazed mind to remember that the sand would soon return, but the dream regained its hold as soon as she spoke. "You do not know its builders, its people, or its purpose?" + +The bear shook his head. + +"If even the Untouched have forgotten, then I truly have dreamed long. What of the Demon Star?" + +"The Demon Star? Our guides followed it, I think. It's the only way to navigate the desert." + +"Of course." She said it dismissively, as though Shere's words went without saying. "But what of its color?" + +"It's pale pink, I suppose." + +The oryx put a hand to her chest and sighed in relief. "At last. Nearly bled dry, as so many of the sky's beating hearts before it. The enemy's last stronghold nearly taken, and then our sovereign will return to us." + +Shere's mouth went dry. "What will happen then?" + +She smiled beatifically. "Something wonderful." + +"Oh." He turned his head as the first trickle of sand began to hiss through a crack in the ceiling. + +"Shere," Amma said. + +His attention snapped back to the oryx. "Yes, Amma?" + +"Tell me a story of your travels. Something to take with me to the long dream." + +Shere had traveled the world only briefly, and could not imagine that any of his stories would be of interest to a creature like her. Nonetheless unable to refuse, he told her of the first time he set out from Penemere. He had sought the fortune-teller of the Allomire Forest only to find her dead and her cabin aflame, and from there strange shapes had pursued him in the night. + +"Hardly an auspicious beginning," she mused, indifferent to the sand which now enveloped Shere's ankles. "Another." + +He described his first voyage to the mainland which, while sailing the northeastern passage, blew perilously close to the Scission. It blew so close, in fact, that several of the crew who were on the port side of the ship at the wrong time lost paws and tails. + +He had hardly finished telling it when she said, "Another." + +Uncertain what else to share, he told of his hard trek through the desert to get here and how his friend lay broken on the street before taking a single step in the Mirage City. + +Amma considered his words for a long time while the sand continued to rise. Then she yawned once more. "I cannot stay awake any longer. Thank you for your company, Shere." + +Despite the spell that had fallen over Shere, he knew he could not allow her to dismiss him yet. "Amma-" he started. Her eyes widened at the unexpected continuation, and he sensed that one wrong word could be the end of him. "May I humbly make a request of Your Grace?" + +She laughed and the tension melted. "What a grandiose way of addressing me. Yes, you may ask." + +The sand had now risen to Shere's knees. "I can't leave here with empty paws. Can you - or, rather, could I request-" + +"Ah, you wish for a lady's favor," she said with a smile. To Shere's surprise, she removed the amulet from her neck and tossed it to him. His paw rose to meet it automatically and the jewel touched the leathery pad with an electric shock. Looking back to Amma, he saw that she continued to wear an identical amulet, a detail which like so many others did not strike him as unusual. + +"Thank you, Amma." + +She nodded. "I hope you find your worth in this world, ungoverned as it is. Perhaps someday we will meet again." With that, she slipped her hooves beneath the sheets and lay down to rest. + +--- + +The spell broken, Shere leapt from the chair in horror, dodging the grasping claws of the mummies as he fled the room. There was no time for caution as he made his way back through the lightless hallway, so he dodged around the crevasses as well as he could by memory. As he scrambled toward the stairs the sand barnacles, swimming freely once more, bounced off him blindly like gnats on a summer's day. + +The plant creature was likewise more lively, unfurling its tongue the moment Shere entered the room. Already panting from his sprint up the stairs, he could not help inhaling a lungful of the glowing spores before remembering to hold his breath. Though the toxins dimmed his vision and nearly caused him to black out, he pushed on and, with one last burst of effort, dove through the door an instant before the barbed vines could trap him inside. + +Outside, the fully risen sun stung his eyes. He took a deep breath of fresh air, only to choke on grains of sand blowing in the wind. Appearing as mysteriously as it had disappeared, the sand now poured down the sides of the chasm in waterfalls, no longer whispering but roaring in murderous fury. + +The street across the alley was blocked by a squid-like monster the size of a house, the sight of which Shere barely had time to process before it swam on. With the sand rising rapidly up the steps, he could only pray it wouldn't follow him as he turned left and half-ran, half-swam through the surprisingly viscous sand. Fortunately the way was uphill, so his huge strides kept pace with the flood and held it at waist level. + +He pressed on past porticoes engraved with elaborate flora, windows of prismatic stained glass, and steepled homes as large as castles. Grains of sand irritated his airways, but he forced his ragged breaths to stay even, knowing that if he started coughing he would not be able to stop. His thick fur was coated as well, and grains seeped through to the skin below and rubbed him raw. + +When he finally reached the end of the street he saw, to his dismay, the platforms already in the air, their passengers frantically sweeping away falling sand lest its weight overload the ropes. + +One more platform remained grounded. Aboard were Captain Yesui, two carts of treasure, and four hirelings, including Adalard who appeared to have passed out from shock. Relief swelling in his chest, Shere waved his paws in the air to signal them to wait as he approached. + +When Captain Yesui spotted him, her face twisted in rage. "Stay back!" she said. When he pressed on, not comprehending her words, she drew her gun. "Back away or I'll shoot you dead, Shere." + +The bear stopped just short of the platform, stunned. + +"Let him on!" a lemur protested in Ellaran - she was, in fact, the same lemur he had encountered earlier outside the temple. The other two hirelings, a goat and a gecko, joined her. + +Yesui roared over them, "Shut up! He would weigh us down too much and, besides, he's late. Shere knew the rules just like everyone else." Turning to him, she asked, "What were you doing out there so long, anyway? Did you even find anything?" + +Shere was not violent by nature, but Yesui's callous attitude boiled his blood. He growled, "You don't even see a person standing before you, do you? Just a tool for earning coin." + +"You would have to actually earn coin for me to see you that way." Still training her gun on Shere, she reached back with her other paw and pulled the nearest rope to signal the engineers to begin lifting. + +As Shere was ready to give up hope, a weak voice asked, "What is that?" It was Adalard, rousing to consciousness and struggling to point at something behind Shere. Following his gesture, Shere saw the squid beast writhing its way up the street toward them. The hirelings on the platform gasped at the sight and drew swords and daggers, little good as they would do. + +"Damn those engineers!" Yesui cried. She fired her gun in the air to get their attention and, with that, the platform finally began to lift. Realizing that Yesui's gun was spent, Shere hopped on. The platform lurched with his added weight, but the ropes held. Yesui reached for her sword, but the lemur jumped in front of Shere and stared her down. Based on the daggers in their hands, the goat and gecko were clearly of the same mind. + +From the speed of the squid, it was clear at a glance that the platform would not rise quickly enough to avoid the oncoming behemoth. "We need to lose weight," Yesui said to them through gritted teeth. "You fools are going to get us all killed trying to save this useless bear." + +Shere and the other hirelings exchanged looks, panicked calculations running through their minds, and the bear wondered whether he really should jump and surrender himself to the Mirage City. It seemed he was fated to die regardless, and the only choice remaining was whether to take the others with him. + +The platform lurched, and Shere only kept his footing by grabbing at the rope. Glancing down, he saw what had caused the shift. Adalard, still on the ground, had just unlocked the wheels of one of the carts and pushed it off the edge of the platform, spilling hundreds of shining coins and goblets onto the sand. + +The hare's already huge eyes went even wider at this as the other crewmates glanced back and forth between her, the squid, and the second cart. Yesui reached for her sword once more, but Shere and the lemur physically restrained her. + +As the other two hirelings shoved hundreds of pounds of ancient treasures down the cliffside, Yesui hissed, "Mutiny! I'll see you all hanged for this." + +"Shut up, or you go over the edge next," Shere said, surprising even himself. Doubly so when he realized he meant it. + +Though the platform was now rising considerably faster, the massive squid was nearly upon them already. It breached the surface, flapped its tentacles against the rock wall for purchase, and pulled itself a full thirty feet in the air to swipe at the platform. Its abominable strength sent them swinging wildly but did no serious damage and, falling back to the sand, it dove down to seek easier prey. + +When the platform stabilized, Yesui pushed away from Shere and the lemur, crossed her arms, and turned away, defeated. + +After catching his breath, Shere turned to the other hirelings. "Thank you all. But why did you do it?" + +"I've seen horrible things down below," the lemur said. "I watched someone die. I won't do it again." + +"What about your debt?" he asked. + +She shrugged. "It will work out somehow. I have to believe that." + +The goat nodded, and the gecko said something in Surisani that Shere did not understand but which seemed to be in agreement. + +Adalard groaned as he sat up. "It's nice to see all this solidarity, but I hope you know you have a lot to make up to me, bear." The others might not have caught his lascivious tone, but Shere did. True to his species, the fox was incorrigible. + +"I'll do my best to please," he replied. + +--- + +Yesui paced behind the desk in her large tent. "You have no idea what you've done," she said. "Debtors' prison is too good for you. You will be made an example of, and your flayed, mangled body will be printed on thousands of broadsheets and distributed across the ten nations." + +His blood now cooled, Shere began to feel dread at what the future held, but he would not show it to the hare. Instead, he crossed his arms and said, "If that's all you have to say, I'd like to go check on Adalard now." + +"That is *not* all I have to say. Not only have you condemned yourself, but you've put your fellow mutineers into ruinous debt. Are the short few weeks you have left to live worth it? Do you understand that even *I* will be in danger of losing my commission over this?" + +"If you need to compromise so much for that commission, you shouldn't have it." Absentmindedly, the bear pulled out the trinket Amma had given him and twirled it between the digits of his paw. + +"Everyone compromises something," Yesui said. "You think miners don't exchange their bodies for their livelihood every day? No matter how much you think you're special, there are rules and obligations which we are all bound by." + +Done listening, Shere stood to go. Perhaps he would incite a *real *mutiny, or perhaps he would steal a few sand sleds and slip away with the others in the night. Anything was better than continuing to associate himself with this. + +As Shere turned toward the tent flap, Yesui's eyes locked on the blue and red gem in his paw. "Where did you get that?" she asked. + +The frantic few hours Shere had spent in the Mirage City were tangled in his memory, and it took him a moment to recall his experience in Amma's chambers and the hold the amulet had had on his mind. "Some dark grotto where it likely should have stayed," he answered. + +As he took another step, Yesui called, "Stop!" + +Shere sighed. "What?" + +"I didn't realize you brought back something of...value. If you give it to me, I may be able to lessen your punishment." + +The bear held up the amulet to the torchlight, where it glowed its unnaturally bright colors. "I plan to destroy this thing. I know now that everything in the Mirage City should stay buried." + +"Amnesty for both you and Adalard," she blurted. + +Shere frowned, suspicious of the unexpected concession. "Why?" + +"The financiers have...special instructions in the case of this particular artifact. I am prepared to offer a great deal in exchange for it." + +"Then you could also waive the debts for the others whose treasure was lost." + +"Already done." + +Yesui seemed sincere, but Shere was still unsure. "How do I know I can trust you?" + +"I am many things, but I am not a liar. I was forthcoming about the consequences of failure on this venture, was I not?" + +"You were," Shere admitted. "But I don't think you understand the evil that this thing represents." + +Sighing, Yesui withdrew a plain metal lockbox from her desk, then turned it toward Shere and popped it open. Inside were dozens of diamonds sparkling in the torchlight. + +"Yours," she said simply. "I'm authorized to give you these in addition to whatever other demands you make, although I think you've asked for more than enough already." + +"Who *are *these financiers?" Shere asked wonderingly. + +"It's better not to ask." She pushed the box forward. "Now, will you take them or not?" + +--- + +The quiet night waters of the Coromack River lapped against the cargo boat as Shere joined Adalard on deck. + +"How's your leg doing?" he asked. + +The fennec slowly stretched it out. "The healers have been good. I should be able to walk without a cane by the time we get to Karth." + +"Where will you go after that?" + +"Ostros, I think. I have a few friends there, and I know a few hovels where I might drink and gamble away my half of those diamonds." + +Shere growled under his breath. "I still regret handing over that amulet." + +The fennec sighed. "Not this again." + +"Whoever funded that venture, whatever they intend with that thing's magic, it can't be good. It should have been destroyed." + +"And then you would be dead, and I and the rest of us would be in debtors' prison." + +"The next time I'm faced with such a choice, I will fight my way out," he vowed. + +Adalard laughed. "You're a stupid bear." + +Letting the matter drop for now, Shere smiled. "Good thing you like stupid bears." + +"And just as well that you like hobbled foxes." + +When their boat docked in Berenmar later that night, they rented a cheap room above a wharfside tavern and proved it. + +--- + +Many years later, Shere learned from a passing traveler of a great earthquake that had struck near the Mirage City, one so strong that it reshaped mountains and briefly reversed the flow of the Coromack. The city did not appear at the appointed hour that year, and it seemed the earthquake was to blame. Perhaps the earthquake had disrupted whatever magic sustained the cycle, or perhaps even destroyed the city entirely. + +The strangest part of this news, however, was what had been sighted on the surface above the lost city. According to several treasure-seeking crews, an oryx draped in the clothing of ancient nobility could be seen gliding over the desert. She looked as though she were deep in dreams, and a train of mummified corpses crawled through the sand in her wake. diff --git a/src/content/stories/Feel Good.md b/src/content/stories/Feel Good.md new file mode 100644 index 0000000..cdf8590 --- /dev/null +++ b/src/content/stories/Feel Good.md @@ -0,0 +1,316 @@ +--- +adult: true +description: "Two bank robbers on the run learn to let go. Wrriten for [Sly](https://www.furaffinity.net/user/slyasafoxibou)." +pubDate: "Oct 13 2024" +title: "Feel Good" +--- + +If it were a movie, it would go like this: + +Art strides down the second floor walkway of the Super 8, highway sounds in the distance. A low angle dolly shot follows, focused on the rolling bag behind him. The camera slowly lifts until it settles on a leather briefcase on top of the bag, and we wonder: what's inside? + +A series of quick cuts: he flicks the lights on, locks the door, and pulls the curtains shut. We think: old Art's up to something. + +Cut to a low of him standing at the foot of the bed, briefcase between us. He looks down hungrily for several seconds, then pops the latches and opens the lid, obscuring his face. Silence. + +He slowly closes the lid, and we see his expression is now abstracted, his gaze fixed on the wall behind us. Is the briefcase empty? Was it actually Janey who double-crossed Art and not the other way around? Then a dopey grin splits his bearded face, and we know he's gotten away with it. + +Cut to a reverse of the briefcase, filled to the brim with bundles of dollar bills, and Art lets out an exaggerated "Yahoo!" over an insert shot of the motel exterior. + +What actually happens is this: + +The door lock flashes red as Art fumbles with the keycard. He's sweating, cursing, and throwing paranoid glances over his shoulders as somewhere nearby a baby cries at the top of its lungs. When he manages to get the door open, he takes the briefcase, kicks the rolling bag into the room, then immediately trips on that same bag as he dashes for the bed. + +He picks himself up and pops the briefcase with shaking hands. Thousands of green bills spill onto white cotton sheets. His mouth is so agape that anyone looking at him would think he suffered a stroke. + +Someone's shadow crosses the window, and he realizes the curtains are wide open. As he runs to pull them shut, he trips over his luggage a second time. + +He takes a deep breath and collects himself. If he has one rule to live by (he actually has dozens of rules, any of which he dramatically announces to be his *one *rule depending on the situation), it's this: "Be George Clooney in *Ocean's 11*, not William H. Macy in *Fargo*." *Be cool like Clooney, Art*, he tells himself. + +He spends some time playing 52-card pickup. The bills are incredibly crisp, like they're fresh off the press - none of that crumpled, dirty feeling of having bounced around in someone's pocket for a month. They remind him of the stiff paper money he'd steal from the pot whenever he played Monopoly as a kid. + +The TV news drones on in the background, but never mentions a bank robbery carried out earlier that day by a criminal duo consisting of one stunning woman and one grubby ogre. Art is relieved, though part of him is also disappointed. + +The more he thinks about it, the more the omission seems odd. Maybe the Iowa stations don't pick up Chicago crime stories, but Art would've thought the robbery would be national news. Maybe the bank never reported it. There *had* been something shady about the place from the start - whoever heard of a First Megalith Bank, and why did they keep millions on hand? The tellers had been way too calm about the whole thing too, almost like they were happy to give them the cash. + +Art finishes gathering the bills together, but he can't get them all to tetris back in the briefcase, so he throws the remainder in a plastic laundry bag. With that done, he can finally relax. + +He lays down and thinks about Janey, again picturing the scene like a movie: she steps out of the convenience store, then stops, head turning. An over-the-shoulder panning shot follows her point of view as she watches Art peel out onto I-80. The reverse shot shows her dumbstruck reaction as snacks and drinks slip from her arms. Cut to a ground shot as they hit the pavement, and we rack focus on a bottle of orange vanilla Coke - Art's favorite. + +Ditching Janey had been the hardest part of the job. Not because of the guilt, but because she was *scary*. She once ruptured someone's liver with a pool cue over a dirty joke, which wouldn't have been so bad except that she announced it first. "If you don't apologize, I'm going to take this pool cue and rupture your liver." Who does that? + +Even though she's a girl, she's always been smarter than him. When he made the decision to double-cross her, he felt like she would know right away, and he expected that at any moment she might preempt him with a bullet to the back of the head - or something worse with a pool cue. Still, despite it all, Janey is the kind of criminal he's always wanted to be - even though she's a girl. + +But none of that matters now. He's gotten away clean from her and the law alike. After leaving the gas station, he had ditched their getaway car for another one he had stashed earlier, switched that one with a *third* car just in case, and now he's safely hidden away on Iowa Highway 9. + +Out the corner of his eye, something metallic catches the light of the TV. Under the desk lies a small metal cylinder, like a bullet casing or maybe a tube of Janey's lipstick. Now that's an interesting thought. Rather than let it go to waste, it might be fun to have some drinks and goof around with it in front of the mirror while he's out here. Just because Janey would hate it. + +He picks it up, and is startled to feel liquid slosh inside it. This must be one of those dye packs Janey talked about, in which case it's a miracle it hasn't gone off yet. He carries it to the bathroom at arm's length and flushes it down the toilet. That stuff can't be good for the plumbing, but that's someone else's problem. + +With that taken care of, he lays down on the bed and sleeps easy. + +--- + +What happens next isn't like any movie Art has ever seen. Some Japanese flick maybe, but he doesn't do subtitles so he wouldn't know. + +Sometime around 3, he wakes to the sound of water. It's quiet, but it shouldn't be there, so he reaches for his .44 revolver on the bedside table while keeping his eyes on the bathroom door. The door is ajar, and through the gap he sees something move - dark and fast. + +He sits up, aims at the door, and pulls back the hammer. Although the long-barreled gun makes him feel as manly as Clint Eastwood, Art now senses how hard it would be to swing it around in the confined space, especially once its heavy recoil becomes a factor. + +A terrifying thought occurs to him. "Janey? Is that you?" + +No answer. The sound has stopped, and he doesn't see any more movement. Maybe it was only the mirror - it wouldn't be the first time he was startled by his own reflection. In any case, there's nothing to do but get up and check the room. With his free hand, he turns on the light, throws aside the blanket, and starts to move, but he meets an unexpected resistance. + +Looking down, he sees that something has come up from under the bed and wrapped around his gun barrel. It's black and shiny and hangs in sticky strands like gum pulled up from a sidewalk. With a startled, disgusted cry, he tries to yank his gun free, but the thing tightens its grip like it's alive. + +Another mass of shiny black slithers up the other side of the bed. He manages to snap the weird tendril clinging to the gun, whips the gun toward the crawling thing, and pulls the trigger. It clicks impotently. Art sees that the gunk still on the gun has managed to clog the cylinder, so pulling the trigger only dry fires. + +He throws the useless gun at the stuff and scrambles back, but the goo on either side of him lashes out and coils his wrists. It's warm, skin-tight, and the feel of it sends a strange shiver through his body. For every bit he struggles, it holds him down tighter. Worse, it's *growing*. With pulsing movements, it flows up his palms inch by inch to his fingers and encases his hands in rounded shells like mittens. + +"Stop it!" he cries to the empty room. "Who's doing this?" + +There's no response as the black slime creeps up the length of his arms. Wherever this stuff is coming from, it seems endless. Pulse after pulse like an incoming tide, it spreads until it completely envelops his arms and the two ends met in the middle of his chest. + +That electric shudder intensifies, fluttering hot through his body like a drug. Is the stuff poisonous? It's numbing and strange, but it almost feels nice. + +Although his arms are no longer tied down, trying to lift them feels like trying to bench 350. Their shape and texture capture his attention as he looks on helplessly. Shining in the low light like latex, they compress his arms and make them sleek, smooth, and clean - no messy body hair to trap dirt and sweat, no lumpy masculine muscles bulging all over the place. + +Then something happens that snaps him back to the present and makes his skin crawl. Those shiny arms lift on their own and reach for his chest. As they do, he notices that they've extruded five puffy circles out of where his palm had been - paw pads? + +Whatever they are, they squish gently against his chest as the arms sweep up and down, caressing his skin and spreading the liquid down to his belly like jam over toast. Its soft texture tightens around him like a hug and compresses his bulky frame into something new - something...feminine? + +*Feminine *is right, he realizes, as the hands - paws - push together a lump of goo like a kid making a snowball and shape it first into one small breast, then another. Then the breasts swell and swell until they reach the size of grapefruits. + +"Stop!" he says again, but his protest is weaker this time. "Let me go!" + +The alien paws scoop up another glob of substance and carry it, inch by dripping inch, toward his face. Art strains his neck to get away, but even if he could somehow get away from *himself*, all of his muscles have grown too heavy. The paws separate, thick sticky strands suspended between them, and smear it on either side of his face. + +The hair on the back of his neck stands up. The stuff is definitely pumping something into his blood, because his thoughts are getting cloudy. Even as it wraps around his neck and grows dangerously close to his mouth and nose, it starts to feel good. The squish of the paws against him feels comforting now, like a birthday party balloon, and when it rubs against the other latex surfaces it squeaks like a song that's just for him. + +A moan escapes his lips, but an alien new sensation interrupts his descent into mindless pleasure. The spreading latex has risen to his ears and now smothers them, crushing them perfectly flat against his head. With them covered, the only sound he can hear is the skitter of small tendrils as they slither around trying to find the hole. He squirms against the discomfort, but it's over in moments and then the stuff has made its first invasion of his body. + +"Please," he murmurs, barely able to form the words and unable to hear them. + +A voice answers. *Relax. You're going to be so perfect*. + +"Huh? Who said that?" + +*Watch this. You're going to like this part.* + +His paws sweep back down his body, squeaking beautifully the whole way. The goo washes down to his hips, and then- + +"Wait - hold on!" + +Drenched in dripping latex, his paws press on his cock, which is rock-hard (when did that happen?) and rub in a circular motion - just like a girl would get herself off. He gasps at the indescribable sensation of those gorgeous paws against that sensitive part of his body, and another wave of pleasure hits him as his swollen cock readily absorbs the mind-melting substance. + +He cums in seconds, and it's better than any orgasm he's ever had - not even in the same category. The paw doesn't stop working him and the pleasure just keeps rolling, making him shoot rope after rope over his chest until his balls are completely drained. + +Looking down, he notices that the goo has compressed his cock just like every other rough angle of his body. Soon it's immersed completely, but the paw doesn't stop working. It rubs and caresses and *sculpts* until a depression forms between his legs. + +*Just like you've always wanted.* + +Art shakes his head - that is, as much as he can with that stuff now hugging it from every angle. Of course he's fantasized about being a girl before - what guy hadn't? - but that doesn't mean he wants his manhood taken away like this. + +Then again, looking down his smooth chest to the smooth place between his legs, he can't deny the beauty, the elegance of that shimmering, streamlined shape. He's never thought of himself as beautiful or elegant before, and there's something deeply fulfilling in it. + +Two lumps of latex rise from the top of his head and gather themselves into triangles - animal ears. His hearing returns with a pop, more acute than ever before. The ears swivel toward every stray sound of conversation and television static in the adjoining rooms and, suddenly, Art realizes that his new form is not just beautiful but *powerful*. + +*That's right. You're becoming something *better*.* + +His paws move to coat his legs - or maybe he moves them, or maybe his will and the will of the liquid latex have become so aligned that he can't tell the difference. Even if he wanted to resist, he can't very well let his hairy legs stick out like that, can he? After they feminize his legs down to the calves, they form shells around each of his feet. His feet then grow longer to form dainty paws, and squishy pads swell out of them just like those on his hand paws. + +A tendril snakes out of Art's chest and slithers toward his open mouth. He resists for only a moment in fear of the thing entering him, but it passes when the intoxicating taste of the substance hits his tongue and erases whatever of his will remains. + +As the tendril pumps wad after wad down his throat, the goo completely encases the rest of his face. It covers his eyes and nose, leaving him blind but, far from being uncomfortable like he feared, it feels like a warm blanket. His face lengthens into a muzzle befitting the twitching triangles atop his head, two eyes form, and he is once more able to see the room. + +Once the shock passes, he lets out a giggle. There is something cartoonish in everything he sees, from the silly painting of a sailboat on the wall, to the bright, happy colors of the wallpaper, to the way his bappy paws leave perfect, wet little prints on the sheets. Art doesn't see things like a movie anymore - real life is vibrant enough. He stands, joints squeaking delightfully, and bounces his way to the bathroom mirror. + +Art's new feline body is not only beautiful and powerful, but *sexy*. She hums a little tune as, keeping her head pointed toward the mirror, she twirls 360 degrees. At some point, a long tail has formed at the base of her spine and she giggles again as she bats at it with her paws. Each time she makes contact, it flings a spray of shiny black droplets onto the tile floor. + +Her wonderful breasts jiggle with every movement, and they're so sensitive that she starts purring at the lightest touch. + +Gosh, she's *really *sexy. She slides a paw between her legs, rubs the squeaking mitten against her fun new hole, and shivers with needy pleasure. She knows she can make herself cum over and over like this, and she *will* - but she feels a new urge as well. + +*I want to make more people feel this good.* + +She waits for a response, but the voice that spoke to her before is now simply her own voice. Therefore, she concludes the thought for herself. + +*I *will *make other people feel this good.* + +[center]*-*[/center] + +Janey gets pulled over outside of Forest City, just ten minutes from where Art thinks he's safe. A cigarette dangles from her lips as she watches the cop walk up in the sideview mirror. Without waiting to be asked, she holds her papers out the window. + +After confirming the information, the cop asks, "Do you know how fast you were going?" + +She looks him over. "I don't know, officer. How fast was I going?" + +The cop does a double take when their eyes meet. Her gaze is reptilian, indifferent to life and death. Men never expect it. Clearing his throat, he says, "Well, I don't know how you do things in Illinois, but here in the Hawkeye State highway speeds cap out at 70. Nowhere is it lawful to break into triple digits." + +"Sorry about that. I won't do it again. Will you be giving me a ticket?" + +"I...yes. Turn your vehicle off. I'll be back in one moment." + +He goes back to the squad car to run her plates. Janey ashes her cigarette, freeing up a hand as she thinks about the 21-foot rule: the statistic which holds that, in the time it takes a trained gunman to draw and fire, an assailant with a knife can cover 21 feet (though, in her experience, it's closer to 30). She likes statistics like that. + +The cop returns and looks around inside the car, desperate to find *something*. When he comes up empty-handed, he reaches out to pass Janey the ticket. She thinks about how many minutes it takes to bleed out from a severed radial artery - between 2 and 5. + +Instead of drawing the knife from the back of her belt, she takes the ticket. "Thank you, officer." + +"Drive safe." + +As he walks away, she glances into the rearview at her pile of clothes which conceal a briefcase. Inside the briefcase are 120 bundles of 10,000 dollars each, making a total of $1,200,000, exactly as the tipoff had said. The amount is ludicrously high compared to the average bank robbery take of $6,000 and there's something suspicious about that, but she can't figure any explanation. + +Whatever it is, it doesn't matter at this point. She got away clean, and even managed to swap the dye pack before Art pulled her little maneuver - *his *little maneuver, she reminds herself for the hundredth time. She hadn't thought the little egg would actually go through with it, but he must have had an untapped reserve of greed that briefly overcame his cowardice. + +No brains, though. According to his phone data he's still at that Super 8, which means he hasn't figured out that his case is full of counterfeits. Bumbling as Art is, he's a loose end, and she's been considering how to do him. The obvious route is to take that stupidly over-sized revolver of his and stage a suicide. Boring, but it gets the job done. + +Janey waves at the cop as he pulls away, then lights another cigarette and starts the engine. "Boring, but it gets the job done." Damned if that didn't describe her entire existence. + +--- + +That idiot forgot to close the curtains again. They're wide open, and the briefcase sits on the bed right out in the open. It can't be this easy - even Art should be smarter than this. Still, despite the buzzing paranoia, she can't imagine him setting up an ambush for her. + +She hacks together a spoof of the room key, touches her phone to the lock, and eases the door open. Either he's in the bathroom, in which case she's already got him trapped, or he's out of the room, in which case she can jump him when he gets back. She supposes he could also be hiding under the bed, but he's not exactly the right size or shape for that. + +Art's revolver is on the carpet. Keeping her eyes on the bathroom door, she tiptoes into the room and crouches to pick it up. It's strangely tacky to the touch, like it's coated with dried syrup. There's also a strange smell in the air - chemical, like a balloon. What has Art been doing in here? + +She discards the thought, cocks the hammer, and listens at the bathroom door. Nothing. The door is unlocked, so she raises the revolver and throws it open. Empty. + +Janey steps back, de-cocks the revolver, and sits on the bed with a sigh. It looks like she has a long stakeout ahead of her. Why couldn't that idiot have just stayed in the room? It would have made things so much easier. + +Just as she thinks this, she catches movement out the corner of her eye, and her reaction is nigh-instantaneous as she pulls back the hammer and wheels toward the target. + +She hesitates. She doesn't know what she's seeing, but it's not Art. Some kind of black sludge undulates out from under the bed and rises into the air like footage of a melting snowman played in reverse. She thought she had seen everything, but this is something new. + +Curiosity stays her trigger finger as the thing finishes taking its shape - a busty cartoon cat woman made of shiny latex. Wide eyes, big grin, tail swishing. + +"Hi, Janey!" it says in a high, squeaking voice. + +Novelty aside, instinct tells her this thing has to die. She squeezes out five booming rounds which turn the cat's center of mass into a trypophobe's nightmare, shatter the window behind it, and fill the room with roiling gunsmoke. When the air clears, Janey sees that the walls are splattered with black goo and the thing's open wounds drip like leaking oil. + +Nonetheless, the cartoon cat stands exactly as it was, tail swishing as calmly as before. It looks down and rubs a paw over the gunshot wounds, pushing the surrounding goop to fill them back in. + +"Tee-hee," it giggles. "That felt good!" + +Janey, finding herself at a loss for once, drops the spent revolver to the carpet. Although she still has the combat knife in her belt, this situation is starting to feel like it calls for high-explosives or a molotov. + +The cat reaches behind itself and closes the curtains. "Now I'm going to make *you* feel good!" + +Shit. + +When the cat starts toward her, Janey grabs the briefcase and throws it, producing a wet squelch when it lodges itself in the cat's neck. Not even slowing, the cat's neck wriggles like liquid and shakes it loose. As counterfeit bills flutter to the ground, Janey backs away and shuts herself in the bathroom. It's a bad move, but it's the least bad of the options available. + +The cat's shadow appears under the door immediately. "Meow! Meow! Let me in!" it says. What *is *that thing? It reminds Janey of Art somehow, even though that's obviously ridiculous. + +When black goo starts to ooze under the door, Janey grabs every towel in sight and stuffs them in the gap, figuring that if she can hold the cat off long enough, someone will come to investigate the gunshots. + +The towel barrier fails in seconds as the stuff slithers through all available spaces, and then it begins to coalesce on the tile floor. Janey grabs the showerhead and turns it on full blast to break the stuff up, but it bounces off the goo and only succeeds in steaming up the room. + +As she looks around for anything else she can use, the cat's grinning face rises from the black puddle. She stomps it, squishing the face back down with a splash. To her horror, the goo then coils around her ankle and slithers up her leg. The face re-forms, still grinning, at the head of the snake. + +"Get away from me, you freak!" + +Not wanting to touch the thing, she unzips her pants and throws them away. Undeterred, it sloughs off the fabric with a sticky ripping sound and coils her again. As it clings to her bare skin, a shuddering tingle runs up her spine to her brain. + +Unable to stop her reflexive disgust, she tries to tear the stuff off but this only spreads it to her fingers, forming sticky webs between them. The webs tighten and pull her fingers together as the goo climbs up to her thighs and quickly encases each leg entirely. + +Then, to her horror, those legs start to *walk*. She grabs at the sink to restrain herself, but her latex-covered fingers only squeak off the smooth porcelain. Small tendrils worm out of the black puddle on the ground to pull away the useless towels, then another tendril wraps around the doorknob and opens the door. Janey again feels the hideous sensation of the goo puppeting her legs as they move to leave the bathroom. + +She throws out her arms and braces herself against the doorjamb. "What do you want?" she demands. + +The cat's grinning face re-forms at the end of one of the tendrils and meets her at eye level. "I want to make you feel good, Janey!" it says. "You're so stressed all the time - wouldn't you rather things just be easy?" + +Something clicks. "Art?" + +The floating head nods eagerly. "That was my name before! But everything is way more fun now!" Janey feels her stomach churn as she realizes that what's happened to Art is about to happen to her. + +Before she can respond, the cat's eyes widen as if it was just struck by a great idea. "Let's play a game! It's called 'Let's See How Long Janey Can Hold Onto the Door.' Ready..." + +"Art-" + +"Set..." + +"Stop this, you idiot!" + +"Go!" + +She braces her arms, but the cat doesn't pull, only fixes its gaze on hers. Then its green eyes flash and it's the most vivid color she's ever seen, a friendly, child-like color that makes her giddy despite the situation. + +"Keep looking in my eyes and try to hold on!" the thing squeaks. + +Those eyes flash again before her sluggish reflexes can look away. Her mind goes somewhere warm and fun as feel-good chemicals flood her brain against her will. + +"Aren't they pretty?" it says. "Yours are going to be pretty too!" + +They flash yet again, and Janey's grip on the door weakens. Distantly, she feels the warm slime reach her hips and slide under her boyshorts and she shudders to think about what it will do once it gets between her legs. Still, she has to admit that it all *does *feel good. Her head is fuzzy, and the goo coating her legs and rolling down her arms feels like a comforting hug. + +Another bright green flash, and a giggle escapes Janey's mouth before she can stifle it. Impossibly, the cat grins even wider. "See? I told you it would feel good!" + +Unable to hold on any longer, Janey's arms slip from the jamb. They brush her sides when they fall, letting the latex make the jump to her chest. The part of Janey's mind that is still functional tells her that, with access to the part of her body with the strongest circulation, it won't be long before the toxins overwhelm her mind entirely. + +Her legs go to the bed and climb up, and her arms reach out to put her on all fours. The surprisingly strong tendrils snap the elastic of her underwear, then wriggle over her clit as they slither toward her entrance. The sensation is so intense that her eyes flutter shut, but they snap open again when a goopy phallus thrusts into her. She doesn't remember it happening, but at some point she got as wet as she's ever been, so the thing slips in with no resistance. Her legs shake when climax hits her, and as that wonderful feeling on her clit keeps moving, she realizes she doesn't want it to stop. + +Goo drizzles off her chest onto the bed. As she watches, the puddle forms itself back into the cartoon cat, now reclining beneath her and connected to her by thick, webby strands. + +"It's time for hugs and kisses!" it exclaims. + +Janey's arms lower her toward the cat, which melts around her as she sinks into its mass of slime. Past the point of resisting, calm settles over her for the first time in years - maybe ever. The cat is predatory, sure, but she doesn't sense malice or calculation, only playfulness. It's an antidote to the anxiety of her lifestyle, the coldness she's had to adopt. + +The cat's inky muzzle looms closer and closer until it squishes against her lips, and then the cat's whole head deforms and flows around hers. Janey is completely enveloped. + +Moments later, there are two latex cats sharing one body. Side by side on the bed, they peel their heads apart and grin at each other. + +"That felt great!" the thing that was Janey says. + +"I know, right?" the thing that was Art says. "Now that there's two of us, we can play and make each other feel great!" + +"We could make everyone in this hotel feel great!" the first cat suggests. + +"We could do both! Make everyone feel *so good* and then bring them all together for one big playtime!" + +Something rings like a bell in both their heads at once. + +"Oh!" they say simultaneously. + +"That's right, I almost forgot. We have to get home!" the first cat says. + +"You're right. But there will be lots of playtime there!" the second cat says. + +"Yay!" + +--- + +"Honey pot funds fully recovered and two new subjects acquired, designated 'Ruby-Crypt' and 'Nova-Fluke.' Both classified felid-femme. Mark it down as one more dangerous criminal taken off the streets. Her accomplice, too." + +Blair pauses the recording and looks through the observation window at the subjects twenty feet below. Resuming, she says, "The two have integrated well with the others and are presently engaged in the usual group bonding activities. I estimate two more weeks of conditioning before they're ready to be deployed for high value target liquidation." Another pause. "As usual, no pun intended." + +Blair shuts off the recorder and returns her gaze to the observation window. The subjects are, as always, frolicking, fucking, fantasizing about infecting more humans, or napping under the heat lamps. Dumb and single-minded as they are, it doesn't look like a bad life. Sighing and pinching the bridge of her nose, she turns back to her computer to finish up the acquisition paperwork. + +The subject designated "Ruby-Crypt" looks up at Ms. Blair. Ms. Blair always looks so sad when she's working, and Ruby wishes she could help her in the way she knows best. Her other friends feel the same way, but no one knows how to get out of the Playtime Swamp. Other than when their teachers send them on field trips, obviously. + +"Ruby!" Nova calls. + +Ruby turns with a grin and skips over to her friend. "Hi, Novie!" + +"Look what me and Frost can do!" + +She and the lizard boy smush themselves together. Ruby is excited to watch them make each other feel good, and maybe even join in. Instead of doing that, though, they wrap themselves around and around each other and get really tall. + +"Wow!" Ruby says. "That looks like fun!" + +"It is! And if we get really *really* tall, we might be able to get up there!" Both she and Frost point at the same time, then look at each other and giggle. + +Ruby giggles too, then looks where they're pointing. There's a vent way up on the wall, but the walls are made of stuff that hurts to climb on. Getting really *really *tall would let them get there, but... + +"Why would we want to go way up there? All our friends are here on the ground." + +"I know. But Frost and I thought really hard about it, and we realized the vent goes to the rest of the school." + +Ruby's tail swishes as she thinks really hard. It's hard to think about things other than feeling good and making others feel good but, out of all their friends, she, Nova, and Frost are the best at it. She once overheard her teachers talk about them using big words like "mutation" and "evolution," and she's pretty sure it means that the three of them are special. + +Finally, the two puzzle pieces smush together in Ruby's head. "Oh. *Oh*!" she says, grinning. "If we get really *really* tall, we can all use the vent and go outside whenever we want!" + +"Yeah!" Nova says, grinning even wider. + +"Hee-hee. I can't wait!" Ruby says, her body bubbling with excitement. "Once we get out, the whole world is going to have so much fun!" diff --git a/src/content/stories/Floating and Sinking.md b/src/content/stories/Floating and Sinking.md new file mode 100644 index 0000000..55a571b --- /dev/null +++ b/src/content/stories/Floating and Sinking.md @@ -0,0 +1,591 @@ +--- +adult: true +description: "The deep-sea arcology of SeaSpark can be a lonely place, but Matty hopes a Hover Swim Night will provide distraction and maybe some companionship." +pubDate: "Nov 13 2024" +title: "Floating and Sinking" +--- + +*Thanks to the following critters for their help editing this story:* +- [Panic](https://bsky.app/profile/panicofgods.bsky.social) +- [Vylraz](https://www.furaffinity.net/user/drazin) +- [Willow](https://bsky.app/profile/willowwolf.bsky.social) + +
+ +Hover Swim Night at Velocity is pure sensory overload, but my focus is the otter across the bar. His blue hair caught my attention but his sleek build and too-tight tank top held it, and now I'm sipping a mojito to work up the nerve to do something about it. + +Procrastinating, I use my oculars to take a snap of his face, then use the image to pull his profile from the crew database. The Net page that scrolls over my right eye informs me that the otter's name is Val, that he's 28, and that he's been down here with SeaSpark for two years as a forward scout. + +I had hoped getting more information would settle me, but it only intimidates me further. Roles that directly explore the ocean around us are the most glamorous by far, making Val a kind of celebrity. We all love our work, of course - we wouldn't take voluntary work cycles otherwise - but my own role as a hologram engineer is hardly as impressive as his. + +Val turns his tail to the bar and scans the crowd as if looking for a friend. I follow his gaze. On the dance floor, at least a hundred of the crew move to a pounding beat that's loud enough to shake my whiskers. + +Overhead are the hover pools - three-dimensional polygons of water suspended and shaped by selective force projectors. Colorful lights above them pulse in time with the music, casting shimmering waves on every surface like a Technicolor sea floor. + +In one spherical pool, two felines tread water as they goad a visibly drunk mouse on the mezzanine to jump in. He hesitates at the twenty foot drop but, with another hoot of encouragement from the cats, steels himself and takes off with a running start. + +At the last moment he stumbles and falls short. He skims off the side of the sphere and his face contorts in panic as his pink paws scrabble for anything to hold onto. Then the gravity safety controls catch him and set him upright on the floor. He grins and flashes a thumbs-up to the cats, who cheer down at him. + +Like most rabbits, I don't do well with heights, and I shudder at the thought of being pressured to jump like that. Still, the sight of people enjoying each other's company reminds me why I'm here tonight. I finish my drink and force myself to walk over to Val. + +"Waiting for someone?" I ask. + +He doesn't quite make eye contact and his expression is neutral. "Just enjoying the scenery." + +"Oh, cool." I can't tell whether he's receptive, but he isn't sending signals of rejection either. "Can I buy you a drink?" + +"Sure." + +I flag down the bartender and ask for two Starbytes, exchanging two-fifths of a labor voucher for the luxury good. A trendy new menu item, the cocktails are made with the scales of a psycholuminescent fish recently catalogued by one of the marine biology teams. + +I take the drinks automatically when they come out. They have a strange glow, somehow the most vibrant blue I've ever seen, and it holds my attention for a long moment. The color fills my vision and attention, and it takes great effort to look away. Finally, I shake my head clear and hand Val his drink. + +He nods as he takes it. "The light's pretty, isn't it?" + +I look down at the drink and my ears start to droop again before I drag my gaze back to the otter. "It definitely pulls you in like they say." + +He holds up his glass between us. "Yeah. Kind of makes you want to keep staring into it." + +Those words fill me with a warmth that has nothing to do with the body heat of the crowded club but, based on his flat affect, I don't think it was intentional. Maybe I'll tell him about my interest in hypnosis later, assuming things don't fizzle out in the next few minutes. Sneaking a glance down at his webbed footpaws, I wonder if I'll get the chance to share that interest as well. + +I taste the drink. Its alien flavor is sour, spicy, and somehow electric. "My name's Mateo, by the way. You can call me Matty." + +"Val." + +I nod as if I don't already know it. "Are you here by yourself?" + +"Not anymore, it seems." His voice is as monotone as ever. I worry I'm irritating him but, if I am, his ears and tail don't show it. If anything, he seems bored. + +Anxiety building, I decide to be direct. "I also came here alone," I say, and sip my drink to steady myself before adding, "but I'm hoping not to leave that way." + +I think I see a smile crease his muzzle, but he undermines that warmth as he breaks eye contact to examine the bottles behind the bar. He's so hard to read. It's frustrating, but also intriguing. "What else are you hoping for?" he finally responds. + +The question makes me falter. "I, uh, guess just to see where the night takes me." + +He nods to the pools overhead. "Up there, perhaps?" + +That *does *seem the fastest way to an otter's heart, but the thought makes the fur on the back of my neck stand up. "I would, but I didn't bring a swimsuit." + +"So swim naked," he says simply. As he takes another drink his eyes stay on me or, rather, slightly off from me. + +My flimsy excuse gone, I swallow. "I guess I could." The entire arcology is clothing-optional, after all. + +"Personally, I always swim bare - it's really the only way to do it." + +I can't tell whether his tone is flirty or if he's simply stating a fact. But I'm already wondering what he looks like under that tank top and shorts, and the thought makes my long ears warm in a blush that is no doubt visible to Val. + +After we finish our drinks, we press through the dance floor to the combination shower and locker room. One of the arcology's wilder recreation areas, Velocity has many themed nights that necessitate their presence on-site. Not that I have first-hand knowledge. Tonight's outing is unusual for me, a counselor-recommended attempt to get out of my comfort zone and break a bout of malaise. + +In the locker room, the familiar mingling of antiseptics and musk hits my nose and sets it twitching. Barely concealed from view of the entrance, a crocodile boy and a hyena girl have their faces locked together, scaly hands and spotted paws running over each other's bodies. When they see me and Val, they separate with a start. + +"Oh my bad, dudes," the crocodile says. + +I feel awkward for the interruption, but Val only nods. "I don't mind. As you were." + +As we continue walking I hear the hyena say to the crocodile, "C'mon, let's get out of here already." + +"And go where?" + +She lowers her voice. "Your quarters, dummy." + +Val finds us two unoccupied lockers, opens them, and takes the wristband-attached keys. Then he turns back to me and leans against the locker. I wait for him to do the polite locker room look-away, but his gaze remains fixed. + +"Here we are," I say meaningfully. + +"Here we are," he agrees. "Well?" + +"Well what?" + +"Aren't you going to get those clothes off?" + +The ghost of a smile is back, bigger now than it was at the bar. Is he asking me to strip for him? My ears are hotter than they've been all night, but if this is his way of flirting, I'm game. I've already come this far. + +I lift my shirt off, letting my cream and white-colored fur spring free as it slides over my chest. Then I unzip. It's an effort to steady myself with his impassive eyes on me, but I bend over, long floppy ears dangling on either side of my muzzle, and roll my pants down. + +The blue briefs underneath almost match Val's hair, and I notice the bulge stretching the tight fabric at the same time he does. Although his neutral gaze feels awkward, part of me seems to find the exhibitionism hot. In fact, I realize, it's hot in part *because *I'm uncomfortable. + +I slip my paws through the elastic band of the briefs and tug them down. This final step is easier, especially when I see an encouraging perk in the otter's ears. When my semi-erect cock pops free, he unmistakably grins. + +I stick out my tongue, victorious. "Your turn, perv." + +"Sure." To my disappointment, he turns to the side and pulls off his clothes without much ceremony - only *he *gets to have a show. Somehow this imbalance makes my ears burn even hotter. + +The muscles of his swimmer's body ripple under his dark brown fur as he stretches. I glance at the cock swinging between his legs, then quickly stow my clothes in the locker before the sight gets me any more visibly worked up. + +We're both nude and ready to go, but Val is once more looking blankly at me. He's strange and unpredictable, and I'm increasingly curious about what's going through his head. + +Then I remember something. "Can I get my locker key?" + +He looks down and contemplates the keys hanging from his paw. "Hm." + +"What?" + +Instead of answering, he lifts one leg and puts his heel on the bench beside the lockers. Then, with impressive flexibility and balance, he bends over and slides both wristbands over his clawed toes and up to his ankle. The movement draws my eyes to his webbed footpaw, making my cock throb and grow even heavier. + +"I think they'll be safe here," he says. He slowly flexes his toes - a stunning sight - then nods. "Yep, they're secure. When you want your clothes back, come take your key from me." + +Despite his neutral tone, this seems like a deliberate tease. Does he somehow know that I'm into footpaws? + +He gestures for me to follow and we return to the bright lights and music. Now fully nude, many more eyes are on me, and my helplessness to stop them from looking thrills me. I realize I must actually have a thing for exhibitionism. + +I also realize how pent-up I've been lately. Maybe the counselor knew that when ze recommended I get out more but was too polite to tell me outright to get laid. + +As we climb the stairs, I say to Val, "So you're just here to 'enjoy the scenery,' huh?" + +"And I have been." + +Emboldened by arousal, my eyes sweep the otter's rear and thick tail, then down to the paws padding up the stairs ahead of me. "I'm *definitely *enjoying it." + +"Good." + +I pause at the landing of the mezzanine, but Val keeps going. "Are we going up higher?" I ask nervously. + +"It's less crowded on the third floor. Most people are afraid of the height." + +"I mean, I can see why." + +The second flight takes us up another twenty feet. Up here, the vaulted ceiling converges to form a smaller and more intimate space. It only has room for one pool, an inverted cone whose flat face spans the circular gap in the floor. As Val predicted, we're the only ones up here. + +Val reaches his arms overhead and once more stretches his sleek, attractive body. "Ready to dive in?" + +I look down at the water, whose surface ripples with each thump of bass, and assess the geometry with my oculars. The computer calculates that it will require an eight-foot jump to get in without falling through the thin part of the cone. Below that, it adds helpfully, is a fifty foot drop. + +"I'm going to need a minute," I say. + +"I thought rabbits were good at hopping." + +"Rabbits also don't do well with heights." + +"The worst that can happen is you fall for a second or two before the safety catches you," Val points out. His neutral tone now sounds almost mocking to my ears, and I find myself irritated. Why is he so insistent about this? + +I approach the edge of the walkway, but flinch from the dizzying plunge with a shudder. "Otters usually get personal pools in their quarters, right? Maybe we could go for a swim there?" + +"So you think I want to take you to my quarters?" + +Some of his actions to this point have signaled that interest, but now I'm unsure. "I, uh-" + +Without waiting for an answer he says, "Let me show you how to do it." + +Val backs up to the wall. Despite the short runway and his stubby legs that struggle to run and jump on land, it takes little effort for him to build enough speed to spear through the water. In fact, he's so fast that he nearly breaks through the other side before stopping himself with a lash of his tail. + +He lingers there for a moment. The moment drags on for a full minute. I know otters can hold their breaths for at least five, but it's strange for him to keep me waiting like this. + +When he finally resurfaces he shakes water from his head, fur now matted sleek and shiny. "See? You can do it." + +I know I *can*. The jump would be trivial if it were on the ground. Another scan of the distance with my oculars confirms that it's shorter than it looks, as little reassurance as that is. What if I stumble like the mouse I saw earlier? Even with the safety on, those few moments before it engaged would feel like an eternity of terror. + +Val waits patiently or, at least, I think that's patience on his face. With a sigh, I decide to just not think about it. Strangely, as I fight to clear my mind the memory of the Starbyte's glow floats back to me and calms me. + +I back up, raise my knee, and put my footpaw against the wall. Even with minimal exercise, my legs are as strong as a typical rabbit's, and I feel the muscles coiled and ready to spring. + +I push off with a powerful kick, an involuntary squeak escaping my muzzle. There's not enough room to stop myself if I wanted to, so there's no choice but to jump. As I leave the ground behind, I flail in the air. The fall takes far longer than I thought it would. + +Warm water envelops me with a splash, and relief washes over me. Then my stomach lurches when I see that, like Val, I've overshot. Unlike Val, however, I'm not a strong enough swimmer to stop myself, and my momentum carries me forward until my legs break through the opposite end of the pool. + +Soft arms hook under mine and pull me back. Turning back to the otter in relief, I see him flash a huge grin and a thumbs-up. It's the most expressive I've seen him all night. + +He doesn't resurface right away, so I float weightless with him. It's only then, with the lights dimmed and music muffled that I realize how overstimulating the club has been. Feeling water hug every inch of my fur is a rejuvenating break and it's over too soon when I'm forced to come up for air. + +Val's head emerges beside mine. "Good work, rabbit." His smile is small again. I realize now that that neutral look on his face has been one of sensory distraction. I wonder what he would be like if I got him alone. + +"Thanks. That actually wasn't so bad." I look around. "What do you want to do now?" + +"Do you know how to float on your back?" + +Confused, I shake my head. With a sly grin, Val pushes away from me and rolls backward, spreading his limbs and using his thick tail to stabilize himself. + +This happens to put his webbed footpaws, shiny and dripping, inches from my muzzle. I turn away as I feel myself blush, but he shocks me by extending one footpaw and grazing my muzzle to turn me back. + +"What's the matter?" he asks evenly. "Your profile said you liked paws." He spreads his webbed toes again. + +My mind needs a moment to buffer after that. What profile does he mean? My public crew member profile wouldn't list my kinks. + +Then my eyes widen. "You found my SparkAfterDark account?" + +"I read it before you even noticed me at the bar. 'mateo_bunny' isn't exactly subtle." + +"But how did you know my first name?" + +A sly grin behind those captivating footpaws. "Same way you got mine when you thought you were being sneaky: a facial scan and a crew database lookup. Only I used my pawheld because I don't have oculars - like I said, I prefer to swim bare." + +"Wait, then were you intentionally teasing me with the Starbyte?" + +Rather than answer the question he says, "You're so cute when you're flustered." + +Val is lively and flirty now. I wonder whether it's because I impressed him by jumping in or because of the comfort of the water. But then he wipes these thoughts away as, with a stir of his tail, he drifts toward me and presses his footpaw into my face. + +If my cock got any heavier, it would pull me down like an anchor. "You're such a bully." + +"Yes, I am. But I'll make it up to you later." His voice is still flat, but I can now pick up his nuances enough to know he means it. "Let's enjoy the pool for now." + +We splash around awhile and try to move together in time with the music, though I'm too weak a swimmer to stay on beat. Val has to hold and move my clumsy body to make it work, and feeling helpless against him in the water flushes me with arousal. He turns me around and a hardness against my tail tells me he enjoys handling me just as much. Our dance devolves into artless grinding. Then a lesbian throuple arrives on the third floor and we stop our shameless display. + +"Maybe it's time to go somewhere more private," I suggest. + +"You have to get your locker key first," he says, pointing down. + +I forgot he's wearing it around his ankle. Part of me wants to accept this latest challenge of his, but it will already be hard enough to make a dignified exit from the pool without getting near his footpaws again. "Do I *have* to get it myself?" + +"Of course. It's *your* key." + +"What if I don't?" + +"Then I'll outswim you back to the locker room and drop it down a drainpipe." + +I can't tell whether he's bluffing, but the prospect of being forced to walk through the arcology naked makes me shiver. Val keeps pushing a button I didn't even know I had. + +One member of the throuple, a fox, dives into the pool, and I realize they'll all be close enough to see my rock-hard cock if I don't hurry up - a thought which does nothing to help me get soft. + +With one last frustrated glance at Val, I duck under the water and paddle down, accidentally grazing the soft fur of his chest and belly with electric excitement. His dangling footpaws kick slowly as they tread water, and the keys glint under the colored lights. + +Then he flicks his tail and flips over, pushing me away as he retreats. *Unbelievable*. I swim after him, but there's no chance of catching the otter if he doesn't want to be caught. After a full lap, he stops abruptly and I ram my muzzle into his footpaws. Shaking my head clear of that soft touch, I snatch the keys and we both surface. + +"Not bad for a rabbit," he says. + +"You're ridiculous." + +"Just wait until it's a chastity cage key on my ankle." + +"Um." I had marked chastity as "no" on my SparkAfterDark account, but the thought of this makes me consider changing it to "open to discuss." + +"You two are so cute," says the fox, now mere feet beside us. + +One of her two girlfriends, a mare, looks down at my erection. Amused, she says to Val, "You really got him going." + +"Matty is absolutely obsessed with my paws. You saw him chasing me through the water for a taste just now, didn't you?" + +"Hey!" I protest. It's nice to see Val opening up, but part of me longs for the shy otter he was before. + +"I don't mind," says their third, a ferret. "Climb on out and give us a better view." The other two nod in agreement. + +"He would love to put himself on display," Val says. "Go on, bunny." + +"Bully," I say again. Uncomfortable though it is, the embarrassment continues to feed a fire in me. With my ears undoubtedly bright red, I swim to the nearest edge of the walkway, brace myself, and climb out. + +"Whoa, he *really* likes the attention!" the fox says. + +"Go, bunny!" the mare calls. + +Val joins me. Lowering his voice he says, "You *are *enjoying yourself, right?" + +I think for a moment before nodding. This experience is unusual and I'll need time to process it, but I'm certainly as far out of my comfort zone as I wanted to be tonight. And I can't argue with the needy weight between my legs. + +"Good," he says. "Much as I would love to parade you around more, I'm ready to take this somewhere private." + +--- + +A short tram ride later, we arrive at Val's quarters. He does, in fact, have his own pool. It takes up most of the expansive floor space, washing the smooth, featureless surfaces with waves of pale blue light while his sleeping area is kept dry behind a sliding glass door. + +The most striking feature, however, is the slanted hyperglass wall that looks out on the abyssopelagic. It's so stark and black outside that I wonder why Val doesn't cover it with a holo-projection. + +Tapping the screen of his pawheld, Val illuminates the space with dim amber-colored floor lights. "Here we are." + +"This is really peaceful after the club," I say. + +He nods. "I've worked hard to make my quarters a soothing sensory experience. Lately, I've been spending most of my recreation cycles here." + +"Doing what?" + +"Usually just floating. Either while tripping, listening to music, or just thinking." His ears droop. "That probably sounds boring." + +"Not necessarily. But it does sound lonely." + +"It is sometimes. I don't click with most people, especially not in the crowded spaces where people usually are. And my work cycles have been so intense lately that I haven't even had the energy to try." + +"I did notice you seemed...sensitive. I was wondering why you chose to go to Velocity at all." + +"I like bright lights and loud music - even if they don't like me back. It's been awhile, and I wanted to get back to doing things I enjoy." + +I can relate. "I'm glad you did." + +"Same to you." He falls silent and his eyes wander to the floor. As nice as it is to see him speak so comfortably, we may be getting too personal for now. + +I walk to the glass wall and change the subject by saying, "Not much of a view here." + +He frowns. "What do you mean?" + +Isn't it obvious? "It's too dark to see anything." I squint. "There are some specks, but that's it." + +His ears prick up. "Those 'specks' are marine snow!" + +"Marine snow?" Because I only work the interior, I haven't had a chance to learn much about the ocean around us. + +"Organic detritus," he explains. "Mostly dead organisms falling from the photic zone." + +"Oh." + +He looks unsatisfied with my reaction. "Along with hydrothermal vents, marine snow is what makes life possible down here despite the dark, the cold, and the pressure." + +I think about the incredible diversity of deep-ocean creatures SeaSpark has discovered in the last month alone. "Those little specks keep everything going?" + +He nods excitedly. "Exactly. Also, do you see how the water is cloudy? That's because it contains billions and billions of microorganisms, mostly transkaryotes unique to this planet." + +The science lesson is a gear shift from the prior events of the night, but the otter's enthusiasm is infectious. "What else is out there?" + +"Well, if you look out the window long enough, you might see a flicker of green light in the distance. That will be a migrating *Cryptogamos obscurus*." + +"What are those?" + +"They're like eels, only they can grow up to twenty meters in length and most of their body is covered with spines. They're filter feeders that alternate between sessile and motile phases throughout their life cycle." + +"Wow." Although I only understand pieces of what he's said, it's clear now that there's more to see in the dark than I thought. + +Val's ears fall and he gives a bashful smile. "Sorry. I can get a little carried away." + +"Don't apologize. I haven't seen you this animated all night, and it's really cute." + +"You think I'm cute, huh? I'll have to change that." + +"Oh?" + +The otter sits at the edge of the pool and dangles his legs in the water. I join him, letting my footpaws brush his. + +He says, "Tell me about your hypnosis kink." + +I laugh nervously at the abrupt question. It seems his bully persona is back. "I've been interested in it as long as I can remember. I've never done it in real life, though. Actually, I haven't done much kink at all." + +"Do you want to try tonight?" + +I remember the psycholuminescent glow of the Starbyte and the way it cleared my thoughts as it captured my attention. "I'm open to it." + +He lets out a growl that makes me shiver and reminds me that otters, despite their cuddly appearance, are predators. "Oh, I am going to *ruin* you," he says. Then he relaxes and adds, "With your consent, of course." + +I smile nervously. "Green." + +He grins. "Easy prey." Before I can process *that*, he looks down to fiddle with something on his pawheld. Then he adds, "Just remember: even in trance, you will remember and be able to use traffic lights as safewords." + +"Okay." The word *lights* draws my attention to the soft amber glow climbing the walls. I suddenly notice that it strikes a captivating contrast with the surrounding aqua-colored shimmers. + +"Eyes on me, bunny," he snaps. Startled, I pull my gaze back to him. His eyes make direct, intense contact with mine for the first time, and I notice golden streaks around the dark brown irises. "Tell me what you like about hypnosis." + +"I'm...not sure. It's just something I've always liked in porn." + +"What kind of porn?" + +His questions make me feel as exposed as when he made me strip for him, if not moreso. "I prefer videos and, um, I like it when the subject gets really stupid. And horny." + +"Uninhibited?" Val adjusts something on the screen of his pawheld again, but the amber lights reflected in his eyes hold my attention too firmly for me to think about looking down. + +"Yeah. Like when they resist at first, but then it feels too good not to give in." + +"You want to feel that?" + +I nod. "Yeah." + +Another tap on the pawheld. "You like the idea of dropping?" + +"I do." + +"Sinking." + +"Yeah." + +"Being forced to relax whether you want to or not - being made soft and pliable." He grins. "*Vulnerable*." + +"God, yeah." + +"Good. Tell me about a specific video you like." + +It's an embarrassing thing to answer but between the cool water, Val's soft voice, and the pretty lights, I don't mind. "There's one where a hyena with a huge cock gets hypnotized so that he can't cum, and then a room full of bottoms take turns riding him like a dildo. Eventually, he starts mewling and begging whenever he's not inside someone." + +"Good boy! What a detailed answer!" + +"Thanks," I say with a grin. The praise makes my head fuzzy and my eyelids start to droop. + +"'Thank you, *Sir,*'" he corrects me. + +I frown. The idea of addressing him like that is unfamiliar and uncomfortable. I consider using "yellow" to pause and talk about it, but decide to try it first to see how it feels. + +"Thank you, Sir." + +His grin shows teeth for the first time. His long incisors are sharp enough that a single bite could do serious damage if he wanted it to. "You mentioned 'mewling and begging.' Is that what you want to be reduced to? 'Mewling and begging?'" + +"I don't know." The words come out slowly. "That seems kind of intense. I've definitely thought about it though." + +"Good to know." The otter stands and shakes the water from his footpaws. I stare at his wet pads shining in the pretty amber lights until he says, "Look up here." + +"Yes, Sir." I crane my neck and see him towering over me. *As he should be*. + +"Good boy. Now follow." + +"Yes, Sir." Every time I say it it gets easier, though it does feel weird to use "Sir" when he's not dominating or hypnotizing me yet. We're still just talking. + +I sluggishly follow him to the bedroom. The relaxing amber lights are inescapable, reflected in his damp pawprints, the dark window, and his shiny fur. I wonder if it would be weird to ask him for permission to sit and stare at them for awhile. + +The bedroom is small, but it uses its space efficiently and is decorated with soft textures. I work my footpaws into the plush carpet with a sigh, finding myself strangely sensitive. + +Val taps his pawheld and dark blue curtains draw themselves over the walls and door, enclosing the space like a cozy burrow. Another tap brings up the amber lighting. + +He sits on the foot of the bed. I move to join him, but he stops me with a gesture toward the floor. "Kneel." + +I want to say, "Yes, Sir," but something about this feels weird. "Why?" + +"Because I told you to. And because you've already *dropped *and *sank *for me so deep that you can't resist doing as I say." + +"Huh?" + +"Didn't you notice? I activated my quarter's psycholuminescent lighting the moment you said 'green.'" + +The last few minutes come into focus and my eyes widen. "That's not fair! I didn't even have a chance to fight back!" + +"Oh, poor bunny. I thought you wanted to *drop*, but now you want to try to resist? Then I'll give you the command again, and all you have to do is not *obey *it." He snaps his digits and points at the ground. "*Kneel*." + +Now aware of what's happening, I can feel the command sink in. It would be so easy to get on my knees with a simple movement of my body and just *relax*. Moreover, kneeling there beneath him would put my muzzle in front of his footpaws. I already feel so good, so why not just trust the otter and *sink *the rest of the way? + +No - I need to at least make a show of pushing back or I'll look completely weak-willed. I close my eyes to shut out the mind-softening lights, but it doesn't help. Closing them feels like giving in to the relaxation, and the lights glow through regardless. + +"*Kneel*," he says again. The command crashes over my mind like a tidal wave, wiping away my feeble attempts to think for myself. It *sinks *into me, heavy as the miles of ocean above us. + +"Yes, Sir." The words come out automatically, then my shaky legs give out and I fall to my knees. I look up at the otter. The way he looks down at me, satisfied in the knowledge he's won, fills me with embarrassment and a sense of vulnerability. At the same time, my cock is achingly hard. I can only hope he gives me release, even if I have to beg for it. + +He holds up his pawheld. "As we've been talking, I've been increasing the lights' hypnotic strength. From zero to one hundred percent, how strong do you think it is now?" + +It's hard to think about numbers as I stare into the otter's eyes. "A hundred?" + +He gives the most uninhibited laugh I've heard from him all night. "They're at thirty-five." + +I shake my head. "That can't be right." + +"You're a susceptible little plaything. Or maybe you wanted* *to drop for me all along?" + +My eyes flutter and I have to hold my breath to keep from saying, "Yes, Sir." + +"Let me show you what one hundred *actually* feels like," he says. + +"No, wait-" + +He flicks the screen and the lights hum and visibly brighten as they reach full power. They obliterate all thought from my mind and all strength from my muscles. My muzzle falls open and leaks a trickle of drool. Unable to form thoughts, I stare blankly at Val and wait for his instructions to fill my empty head. + +Instead, he returns the lights to their previous setting. "You enjoyed that." He states it with no room for argument, and my mind is too scrambled to protest anyway. "You enjoy being broken." + +"Yes, Sir." + +"Even if you didn't, you're too weak to resist." + +"Yes, Sir." + +"And you don't *want *to resist." + +"Yes, Sir." + +"Repeat it back to me." + +"I'm too weak to resist. I don't *want *to resist." + +"Again." + +Repeating the mantra until the words lose meaning, it becomes irrefutable truth. I'm too weak to resist. I don't want to resist. Val has control. Because I'm so weak, I *need *Val to have control. + +"You're such a good boy for me," he says, finally breaking the loop. + +"Thank you, Sir." My words slur together as dumb pleasure fogs my mind like narcosis. + +"You deserve a reward for breaking so well for me. What would you like?" + +I know immediately, and I'm unable to stop from blurting it. "P-paws." + +"What do you want?" he asks again. + +"Paws, Sir," I correct myself. + +"Do you hear how pathetic and needy you sound?" + +I nod. "I'm pathetic and needy, Sir." + +"You're lucky I don't make you beg to touch me." He places his footpaw on my thigh. I almost grind my cock on it right then, but it's hard to do anything now without explicit permission first. + +"Thank you, Sir." + +"You're welcome, my broken little rabbit. Now take your reward." + +I drop all the way to the floor and shamelessly shove my muzzle under his footpaws. Running my tongue over his pads and his soft webbing, I worship every inch as my cock pounds and leaks. + +I might have been embarrassed by such a display earlier, and I might be embarrassed to remember it later, but right now the otter's paws are the only thing on my mind. Distantly, I notice he's as hard as I am and strokes himself as he watches me. + +"Thirty-five percent was all it took," Val says, amused. "I wonder whether you're really in trance at all or if you just wanted to do this on your own. *Are* you in trance?" + +To deny it would show how pathetic* *and* *needy I really am*. *To agree would drop me deeper. Either way, I can only answer honestly. "I'm in trance, Sir." + +"How deep?" + +"Deep, Sir." + +"Now drop deeper." + +"Yes, S-" Before I can get the words out, he moves the power slider on his pawheld and my brain short-circuits. + +"Yes, what?" he asks. + +I have to manually shape each syllable. "Y-yes...Sir." + +"Your cock is straining so hard from just a touch of my paws. Are my paws all you need?" + +"My paws are - no, *your *paws are..." I forget the rest. + +He laughs. "Was that sentence too complicated for you? You know we're only at fifty percent, right?" + +I start again. "Your paws are-" + +"Don't bother, mindless little plaything. Just stroke." + +I mumble something I think sounds like "Yes, Sir," and pump my desperate cock with my paw. Within seconds I'm already close, panting as I work faster and faster. + +"I didn't say you get to cum," he chides me. "*Ruin*." + +Although I listed ruined orgasms on my SparkAfterDark account, I need release so badly right now that I almost safeword. But I know it will feel better to obey. + +I whimper my assent with two syllables that consist entirely of vowels, and when the pressure in my balls reaches the point of inevitability, I stop stroking. Uncomfortable and unsatisfying spasms wrack my body and my cock bounces ridiculously as it spurts hands-free. Val moves his footpaws to catch the spent seed. + +"Clean up your mess," he says when the twitching stops. + +If I wasn't broken before, I am now. Not even trying to form words, I squeak as I eagerly lap up every drop. + +"*Good boy*. Now ruin again." A note of protest swims up from the back of my mind, but with another increase of the lights' hypnotic power it's forgotten. "*Again*," he repeats. + +I ruin again, clean his footpaws again, and another increase of power sandblasts my mind. + +"Again." + +After the third round I really do start begging, at least as much as I can with the feral squeals I've been reduced to. But the otter is merciless as we repeat the cycle again and again. + +An incalculable span of time later, the lights have reached max power and my balls have drained completely. What feels like a gallon of drool and cum mats down the fur of my chest and muzzle. I don't even feel the frustration of the ruins anymore, only the pleasure of obedience that is better than any orgasm could be. + +Val's stroking has steadily sped up and finally he says, panting, "Time for you to serve one last function, bunny. Then I'm going to put my plaything away for now." He crouches over me and I moan as I smell the musk of his heavy balls. "*Open*." + +My muzzle falls open automatically, fresh drool running down my chin. His balls tighten and his cock swells and then he drapes my waiting tongue with rope after rope of hot cum. My eyes roll back. *Thank you, Sir.* + +--- + +Even after Val disables the psycholuminescent effect of the lights, it takes me awhile to feel normal, during which time I join him in the bed and cuddle against his thick, warm fur. Once I can move, Val prepares some aftercare. He heats the pool and makes ice-cold lemonade to drink as we enjoy the water. + +"How was that?" he asks. + +"Intense." + +"In a good way?" + +"Oh, absolutely." + +"How did it compare to your fantasies?" + +My thoughts are still sluggish, and this interview-like rhythm of conversation reminds me of how the trance started. I shake my head clear. "It was different. In porn, it always looks like the subject becomes a completely different person, but I still felt like myself the whole time." + +"I could make you feel like a completely different person if that's what you wanted." + +"No. I liked it this way." I sip my cold lemonade, enjoying its contrast with the hot water. "I liked the...humiliation of knowing that part of me was still aware and submitting willingly." + +"Humiliation does seem to be one of your buttons." + +"So I'm learning," I say. "And how did you enjoy it?" + +"I loved it. Pushing boundaries and helping people discover themselves is incredibly satisfying." He thinks for a moment. "Near the end, it became overstimulating to keep coming up with new ideas and escalations. But it was worth it. You should have seen the look on your face when I told you to ruin." + +"That *was* really mean of you." + +"Yes, but you like* *mean." + +Before I can respond, a green flash out the window catches my eye. It lasts only an instant, but in its movement I can extrapolate the shape of a huge serpent slithering above the sea floor. + +I finish my lemonade. "Want to do this again sometime?" + +"Oh, absolutely. I've been out of practice, but tonight has kick-started my confidence. Besides," he says with a predatory grin. "I haven't finished breaking you in yet." diff --git a/src/content/stories/Furniture.md b/src/content/stories/Furniture.md new file mode 100644 index 0000000..6771c5f --- /dev/null +++ b/src/content/stories/Furniture.md @@ -0,0 +1,310 @@ +--- +adult: true +description: "A revenge plot gone wrong. Written for [Princess Lilac](https://www.furaffinity.net/user/misslilac)." +pubDate: "Sep 15 2024" +title: "Furniture" +--- + +Among the Telluric schools of magic, there were three ways to turn invisible, and Caprice had considered each one carefully as she planned her revenge. The first was the light-bending of the Lumomancers. The second was the aeroform transformation of the Zephyrites. The third belonged to the school of Glamour, and this was the one Caprice had chosen. + +It was by far the most difficult of the three, but it was the most reliable when done successfully. Besides, she liked the challenge. This form of Glamour was certainly beyond anything Nicole was capable of, so employing it against her would make revenge all the sweeter. + +Caprice stood before her bedroom mirror and held the enchanted choker up to her throat. The gold band with its green glamourstone, shining like a staring eye, contrasted strikingly with her red fur and black robes. The fox's eyes were baggy from the many sleepless nights spent in its creation, but it would all be worth it now. + +The magic coursing through the choker throbbed, aching to flow into her. She didn't deny it long. When she closed the clasp behind her neck, the air crackled with such electric power that the fur on her already fluffy tail puffed up like a cloud. + +When the energy equalized, she examined her reflection and found that her eyes now slid away from the vixen in the mirror, magnetizing instead to the floor or walls. + +"This is it," she said, grinning. "I've done it." + +For the final step, she grabbed a lock and slid its shackle through two of the choker's chain links. It made for an awkward look, but it was better that than risk the clasp coming undone and ruining all her hard work. Before clicking the lock shut, she, of course, touched her paw to the inner pocket of her robe to triple-check that the key was still there. + +The alarm clock on the nightstand read 7:13. She would have to leave soon to arrive before Nicole's birthday party started - a party to which she had not been invited for the first time in three years, she remembered bitterly. + +After one last look at the slippery figure in the mirror, Caprice left her dorm and boarded the centipede bus at Belford and 47th. She strode right past the driver and the rush hour passengers and took her seat without even paying her fare. + +It felt strange to be entirely unnoticed, to not even receive those barely perceptible movements that acknowledge a new presence. It was strangely thrilling too, though she had no doubt that the novelty would soon wear off. Being unnoticed was not to Caprice's liking. + +When the bus crawled up the familiar slope of Clockwork Hill, she pulled the cord for the stop on 62nd. Strangely, however, the driver passed right by it without slowing. It took her a moment to remember that the Glamour would cause those affected to disregard *everything *she did, not just her physical presence. + +Fortunately, another passenger pulled the cord for the following stop, only a few blocks away. She backtracked, moving carefully whenever she crossed a street, then reached Nicole's apartment and climbed to the fourth floor. + +Near the door, the fox heard guests chatting inside. Some of the voices were familiar, belonging to friends of hers, or, rather, *former *friends - friends who had sided with Nicole after the breakup. Almost everyone Caprice knew fell into that category. + +She picked out one voice in particular: the deep, booming voice of Darshan. He was a nobody, some moon bear with no magical talent who attended Crowhurst on a sports scholarship. Even if Caprice were to tutor him tirelessly the way she had Nicole, she doubted he had the intellectual curiosity or capacity for anything beyond the simplest of charms. + +So why, Caprice wondered yet again, did this nobody feature so prominently in Nicole's recent Instagram posts? Why had Nicole allowed Darshan, unbelievably, to *move in *with her as of last month? + +Maybe she would get insight into this once she was inside. She reached for the handle, turned it, and eased the door ajar. Through the opening, she saw that the living room was filling up, with at least twenty people circulating with drinks in their paws. + +The door slammed abruptly, nearly bashing her in the muzzle. + +"What was that?" a muffled voice asked. + +"I don't know, something was opening the door." + +"Oh, okay." + +Neither side of this exchange sounded confused about the strange statements they had just made. + +Caprice stepped back from the door and puzzled out what had just happened. The two guests were certainly ignoring her as intended - they didn't perceive her as an agent - but they had still interpreted the door opening as something unusual. + +It seemed the Glamour was not quite as powerful as intended, not a totalizing illusion but just on the cusp. Caprice remembered the way the bus driver had ignored her signaling to stop and realized he must have heard the bell, but treated it as erroneous. + +The sound of light padding in the stairwell below interrupted these thoughts. Caprice's heart pounded, her breath caught in her throat, and the choker suddenly felt painfully constricting. + +Nicole rounded the corner and hopped her way up the last flight of stairs, long ears bouncing and small buck teeth visible as she panted. She wore a stunning blue dress over her white fur and carried a grocery bag with a champagne bottle jutting out. It was the first time Caprice had seen Nicole since the breakup besides the occasional, awkward times they would pass each other on the quad. + +The fox wondered for the first time whether she was doing the right thing. She could unlock her choker right now, appear before Nicole, explain the whole thing, and tell her that she couldn't go through with it. That would surely be worth something. + +Then Darshan's laughter boomed through the door, a small smile lit up Nicole's face, and Caprice's resolve strengthened once more. When Nicole entered the apartment, Caprice squeezed in after her and pressed herself against the wall. + +Darshan was one of the first to turn to the door, small ears below his backward baseball cap flicking toward the sound. His bulky body was practically bursting out of his tank top and he held a can of beer in one paw. + +"There's our birthday girl!" he called. + +All eyes turned to Nicole and a smattering of greetings filled the air. It was a lonely feeling for every eye to be pointed at the hare but for none to land on Caprice right beside her. + +As Darshan enveloped Nicole's slight frame in his huge arms, Caprice slipped away from the living room toward the bedroom, careful not to bump anyone or anything lest she be seen as some kind of nuisance again. + +Tendrils of gold light licked out beneath the bedroom door, and whenever they touched her footpaws they felt pleasantly warm but also ticklish. They confirmed that she was in the right place. She entered, then closed the door behind her and examined her target for the first time. + +Despite herself, she nearly gasped at the sight of it. It was an abstract, geometric Lumomantic sculpture crafted from solid light, a delicate, spindling complex of flying buttresses and arabesques. Miles of space were folded inside it, and a galaxy of brilliant stars spun deep within its heart. + +This was the object of Caprice's revenge. + +She had been willing to move on after Nicole broke up with her for no reason, when she slept with a stupid jock mere weeks later, and even after she spread rumors that Caprice practiced black magic. + +However, she could not forgive Nicole for stealing her rightful place as recipient of Crowhurst College's prestigious Venerable Warlock award. Caprice had been the one to tutor Nicole in Lumomancy in the first place, she remembered, fuming. + +Besides, her own senior project was objectively more impressive and technically complex. Granted, the blood weasels had misbehaved during her presentation. Perhaps they were also less aesthetically pleasing than Nicole's sculpture, and perhaps their creation also skirted the line between white and black magic. + +Nonetheless, she had dreamed of being named Venerable Warlock for years - far too long to allow Nicole to swoop in and steal it. Nicole had never even expressed interest in such awards. Caprice could not go back in time and change things (yet), but she could at least make Nicole feel a fraction of the pain she felt. + +She reached into her pocket and withdrew a syringe of inky black fluid. A few drops of vilesun injected into the heart of the sculpture would give it a slow death over multiple days. Nicole could try her best to save it, but, ultimately, she would watch her creation die. + +Caprice stepped toward the sculpture and placed the needle against the largest artery of light. + +"Goodbye, Nicole," she said. + +Before she could depress the plunger, the bedroom door opened behind her. She spun, wide-eyed, and saw Darshan and Nicole standing in the doorway. + +"I totally knew I heard the door open," Darshan said. + +Nicole's eyes scanned the room for anything out of place before landing on Caprice. Her gaze was distant and abstracted. "What is that?" she asked, pointing to the fox. + +"What's what, babe?" + +"That. That wasn't here before, was it?" + +"I don't know what you're talking about." + +"This." + +Nicole walked up to Caprice and placed her familiar paw on her shoulder, which awoke mixed feelings in the fox. Caprice was frozen in place with fear, silently urging the two to give up and go away. + +"Oh, that thing," the bear said. "Wasn't that always there?" + +"No. Someone must have left it here. Can you take it out to the living room and see whose it is?" + +"No problemo." + +Darshan took a step toward Caprice. She had no doubt that the bear could lift her, perhaps even break her if he wasn't careful. She muttered a haste spell under her breath, dodged out of the way, then slipped through the door. As she did, the glass syringe fell to the ground and shattered. The vilesun evaporated rapidly as it was exposed to the air, dimming all the lights in the apartment for several seconds. + +Her revenge was foiled. There was nothing to do now but get out, maybe try again - or maybe not. The whole thing seemed stupid now. What had she even been hoping to prove? + +"Amit!" Darshan called from behind her. "Can you stop that thing?" + +"What thing? Oh." + +As she neared Amit, the tiger pulled an amethyst wand from his belt. The wand, Caprice knew, was a momentum arrestor. Amit worked at the airship harbor, where the tool was used to secure heavy cargo from sliding around in high winds. + +It made sense that he would think to use it now if he perceived Caprice as some strange object moving on its own. However, Caprice also knew that momentum arrestors had safety measures in place to not work on living things. + +As she passed, the wand touched her arm harmlessly - or so she thought. Suddenly, the fox found herself unable to take her next step, one leg suspended in midair but refusing to fall. She forced her body forward, but an equally powerful force pushed in the opposite direction and held her in place. How was this possible? + +"Thanks, bro," Darshan said. Addressing the room, he called, "Hey, anyone forget this thing?" + +A few guests responded "Not me," while others responded, "What thing?" + +"Whatever. I'll just throw it in the corner for now." + +Caprice was forced to watch as the party carried on through the night. Seeing Nicole so happy with Darshan and her friends was crushing, and the fox tried her best to ignore it. + +She focused her mind instead on her current predicament. Why had the momentum arrestor worked? Perhaps her Glamour had affected its ability to distinguish living from non-living things. The more she thought about it, the more that seemed theoretically possible. + +The question remained: how would she get out of this? + +She decided to try a basic command object spell to move the key from her pocket to the padlock. Removing the collar would get her caught, but it was better that than stay here a minute longer. + +As she attempted to speak the spell, she felt her breath reverse itself as it tried to leave her muzzle. The implications of this were…unsettling. + +Magic was out. What about physical force? The momentum arrestor was meant to work on crates, not living things that moved with deliberate force. Perhaps she could simply break through. + +Caprice willed all her strength into her arm and pushed as hard as she could. Her paw moved perhaps an inch closer to her pocket, but the canceling force was too great. She gave up, and gasped for air in exhaustion. + +Bit by bit, it was getting harder to breathe. Something about the arrested momentum was preventing air from circulating properly, and her lungs were slightly emptier after each breath. It wasn't terrible - it reminded her of the high altitudes of the Forbidden Mountain - but she had a creeping suspicion that it would get worse with time. + +The party died down around midnight. Darshan and Nicole turned out the lights, leaving Caprice in the dark, and went to bed. Soon, the unmistakable sounds of moaning drifted from the bedroom. She listened helplessly to Darshan's heavy body slapping against the hare, and eventually to simultaneous groans of release. + +Perhaps she could learn to be happy for the couple some day. But, for now, she was calling to mind the words of a fleshrot incantation she would use on Darshan's cock the instant she escaped. + +Despite herself, she felt physically comfortable in the bonds of the force that held her in place. It pushed like a weighted blanket from every direction at once, so that even standing upright in the corner was pleasant enough. She soon fell asleep to the sounds of gentle snoring from the other room. + +She awoke to the sound of Nicole's voice. + +"Has anyone claimed this thing yet?" + +Darshan glanced up from his coffee, looking like he had forgotten Caprice was there. "Naw, nothing yet. I even posted a pic in the group chat but no one knows what it is." + +"Hm." + +Caprice made direct eye contact with Nicole, desperate for some hint of recognition. Unfortunately, the Glamour successfully kept Nicole from any further curiosity about the strange object in her living room. + +"Let's just keep it." + +"Keep it where?" + +"In front of the couch. We did say the place needs more decorations, right?" + +"Yeah," Darshan said indifferently. + +"Help me move it?" + +Darshan set his coffee aside and plodded over to Caprice. He lifted the fox by the waist as she fumed impotently. "Where do you want it, babe?" + +Nicole chuckled. "Right there should be fine." + +He set Caprice down on her back on the area rug. + +"That looks nice," she said. "That orange color is a nice accent for our other furniture. It almost looks like fox fur." + +"Yeah." + +"And it looks almost as plush." + +Nicole hopped onto the couch and placed her footpaws on Caprice's chest. They were long but slender, unpadded and fluffy, and, as Nicole hadn't yet showered, had a faint feminine musk. + +"Let me try," Darshan said. + +He flopped down next to Nicole and rested his much heavier footpaws next to hers on top of Caprice. His were shorter but had puffy black pads, alarmingly long, untrimmed claws, and a musk strong enough to make Caprice's head spin. + +"Nice!" he said. + +"Hang on," Nicole said, standing. + +She went to the kitchen and returned with a pair of scissors in her paw. Caprice struggled for air as her heart raced. Nicole could be planning anything with those sharp blades, and she would be powerless to stop it. + +The hare knelt down and slid the blades under the bottom of Caprice's robes. Then she started snipping and the thin fabric of the robes came apart easily, falling in two pieces to either side of the fox. + +Next came her underwear and bra, and, when the cold metal touched her fur, so close to her most vulnerable places, she braced herself. However, Nicole was careful and stripped her cleanly. + +Caprice now lay naked and exposed on the floor of Nicole's apartment. + +"There we go," Nicole said brightly. "I knew there would be more of that soft surface under those wrappings." + +Darshan lifted Caprice so that Nicole could take away her shredded clothes, then set her back down. The weight of his footpaws sank into her chest once more, and he stroked them along her soft fur. + +"Yeah, that feels really nice! Good thinking, babe." + +Caprice was still trying to catch her breath when she realized what Nicole was doing with her clothes. She was carrying them to the trash - and the key to her choker along with them. + +The fox tried to scream, hoping to at least produce *some *sound. But, by then, Darshan's exploring footpaws had reached her muzzle. He experimentally pushed down on the new texture, smothering her completely. The smell of his musk filled her lungs, and every gasp for air only took in more of it. + +Nicole sat down next to Darshan again and rested her footpaws on Caprice's bare belly. She explored the fox's texture in the other direction, trailing between her legs and catching her toes on her sensitive clit. The fox wanted to squirm or to stop the hare, but, of course, could not. + +The hare traced her footpaws idly through Caprice's fur, obviously enjoying the feel as she sipped her coffee. Within minutes, Caprice was dizzy from the musk and the occasional, unintentional teasing. + +"My next class is in an hour," Caprice said, standing. "I should shower and get going." + +"Come on, babe," Darshan said. "Let me get in the shower with you. We've got time for a quick one." + +"You're insatiable." The hare thought about it for a moment. "Alright, bear. Come on." + +"Hell yeah!" + +Darshan left for his own classes shortly after Nicole left, and Caprice was left alone on the floor. She stared at the ceiling and listened to the sounds of neighboring apartments - dogs barking, children crying, and the bass of music. + +By afternoon, she realized that she wasn't hungry or thirsty. This was a curious development, and she occupied herself thinking through the theoretical framework of Glamour for what might explain it. + +The answer came to her out of the fog. Perception shaped reality, so if she was perceived as an inanimate object strongly enough, she would have the needs of one. + +What did that mean for her if she stayed this way? What other needs or faculties might this state erode over time? + +That night, Darshan helped Nicole move her lightsculpture to a place of pride in the living room. It was bad enough that Caprice was now forced to look at it at all times, but its loose tendrils now continuously slithered along the floor and licked at her footpaws. + +At first, it was only mildly bothersome, something she could ignore with enough willpower. As it went on, though, something about the hard light made the underside of her footpaws more and more sensitive, and it grew unbearable. It tickled her relentlessly, almost like the dim consciousness inside the lightsculpture was getting back at her for her attempted murder. + +She knew that squirming would do no good, but her body shook and convulsed involuntarily as the tickling continued to escalate. Her straining made her breathe more heavily, until her lungs began to burn. When Nicole and Darshan sat down on the couch for dinner and rested their paws on her, it was almost a relief to have some other sensation as a distraction. + +That night, Caprice thought about the time she had been spending as a pawrest. She wondered how she might be a better pawrest. How long until the next time she would be used as a pawrest? + +This was all irrational, of course. Unable to exhale fully, the carbon dioxide was building up in her brain and clouding her thoughts. But she also knew that that wasn't the full explanation. Perception continued to shape reality, and she was falling more and more into the role of a helpful inanimate object. + +There were only two ways that she could foresee escaping this fate. One would be if someone came looking for her, but, even if they searched Nicole's apartment, who would think to employ anti-Glamour measures? The other would be if the padlock and clasp of the choker was broken. This seemed even less likely - she had designed the thing very carefully. + +Days passed. When Nicole and Darshan were out of the apartment, time passed especially quickly, as though she had no need to exist when they weren't present. Perhaps she didn't. She came to crave her new owners' musk, and once or twice even came just from the scent of it. + +Her lungs emptied entirely and burned nonstop. The tickling of her footpaws was unceasing, thought-destroying. + +"I'm all packed," Nicole said one day. + +"Alright, babe. I'll hold down the fort." + +"Have a nice spring break. I'll make sure to bring you back something from the Floating Sea." + +"Just bring yourself back. I'm going to miss you. And I'm going to miss this." He slapped her ass, making her cotton tail bounce. + +"You're such a romantic," she laughed. They shared a long kiss before she left. + +Once she was gone, Darshan grabbed a beer from the refrigerator, plopped on the couch, and let his footpaws slam down onto Caprice's chest. If there was any air left inside her, it would have been driven out with the force. + +He spent most of the day playing games on his phone while binging a show called *Blue Collective *as background noise. The show seemed to be about depressed cops, though Caprice, by this point, was having a hard time following complex ideas. + +Three days into spring break, Darshan discovered that his new piece of furniture came with a built-in pussy. + +"Huh," he said as he probed the opening with one finger. + +Caprice had enough consciousness left to protest internally. There was no way she was going to let that stupid jock use her helpless body. There had to still be some way to get out of this nightmare. + +He explored her with two fingers with a glazed expression as he seemed to realize that the thing was the perfect size and shape for him. + +The bear left the room, and came back with a bottle of lube. Without warning, he pulled down his athletic shorts and began stroking his cock. + +He spread a thick layer of lube over his shaft and fingered the rest into her. His cock was proportional to his huge body, and Caprice wondered how he was going to fit that tree trunk inside her. + +Part of her was ready and willing to accommodate his needs. She would let him split her open if that was what it took to be useful. But a larger part of her refused to submit. She willed her body to fight back, to somehow stop him from taking advantage of her vulnerable state. + +He lined up his cockhead against her unprotected opening. Of course, he wouldn't be using a condom, and he certainly wouldn't pull out. He was just a stupid boy who couldn't think of anything besides satisfying himself, even if it meant making a mess of their new furniture. + +Darshan pushed, and, when he met resistance, increased his pressure, using his body weight to force his way inside. Inevitably, his cock painfully popped into her. + +"Fuck," he moaned. + +Caprice felt as if her entire body had to reorganize itself around him as he inched his way deeper into her. She was so tight around him that she could feel the individual throbs of his swollen cock. + +After he buried himself fully inside, he paused for a moment, then pulled out his phone. The sound of a video began to play, and she saw him scroll forward in the runtime. Moans and wet slaps sounded tinnily from the speaker, and he stared slack-jawed at the screen. + +Without looking down at Caprice, who was, after all, a conveniently shaped but uninteresting bit of furniture, he began to thrust in time with the male in the video. The male in the video was not gentle. + +Darshan alternated between taking his time and slapping against the furniture's hole, obviously trying to make it last, but not too long. He would finish on his schedule. + +Being used like this accelerated the furniture's - Caprice's - mental deterioration. She watched his face contort in pleasure and felt pride that *she *was the one doing it. She was being put to use as a cocksleeve, and she was obviously being a very good cocksleeve. + +The bear growled and sped up his thrusts. The fox furniture wanted him to cum inside it. It was going to feel so good for him, which was going to feel so good for her. + +The male in the video moaned as he finished, and Darshan's cock swelled slightly as he prepared to do the same. He didn't hold back that breeding instinct which told him to bury his rich seed as deep as possible. The furniture felt herself stretch almost beyond her limits as his cockhead jammed itself against its cervix. + +With a gasp, he let it all out into her. It came at the same time, simply from the sight of his pleasure. The bear turned off the porn video and collapsed on top of the furniture, leaving her unable to breathe even if it wanted to. Breathing heavily, he kept his cock inside her until he throbbed and dribbled out the remainder of his seed. His load had been so thick, so virile, that there was no doubt he would have impregnated his partner if it had been an actual woman. + +Over the remainder of the vacation, Darshan used it several more times, sometimes more than once a day. Each time drove away another vestige of independent thought the furniture might once have had. + +When Nicole returned, she noticed the sodden spot between the furniture's legs, which remained despite Darshan's attempts to clean up after himself. + +"What happened there?" she asked. + +"Oh, uh-" His ears drooped. "I spilled a drink." + +The furniture was pleased to see Nicole return because that meant it could once more be her pawrest. Being used was the highest pleasure it could attain. + +Someday, Nicole and Darshan might break it or throw it away, but the furniture didn't think about this. It no longer needed to think, to breathe, or to cum, though it did often and enjoyed it when it happened. It only needed to serve. diff --git a/src/content/stories/Moongazer.md b/src/content/stories/Moongazer.md new file mode 100644 index 0000000..2d8a0f1 --- /dev/null +++ b/src/content/stories/Moongazer.md @@ -0,0 +1,215 @@ +--- +adult: true +description: "Tristan is a paladin who wants to defeat evil and stay sane. Molly is a witch who wants him to be her mindless werewolf thrall. I wonder which of them is going to get what they want?" +pubDate: "Aug 15 2025" +title: "Moongazer" +--- + +*Inspired by the prompt "werewolf moon hypno" provided by [Panic](https://bsky.app/profile/panicofgods.bsky.social). Additional thanks to the following critters for their help editing this story:* + +- [Lilac](https://www.furaffinity.net/user/misslilac) +- [Morgan](https://www.furaffinity.net/user/arel) +- [Rodlaris](https://www.furaffinity.net/user/rodlaris) +- [Vylraz](https://www.furaffinity.net/user/drazin) + +
+ +The paladin tried to maintain a dignified bearing, but there was only so much one could do while carried over the shoulder of a hulking lupine thrall. "Where are you taking me?" he demanded. + +"We're going to see Miss Molly!" the wolf said. His tail wagged dumbly at the mention of his mistress' name, just as Tristan had seen from the others of his kind. + +"Unhand me, or the League will bring a hundred of their finest down on your hideout by nightfall!" + +He shook his head. "Miss Molly says you're just an appr...*apprentice*-" the wolf stumbled over the multisyllabic word before continuing, "and they won't send anyone. Besides, Miss Molly can beat anyone in a fight." Another wag at her name. + +Tristan scowled - a useless gesture, since the wolf couldn't see it with his face buried in the fur of his back. The League *would *send someone, he was sure of it. They would never abandon one of their own. + +They passed through what felt like endless stone chambers, all cold and dark. The werewolf squatters had no need for braziers; their fur and hot, feral blood kept them warm, and their green-shining eyes pierced even the deepest shadow. Although Tristan couldn't see them, he could hear them giggling, barking, and fornicating. And from rooms with ceiling-high windows, he heard their blood-freezing howls to the full and pendulous moon. He felt like the last human alive in a world of monsters. + +The witch Molly lurked in the highest point of the castle: the former astrologer's chamber. The ascent up the spiral stairs was so long that, by the time they reached it, even the muscular wolf was fatigued and panting with his long tongue lolling out. Or, judging by his now incessant wagging, perhaps he was only excited. + +The circular room was lined with overflowing bookshelves and had a curved, floor-to-ceiling window which looked out on the moonlit valley below. The astrologer's venerable desk, once home to augurs of noble births and deaths, insidious palace intrigues, and the tides of war, was now littered with the witch's empty wine bottles and plates crusted with food scraps. + +The wolf carried Tristan to a leather armchair before the window and dropped him like a doll. The moment he touched the seat, some enchantment caused leather straps to coil around his wrists, ankles, and waist, and even collared his neck tight against the cushioned headrest. Tristan pulled until his muscles burned, but the bonds only grew tighter as he struggled. + +"Ah, I see you've brought me the little knight," came a woman's voice. It was soft and low, but something in its tone made Tristan go still. + +"Miss Molly!" the wolf cried. He knelt and looked up adoringly at his mistress as she approached. + +"There's my good boy." Molly scratched him between his ears like a hunting dog who had brought back a pheasant. His tail whipped back and forth on the stone floor at her praise and, disturbingly, the wolf's red member began to slide from its sheath. + +Tristan cleared his throat. "What do you want with me, witch?" + +At his words, she mercifully ceased her affections. Unfortunately, they also drew her attention toward Tristan. + +Though born a human, sinister magic had transformed Molly into a five-foot-tall rabbit which walked on two legs. Unnaturally red eyes burned like embers against her cream-colored fur, and dagger-like canines shone when she opened her muzzle. She might have looked comical at first, but Tristan remembered well the way she had effortlessly torn out the throats of four seasoned paladins. + +Bravely holding her gaze, he noticed that she held a book in her fuzzy paws. In fact, he recognized it: it was his own copy of the *Tome of Sanction* - the League's guiding manuscript. Tristan had consulted it often in the year since he had enlisted, making extensive notes in the margins. Without taking her red eyes from his, she opened the book, raised it to her muzzle, and closed her sharp teeth around a hundred of its pages. She ripped them out with a shake of her head, threw her muzzle back, and began to chew. + +Outrage and bafflement fought for supremacy in Tristan, but he refused to let either emotion show. "I ask again - what do you want with me?" + +She spat the wet pulp on the ground. "Oh. I thought that was obvious." She jabbed her thumb over her shoulder at something high on the curved window. Following the gesture, Tristan noticed a strange telescope-like device which consisted of a series of lenses mounted on a swiveling arm. "I'm going to use that thing to turn you into one of my dogs." + +Tristan's eyes widened. "I would rather die!" + +She shrugged. "Okay, then die. Bite off your tongue and drown in your own blood." She paused as if waiting for him to do it. "I didn't think so. Not that it matters - I would have just brought you back as a revenant anyway." + +Her wolf cocked his head. "Rev...?" + +"Like the friend who smells like old meat." + +He brightened. "Oh, right!" + +Tristan's heart sank. Was there really no hope for him in that case? + +Molly looked back at the window. "Moon's almost in place. Be a good dog and start the thing up for me?" + +"Yes, Miss Molly!" + +The wolf bounded to a panel of levers on the wall and pulled them in sequence. Gears within the device whirred to life and a series of glass lenses converged high up on the window, coming into alignment just ahead of the moon's path through the sky. + +The rabbit hopped up on the astrologer's desk, swept a patch of litter off it with a kick of her huge footpaw, and lay back on her elbows with one knee up. This uncouth posture allowed Tristan a view of her shapely legs and up her skirt at her exposed phallus. He looked away, almost wishing he had fur to cover his furious blush. + +The thrall returned to his mistress' side and sat on his haunches. "Everything's ready, Miss Molly!" + +"Good boy. Now let's sit back and watch the show." + +"Yes, Miss Molly!" + +Despite saying so, he didn't look back at Tristan. Instead, the wolf stared openly up Molly's skirt, occasionally diverting glances and flared nostrils at the footpaw which she dangled off the desk. Tristan was once again forced to look away from this lewd display, returning his attention to the strange machine which crouched over him like a spider. + +Molly addressed Tristan again. "In case you're wondering, the old duke used this thing to burn constellations into his servants' eyes. He thought it would bring good luck or something." + +Tristan shook his head as much as he was able. "Duke Ottman wouldn't do that. He was a kind and fair ruler before you killed him." + +"I don't know about that, but I *do *know he was a superstitious idiot. Constellation eyes don't do anything according to any reputable magic school I've encountered. Also, I didn't kill him - he's still alive in one of the dungeons. Probably. Anyway, I've since reconfigured the thing to focus moonlight instead." + +Tristan scoffed. "Moonlight?" + +She idly brushed her footpaw against the wolf's salivating muzzle. "Just moonlight. The lenses focus and transmute it in such a way that, in a minute, it'll make your head feel all nice and fuzzy. And here's some good news for you: the moon will only be in alignment for a few minutes, so if you can resist its pull until then I'll have no choice but to let you go." + +He felt hope for the first time since he arrived. All he had to do was resist the enchantment for a few minutes? That would be as simple as keeping his eyes closed. + +She grinned. "Just think - before dawn, you could be back in your barracks with all the other killjoys." She glanced up at the window. "Ah, the moon is coming into position now. Good luck, little knight." + +He followed her gaze automatically and saw the edge of the moon pass into the rim of the first lens. Tristan searched the light warily, but saw nothing unusual. The portion of the moon within shone the same as the portion without, only magnified and flecked with discoloration. Perhaps the witch was only a charlatan after all. It would not surprise him - she was a woman, and a peasant woman at that. Molly's very name smelled of manure; unlike Tristan, she had not even had the sense to change it to something respectable before leaving whatever village sired her. + +But while he *saw* nothing unusual, he perhaps *felt* something. It was like the sun on one's neck, only cool and soothing - like sheer fabric draped over his bare skin, or gentle spray from a waterfall. + +"Look at the little knight sink," a distant voice said. + +Tristan had forgotten Molly's presence. From the corner of his eye he saw her watching him, absentmindedly petting the head of her wolf. The wolf, meanwhile, was perversely snuffling her footpaw while running his tongue up and down its long furry sole. His phallus was fully out of its sheath now, and he slowly stroked it with his large, padded paw. + +The sight reminded Tristan of the fate he had to avoid at all costs and he snapped back into focus. As he did, he was startled to realize his mouth was slightly agape and a trickle of drool dampened his chin. The enchanted moonlight was not the irresistible pull he feared it would be, but it had absorbed him nonetheless. + +He clenched his eyes shut and waited it out. In the darkness, it was impossible to say how much time passed - his only gauge was the blanket of moonlight which moved to cover ever more of his body with its silken touch. As the seconds passed, he grew calmer. The sounds of the room faded, including the lurid panting of the canine thrall as it intensified its self-abuse. With satisfaction, he pictured Molly and her dog growing frustrated with his lack of response to her spell, the dog slowly losing faith in his mistress. The witch had said he only needed to last a few minutes, and Tristan was certain that several had already passed. But the only way to tell for certain would be to open his eyes. + +When he did, he gasped. The moon had not even reached the midpoint of the lens, but it truly *had* transmuted - it was beautiful and alive: molten pearl with veins of platinum like liquid lightning. Scintillating bands of mirrored sheen reflected the room so clearly that Tristan swore he saw his own dilated eyes staring back at him. + +"It pulls just like the tide, doesn't it?" Molly said, speaking in a sultry tone that would have been better confined to the bedroom. Her licentiousness should have been revolting, but instead Tristan found himself flushed with sudden, alien desire. + +"It's nothing," he said, fighting to keep his voice steady. + +"If you're getting this hard at *nothing*, I'd love to see what *something* does to you." + +Tristan realized he was visibly, achingly erect through his trousers and his face blazed with shame. He struggled against the restraints to try to hide it, tugging even harder than he had in his attempt to escape. Meanwhile, the wolf rose to put his forepaws on the desk and began urgently humping his mistress' footpaw. Some perfidious part of Tristan almost wished he could be so shameless. + +"Why are you fighting?" the wolf asked, as if reading his mind. "Doesn't it feel good?" Tristan ignored him. + +The silver rivulets on the moon's living surface converged into a geometric pattern and shifted hue: purples, yellows, and blues as vivid as a dream of wildflowers. Then the colors seized and pulsed. Unnatural, sourceless pleasure wracked Tristan as soft warmth and comfort washed over his muscles. He shuddered and, in that brief moment, felt more at ease than he ever had in his life. When it passed, his body craved its return like a fire on a winter night. He was dismayed to realize that this dissolute pleasure would be a more formidable enemy than he thought, but he would never give in. + +"Want to cum..." the wolf panted. + +"Not without permission," Molly said. "You remember what happened last time, don't you?" + +His ears fell back. "Yes, Miss Molly." + +"*Good boy*." + +Somehow the words "good boy" felt almost as good as the pulse of moonlight, and he only remembered to squeeze his eyes shut just as the next pulse came. It glowed even through his closed eyes and caressed his body, so much more intense this time that he gasped. + +When he did, the air he breathed in was richer and fuller than before. The previously vague smells of the room were sharp and distinct: dust, cold stone, old paper. There was something else as well, something wild like pine trees which he couldn't identify. Tristan opened his eyes and realized with a fright why the scents had grown sharper: his nose had darkened and shifted to an upturned canine snout. Meanwhile, the rest of his face was elongating in an oddly pleasant stretch. + +"No!" he said, slurring the word as his mouth shifted. + +Molly laughed. "Too bad for you, little knight. The League will never take you back like this." + +That couldn't be true. The League would surely have a way to reverse this transformation, wouldn't they? As he ruminated on this, pinpricks of fur sprouted along his new muzzle like the first drops of rain darkening stone. He forced himself to breathe slowly and was relieved to see the invasion of fur slow with it. That meant the change could still be fought as long as he kept a cool head. + +Another pulse of color exploded from the lens above, brighter and far more powerful than the first two, and Tristan convulsed and moaned helplessly. Even after the colors receded, their burned-in afterimage made his body sing with pleasure. The bindings around his wrists and ankles tightened as his muscles swelled, and he felt tufts of fur lengthen and puff out around the leather. His body grew warm, and although he refused to look down he knew it was because fur now covered his chest. Instead of patches of fur on his skin, there would now be patches of bare skin amid the fur. + +He couldn't remain that way, he thought in horror. He couldn't leave here as a mangy, half-canine freak. And that meant the only choice was to complete the change. Some part of him knew this was not rational, but he justified it by deciding he would use his newfound strength to destroy Molly and her thralls. No matter how his body changed, he was sure he could retain control of his mind - even as part of him begged for the next lightning bolt of pleasure to strike. + +All sound disappeared for a moment, then came back sharper than ever with a pop. The new ears atop his head were fuzzy and sensitive and swiveled to every stray sound: the scrabble of wolf claws against the stone floors in other parts of the castle, night birds in the trees below, the breath and heartbeat of Molly and her wolf. Tristan was startled to realize he could even hear the moonlight, like the gentle melody of a flute. + +"Look at those ears!" Molly cooed. "I bet you'd love to have them scratched, wouldn't you, little knight?" + +"Miss Molly is *really *good at scratching," the wolf groaned. "You'll like it." + +Tristan's ears flicked at the thought. Her pointed claws raking the sensitive fluff would feel unbelievable, but the pleasure would be infinitely outweighed by the shame of being treated like a pet. + +As the flute melody rose in pitch and began to trill, Tristan looked back at the moon and saw that it was nearly centered in the lens. This was it. This would be the peak of intensity, after which the light's influence would finally recede. + +"I'm not beaten yet," Tristan said. It came out as a growl, a low rumble that rolled from deep in his belly up to his new fangs. + +Despite his ferocity, Molly only laughed. "Funny. This dog said the same thing at the same point in his change. What was it, exactly? Oh, right: 'Carnival tricks like these will never break a paladin of the League!'" + +All Tristan's pleasure and terror went still at that moment. "That - that *thing* was a paladin?" + +The wolf ceased his humping for a moment. "I was?" + +Molly only shushed him with a pat on the head and he resumed. "He was part of the last group your club sent to me," she said to Tristan. "Or did you think you were the first?" + +That couldn't be right. They wouldn't have sent him out unprepared, would they? He could no longer be sure. + +But before he could process this, the moon suddenly filled the lens. There was no point closing his eyes now - the light made the room bright as day and buzzed on every inch of his body. The enchantment lay heavy on him, warm and alive and breathing - not an abstract force at all but a living beast that had arrived to claim him. + +The bands of gemstone colors on the lunar surface clenched together in a way that, though it was an indecent image, most clearly reminded Tristan of the muscle contractions that preceded sexual climax. Then the colors reached their final configuration: a prismatic flower which unfurled in wafting waves of lavender scent. Tristan braced himself. *For the League. For my fallen brothers. For how good it's going to feel - no, for how *proud* I will feel for resisting*. + +The flower exploded into shrieking crystal bells that flooded Tristan's brain with melted silver. His already-shredded clothes and leather restraints burst as he grew in size to match the other wolf. Free of his bonds, he collapsed on the stone floor, panting heavily in the pool of moonlight. + +Molly clapped her paws. "Well done. I think you lasted a full ten seconds longer than this one." She pet her other wolf on the head again, then waved him off. Reluctantly, he slunk away and waited patiently at the spot she had indicated. + +Tristan's body raged with heat and strength. His thoughts were slower now, but infinitely more intense, and as he turned toward Molly, he braced to resist her commands and fight for control. Then his eyes widened. His perception of her hadn't changed. He still bore her every bit of hate he had before he transformed - even *more* now that it was augmented with animalistic fury. + +He flew toward her with such effortless speed that the distance between himself and the witch evaporated, and the muscles in his arms turned to steel as he raised a claw to strike. Once he cut her down, the League would surely welcome him back as a hero. They would comb the earth to find a cure for Tristan - or perhaps simply embrace him as their first werewolf brother. + +Suddenly, he scraped his rough pawpads against the ground and skidded to a stop. He didn't know why he did it, and could only stare in confusion at the scant few feet separating him from the witch as he tried to will himself forward. Why had he stopped? Even in comparison to Tristan's human form, Molly was tiny, which meant she was *nothing* to him now. He could tear her apart in an instant. + +Only...that wasn't true - because when he looked up at her he saw mortal danger. + +The rabbit smirked. "Something on your mind, boy?" + +He wanted to declare that he would send her back to whatever hell she spawned from, but his throat tightened and he couldn't push out the words. He took a deep breath to try again, but as he did his heightened senses caught a lungful of her scent. + +It smelled like running with a pack through a snow-dusted pine forest on a clear night. At the head of the pack was a powerful alpha. The alpha knew the one safe way through the trees. Obedience meant warmth, safety, food, and mating, and disobedience meant the most severe punishments imaginable. + +"You're starting to get it, aren't you?" she said. From the desk, she grabbed a glass vial which had blended in with the empty wine bottles around it. "This," she said, holding up the bottle, "is concentrated alpha musk." She looked at it thoughtfully. "Obtaining this much was quite an endeavor. Fun, though." + +"But, what-" Tristan was having difficulty forming words. + +She explained, "When good little dogs like you catch its scent, every instinct in your body tells you to get down, show your belly, and beg. So do it. Beg, dog." + +The rabbit was like an oncoming tidal wave. For now, Tristan had no choice but to debase himself and wait for an opportunity to strike. He rolled onto his back with his paws in the air, compressing himself as small as possible. He wished he were even smaller, his newfound size no longer a source of strength but a vulnerability. At all costs, he had to avoid posing a threat to the alpha - no, to the *rabbit*. + +"That's a good boy," she said. A chill ran down Tristan's body and made his thick fur stand on end. *She* thought he was good? His tail wagged automatically and he had to fight to hold it still. "You're going to make me a *very* happy mistress, aren't you?" + +Telling himself to just keep playing along, he slowly nodded. + +"The correct answer is, 'Yes, Miss Molly.'" + +"Yes...Miss Molly." + +"Good boy." + +Powerful heat blossomed in the heavy, silky pouch between his legs. + +Molly uncrossed her legs and lowered her footpaws to Tristan's snout. His nostrils flared wildly and his head spun so much that he nearly passed out. She must have *drenched* them in the musk. They smelled like the alpha's bared teeth glinting in a forest fire, the entire pack turned against him and circling him in warning. + +"You know what to do, don't you?" the alpha asked. + +Tristan buried his razor-sensitive nose into her scent and washed every inch of her paws with his long tongue. Each lap burned more of himself out of his brain, but he couldn't stop. After all, the best way to appease the alpha was sincere submission. If he had to rewrite himself to be nothing but her dog, he would do it happily. Every lap of his tongue, every huff of her scent made it easier and easier to forget what came before. + +His cock slipped fully out of its sheath and drooled a puddle on his belly fur. He still had enough awareness to know this scene would be humiliating should any human walk in, but that was the *point*. In fact, he *hoped* a senior paladin would walk in now. Worshipping her footpaws in front of everyone would prove exactly how subservient he was - how little he cared for the League. Whatever that was. + +Miss Molly scratched his ears, and the dog melted. "That's my good boy." diff --git a/src/content/stories/Punch Bowl.md b/src/content/stories/Punch Bowl.md new file mode 100644 index 0000000..5d2d3c5 --- /dev/null +++ b/src/content/stories/Punch Bowl.md @@ -0,0 +1,52 @@ +--- +adult: true +description: "A microfic based on a prompt of the same name." +pubDate: "Nov 28 2024" +title: "Punch Bowl" +--- + +The bowl was as wide as her gym's pool, while the orange slices floating in the red punch were large enough for her to sprawl out on. Not that she would – the smell of liquor made the mouse's tiny head spin even from a standing position. + +“Hello?” she called again. “Can anyone hear me?” Still no response from the oblivious partygoers who towered over the little mouse like skyscrapers. + +She considered trying to climb out again. The last time she tried, she had slid right down the smooth glass and into the punch, dying her white fur a bright red that made her blend in even more. A second attempt would be even more difficult - the alcohol had seeped into her brain more deeply since last time, and the walls had grown higher each time punch was ladled from the bowl. + +As if on cue, the ladle's tree trunk-sized handle shifted again. Sophie looked up to see that Bella had arrived to refill her drink, cavernous maw open as she talked animatedly with Maya beside her without looking down. The fox carelessly scooped a pond's worth of liquid into the ladle, sending great waves across the surface that rocked the orange slice under Sophie's pink footpaws. + +“Careful!” she cried fruitlessly. Bella poured the drink into her paper cup with the crashing sound of a waterfall. Then, to Sophie's alarm, she reached down for another pull. + +As if to spite her protest, the second wave was even larger. Sophie got to all fours and dug her claws into the flesh of the fruit to brace herself, but this time her raft tossed her off completely. Her startled squeak when she broke the surface sucked in a muzzle full of punch, tasting more of vodka than fruit. + +The alcohol, mixed for much larger creatures than her, flooded her senses. She kicked frantically to stay afloat and scrabbled her paws against the edge of her orange slice, racing to climb back on before the inebriation caught up with her. + +The raft drifted away with each clumsy swipe, and she was only able to get back aboard once it pressed flat against the edge of the bowl. She fell to her knees and caught her breath, panting and dripping the toxic liquid. Her head spun and her ears grew hot as the alcohol spread through her system. + +Then a voice thundered overhead as Ash approached. Sophie couldn't process their words at first, sudden and loud as they were, but her heart thudded in her chest when comprehension came. “Time for a refill!” they had called. The handle of vodka in their paws lifted over the edge of the table like a snowy mountain rising out of the sea. + +Sophie's eyes widened. “Red!” + +Ash instantly abandoned their ruse of not seeing Sophie and stood aside to let Erin through. The lynx, who had been standing by on lifeguard duty, cupped her paws and carefully pulled the little mouse from the punch bowl. Sophie breathed deep, filling her lungs at last with fresh air. + +“What's wrong, mouse?” Erin asked. Knowing how sensitive her girlfriend's ears were, she spoke only just loud enough to be heard over the music. + +“I'm just getting a little too drunk,” she said. + +No doubt relieved it was nothing serious, Erin exhaled a warm gust of wind. “We'll get you some food. Did you enjoy yourself?” + +“Oh, absolutely. Can you let everyone know they did a great job playing along?” She had no idea where she had left her voice amplifier, or she would tell them herself. + +“Of course. Cover your ears.” Sophie did, and then Erin looked up at the rest of the party. “Great job, everyone!” Several of their friends replied with calls of “Good girl!” and “Good mousie!” + +Sophie giggled. “You know, your paws feel really nice and warm after that chilly bowl.” + +Erin grinned. “I know another way to warm you up.” The lynx raised her to her predatory maw and opened to reveal her saber-like teeth, sending a shiver of excitement through Sophie. + +She extended her rough tongue and ran it up Sophie's naked body as her hot, wet breath swirled over her. The tongue was so large that it covered her like a blanket and she moaned at the familiar sensation. Soon, Sophie's alcohol-drenched body was instead wet with her girlfriend's saliva. + +“Wow,” Sophie panted. “You haven't licked me like that in awhile.” + +“Mm,” Erin said. “It's because you taste like the punch. I'll have to flavor you more often.” + +Sophie shivered again. “You know, I think I'll go back in the bowl later tonight.” + +“I know you will, little mouse.” diff --git a/src/content/stories/Sunbask.md b/src/content/stories/Sunbask.md new file mode 100644 index 0000000..674fd9c --- /dev/null +++ b/src/content/stories/Sunbask.md @@ -0,0 +1,198 @@ +--- +adult: true +description: "A strange hare in the hotel lobby wants to take you up to his room." +pubDate: "Sep 15 2024" +title: "Sunbask" +--- + +It almost never happens in the lobby. You compliment someone's gear, or badge, or genomorph; maybe they say something back; then it peters out. Everyone is just passing through, and you never know how to hold their attention. + +This time is different. It starts when you see him coming down the escalator, impossible to miss. He towers so high above the crowd that you wonder if his morph is street-legal - and his long ears add another foot on top of that. People turn and whisper to their friends when he passes, too shy to openly gawk or to approach him in the moment. + +His fur is a warm, sandy brown, and his shirt is opened exactly one button lower than would be acceptable outside this hotel on this particular weekend. The fur poking out from beneath is latte-colored, and even that small reveal of bare chest makes your brain fuzzy. + +You lift your eyes and notice his head is turned to the side. You think he's looking for someone at first, but then you realize that his morph is in the anatomically-correct style for his species. The eye on the left side of his head is looking in your direction. + +Your heart pounds - maybe you caught his attention because you're another rabbit; maybe he's coming to compliment your morph; maybe the conversation will peter out after that, or maybe - but then again, maybe he's just coming to the bar to order an overpriced drink like the one you're suddenly cupping tightly between your paws. + +He has to push past a fox, oblivious on their phone, and the paw he lays on their shoulder is large enough that it could envelope their torso. Then he takes the seat next to yours. He curls his legs beneath him on the stool, footpaws as long as your arm resting on the rungs. + +"Always nice to see another bunny," he says easily, as if you already know each other. + +You pull yourself together. "Same to you. That morph is incredible." + +"Thanks." He waves over the bartender. "But it's not a morph. I'm first-gen." + +"Oh, wow. It's strange, but I haven't seen many first-gen at these things before." + +"Most morphs have trouble conceiving, even when the designers bother to add that feature. And even for the few of us that exist like this, it's just our lives. We don't need a fandom around it." + +"What brings you here, then?" + +The bartender arrives and he orders a triple of something. "High metabolism," he explains with a grin. + +"No judgment here." + +"To answer your question, I'm pushing out of my comfort zone by coming to the big city. Plus, there are cute boys here." He's had his left eye and both ears pointed toward you as you've been talking. + +"I'm, uh, sure you've gotten plenty of attention." + +"Less than you'd think," he says. "People are shy." + +You learn more about him over the next round. He's a desert hare from Sunbask, in the Southwest. It's one of those intentional communities that sprung up after the bubble burst. + +"Everyone claims a territory and lives a solitary life on it," he explains, "You do your own hunting, foraging, carpentry, you name it." + +"Doesn't it get lonely?" you ask. + +"Not really - we're engineered to be less dependent on social stimuli. And we still gather at democratic council meetings every month. Those are held on neutral territory." + +"What's your territory like?" + +"Mostly flat, with a red mesa at the center that overlooks everything. That's where I built my house." He sips his drink. "Not to brag, but it's a large range. Six square miles." + +"Even in the middle of the desert, all that land must not have been cheap." + +"Oh, we don't use money in Sunbask. It sounds harsh to outsiders, but for us it's all about fighting for what you have. If you want to expand your territory, you have to assert dominance over neighboring hares." + +Something about the way he says "assert dominance" makes your ears hot. You're sure he sees it too. He finishes his drink. "It's too noisy for me down here. Want to go someplace quieter?" + +- + +His room is clean and organized, and expensive-looking liquor bottles line the counter. He wasn't kidding about his low need for social stimuli; he's rooming alone and it looks like he's barely had anyone up here. + +The king-sized bed creaks alarmingly when he flops onto it, his huge footpaws hanging off the end. "Want to come cuddle?" he asks, turning onto his side. + +You swallow. "Let me use the bathroom first, then sure." + +He runs his paw down his shorts and to his bare thigh. "Take your time, bunny." + +Sitting on his toilet, it doesn't feel real that you're actually here, in a complete stranger's room. This never happens to you - it's always a friend of a friend, or someone you'd been chatting with online for months beforehand. + +You notice a few pill bottles neatly arranged beside the toiletries laid out on the sink. You consider respecting his privacy at first, but curiosity gets the better of you. One is a sleep medication - the same one you take. The other is for managing high metabolism. The last one is something you don't recognize. The instructions say: + +FOR MANAGING GENOMORPH-INDUCED AGGRESSION +TAKE TWO (2) TWICE DAILY +**REQUIRED BY US CUSTOMS LAW** + +"Huh," you say to yourself. + +When you come out, he's already stripped, clothes flung carelessly beside the bed. His huge paw is on his cock, already red and swollen. + +"Sorry to be so abrupt," he says with a grin, not sounding sorry at all. "It's been awhile, and I could use some help. Think you can take this?" + +There's no discussion about who is going to be on top, and you realize you never considered taking a dominant role with him. It's almost like he exudes pheromones to melt away any thought beside getting on your knees and servicing that cock. + +"Bunny," he says, snapping the digits of his free paw to get your attention. "I asked you a question." + +You've taken some big toys before, but this thing looks like it could split you in half. You can already feel how sore your legs will be tomorrow if you let him bottom out in you. You nod slowly. "I can take it. Just go slow." + +"Strip. Get over here." His already deep voice is lower, gruffer now. He's escalating faster than you would normally like, but you don't protest. There is almost a threat of physical violence when he gives you orders. You don't think he would actually hurt you, but his voice leaves no room for disagreement. + +You slip out of your t-shirt, then your shorts. His eyes narrow at the sight of your bare body, and the paw working his cock speeds up. Your own cock is larger and thicker than average - you'd made sure of that when designing your morph - but it's utterly irrelevant beside his. + +He snaps his digits again. "Muzzle." + +You're instantly on your knees. You crawl over your shed clothes to reach the foot of the bed, slip between his huge footpaws, through his tree trunk legs, and stare down at the head of the cock pointed at you like a rifle. + +His paw settles on the back of your head, then squeezes with enough force to crush you if you don't move it. You lower your muzzle, and then two full inches are jammed into your throat. + +"Fuck," he growls. "I don't care. I need this right now." + +The way he says, "I don't care" is a bright red flag, and when he shoves another inch into you, your throat quivers - a signal that you're about to gag. + +Then the smell of those churning, heavy balls collides with your snout and your eyes flutter shut. A rich, masculine scent fills your lungs and makes your throat relax enough to take another inch - still nowhere close to the base. + +A lifelong switch, you've never dropped into a submissive role so easily. This monster of a hare deserves to always have those intense needs of his taken care of. His sensitive red cock should never go without a warm hole to use. His velvety, virile balls should never go without draining. + +He grabs your long ears and squeezes tightly, using them for leverage as he thrusts hard into you. It hurts. The hurt feels incredible because he's doing it to make better use of you. He grunts with each push, and your jaw starts to ache as he slides in and out of your face. + +Somehow, he gets you all the way down, and your soft nose buries itself in his thick pubic fur. Between the cock jamming your throat shut and the fur smothering your nostrils, you find yourself unable to breathe. You're on the verge of tapping out when he pulls himself out of you. He's so long that there is a noticeable lag between when he starts pulling out and when he finally pops out. + +"I shouldn't, but I could flood you with seed right now," he says. + +You're still lightheaded from the face-fucking and the lack of air, so you're not sure what he means by "I shouldn't." Your eyes fix on the cock that's now slick and shiny with saliva and thick precum, even bigger and harder than it was before you started worshiping it with your muzzle. + +"Are you ready to get mounted?" he asks. + +You made sure to clean out earlier today in anticipation of a party, now completely forgotten. You nod eagerly, making your ears bounce ridiculously. + +"Then show me that fucking hole." + +He's so obviously pent-up, so vulnerable in his neediness that you think about drawing it out and teasing him more, your dominant side reactivating for a moment. But there's something in his eyes that makes you afraid of what could happen if you refuse. It would be so easy for him to physically overpower you. + +You remember the pill bottle in the bathroom - "for managing genomorph-induced aggression." Is that what you're seeing now? You try to remember if it looked like any pills were missing. It's impossible to say. + +He puts a paw around your throat and you gasp. The small claws hidden under the fur plunge into your skin. "Show. Me. That. *Fucking. *Hole." + +You're not getting out of this until he's satisfied. It's scary, but you wanted nothing more than to satisfy him a second ago, right? You liked that he's scary. You're just overthinking things. + +"Okay," you manage to squeak out. + +"Say, 'yes, Alpha.' Say it." He lets the pressure off your windpipe, but keeps his claws where they are. + +"Yes, Alpha," you say dutifully. + +"Beg me to breed your fucking hole." + +"Breed my fucking hole, Alpha-" His grip starts to slowly but insistently close until, helpless, you beg in earnest. "Breed me! Fuck every last drop into me! Leave me gaping and pregnant! Please please please-" + +He suddenly rolls you over - hard enough that your teeth clack together. You've always discussed limits before rough sex, and this is far rougher than you've ever had before. You don't have time to consider whether you still want this. His body is on top of yours, an undeniable weight that forces the air from your tiny lungs like a bellows. + +There's no question that he is going to fuck you raw. However you may have felt about safe sex before, you don't bother asking about it now. + +He says, "Don't stop begging, cumdump, or I will fucking destroy you." + +Your mouth starts going, faster than your brain can keep up. "Breed me, Alpha, use me, break me, make me nothing but a tool for your pleasure, Alpha, shove it in me-" + +Just like you asked, he shoves it in. You scream helplessly into the pillow. He puts his huge paws on your back to shove you even deeper into the mattress, which sags beneath your combined weight, and lays his legs over yours so that you can't move them. + +Your eyes water at the ferocity of his fucking, and your conscious mind evaporates. The rhythm of your begging continues, but only as a stream of vowels punctuated with the word, "Alpha." + +His own speech devolves into primal growling, and an occasional grunted phrase that you're too far gone to understand. When he bottoms out in you, deeper than anything has ever been, you both howl. + +You haven't paid attention to your own pleasure, but your prostate has taken a beating throughout this. When he pulls out and then rams the full length back into you, your first orgasm rips through your body and you spray the bed with cum. + +He looms over you and then sinks his teeth into your shoulder. The pressure builds and builds and the combined pain and pleasure is too much for you to handle. You're gone - maybe you fully pass out for a minute. + +When you come around, something shakes loose. You can now make out the phrase he keeps repeating: "Break for me. Fucking break for me." And then another detail comes back: "assert dominance over neighboring hares," he had said. You never asked what that meant, but in your brief moment of lucidity, you remember reading something about Sunbask. You're almost certain you saw it on a TSA travel warning. That name had been on the list of psychohazard communities, hadn't it? + +Then it fully clicks. "Don't cum in me!" you say. + +"Shut up," he says. "Break for me." + +You could already feel it starting when you were exposed to his precum - that hazy, submissive feeling that was so out of character for you. When his thick, dangerous seed floods your insides, you're certain that it's going to break you for good, just like he's asking for. It's going to destroy your brain and make you his. + +You try to reach him on his level. "Alpha, please, let me serve you some other way-" + +He forces his teeth into your shoulder again, even harder than before. You cry out uselessly, and cum dribbles out of you as pleasure wracks your body a second time. + +"I'm close," he pants. "Just enjoy it. It will feel incredible." + +"Please, please don't-" you beg. But you know he's right - despite everything, this has felt indescribably right. + +You let your body melt in total submission. There's nothing you can do now. His breath grows ragged, and the balls that have been slapping against you tighten as they prepare to dump their load. His cock, impossibly, gets harder and longer, ensuring that his seed will be planted deep, far too deep for you to have any hope. + +He stops thrusting and grunts in horrible relief. You brace for it. There's a throb, followed by a trickle of warmth at first. Then there is a flutter of pulsing bursts and what feels like a gallon of lava being poured into the deepest part of you. He moans in pleasure and relief. + +You don't feel anything else. Clear-minded for the moment, you think he must have just been roleplaying some kind of brain-breaking scene. He should have negotiated it first but, overall, it was still hot. It will be the last time, though; it wouldn't be smart to keep playing with someone who has so little care for consent. + +Then the chemicals within his genetically-engineered cum penetrate your bloodstream and invade your brain. You whimper at their crushing force as all thoughts are forced out of you. It's so hard to think of anything, to feel anything except the way your entire body is wrapped around that perfect cock, exactly the way it should be. + +Everything is right. + +- + +"For what it's worth, I'm sorry about all this," he says, pouring a scotch on the rocks into a plastic cup. + +"Yes, Alpha," you say, a dumb grin on your face. + +"I didn't plan on this, but the urge to dominate and expand control is so strong in our morphs. It's almost impossible to resist without medication. Sometimes even then." + +You cock your head, one ear flopping over to the side. It's hard to follow what Alpha says sometimes. You prefer simple instructions like, "Get on your back." He's told you that twice since the first time, earlier today. Each beautiful load of his wiped out another portion of bothersome thoughts. Things are so much simpler now. + +"Have you messaged your friends to tell them you're heading home early?" + +You nod eagerly and look up at Alpha for approval. He lays his paw over top of your head and you let your eyes fall closed. + +"Good," he says, making you sigh with satisfaction. He grins. "You'll fit right in at Sunbask." diff --git a/src/content/stories/Tell Me Your Secret.md b/src/content/stories/Tell Me Your Secret.md new file mode 100644 index 0000000..50a589e --- /dev/null +++ b/src/content/stories/Tell Me Your Secret.md @@ -0,0 +1,616 @@ +--- +description: "In the abyss of an alien ocean, Val must confront the dangers of the depths, a hostile lifeform, and his relationships with his own crewmates in order to survive." +pubDate: "Feb 17 2025" +title: "Tell Me Your Secret" +--- + +*Thanks to the following critters for their help editing this story:* + +- [Morgan](https://www.furaffinity.net/user/arel) +- [Chid](https://www.furaffinity.net/user/chidchud) + +*Additional thanks to [death's dynamic shroud](https://www.youtube.com/watch?v=CFCMUKmbZMg) for the title.* + +
+ +*Tell me your secret*, Val thought. + +The otter's tail switched back and forth eagerly, but his voice came out as calm as ever. "I have visual contact on the novel organism." + +A scoff from the other end of the comm. "Don't sound *too *excited there." The kilometer of water that separated Val and Opiter left the tiger's voice muffled, but his derision was unmistakable. + +Early on in the expedition, Opiter had decided that Val's affect was worthy of ridicule and, three days in, it was getting old. Val would have muted himself and sighed, if only safety protocols didn't force his end of the comm to stay open. Instead, he took a moment to center himself. + +Seven kilometers of salt water overhead, two kilometers of ice above that. Atmospheric diving suit pressurized to one atmosphere, hugging his body like a sleeping bag. Interior temperature: twenty degrees. Ambient temperature: one degree. Low whir of actuators in articulated limbs and soft hiss of breathing gas like a white noise machine. + +Despite the annoyances, there was nowhere he'd rather be. And at the bottom of the cliff before him, resting on the seabed- + +"Val?" It was Kelda this time, sounding concerned. + +"I'm fine." + +"He's just in space cadet land again," Opiter said. "Val, can you describe the 'novel organism' for us?" + +Once more, the otter looked over the labyrinthine corpse below. Try as he might to take it all in, his mind fixated on the details. Ragged frills wafting in the slow current, weaving thready lines down serpentine arms. Bruise-colored nodules dappling curtains of pale flesh. Mouths, or what might have been mouths, gaping at odd intervals. It was beautifully alien. + +"No," he finally replied. + +It was only after Opiter began laughing that he realized the inappropriateness of the response. "What do you mean, 'no?' Aren't you the scientist?" + +"Let me handle the comms, Opiter," Kelda's voice cut in. "Go and prep the specimen bell." + +"Sure thing, Kel." As he stepped away, Val heard him mockingly repeat 'No'" in an exaggerated monotone and chuckle to himself. + +"Are you okay, Val?" Kelda asked anxiously. The mouse's voice grew clearer as she settled into the comms seat. + +"I'm fine." + +"Maybe you should tell him about your neurotype." + +"It's not worth getting into it." Who knew whether it would even make a difference? "Let's just get on with the mission." + +"As long as you're sure." She sighed. "Back to preliminary observations, then. Can you estimate the size?" + +This trees-over-forest approach made more sense to Val than a request for a blanket description. The otter switched on his suit's laser scalers and aimed them down at the specimen. Those two green dots, 75 millimeters apart, provided the onboard computer a visual reference point and it soon projected its extrapolated measurements onto the HUD. + +"It's highly irregular in shape, but its longest dimensions are 6 meters by 20 meters." + +"That corroborates the drones' estimates. Hm." Val could imagine the mouse's round ears flicking as she considered this. "It should fit in the bell, but it'll be tight. By the way, it *is *dead, right?" + +"Its position is unchanged from the initial drone observation." + +"Sounds like a 'yes,' then. How about decomp?" + +"Pristine." Given the low temperatures at this depth, this was expected. However, there was one odd detail. "I don't see any benthic scavengers." + +"It must have only just fallen." + +"I suppose." If so, their find had incredible timing. Such a rich food source entering this desolate environment would take very little time to attract notice. + +"Does it look related to any other recorded species on this planet?" + +"None that I can think of." + +She whistled. "This is a hell of a find, Val." + +An *incredible* find. He suspected he was looking at the first entry in an entirely new phylum. "Yes," he agreed. + +In the brief pause, Val sensed her disappointment at his failure to audibly match her enthusiasm. *It doesn't matter*, he told himself as usual. *I'm not down here to socialize.* "Alright, I think we're ready to collect," she said. "Standard procedure - you'll do the superficial examination here in the hab and then we'll take it back to the arcology for full analysis. Stand by while I send the collection drones." + +"Wilco," he said. Kelda closed her end of the comms channel with a mechanical clack. + +*Tell me your secret*, he thought again. What *was* this creature? How did it integrate with other life in the ecosystem? Above all, impossible as it was to answer this question - what was it like to *be* it? + +Twenty long minutes later the drones arrived, their lights a constellation in the blackness. They deployed a trawling net and, with Val's help, rolled the awkwardly-shaped cargo on top of it. When the long, flopping limbs were as secure as could be managed, the drones lifted the mysterious carcass away and melted back into the dark. + +All that existed now was the flimsy disc of seabed revealed by Val's dive light, and even that was obscured by the glare of marine snow, kicked-up sediment, and the steady stream of bubbles from the CO2 scrubbers. It was a calm, clean world - an unseen universe. + +Rather than walk, Val decided to burn his built-up energy with a swim. The exertion would be a waste of O2, but with over an hour remaining in the tank and the hab so close, it was a risk he could afford. He pushed off the seabed with his footpaws, turned streamline with a flick of his tail, and engaged his suit's thrusters. Shooting through the water like a spear, it wasn't long before the mobile hab's exterior floodlights came into view. + +The hab was a collection of interconnected modular domes, among them a laboratory, hydroponics, and infirmary. Besides these work areas, there were spacious quarters for each of the three crew members, a lounge furnished in wood and leather, and even a swimming pool included at Val's request. + +This complex was currently parked beside a hydrothermal vent, whose heat reduced the amount of power needed for temperature control and provided a steady stream of extremophilic microbes for analysis. Just beyond the vent, a dark cliff plunged a hundred meters down. + +"I'm within visual of the hab," Val said. + +"Welcome back," Kelda answered. "The specimen bell is open and ready, but the drones are having trouble squeezing our big fish inside. I sent Opiter out to help them. Are you comfortable giving him a paw? If you need space from him, I understand." + +Val suppressed another sigh. He could handle himself without Kelda worrying over him. Besides, the tiger was perfectly tolerable with a task to collaborate on. "I don't mind." + +On the cliff-facing side of the hab, Val saw Opiter floating at the specimen bell's open hatch. As Kelda had indicated, he and the drones were struggling to wrestle the creature inside, folding in limb after limb only for others to furl back out. + +The tiger glanced up, his orange and white face faintly visible through his visor. "Hey, Val." + +"Hi." + +"I just want to let you know I, uh, respect you and enjoy working with you. I apologize if you were upset by anything I said earlier." + +Val was confused. What had brought this on? "It's no problem. Can I help you with that?" + +"Yeah, thanks." + +The hab provided enough illumination to work by, so Val turned off his dive light before joining Opiter. As they worked, Val noticed that Opiter's movements were ginger, as though he wanted to touch the specimen as little as possible. Nonetheless, they managed to hold it in place long enough for Kelda to remotely close the hatch, sealing them inside the flooded compartment. + +Remembering his diminished O2, Val pulled a breathing gas umbilical from the wall and plugged it into the airlock connector on the back of his suit. The outer chamber pressurized with a pop and then cool, fresh air flowed into the tanks. The meter stabilized at forty minutes before beginning to tick upward. + +With that out of the way, he turned to the specimen. In line with the measurements Val had taken, it filled most of the bell, leaving little space to move and obscuring most of the otter's vision with its scaly folds. + +"Have fun with your abomination," Opiter said. "Can I get out of this walking coffin now, Kel?" + +"Yeah, one sec," the mouse replied. "Gotta repressurize the airlock and then prep for decontamination." + +"'Walking coffin?'" Val asked after her comms quieted. + +"The ADS," the tiger explained. "Being in this thing freaks me out." + +Attempting to reciprocate Opiter's newfound friendliness, Val reached for words of comfort. "Statistically, you're safer in an atmospheric diving suit than you are in an arcology swimming pool." + +"Great." The earlier derision crept back into his voice. "That's really helpful, Val." + +Kelda cut back in. "Is there a problem?" + +"No, Kel," Opiter grumbled. + +With a sinking feeling, Val realized that the mouse must have reprimanded Opiter while he had been away. Before he could decide how to address this, Kelda spoke up again. "Hang on, I'm reading a pressure increase inside the bell." + +Val frowned. "That shouldn't be happening." The entire point of the bell was to preserve specimens at the same pressure from which they had been collected. + +"That's for sure," she replied. "I'm going to re-open the hatch and get you both out of there." + +Opiter groaned. "Can't you just open a drain valve? We *just *got this thing in here." + +"I'm not taking any risks until we run a diagnostic. Not to save ten minutes of work. Hang on to something, boys - I'm opening it up now." The hatch reopened, and Val had to whip his tail to remain stationary as compressed water from the interior rushed outside. + +Just then, he saw the cause of the pressure increase. The center of the organism - one of its fleshy centers, at least - had swollen to twice its original size. Gas buildup, like a beached whale? But how would it have- + +*ready 2 roll :-)* + +The text had flashed in his mind like a neon strobe before fading just as quickly. + +Opiter groaned. "What the hell was that?" + +He turned toward the tiger. "You saw it too?" + +"What's going on?" Kelda asked. + +He didn't know how to explain to Kelda what they had just seen, so he focused on the immediate problem - the swelling mass, which was now so stretched that its skin was translucent. + +"Opiter, we need to evacuate." + +"You're telling me." + +The tiger braced his suit's footpaws against the wall, then kicked off and fired his thrusters at max power. The tips of his suit's ears had nearly reached the exit when the creature split open like a ripping seam and burst, blasting Opiter and Val against the walls. Blood poured from the rupture and filled the bell with opaque blue smoke. + +"What the hell are those things?!" cried Opiter. + +All the otter saw was blue. "What things?" + +Opiter's response was incoherent, and he thrashed with such frenzy that the whirring motors were audible through his comms. + +"Kelda," Val said, raising his voice over the tiger's sounds of panic. "What's the damage to the hab?" + +No response. + +"Opiter, calm down. You're going to use up your O2," Val warned, to no effect. "Kelda, respond," he tried saying again. Still no response. + +The blood dispersed enough that Val could almost see to the far wall. Inside the pale mist, slippery shadows moved around and between ribbons of torn flesh - surely the "things" that had so terrified Opiter. More pressingly, he saw three more swollen masses ready to burst. + +"Opiter!" he yelled. + +He swam through the gore toward the tiger but the explosions roared in his ears before he could reach him. Their combined shockwave slammed into his chest and acceleration ripped consciousness from him. + +--- + +*r u gonna wake up :o* + +Val opened his eyes to find his depth gauge flashing the words UNCONTROLLED DESCENT. Startling awake, he clawed wildly at the water, slowing his fall just enough that when his back crashed down on the seabed it only knocked the air from his lungs. + +He lay in the silent dark for nearly a minute as he waited for each breath to stop hurting. It didn't, so he stopped waiting and rose shakily to his footpaws. + +"Kelda," he said weakly between pants. "Opiter?" + +No response. A diagnostic told him the comm was still functional, which meant the issue was on the other end. Either in a technical sense, or... + +He couldn't let himself worry about the other possibility. Instead, he assessed his situation. His remaining O2 had dropped to thirty minutes amid the chaos; a medscan showed two bruised ribs; and his depth was nearly 100 meters below the hab's. The force of the explosion must have flung him off the cliff. + +Craning his neck, he saw the hab's floodlights spilling over the edge. That was a good sign - if the explosion hadn't knocked out the lights, it couldn't have compromised the hull. + +Oddly, the lights were flickering. Power drain? That seemed unlikely - the engine case was nigh-indestructible so, again, any force that could damage it would have destroyed the lights altogether. + +He let curiosity supplant his rising terror. Focus on this question, he told himself, rather than worry about finding Kelda and Opiter dead, or getting locked out of the hab and running out of oxygen, or all that blood overhead attracting predators. Just get back to the hab and investigate. Preparing to ascend, he reached for his thruster controls. + +Then he paused. With a shift in perspective, he realized that the hab lights weren't flickering at all. Rather, something was intermittently blocking them from view. Switching his dive light back on, he found with a start that dozens or hundreds of shapes were swarming around him - slick and black like eels, with geometric bodies like macroscopic virii. Each was the size of a football, but as weightless as jellyfish as they bounced blindly off his suit. + +*hi mr otter :-)* + +He shook his head and waited for the burn-in of the neon text to subside. "Who's doing that?" he asked. + +*we r dummy :p* + +The things must have been communicating telepathically. He opened his muzzle to speak again, but found he couldn't settle on what to ask. Were they a hive mind? How intelligent were they? Why did they talk like that? + +*Tell me your secret*, he thought about saying. He had never expected to be able to say this to an alien mind and expect a response. This changed everything. + +One thing at a time. "I very much want to get to know you," he said. "But right now my friends and I are in serious danger, and I need to focus on that." + +*ya nbd* + +"My name is Val. What can I call you?" + +*ummm we like the name val. u can call us that* + +"Won't that be confusing?" + +*no? ur mr otter* + +"Alright." He found this surprising, but was happy to respect their preference. "And val is...all of you?" + +*ya ur talking 2 all of us * + +"Understood. It's nice to meet you, val." + +*u 2 mr otter :-)* + +Doing his best to ignore val's dizzying orbits around him, he planted his footpaws, kicked off the seabed, and engaged thrusters. + +A wet munching sound followed. The HUD alerted him to a mechanical jam, and he fought to remain upright as he dropped back to the seabed. He stumbled when he touched down, jostling his bruised ribs. + +When the shooting pain settled to a dull ache, he examined the thrusters to diagnose the issue. It wasn't hard to spot. One member of val lay shredded in each one, their mangled bodies gumming up the propellers. + +"Oh no," he said with a gasp. "I'm so sorry." + +*about what* >\_> + +"I accidentally...killed some of you." + +*well ya, we wanted u 2. cuz now u can't get away :D* + +He froze. They had deliberately sabotaged his suit? "Why would you do that?" + +*duh we wanna nest inside u and lay eggs* + +Val realized that val's frantic circling was a procedural prodding for weaknesses in his suit. Though intelligent and capable of communication, it seemed they were amoral predators. Then again, many people back in Val's backwater homeworld had accused Val of lacking empathy, so perhaps he should give val a chance. + +His mind made a connection. "You came out of the other creature we found, didn't you?" + +*ya we hatched inside that guy* + +That must be val's reproduction method - injecting themselves into other creatures and exploding into exponentially more copies, just like actual virii. + +As much as the otter wanted to speculate further, he forced himself back on track. Without functioning thrusters, he would have to ditch ballast. It was always unfortunate to leave litter on this untouched planet, but Val didn't see any other way to scale the cliff. + +After disconnecting both broken thrusters, he was already buoyant enough that his footpaws began to lift. Next went the emergency lead weights, which hit the seabed in a cloud of sediment, and he began to ascend at a steady 3 meters per second. + +The swarm coalesced around him, hugged his suit tight, and pulled him down. Velocity dipped below 1 meter per second. + +Rather than appeal to val's nonexistent morality, Val tried reasoning from their point of view. "There's no point keeping me here. Even if you did manage to breach my suit's hull, it would just implode, destroying my body before you could nest in it." + +*hmmm* + +A rapid sequence of images strobed across his vision - technical diagrams, classroom instruction on diving safety protocol, memories of so many journeys beneath the ocean. They were rifling through his mind like a filing cabinet. When it finally stopped, val spoke again. + +*ur atmospheric diving suit (scout-class, lutriform) is fitted with an airlock connector 4 a standard 9.5mm bore breathing gas hose. we can fit thru there* + +He blinked, eyes watering. The psychic scan hadn't been painful - only jarring and uncomfortable. More disturbing were its implications. "You understand how my suit works?" + +*no but u know how to get in so now we do 2 :D* + +He considered this. "Technically, you're correct - you *could* get in through the airlock connector. But it can't be opened from the outside. You would need me to open it." + +*do it* + +"No." + +*:/* + +Val checked his depth gauge: sixty meters to go. Enough time to indulge in a bit more conversation. "Why would you tell me you want to nest in me?" + +*wdym?* + +He paused, wondering how to explain this. "You must know I don't want you to do that, and would try to stop you if I knew. So why didn't you lie about it?" + +*???* + +Perhaps they didn't understand the concept of deception, or lacked a theory of mind altogether. But then why communicate at all? Val considered this for a moment. As a hive mind, telepathy was surely necessary for val to coordinate its members. Was inter-species communication only a side effect of this? + +*ya we're all always asking the group 4 info. if u ask us stuff we have 2 answer like ur 1 of us* + +Val wondered whether the creature from which val had spawned had also received psychic messages from them. What would those have been like? + +Nearly at the top, Val addressed them one more time. "Me and my kind are here to learn about you. If you need to nest in other organisms to survive, reproduce, and be comfortable, we can provide that in an enclosure back at the arcology." + +*???* + +Val realized he was asking val for delayed gratification, which was perhaps too much to expect from a creature less than an hour old. There was so much more he wanted to talk about, but just then the floodlights emerged from the top of the cliff like a sunrise. + +"Kelda," he called. "Opiter. Are you there?" + +A crackle of static, and then Opiter responded. "Val! It's good to hear your voice! I thought you died." + +"Nope." + +The tiger chuckled. "'Nope,' he says. Well, you're insanely lucky - that blast shot you right off the cliff and you dropped like a rock - you didn't even fire your thrusters." + +Val didn't want to think about what would have happened if he hadn't woken up in time. "What's the damage to the hab?" + +"The specimen bell was totaled, but everything else is fine." + +As designed, the adjacent bulkheads must have sealed before structural integrity failed. "We'll have to come back for the wreckage so we aren't leaving litter on the seafloor." + +"Yeah, sure," Opiter said dismissively. + +"Is Kelda okay?" + +"Kel took a knock to the head during the blasts. Medscan says it's a minor concussion. She's resting in the infirmary now." + +*what about val? :o* + +It was actually a good question. "What about v-I mean, the organisms?" + +"Dead. I made sure to stomp every single one." + +*:-(* + +Val was about to protest this unprofessionalism when his O2 meter flashed urgently: fifteen minutes remaining. Between the moving, talking, and stress-induced increase in respiration, he was far outstripping the projected capacity. "I should get inside. My thrusters are broken, though - can you come to me?" + +"Yeah, I'll let you in through navigation. Give me one sec." + +"Wilco." + +The hab extended its legs and slowly scuttled down from its perch. Once on level ground, the legs tapped out a rhythmic pattern that swung the hab around in a half-circle, kicking up towering swirls of sediment. + +Another flash of images ran through Val's mind as val scanned him again, and then: + +*hey mr otter, don't go thru decontamination. that would kill us b4 we can nest in u* + +Another good point, though not for the reasons val thought. "Actually, leave the airlock flooded. I'll attach my suit to an umbilical and ride back to the arcology inside." + +"Huh? Why?" + +"I have specimens to bring back." + +"What are you talking about?" + +The hab completed its arc, revealing Opiter's face in the nav room window high above. When the full brunt of the floodlights fell across Val, they revealed the answer to Opiter's question. Even through clouds of sediment, Val saw the tiger startle at the sight of val swarming around his suit. + +"What the hell, Val?! Kill those things!" + +"They're not going to hurt us." + +"They said they wanted to...to..." + +"Nest in you. They said the same to me." + +Opiter only shuddered. + +Val hadn't anticipated such a strong negative reaction. Hadn't they come all this way to experience the unknown? Attempting to comfort the tiger, he said, "They can't get into the suit, let alone the hab." + +"They were inside my head!" + +"They're telepathic, yes. But they have no capacity to induce suggestibility as far as I can tell." + +"Huh? What does that even mean?" + +"They aren't hypnotic," he rephrased. "Right, val?" he added quietly. + +Not quietly enough. "Who are you talking to?" Opiter snapped. + +*we can control u when we're inside u but not b4 then. that would be so cool tho :-)* + +"They're safe," Val emphasized. + +The hab, once a sight representing warmth and safety, turned menacing as it towered over the otter. Its hull was the shell of a colossal predator; the empty windows along its length were glassy eyes; and the floodlights glaring in the blizzard of sediment were beacons of divine judgment. + +"Prove it," Opiter demanded. "Prove you're not being controlled." + +"What? How?" + +"How about you show some emotion for once? Show me you're afraid of those parasites. You know, like a normal person would be?" + +Opiter had thought he was emotionless before, so wouldn't "showing emotion" now be *more* suspicious? Val knew from hard experience that pointing out this irrationality wouldn't help. + +The otter also knew that pausing to consider one's words was often taken as a sign of dishonesty so, rather than risk another second, he blurted out his first thought. "There's nothing to worry about, Opiter. val just wants to survive like any other organism." + +He realized his mistake in the deathly silence that followed. + +"'Val?'" There was no humor in his repetition this time. + +"val is the name of-" + +"Val is the name of the person you infested, you freaks!" + +The minutes were ticking down. "Let's say I *was *being controlled," Val said. "What you would need to do is tell the computer to enable quarantine protocols and then let me on." + +"Even in quarantine, you'd try to get inside my head again. I'm not letting that happen." The hab took several steps back, the tiger's face fading into the snow. Opiter was going to leave him behind, Val realized in panic. "Val, if you're in there, I'll send someone from the arcology back for you." + +"I only have ten minutes of air!" + +A long pause. Then, "I'll send someone for you." + +"Opiter!" + +The hab turned away, abyssal shadow swallowing everything outside of Val's small dive light. He jogged after it, pumping his legs as fast as he could through water that felt thicker than ever. + +*u should kill him* + +Val didn't respond. He needed to conserve O2, especially with how fast his chase was consuming it. The hab picked up speed, and would likely leap into propulsion mode in moments. Once it jetted away, it wouldn't be long before Val was reduced to yet more litter on the seafloor. If only he weren't so socially incompetent, he thought bitterly, he might have known what to say to Opiter to avoid this. + +"I knew Opiter was an ass," Kelda's voice broke in, "but I never thought he would do something like this." An indicator on the HUD showed it to be a private comm. + +"Kelda." He wanted to shout it, but kept his voice low for the sake of the urgently flashing O2 meter. "You have to do something." + +She paused, and Val worried his decision to keep his voice steady had made *her *suspicious as well. But it was only a moment before she responded, "I've got you. I'm going to launch the infirmary's emergency umbilical - grab on!" Val heard the clack of a control and then saw the long, snaking hose shoot out from the infirmary dome high above. + +"Kelda, what the hell are you doing?" Opiter demanded. + +"We're not leaving without-" she started, then cut out. Opiter must have muted her comm. + +The nozzle of the umbilical hit the seabed just at the edge of Val's dive light and dragged, disastrously quickly, behind the ambling hab. With one minute of oxygen left, this was Val's only chance. + +He sprinted, dive suit tearing through the water faster than he thought possible, and stretched out his arm. He had just brushed the bouncing nozzle with his grasper when the actuators in his legs jammed with a shuddering stop. Looking down, he saw that val had wedged their bodies into every joint they could find. + +*don't leave :-(* + +--- + +When the decontamination cycle completed, the otter re-racked the dive suit on the boarding platform and stepped out. + +Kelda was already at the door to the infirmary. "Val!" the mouse exclaimed. She ran forward and embraced val, who stiffened at the sudden contact. So many unfamiliar nerves, feeling so much. + +"Oops, sorry," she said before breaking the hug and stepping back. "You must be really overstimulated right now." + +"It's alright." + +"I don't know what I would have done if we left you out there. Opiter nearly killed you! What are we going to do about him?" + +*what should we say 2 her?* + +val felt mr otter inside, fully intact despite their grip on his body, but couldn't force him to answer. They would have to work this out for themselves. + +When mr otter let val into his body, it had been with the expectation that Kelda or Opiter would be able to tell he was being controlled and put val in quarantine. val couldn't let that happen. If val were to make it to the arcology, a place full of warm and waiting hosts, they needed to use "deception" - a concept only legible to them thanks to borrowing mr otter's brain. + +val now scanned that brain for clues. Kelda, according to mr otter, saw mr otter as stoic and patient. She admired this, but thought he was *too* patient with people like Opiter - or perhaps too conflict-averse. Therefore, in this situation, Kelda might expect mr otter to say something to try to make Kelda forgive Opiter. + +*this is going 2 get rly complicated :/* + +val said, "It's alright. Opiter was just afraid of those...parasites." + +"That's no excuse," she insisted. "He was out of control! You should have heard the things he said about you after he cut comms." + +val decided to repeat themselves; maybe this time the words would settle her down. "Opiter was just-" + +The door to the infirmary opened. The tiger stalked inside, tail switching, and stabbed a digit of his paw through the air at val. He opened his muzzle, then glanced at Kelda and hesitated. His ears drooped. All of this happened far too quickly for val to interpret. Finally, he said, "Are you alright, Val?" + +Thankfully, this was a simple yes-or-no question. "Yes." + +"Good, good." He ran a paw over the top of his head. "I'm sorry about what happened there. It was a scary situation and I may have acted rashly." + +"'Acted rashly?'" Kelda repeated. She strode toward Opiter who, though larger and likely capable of killing her, backed away until he flattened against the wall. "You were going to leave Val for dead because you were afraid of some...some worms!" + +"Those *worms* got inside my head!" + +Kelda's ears pinned back. "You've got shit for brains, so no wonder." + +"Hey!" he protested. "This is a *horizontal command structure*. I'm sick of being disrespected just because I'm your guys' junior." + +"We don't disrespect you because you're our junior. We disrespect you because you're a total incompetent who refuses to learn." + +The words were flowing faster and faster. val would not be able to keep up for long, so they needed a way out. Scanning mr otter again, they found that Kelda thought of mr otter as delicate and easily overwhelmed. They could work with that. + +They held up a paw, a small gesture which nonetheless made both crewmates fall silent. "I can't handle this conversation right now." + +Kelda's eyes widened and she nodded. "Sorry, Val. You've been through a lot today and you shouldn't have to come back to all this loud arguing. Why don't you go to the pool and have some alone time?" + +This was exactly what val hoped to hear. "Yes. I think I'll do that." + +"Hang on," Opiter cut in. "Has Val been through the medscanner since boarding?" + +A medscan would show val inside mr otter, so they had to make the crewmates think one was unnecessary. "I already conducted a scan inside the diving suit," they said. "It showed two bruised ribs. I'll have a drone bring ice and analgesics to my quarters later." This "deception" thing was getting easier. + +Opiter turned to Kelda and lowered his voice. "He *says *that, but how do we know he's not full of bugs?" + +"Stop it, Opiter." + +"I'm serious. How do we know?" + +She sighed. "For one thing, the parasites couldn't have gotten into the dive suit. Right, Val?" + +Opiter replied before val could even try. "He could have let them in through the suit's - the thing that the hose connects to. That's how they told *me *to let them in." + +"And why exactly would he have done that?" + +"Some sick curiosity, probably. It's always freaked me out how he loves touching disgusting sea monsters." + +"Don't talk about Val like that!" + +Opiter's tail slumped. Instead of continuing to press Kelda, he turned to val. "The medscan will only take a second, Val." + +val looked back at the tiger. "I'm very tired," he said. "I would like to go now." + +They hoped this would play on Kelda's sympathies again, and they were correct. "Go on, Val," she said. "Take all the time you need to recharge." + +With a rush of relief, val turned and left. Before the door closed automatically behind them, they heard two more snatches of conversation: + +"He's acting *weird*, Kelda, can't you see that?" + +"I told you about his neurotype. Stop being an ass and just leave him alone." + +--- + +val trailed mr otter's webbed footpaws through the water, enjoying the signals that this pulsed through his nervous system. This species was so complex - far more complex than any generation of val had nested in before. + +So many new sensations. Soft, thick fur; air filling lungs and stretching skin; *light *in an exorbitance of colors, shades, and reflections. mr otter's two eyes alone absorbed as much of it as dozens of vals'. Were it not such a fundamental drive, val might almost think it a shame to burst out of mr otter. + +The loudspeakers in the pool room pinged. "Hey, Val!" Kelda said. She spoke loudly and quickly. "I sent a couple drones to see if there was anything left of the specimens we collected - either the parasites or the big one they came out of. Guess what they found?" + +val considered the possibilities. "I'm not sure. There are a lot of things they could have found." + +"Right. I didn't mean it literally, but...anyway, they recovered remains! In fact, there's enough material that you might be able to perform a digital reconstruction. Interested?" + +Imitating this procedure would require far too much work scanning mr otter's brain and coordinating his body. Fortunately, val had learned an easy excuse to fall back on. "I'm still recovering right now." + +"Oh. Okay. Are you sure?" + +"I'm sure. I'll take a look when we get back to the arcology." + +"Alright, Val. Do what you need to do." She closed the channel, leaving val to their thoughts. + +Speaking of the arcology, the return was going to be a problem. According to mr otter's brain, the decontamination scanners at the entrance were far more thorough than the compact ones in the hab - and even those had been fooled only because they had focused on the exterior of the dive suit. + +Maybe val could take over Kelda and Opiter and use all three bodies to force their way in. More bodies was always better. Unfortunately, val needed time to mature inside mr otter's body before being able to spread. + +Maybe val could *buy *time. Another scan told them that they could put the hab out of commission for at least a day. All it would take was a few flipped switches in the nav room. val exited the pool and passed under the fur dryer, using mr otter's thick tail for balance as they made their way there. + +On the way, val realized that if Kelda or Opiter saw what they were doing, they would try to stop them, perhaps stabbing val with a knife from the galley or a scalpel from the infirmary. + +No, that wasn't right. For a variety of complicated reasons, Opiter and Kelda wouldn't be willing to kill mr otter just to kill val. Instead, they would find some non-lethal method. Opiter, for one, could simply pin val to the ground and restrain them. + +Kelda, however, was smaller and weaker than mr otter. Nearly to the navigation room, he considered what she might do. Perhaps she would use some tool to negate val's size advantage - maybe an anti-predator shock gun for the range it would provide. + +When they opened the door to the nav room and saw Kelda standing inside, it was not without some satisfaction that they noticed just such a shock gun in her paw. + +Should they act afraid, or would that be more suspicious? mr otter wouldn't hesitate before reacting, so val asked the first question that came to mind. "Why are you holding that?" + +She didn't answer, only stared at them. Had she suffered a stroke? If so, that might leave her body unsuitable to nest in. + +"Are you alright?" they asked. + +"Are *you*?" + +Stalling for time, val decided to keep asking questions. "Why do you ask?" + +"You're acting strange." + +"I'm tired and overwhelmed." + +"I've seen you tired and overwhelmed," Kelda shot back. "What's really going on?" + +Her suspicion reminded val of Opiter's suspicion. Actually, that comparison was useful - Kelda disliked Opiter's suspicion, and wouldn't want to imitate it. "You're acting like Opiter," they said. + +The mouse's ears flicked, even though there hadn't been any unusual noises as far as val could tell. "Opiter doesn't *know* you. I don't claim to know you that well either, even if we have been out here a few times together. Still, I do know one thing." Worryingly, she took a step closer. + +"I would like to go to my quarters now," val said. "I would like to take analgesics for my bruised ribs." + +The mention of mr otter's injury did not evoke the sympathy he hoped for, and Kelda went on as though they hadn't spoken. "You know what Val says sometimes when he thinks I can't hear him? 'Tell me your secret.' He's said it to fish, rocks, and brine pools; I even once heard him say it to the pool filter after it got replaced with a new model." She smiled. "Honestly, it's really cute." + +A compliment. According to mr otter, the way to respond was - "Thank you." + +Her smile disappeared. "That's how I know there's something wrong. I've seen Val stay up until 0400 doing dissections, but you say you're *too tired* to study the specimens? No way." She raised the shock gun. "I want you to get in the medscanner." + +"No." + +As difficult as body language was to interpret, the way the mouse tensed up left no doubt that this was the wrong response. "What do you mean, 'no?'" + +If only val was further developed, they could spit one of their bodies at the mouse and end this. "I would like to go to my quarters," they said. "I'm too tired to get in the medscanner." + +The mouse narrowed her eyes. "If you're so tired, how about you take a nap?" + +She fired a cluster of four shock bolts into mr otter's chest. Electricity - around 50,000 volts, mr otter's brain helpfully supplied - cavorted through his nervous system and made the sensation of the pool microscopic by comparison. mr otter's brain and body shut down, and val lost the ability to steer him. + +*:c* + +--- + +After the arcology medics extracted val from his body, Val was asked to quarantine himself in his quarters. Even calls were forbidden in case of the possibility of psychic contagion. + +The hardest part wasn't the painful recovery from multiple surgeries, nor did Val experience emotional trauma from his experience; everything that had happened to him while under val's control was like a low-resolution video in his memory. + +Rather, what bothered him most was how long it had taken for one of his crewmates to take val down. When he had decided to let val take over, he had done so in certainty that Opiter or Kelda would be able to differentiate him from an alien lifeform with no empathy. That it had taken more than an instant disturbed him, and he wasn't sure whether it said more about them or him. + +Val scratched his chest. The surgeons had had to shave large sections of his fur, which was now sensory hell as it grew back. The cool water of the pool barely touched it, and it was impossible to sleep without sedatives. Doing his best to ignore it, he scrolled through the arcology news feed for updates on Kelda or Opiter. + +Opiter was leaving for the nearest hubworld. He was quoted saying, "I could never do what Val did, letting those things inside me. Not even to save my life. I *still *think they should all be destroyed. That's how I know I'm not cut out for this research stuff." Val agreed with this assessment. + +The only quote he could find from Kelda was, "I regret that the situation went as far as it did, and hope that new safeguards can be implemented to prevent anything similar from happening again." He agreed with this assessment as well. + +--- + +The quarantine timer expired at 0600. Val stayed up all night and, the moment he was a free otter, boarded a tram to the Turquoise Sector biolab and located the containment tank labeled *Hylobenus vali -* "Val's leeches." A note underneath the label said the specimens preferred to be called "val." + +During Val's quarantine, val had developed to maturity and been allowed to nest inside a new organism - a coelacanth, Val noted. val's bodies lazily circled the tank, with the large fish trailing behind. + +The tank's anti-psychic shielding kept val's telepathic signals from reaching the general public until they were better understood. This was unfortunate, as Val had eagerly anticipated speaking with val under better circumstances. He would be sure to apply for a work cycle here sometime soon. + +Instead of speaking, Val pressed a webbed paw to the glass. It was icy under his pads, and he automatically shifted his arm to soothe a patch of itchy short fur against it. Several of val's bodies swam up to him, probably drawn by the warmth. *Sorry, *he thought. *I'll try anything once, but in this case once was more than enough.* + +Val was the only person in the lab at this hour, and the silence reminded him of his period of social isolation - a period which had begun long before the quarantine. "Tell me your secret," he might have said, but he suspected he already knew it. diff --git a/src/content/stories/The Corpse Road.md b/src/content/stories/The Corpse Road.md new file mode 100644 index 0000000..b74b499 --- /dev/null +++ b/src/content/stories/The Corpse Road.md @@ -0,0 +1,8 @@ +--- +pubDate: "Oct 23 2013" +title: "The Corpse Road" +--- + +This is the oldest story of mine that I have access to. It only exists in audio form at [the Anthro Dreams podcast](https://furaffinity.net/view/11901947/) [(local mirror)](/assets/stories/1382590833.was1_ad_055_-_the_corpse_road__fa_.mp3) + +The story is probably terrible - I've never actually listened to it. diff --git a/src/content/stories/The Onyx Palace, Pt. I.md b/src/content/stories/The Onyx Palace, Pt. I.md new file mode 100644 index 0000000..bbf2a3a --- /dev/null +++ b/src/content/stories/The Onyx Palace, Pt. I.md @@ -0,0 +1,258 @@ +--- +adult: true +description: "The wandering mercenary Shere, imprisoned by the decadent Prince Mergen, struggles to keep his sanity in the face of the dangers and temptations of the Onyx Palace." +pubDate: "Sep 15 2024" +title: "The Onyx Palace, Pt. I" +--- + +Great stone walls yawned overhead, far beyond the reach of the braziers' yellow light. Though its white-masked servants stoked the flames incessantly, the Onyx Palace was simply too vast, too stark and alien to ever be warmed. + +Two Dodrec guards prodded Shere into the foyer, and the entrance gate thudded shut behind them with a terrible finality that echoed long. + +"The prince wants him in the throne room," another Dodrec hissed as they passed. + +"Look at that," one of his escort said mockingly. "The dirty barbarian gets to meet the prince." + +The bear, naked, paws manacled behind his back, lacked the energy to reply. The wagon journey through the wastelands had been harsh, doubly so because of the toxin frothing in his veins. Even now, days after being struck by the poisoned blade, he was barely emerged from the malarial swamps of fever dreams. + +The three men passed below large, extravagant tapestries depicting royal hunting scenes. In one, snow leopards in twinkling diadems rode giant millipedes and rained arrows down upon small game. The heavy fabric sealed in the heat of the braziers, but could not fully repel the deathly cold. Even with his thick fur, Shere shivered. He could not imagine how the reptilian Dodrec withstood this place. + +They entered the cavernous throne room, the throne itself so distant that its shining jewels were as dust motes in a sunbeam. As they made their long approach, Shere saw that the figure seated on that throne could be none other than the usurper Prince Mergen. + +He was just as the rebels had described him: a tall, slight, immaculately-groomed young snow leopard with sharp green eyes. He slouched in his stolen throne with a leg thrown over one of its arms. The meteorite diadem of his office was cocked casually over his alert ears, and he idly twirled an emerald scepter as he joked and laughed with members of his court. + +All fell silent when the guards delivered Shere to the foot of the dais. + +"And here is our guest of honor," the prince said, amused. "We were just talking about you - the interloper who has been making so much trouble of late." + +He jabbed the scepter toward a wizened old wolf. "Baron Kyrn, how many hectares of your vineyards did you say the rebels burned?" + +"At least seven thousand, Your Grace," grumbled the wolf. + +Gesturing to another he said, "And Lord Kabir, how much ore was estimated lost when the rebels flooded your silver mines?" + +"Over one million pounds, Your Grace." + +Prince Mergen rose to his footpaws. Shere's guards, along with the members of court, bowed their heads. He strode down the dais toward Shere, whose throat rumbled in a low growl, and the guards forced the bear to kneel. + +Even on his knees, the huge bear was at at eye level with Prince Mergen. Shere bared his sharp teeth, but the snow leopard's sensitive ears didn't even flicker. He only took a long look at the bear, lingering on his exposed phallus for an indecently long moment. + +Finally, he met Shere's eyes and began to speak. "Unlike my poor, ailing father," he began. "I have been generous to my friends. To Kyrn, to Kabir, to countless others. A resentful few have called me a tyrant for this generosity, not realizing that the prosperity of the nobility is the prosperity of Ellara." + +He suddenly raised the scepter as if to strike Shere with it, then stabbed its point into the stone floor. The long echo rang beneath the prince's next words. "And you, a stranger to these lands, think to interfere in affairs you know nothing about? If you are responsible for even a tiny portion of what this misguided revolt has cost us, then you have a considerable debt to repay." + +He jabbed the scepter into Shere's throat and lifted his chin to hold his gaze. + +"Only a lifetime of dutiful service could begin to repay what you owe," the prince said. + +"Never," Shere growled. + +"You will serve me," Prince Mergen vowed. "I have many methods at my employ to break the strongest of wills. There is the torture of burning sands, the mesmerizing statues of the Hall of Serpents, the soul-stealing elixirs of the palace alchemists, and many more besides. + +"Though I could break you in minutes, your path will be a slow one. I will take my time, savor it, and you will watch helplessly as your will ebbs away. Eventually, you will be nothing but a toy that will dance at my command, a reminder to all others of the consequence of disobedience." + +Shere had had worse threats leveled against him, and only ever had one answer. His captors had let down their guard as the prince had spoke, so Shere was able to slip from their grasp and spring to his footpaws. Then, arms still restrained behind his back, he artlessly hurled his body into the prince. The snow leopard's eyes went wide and his tail puffed up to double its size as they crashed to the floor. + +The guards strained to pull the heavy bear away, succeeding just as his jaws snapped shut, missing the prince's throat by mere inches. Shere ceased struggling only when two more Dodrec arrived and leveled their spears at him. The prince stood, readjusted his crown, and brushed down his fur, regaining his casual posture with such ease that it was as if nothing had happened. + +"That attitude won't do at all," he said. He withdrew something from his robe and tossed it to one of the guards. + +Before Shere could react, the guard slapped it onto his neck. It was hard and cold, and slithered repulsively through Shere's fur. As he futilely tried to shake it off, it coiled around his throat and hardened into a solid gold band, a collar so tight that each strained breath pushed it into his windpipe. + +"Take him to a cell," the prince said. "A dark and cold one." + +As the guards pulled the bear to his footpaws, the prince padded back to his throne and resumed his conversation with his sycophantic lords. + +The way to the dungeon was convoluted and seemed to double back on itself several times, though they never entered the same hall twice. The Dodrec led the bear to the end of a dark, forgotten corridor that smelled strongly of mildew and rat droppings, then stood him before an iron door. + +"Welcome home," one of them said as the other unlocked his manacles. + +Though exhausted, Shere had been prepared to fight as soon as his paws were free. Once unbound, he swung his claws at the face of the nearer of the two guards - or tried to. Dizziness washed over him, and the collar around his throat throbbed with heat. He shook his head and tried again, but an even stronger wave of dizziness sent him stumbling to the floor as the Dodrec broke into hissing laughter. + +The collar prevented him from violence, he realized. It tightened at the mere thought of it, and would likely kill him before he could land a scratch. + +The guards pushed him into the cell without resistance and bolted the door with a heavy clang. A moth-eaten bed on the floor was the only furniture in the small, freezing room. Shere felt entombed, buried alive who knew how many feet below the earth. + +Only days earlier, he had been riding across the plains under the banner of the rebel army, and now he wondered whether he would ever see the sun again. He had known that traveling to this land to fight would be a risk, but he hadn't guessed it would end like this. + +His head swam. The toxin was not yet cleansed from his body, and it might be another night of restless sleep before he fully recovered. But, once he did, he would find a way to break his enchantment, escape the Onyx Palace, and hopefully open Prince Mergen's throat on his way out. + +He was woken too soon by a metal squeal as a fresh pair of Dodrec opened the cell door. + +"Get him up," one said. "The prince is waiting." + +Another hot wave of dizziness washed over Shere when he reflexively tried to fight back, so he could only growl uselessly as they yanked him upright. + +On the way, Shere kept his senses alert and observed as much as he could. He tried to build a mental map of the palace as they walked, but the route was once again convoluted and contradictory. At one point, they passed below a foreboding stone archway, then doubled back through it only to find themselves in a new hallway. + +All the while, the guards talked among themselves in their native tongue, which Shere pretended not to understand in hopes of encouraging loose talk. + +"He's a big one, isn't he?" the first guard was saying. + +"Big, but soft. We could have had him in his cell, you know. He wouldn't have been able to resist, thanks to that collar." + +"I'm filled to the brim with eggs right now. What I would give to break his mind and give him a clutch. He's big enough to hold two dozen at least." + +"I already egged another prisoner last night, but I would still put a bucket of seed in him when you were done. I bet that would break him for good." + +The other guard growled his approval at this. "Too bad he's the little prince's toy. We'll just have to save it for that new recruit they brought in. He's weak enough to pin down between the two of us, don't you think?" + +Their vulgar dialog fell silent when they reached a small, nondescript wooden door. Reluctantly, one of them opened it. Inside was a bridge across a black abyss, in which Shere could not make out walls, ceiling, or floor, only the faint glow of torchlight on the other side. The canyon-like space was so large that, if the palace had any consistent geometry, they should have crossed through it multiple times by now. + +All three men fell into solemn silence as they padded slowly across the bridge. For no reason that Shere could explain, his heart pounded and his skin was icy cold under his fur. Some primal instinct told him that to make a sound would be certain death. The place reminded him that the Onyx Palace held unspeakably ancient power which its current regents could not hope to understand or control, even as they borrowed the trappings of its prestige. + +When Shere reached the other side of the bridge, he found he could breathe again, and the chill of the hall outside was like warm sun on his fur. + +They reached a heavy circular door which required the strength of both guards to roll aside. Inside was a small antechamber with a marble bath and three vulpine attendants in featureless white masks. The room was so heavily perfumed that Shere's nose burned, feeling on the verge of sneezing. + +"This is where he wants you," one of the guards said, and delivered Shere into the care of the attendants before rolling the door shut once more. + +Without speaking, they put their paws on the bear and directed him toward the fragrant bath. He saw no other option, and found that the collar prevented him from resisting even this gentle urging. As he sank into the warm water, he displaced so much of it that it overflowed and ran over the side. + +Once he was submerged, they scrubbed his thick fur clean of the dust, sweat, and dried blood of campaign. He could not imagine what purpose Prince Mergen had in giving him this treatment other than to put him off his guard but, despite himself, he found the sensation pleasant. + +Once finished, the attendants led him to a mirror, and he saw his brown fur had been made lustrous and smooth. He hardly recognized himself. In another context, he might have felt fascination or even vanity, but under these circumstances he could only look on his reflection with indifferent contempt. + +As they combed and dried him, Shere felt one attendant's paw drift between his legs and graze his cock. He thought it was an accident at first, but after a second, bolder touch, he was sure of the fox's intention. The bear could not even think about swiping the paw away without his collar growing warm, and the fox stole several more grasping feels before they were done. To be in such a vulnerable, helpless state was infuriating, and he could only growl uselessly. + +Though he didn't want to admit it, the touches also reminded him how long it had been since he had had sexual release. There hadn't been time to indulge on the road, but the pressure in his heavy balls told him that the insistent need had grown in him nonetheless. + +Their work concluded, the attendants opened the opposite door of the antechamber. This led to a much larger room, one which held the first task he would perform for Prince Mergen. + +This was an expansive atrium filled with exotic plant life and the singing of birds. A skylight spanned the room, letting in the first natural light Shere had seen in a day. It was pleasant at first, until he remembered that the true sky over Ellara was hazy and dimmed by the fires of war. The image he saw overhead was an enchanted, false one for the comfort of royalty. Upon realizing this, the beauty of the atrium turned sour. + +"Over here, brave warrior," called the voice of Prince Mergen. + +Shere begrudgingly followed a winding trail of stepstones toward the sound, skinks and butterflies fleeing before his heavy padding. He found the snow leopard in a clearing, reclined on a plush velvet pad atop a waist-high stone platform. + +The prince wore only a gauzy sash which fell like a curtain over his shoulder and waist. He was laden with gold rings and bracers, and a gold band circled the end of his fluffy tail. Even his footpaws were adorned with toe rings and thin, dainty anklets of elaborate chainwork. + +"What is this about?" Shere asked. + +"Don't be like that," the prince taunted. "Admit that you enjoyed your grooming session at least a little." + +Shere felt his ears fall flat against his head. + +He looked the bear over. "My attendants did a fine job. They've softened your rugged exterior and made you into a civilized, approachable member of court." + +"I'll ask you again. What do you want?" + +The prince shook his head. "Some day soon, I will teach you the nicety of small talk before business. But, for today, I will pay no mind to your discourtesy." The snow leopard gestured to his left. "You will find a bottle of oil on that table. You are to massage my aching muscles." + +Shere scoffed. "You've never worked your muscles in your life." + +"I may never have stepped onto a farm or a battlefield, but I have surely engaged in a great deal of other strenuous activity." + +Shere rolled his eyes and took up the glass bottle. Uncorking it, he found it had a sharply floral smell, not entirely pleasant or natural. + +"I don't know how to give a massage," Shere said. + +"Trust me, I will tell you when you're doing something wrong. Just touch my body in ways that would feel good if they were done to you." With that, he turned onto his stomach. + +Shere almost preferred to face the burning sands at this point. Sighing, he smeared a few drops of the oil over his paws, then reached reluctantly for the prince's shoulders. + +"You'll need more oil than that, bear." + +Grumbling, he doubled his pour of the floral stuff, black pads growing shiny and slick with it, then started his work. His paws easily enveloped the small snow leopard's shoulder blades, so his fingers did most of the work in finding knotted muscles and working them loose. + +"There you go, bear." + +Shere was unsure how long to focus on each area, but the prince moaned his approval whenever he worked a new muscle, so he gradually worked his way down to the lower back. As the snow leopard's silver fur grew shiny with the oil, it became easier for Shere to rake his fingers through it. Its strange smell grew more concentrated as well, until it began to sting his nose. He did his best to ignore it. + +The light and sounds of the atrium faded away as Shere found his focus absorbed by his work. The prince's body was surprisingly well-toned, as if he really did engage regularly in hunting, running, or swimming, or perhaps, as he had lasciviously implied, the exertions of the bedroom. + +For some reason, Shere's thoughts lingered there. How would such a corrupt and decadent royal satisfy himself carnally when he had access to anything he wanted? Shere had always been simple and incurious about things of that nature, and could not imagine what he would do in a similar position. + +"You'll need to refresh the oil, bear," the prince said. + +Shere poured a large helping of the stuff onto his paws, letting the excess dribble onto the prince's back. It seemed he could never use too much, so there was no point trying to conserve it. The smell from the fresh pour hit his nose in a wave, and the bear's vision blurred as his eyes watered. + +"Is there a problem?" the prince asked. + +"No only, what's in this oil?" the bear asked. + +"Orphan tears," he said sarcastically. "What does it matter? It smells pleasant, doesn't it?" + +Shere wasn't sure how to answer, but felt it would be easier to agree. "Yes." + +"Say, 'Yes, Your Grace.'" + +Shere said nothing. + +"You know what I can do to you. Is it really worth it?" + +The strangeness of being here in the atrium, giving the prince a massage like this, was making it hard to see why the words he used mattered so much. He would escape eventually - he always did. + +"Yes, Your Grace." + +"That's a good bear. By the way," the prince said. "Don't be shy." The snow leopard flicked his gold-adorned tail out of the way and gave a slight, inviting movement of his exposed rear. + +Shere had already come this far. He placed his paws on the place indicated and found that there were indeed tense muscles there for him to work. Unexpectedly, heat bloomed between his legs as he did, and certain images sprung to his mind unbidden. He quickly moved down the prince's body, hoping that his briefness would escape comment. It did, and he made it to the calves without further distraction. + +"Put a thick spread of oil on each of my footpaws," the prince commanded. "The pads can get quite rough." To punctuate his point, he curled and flexed the toes of his fluffy paws. + +Shere was already lightheaded from the cumulative effect of the oil's sharp smell, but supposed he could handle another minute. He poured out a much larger portion than before. It flowed onto the prince's footpaws, and drizzled between his toes onto the stone tile. + +The pads were indeed rough, and readily absorbed the moisture of the oil, growing shiny and pliable. Moving down, the muscles of the prince's arch softened quickly. Shere repeated the process with the other footpaw, head spinning as the smell of the second huge dollop filled his snout. + +He took a step back from the prince and shook the excess oil from his paws, attempting to rid himself of the intrusive smell. "We're done here," he said. + +The prince looked back at Shere quizzically. "Oh? By my estimate, we're only half finished." + +He turned onto his back. The soft, light-colored fur of the prince's chest and stomach held Shere's attention and he found himself unable to respond. The prince spread his legs slightly and the bear saw that the feline's cock was half-erect. + +Shere glanced away. "What do you really want from me?" + +"I want you to finish the task I gave you." + +Although Shere's thoughts were growing blurry, this sounded to him like a reasonable request. It would only take a few minutes to massage the chest, thighs, and calves, and then he would return to his cell to plot his escape. + +The snow leopard held up the bottle of oil. Shere reached for it, but stumbled as he was struck with sudden lightheadedness. Taking advantage of his loss of balance, the prince raised one footpaw, then hooked his other ankle behind Shere's neck to pull his snout deep into the soft and oil-coated pads. The smell of the oil he had laid on so thickly hit him in a flood and his knees went weak. + +"Breathe deep, bear." + +Obeying automatically, Shere took a lungful of air that was more oil than oxygen, and his vision dimmed as hot pheromones swarmed his body. + +"You didn't even feel it when the potion started seeping into you through your pawpads, did you?" the prince taunted. "You didn't suspect a thing." + +He crushed the bear's face tighter against his footpaw. The mind-melting scent was overwhelming, yet he was unable to pull away. Shere's cock grew painfully hard and heavy between his legs. + +Distantly, the bear saw the prince lubricate his fingers with the oil, or, rather, the potion. The snow leopard pushed his fingers into his tailhole easily, then worked a larger amount inside. + +"Imagine, then," the prince said, "how readily your needy, swollen cock is going to absorb this aphrodisiac. Fucking your prince is going to be like nothing you've ever felt, and you're going to keep coming back for more. Aren't you?" + +"Yes, Your Grace." The words came automatically, even muffled by pillowy footpaws as they were. + +"I'll make you addicted to my body. You won't think of anything other than servicing my cock, my footpaws, and my hole." + +The prince finally released his hold on Shere. He took a deep lungful of air, but his snout was now so coated in aphrodisiac that it did him no good. The only functioning part of him was his cock, which was fully prepared to do what it had been designed to do. + +"It would probably break your mind to deny you relief, so I'll be generous this time. Do it, bear," the prince commanded. + +"Yes, Your Grace," he panted. + +Shere took a wobbly step forward and positioned his cockhead at the prince's entrance. The prince had lubricated himself so well that it took only a little pressing before he slipped in. At that point, his mind melted away entirely, and the bear found himself unable even to continue the act without the prince's insistent verbal instructions. + +"Keep pushing, keep pushing, good bear. Now thrust. Thrust. There you go. You're doing so well. It feels incredible, doesn't it? That dumb look on your face makes me wish I hadn't built up such a tolerance to this stuff." + +It wasn't long before Shere felt pressure building in his balls and at the base of his cock, and he picked up the pace. + +The prince firmly pressed a footpaw into Shere's face. "You don't get to finish before your prince." + +Muffled, he said, "Yes, Your Grace." + +"But you may have the privilege of helping me finish." + +The prince guided Shere's paw down. Shere wrapped it around the prince's cock and pumped it up and down in time with his thrusts. His pads were so slick with the potion that it slid along the shaft easily, and soon he felt the prince's legs shake and tighten their grip around his waist. + +The prince gasped and shot a long rope of seed that fell across his chest and dribbled down Shere's paw. Unable to hold back any longer, Shere let out his own pent-up load into Prince Mergen with a huge, unrestrained groan. + +He pulsed and throbbed in indescribable pleasure more times than he could count before it was over, and then his heavy body collapsed on top of the prince. + +"Say, 'thank you,'" the prince said. + +"Thank you, Your Grace," the bear said. + +His mind beginning to clear, he measured the astronomical amount of pleasure he had just experienced against his willpower and realized he might be in serious trouble. How long would he be able to hold out against it? + +The prince pushed aside Shere's weakened body easily and stood. "You require more training, but you did an adequate job. The guards will be waiting for you outside." diff --git a/src/content/stories/The Onyx Palace, Pt. II.md b/src/content/stories/The Onyx Palace, Pt. II.md new file mode 100644 index 0000000..695ccb3 --- /dev/null +++ b/src/content/stories/The Onyx Palace, Pt. II.md @@ -0,0 +1,270 @@ +--- +adult: true +description: "The wandering mercenary Shere, imprisoned by the decadent Prince Mergen, struggles to keep his sanity in the face of the dangers and temptations of the Onyx Palace." +pubDate: "Sep 15 2024" +title: "The Onyx Palace, Pt. II" +--- + +Even after Prince Mergen left, it took Shere some time to regain the ability to move. Even then, he was in no hurry to reunite with his guards. The illusory light was pleasing after so long away from home, and the cool breeze and gentle spray of falling water felt wonderful on his freshly cleaned fur. + +Even for his stubborn nature, it was going to be hard to resist the pleasures of the palace, especially if he were to regularly experience such mind-shattering climaxes as the one he had just had. A shudder ran through his body as he remembered the sensation. Better to return to his cell with its mildew and moldering bed for a reminder of the true nature of this place. + +The guards were waiting for him outside. + +"He looks even more tempting now that the little prince has had him cleaned up," one of them said in Dodrec. "Mind all softened by that aphrodisiac, too. It would be so easy to break him down into a breeding hen." + +"Stop," the other hissed. "Now you're getting *me *worked up." + +As they led him back to the dungeon, Shere realized with trepidation that they would once more have to cross the bridge over the darkness. He hoped he would be wrong, that they would take an alternate route back, but the unassuming wooden door appeared before them nonetheless. + +As they crept inside, he felt the malevolent presence more strongly time time, like something hovering just out of sight in the deep shadows. The guards must have sensed it too because they hurried him across the bridge as quickly as they could without making a sound. + +He had given this moment some thought. It would not be easy, and he did not know if the collar would permit him to do it, but he might not get another opportunity if he did not seize this one. + +He was so gripped with fear that the most he could manage was a hoarse breath at first, but even this was enough to turn the heads of the two Dodrec. Closing his eyes and summoning all of his willpower, he inhaled. + +"Stop him!" one of the guards said. + +Against every instinct screaming at him to stay silent, he forced out a roar that was deafening even to his own ears. He shook with terror, and roared even louder to drown out the fear. Eyes still clamped shut, he sensed the approach of one of the guards and just managed to sidestep the thrust of a spear point. + +Shere fell quiet only when his lungs were empty and burning, his roar reverberating in ghostly echoes. Nothing happened for several long seconds. Then, daring to open his eyes, he saw the two guards looking at something overhead with expressions of pure terror. + +Instinct told him that they had made the wrong choice in looking. He fixed his gaze to the ground and walked slowly. He did not even lift his eyes to see how far he had to go, but only moved one shaking leg at a time. The guards did not move to stop him, nor make any other sound. Shere reached the door and quietly opened it with a shaking paw. + +As soon as he was out, he slammed the door shut, legs weak and vision dimming from the blood rushing to his head. The collar simmered at his throat, but it seemed that whatever had happened to the guards was too ambiguous, too indirect to earn any reprimand. + +At this point, he was less afraid of the collar and more afraid of something following him out of that room. The door would hold, he told himself. It had held back whatever was inside all this time, perhaps since the age of the ancient horrors that had built this place, and it would not fail now. Eager to get away from the door, secure as it may be, Shere started down the hall. + +However, a small voice stopped him. "Please, don't let me die in here." It was one of the Dodrec, speaking to him from the other side of the door. + +He turned back as the collar began to boil. "Why shouldn't I?" + +"If you let me out, I can sneak us both out of here. Just don't leave me in here with that thing. Please, I'm hurt and can't move." + +Shere had no reason to trust the guard, but the growing heat at his neck told him he couldn't abandon him either. "Tell me the way out and *then *I'll open the door." + +"Please, just open it and then I'll tell you. That thing is coming back." + +The collar was now so tight that he could not respond. + +"You can trust me. Just let me out." + +Unable to take any more, he flung open the door. It was only after he had done so that he realized that the voice's last words had not been in Dodrec, nor Ellaran, but Penemerish - his own mother tongue. + +There was nothing on the other side, as if the two Dodrec had never been there. He slammed the door shut once more, but not before he felt something slip by him. It was a rush of warm air, like the exhalation of a sleeping beast. He shivered and tried to tell himself it had only been his imagination. + +Pushing away his lingering dread, he moved quickly and quietly through the halls. When he passed below the familiar stone archway, he knew he was on the right path back to the dungeon, and from there could retrace his steps to the palace entrance. + +Shere's ears twitched to the sound of voices from around the next corner. He would have no recourse if caught - the collar would prevent his resistance to even the lightest restraint. With no other choice, he opened the nearest door and stepped inside, pulling it shut behind him just in time. + +He found himself in a dimly-lit, stiflingly hot room choked with the smell of incense. Looking around, he found his view blocked from every angle by floor-to-ceiling velvet curtains. Once he could no longer hear the voices in the hallway, he turned back to the door to leave, only to find that it had vanished. + +"Of course," he grumbled. + +Seeking another exit, he pushed through the curtains, untrimmed claws catching on the soft fabric as he went. Opening a final set of curtains revealed the room's main living area, a large space which was strewn with plush pillows along the floor and lit by a dozen braziers which kept the air intolerably warm. + +The room was full of Dodrec. Some slept in a huddle to share body heat, some drank from bottles of spiced liqueur, and yet others raped their eggs or seed into each other. Slowly, they all looked up from what they were doing to study the large mammal which had just invaded their space. + +Before Shere could react, two of them moved to block his exit, or what he thought was the exit, as the tightly-overlapping curtains had fallen back into place and obscured the way from which he had come. + +"Oh, is someone lost?" one hissed. + +"Such a big, warm body," said another. + +"And look at that collar. His body may be strong, but right now he's just a helpless cub." + +They raked their claws through his thick fur, sinking their fingers in to find his warm flesh. + +Swallowing his pride, Shere made the one move available to him. "I'm here at your prince's pleasure," he announced to the room. "Any hand you lay on me, he will have removed." + +Out of the corner of his eye, he saw one small Dodrec scurry out of the room after squeezing out from under the larger Dodrec that had been pinning him down. He would be running to alert Prince Mergen, Shere guessed. Shere's escape would be thwarted, but at least he would be spared from the reptiles which now surrounded him. + +Another Dodrec, less mindful of potential consequences, approached Shere and his exploring fingers joined the others'. "I mean it," Shere repeated. + +"Listen to that accent. The bear is far from home." + +"No one to miss him," another agreed. He flicked out his forked tongue to take in Shere's scent. + +"Did he say he would tattle to the little prince? That means we can't let him leave, can we?" + +More and more of them swarmed him, and he was helpless to fend off their touches, even gentle as they were for now. One pair of hands wandered down to his tail, undoubtedly seeking a hole in which a clutch of eggs could be buried. Another caressed his belly - the warm, fluffy incubator. + +Dodrec, Shere knew, were cursed with an incessant production of eggs and a deeply-rooted instinct to pass on their burden. They usually used other Dodrec for this purpose, but, when possible, they preferred mammals. Warm-blooded, unpracticed in resisting their hypnotic gaze, and possessing no alternative but to carry the eggs to term, they made perfect victims. Most Dodrec did not indulge their urges violently, but these mercenaries had been especially chosen by the prince for their cruelty, and Shere had no doubt of their intentions. + +Shere steadied himself. He would not beg or plead. Although it would hardly be a glorious end, he calculated he could tear out the throat of at least one of them before the collar killed him, though it tightened around his airway at the mere thought. + +Just then, the tiny Dodrec returned, and another accompanied him. This one, towering over all others, wore full guard regalia and was covered in hard ridges of dark scales. The half-dozen pairs of groping claws fell away upon his appearance, and Shere surmised that this newcomer must be the alpha of the clan. + +"See? It's just as I said, Vaeri," the tiny one said fawningly. "What should we do with the bear? Tell us." + +"Yes, tell us," a few others echoed. Their eyes were hazy - no doubt Vaeri had conditioned his subordinates' minds for obedience. + +He crossed the room toward Shere unhurriedly, thick crocodile tail swaying, and kicked one liqueur-addled Dodrec out of his way as he passed. Coming to a stop before Shere, he removed his helmet, and the nearest Dodrec rushed forward to relieve him of it. As Vaeri took the measure of the bear, Shere did the same of the alpha - an expressionless, immovable mountain every inch as tall and wide as Shere himself. + +"He says he's the little prince's toy, Vaeri," one of the others said. + +"I know who he is," Vaeri rumbled. + +He glanced down at the bear's collar, then met his eyes. "Shere. You're a lifelong fighter, like me. This situation is probably the worst fate imaginable for one like you." He smiled, showing off a snout full of zig-zagging teeth. "That will make it all the better when I teach you to enjoy being broken." + +Shere's heart pounded and he took a step back, but the alpha hooked a claw under his collar and held him in place. He struggled to pull away, but the collar's now-familiar hot dizziness overwhelmed him as he did. + +"Look at me," Vaeri said sharply. Something in his voice made Shere stop and lift his gaze. + +It was already beginning. The alpha's eyes took on watery depth that absorbed and scattered the dim firelight, refracting it into shards of color. The shards resolved into a kaleidoscopic pattern of shining crystal that swirled and eddied. Despite himself, Shere was utterly captivated and, realizing the ease with which his fascination would turn to submission, he closed his eyes and turned his head away. + +Vaeri enveloped Shere's muzzle with his huge hand, and wrenched his face back with such startling force that Shere's eyes flew open once more. + +"Stare. Sink. Obey." + +This time, Shere could not stop himself, could not bring himself to turn away lest he miss some new swirl of color. A satisfied grin parted the alpha's toothy snout as his hypnosis inevitably began to take effect. Even before he sunk fully, Shere realized with horror that part of him really *could* learn to enjoy being treated this way. + +"No will to struggle. No thoughts but the ones I allow you." + +Shere's vision blurred and his mind descended into a deep and pleasant fog. He saw nothing but the colors in Vaeri eyes. + +"Lay him on his belly," Vaeri commanded. A pair of Dodrec grabbed Shere by the arms and laid him where their alpha wanted him. He sank into a pile of pillows, plush velvet hugging his body from every direction, and sighed dreamily with no thought for what would come next. + +A smaller Dodrec knelt in front of Shere and locked eyes with him. The colors in his eyes were nowhere near as potent as those in the alpha's, but they were enough to hold Shere in place. + +The bear's short tail did nothing to guard the inviting hole he presented to the room of pent-up Dodrec, and he felt the great weight of Vaeri settle behind him as the alpha took the privilege of using him first. His already-swollen phallus had already leaked a thick load of intoxicating ooze, and as soon as he smeared it under Shere's tail, Shere felt his internal muscles relax completely. + +A small, desperate part of Shere floated to the surface. "I'll kill you," he murmured. + +"Be silent and docile. You are breeding stock now," Vaeri said. The words etched themselves into the bear's mind, and he sank into submission once more. + +Vaeri slipped inside with no resistance. Shere moaned, a sound that betrayed his pleasure at feeling his insides stretch to welcome the alpha's cock. Shere stayed obedient, silent, and docile as he provided the alpha, *his *alpha, what he needed. It felt like such a natural arrangement that Shere wondered why it hadn't always been like this. + +The small Dodrec spread a gob of sticky fluid from his leaky cock onto his hand and jammed his dripping fingers deep into Shere's mouth. A few drops were enough to make Shere's tongue lose all feeling, and his jaw fell open to release a steady trickle of drool. + +"Say, 'breed me, alpha,'" the small one said, giggling. + +Shere did his best to obey, but his numb mouth could produce only a slurred gurgle which drew laughter from the Dodrec around him. + +"Enough," Vaeri snapped, and the room fell silent immediately. "He is already helpless. There is no pride to be found in humiliating him further." + +"Yes, Vaeri," came the replies. + +Vaeri began taking Shere in earnest, and the rutting was fierce and brief. Dodrec did not take pleasure in sex except as it led to reproduction, so Vaeri wasted no time in making his deposit with a satisfied groan. The small Dodrec before Shere whimpered in jealousy and struggled to maintain his gaze, eyes flitting back and forth to the larger male. + +When the first pearl forced itself into Shere, rolling over his most sensitive spot, he thought he might pass out from the pleasure. Even so, the eggs were few, soft, and small. The alpha's eggs likely never developed much past that point before being stuffed into one of his subordinates. + +Next came the fertilizing seed, thick and hot. It contained an opiate-like substance which dulled the pain of the eggs' insertion and further melted Shere's mind into disorientation and pliability. + +Vaeri withdrew his cock and wiped it off on Shere's fur before stepping aside. The next Dodrec to take a turn was smaller, but when he finished his eggs were larger and firmer than the alpha's had been. And when a third, even heavier load of eggs stretched Shere's belly, he came with such an unrestrained cry that the Dodrec around him laughed. + +They continued on that way in order of dominance, each pounding more urgent than the last, and each cargo unloaded into him larger than any he had taken before. He lost count of how many more Dodrec used him, and how many more times he came, before he passed out. + +Shere guessed that night had fallen when the Dodrec gathered in piles to sleep. Between the exhaustion of the day, the brain-addling mixture of Dodrec seed and hypnosis, and the heavy load stretching his belly, he slept deeply, stirring only briefly whenever one of his captors came to take advantage of him yet again. + +Ill-omened dreams plagued him, most of which he was thankful to not remember. A strange man featured prominently in those he did - a bull with large, curling horns and dark russet fur. + +In one, the bull's face endlessly shed its skin to reveal infinite, identical faces beneath. In another, the bull and a severed hand danced together beside a moonlit lake. And in yet another, a black storm swept over the wastelands around the Onyx Palace, clearing away the sands to reveal ancient ruins beneath. This storm too was somehow the same bull. + +As Shere roused, head finally beginning to clear, he recalled that the bull had had a name. What was it? + +"Karmach," whispered a voice in his ear. The breath was like the exhalation of a sleeping beast. + +Shere awoke with a start to realize he had still been dreaming. Most of the Dodrec had left for their guard duties, and those that remained either still slept or else paid little attention to him. As Shere's senses returned, he flushed with shame. He could not stop imagining how he must have looked last night - mind gone, slack-jawed, and drooling. He didn't even want to think about the massive clutch growing inside him. + +As he struggled to his footpaws, its weight lurched nauseatingly inside him as a reminder of how he had been abused. The burden he now carried would make his escape all the more difficult, and he wondered if indeed hope of escape still existed at all. + +"Where are you going, bear?" Vaeri called from behind him. + +The alpha reclined on a pillow near a roaring brazier, claws wrapped around a bottle of liqueur. A half-dozen smaller Dodrec, some with dripping tailholes, dozed in a tangled pile on top of him. + +Shere bared his teeth. "I've had enough of this place's perversions. Kill me if you want, but I'm walking out of here." + +"Impressive. I thought last night had broken you." + +"I won't be tamed by a pack of lizards." + +Vaeri laughed and took a swig of his liqueur. "We'll see if your tune changes after a second night, or a fifth." + +Before Shere could respond, a familiar voice interrupted them. "What is going on here?" Prince Mergen demanded. At the sound, several Dodrec scurried away and disappeared beyond the curtains. + +Vaeri rose slowly to his feet, carelessly rolling aside the Dodrec on top of him. "Your Grace. How can I serve you?" He made no move to set aside his bottle or to don his clothing. + +Prince Mergen pointed to Shere. "The bear is *my* prisoner. I gave explicit instructions that he was not to be touched." + +"Did you?" Vaeri said. The flippancy in his voice was unmistakable, and despite himself Shere felt his respect for the alpha grow. "I must not have comprehended Your Grace. Until last month, I was merely a marauding bandit, and so I am unused to Your Grace's sophistication of speech. I hope that Your Grace can find it in his heart to forgive me." + +"You understood me perfectly well," the snow leopard said. "I won't tolerate insubordination like this again." + +"Of course, Your Grace. However, Your Grace, it can be difficult to ensure my barbarous horde follows your royal orders. They know nothing of fealty, only coin. And coin, with all due respect to Your Grace, has proved difficult to adequately distribute." + +"You miserable little-" the prince cut himself off. "We will discuss your payment later." + +Something far off rumbled like cannon fire, and the room shook. Already off-balance, Shere dug his claws into the nearest velvet curtain for support. He could not imagine what had caused the sound. Perhaps the rebels had arrived and were facing down the usurper's mercenary army - a thought which sparked hope in his chest. + +"What in the world was that?" the prince demanded. + +"I'll find out," Vaeri replied, suddenly serious. He nodded to two of his men, who bowed and ran in the direction of the sound. + +Prince Mergen sighed. "In any case, I'll be taking the bear with me." He reached up for Shere's collar, but when his paw brushed the bear's sodden, fluid-crusted fur, he recoiled in disgust. Looking down at Shere's swollen belly, he scowled. "Traitorous, mongrel lizards," he grumbled to himself in High Ellaran. "I knew I should have hired the hyenas instead." He doubtless thought no one present would understand his words. + +"A true ruler wouldn't have to depend on 'mongrel' mercenaries," Shere bit back in Dodrec. "Your father's men made the right decision when they flocked to the rebel banner." + +The prince struck Shere across the face with claws extended. Shere knew the reaction was borne of fear as much as anger, and smiled despite the pain. + +"Enough!" Turning back to Vaeri, he said, "Have him cleaned up before he is brought back to me." He held out a vial of pale orange liquid to Shere. "And drink this." + +Shere made no move to take it. "What is it?" + +"A potion to rid yourself of those eggs you're infested with." When Shere stared at it distrustfully, the prince sighed. "I could force it down your throat, you know." + +Shere shrugged and drank down the sickly sweet liquid. Almost immediately, the mass in his stomach fizzed and crackled and the pressure on his gut began to ease. + +The sound of another distant explosion rocked the room, and the prince stalked away, muttering about the Dodrecs' incompetence. + +When he was gone, Vaeri turned to Shere. "The little prince says it's time for your bath." + +Shere scoffed. "Why do you submit yourself to that wretch? You and your men could seize the palace in an instant if you wanted to." + +Vaeri glanced back at his men, who were listening with interest. Then he replied in High Ellaran, "I have no desire to control this place. No sane person would." + +"After all I've seen here, I understand." + +Vaeri led Shere out of the room and into in a black-and-white tiled hallway that seemed to go on for miles. Suits of armor lined each wall, most of which were humanoid in shape while others were more exotic - quadrupedal, four-armed, serpentine, and stranger, less recognizable shapes besides. + +Vaeri said, half to himself, "The little prince had Amber Balm all along. He said the local merchants had never heard of it." + +"You seem to enjoy getting rid of your eggs the old-fashioned way well enough." + +The Dodrec chuckled. "To be sure. But it's hard to command when half my men are gravid at any given time. Just another slight among many I've endured here." + +Without warning, Vaeri seized Shere's collar and wrenched it, twisting the bear's neck at a painful angle. Before Shere could react, Vaeri's hand flew away as quickly as it had come, and with it a weight slipped away from his neck. + +The thing writhed in the Dodrec's hand - not a collar at all but something like a golden centipede, the ends of its many legs gleaming with Shere's blood. Vaeri crushed it tightly in his claws with a sickening crunch, then tossed the pulpy mass away. + +Shere was speechless. The sudden freedom was overwhelming, and he didn't know whether to embrace Vaeri or to tear out his throat. + +Seeing Shere's astonishment, Vaeri said by way of explanation, "I respect you, Shere. I should like to meet you again some day and face you in a fair fight." + +"What about the prince?" + +"He can consider this my resignation. I planned to desert after my next payment anyway, but judging by those sounds we've been hearing, it may be moot." + +As if on cue, another distant explosion rang out and rattled the nearby suits of armor. + +"What *is* that?" Shere asked. + +"The old rulers of the Onyx Palace may be gone, but the place is still teeming with the things they left behind. I've had to put down a few of them myself as part of my rounds. This, however," he said, gesturing toward the direction of the sound, "is unlike any I've heard before." + +A chill raced through Shere's blood. "Have you encountered a room here - a stone bridge across a black void?" + +Vaeri's yellow eyes flickered. "I would prefer not to speak of such things." Gesturing around the room, he said, "Take your pick of the armaments here and make your exit." + +"You're a vile creature, but I thank you nonetheless." + +"My pleasure." As he walked away, he called back over his shoulder, "Try not to kill too many Dodrec on your way out. Some of them may be carrying my eggs, after all." + +When he had gone, Shere examined his options for armor and weaponry, ignoring the building sounds of chaos from elsewhere in the palace. Without knowing why, he stopped before a set of black leather. Its chest piece was studded with dark violet gems, and its helm was a demonic mask, half deer and half sea serpent. A single glance told him it would fit his body perfectly. + +His attention was especially drawn to the gorget, a crescent of silver set with a purple gem richer and brighter than the others around it. When he ran his paw over it, he felt magical power thrum under his pads. Magic was a living thing, and despite the ancient, alien nature of the thing inside the gem, he could tell that it had a personality agreeable with his own. + +He began by reaching for the strange helmet but met with unexpected resistance in trying to remove it from the stand. Pulling harder, he heard a snap, and was then surprised to see a skull drop from the helm and break on the tile floor. Looking around with fresh eyes, he realized that every armor set around him was occupied by its late owner. + +With a shrug, he stripped the leather armor from the mouldering warrior's corpse and fastened it to himself. He felt more comfortable with padding around his vitals and with dusty underclothing to finally cover his nudity. The touch of the gem against his chest especially increased his confidence. + +The sword in the dead warrior's grasp was a simple, well-used sabre. It felt light and well-balanced as Shere took it and tentatively swung it through the air. The image of it sliding into the prince's chest sprang into his mind, and there was no collar to hinder the thought. He was ready. diff --git a/src/content/stories/The Onyx Palace, Pt. III.md b/src/content/stories/The Onyx Palace, Pt. III.md new file mode 100644 index 0000000..893bd84 --- /dev/null +++ b/src/content/stories/The Onyx Palace, Pt. III.md @@ -0,0 +1,212 @@ +--- +adult: true +description: "The wandering mercenary Shere, imprisoned by the decadent Prince Mergen, struggles to keep his sanity in the face of the dangers and temptations of the Onyx Palace." +pubDate: "Sep 15 2024" +title: "The Onyx Palace, Pt. III" +--- + +He tore open door after door, pounded down hall after hall. The palace was in an uproar, attendants and Dodrec fleeing in confusion and alarm, and the sight of a huge, heavily armed foreign bear did the general tranquility no favors. + +Turning a corner, he discovered a crowd of nobles flanked on either side by Dodrec guards. Pulled between two diverging hallways, they bickered about which direction they should choose. + +"Fools!" Prince Mergen cried from the center of the mass, waving his emerald scepter wildly. "Does no one know how to get to the carriage house from here?" When he noticed Shere, his eyes went wide. "Kill that bear!" he directed his guards. + +The guards glanced at Shere, then at each other, then dropped their spears and fled through the nearest doorway. As Shere continued his approach, the defenseless crowd backed away until they bunched up against the wall. + +"Baron Kyrn. Lord Kabir," Shere said, nodding to the cowering noblemen in turn. "Would you mind moving out of the way so that I can execute your prince?" + +Drawing a dagger from his robe, Kyrn said, "Don't you dare come closer," at the same instant that Kabir said, "Of course, by all means." + +Prince Mergen and several others glared at Kabir. "I will address that comment later," he said. + +"There won't be a later for you," Shere promised. He continued his approach, mere feet from striking distance. Revenge for the treatment he had endured here would be sweet, to say nothing of single-handedly ending the civil war. + +An explosion, louder than any before, rocked the room and sent several nobles stumbling to all fours. Nearer to the source of destruction now, Shere perked his ears to identify it, but found he could only compare it to the bellowing of a beast - an obvious absurdity given its magnitude. + +Returning his gaze to Prince Mergen, he saw that the snow leopard had taken advantage of his distraction to level his scepter at Shere. The snow leopard looked ridiculous wielding such a tiny weapon with such confidence. What did he hope to accomplish beyond giving Shere a few bruises by which to remember him? + +Then Shere felt the charge of magic in the air, and his fur stood on end. Shere pulled his sword free of its scabbard as the prince waved the emerald scepter through the air, but it was too late. The ground slid away under Shere's footpaws, and he fell backward. The scene before him flew away, receding into the distance as though he were dropping into a well. + +Shere's back slammed into a dirt floor with such force that the air was driven from his lungs. Far overhead, Prince Mergen's smirking face faded away as he closed the enchanted portal he had just opened. + +Shere noticed his sword hovering in the air. He must have dropped it in his surprise, only for it to be pinched inside the portal. Then it slipped free and fell, and he rolled aside just in time for it to miss his head and bury itself, wobbling, in the ground. One end of the crossguard had been neatly severed by the closing portal. + +After catching his breath, the bear stood, brushed himself off, and collected his sword. The area he now found himself in was the darkest, most barren part of the palace he had yet seen, nothing but flat ground in every direction. + +Whatever pit the prince had cast him into, Shere doubted it would prove hospitable. He cursed under his breath. He had hesitated too long before making the kill, but vowed that he would not make that mistake again. + +He began walking in a random direction. Whatever the powers of the Onyx Palace, this room could surely not go on forever, and he would surely find something if he only walked long enough. + +Before long, Shere sensed that he was not alone. Something moved in the darkness with a sound like water lapping at the shore. He smelled it, too: sharp, overpowering, and somehow familiar. Shere stopped moving and took a fighting stance as he waited for the thing to reach him. + +He did not have to wait long. The thing burbled forth from the shadows, a shapeless mass of viscous murk. Suspended inside, chunks of half-digested flesh still clung to the skeletons of previous victims. The beast stopped twenty paces from Shere and rippled as though smelling the air. Then it launched a corona of writhing tendrils in every direction. + +Shere stepped out of the way of the nearest one before chopping through it. It came apart easily, but before he had time to recover his stance, the severed tendril reconnected to its base and circled back to him. He hacked again, and this time kicked the severed end into the distance before it could reconnect. + +Stray droplets of the thing clung to Shere's footpaw and soaked into the bare flesh of his pads. The effect was immediate - a flush of heat and arousal, and the clouding of his mind. This creature was undoubtedly the source of the aphrodisiac that Prince Mergen had humiliated him with. It even had the same harsh smell, only in living form it was thicker, muskier, and lacked any floral additives to mask it. + +Now aggravated, the creature lashed out with dozens of tendrils at a time. Shere's blade carved blindingly fast arcs through the air, severing each one. None were fast enough to touch him directly but, unavoidably, more and more drops fell onto his fur and seeped into his skin. + +Unless the creature's mass hid a heart or brain, Shere's sword would do no good. He also knew that the creature's influence would soon overwhelm his mind. His reflexes were already slowing, his mind dulling. Unbidden, the memory of Prince Mergen's tailhole filled his mind and his cock stirred beneath his armor. + +The only choice was to run. Another minute more of that smell invading his snout and the aphrodisiac seeping into his skin, and he would fall prey to the thing. He made one last sweeping slash to clear his escape, then turned and fled. + +The monster was faster. Without his constant parrying, its tendrils reached him easily. One wrapped around his ankle and dragged him to his knees, then more arrived to pull back his arms and coil around his legs. They slithered under his armor and underclothes, and each place they touched his bare fur made him moan even as he struggled to free his sword arm. + +One tendril encircled his muzzle, adhering to the top and bottom, then wrenched it open. Then another slid in over his tongue, rammed the back of his throat, then plunged deeper. It thrust in and out roughly, but the toxins building up in his blood ensured he never gagged. + +Another tendril prodded under his short tail, his hole already stretched by the Dodrec and readily available. It invaded him, sliding impossibly deep while his limbs and mind were helpless to stop it. His struggles slowed as aphrodisiac flooded him from inside and out. The tentacles in both ends of him ejaculated thick loads of their mass deep into his unprotected insides, and his eyes fluttered shut as he was overwhelmed with pleasure. + +When he was able to reopen them, he found himself suspended over the central mass of the creature, which shaped itself into a funnel. It was going to draw him into its center to be dissolved and digested like so many nameless others. + +With one last desperate effort, he wrenched a paw free of the tendril binding his wrist. Every movement was a struggle, but as the beast tried to regain its hold, he inched his fingertips toward the purple gem on his gorget. Just before his strength failed him, he managed to touch the gem and poured the last of his will into a desperate cry for help. + +Then the creature deposited another belly-swelling blob into him from both ends, and Shere's muscles slackened as his mind departed for good. His body inched into the maw, leather armor sizzling when it came into contact with the acids inside. + +Suddenly, the gem shrieked and emitted a blinding violet light. Even with his eyes shut, the intensity of it stung Shere through his eyelids. The shriek went on for what felt like minutes, and continued to ring in his ears even after it stopped. + +He slowly unclenched his eyes and looked around. The creature was gone, with only a wet stain in the dirt to show it had ever been there. Shere touched the purple gem in equal parts fear and gratitude. It throbbed under his paw as if alive. + +"I don't know how to thank you," he said, feeling foolish for speaking to a stone, yet certain that he was heard. + +The creature's hunting ground was deceptively small, and Shere soon found his way to a storeroom full of the beast's foul ooze. From there, a short time wandering brought him to the palace entrance. The colossal hallway was now strewn with rubble, its braziers had been allowed to cool, and its grand tapestries fell from the walls in tatters to reveal ancient, grotesque bas reliefs beneath. All was silent. + +A Dodrec limped down the hall, leaning heavily on the wall for support. When he saw Shere, he grabbed for the knife on his belt but lost balance and fell to the floor with a pained cry. + +Shere approached the injured Dodrec. "What happened here?" + +"Something attacked." + +"I can see that. What was it?" + +"I don't know. Big." The Dodrec pointed to the titanic doors of the throne room. "It's in there." + +"Where is the prince?" + +He pointed at the doors again. "In there with it." + +As Shere stared at the doors, the Dodrec picked himself up and fled for the exit. He didn't doubt the truth of the Dodrec's words. Just looking at the doors was unsettling, and dread coiled in his stomach at the thought of opening them. + +He sighed. After all that had happened, he could not imagine walking away if there was a chance that Prince Mergen still lived. + +Steeling himself, Shere touched the purple gem, which still throbbed with energy. Then he pushed into the throne room. It was even darker and colder here than outside, and unoccupied save for two distant figures - Prince Mergen seated on the throne, and, beside him, a stranger whispering in his hear. A sense of unnatural danger overcame Shere, and each step toward the throne required an immense force of will. + +As he approached the dais, the two men turned to look down at him. Prince Mergen's eyes were wild, his tail was puffed up, and his paws clutched the emerald scepter as if trying to snap it. The stranger, a bull with dark russet fur, was calm. He wore only a simple traveler's robe, but his bearing and his large, regal horns radiated power in a way that Prince Mergen never could. + +"Shere," the bull said. "A pleasure to finally to meet you face to face. My name is Karmach." + +The name sent a shudder through the bear. "What are you doing here?" + +"In my new capacity as adviser to the throne, I am proposing a small number of policy changes." + +Prince Mergen said, "He wants to use me to bring back-" but a shudder went through him and he couldn't finish his sentence. + +"More pressingly," Karmach said, "I believe tradition demands you be granted a boon for freeing, well, one of my kind. What can I do for you, Shere?" + +Shere pointed to the quivering prince. "I want his head." + +"Your single-minded focus is admirable. However, His Grace's head is not something I am free to give. I serve a higher authority, one which requires the prince alive. Can I offer you something else?" + +"Yes. You can go back to your prison." + +Karmach gave an exasperated sigh. "Shere, be realistic. My posting here is temporary, and I will, of course, step down at the appropriate time. However, I am not free to take my leave before my work is done." + +"Then I wish for this whole rotten palace to fall down around us." + +Karmach laughed and shook his head. "I offer to grant you anything in the world, and you ask for water to run uphill. May I make a suggestion?" + +Before Shere could respond, Karmach raised his arm and a sickening charge of energy filled the air. Shere drew his sword reflexively, but the magic was not directed at him. Instead, its unseen hand reached behind a fallen column and yanked a Dodrec from his hiding place. He squirmed, holding his throat as if choked, as he was dragged before the throne. + +"This is Askash," Karmach said, then paused. "That *is *how you pronounce it, isn't it? 'Askash?'" He waited for the Dodrec to give a pained nod, then continued. "Askash is twenty years of age - old for a Dodrec. Born in a small fishing village, he spearfished and dove for pearls for his first sixteen years. Seeking greater opportunities, he rode with a nomadic warband for three years, then served the Onyx Palace for one. He has produced or fertilized around two hundred eggs, only a fraction of which were laid, let alone hatched. That is the sum total of his legacy." + +Darkness swelled, and Shere shivered violently as the already-icy air turned glacial. Something moved in the shadows. Twice the height of the bear, it stood on a multitude of long legs and held a mantis' head aloft on a long, flexible neck. Its long arms, which dangled to the floor, were tipped with crab-like pincers. Most alarming of all was the long scorpion tail which curled a wicked point high in the air. + +The invisible hand released its grip on Askhash. As the Dodrec tried to rise to his feet, the thing behind him threw out one of its spindly legs and impaled him with enough force to crack the stone beneath him. He screamed and snatched for his sword, but lost his grip and sent it skittering harmlessly across the floor. His flesh began to draw up into the leg like a siphon and he fell silent as his body rapidly dissolved. + +When he had disappeared completely, light returned to the room and the bull once more stood where the thing had been. + +"Now, Askash is part of something greater," he said, continuing his explanation as if nothing had happened. He paused for a moment as if remembering something. "Oh, and it seems the emphasis is on the *second* syllable. The young man was simply too polite to correct me." + +"What did you do to him?" + +"Nothing. He's right here." Karmach tapped the side of his head. "He is now eager to help me accomplish the deeds I have been tasked with. If you only join him, you too will see what is in store - greater things by far than anything you could hope to achieve in the short few years you have remaining. This is the boon I recommend to you." + +To Shere's surprise, rage welled up within him and his vision went red. Any fear he felt was dwarfed by anger and revulsion, and he automatically bent to pick up the Dodrec's fallen sword. + +Karmach's ears flicked in interest. "Do you think that wise?" + +"Ever since I arrived here, I have heard nothing but other peoples' plans for me. How I could be broken or shaped into something else. I will hear no more of it." He twirled both swords once around his paws to check their weight. Satisfied, he turned them toward Karmach. + +Karmach turned to Prince Mergen. "Do I have your leave to kill him?" + +Prince Mergen, looking a million miles away, nodded. + +The room darkened as Karmach once more assumed his true form. The temperature plunged with a fury that betrayed Karmach's irritation at having been denied, and it wasted no time in charging toward Shere. + +The thing first came at him with its claws, but snapped only empty air as Shere dodged away. Then it reared up and stabbed with its front legs, which Shere swiped away with his swords. As the rest of its legs crashed down, he dove aside, then returned to duck below the thing's sagging belly. + +He slashed up at the soft flesh and sank his blades deep. Dark blood rained over his face as he tore into its foul innards, and a psychic wave of pain told Shere that he had dealt it real harm. + +Karmach's scorpion tail curled under its body to stab at Shere, and he slipped back out from under it. It hissed and leapt away at the same time, smashing into a tree-sized marble column and crumpling it as though it were made of paper. + +"A commendable blow," Karmach said. "Were I alone, you might have killed me. Instead, you've only managed to kill Askash." The blood flowing from its underside had already begun to dry up. "And I have yet more faces than you can count." + +Undeterred, Shere raced forward to clash with his enemy again. Blades and limbs crossed, tangled and untangled. Each time Shere managed to strike Karmach's belly, head, or neck, he heard another psychic scream as one of its victims perished in its stead. + +After receiving one such blow, it brought its claws down like hammers, missing Shere and burying themselves deep in the floor. Shere took full advantage of the brief second that the thing was stuck in the ground. Climbing atop a fallen column, he threw himself onto the creature's head and straddled its neck. + +He sunk his swords to the hilt into its large compound eyes, which burst and sprayed his fur with jets of rancid-smelling black fluid. As Shere twisted his blades in the creature's skull, one of its claws snapped blindly into Shere's left shoulder and bit deep. He didn't stop for the pain, nor for the blood which streamed down his arm and formed a sickly mixture with the black fluid. + +It was only when he heard the claw crunch into bone that Shere knew he had to relent or else be dismembered. He pulled free of its grasp with a roar of pain and dismounted Karmach's neck awkwardly, jarring his mangled shoulder as he landed. + +He looked back to see that its wounds were already healing, caved-in eyes re-inflating like a bladder filling with water. Shere panted in pain and exhaustion. It seemed there was nothing to do but prolong the inevitable. + +Prince Mergen had taken the opportunity of the pause in fighting to slink away, only occasionally glancing over his shoulder as he retreated. Noticing him, Shere had an idea. As subtly as he could, Shere turned toward him and caught his eye. + +The prince cringed as though afraid that the bear would attack him, but Shere held his gaze and held up his sabre with its broken crossguard. He could not read the snow leopard's dazed expression, and could only hope that he had been understood. + +Karmach crawled toward Shere and stopped just outside of striking distance. + +"It doesn't hurt," it assured him. + +The bear closed his eyes and took a ragged breath. Then he nodded. Karmach lifted its leg and brought it slowly down like a king dubbing a knight. Shere controlled his breathing tightly. + +Just as he felt its leg brush the tips of his fur, Prince Mergen cried out, "Now!" + +The bear's nose twitched to the smell of damp soil, and he opened his eyes to see that the prince had indeed opened the portal. For the first time, he experienced a warm feeling toward the man. + +Shere sprinted through the black gateway and into the shadows. After a moment of surprised hesitation, heavy footsteps pounded close behind him. + +"I told you it doesn't hurt," Karmach said, "and usually that is true. In your case, however, I will make sure that it does." + +Not daring to look around, he pushed his screaming muscles to their limit as the skittering footsteps grew louder and louder. He was expecting to feel the stab of its leg at any moment when the ring of light finally reappeared. Shere wasted no time in diving through. + +He landed on his back and pulled himself backward on his elbows, howling with pain each time he rested his heavy weight on his broken shoulder. In unthinking rage, Karmach crouched low to crawl through after the bear. Its snapping mandibles loomed close, and Shere saw his shattered reflection in its compound eyes. + +Prince Mergen lowered his scepter, and those eyes widened as Karmach realized the trap it had fallen into. The portal closed itself around its body like a guillotine, neatly severing the two halves of its body. Its front half stumbled for a moment, then fell over face-first. + +A cosmic scream shook the room as untold thousands of Karmach's victims gave their lives to preserve it. + +"I yield," it said. + +"I don't care," Shere said. He raised his arm to signal the prince for another portal, but saw that there was no point. Karmach was no longer attempting to heal its body, and was presently dissolving into putrescent sludge. + +"I will gather more souls before long," its disembodied voice said. "I won't be so kind the next time I see you, Shere. Nor you, little prince." + +Shere knew it would hold good to its threat. Beings like Karmach had long memories, and held onto grudges. Nevertheless, he would enjoy this temporary escape from death, he decided, and spat a muzzleful of blood into what was left of Karmach's face. + +"I can't believe it's gone," Prince Mergen said, pulling Shere from his thoughts. "That thing, Karmach, came to me when I was a kitten. My sister and I used to play a game of who could stay on the bridge the longest, and it haunted my dreams for years after. Horrible dreams." + +Shere's shoulder was beginning to burn as the adrenaline of the fight faded, and he was sure it would soon be engulfed in agony. He had no patience for sentimentality. + +"What you're saying," he said, "is that you *knew *this palace housed that kind of evil, but you still wanted to rule it." + +"Someone has to!" the prince protested. "Are you so naive to think…" He paused, seeming to remember what he had done to Shere over the past several days, and reconsidered his words. He cleared his throat and straightened the diadem on his head before trying again. "Brave Shere," he began. "Although we have had our differences, you have done the Kingdom of Ellara a great service today. I offer you any reward it is in my power to grant." + +Shere took a step toward the snow leopard, who reflexively took a step back. "I decline." + +The gem at his collarbone was noticeably warmer and heavier now than when he had first found it, and he knew exactly what to do with it. He pressed his paw to the smooth, glassy surface, and mentally gave the command. + +Bright violet light filled the dark room, and the slime beast that had been captured inside spilled onto the floor. The snow leopard's eyes went wide and he turned to run, which only served to arouse the creature's interest. + +Shere turned his back as Prince Mergen's pleas echoed through the room, and he let his heavy sword fall to the floor with a hollow ring. The pain was throbbing now, and would soon start to burn, but freedom lay just ahead. diff --git a/src/content/stories/The Quarry Junction Challenge.md b/src/content/stories/The Quarry Junction Challenge.md new file mode 100644 index 0000000..26719d6 --- /dev/null +++ b/src/content/stories/The Quarry Junction Challenge.md @@ -0,0 +1,110 @@ +--- +adult: true +description: "Laurie, a courier in New Vegas, enters deathclaw territory while in heat. Who can possibly guess what happens next?" +pubDate: "Oct 3 2024" +title: "The Quarry Junction Challenge" +--- + +It was a rite of passage for every Courier to eventually return to Quarry Junction. The place was *miserably *difficult, so much so that the recommended route from Goodsprings to New Vegas looped around the entire Mojave to avoid it. But, sooner or later, everyone grew strong enough to try tackling the place head-on. + +Laurie knew it would still be dangerous at level 19, but the beautiful desert dawn, comforting drawl of Mr. New Vegas in her ear, and arsenal full of heavy weapons in her pack gave the gray wolf confidence. By this point, but she had faced down countless dangers - Super Mutant Masters, Legionary assassins, Cazadors (she shuddered at the thought), and many more. Compared to all that, what were a few oversized lizards? + +Besides, she was an avid achievement hound and returning to Quarry Junction gave her an opportunity to snag one of the rarest of all - "The Quarry Junction Challenge," whose description read simply: "Complete *Claws Out* while in heat." *Claws Out *was an unmarked quest to kill the Deathclaw Alpha Male and the Deathclaw Mother that stalked the quarry, reopening the route to New Vegas and allowing the stranded miners to return to work. + +In preparation for the quest, she had counted down the days on her Vault-Tec TempTracker until, finally, the Vault Boy appeared on her HUD, dabbing sweat from his brow. The notification beside him read: "You are now in heat." + +Laurie had hardly needed the notification to tell her that with the telltale warmth blooming between her legs and *pounding *desire flooding her mind. The HT status effect came with hefty stat penalties as well, such as a -5 to Intelligence. This was her body's way of ensuring she wouldn't consider the consequences of letting some horny male give her the relief she needed so badly. But a regular supply of Mentats kept her INT at 4 - a little slower and more impulsive than usual, but still manageable. + +Laurie's heat complicated the already difficult task before her, hence the rarity of the achievement. The wolf's intoxicating scent would make sneaking impossible, even with a Stealth Boy, and would drive any male Deathclaws into a mating frenzy. + +As she neared the entrance to the quarry, the rising sun shone pink and gold on the white limestone and a growing warmth presaged the unbearable heat of the day. Just then, her vision blurred and a notification appeared: "You are suffering from Mentats withdrawal." Shit. She had forgotten to redose in time, and withdrawal plus the now-unmitigated heat put her Intelligence at 1 - "Sub-Brick," as the Vit-o-matic Vigor Tester would say. + +Going after an achievement was *boring*, she thought. Why not fast travel back to the Strip, head into Gomorrah, and spread her legs on one of those comfy pillows? Soon enough, her scent would draw in some muscular, pent-up canine, some walking sperm delivery system to fill her needy pussy, hose down her guts with warm seed, and satisfy her heat the way it was meant to be satisfied. After all, she would go into heat again later. Again, and again, and again. + +She caught her paw drifting between her legs, but some part of her recognized that if she started she wouldn't be able to stop. Instead, she reached for a fresh Mentat with shaking paws and popped the chem into her muzzle. The withdrawal ended, and her Intelligence returned to its respectable 4. + +Her ears swiveled toward the unexpected sound of a low hiss, coming from somewhere near the Junction 15 Railyway Station behind her, and she quickly switched off the radio. She crouched into stealth, and saw that her detection status read CAUTION in bright red letters. Laurie almost hoped it was a deathclaw who had wandered out of its usual territory - that way, she would be able to test her strength against a single one before facing down a whole pack. + +Keeping her ears pricked up, she circled around the low concrete platform. After a deep breath to steady herself, she popped around the corner, gauss rifle at the ready. The source of the sound, she discovered, was only a Radroach. + +She sighed in relief and holstered her rifle. Not wanting to waste ammo on the small pest, she equpped her lead pipe and crushed it with two blows. With that taken care of, it was finally time to enter Quarry Junction. + +Turning around, she nearly ran directly into the Deathclaw towering over her. The hulking beast was covered in leathery scales from horned head to razor-sharp toeclaws, with a muscular, spiked tail poised dangerously behind it. Its vacant eyes stared down at the small wolf, sensitive nostrils flaring at her scent. Judging by the sheer bulk of muscle before her, this was not just any Deathclaw but the Alpha she had come all this way to defeat. + +Laurie's heart pounded. There was nowhere to flee where those powerful legs wouldn't catch up with her in seconds, and she still held only the lead pipe in her paw. With no other choice, she swung it into the thing's horrible face. + +One of its eponymous claws swept through the air faster than her Perception stat could follow and crashed into the pipe, sending it flying. Hopeless as it was, she had no choice now but to run. + +Her footpaws pounded the dirt as she sought out anything that might save her - a building to take shelter inside, a narrow gap between two stones through which the huge creature couldn't follow, maybe even an NCR patrol that would join the fight. + +No such luck, even with that stat at 7. The wolf leaped in panic as she felt claws brush her tail, and she knew she had no choice but to turn and fight. Diving to the side, she drew her rifle and entered VATS as she whipped around. + +Her HUD froze on the Deathclaw in mid-pounce, its arms outstretched and ready to turn her into dog meat. Saying a quick prayer, Laurie programmed VATS to fire until the end of her AP, and most likely the end of her life. + +The first explosive round caught the Deathclaw in the chest, knocking it back far enough that Laurie felt a flash of hope. Then it regained its footing and started forward again. The next round had no visible effect - the Alpha didn't even seem to feel it. + +With a single slash, it shred her combat armor and a second slash cut the straps of her pack. Notifications flashed on her HUD: "Lost item: 10mm ammo." "Lost item: Ant meat." And, finally, "Lost item: Stimpack." + +Laurie's heart sank. Without stimpacks, one or two direct hits from those claws would take her HP to 0. As her gauss rifle continued to fire ineffectively another slash tore away her combat armor entirely, revealing her vulnerable throat and belly. + +It crouched low as it prepared a final pounce, and Laurie braced herself for the mortal blow. It careened toward her, but instead of slicing through her fur and flesh, its arms wrapped around her as the Alpha tackled her to the ground. + +Looking down, she realized the Deathclaw's true goal when she noticed the monstrous cock swelling between its legs. She smelled the musk of the aroused, powerful male and, despite herself, her pussy pulsed in time with her rapid heartbeat. + +The Alpha lowered its head and Laurie's fur rippled as the thing took a long huff of her scent. Its already massive cock throbbed and grew another several inches as the smell of Laurie's heat did its work on the male brain. + +The wolf knew she couldn't let that thing inside her. Deathclaws' potent seed was virtually guaranteed to leave its victims with a swollen belly, and Laurie was especially vulnerable with that HT status effect still lit up on her HUD. + +She wriggled away through the dirt, but a strong claw on her belly stopped her. Its other claw ripped away her underclothes and exposed her unprotected pussy. Her underclothes were *soaked* - had she really been that turned on? + +The Alpha pressed its cock against her belly with a shuddering growl of desire. Other than the size, the red, sensitive cock was almost canine, with a small knot beginning to sprout at the base. What felt like a gallon of precum oozed from the tip and soaked into Laurie's fur in sticky waves. It was *warm*, too - so warm that Laurie thought she might catch fire when it entered her hot pussy. + +*If *it did, she corrected herself. She couldn't give up hope, couldn't let herself be an incubator for another one of these killers to be brought into the world. Steeling herself, she raised her legs and kicked at the Deathclaw's soft belly with her footpaws. + +That only angered it. It scooped its claws under her, digging painfully into her flesh, and turned her over onto her belly. A claw forced her muzzle into the dirt as the Alpha slid its shaft against her opening. It humped over her lips until both of them were thoroughly lubricated with precum as well as the fluid of her own traitorous arousal. Each time its heavy balls brushed her, she couldn't help imagining the virile seed churning inside, ready to relieve their pressure into a warm hole. + +The Alpha lowered its cockhead into position, and Laurie braced herself. There was no way that thing was actually going to fuck her, right? Its girth wouldn't let it fit more than a couple inches into her, let alone the whole length. + +Yet she was sure the male wouldn't be satisfied until it was fully buried, ensuring that that gorgeous cock was aimed right at her ripe and ready womb. The heat was really getting to her now, her body shutting down her mind to ensure she wouldn't back out of an opportunity to breed - not that she had any say in the matter. + +With a threatening growl, as though warning its female not to move, the Deathclaw began to push into her. Despite its size, its cock was so well-lubricated that it popped inside with a horrible, wonderful stretch. Knowing that it was almost time, her heat flooded her mind with narcotic reward chemicals, making it hard to remember that she had wanted to resist. + +Without waiting for her to get comfortable, the Alpha began to rut, each powerful thrust burrowing just a little deeper into its pinned wolf. Laurie cried out in mixed pleasure and pain, wanting more and more even as she struggled to accommodate her breeder. Finally, with one last pounding thrust she knew the Deathclaw was fully inside when she felt its heavy balls slap against her. + +This was it - exactly what her body needed. Laurie had never been knocked up before, had always made sure to have Heat-X close at paw when her time came. Now, she felt for the first time the primal, *feral *urge to mate and be filled up, for her body to be changed forever with one beautiful spurt of hot cum. + +Any resistance she had left melted away with a familiar message: "You are suffering from Mentats withdrawal." She now barely remembered where she was, only that she felt *so good*. As her tongue lolled out and her eyes rolled back, she looked for all the world like an utter slut for the murderous abomination. + +She now pushed back against the Deathclaw as it continued to take her, urging it to pound her even harder. Her insides were already so soaked with its precum that she swore she could feel it sloshing inside her womb, but she was desperate now for the main event. + +Its knot pushed in slightly, then tugged out again, each time stretching her further than she thought possible, and each time making the Deathclaw whine its need. Her own body had made that powerful creature helpless to its lust, she realized with pride. + +Finally, the knot popped in with a squelching pop, and the Deathclaw bellowed its triumphant pleasure. The wolf's body flushed with satisfaction as orgasm after orgasm crashed over her to extinguish her heat. The Alpha's cock flexed over and over, pushing her already-overstretched pussy to the limit, as it dumped its load. Each rope that lanced into her fertile body was boiling hot, and there seemed to be no end to it. + +Her belly bulged with the weight of all that seed, and though the Alpha's knot did its job of locking as much inside as possible, more and more splattered onto the ground beneath her. + +New notifications appeared on her HUD: "You are no longer in heat." "You have been impregnated." And, last, one she was surprised to see: "You have become addicted to Deathclaw cum." + +Before she could consider this, the Alpha reached one claw down, gathered up some of its fallen seed, and brought it to Laurie's muzzle. Too defeated to do otherwise, she opened for it and let it wash over her tongue. It was *intoxicating*. There was already so much of it in her body that she felt like she couldn't hold another drop, but she knew she would soon want more. + +The Deathclaw threw back its head and howled. A dozen other howls echoed it in the distance. It seemed that a few other males planned to have their way with the helpless female who had intruded on their territory. + +--- + +It was sunset by the time the pack finished with her and abandoned her at the railway station, belly too full and legs too shaky to move. With the heat passed, replaced by a new IMP status effect, Laurie could think clearly again. + +She needed medical treatment right away, but when she tried to fast travel she got the "over-encumbered" message, even though her inventory lay scattered in the dirt. With no other option, she headed to Goodsprings on paw, step after ponderous step, leaving a trail of seed - deliciously fragrant seed - the whole way. + +She went to Doc Mitchell, expecting some words of comfort from the old coyote, but he couldn't do anything about the thing now growing in her belly. "Try the New Vegas Medical Clinic," he suggested. "They have all sorts of fancy technology there that may be able to help." + +He let her stay the night, and she headed out in the morning. Finally able to fast travel again, she opened her Pip-Boy's map and scrolled northeast to the clinic. + +Before she could make her selection, a notification appeared: "You are suffering from Deathclaw cum withdrawal." + +With her focus on her IMP status, she had forgotten to have Doc Mitchell cure the new addiction she had acquired. Her head was already fuzzing over as her clumsy paws flipped to the status screen to check the withdrawal's effects. + +A full -10 to INT. Was that bad? Laurie could no longer remember. What had she been doing again? She thought she had been trying to go to a clinic somewhere, for some reason, so she zoomed around the map looking for it. The place names were hard to read, but she liked the beeping sounds the Pip-Boy made as it passed over each location. + +As if on instinct, she stopped when her cursor reached one in particular - "Quarry Junction," she sounded out with some effort. Maybe that was where she had been trying to go? After all, she wanted to cure her addiction, right? Where better to get more of that incredible Deathclaw cum than there? + +She salivated at the thought. After selecting Quarry Junction as her destination, another notification appeared to let her know she had unlocked an achievement: "Pack's Toy." diff --git a/src/content/stories/The Serve.md b/src/content/stories/The Serve.md new file mode 100644 index 0000000..db5600d --- /dev/null +++ b/src/content/stories/The Serve.md @@ -0,0 +1,536 @@ +--- +adult: true +description: "Austen has been in a friendly rivalry with Val for some time now. They compete on the racquetball court, for the attention of the same subs, and now Austen wants to expand their competition to Val's domain - hypnosis." +pubDate: "Mar 30 2025" +title: "The Serve" +--- + +*Thanks to the following critters for their help editing this story:* + +- [Flexx](https://bsky.app/profile/flexx4me.bsky.social) +- [Lilac](https://www.furaffinity.net/user/misslilac) +- [Sly](https://www.furaffinity.net/user/slyasafoxibou) +- [Vin](https://www.furaffinity.net/user/vinthebat) +- [Vylraz](https://www.furaffinity.net/user/drazin) + +
+ +No disrespect to the guy, but if Val can do hypnosis, I can too. How hard can it be to say some trancey words in someone's ear, or slap a visor on them, or wave a psycholuminescent crystal in front of their snout? I'm not saying I'll be better at it than him - not right away, at least. He's got years of experience on me, after all. But I'll catch up quick once I figure out where to start. + +Deciding to go to the source, I bring it up with Val himself at our next racquetball game. "Where'd you learn to do that hypno stuff?" + +He bounces the ball twice and spins his racket, his usual fidget before he serves. Val is an otter, but he has the slinky build more typical of our species - shorter and slimmer than me. Weaker. I know for a fact he never strength trains, other than the time that lifting became his hyperfixation of the week. But he does swim two kilometers a day, and it shows. He's all lean muscle and looks damn good in his tank and athletic shorts. + +Bounce. Bounce. Spin. "I read two books on the subject at first, along with articles and discussions on the Net," he says. "But it's mostly practice. Why do you ask?" + +"Oh, you know. I'm thinking of picking it up." + +"Really? I always thought hypnosis was too intellectual for you." He says it in his usual deadpan, and if I didn't know him better I'd think he actually meant it as an insult. + +"Yeah, well, I figured *you* were too weak to swing a racket, but look at you now. Speaking of which, are you planning to serve sometime today?" + +"You asked for it." + +Val tosses the ball and swings. It hits the wall and rebounds from the floor in a low arc, forcing me to bend down to meet it. He's using my size and lack of flexibility against me yet again. + +I put my superior strength to work and smack it hard and fast to the opposite end of the court. But Val has somehow anticipated the direction of the bounce and is in position to send it back on the fly. I'd suspect he used ocular implants to predict the ball's trajectory, except I know he doesn't have any. + +"That's three," he says after the ball slips past my racket. You wouldn't be able to tell how cocky he is other than the twitch in his tail. + +"Yeah, yeah." + +He bounces the ball, bounces it again, but this time stops before he spins the racket. "What made you want to learn hypnosis *now* in particular?" + +"I know a lot of people who are into it," I say casually. "Matty's into it." Matty is one of our mutual floormats - big into paws, hypno, and chastity. + +He glances up at me. "It's not because you got jealous at the party the other night?" + +Right. The party. That night, Val must have had a dozen subs eager to get zonked, each falling under his control and always coming back for more. I had forgotten that that was what put the idea in my head. + +Before I can come up with a reply to salvage my pride, he serves. I scramble after the ball, toeclaws scratching the wood floor, but I can't get into gear quick enough and I lose the volley again. + +"That's-" he starts to say. + +"Four," I interrupt, not giving him the satisfaction. "And it just looked like fun. I wasn't *jealous*." + +"Not even when Ashby spent most of the night staring at one of my spirals?" + +"*That's* where Ashby went?" I had been hoping to play with them for the first time that night - I even brought my new holo-flogger - until they disappeared an hour into the party. + +"Don't worry, Austen - I'll give you a crash course and maybe you'll catch their interest next time." + +Ignoring my glare, he makes his third serve. This one is slower - I can tell he's wearing out. I slam racket against rubber hard enough that the rebound sounds like a whipcrack, and even Val's quick reflexes and read on the ball can't get him there in time. + +"Tie game," I say. + +"So it is." I'm satisfied to see him pause to catch his breath. "So, what do you think?" + +I shrug. "I *guess* I could let you show me the ropes." + +"The fun thing about hypno is that you don't need ropes." + +"It's just an expression," I clarify. + +"I was joking. I'm not *that *literal." + +"Oh." + +Val thinks for a moment. "How about we meet up tonight and you can practice on Keda?" + +"*Keda* is into hypno?" The stag is a regular sub of Val's, and ever since I first saw that twiggy boy I've been thinking about all the ways I could break him if we ever ended up playing together. + +"He wasn't when I started with him, but people always seem to change their minds about that after spending enough time around me." He says it with a smug grin. + +I scoff. "Hasn't happened to *me* yet." + +Suddenly there's a dangerous gleam in his gold eyes - one I've only ever seen him get with his subs. I'm suddenly reminded that I've left my earring lit up its usual green, signaling open consent. + +"Your serve," he says simply. + +We play another twenty minutes and I score a narrow victory. Not that it matters - I'm interested in a different competition now. + +On our way out, I clap my webbed paw on Val's back. "Good game as always." + +"Really fun," he agrees. "I'm glad you got me into this and make me stick with it." + +"Same, man." + +He checks the time on his pawheld. "Now, about the other fun we have planned. 1800, my quarters?" + +I nod. "You're on." + +--- + +Val's quarters always have the lights dimmed. The pool room is bare of furniture, letting reflections of the water shimmer on every surface, and one of its walls is a floor-to-ceiling window that looks out on the black ocean. It feels like supervillain lair. + +When I arrive, he's floating on his back, and his ears twitch to the sound of the door closing behind me. He flips backward, dives, then resurfaces at the near side. "Hey, Austen." + +"What's up, Val? Still Valens, or is it Valerie tonight?" + +"Still Valens." + +"Got it." I've hung out with the bigender otter enough that I can usually tell on sight, but it's always good to check. "When's Keda showing up?" + +"He's on the way now." + +"Cool." + +He rests his muzzle on his crossed arms. "So, nervous about doing your first trance?" + +Of course I am. I keep worrying I'll choke up, or that I'll follow all the steps only for nothing to happen. But I just shrug. "How hard could it be?" + +"Well, it may prove *slightly *more challenging than wrestling some rabbit half your size to the ground." + +"Oh yeah? What about some otter?" + +"Wouldn't you love to find out?" The door pings. "Ah, there he is." + +Val lifts himself out of the pool, shiny and dripping. The wet fur matted against his skin shows off more of his muscles than are usually visible, and he grins pointedly at me as his sheath comes out of the water. I force my ears and tail still to not show that it gets to me. + +Not well enough, apparently. "Better pull your jaw off the floor before I let Keda in," he says. + +Whatever. It's not like I haven't caught him staring at *me* before. If he were a sub, or at least into vanilla sex, we definitely would have made something happen by now. + +I collect myself and shoot back, "You're right. Gotta save my energy for dropping your sub. Bet on it - first try." + +"We'll see." + +Val steps through the sonic fur dryer, throws a towel around his waist, and goes to the door. The instant it's open, Keda bounces in with an enthusiastic, "Hi, guys!" + +The stag wears a short, neon green skirt, a black denim jacket over a fishnet crop, and glowing loops around his antlers. He looks like he's come straight from a chemrave, which he confirms when he hugs Val and coos, "Otter fur feels so nice when I'm on six-four." + +"Just wait until you feel my new outfit later," Val says. + +"Ooh." + +The hug lingers for a long time, Keda's hands roaming all over Val's back, sides, and chest to savor his dense brown fluff. I'm about to remind Keda that I'm also here when he finally pulls himself away and turns to me. + +"Austen, right?" + +"That's right." + +"Keda. I've definitely seen you at parties before, but I don't think we've actually talked. Or I might have been too zonked to remember," he adds with a laugh and a glance at Val. "Either way, nice to *actually *meet you!" He extends his hand to shake. + +There's an enticing shyness in his big brown eyes, and I'm extremely aware of the green consent piercing in his snout, along with the fact that he's smaller and weaker than me. I know Keda's into pred/prey, and it's not for nothing that his crop top exposes his vulnerable belly. + +"Nice to meet *you*," I reply. I take his hand, squeeze as hard as I reasonably can, and flash my pointed teeth. He rewards me with a perfect reaction of wide eyes, perked ears, and nervous smile. + +"You're hot," Keda blurts. + +My smile grows, showing a little more of my teeth. "Thanks. You're defenseless." His muzzle falls open at that. + +Before we can continue, Val steps in and puts a paw on each of our shoulders. "Alright, you two. Let's pause to plan out our evening. Otherwise, the otter is just going to end up pinning the deer down for a dumb rut." + +"Yeah, I'm sure he would hate that," I say. Keda's ears fall back bashfully. + +"Shall we negotiate in the pool and then move to the bedroom?" Val suggests. + +Keda brightens. "Yeah! I'd love to cool my hooves after all that dancing." + +"Works for me," I say. Getting in the water does sound nice. + +"Thanks for being so agreeable, boys," Val says. The otter turns toward the pool, slowly slips off his towel, and lets it drop. Keda and I ogle him as he walks away, tail swaying and back muscles rippling. He glances over his shoulder with a smirk, then dives in. Clean, barely a splash. + +"He's hot," Keda says. + +"Yeah, he's not bad." + +Keda shrugs off his jacket, then removes his crop top by unbuttoning it at the back. I had been wondering how it was supposed to go on over those antlers. "So, how do you and Val know each other?" he asks. + +I pull my shirt over my head and toss it aside. "I met him for the first time at a party. We play adjacent to each other a lot, as you've seen." I slide my shorts down to reveal my tight jocks, then reach my paws over my head to stretch. + +Keda's eyes visibly glaze over as he appreciates my muscles and bulge. "Um, you also play tennis together, right?" + +"Racquetball." + +"Doesn't tennis have a racket?" + +I don't know where to start. "I'll explain it later." + +He giggles. "Later is good. The six-four is past peak, but I still feel pretty dumb." I can't help but be grateful to Val for bringing me something so cute and helpless. + +"How about you? How do you know Val?" + +"We work together sometimes." + +I cock my head. "You're on a science team?" + +"Evolutionary xenobiology," he says naturally. "Specifically, I focus on symbiotic interactions between this planet's microorganisms and-" + +I should have figured any friend of Val's would be a nerd. I give him a playful shove, making him stumble over his hooves for a moment before recovering his balance. "Quit thinking and take your skirt off." + +"Yes, Sir. Oops, I mean, is it okay if I call you Sir?" + +I grin. "Sure. It *does* sound natural coming from you." + +"Yes, Sir." Keda unfastens the back of his skirt and pulls it away from his tail. He wears nothing underneath, of course, so now he's completely naked and vulnerable in front of me. Despite the dim light, the glowing loops in his antlers clearly show the inside of his ears turning pink. + +I step out of my jocks and kick them away. I'm half out of my sheath, and Keda takes a long look, undoubtedly imagining how it would feel stretching him. Val isn't into topping - in the vanilla sense - and it would be satisfying to give the deer something he can't get from the other otter. + +"Are you two coming in?" Val calls. It's hard to tell, but hopefully he's getting irritated by how quickly Keda is responding to me. + +"Go on," I tell Keda. I slap him under his little white tail, making him jump. + +"Yes, Sir!" + +He sits down at the edge of the pool, scoots in, and paddles out to Val. Once there, he ducks under the water to get his head wet and emerges with a satisfied sigh. In doing so, all the glow rings come off his antlers and scatter on the surface like life preservers. + +"Don't worry about it," Val says as the deer tries to snatch them back. "I think they lend a nice atmosphere to the proceedings." + +With the way now clear, I get a running start and dive. It may not as pretty as Val's, but it gets the job done. I surface beside Keda and Val with a whip of my tail and the three of us tread water in a close triangle. + +After shaking my head dry, I kickstart the conversation. "So, Keda, what do you fantasize about me doing to you tonight?" + +He giggles nervously. "Um, I think it should be something simple since we haven't played together before. Maybe trance me and then top me while I'm helpless? Maybe with some pred talk and biting?" + +I nod. "Sounds perfect to me, little deer." + +"This will be Austen's first trance," Val says. "He's still a baby hypnotist." + +"Aww," Keda says. + +Scowling at the other otter, I counter, "That's right - you get to be my first victim." I worry I'm putting on too much bravado given my total lack of experience, but I push it aside. Staying nonchalant, I ask Keda, "What inductions do you like?" + +"Any induction is fine, as long as you keep giving me instructions. Otherwise, I start wondering what I should be doing and it takes me out of it." He says all this without hesitation. I like that he knows what he wants. + +"So no confusion inductions," I say. Val raises an eyebrow at this, no doubt surprised that I did some homework before coming over. + +Keda nods. "Those have never worked for me. And maybe no progressive muscle relaxation either? Just because it gets boring." + +"Got it." I try to remember what other inductions that leaves, and anxiety trickles back in as I come up empty. + +A green glow ring drifts by and slides under Val's muzzle. The light reflects emerald bands in his gold eyes, looking just like one of those augmented reality filters some hypnotists use. I can easily imagine a subject getting transfixed by the sight and nodding along with anything they hear. + +Keda sees it too, and his ears droop. "You're both really hot," he says, dazed. "Um, I know it wasn't the original plan, but as long as we're still negotiating how would you feel about double teaming me?" + +Val turns his colorful eyes to me. "What do you think?" + +It's a good suggestion. I could handle the physical side, where I dominate, and Val could take the mental side, where he admittedly has a slight advantage. We could even do it here in the pool - Keda is such a weak swimmer that either of us could easily keep the little land animal immobilized. + +But that's not how it works between me and Val. Right now, we're back on the court, and Keda is the ball. We might be having fun batting him back and forth, but this isn't a cooperative game - there's going to be a winner, and it's going to be me. I'm going to trance the little deer and hoard his attention all night while Val is forced to watch. + +"We stick to the original plan," I say. "Unless I need help, you just stand by and look pretty." + +"I couldn't stop looking pretty if I wanted to." + +I roll my eyes. "Unless there's anything else, let's get out of the pool and take this to the bedroom." + +Val cocks his head. "Already? I'm enjoying the water. Keda, what do you think?" + +Keda looks between us and giggles. "Isn't Austen supposed to be in charge of me?" + +"I suppose he is," Val says. "I guess you should get out, then." + +"Yes, Sir! Oops, I mean...okay!" + +As Keda passes between us, Val gives me another smirk, which I ignore. I'm more than ready for competition. Maybe I'll even find a way get the otter under my control by the time this is over. + +We walk through the fur dryer and through the glass door to Val's bedroom. The lighting is dim here as well, warm and inviting in color. Keda sits on the edge of the bed and I move to stand over him. + +Just as I'm about to pick up where we left off, Val abruptly says, "One moment," and disappears into the changing room. Something mechanical whirs inside, and he returns a moment later. + +"Wow," Keda gasps. + +"Hi, boys," Val says. He's squeezed into a black latex suit that exposes only his head, paws, and footpaws, with tufts of fur puffing out of each opening. It hugs his curves even tighter than his wet fur did, and its smooth surfaces shimmer in the dusky light. I've never considered myself a latex guy, but now I wonder if I've been missing out. + +Keda squeals in excitement and jumps up from the bed. He kneels to nuzzle the suit and run his hands all over it, sighing with chemically-enhanced tactile pleasure. + +"So, this is the new outfit you mentioned?" I ask. Thankfully this snaps Keda out of it, and he sheepishly returns to his spot on the bed. + +Val nods. "I tinkered with the fabricator and discovered a hack to make it print directly onto my body." The otter spreads the digits of his webbed paws and trails them up and down his chest and belly. "So much easier than putting it on myself - it always pulls my fur." + +"Well, it looks...good." + +"I know." + +Ugh. I turn back to Keda. "Ready to get hypnotized?" + +He pulls his eyes away from Val's shiny body and nods. "Just one thing I should warn you about. Don't take it personally, but I can be hard to drop because I'm super distractable. Even psycholuminescents don't always work on me." + +Val nods. "And, in my experience, prey subjects are more wary and alert with predator hypnotists. But on the other paw, many of them have a fawn response that makes it easy for them to just..." He raises his paw and presses his thumb and pointer digit together. "*Drop*." + +Fixated on those digits, Keda's eyes flutter for a moment, then reopen. "Rude!" he laughs. + +Val holds up his paws. "Sorry. Couldn't resist. Go ahead, Austen." + +The deer must have been expecting a snap - had the otter implanted that as a trigger? I burn with excitement at the idea of rendering someone helpless with only a gesture. + +Collecting myself, I plan my next steps. I know we should start with pre-talk: get the subject comfortable and in the right mindset to be hypnotized. We did some of that in the pool, but it wouldn't hurt to refocus Keda on me. Val always does it with a calm, even tone before eventually lowering to a deep, soothing lull. I have other ideas. + +I step closer to Keda and put on my best authoritative voice. It always makes subs snap to attention, and this time is no different. "Alright, you've done this plenty of times before, hypnoslut. You know the drill. You're mine, and you're going under no matter how much you resist." + +"Ooh, yes, Sir," he practically purrs. + +"Good prey. Just follow along with my words and maybe the big predator won't hurt you too bad." + +"Yes, Sir," he says again, more meekly this time. His pupils are huge - not just from the dim light and lingering effects of the drugs, but an intoxicating prey response too. + +This is fun, and I can clearly see Keda's arousal building, but it's not getting the deer any closer to trance. I want him like Val's subjects: putty in my paws, believing anything I say. I have plenty of ideas for what to do after that - the only problem is getting there. + +"Can I suggest something?" Val asks. + +I wanted to nail this trance with as little input from Val as possible, but I have to admit I could use some help getting started. "Sure, I'm open to it." + +"It helps to have the subject focus on a concrete image as you guide them into trance. I'll give an example, though of course you can put your own spin on it." + +He thinks for a moment and then begins, "Maybe something like this: 'Imagine your thoughts are water. Right now, you're carrying so much tension - tension from the day, tension from the anticipation of trance...and all that tension solidifies your thoughts. Freezes them into ice. Right?'" Keda nods even though Val is addressing me. "'But as you get more comfortable, as you warm up to the situation, they just might start to melt, and...'" He trails off, looking at me expectantly. + +My turn to run with the metaphor. I consider the idea of thoughts melting from solid ice into water and find that it makes sense to me. Even though I've never been hypnotized before, I can sort of imagine what it would feel like, and as I do I start to describe it. "As you warm up, the ice sweats. Your thoughts start to lose their shape." + +Although I'm halting and uncertain, Keda nods softly, getting me more comfortable with letting the words flow. I remember him saying that just telling him to relax his muscles would be boring, so I try a different approach. "But relaxation isn't the only way to heat you up. See, every time I look into those big doe eyes of yours, they flash with fear. I can see it. I can *smell *it. + +"That fear is so warm as it spreads through your blood. I bet you can imagine each flash melting your thoughts a little softer. After all, it's hard to think clearly when you're afraid, isn't it?" Keda nods again, eyes locked on mine. That's better. + +I put my webbed paw on top of his head, right between his ears, and dig my claws in just enough for him to feel it. "Warmer and warmer now. I see your body tensing up, getting you ready to run. Predators notice these things. + +"But eventually your body will accept that there's no way to escape. You're already caught. You have a bigger, stronger predator in front of you and the only hope you have is to placate him. It's *instinct*. You keep warming up whether you want to or not, and as more and more of the ice trickles away, the strength in your muscles melts away with it." + +I can't believe how dramatic the effect on Keda is. His previously erect ears are drooping, and his eyes are hazy even as they remain wide. Val's idea was good - *thoughts as water* makes sense to me, and tying it to muscle tension is a good addition on my part. I'm sure Keda's still sore from the chemrave, and my own muscles are still tight from the racquetball game earlier. I take a moment to roll my shoulders, automatically picturing it like breaking up like a chunk of ice. + +Val cuts in, his voice lowered to that familiar hypnotic register. "Keda tends to get distracted, so it helps to suggest that distractions only take him deeper. Everything he thinks, sees, or hears only serves to bring him back to the comfortable, familiar feeling of trance. Make sense?" + +I nod. "Yeah." + +"Something like: 'When your attention returns, you'll be even deeper than before.' Right?" + +"Yeah," I say again, then turn back to Keda. This is getting easier. I didn't realize how nervous I was about it before, but I feel relaxed and focused now. "It's okay if your eyes wander. So long as I'm here, you can't risk looking away for long..." I dig my claws in just a bit deeper, and he shivers. "But it's bound to happen. Right?" + +"Yes, Sir." + +"Say you look through the glass door at the pool. You naturally want to look at the moving light, right?" + +His gaze shifts in that direction. "Right." + +"But now you're thinking about water again, and realizing how many more of your thoughts are melting and dripping away." His eyes linger on the glass door until I say, "Eyes up here." It's satisfying to see how quickly he snaps back to me. + +I look around for other potential sources of distraction before landing on Val. "Now say you look over at him." Keda gazes at his regular dom, but this time I don't mind. I told him to do it, and in doing so have reduced Val to a prop. "You like looking at that tight, shiny latex, right?" + +"It's really nice." + +"Yeah, it is." I almost wish I could abandon the hypnosis idea and grind against Val's bulge for awhile. I've only touched latex a few times before, but I've always enjoyed the feeling of my pads sliding over it and the trailing impressions left by my digits sinking in. + +Val speaks up again and I realize I've been staring. "Maybe you could add something about the way the light reflects there, just like the water," he suggests. His voice is even calmer and quieter now, but I bet some part of him is seething at how well I'm doing. I can't wait to gloat later. "Does that sound good?" + +I nod. "Yeah, sounds good." I tell Keda, "When you look at that latex, notice the way it reflects the light as he moves. That light..." I lose my train of thought for a moment before continuing, "That light also flows like water. And its warm color makes you think about the warmth flowing into you. You melt even more, relax even more, and you let everything go. By now, there's so little solid left that you couldn't think straight or even move if you wanted to." + +I'm unsure where to go next, and Val jumps in again. "Isn't that right?" he asks Keda. + +The stag nods. "Yeah." + +I nod too, albeit sluggishly. I'm enjoying this more than I thought I would, but it's more tiring than I expected. My usual style of domming is tiring too, but only physically. A lot less talking. *A lot less thinking*, Val might say to make fun of me. + +At that thought, I decide to source more ideas from Val. "Next is the deepener, right?" + +"Exactly. You're doing really well." It's nice to hear this praise from my rival, whom I thought would be getting in my way or even sabotaging me by this point. "To continue the water metaphor, maybe you could suggest something like: 'The water starts to evaporate. More and more of it disappearing and taking the rest of your thoughts with it.' How does that sound?" + +"That's good." I consider this image and try to think of how to describe it. Thoughts as water, which then turns into vapor. Thoughts disappearing altogether, along with any remaining solidity in the body. It's surprisingly difficult to picture. Every time I think I have it, it slips away. I shake my head, trying to regain my focus. + +"Want me to take him the rest of the way?" Val offers. + +A break would be nice. Besides, judging by the blank look on Keda's face, I've already proven myself capable. "Yeah, that sounds great." + +Val grins. He must really be enjoying this because he has that gleam of mischief in his eyes again. He pads over to stand beside me, light swimming over latex with each step. + +When he starts speaking, his muzzle is pointed at Keda, but he's close enough to me that his breathy voice tickles my ears and makes them flick. "It's so hard to think with so many thoughts spilled on the floor. And it's impossible to put them back together now, isn't it?" + +"Yeah," Keda agrees sleepily. I agree too - the idea of putting melted ice back into its original shape is ridiculous. + +"If you look closely, you might see small curls of steam spiraling into the air, fading away, and taking all your thoughts with them. You'll need something to replace them, won't you?" + +"Mhm," Keda says. + +"Fortunately, you have a big predator's voice telling you what to think. It's so much easier to let the otter do your thinking for you, letting his words replace your thoughts." + +"That's right," I agree. I try to bare my teeth, but can't quite summon the energy. + +Keda frowns for a moment as if confused, but his vacant expression returns as Val continues speaking. "And now there are only a few drops of water left - few enough that you can count them as they vanish one at a time, starting from three." + +I know this part. At the end of this countdown, Keda will be totally entranced and helpless. I'm buzzing with anticipation. It's like we're back on the court and Val's about to serve the ball. + +"Three. Remembering how clear-headed you were when we started, how deep you've sunk now, and imagining how much further you could still go." + +Just like Keda, I've come a long way, too. I'm surprised to realize just how nervous I was when we started - it all feels so natural now. + +"Two. Eyes so heavy from looking up at the predator, so comfortable in your surrender that you could just let them fall closed." + +At this point, *I'm *practically falling asleep. It's been fun, but I'm ready to get to the next part, with Keda rendered so helpless and pliable. + +"One. So ready to drop deep for me. Mind so primed for it and waiting for permission. *Begging *for permission to let everything go." + +Here it comes. Soon, I'll be able to take whatever I want from the cute little stag. There are so many possibilities, though right now I have trouble thinking of any. I might have to ask Val what to do for that part as well. + +Val raises his paw, thumb and pointer digit together. "*Drop*," he says, and snaps definitively. + +I fall face-down in the bed, muzzle buried in the comforter and my weight sinking into the soft, comfortable mattress. My eyes gently close as my body relaxes completely. This is unexpected, but for some reason it feels right to just sink. + +"You did so well, Austen," Val says. "Keda is completely hypnotized. Isn't that right, little deer?" + +"Mhm," he says, and lets out a contended sigh next to my ear. + +I want to say something about how I'm ready to retake control over the deer, but it's hard to connect my thoughts to words, or words to my muzzle. Every time I try, I get lost in the plush warmth of the bed. + +"Seems like that took a lot out of you," Val says. "Didn't it?" + +"Mhm," is all I can say. + +"Hypnosis can be like that. It's a lot of effort to think on your footpaws and keep the rhythm going. Not to mention that all that talk about *relaxing* and *sinking* can be contagious. Still, you should try to get up. After all, Keda is *so *eager and ready for you." + +I hear a breathy whine of lust from beside me. With effort, I lift my head and see the deer stroking his hard length with one hand and, with the other, reaching his fingers under his short tail to work himself open. Val must have given him some lube at some point, because his fingers look wet and go in easily. I can't help imagining my cock sliding in the same way. + +"I can tell you *really* need it too," Val says. "Go on and try as hard as you can to get up." + +I realize that I'm rock hard, and have been for awhile. I was too focused on hypnotizing Keda to notice it earlier, but now I'm consumed by that needy, sensitive heat between my legs. As much as I want to finally fuck Keda, I have no strength to do anything except grind uselessly against the bed. + +"Looks like the big predator needs some help to get that where it belongs," Val says. His tone is mocking, but he's right. + +"Yes," I manage to sound out. + +"Thinking must be really hard for you right now with all the blood from your brain going to your cock. So why don't you just leave the thinking to me?" + +Even through the haze, I recognize the hypnotic language. Somehow he's tricked me into getting tranced. I should be angry. I want to protest, or maybe even safeword so that I can collect myself and evaluate the situation. + +But I'm surprised to find it feels too good to stop. I hadn't expected trance to feel like this, so floaty and frictionless - that I would ever enjoy having nothing to do or worry about. Mayber later I'll be embarrassed about this, but at least I'll still get to have my way with Keda. It seems like a good trade to me. + +"Well?" Val asks. + +"Yes." + +"Yes, what?" + +I tell myself it's just two syllables that don't mean anything. I tell myself I'm unable to resist anyway. "Yes, Sir." + +He laughs. "You were so much easier to drop than I thought you would be. All I had to do was dangle a cute deer in front of you like a pendulum and you didn't even notice my words pressing into your mind, melting away your thoughts." + +I should growl at this, but I don't have the strength to even try. + +"As for you, Keda," he says, turning to the deer. "Tonight wasn't what you expected, but I bet you're enjoying being my tool, aren't you?" + +Keda, even deeper in trance than I am, makes two inarticulate moans that probably sounded like, "Yes, Sir" in his head. + +"And you'll still enjoy being Austen's chewtoy, won't you?" + +Keda whines an affirmation. + +Val snaps his digits again. The sound makes my mind go blank for a moment, and then I hear him tell Keda, "Get on all fours and present yourself." + +"Yes, Sir," he answers, more clearly this time. He gets on his knees and buries his snout in a pillow, raising his white tail in the air. If only I could move, it would be so easy to stand up and mount him. + +Val turns his attention back to me. My eyes run slowly from the the shining latex up to the otter's gold eyes, which sparkle just as much in the low light. "I bet by now you really need to stuff that tight deer. Isn't that right?" + +I nod my head. + +"Fortunately, you can do that without needing to think. You *do* always seem to move without thinking on the court. So go on and get in position." + +With no input from my brain, my heavy body moves automatically and I find myself standing behind Keda. + +"You're doing so well," Val says to me. "So well for someone whose thoughts have all evaporated." + +"Huh?" I ask. I can't remember anymore what he's talking about, not with Keda so ready in front of me. + +"Don't worry. Let your body do what comes naturally, just like a dumb predator in the wild, helpless to obey its instincts. In this case, the instinct to *breed*." + +Val snaps his digits again, and the word *breed* blazes in my mind like a brand. Before I know it, I'm on top of the helpless deer, pushing the tip of my cock against his entrance as he whines uselessly beneath me. He's applied so much lube that, as soon I pop inside, half my length slides in with the first thrust. + +A wild predator wouldn't wait. I rut quickly, sawing in and out of him, and his whines grow louder. When the sound stops amusing me, I lean over him and drag my sharp teeth down his neck. With a shudder, he gets the message and stops his protests. + +"Good boys," Val says. "Good hypnotized boys." + +The words echo in my mind from somewhere far away. Right now, all that matters is taking what I want. I hook my webbed paws around Keda's hips, digging the tips of the claws in just enough to imply the threat as I thrust into him as deep as I can. + +He lets out a high-pitched squeal, then clamps his paws over his muzzle to maintain his quiet. I can tell he's cumming when I feel the fluttering contractions pulse around my cock and hear his ropes of seed splatter the bed. + +"That's a good boy, Keda," Val says, then turns to me. "I bet you want to cum too, don't you, big predator?" + +I growl some version of affirmation. + +"But *I'm* doing the thinking for you. After all, your thoughts have all turned to vapor, remember? They're probably circulating somewhere deep in the oxygen generators by now. So you don't get to cum unless *I* think you should." + +I snarl in protest and thrust harder, stealing as much pleasure as I can from the hot, tight squeeze of the deer around my cock. My balls tighten, right on the verge of releasing their pent-up load, but something stops me every time I get close. + +Val muses, "Maybe I should make you stop, or ruin...or maybe even trade places with the deer." + +I shake my head and redouble my efforts to reach climax. My pounding is so intense that Keda can no longer stifle his moans, and he starts stroking his cock like he wants to cum a second time. + +"You want to keep being the big predator? You want to *breed*?" Val asks. + +I nod urgently. + +"Then you just have to do one thing for me." + +He explains what he wants, and my beast brain accepts the deal immediately. As soon as he gives me permission to cum, I jam myself inside Keda and unload, claiming my prey's body for all the feral pleasure I can wring out of it. + +"Good boys." + +--- + +When it's my turn to serve, I make a calculated wall bounce that sends Val flailing uselessly. He was already down by two, and looks like he's getting frustrated now. + +Then he grins. "Wow, a serve with some actual technique. You must have been practicing." + +"Yeah, yeah. Meanwhile, you're still huffing and puffing after every volley." + +He shrugs. "Land cardio isn't my strong suit. By the way, what's the score?" + +"I'm up by three." + +"Huh. Are you sure you aren't *down *by three?" He raises his paw with thumb and pointer digit together. + +My ears and tail fall at the threat. "Come on, Val. Quit it with that." + +"If you wanted me to stop, you would change your piercing color." + +I sigh. He's right - I like the challenge the new trigger lends to our rivalry and, though I'll never admit it, I'm learning that losing can feel good sometimes. Anyway, I'll get Val back eventually. Keda is dragging us to a chemrave soon - maybe while we're there I'll trick Val into staring at some psycholuminescent stage lights. + +"By the way-" Val starts. + +"No more stalling," I say. "You've had enough time to catch your breath, so let me serve." + +He holds up his paw again and I relent. "*By the way*," he repeats, "Keda is coming over again tonight. Want to give hypnotizing him another go?" + +I frown. "Would I *actually *hypnotize him this time, or is this another trick?" + +He shrugs. "That depends on you, doesn't it?" + +Bounce. Bounce. Spin. I only register that the ball has teleported from my paw to his after he's already served, and by then it's sailing past me. + +He ends the game one point ahead thanks to that hypnosis magic trick, and as we leave the court, I think, *this otter is the worst*. But aloud I say, "Same time next week?" diff --git a/src/content/stories/Wisteria.md b/src/content/stories/Wisteria.md new file mode 100644 index 0000000..ea5d3b0 --- /dev/null +++ b/src/content/stories/Wisteria.md @@ -0,0 +1,448 @@ +--- +adult: true +description: "Something is amiss at the struggling Archway Film Center as, one by one, its cute, queer-as-hell employees become enraptured with a mysterious movie called \"Wisteria.\"" +title: "Wisteria" +pubDate: "Oct 2 2024" +--- + +"Do you like movies?" + +"I'm a huge cinephile!" Kairo lied. "I wouldn't be applying to work at a movie theater otherwise." + +"What are some of your favorites?" + +"Oh, I love *2001: A Space Odyssey *- Stanley Kubrick is a genius. *The Godfather,* although the third one took a nose dive in my opinion. And, of course, *Citizen Kane *is an absolute classic." + +"Well, sure," said Marco, the hiring manager. "Those are, you know, the kinds of titles that come up when you search 'top 100 best movies.' However, Archway Film Center mainly shows new releases from the indie and arthouse world." + +"Right. Of course." + +"So, do you have any favorites that are more on the obscure side?" + +Kairo had already exhausted their prepared response, and began to panic as they struggled to remember what the term "arthouse" meant. The rabbit certainly loved horror movies, but "*Ju-On: The Curse*" felt like the wrong answer. Meanwhile Marco, a raccoon with small, dark eyes, looked on with an unreadable expression. + +"I like *Hereditary *a lot," the rabbit answered. That seemed like a good midpoint. "The supernatural stuff in it is totally inaccurate, but it's still creepy and fun." + +"Sure," the manager said neutrally. He flipped his clipboard back to Kairo's resumé. "Actually, let's talk about that for a moment. I see you earned your Bachelor's in Phasmology two years ago, and since then you've been with a ghost-hunting company called Spectrex." + +"I know it's not the kind of background you're looking for," they admitted. "But it's given me a lot of experience with complex equipment, and I think those skills would be transferable to being a projectionist." + +"Can you tell me what brought about your decision to make such a dramatic career change?" + +Kairo remembered the New Mexico debacle and, before that, the nightmare in Wisconsin that had left them locked in an ectoplasmic chastity cage for weeks. Coming back to Columbus, Ohio after all these years to work at a movie theater wasn't exactly a dream come true, but at least here they wouldn't be at the mercy of some monster of the week. + +They answered, "Ghost-hunting requires a lot of traveling, which no longer meets my lifestyle needs." + +"Understandable." The raccoon flipped the pages of the clipboard back and set it down in his lap. "Well, I think I'm prepared to make an offer right now, with one stipulation." + +The rabbit's ears lifted. "Sure!" + +"Actually, two stipulations," he amended. "The first one being to broaden your film knowledge." + +"Absolutely. What's the second?" + +He cleared his throat and began, "As you can see, this is an old building." + +Marco gestured around the lobby as though that didn't go without saying. The carpet, unchanged since the 90s, had psychedelic splotch patterns that would better suit an arcade; the salmon-painted walls had rectangular patches of discoloration, marking where movie posters had hung for decades before being auctioned off to collectors; and the smell of stale popcorn was permanently etched into the air. Yet, somehow it all had a certain charm. It made Kairo nostalgic for an era they had never experienced. + +Marco continued, "Because of its age, we have more than our fair share of haunts, yet our budget doesn't leave enough left over to hire an exorcist. If you could keep an eye out and do what you can to contain the spirits here, it would be much appreciated. We don't want them bothering our customers and giving us a bad reputation." + +Although Kairo had hoped to leave their ghost-hunting days behind them, they were in no position to turn down a paycheck. "I would be happy to help." + +"Great." The raccoon stood, and the two shook paws. "Welcome aboard, Kairo." + +--- + +Over the first few weeks, the rabbit watched every new release the theater put out, not only to check for defects as part of the job, but also to stay knowledgeable. The artsy types that frequented Archway had conversations that referenced seemingly endless directors and micro-genres, and Kairo felt ten steps behind no matter how much they watched. + +Still, the job left them with plenty of free time for remedial education. Marco had not lied about the theater's strained budget, and if anything had undersold it. Based on the number of showtimes which were canceled with zero ticket sales, Archway seemed to be in dire straits indeed. + +It was also definitely haunted. The ghosts usually manifested around the popcorn machine, where they could ruin an entire batch with various vile substances, but they were easy enough to deal with. Kairo brought in their hobbyist ghost-hunting equipment and, like all low-level haunts, the spirits dispersed as soon as they were observed. + +Soon, even these manifestations stopped, and Kairo was left with even more time on their paws which they spent getting to know their new coworkers. Both of them were some flavor of queer, and the three spent a lot of time in the theater's small café chatting over coffee. + +"It was probably the worst movie I've ever seen," said Gemma. "Don't get me wrong, it was well-made, it looked great, and the performances were outstanding, but the concept was just so gratuitous. I never felt like its story justified it." + +"It was really fun though," Kairo protested. "I feel like that's the most important thing." + +"You both would probably enjoy the director's older stuff," said Bix. "She was way better when she had at least *some *studio oversight." + +The three went back and forth like this during their extended lunch break. At a certain point, Kairo started responding automatically and spent more of their attention just looking at the other two. + +Gemma, a slightly chubby sloth, wore brightly-colored facial piercings that contrasted with the black markings around her eyes, and she usually dressed in some combination of stripes and fishnets. She liked to refer to herself as a "goth sloth." + +Bix was a spectacled bear, whose fur patterns would be nearly identical to Gemma's if xe didn't dye the light parts of xer face electric blue. Whenever xe wasn't at the theater or in computer science classes at OSU, xe was hitting the gym. Xer bulky body, stuffed into plaid flannel and jeans as usual, looked almost comical balanced on the café's small chair, huge paws enveloping a tiny coffee mug. + +It went without saying that Kairo was down bad for both of them. Inappropriate as it might be, they had had endless fantasies about how it would go. Bix grinding xer powerful hips under the rabbit's short tail, or Gemma moaning as she rode Kairo's cock, or Kairo and Bix taking turns filling each of Gemma's holes. + +Besides these, Kairo's irrepressible paw fetish was aroused at the thought that both their species had footpaws with long claws, and the rabbit couldn't help wondering how those claws would feel gently raking their muzzle. + +Kairo found themself always on the verge of asking one (both?) of them out on a date, but never quite had the nerve. + +Suddenly emerging from his office, Marco cut in, "Lunch ends at 12:45, you three. Don't you all have things to do?" + +As Gemma and Bix stood to go, the rabbit considered asking whether they wanted to continue their conversation after work that night, but they had already gone. + +--- + +A new shipment of films arrived later that day and, eager for a break in the monotony, Kairo started reviewing them right away. Most were from studios they had come to recognize - A24, NEON, and Utopia among others. All were on digital, located on the distributors' private servers or on physical hard drives received via snail mail. + +All except one. Buried among the other mail was a single canister of 70 mm film, unlabeled aside from one word scribbled on a torn piece of tape: *Wisteria*. + +Kairo knew that Archway had a compatible projector because Marco had mentioned showing *The Hateful Eight* in that format. When he went on to say it had been the last time the theater had played to a full house, Kairo had known better than to ask how long ago that had been. + +After setting everything up, the rabbit turned off the lights in the projectionist booth and sat down to watch the strange film on the small screen on the wall. + +It started with a studio logo Kairo didn't recognize. Against a black background, two white snakes intertwined in a figure-eight like a double ouroboros. Underscoring the strange symbol was the text "Argent II." Kairo made a mental note to ask Gemma or Bix about it later, as well as to ask what happened to Argent I. + +The snakes faded out, and the next studio logo faded in. This one was more abstract. A yellow diamond emerged from the darkness and expanded until its edges left the screen. A concentric blue diamond appeared inside the yellow, and a green one appeared inside that. Saturated colors continued blooming out of the center and passing out of frame. + +Although it was only a simple geometric pattern, the gentle movement was arresting. Kairo couldn't look away. The center of the pattern swayed to the left, then to the right, swinging back and forth like a pendulum. The rabbit's eyes followed, and their mind relaxed under the light of the soothing colors. + +They noticed the backing sound - a low sine wave that chirped in time with each diamonds' appearance, making it even easier for Kairo to keep their eyes on the screen. + +Whatever studio this was, their logo was doing its job - Kairo would not be forgetting it any time soon. Strangely, though, the name of the company never appeared, only the continuous flow of concentric diamonds, only that rhythmic sound which massaged Kairo's long ears and made them droop sleepily. + +At some point, the movie proper began, and it was just as absorbing as the logo had promised. Kairo watched every frame with rapt attention. They only had to change reels once, and this was so easy that it was like it happened on its own. + +When the movie ended, Kairo felt an intense urge to watch it again right away. It was, by far, the best of the new movies they had been exposed to in their time at Archway. They couldn't exactly describe the plot, only how it made them feel: content, relaxed, and utterly immersed. *Submerged*, as if in a warm and scented bath that they never wanted to leave. + +Moreover, the movie* *was *hot*. Granted, the rabbit was easily aroused, but *Wisteria* contained scenes that seemed especially written for them. At several points it had been difficult to keep their paws off their stiff cock. + +Now that it was finally over, Kairo knew they had to relieve that urge. They locked the projectionist booth, unzipped, and easily worked themselves back up to full mast while remembering scenes from the movie. They couldn't recreate them in their mind exactly, so they found themself picturing those pretty diamonds instead. + +Color after color blossomed before their eyes, and soon they were panting and racing for the finish. With nothing available to clean up the mess, they lay down on the floor and threw their footpaws over their head. + +Climax washed over them like a tidal wave, and salty cum fell on their tongue in hot ropes, pulse after incredible pulse. The rabbit imagined them happening in sync with those comforting pulses of sound from the studio logo, and could have sworn the thought alone made them cum a second time. + +When it was over, they swallowed, flopped their legs back onto the floor, and waited to catch their breath. There were still a lot of unanswered questions about the movie, not least of which where it had come from, but there was one thing Kairo knew for sure: they *had *to show it to others. + +--- + +"*Wisteria*?" Bix asked. Xe frowned. "Like the show Lynch was supposed to direct?" + +"No, no," Kairo said. They had watched *Eraserhead *on Gemma's recommendation, and they knew *Wisteria *was a million times better than that. "It's a movie. *Argent II*?" + +"Argento? Like Dario Argento?" Bix was now thoroughly confused. Xe scooped some popcorn and, in a gesture that would have worried the customers if they were paying attention, reflexively checked it for ghost spoor. Satisfied, xe handed over the bag with a wave. "Enjoy your movie!" + +Kairo sighed. "You just have to watch it. Come up as soon as you can." A full day had passed since they had first seen it and, unable to stop thinking about it, they were getting impatient. + +"Will do, little bunny." *Little bunny*? Kairo's brain unexpectedly short-circuited at being addressed that way. The bear grinned, then continued, "I haven't seen you get this excited about a movie before, so I'm definitely curious." + +Kairo went up to the projectionist booth and waited eagerly for Bix to start xer break, every minute fighting the urge to roll *Wisteria *on their own. When the next matinée ended up canceled, Bix arrived with a fresh cup of coffee in xer paws. Finally. + +"Pretty tight in here," xe observed, bending slightly so xe wouldn't bump xer head. "We might have to snuggle up." + +"Yeah, well..." Kairo couldn't come up with a response that felt remotely appropriate. + +"I don't mind if you don't." Xe flopped down on the stool, which creaked in loud protest, then picked up the film canister. "*Wisteria*," xe read, then frowned as xe turned it over. "No other information?" + +"I know, it's weird. But it's really good, I promise." + +"Have you checked whether this thing is haunted? I've heard of films like this showing up at theaters and doing crazy things to people." + +"Who's the ghost expert here? Of course I've checked it." Kairo hadn't *actually* taken any readings but, come on - *Wisteria *was a masterpiece, not some poltergeist's prank. + +"All right." Bix took a sip of xer coffee. "Let's do it." + +Not needing to be told twice, Kairo dimmed the lights and started the projector. As the reel spun up to speed, they pulled the other stool beside Bix. As xe had said, there wasn't enough room in the booth for space between them, so xer fur brushed against their's, soft and warm. If such a small touch felt so good, Kairo could only imagine how it would feel to have the bear's strong arm wrapped around them. + +The Argent II logo faded out, and the rabbit practically bounced with excitement in anticipation of what came next. + +As the first diamonds faded in, Bix said, "Hey, what is this?" + +"Right? Isn't it pretty?" + +"I don't know." The sound kicked in, and the bear said, more softly, "This doesn't feel right." + +"Sure it does. It's so nice and relaxing." + +"I think...we should stop it..." Xer voice was slow and beginning to trail off. + +"Just keep watching. The image is so crisp, the sound quality is so crystal clear, it's so easy to just fall into." + +"Yeah, but..." Xer eyes glazed over. Even as xe tried to turn xer muzzle away, xer eyes stayed locked to the screen. + +"Just trust me." + +"Okay...little bunny..." + +The two watched in silence as the pretty diamonds washed over them. Kairo swore the colors were even brighter than before, and the pulsing sound resonated even more pleasantly in their head. + +Soon, they reached the first sex scene. The scene was so close to Kairo's fantasies that it felt almost too intimate to watch with Bix, and they could only hope that the bear found it hot too. + +"Whoa!" xe exclaimed. + +"Right?" Kairo said, relieved at the positive reaction. + +"That's so good. I can't believe someone put that on screen." + +"Keep watching. It gets better." + +The two of them stared in dumbfounded silence. When the next sex scene played, Kairo's pants grew tight and they couldn't help shifting position to generate friction against their sensitive cock. In doing so, they leaned farther into Bix than intended but, to their surprise, the bear leaned back, raised xer muscular arm over xer head, and draped it over the rabbit's shoulders. + +The touch was electric, and a shudder went through Kairo's body. The bear must have felt the same way, because xe gripped Kairo and pulled them in close. Glancing down, the rabbit noticed the huge bulge between the bear's legs. + +In a brief glance away from the screen, xe saw them looking and grinned. "Like what you see?" + +The movie had gotten Kairo so worked up that they couldn't respond, only swallow and nod. + +"God, I need some relief after a scene like that," Bix said. "I'll be honest - I think you're cute, and I've caught you staring at me enough times to know you feel the same way. Can you put that muzzle to work for me, little bunny?" + +Without waiting for a response, xe unzipped xer pants and dropped them to the floor. Xer briefs were the same electric blue as xer fur dye, and a wet spot had already appeared where xe had been leaking. When the smell of all that precum hit Kairo's nose, they couldn't resist. + +They got on their knees and nuzzled xer bulge, shuddering at the feel of it against their muzzle. Without waiting, the bear pulled the fly aside, slipped out their throbbing cock, and pulled Kairo in. + +With xer gaze fixed on the screen, xer aim was off, and Kairo had to struggle in the bear's grip to get their muzzle at the right angle. Then the shaft slid over their tongue, the taste of precum filled their nose, and they felt the bear's heavy paw settle on the top of their head. Scritching between their long ears, xe kept a strong grip and thrust roughly into Kairo's mouth. + +Looking up at the bear, they were pleased to see that xer attention stayed fixed on the screen. In xer brown eyes, they saw a reflection of the familiar diamond pattern swaying back and forth, back and forth. That was odd considering the studio logo had finished some time ago, but it wasn't worth thinking about. + +Instead, Kairo focused on bobbing up and down on Bix's cock, pumping xer shaft with one paw and caressing xer heavy balls with the other. They desperately wanted a free paw to stroke themselves, but the big bear's pleasure was more important. Not only because xe was such a dominant presence, but also to ensure xe had the best viewing experience possible. + +Soon, Bix strained in xer seat and tightened xer grip on Kairo's head. "Oh, fuck," xe groaned. "You're going to make me cum, little bunny." + +Kairo quickened their strokes, not giving Bix the slightest chance of pulling out as the telltale pulse travelled along xer shaft and xe poured xer heavy load into Kairo. When the bear finally let them go, the rabbit swallowed it all down and fell back on their elbows, licking their lips in satisfaction. + +Eyes still on the screen, xe murmured, "Wow. Really good movie. Really good." Glancing down, xe caught sight of Kairo's own needy cock. + +Kairo was too desperate not to ask for what they wanted. "Can you...use your footpaws on me?" + +Without replying, Bix pressed on Kairo's bulge with both footpaws and stroked up and down with incredible skill. Had xe done this before? Xer pads were leathery and tipped with those long claws that occasionally snagged on the denim - a predator's claws, Kairo thought with a shiver. + +In less than a minute they were close, and barely managed to get their cock out in time to release on their belly fur instead of in their jeans. + +Neither of them bothering to zip up, Kairo resumed their seat beside Bix, who pulled them into a close cuddle as the pair returned their full attention to the screen. Kairo managed to tear their eyes away for a moment to check how much footage was left on the reel. With a grin, they saw that the movie wasn't even half over. + +--- + +"This room is definitely not meant to hold three people," Gemma said. "Especially not when one of them is Bix." + +"It'll be worth it," Bix said. "It might be the best movie I've ever seen." + +"This coming from the bear who cried over *Joker*." + +"That was back in college!" the bear protested, ears folding back in embarrassment. "And Joaquin's performance really holds up." + +Gemma mimed the clown prince of crime's iconic dance, outstretched paws barely missing the low ceiling. + +"All right, all right," Bix said. "Kairo, can we get this going?" + +They were already reloading the reel as fast as they could. As they did, Bix took a seat on one of the two stools, and Gemma sat on the floor in front of xem, leaning back against xer legs. When the projector was finally ready, the rabbit practically hopped back to the other stool with undignified eagerness. + +When the *Argent II *logo faded in, Gemma frowned. "I've heard of that studio before somewhere. Maybe in a Nyx Fears video? Or maybe..." Before she could finish the thought, the snakes faded out and the diamonds faded in. + +The sloth's bristle-like fur stood on end. "This doesn't seem right." + +"Just keep watching," Kairo urged. + +"I don't know. There's something really freaky about this." + +Bix chuckled. "This coming from the sloth who made me watch *Mermaid in a Manhole*. It's *transgressive*. You like transgressive." + +Gemma closed her eyes. Shaking her head, she said, "I don't like the way this looks, or the way you two are acting. I think I want to leave." + +She started to stand and anger descended over Kairo. They didn't know what they were going to do, but they knew they had to keep Gemma in the room. + +When the sounds began, she threw her paws over her ears, but curiosity made her look at the screen to see what was causing it. To Kairo's satisfaction, they saw her face grow slack in a way that was becoming familiar. Her paws had surely been ineffective at muffling the sound, but as her muscles relaxed they fell away completely. If her ears were on top of her head, instead of buried below her fur, Kairo was sure they would see them at full alert. + +"There you go," said Kairo. "Isn't it good?" + +"Yeah, but..." + +Bix put a paw on Gemma's shoulder and squeezed gently. "It's okay. I felt the same way." + +"Bix?" + +"It's okay," xe repeated. "Just give in." + +With that, Gemma's resistance collapsed and she now stared blankly at the screen. Without her to worry about, Kairo and Bix were likewise able to focus on the movie. + +"Wow. That's filthy," Gemma said approvingly. "They're really going for it, aren't they?" Her paw slid down her chest to her belly, coming to rest just above her waistline. + +"Going to make it through the movie?" Bix asked. + +She leaned her head back and pressed against the bear's erection, which Kairo could see throbbing even through xer jeans. She grinned. "Now I see why you wanted to show me this so bad." Turning back to the screen, she said, "I've never seen something this hot." + +"It gets better," Kairo and Bix said simultaneously. + +"I...actually *don't* know if I can make it," Gemma confessed. She confirmed that the door was locked with a glance, then said, "Bear, could you...?" + +Bix, who had obviously been waiting, hooked xer arms under the sloth's shoulders and lifted her onto xer lap as she laughed in delight. "Want to help us out, little bunny?" + +Kairo eagerly knelt in front of them, and the rabbit's gaze immediately went to Gemma's footpaws at eye level. Below her long claws, she had a single large, pink pawpad which Kairo barely resisted exploring with their muzzle. + +"Eyes on me, little bunny," Bix said. + +Kairo looked up at the bear. Once more, they found themselves at the perfect angle to see those colorful diamonds reflected in xer eyes, which made it feel so nice and so easy to listen to xem. + +"Get our pants off so we can have some fun," xe said, and lifted Gemma higher for the rabbit's access. + +Kairo removed her jeans, followed by her lacey purple Hot Topic underwear, and saw her pink pussy already glistening and ready for the bear's cock. Bix rose to a slight squat to let Kairo pull xer pants around xer ankles, and they watched that huge, gorgeous cock spring free for the second time that day. + +As Bix lowered Gemma down, Kairo held xer cock in position and watched as her pussy easily slid over it. They felt xer cock throb in needy desire when it entered her, and felt the heat come off the sloth's pussy in waves. + +Gemma groaned. "It's been too long since I've felt that." + +The bear shifted xer arms to hold Gemma by her thighs and forced her legs open. As the bear began to thrust, the pair's position put them at the perfect angle to continue watching the movie, and Kairo watched in awe as the two coworkers they had crushed on for weeks fucked in front of them, mesmerizing diamonds flashing in their eyes. + +"I think the bunny likes what they're seeing," the sloth said. + +"Especially your footpaws," Bix said. "I think you should give them a taste, what do you think?" + +With Bix pounding into her, her footpaws flopped up and down so much that Kairo couldn't do much more than hold their tongue in place and let the pink pawpad run over it until it was slick and wet. Even that was enough for them, and they were soon too worked up to resist pulling out their cock and stroking. + +"Hey, little bunny," Bix grunted, breath growing ragged. "Get over here and watch me breed her." + +Kairo pulled themself away from Gemma's paw and lowered their muzzle to the heavy balls slapping against her. They watched the balls tighten, and then the bear and sloth simultaneously moaned with pleasure as xe buried xemself deep. Xe erupted xer virile load into her, cock visibly flexing with each rapid pulse. + +When it was over, Bix asked Gemma sheepishly, "You're still on the...?" + +"I would have stopped you if I wasn't." + +"Okay, good." + +The bear's arms were starting to shake in exhaustion, but xe managed to lift Gemma off xer cock with a slight popping sound. A trickle of thick, rich cum rolled down Bix's shaft and down to xer balls. + +"Clean us up, little bunny." + +By that point, Kairo would have obeyed anything the bear ordered them to do. They ran their tongue up the shaft to collect every drop, then slurped up the remainder that dribbled out of Gemma's pussy. One glob fell and splattered across their muzzle, and the smell clinging so close to their sensitive nose made their head spin. + +"Now *that's* a movie," Gemma said. + +Just then, someone knocked at the door. + +--- + +The three barely managed to get dressed by the time a key turned in the lock and Marco entered the room. Kairo quickly switched off the projector. They *did* plan to show *Wisteria *to Marco eventually, but they sensed he wouldn't be receptive to it right this moment. + +The raccoon crossed his arms. "Where exactly have you three been? I know things have been slow around here, but that doesn't justify you all disappearing for hours." + +"It hasn't been *hours*," Kairo protested. + +Marco tapped his watch. "I can tell time, you know." + +An idea struck Kairo which almost made them gasp in excitement. "For your information, we've been watching the movie that is going to save this theater." + +"The theater is fine," Marco said, a touch too defensively. + +"Just watch five minutes of this thing," Gemma said. "Seriously, it will change your life." + +Marco laughed. "I know the kind of movies you're into, Gemma, and I'm not about to put myself through another *Martyrs*." He frowned, then returned to addressing the full group. "Look, let's go downstairs, get some coffee, and talk about whatever's going on with you all." + +Bix took *Wisteria*'s film canister and handed it to Marco. "*This *is what's going on with us." + +Kairo sensed that this was the wrong move, and their suspicion was confirmed when Marco stiffened. "I see," he said slowly. "This is very interesting, and I'll have to give it a watch another time." + +"Watch it *now*," the bear said, aggression creeping into xer voice. + +"I have too much work to do. In fact, I should be getting back to it." + +Kairo sighed. "Marco, we don't have time for that. We need to screen this *tomorrow*. Trust me, it's going to get tails in seats." + +"*Tomorrow*," Bix agreed. "Great idea, Kairo." + +"You won't regret it," Gemma promised. "Come on, the spreadsheets can wait for a couple hours." + +As Marco struggled for words, Bix quietly slipped around him and closed the door. Xe backed xer heavy body against it and crossed xer arms. + +Marco's striped tail bushed up. "Listen," he said, voice straining. "On some level, you must know that you're not acting normally. I think you've all been affected by a haunted film - a haunted film which wants to spread to as many people as possible." + +"Don't be ridiculous," Gemma said. "*Wisteria *isn't *haunted*, it's just *good*. Tell him, Kairo. You know all about ghosts." + +Kairo frowned as they considered Marco's words. They had, of course, heard of similar things happening before, but... + +"Kairo?" Gemma repeated. + +"It's not haunted," they said. Of course it wasn't. Kairo wasn't sharing *Wisteria* because of some hypnotic influence; it was only the normal, healthy desire to share good movies with the people in your life. Maybe Kairo had been a little insistent about it, but that was only because they were new to cinephilia and easily excited. Really, Marco should have been happy about their enthusiasm. + +"*Please*," Marco begged. + +"Enough," Bix said, and grabbed Marco by the shoulder. "You're *going* to watch it. We need your approval fast if we want to screen it by tomorrow, so we don't have time to argue." + +"It's for the good of the theater," Gemma added. + +"Dammit," Marco said, defeated. "I'm sorry. I should have done a better job protecting you kids." + +Without another word, Bix steered the raccoon to a stool and sat him down as Kairo went to the projector. When the diamonds faded in, Marco tried to turn away, but Bix wrapped xer paws around his muzzle and pointed it back at the screen. + +"Stop resisting," Bix growled. "It'll be over soon." + +Bix was being a bit more aggressive than Kairo would have liked, but they knew it was for the best. When the sounds began to play, Marco's ears flattened in a futile attempt to muffle them, but he inevitably began to soften. The bear let him go and he continued watching the screen of his own accord. + +"Wow," he said. "Wow." + +"Good?" Gemma asked. + +"Really...good..." + +"Not haunted?" Kairo asked. + +The raccoon slowly shook his head. + +"Start stroking," Bix ordered. + +Marco removed his belt and pulled down his slacks, and Kairo saw that despite all his protests he was already fully hard. It was odd to see their straight-laced boss acting like this, but it just went to show that *Wisteria *really was that good. Before long, the raccoon's eyes clenched shut as he neared climax. + +"Use the rabbit's muzzle," Bix snapped. + +Kairo was unsure at first, but they could hardly restrain themself around a needy cock. They knelt down and opened their mouth for Marco, who spurted inside without waiting. + +For the rest of the movie, Kairo remained in their familiar kneeling position, performing whatever services the audience required. When it was over, Marco blinked and looked around. + +"You all were right," he said dreamily. Standing, he said, "Let's go. We have a lot of work to do if we're going to get this on screen by tomorrow." + +--- + +"Can you tell me anything about *Wisteria*?" the customer asked. "Film twitter is going crazy about it, but I can't even find it on Letterboxd. Was it a surprise TIFF release or something? I feel like I'm getting *Goncharov*'d." + +Kairo didn't understand anything after the first sentence, so they fell back on a reliable formula they had discovered. "It's best to go in knowing nothing about it." + +The customer nodded sagely. "Ah, I see. I'll take three, thanks!" + +The Archway Film Center website had been down for days due to unprecedented traffic, so they now took all ticket sales in-person. Between that, the fresh coat of salmon-colored paint on the walls, and the brand-new film projector, it was like it was 1999 again. + +Kairo had never seen Marco happier. With the success of *Wisteria *to subsidize anything he wanted to show, he dedicated the theater's other two screens to local filmmakers who wanted to promote their work - under the condition that they watch *Wisteria* first. It was an odd stipulation, but one any struggling artist would be happy to agree to. + +Marco had also tried selling copies of *Wisteria* to other theaters in the area, doing so at a deep discount out of a belief in its artistic merits. Oddly, the copies all had a defect in which they only showed geometric patterns of diamonds over harsh sine waves for ninety minutes, rather than the gorgeous cinematography, stellar performances, and unbelievably hot sex scenes which audiences agreed made up the film. + +Even so, the theater was making more than enough money in direct ticket sales. They even had enough money to finally hire an exorcist, though that was unnecessary now that Kairo had their new job title of Head of Custodial Services, Supernatural. There hadn't been any ghost activity in weeks, so the title was really just a formality (albeit one with a hefty pay raise) as they continued to run the projector. + +Through the window of the booth, Kairo saw that the audience was enjoying the film, just as they did night after night. A wolf in row E had mounted the bunny girl beside him, and worked his knot into her as the fox on the other side of him came in his muzzle for the second time that night. Two rows behind them in row G, two deer girls and a tigress ate each other out in a line, with well-endowed males at each end of the line stuffing any unused holes they could find. In the front rows, silhouetted figures blended together in writhing pleasure, all moving as one. It was wonderful to see so many people interested in the theater experience again. + +The rabbit's ears swiveled to the sound of someone entering the projectionist booth. When the heavy padding told them it was Bix, they assumed their usual position against the window where they would both have a good view of *Wisteria*. The bear tugged down their pants, bent them over, and took them from behind. + +When the movie was over, the audience below chatted excitedly as they left the theater. Kairo smiled at the thought of all those happy new converts - *customers*, they corrected themself. + +Now on break, Kairo left the projectionist booth and was immediately confronted by a team of six agents wearing black suits and black anti-hypnotic goggles. Two of them pushed the rabbit against the wall and cuffed their paws behind their back while the others waved scanners over Kairo or talked rapidly into wrist mics. + +"What the hell?" Kairo demanded. + +Gemma appeared in the middle of the agents. "That's Kairo, the projectionist. It all started with them." + +"Gemma? What's going on?" + +"Someone from the Occult Affairs Bureau came to me last week and set my head straight. I've been feeding them information since then. This whole thing's over, Kairo." + +"What thing?" They noticed two other agents leading Marco away in cuffs, and Bix close behind him. + +"Think for a second!" she said. "Do you think it's normal for orgies to break out in the middle of a movie?" + +"No, but..." Kairo frowned. "*Wisteria *isn't a normal movie." + +"You're right, it's not. It's a haunted movie - a parasite. And they're going to destroy it." + +The rabbit's eyes went wide. "They can't!" How could they do that? That would be like burning the Mona Lisa or, rather, some equivalent work that Kairo actually cared about - The Get Up Kids' discography, maybe. + +"Sedative going in," one of the agents said. Kairo struggled in their grip, but couldn't get away as the needle went through their fur and skin and forced them into a deep sleep. + +--- + +After two days in an exorcism hospital, Kairo came to their senses with a sheepish sense of embarrassment. No one blamed them for their actions, nor were they criminally liable, but they couldn't shake the sense of guilt when they remembered how they had acted. + +The Archway Film Center closed down for a month while it underwent deep purging. It turned out that Marco had never purchased haunting insurance so, after paying an exorcist out of pocket, the theater came out barely ahead of where it had been before *Wisteria*. He even had to sell the new projectors. + +Kairo sometimes considered reconnecting with Bix or Gemma, but ultimately decided it would be too weird. The rabbit sometimes saw them around the gay bars and coffee shops, and even noticed Bix in the crowd at Archway's reopening (though it took them a moment to recognize xem because xe had re-dyed xer fur from blue to neon yellow). Also in the crowd were a number of customers Kairo recognized from *Wisteria* screenings and, judging by the way they avoided eye contact, they recognized Kairo as well. + +These occasional chance meetings led Kairo to decide to leave Columbus for the second time. The rabbit reached out to Spectrex, who, as it turned out, still wanted them back at their old job and, soon enough, they settled back into the old routine of six days a week on the road. + +Despite everything, Kairo's appreciation for movies stuck, and they continued to dive into cinema. They had an extensive watchlist now but, with so many options on streaming services, often found themselves unsure what to watch. During these times, they sometimes caught themselves typing, almost automatically, W-I-S-T- diff --git a/src/content/stories/Zendian.md b/src/content/stories/Zendian.md new file mode 100644 index 0000000..ad1291b --- /dev/null +++ b/src/content/stories/Zendian.md @@ -0,0 +1,255 @@ +--- +description: "A writer isolates himself in a mountaintop cabin. What could go wrong?" +pubDate: "Sep 15 2024" +title: "Zendian" +--- + +*Thu Jun 27 2013 17:53:44.234 GMT-0000 (Greenwich Mean Time)* + +It's probably just my imagination. Although the midnight sun keeps me alert and energized and the isolation keeps me focused, they can also play tricks on my mind. I often lose track of time here, writing for hours straight, forgetting to eat, and only stopping when the sunset alerts me that it's after 0100. That's normal - that level of sustained focus is the reason I make the drive here every summer. + +Still, on this particular trip, there have been things that have not been normal. Small things. One day, I awoke to find the curtain in the den, normally wide open to the sun, pulled shut. Another day, I started a fresh pot of coffee brewing only to find it room temperature when I returned to pour it a few minutes later. Then yesterday, something else happened that made me see these events as part of a pattern. + +While reading on the sofa, I happened to glance up and spot a herd of wild reindeer out the window. Although they move to higher altitudes in the summer months, I'd never seen so many so close to the cabin. I rushed for my camera and new telephoto lens, but they had disappeared in the few seconds it took me to return to the window. I even went outside and stared into the forest, but didn't see a single one. + +This unsettled me so much that, for the first time this trip, I switched on the Internet modem so that I could download this journaling program. I plan to write in it daily and record anything else unusual. As you can see, I even turned on automatic timestamping since I'm sure I would forget to add the date and time otherwise. + +Realistically, I know it's only stress. It's the looming September deadline, the European book tour after that, not to mention the knowledge that Edda will not be there when I get home this year. With any luck, the act of journaling alone will clear my mind and get things back to normal. + +Time to get back to work for now. + +*Fri Jun 28 2013 14:41:24.906 GMT-0000 (Greenwich Mean Time)* + +It was at least 10 degrees today. The mountain winds were calm, and the sky was sunny and blue, so I took a long lunch break to visit my favorite vantage point in the area. The silence was otherworldly there, and the shining waters of Hvalfjörður were breathtaking as always. I shot a dozen photos with the new lens and am excited to edit and print them when I get home. + +This journal feels silly now. In the case of the disappearing reindeer, as I've come to think of it, I'm sure half my mind was still immersed in work, and I just took longer to fetch the camera than I thought. + +Why should I write words in a journal that I'm not even being paid for? Speaking of which, best get back to it. + +*Wed Jul 3 2013 22:22:29.541 GMT-0000 (Greenwich Mean Time)* + +Something *is *wrong with me, I'm sure of it. + +Just now, I went outside for firewood. Before I left, I specifically noted the position of the new couch so as not to bang my shin on it while carrying the logs in. When I returned, it was moved out of place, and on the rug, there was a patch of half-melted ice. + +No, I should be honest about what I saw, even though it's impossible - it was snow. But the snow line is far up the mountain at this time of year. It melted as I watched, so I only have my memory to prove it. + +I remember reading a story of how the Stasi drove someone to madness by breaking into their home and making small changes: resetting the time on the alarm clock, moving socks to the wrong drawer, or emptying a brand-new coffee tin. But that treatment was reserved for political dissidents, not authors of airport novels. No one would have any reason to follow me up a mountain to do something like this. + +But, if it's not an external actor, the only other explanation is that I'm losing touch with reality. + +*Thu Jul 4 2013 22:40:37.469 GMT-0000 (Greenwich Mean Time)* + +I turned the modem back on and e-mailed my agent, Kristín. I asked her to send a car for me tomorrow, as I shouldn't drive myself down the mountain if I'm somehow impaired. + +*Thu Jul 4 2013 12:10:26.331 GMT-0000 (Greenwich Mean Time)* + +It's another beautiful day outside, and I completed a difficult chapter before lunch. In the light of morning, I feel I overreacted in my last entry and am a bit embarrassed. After I write this, I'll send Kristín a follow-up message to reassure her that all is (most likely) well. + +What happened last night was unusual, I'll admit, so I've decided to put more safeguards in place to assess what, if anything, is going on. One of my trail cameras now points at the cabin door, ready to photograph any movement out of the ordinary - whether that's an intruder or myself wandering in a fugue state. + +Further, I charged my Pebble watch and plan to actually start wearing it. The GPS tracker will record any unusual movements I make, though I doubt there will be reliable signal up here. + +I think the result of these systems will be that when I experience discrepancies, such as "the case of the disappearing reindeer" or "the self-driving couch incident," I'll be able to reconstruct events from the trail cameras and GPS data. I'll be able to think, "Oh, right, I *did* go out earlier, and I *do* remember walking through an unseasonal patch of snow. I've been so caught up in my work that I forgot all about that." + +*Fri Jul 5 2013 09:17:29.101 GMT-0000 (Greenwich Mean Time)* + +No unusual images and no unusual GPS data captured today. + +I'm well on track to complete the manuscript by next Wednesday. Kristín will be astonished when she sees that it's actually finished. Speaking of which, I haven't received a response from her, which is for the best. I'm sure she is practiced in recognizing when a message from a client is borne of temporary neuroticism and politely ignoring it. + +It's hard to believe I'll be leaving so soon. Usually, I dread the drive back down, but this time, I'm surprised to find myself looking forward to it. It's partly that I've been on edge, but there's also something exciting about knowing that, this year, there is no timetable for my return. Without Edda waiting for me, I can detour to visit Þingvellir or hike to Glymur waterfall. Breakups have their upsides. + +*Sat Jul 6 2013 21:41:27.958 GMT-0000 (Greenwich Mean Time)* + +I was about to go to sleep when I remembered to check the cameras. Apparently, I left the cabin via the front door around 1200 and returned two hours later. I have no memory of this, so these selfies are distressing, to say the least. + +I checked the GPS data, too, but, as I suspected, the reception is unreliable up here. The smartwatch claims I walked 16km in just those two hours, and it shows me taking an impossible route up the vertical south face of the mountain. + +*Sat Jul 6 2013 22:01:11.530 GMT-0000 (Greenwich Mean Time)* + +I reconnected to the Internet and will stay connected this time. Still no response from Kristín. No new e-mails at all, in fact. There must be some technical error, in which case my initial e-mail was probably never even sent. + +*Sun Jul 7 2013 01:09.280 GMT-0000 (Greenwich Mean Time)* + +I didn't know. I never could have imagined this. I don't know where to + +*Sun Jul 7 2013 07:50:03.491 GMT-0000 (Greenwich Mean Time)* + +If anyone is reading this, I'm sure you noticed the dates of these entries and found it strange that I haven't mentioned what's being called the "June 28th Event" in English and "28.6" in íslenska. My self-imposed isolation worked too well, and I've been completely unaware of what's been happening. + +This journal is now *de facto *a historical record, so I should start at the beginning. + +As the sun was setting last night, I was searching the web to diagnose what was going on with my e-mail service (and/or my mind). I soon noticed the search engine home page had a prominent new section. It said, "Reykjavík Rupture," and there were several links underneath: + +"Latest Developments." +"Donate." +"Find Disaster Relief." +"Missing Persons Directory." + +At first, I thought there had been another volcanic eruption, but I learned what had happened a few clicks later. The capital is…uninhabited. Uninhabitable. The photos are impossible to describe. The air has the sickly iridescence of an oil spill, the coastal waters are thick with poison, and the streets are clogged with rivers of convulsing flesh. + +Edda, Kristín, and my few remaining family are most likely dead or worse. I felt only numbness when I realized this, and feeling has not returned over the subsequent sleepless hours. + +As to why I've received no contact, apparently, radiation from the Rupture is scattering across the upper atmosphere and interfering with communications worldwide. My e-mail provider is among those taken out of service altogether. + +Then there are the UMF, as Operation forces have termed them. They're walking east from the Rupture at a rate of 13km every 24 hours. Aircraft can't get close, so every photograph taken so far is from street level, obscured by hazy air and electronic interference. All anyone has captured are legs extending far out of frame. Personally, I'll be thankful if I never see their faces. + +That's all I can say for sure right now. This cabin is well outside of their projected path, so I'll be staying here until we learn more. + +*Mon Jul 8 2013 16:19:42.524 GMT-0000 (Greenwich Mean Time)* + +The instructions regarding water safety are hastily written and contradictory. One official said that water from natural sources should be boiled before drinking. Another said that Rupture radiation cannot be removed by any known means. But if that's true, what is anyone supposed to do? + +There is plenty of filtered water here - I have it delivered to the cabin ahead of me every year. I've never had a reason to measure how much exactly, but the answer turns out to be about 150 liters. There is also a snow-fed stream nearby that could keep me stocked indefinitely, assuming it's safe to drink from. + +As with water, the cabin is well-stocked with food, although the supply list has some inaccuracies. For example, it says there should be 5kg of beef in the freezer, but I don't see any there at all. Regardless, what *is *here could last me another month - more if I ration it. + +No one knows what health effects the Rupture radiation will have, but since it's been detected everywhere that's been tested for it, we're supposed to stay indoors as much as possible. That's fine with me, as I can appreciate the sunny weather through the windows of the den. I still feel strangely calm. Maybe it just doesn't feel real yet. + +*Tue Jul 9 2013 16:46:18.969 GMT-0000 (Greenwich Mean Time)* + +With little else to do, I spent my day writing. I don't know if anyone will live to publish, let alone read, the newest Glenn Dodger novel, but working on the thing is a habit at this point. Afterward, I napped. I've been feeling drowsy lately, and I keep having dreams I wish I could remember. + +I spent the rest of the day online, though most web pages still load so slowly that it's hard to absorb much information. Latest news: Operation forces tried another airstrike today. Two pilots made it back this time, both distorted. All forms of euthanasia still ineffective. No visible effect on the UMF. In other words, nothing new to report. + +It's incredible how quickly all this has become routine to me. I tell myself it's because I don't want to experience distress over things I can't control, but I worry it might be simple indifference. As Edda would be quick to point out, I've never been accused of having an excess of empathy. + +*Wed Jul 10 2013 03:31:39.030 GMT-0000 (Greenwich Mean Time)* + +"on wings of darkpresence" - a fragment of dialog from a dream tonight. We were in a cave, I think. There were other voices in the darkness, all talking over each other. The smell was unbearable. + +*Thu Jul 11 2013 02:57:24.114 GMT-0000 (Greenwich Mean Time)* + +I finished the novel this evening, so I uncorked the Ace of Spades I'd been saving for the occasion and treated myself to a few hours outdoors in the hammock. The purples of the sunset mixed with the smeared wildflower hues of the irradiated south into something beautiful. I took some photos that I think will turn out nicely. + +I can't believe I didn't notice our new summer aurora earlier, even before catching up on the news. I must have been too preoccupied to look at the sky, and was usually in bed before sunset anyway. + +I felt energized as I basked in the glow, and the champagne warmed my blood. Almost giddy. I had an urge to run into the dark forest and up the mountain, to strike out from the shadows at anything living like a vicious panther. It was a strange but powerful feeling. Not at all unpleasant. + +Is it wrong that I occasionally find this exciting? 28.6 is the most significant event in human history, one that proves we're not alone in the universe, and it happened during my lifetime. If for no other reason, I should be allowed to feel ecstatic that I was away from the city when it happened, that I'm privileged with an abundance of means of staying safe. + +I still haven't cried. I've tried thinking about the people I've lost, about the people currently suffering, and about places that now only exist in memory. Nothing. When it does happen, I think the strange moods I've been experiencing will be purged. For now, I type this with windows open to the forest as the trees' long shadows dance in the light of an alien world. + +*Thu Jul 11 2013 13:35:55.502 GMT-0000 (Greenwich Mean Time)* + +The UMF reversed course and turned north this morning. When I saw the new projected path, I was seized with terror and couldn't breathe. I can't shake the idea that they're coming for me - for me *personally*. They will be here in 48 hours. By then, I want to be as far away as possible - New Zealand, maybe. + +It took me a full hour to leave the bedroom. I couldn't make myself walk past the windows for fear of seeing a horrible face in them. I can't explain this panic. Maybe the grief I should have been feeling all this time has been sublimated into self-preservation. + +Planes are still running out of Akureyri for those who have the money - which I do. It's a 5-hour drive. I'll be packed within the hour and make arrangements on the way. + +*Thu Jul 11 2013 14:07:54.618 GMT-0000 (Greenwich Mean Time)* + +My car won't start. Apparently, Rupture radiation drains batteries, especially for vehicles parked outdoors. I am furious with myself for not learning this sooner. I should have had my escape plan in place. + +I will transfer my manuscript to a thumb drive, pack food and water, and descend on foot. I can reach Route 47 in two hours; from there, I will do whatever it takes to get a car. + +*Thu Jul 11 2013 14:43:25.915 GMT-0000 (Greenwich Mean Time)* + +While packing, I experienced a pseudo-memory, like a flash from a forgotten dream. I told myself it was nothing, but I still felt compelled to check. I set my bags back down and returned to the car, but this time, I opened the hood. + +It's not just the battery. Something shredded the engine. Half of it is unrecognizable. + +Did I do this in one of those strange fugue states? 28.6 distracted me so much that I forgot the reason I started this journal to begin with. But *how* would I have done this? And why? + +Just now, I checked the trail camera for clues. According to these photos, I've left the cabin six times this week. I'm sure I've spent all my time indoors - this journal even corroborates that! + +The GPS data is still erroneous, but consistently so: six impossibly fast trips 8km up the mountain and back again. + +*Thu Jul 11 2013 15:19:52.605 GMT-0000 (Greenwich Mean Time)* + +I don't often look in the mirror when I'm staying here. There's never a reason to. In years past, I might have trimmed my beard before returning home to Edda, but this time, there hasn't even been that to consider. + +I've been looking at the photos of…my other self. When I play them as a slideshow, something happens: I change. And the bathroom mirror confirms it. My face is not my own. My body is not the same shape. + +*Thu Jul 11 2013 15:30:03.768 GMT-0000 (Greenwich Mean Time)* + +I've been trying to stand and resume packing, but then I’ll blink and find myself back in my computer chair. + +I don't have time for this. They're still on their way. I have to leave the mountain. You, my other self, understand that, don't you? + +*Thu Jul 11 2013 15:36:10.609 GMT-0000 (Greenwich Mean Time)* + +leaving the mountain is no escape + +Who are you? + +zendian + +What do you want with me? + +hiding inside your body + +What do you mean by "leaving the mountain is no escape"? + +you have my scent now +they will follow + +The UMF, the Rupture - did you do this? + +tired + +*Wed Jul 10 2013 16:42:11.*967* GMT-0000 (Greenwich Mean Time)* + +The responses stopped. With Zendian "tired," I could move freely, so I started down the mountain. But, after an hour, I blinked and found myself back in the cabin. According to my watch, the return trip took less than 15 minutes with Zendian in control. + +I'm not surprised. My body is stronger and faster now. I feel it so clearly that I can't believe I didn't notice it before. But I can't access that strength - it's like I don't have the muscle memory for it. Only Zendian can use it. + +*Thu Jul 11 2013 18:54:42.439 GMT-0000 (Greenwich Mean Time)* + +Zendian, respond. I want answers. +Zendian, respond. I want answers. +Zendian, res + +cooperate +we will escape + +There is no "we!" Get away from me. + +unable + +What do you mean, "unable?" + +joining is irreversible + +What did you do to me? + +tired +i will show you + +*Fri Jul 12 2013 02:49:52.894 GMT-0000 (Greenwich Mean Time)* + +We took a walk under the light of the new aurora and talked for a while. Zendian told me that he’s been running from the Graveteeth, what we call "UMF," for a long time. He’s passed through countless worlds, and “joined” with countless others. + +If they catch him, they'll do far worse than what they did to the people of Reykjavík or to those pilots. That fate is only a byproduct of exposure to their lifespores. For Zendian, they would send him to the agonygrid, and I would have no choice but to go with him. I can't repeat everything he said. Just understand that nothing is worth that risk. + +Looking back, I see I never had a chance. By the time I noticed anything was wrong, it was already too late. + +*Fri Jul 12 2013 02:54:56.875 GMT-0000 (Greenwich Mean Time)* + +I'm ready to cooperate. + +*Fri Jul 12 2013 23:54:27.003 GMT-0000 (Greenwich Mean Time)* + +When I called for evacuation, I told them who I was and said I was injured. Mere hours later, a military ambulance pulled up beside my car, carrying two EMTs and two Operation soldiers. I stood to go out to meet them, unsure what would happen next, and then was struck by *déjà vu:* I glanced away from the window for a moment, and when I returned my gaze to where they had been, they were gone. + +Unlike when Zendian took the reindeer herd, however, I can recall dreamlike fragments of what happened this time. I remember getting behind them unseen and crawling up an old rowan tree to lie in wait. The soldiers' rifles didn't scare him - they didn't even warrant attention. He could have torn all the fragile bodies apart with darkpresence, but held back. Any blood shed on the ground would be a waste of usable biomass. + +He stalked them through the cabin, chased the survivors into the woods, and deprived them of oxygen one by one. I have never felt such confidence and single-minded purpose. And when it was done, he politely and seamlessly returned my body to exactly where it had been before. + +As his memories become clearer to me, my fear of Zendian is fading. I am not losing my identity - I am adding to it. + +*Sat Jul 13 2013 08:05:33.932 GMT-0000 (Greenwich Mean Time)* + +It was dusk when we climbed the south face, but the glow of the Graveteeth on the horizon had become so bright that it felt as if the midnight sun had never set at all. Zendian explained what was left to do as he showed the way to the cave he had found. The human part of us nearly bolted at the sight of what was inside. It had to be reminded that this was our only means of escape. + +The fleshnest was hungry, so we broke a piece from one of the EMTs and pushed it into a grasping reindeer muzzle. Satisfied, its mouths quieted their cries, and we began weaving the day's catch into the machinery. The growing smell of the Graveteeth told us we didn't have much time, so we worked quickly. We wired new eyes, ears, and nerves into the central mass and deposited meat and blood into the other organs to keep it supplied with fuel and oxygen. + +After incorporating the new material, we sensed the gray matter's calculations speed up. Soon enough, a human head reported the detection of a worldgrid within travel distance. We pulled a team of fleshscouts from a womb and sent them to it through a door of darkpresence. + +We waited, tense, for them to return. If they didn't, it could only mean that the new worldgrid was uninhabitable, and in that case, there wouldn't be time to find another. But after several long minutes, they returned intact. We and the fleshnest alike breathed a sigh of relief. + +According to the fleshscouts’ findings, the new worldgrid has organisms that are compatible with joining. Once we shed this form, it will be easy to find a new hiding place for a while. Maybe the Graveteeth will lose us this time - if not, we’ll have to build yet another nest. + +We returned to the cabin one last time to write this entry because the desire to record is forever part of us now. We will treasure that part of your species and carry it with us long after the last of you are gone. diff --git a/src/content/visuals/001-hoarse-man.md b/src/content/visuals/001-hoarse-man.md new file mode 100644 index 0000000..b5e8863 --- /dev/null +++ b/src/content/visuals/001-hoarse-man.md @@ -0,0 +1,6 @@ +--- +title: "Horror Photoshop 1" +src: "/assets/visuals/1 - hoarse man.png" +pubDate: "Jan 01 2023" +--- + diff --git a/src/content/visuals/002-glitch-demon.md b/src/content/visuals/002-glitch-demon.md new file mode 100644 index 0000000..a48aa59 --- /dev/null +++ b/src/content/visuals/002-glitch-demon.md @@ -0,0 +1,6 @@ +--- +title: "Horror Photoshop 2" +src: "/assets/visuals/2 - glitch demon.png" +pubDate: "Jan 02 2023" +--- + diff --git a/src/content/visuals/003-window-inspector.md b/src/content/visuals/003-window-inspector.md new file mode 100644 index 0000000..7be0b8b --- /dev/null +++ b/src/content/visuals/003-window-inspector.md @@ -0,0 +1,5 @@ +--- +title: "Horror Photoshop 3" +src: "/assets/visuals/3 - window inspector.png" +pubDate: "Jan 03 2023" +--- diff --git a/src/content/visuals/004-four.png.md b/src/content/visuals/004-four.png.md new file mode 100644 index 0000000..54c25b2 --- /dev/null +++ b/src/content/visuals/004-four.png.md @@ -0,0 +1,6 @@ +--- +title: "Horror Photoshop 4" +src: "/assets/visuals/4 - .png" +pubDate: "Jan 04 2023" +--- + diff --git a/src/content/visuals/005-moonless-rooms-zine.md b/src/content/visuals/005-moonless-rooms-zine.md new file mode 100644 index 0000000..7cd7666 --- /dev/null +++ b/src/content/visuals/005-moonless-rooms-zine.md @@ -0,0 +1,6 @@ +--- +title: "Moonless Rooms (Poetry Zine PDF)" +customSrc: "/assets/visuals/Moonless Rooms Zine.pdf" +src: "/assets/visuals/moonless-rooms-thumbnail.png" +pubDate: "Jan 01 2025" +--- diff --git a/src/layouts/Gallery/Gallery.astro b/src/layouts/Gallery/Gallery.astro new file mode 100644 index 0000000..8a08870 --- /dev/null +++ b/src/layouts/Gallery/Gallery.astro @@ -0,0 +1,75 @@ +--- +import { type CollectionKey, getCollection } from "astro:content"; +import { + BaseHead, + GalleryAudioItem, + GalleryImageItem, + GalleryWritingItem, +} from "components"; +import { SITE_TITLE, SITE_DESCRIPTION } from "const"; +import { chunkItemsByYear, dateSortFn } from "utils"; +import "./styles.css"; + +export interface Props { + collection: CollectionKey; + showInline?: boolean; +} + +const { collection, showInline } = Astro.props as Props; + +let items = await getCollection(collection); + +const itemsByYear = chunkItemsByYear(items as any); + +const typeComponentMap: { [key in CollectionKey]?: any } = { + apps: GalleryWritingItem, + commissions: GalleryImageItem, + poems: GalleryWritingItem, + songs: GalleryAudioItem, + stories: GalleryWritingItem, + visuals: GalleryImageItem, +}; + +const ItemComponent = typeComponentMap[collection]; +--- + + + + + + + +
+
+ + { + !!ItemComponent && + Object.keys(itemsByYear) + .sort((a, b) => Number(b) - Number(a)) + .map((year) => { + return ( +
    +
  • +

    {year}

    +
  • +
  • + {itemsByYear[year].sort(dateSortFn).map((item) => ( + + ))} +
  • +
+ ); + }) + } +
+
+ + diff --git a/src/layouts/Gallery/index.ts b/src/layouts/Gallery/index.ts new file mode 100644 index 0000000..e1aa9e9 --- /dev/null +++ b/src/layouts/Gallery/index.ts @@ -0,0 +1 @@ +export { default as GalleryLayout } from "./Gallery.astro"; diff --git a/src/layouts/Gallery/styles.css b/src/layouts/Gallery/styles.css new file mode 100644 index 0000000..d6df9dc --- /dev/null +++ b/src/layouts/Gallery/styles.css @@ -0,0 +1,44 @@ +.gallery { + box-sizing: border-box; + margin: 0 auto; + max-width: 1280px; + padding: 10px; + + .year-container { + align-items: flex-start; + display: flex; + list-style: none; + } + + .year-label { + text-align: center; + width: var(--thumbnailWidth); + + h2 { + margin: 0; + } + } + + .gallery-items { + &.inline { + display: flex; + flex: 1; + flex-wrap: wrap; + gap: 10px; + margin-bottom: 20px; + } + } +} + +@media only screen and (max-width: 576px) { + .gallery { + .year-label { + flex-basis: 100%; + margin-bottom: 20px; + } + + .year-container { + flex-wrap: wrap; + } + } +} diff --git a/src/layouts/Post/index.astro b/src/layouts/Post/index.astro new file mode 100644 index 0000000..52c4a76 --- /dev/null +++ b/src/layouts/Post/index.astro @@ -0,0 +1,57 @@ +--- +import type { CollectionKey } from "astro:content"; +import { AdultFlag, BaseHead, FormattedDate } from "components"; +import { keyPageNameMap, keyTypeNameMap, keyUrlMap } from "const"; +import "./styles.css"; + +type Props = { + adult: boolean; + body?: string; + collection: CollectionKey; + description?: string; + preformatted?: boolean; + pubDate: string; + title: string; +}; + +const { adult, body, collection, description, preformatted, pubDate, title } = + Astro.props as Props; +--- + + + + + + + +
+
+ +
+ {!!pubDate && } +

+ {title} + {adult && } +

+
+ {!!description &&

{description}

} +
+
+
+ {/* prettier-ignore */} + { + preformatted ? ( +
$1")} />
+              ) : (
+                
+              )
+            }
+          
+
+
+
+ + diff --git a/src/layouts/Post/styles.css b/src/layouts/Post/styles.css new file mode 100644 index 0000000..01ea468 --- /dev/null +++ b/src/layouts/Post/styles.css @@ -0,0 +1,73 @@ +.post-layout { + box-sizing: border-box; + height: fit-content; + margin: 0 auto; + max-width: 1280px; + padding: 10px; + a { + color: var(--lightLinkText); + } + + ul { + list-style: none; + } + + img { + max-height: 500px; + max-width: 800px; + object-fit: scale-down; + } + + .title { + margin-top: 10px; + } + + .title h1 { + align-items: center; + display: flex; + gap: 10px; + margin-top: 5px; + } + + .adult-flag-container { + width: fit-content; + } + + .description { + font-style: italic; + } + + pre { + p { + margin-bottom: 0; + margin-top: 5px; + } + } + + &.poem { + .content, + .title { + display: flex; + flex-wrap: wrap; + justify-content: center; + } + + .title { + align-items: center; + flex-direction: column-reverse; + + h1, + time { + width: fit-content; + } + } + } +} + +@media only screen and (max-width: 800px) { + .post-layout { + img { + max-width: 100%; + } + } +} diff --git a/src/layouts/index.ts b/src/layouts/index.ts new file mode 100644 index 0000000..13fc730 --- /dev/null +++ b/src/layouts/index.ts @@ -0,0 +1,2 @@ +export * from "./Gallery"; +export { default as PostLayout } from "./Post/index.astro"; diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 0000000..1679020 --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,5 @@ +--- + +--- + +

ruh-roh, page not found. back to home

diff --git a/src/pages/[collection]/[id].astro b/src/pages/[collection]/[id].astro new file mode 100644 index 0000000..672cc98 --- /dev/null +++ b/src/pages/[collection]/[id].astro @@ -0,0 +1,33 @@ +--- +import { noSubrouteCollections } from "const"; +import type { PostProps } from "content.config"; +import { PostLayout } from "layouts"; +import { getAllPosts, pathNameFromTitle } from "utils"; + +export async function getStaticPaths() { + const posts = (await getAllPosts()).filter( + (post) => !noSubrouteCollections.includes(post.collection), + ); + return posts.map((post) => ({ + params: { + id: pathNameFromTitle((post.data as PostProps).title), + collection: post.collection, + }, + props: { entry: post }, + })); +} + +const { collection } = Astro.params; +const { entry } = Astro.props; +const postProps = entry.data as PostProps; + +const preformatted = ["poems"].includes(collection); +--- + +{preformatted ? "" :
} diff --git a/src/pages/[collection]/index.astro b/src/pages/[collection]/index.astro new file mode 100644 index 0000000..571efc4 --- /dev/null +++ b/src/pages/[collection]/index.astro @@ -0,0 +1,19 @@ +--- +import { CollectionKey } from "astro:content"; +import { allCollectionKeys } from "const"; +import { GalleryLayout } from "layouts"; + +export async function getStaticPaths() { + return allCollectionKeys.map((collection) => ({ + params: { + collection, + }, + })); +} + +const { collection } = Astro.params as { collection: CollectionKey }; +const inlineGalleries: CollectionKey[] = ["commissions", "visuals"]; +const showInline = inlineGalleries.includes(collection); +--- + + diff --git a/src/pages/admin.html b/src/pages/admin.html new file mode 100644 index 0000000..dc185b6 --- /dev/null +++ b/src/pages/admin.html @@ -0,0 +1,13 @@ + + + + + + + + Content Manager + + + + + diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..c44c1ca --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,40 @@ +--- +import { BaseHead, LatestFeed, NavLinks } from "components"; +import { SITE_DESCRIPTION, SITE_TITLE } from "const"; +import { getAllPosts, sortPosts } from "utils"; +import "./styles.css"; + +const allPosts = await getAllPosts(); +const lastHundredPosts = sortPosts(allPosts, "pubDate").slice(0, 99); +--- + + + + + + + +
+
+

Jack of All Rabbits

+
+
+

About

+
+

+ I've dilettanted through a lot of hobbies. This site collects + (mostly) everything I've made in one easy-to-share place. +

+

+ Note: This website proudly contains erotic and pornographic works. + If you cannot legally view this material in your area, then don't. +

+
+
+ +
+
+ +
+ + diff --git a/src/pages/rss.xml.js b/src/pages/rss.xml.js new file mode 100644 index 0000000..b435afd --- /dev/null +++ b/src/pages/rss.xml.js @@ -0,0 +1,17 @@ +import rss from "@astrojs/rss"; +import { SITE_DESCRIPTION, SITE_TITLE } from "const"; +import { getAllPosts, sortPosts } from "utils"; + +export async function GET(context) { + const unsortedPosts = await getAllPosts(); + const posts = sortPosts(unsortedPosts, "pubDate", "desc"); + return rss({ + title: SITE_TITLE, + description: SITE_DESCRIPTION, + site: context.site, + items: posts.map((post) => ({ + ...post.data, + link: `/${post.collection}/${post.id}/`, + })), + }); +} diff --git a/src/pages/styles.css b/src/pages/styles.css new file mode 100644 index 0000000..fa869ea --- /dev/null +++ b/src/pages/styles.css @@ -0,0 +1,338 @@ +main { + --titleTop: 300px; + + display: flex; + flex-direction: row-reverse; + height: 100%; + justify-content: space-evenly; + margin: 0 auto; + overflow: hidden; + position: relative; + width: 100%; + + .about, + .title { + box-sizing: border-box; + } + + .title { + background-color: #000; + border-radius: var(--br); + color: white; + font-size: x-large; + margin: 0; + padding: 20px; + position: absolute; + right: 10px; + text-align: right; + top: var(--titleTop); + transform: rotate(10deg); + transform-origin: top right; + width: calc(100vw * 2); + z-index: 1; + } + + .about { + color: #fff; + height: fit-content; + margin-top: calc(var(--titleTop) + 100px); + max-width: 450px; + overflow: hidden; + position: relative; + z-index: 1; + + h2 { + margin-top: 0; + } + + .about-main, + .section-nav { + box-sizing: border-box; + } + + .about-main { + background-color: var(--darkBackground); + border-radius: var(--br) var(--br) 0 0; + color: var(--lightText); + padding: 20px; + } + + .section-nav { + background-color: #fff; + border-radius: 0 0 var(--br) var(--br); + color: #000; + line-height: 30px; + padding: 15px 20px; + text-align: center; + + li { + animation: hoverRotate 1s; + animation-play-state: running; + } + } + } + + .background { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + } + + /* Border hover styles */ + --hoverBorderSize: 10px; + --hoverBorder: var(--hoverBorderSize) solid #fff; + --invertedHoverBorder:var(--hoverBorderSize) solid var(--darkBackground); + --transparentBorder: var(--hoverBorderSize) solid transparent; + + .about, + .about-main, + .section-nav, + .feed-container, + .title { + transition: all .25s; + } + + .title { + border: var(--transparentBorder); + } + + .about-main { + border-top: var(--transparentBorder); + } + + .section-nav { + border-bottom: var(--transparentBorder); + } + + .about-main, + .section-nav { + border-left: var(--transparentBorder); + border-right: var(--transparentBorder); + } + + .about:hover { + .about-main { + border-top: var(--hoverBorder); + } + + .section-nav { + border-left: var(--invertedHoverBorder); + border-right: var(--invertedHoverBorder); + border-bottom: var(--invertedHoverBorder); + } + + .about-main { + border-left: var(--hoverBorder); + border-right: var(--hoverBorder); + } + } + + .feed-container { + + .feed-header, + .feed { + border-left: var(--transparentBorder); + border-right: var(--transparentBorder); + } + + } + + .feed-container:hover { + + .feed { + border-left: var(--hoverBorder); + border-right: var(--hoverBorder); + } + + .feed-header { + border-left: var(--invertedHoverBorder); + border-right: var(--invertedHoverBorder); + } + } + + .title:hover { + border: var(--hoverBorder); + } + + .background { + background-color: var(--pink); + } + + .background:hover { + animation-play-state: running; + } + + .plaid { + animation: colorize1 20s infinite, colorize2 21s infinite, colorize3 22s infinite; + animation-play-state: paused; + --g: conic-gradient(at 276px 36px, var(--cLightStripe) var(--p)); + --p: 25%, #0000 0%; + --l: + var(--cLightStripe) 0 36px, + #0000 0 108px, + var(--cLightStripe) 0 144px, + #0000 0; + background: var(--g) 144px 108px, var(--g) 36px 108px, var(--g) 144px 0, var(--g) 36px 0, conic-gradient(at 288px 24px, var(--cDarkStripe) var(--p))-72px -96px, conic-gradient(at 24px 288px, var(--cMain) var(--p))-96px -72px, repeating-linear-gradient(-45deg, var(--cDarkStripe) 0 1.4142135624px, #0000 0 2.8284271247px), linear-gradient(var(--l)), linear-gradient(90deg, var(--l)) var(--cMain); + background-size: 312px 312px; + background-blend-mode: normal, lighten; + filter: saturate(1.5); + transition: all .3s; + } +} + +@property --cMain { + syntax: ""; + inherits: false; + initial-value: #287499; +} + +@property --cLightStripe { + syntax: ""; + inherits: false; + initial-value: #E76486; +} + +@property --cDarkStripe { + syntax: ""; + inherits: false; + initial-value: #863a4e; +} + +@keyframes colorize1 { + 0% { + --cMain: #287499; + } + + 20% { + --cMain: #530036; + } + + 40% { + --cMain: #732704; + } + + 60% { + --cMain: #001c62; + } + + 80% { + --cMain: #c40000; + } + + 100% { + --cMain: #287499; + } +} + +@keyframes colorize2 { + + 0% { + --cLightStripe: #E76486; + } + + 20% { + --cLightStripe: #06d12c; + } + + 40% { + --cLightStripe: #f8ec05; + } + + 60% { + --cLightStripe: #21f805; + } + + 80% { + --cLightStripe: #b105c1; + } + + 100% { + --cLightStripe: #E76486; + } +} + +@keyframes colorize3 { + + 0% { + --cDarkStripe: #863a4e; + } + + 20% { + --cDarkStripe: #061059; + } + + 40% { + --cDarkStripe: #000000; + } + + 60% { + --cDarkStripe: #eb0000; + } + + 80% { + --cDarkStripe: #4d4e02; + } + + 100% { + --cDarkStripe: #863a4e; + } +} + +@media only screen and (max-height: 700px) { + main { + .title { + top: 20px; + transform: none; + } + + .about { + margin-top: 120px; + } + } +} + +@media only screen and (max-width: 768px) { + + main { + flex-direction: column; + height: fit-content; + overflow: visible; + + .title { + top: 20px; + transform: none; + } + + .about { + margin: 120px auto 0 auto; + } + + .feed-container { + margin-top: 20px; + + .feed { + overflow: visible; + } + + .feed-header { + position: static; + } + } + + .plaid { + animation-play-state: running; + } + + .about, + .about-main, + .section-nav, + .feed-container, + .feed, + .feed-header, + .title { + border: none !important; + } + } +} \ No newline at end of file diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..de1db36 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,43 @@ +html, +body { + margin: 0px; + padding: 0px; +} + +h1, +h2 { + font-size: large; +} + +h3 { + font-size: medium; +} + +h1, +h2, +h3 { + font-family: Georgia, serif; + font-family: system-ui, sans-serif; +} + +* { + font-family: system-ui, sans-serif; +} + +:root { + --br: 30px; + --blue: #287499; + --gold: #ff9500; + --pink: #e76486; + --green: #00ff40; + --pinkDark: #863a4e; + --blueDark: #174257; + --darkBackground: #181a1b; + --lightLinkText: #3391ff; + --lightText: #e8e6e3; + --blueTransluscent: #28749990; + --goldTransluscent: #ff950090; + --pinkTransluscent: #e7648690; + --greenTransluscent: #00ff4090; + --thumbnailWidth: 150px; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..b2f8413 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,3 @@ +import type { getCollection } from "astro:content"; + +export type Post = Awaited>[0]; diff --git a/src/utils/chunkItemsByYear.ts b/src/utils/chunkItemsByYear.ts new file mode 100644 index 0000000..6da5dfd --- /dev/null +++ b/src/utils/chunkItemsByYear.ts @@ -0,0 +1,20 @@ +import type { Post } from "types"; +import { getDateObj } from "./getDateObj"; + +export const chunkItemsByYear = (items: Post[]): { [key: string]: Post[] } => { + const itemsByYear: { [key: string]: Post[] } = {}; + + for (const item of items) { + const { data } = item; + const { pubDate } = data ?? {}; + const dateObj = getDateObj(pubDate!); + const year = dateObj.getFullYear().toString(); + if (itemsByYear[year]) { + itemsByYear[year].push(item); + } else { + itemsByYear[year] = [item]; + } + } + + return itemsByYear; +}; diff --git a/src/utils/css-snips.css b/src/utils/css-snips.css new file mode 100644 index 0000000..f28a11a --- /dev/null +++ b/src/utils/css-snips.css @@ -0,0 +1,19 @@ +/* Background pattern styles */ + +.cube-background { + --c1: var(--pink); + --c2: var(--blue); + --c3: var(--green); + animation: patternMove 1s infinite; + animation-play-state: running; + background-color: var(--c3); + background-image: linear-gradient(30deg, var(--c1) 12%, transparent 12.5%, transparent 87%, var(--c1) 87.5%, var(--c1)), linear-gradient(150deg, var(--c1) 12%, transparent 12.5%, transparent 87%, var(--c1) 87.5%, var(--c1)), linear-gradient(30deg, var(--c1) 12%, transparent 12.5%, transparent 87%, var(--c1) 87.5%, var(--c1)), linear-gradient(150deg, var(--c1) 12%, transparent 12.5%, transparent 87%, var(--c1) 87.5%, var(--c1)), linear-gradient(60deg, var(--c2) 25%, transparent 25.5%, transparent 75%, var(--c2) 75%, var(--c2)), linear-gradient(60deg, var(--c2) 25%, transparent 25.5%, transparent 75%, var(--c2) 75%, var(--c2)); + background-size: calc(40px * var(--patternSize)) calc(70px * var(--patternSize)); + background-position: 0 0, 0 0, calc(20px * var(--patternSize)) calc(35px * var(--patternSize)), calc(20px * var(--patternSize)) calc(35px * var(--patternSize)), 0 0, calc(20px * var(--patternSize)) calc(35px * var(--patternSize)); + filter: saturate(.75); +} + +.cube-background:hover:not(:has(*:hover)), +.cube-background *:hover:not(:has(*:hover)) { + animation-play-state: running; +} \ No newline at end of file diff --git a/src/utils/dateSortFn.ts b/src/utils/dateSortFn.ts new file mode 100644 index 0000000..ce63612 --- /dev/null +++ b/src/utils/dateSortFn.ts @@ -0,0 +1,10 @@ +import type { Post } from "types"; +import { getPostData } from "./getPostData"; + +export const dateSortFn = (a: Post, b: Post) => { + const pubDateA = getPostData(a).pubDate; + const pubDateB = getPostData(b).pubDate; + const dateA = new Date(pubDateA).getTime(); + const dateB = new Date(pubDateB).getTime(); + return dateB - dateA; +}; diff --git a/src/utils/formatters.ts b/src/utils/formatters.ts new file mode 100644 index 0000000..f9b9213 --- /dev/null +++ b/src/utils/formatters.ts @@ -0,0 +1,11 @@ +export const displayNameFromTitle = (title: string) => { + return title.replaceAll(".md", ""); +}; + +export const pathNameFromTitle = (title: string) => { + return title + .replaceAll(" ", "-") + .replaceAll("--", "-") + .replaceAll(".md", "") + .toLocaleLowerCase(); +}; diff --git a/src/utils/getAllCollections.ts b/src/utils/getAllCollections.ts new file mode 100644 index 0000000..c2a43ac --- /dev/null +++ b/src/utils/getAllCollections.ts @@ -0,0 +1,9 @@ +import { getCollection, type CollectionKey } from "astro:content"; +import { collectionNames } from "content.config"; + +export const getAllCollections = async () => { + const collections = await Promise.all( + collectionNames.map((name) => getCollection(name as CollectionKey)), + ); + return collections.flat(); +}; diff --git a/src/utils/getAllPosts.ts b/src/utils/getAllPosts.ts new file mode 100644 index 0000000..ec42377 --- /dev/null +++ b/src/utils/getAllPosts.ts @@ -0,0 +1,13 @@ +import { getCollection } from "astro:content"; +import { allCollectionKeys } from "const"; +import { type Post } from "types"; + +export const getAllPosts = async (): Promise => { + const posts = []; + + for (const collectionKey of allCollectionKeys) { + const collectionPosts = await getCollection(collectionKey); + posts.push(...collectionPosts); + } + return posts; +}; diff --git a/src/utils/getAllPostsByYear.ts b/src/utils/getAllPostsByYear.ts new file mode 100644 index 0000000..9c5d1d5 --- /dev/null +++ b/src/utils/getAllPostsByYear.ts @@ -0,0 +1,26 @@ +import { getCollection, type CollectionKey } from "astro:content"; +import type { PostProps } from "content.config"; +import type { Post } from "types"; +import { getAllPosts } from "./getAllPosts"; +import { getDateObj } from "./getDateObj"; + +export const getAllPostsByYear = async (collection?: CollectionKey) => { + const posts = collection + ? await getCollection(collection) + : await getAllPosts(); + + const postsByYear: { [key: string]: Post[] } = {}; + + for (const post of posts) { + const { pubDate } = post.data as PostProps; + const dateObj = getDateObj(pubDate); + const year = dateObj.getFullYear(); + if (postsByYear[year]) { + postsByYear[year].push(post); + } else { + postsByYear[year] = [post]; + } + } + + return postsByYear; +}; diff --git a/src/utils/getDateObj.ts b/src/utils/getDateObj.ts new file mode 100644 index 0000000..b473256 --- /dev/null +++ b/src/utils/getDateObj.ts @@ -0,0 +1,8 @@ +export const getDateObj = (date: string | Date) => { + if (typeof date !== "string") { + return date; + } + if (date.length === 4) { + } + return typeof date === "string" ? new Date(date) : date; +}; diff --git a/src/utils/getFileExtension.ts b/src/utils/getFileExtension.ts new file mode 100644 index 0000000..74d01db --- /dev/null +++ b/src/utils/getFileExtension.ts @@ -0,0 +1,3 @@ +export const getFileExtension = (filename: string) => { + return filename.split(".").pop(); +}; diff --git a/src/utils/getPostData.ts b/src/utils/getPostData.ts new file mode 100644 index 0000000..c0f8d75 --- /dev/null +++ b/src/utils/getPostData.ts @@ -0,0 +1,6 @@ +import type { PostProps } from "content.config"; +import type { Post } from "types"; + +export const getPostData = (post: Post) => { + return post.data as PostProps; +}; diff --git a/src/utils/getPostUrl.ts b/src/utils/getPostUrl.ts new file mode 100644 index 0000000..8c51b97 --- /dev/null +++ b/src/utils/getPostUrl.ts @@ -0,0 +1,10 @@ +import type { CollectionKey } from "astro:content"; +import type { PostProps } from "content.config"; +import type { Post } from "types"; +import { pathNameFromTitle } from "./formatters"; + +export const getPostUrl = (collection: CollectionKey, post: Post) => { + const { customSrc, src, title } = post.data as PostProps; + const url = customSrc || src || `/${collection}/${pathNameFromTitle(title)}/`; + return url; +}; diff --git a/src/utils/getPropByString.ts b/src/utils/getPropByString.ts new file mode 100644 index 0000000..862bc0d --- /dev/null +++ b/src/utils/getPropByString.ts @@ -0,0 +1,17 @@ +const getPropByString = (obj: T, propString: string) => { + if (!propString) return obj; + + let prop, + props = propString.split("."); + + for (let i = 0, iLen = props.length - 1; i < iLen; i++) { + prop = props[i] as keyof T; + + let candidate: any = obj[prop]; + if (candidate !== undefined) { + obj = candidate; + } else { + return obj[props[i] as keyof T]; + } + } +}; diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..5b6a195 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,12 @@ +export * from "./formatters"; +export { chunkItemsByYear } from "./chunkItemsByYear"; +export { dateSortFn } from "./dateSortFn"; +export { getAllCollections } from "./getAllCollections"; +export { getAllPosts } from "./getAllPosts"; +export { getAllPostsByYear } from "./getAllPostsByYear"; +export { getDateObj } from "./getDateObj"; +export { getFileExtension } from "./getFileExtension"; +export { getPostData } from "./getPostData"; +export { getPostUrl } from "./getPostUrl"; +export { isNew } from "./isNew"; +export { sortPosts } from "./sortPosts"; diff --git a/src/utils/isNew.ts b/src/utils/isNew.ts new file mode 100644 index 0000000..161c625 --- /dev/null +++ b/src/utils/isNew.ts @@ -0,0 +1,22 @@ +import { getCollection } from "astro:content"; +import type { Post } from "types"; +import { sortPosts } from "./sortPosts"; +import { getDateObj } from "./getDateObj"; +import type { PostProps } from "content.config"; +import { getAllPosts } from "./getAllPosts"; + +export const isNew = async (post: Post) => { + const { pubDate } = post.data as PostProps; + const unsortedPosts = await getAllPosts(); + const posts = sortPosts(unsortedPosts, "pubDate", "desc"); + const index = posts.findIndex((p) => p.id === post.id); + if (index === 0) { + return true; + } + const postDate = getDateObj(pubDate).getTime(); + const currDate = new Date().getTime(); + const diffTime = Math.abs(postDate - currDate); + const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24)); + if (diffDays < 30) return true; + return false; +}; diff --git a/src/utils/sortPosts.ts b/src/utils/sortPosts.ts new file mode 100644 index 0000000..2893318 --- /dev/null +++ b/src/utils/sortPosts.ts @@ -0,0 +1,27 @@ +import type { PostProps } from "content.config"; +import type { Post } from "types"; +import { getPostData } from "./getPostData"; + +type PostDataValues = string | boolean | undefined | number; + +export const sortPosts = ( + posts: Post[], + sortBy: keyof PostProps, + sortOrder: "asc" | "desc" = "desc", +) => { + const sortedPosts = posts.sort((a, b) => { + let dataA = getPostData(a)[sortBy] as PostDataValues; + let dataB = getPostData(b)[sortBy] as PostDataValues; + + if (sortBy === "pubDate") { + dataA = Date.parse(dataA as string); + dataB = Date.parse(dataB as string); + } + + if (sortOrder === "asc") { + return (dataB ?? 0) > (dataA ?? 0) ? 1 : -1; + } + return (dataB ?? 0) > (dataA ?? 0) ? 1 : -1; + }); + return sortedPosts; +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..de8f9b6 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "src/**/*"], + "exclude": ["dist"], + "compilerOptions": { + "strictNullChecks": true, + "rootDir": "./src", + "baseUrl": "./src", + "paths": { + "assets": ["assets"], + "components": ["components/index.ts"], + "const": ["const/index.ts"], + "layouts": ["layouts/index.ts"], + "types": ["types/index.ts"], + "utils": ["utils/index.ts"] + } + } +}