diff --git a/.github/workflows/hugo-theme-dream.yml b/.github/workflows/hugo-theme-dream.yml
new file mode 100644
index 00000000..92f8da79
--- /dev/null
+++ b/.github/workflows/hugo-theme-dream.yml
@@ -0,0 +1,35 @@
+name: Dream integration
+on:
+ pull_request:
+ paths: ['packages/hugo-theme-dream/**', 'verification/hugo-theme-dream/**', 'test/hugo-theme-dream.test.js', '.github/workflows/hugo-theme-dream.yml']
+permissions:
+ contents: read
+jobs:
+ live-site:
+ runs-on: ubuntu-24.04
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/checkout@v4
+ with:
+ repository: firekylin/firekylin
+ ref: ae71b610ed2dcb6e992366bc06080ec51805042c
+ path: .verification-core
+ - uses: pnpm/action-setup@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ - run: pnpm install --frozen-lockfile
+ working-directory: .verification-core
+ - run: pnpm install --frozen-lockfile --ignore-scripts
+ - name: Verify real SQLite site and installed ZIP
+ env:
+ FIREKYLIN_CHECKOUT: ${{ github.workspace }}/.verification-core
+ PLAYWRIGHT_MODULE: ${{ github.workspace }}/node_modules/playwright-core
+ CHROMIUM_PATH: /usr/bin/google-chrome
+ run: node verification/hugo-theme-dream/live.cjs
+ - uses: actions/upload-artifact@v4
+ if: always()
+ with:
+ name: hugo-theme-dream-live-evidence
+ path: verification/hugo-theme-dream/
diff --git a/packages/hugo-theme-dream/LICENSE b/packages/hugo-theme-dream/LICENSE
new file mode 100644
index 00000000..6dc812b5
--- /dev/null
+++ b/packages/hugo-theme-dream/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Yue Yang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/hugo-theme-dream/NOTICE.md b/packages/hugo-theme-dream/NOTICE.md
new file mode 100644
index 00000000..8371f7c5
--- /dev/null
+++ b/packages/hugo-theme-dream/NOTICE.md
@@ -0,0 +1,7 @@
+# Source and attribution
+
+Adapted from [Dream](https://github.com/g1eny0ung/hugo-theme-dream/tree/1bf86a1b1f7a5cf2be8538446bd6804292687686) by Yue Yang, pinned at `1bf86a1b1f7a5cf2be8538446bd6804292687686`. The complete original license is in LICENSE.
+
+Native Firekylin Eta integration by Firekylin contributors. No demo content, remote fonts, analytics or third-party service credentials included.
+
+Original generated CSS and source input are retained. Bundled generated styles include Tailwind 4.3.2, typography 0.5.20 and DaisyUI 5.6.17; complete MIT notices are in res/licenses. Native JavaScript replaces Alpine/masonry/TOC dependencies. No default photos, avatar, icon library, remote fonts, math/diagram engines, analytics or third-party services are bundled.
diff --git a/packages/hugo-theme-dream/README.md b/packages/hugo-theme-dream/README.md
new file mode 100644
index 00000000..54c9ce89
--- /dev/null
+++ b/packages/hugo-theme-dream/README.md
@@ -0,0 +1,7 @@
+# Dream for Firekylin
+
+Yue Yang’s MIT Dream v3 design is adapted with its original Tailwind/DaisyUI CSS, emerald/forest palettes, rounded shadow cards, optional avatar and flippable About panel. Native CSS columns provide the 4/3/2/1-column masonry-like feed; reading order is down each column, unlike upstream JavaScript masonry. Missing/unsafe covers are omitted rather than using random demo photos. Title and cover links avoid an overlay on the entire card.
+
+The About button flips between articles and escaped configurable About text/navigation cards. Hidden faces are inert, focus follows the visible face, the control supports keyboard activation, and reduced-motion disables rotation. Without JavaScript the article face remains readable and controls are hidden. A persistent light/dark toggle and safe DOM article TOC are included.
+
+Native posts/pages, archive/taxonomy/search, pagination, protected content, comments and attachments are supported. Footer text/author and avatar URL are configurable. The port does not implement arbitrary Hugo About bundles, Zen mode, image processing/zoom, scroll-spy, reading-time estimates, service comments, math/diagram rendering, ads, or feed generation. Default images, icons and service scripts are omitted. No live upstream pixel comparison or remote comment submission is claimed.
diff --git a/packages/hugo-theme-dream/VISUAL-COMPARISON.md b/packages/hugo-theme-dream/VISUAL-COMPARISON.md
new file mode 100644
index 00000000..6e2d86f4
--- /dev/null
+++ b/packages/hugo-theme-dream/VISUAL-COMPARISON.md
@@ -0,0 +1,3 @@
+# Visual adaptation
+
+Pinned summary/nav/back/single templates plus original generated CSS define the reference: rounded image cards, emerald/forest schemes, compact avatar/motto header, flipped About cards and narrow article with right TOC. CSS columns replace JS masonry and native controls replace icons/Alpine; reduced-motion and inactive-face focus handling are explicit. Installed screenshots/tests are included; no live upstream pixel comparison was performed.
diff --git a/packages/hugo-theme-dream/archive.eta b/packages/hugo-theme-dream/archive.eta
new file mode 100644
index 00000000..e942717b
--- /dev/null
+++ b/packages/hugo-theme-dream/archive.eta
@@ -0,0 +1,6 @@
+<% layout('./layout'); const site = await firekylin.widget('Widget_Options'); const archive = await firekylin.widget('Widget_Archive', {type:'archive'}); %>
+<% block('title', () => { %>归档 - <%= site.title() %><% }) %>
+<% block('content', () => { %>
+<% const groups = Object.entries(archive.grouped); if (!groups.length) { %>暂无文章。
<% } %>
+<% for (const [month, posts] of groups) { %><%= month %> <% } %>
+ <% }) %>
diff --git a/packages/hugo-theme-dream/attachment.eta b/packages/hugo-theme-dream/attachment.eta
new file mode 100644
index 00000000..a771d091
--- /dev/null
+++ b/packages/hugo-theme-dream/attachment.eta
@@ -0,0 +1 @@
+<% layout('./layout');const site=await firekylin.widget('Widget_Options');const archive=await firekylin.widget('Widget_Archive',{type:'attachment'});const found=archive.next();const cover=String(archive.row?.options?.featuredImage||''); %><% block('title',()=>{ %><%= found?archive.title()+' · ':'' %><%= site.title() %><% }) %><% block('content',()=>{ %>
<% if(found){ %><% const media=archive.row?.options?.attachment||{};const mediaUrl=String(media.url||'');const mediaValid=/^(https?:\/\/|\/(?!\/))/.test(mediaUrl);const mime=String(media.mime||''); %><% if(mediaValid){ %>
<% } %><%~ archive.content() %>
<%~ firekylin.comment({title:'评论'}) %><% }else{ %>暂无内容。
<% } %> <% }) %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/cate.eta b/packages/hugo-theme-dream/cate.eta
new file mode 100644
index 00000000..8bdf5c52
--- /dev/null
+++ b/packages/hugo-theme-dream/cate.eta
@@ -0,0 +1,6 @@
+<% layout('./layout'); const site = await firekylin.widget('Widget_Options'); const metas = await firekylin.widget('Widget_Metas_Category_List'); %>
+<% block('title', () => { %>分类 - <%= site.title() %><% }) %>
+<% block('content', () => { %>
+<% while (metas.next()) { %><%= metas.row.name %> (<%= metas.row.count %>)
+<% if (metas.row.children && metas.row.children.length) { %><% for (const child of metas.row.children) { %><%= child.name %> (<%= child.count %>) <% } %> <% } %>
+ <% } %> <% if (!metas.have()) { %>暂无分类。
<% } %> <% }) %>
diff --git a/packages/hugo-theme-dream/error/404.html b/packages/hugo-theme-dream/error/404.html
new file mode 100644
index 00000000..5be24639
--- /dev/null
+++ b/packages/hugo-theme-dream/error/404.html
@@ -0,0 +1 @@
+404 404 Home
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/error/500.html b/packages/hugo-theme-dream/error/500.html
new file mode 100644
index 00000000..3e278337
--- /dev/null
+++ b/packages/hugo-theme-dream/error/500.html
@@ -0,0 +1 @@
+500 500 Home
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/inc/list.eta b/packages/hugo-theme-dream/inc/list.eta
new file mode 100644
index 00000000..449410d0
--- /dev/null
+++ b/packages/hugo-theme-dream/inc/list.eta
@@ -0,0 +1 @@
+<% const archive=firekylin.archive;let count=0; %><% while(archive.next()){count++;const cover=String(archive.row.options?.featuredImage||''); %>
<% if(/^(https?:\/\/|\/(?!\/))/i.test(cover)){ %>
<% } %>
<%= archive.date('YYYY-MM-DD') %>
<%= archive.excerpt(300) %>
<%= archive.author('display_name') %>
<% } %>
<% if(!count){ %>暂无文章。
<% } %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/inc/pagination.eta b/packages/hugo-theme-dream/inc/pagination.eta
new file mode 100644
index 00000000..8536cfdd
--- /dev/null
+++ b/packages/hugo-theme-dream/inc/pagination.eta
@@ -0,0 +1 @@
+<% const archive=firekylin.archive; const p=archive.pagination; %><% if(p && p.totalPages>1){ %><% } %>
diff --git a/packages/hugo-theme-dream/index.eta b/packages/hugo-theme-dream/index.eta
new file mode 100644
index 00000000..34dd3053
--- /dev/null
+++ b/packages/hugo-theme-dream/index.eta
@@ -0,0 +1 @@
+<% layout('./layout');const site=await firekylin.widget('Widget_Options');const archive=await firekylin.widget('Widget_Archive',{type:'index'}); %><% block('title',()=>{ %><%= archive.archiveTitle||site.title() %><% }) %><% block('content',()=>{ %><% if(archive.archiveTitle){ %><%= archive.archiveTitle %> <% } %><%~ include('./inc/list',{archive}) %><%~ include('./inc/pagination',{archive}) %><% }) %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/layout.eta b/packages/hugo-theme-dream/layout.eta
new file mode 100644
index 00000000..61bb3564
--- /dev/null
+++ b/packages/hugo-theme-dream/layout.eta
@@ -0,0 +1 @@
+<% const site=await firekylin.widget('Widget_Options');const cfg=site.themeConfig; %><%~ block('title') %> 跳转到正文 <%~ block('content') %>
<%= cfg.aboutTitle||site.title() %> <%= cfg.aboutText||site.description() %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/package.json b/packages/hugo-theme-dream/package.json
new file mode 100644
index 00000000..96f8d1a3
--- /dev/null
+++ b/packages/hugo-theme-dream/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "hugo-theme-dream",
+ "title": "Dream",
+ "version": "0.1.0",
+ "private": true,
+ "description": "Dream’s original DaisyUI cards, emerald/forest palettes, masonry-style columns and flippable About panel.",
+ "license": "MIT",
+ "author": "Yue Yang; Firekylin contributors",
+ "homepage": "https://github.com/g1eny0ung/hugo-theme-dream",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/firekylin/themes.git",
+ "directory": "packages/hugo-theme-dream"
+ },
+ "firekylin": {
+ "type": "theme",
+ "id": "hugo-theme-dream"
+ },
+ "engines": {
+ "firekylin": ">=2.17.1"
+ },
+ "configElements": [
+ {
+ "type": "text",
+ "name": "authorName",
+ "label": "页脚作者",
+ "help": "留空使用站点标题。"
+ },
+ {
+ "type": "text",
+ "name": "footerText",
+ "label": "页脚介绍",
+ "help": "留空使用站点描述。"
+ },
+ {
+ "type": "text",
+ "name": "avatarURL",
+ "label": "头像 URL",
+ "help": "可选,使用站内路径或 HTTP(S) URL。"
+ },
+ {
+ "type": "text",
+ "name": "aboutTitle",
+ "label": "关于标题"
+ },
+ {
+ "type": "textarea",
+ "name": "aboutText",
+ "label": "关于正文",
+ "help": "纯文本,保留换行。"
+ }
+ ]
+}
diff --git a/packages/hugo-theme-dream/page.eta b/packages/hugo-theme-dream/page.eta
new file mode 100644
index 00000000..1ca20e9c
--- /dev/null
+++ b/packages/hugo-theme-dream/page.eta
@@ -0,0 +1 @@
+<% layout('./layout');const site=await firekylin.widget('Widget_Options');const archive=await firekylin.widget('Widget_Archive',{type:'page'});const found=archive.next();const cover=String(archive.row?.options?.featuredImage||''); %><% block('title',()=>{ %><%= found?archive.title()+' · ':'' %><%= site.title() %><% }) %><% block('content',()=>{ %><% if(found){ %><%~ archive.content() %>
<%~ firekylin.comment({title:'评论'}) %><% }else{ %>暂无内容。
<% } %> <% }) %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/post.eta b/packages/hugo-theme-dream/post.eta
new file mode 100644
index 00000000..6db07a58
--- /dev/null
+++ b/packages/hugo-theme-dream/post.eta
@@ -0,0 +1 @@
+<% layout('./layout');const site=await firekylin.widget('Widget_Options');const archive=await firekylin.widget('Widget_Archive',{type:'post'});const found=archive.next();const cover=String(archive.row?.options?.featuredImage||''); %><% block('title',()=>{ %><%= found?archive.title()+' · ':'' %><%= site.title() %><% }) %><% block('content',()=>{ %><% if(found){ %><%~ archive.content() %>
<%~ firekylin.comment({title:'评论'}) %><% }else{ %>暂无内容。
<% } %> 目录 <% }) %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/res/css/source.css b/packages/hugo-theme-dream/res/css/source.css
new file mode 100644
index 00000000..cced7bd5
--- /dev/null
+++ b/packages/hugo-theme-dream/res/css/source.css
@@ -0,0 +1,172 @@
+@import 'tailwindcss' source(none);
+
+@source "input.css";
+@source "../layouts";
+
+@plugin '@tailwindcss/typography';
+@plugin "daisyui" {
+ themes: emerald --default, forest --prefersdark;
+}
+
+@custom-variant dark (&:where(.dark, .dark *));
+
+@config '../tailwind.config.js';
+
+html {
+ scroll-behavior: smooth;
+}
+
+#disqus_thread iframe[src*='ads-iframe'] {
+ display: none;
+}
+
+#dream-global-bg {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background-position: center;
+ background-size: cover;
+ z-index: -1;
+}
+
+.flip-container {
+ width: 100vw;
+ /* The height of navbar is 112px (80px + 2rem). */
+ height: calc(100vh - 80px - 2rem);
+ max-width: 100%;
+ perspective: 1000px;
+
+ &.flip-it {
+ .flipper {
+ transform: rotateY(180deg);
+ }
+
+ .front {
+ overflow: hidden;
+ }
+
+ .back {
+ transform: translateX(0) rotateY(180deg);
+ }
+ }
+
+ .flipper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ transform-style: preserve-3d;
+ transition: transform 0.75s;
+ }
+
+ .front,
+ .back {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ backface-visibility: hidden;
+ transition: transform 0.75s;
+ }
+
+ .front {
+ transform: rotateY(0deg);
+ }
+
+ .back {
+ /* Hack: set translateX to -25% to make the back page not overlap the TOC. */
+ transform: translateX(-25%) rotateY(180deg);
+ }
+}
+
+#TableOfContents {
+ @apply sticky top-24;
+
+ /* top-24 + 1rem */
+ max-height: calc(100vh - 7rem);
+ overflow-y: auto;
+
+ /* Prevent long headings (e.g. CJK titles) from making the TOC wider than
+ its grid column and overlapping the article (#411 / #412) */
+ max-width: 100%;
+}
+
+@supports (-moz-appearance: none) {
+ #TableOfContents {
+ position: initial;
+ }
+}
+
+#TableOfContents ul {
+ @apply menu menu-sm;
+}
+
+.mermaid-panzoom {
+ @apply relative border border-transparent rounded-box;
+}
+
+.mermaid-panzoom:hover,
+.mermaid-panzoom:focus-within {
+ @apply border-base-300;
+}
+
+.mermaid-panzoom > .mermaid {
+ @apply overflow-hidden;
+}
+
+.mermaid-panzoom-reset {
+ @apply absolute z-1 right-2 bottom-2 opacity-0 pointer-events-none transition-opacity duration-150 ease-in-out;
+}
+
+.mermaid-panzoom:hover .mermaid-panzoom-reset,
+.mermaid-panzoom:focus-within .mermaid-panzoom-reset {
+ @apply opacity-100 pointer-events-auto;
+}
+
+.dream-alert {
+ > .heading {
+ @apply flex items-center gap-1 text-sm font-medium;
+ }
+
+ &.note {
+ @apply border-s-blue-600 dark:border-s-blue-500;
+
+ .heading {
+ @apply text-blue-600 dark:text-blue-500;
+ }
+ }
+
+ &.tip {
+ @apply border-s-green-600 dark:border-s-green-500;
+
+ .heading {
+ @apply text-green-600 dark:text-green-500;
+ }
+ }
+
+ &.important {
+ @apply border-s-purple-600 dark:border-s-purple-500;
+
+ .heading {
+ @apply text-purple-600 dark:text-purple-500;
+ }
+ }
+
+ &.warning {
+ @apply border-s-yellow-600 dark:border-s-yellow-500;
+
+ .heading {
+ @apply text-yellow-600 dark:text-yellow-500;
+ }
+ }
+
+ &.caution {
+ @apply border-s-red-600 dark:border-s-red-500;
+
+ .heading {
+ @apply text-red-600 dark:text-red-500;
+ }
+ }
+}
diff --git a/packages/hugo-theme-dream/res/css/theme.css b/packages/hugo-theme-dream/res/css/theme.css
new file mode 100644
index 00000000..0fb7b7f5
--- /dev/null
+++ b/packages/hugo-theme-dream/res/css/theme.css
@@ -0,0 +1,9 @@
+@import url('upstream.css');
+
+/* Native Firekylin integration: controls, media and code containment. */
+body{overflow-wrap:anywhere}.skip{position:absolute;top:-100px}.skip:focus{top:0;z-index:99}.native-nav{display:flex;flex-wrap:wrap;gap:10px 16px;margin:18px 0}.prose pre,.prose table{display:block;max-width:100%;overflow:auto}.prose img,.attachment-media img{max-width:100%;height:auto;margin:1rem 0}.attachment-media video,.attachment-media audio,.prose iframe{max-width:100%}.prose ul{list-style:disc}.prose ol{list-style:decimal}.prose li{display:list-item}.pagination{display:flex;justify-content:space-between;gap:12px;margin:32px 0}.post-actions,.tags{display:flex;gap:12px;flex-wrap:wrap;margin:24px 0}input,button{font:inherit;max-width:100%;box-sizing:border-box}form{display:flex;flex-wrap:wrap;gap:10px}input{min-width:0}:focus-visible{outline:2px solid currentColor;outline-offset:3px}
+
+/* Native post/page media may declare dimensions wider than the reading column. */
+.prose video,.prose audio{max-width:100%;box-sizing:border-box}.prose video{height:auto}
+
+html{color-scheme:light}html[data-theme=forest]{color-scheme:dark}body{background:var(--color-base-200);color:var(--color-base-content);min-height:100vh}.dream-container{max-width:1536px;margin:auto;padding:0 1rem}.dream-header{padding:2rem 0 1rem}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:.75rem}.brand-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover}.site-name{font-size:1.125rem;font-weight:600}.motto{font-size:.875rem;opacity:.7}.native-nav{margin:0;align-items:center}.native-controls{display:flex;gap:.5rem}.native-controls button{padding:.5rem .75rem;border-radius:999px;background:var(--color-base-100)}.native-controls button[hidden]{display:none}.native-stage{perspective:1000px}.native-face{transform-origin:center}.native-face.flip-enter{animation:face-in .45s ease-out}.native-face[hidden]{display:none!important}@keyframes face-in{from{transform:rotateY(-75deg);opacity:.3}to{transform:rotateY(0deg);opacity:1}}.dream-grid-native{column-count:4;column-gap:2rem;padding:1rem 0}.dream-column-native{break-inside:avoid;display:inline-block;width:100%;margin:0 0 2rem}.dream-card{border-radius:var(--radius-box,1rem);background:var(--color-base-100);box-shadow:0 20px 25px -5px #0002;overflow:hidden;border:1px solid transparent}.dark .dream-card{border-color:color-mix(in oklab,var(--color-base-content) 30%,transparent)}.dream-card:hover{background:color-mix(in oklab,var(--color-base-content) 10%,var(--color-base-100))}.dream-card figure img{width:100%;height:auto;display:block}.dream-card .card-body{padding:1.5rem;display:flex;flex-direction:column;gap:.75rem}.card-title{font-size:1.25rem;font-weight:600;line-height:1.4}.card-date{font-size:.875rem;opacity:.65}.card-author{margin-top:.5rem;font-size:.875rem}.listing-heading{font-size:2rem;font-weight:700;padding:1.5rem 0}.about-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2rem;padding:1rem 0}.about-text{white-space:pre-wrap}.about-links{display:flex;flex-direction:column;gap:.75rem}.about-links a{text-decoration:underline}.dream-single{max-width:1120px;margin:2rem auto;display:grid;grid-template-columns:180px minmax(0,65ch) 200px;gap:2rem}.dream-single .post-detail{grid-column:2;min-width:0}.article-toc{grid-column:3;position:sticky;top:2rem;align-self:start;max-height:80vh;overflow:auto;padding:.5rem;min-width:0}.toc-list{padding-left:1rem}.toc-list .nested{margin-left:.75rem}.post-title{font-size:2.25rem;font-weight:700;line-height:1.2;margin-bottom:1.5rem}.post-date{font-size:.875rem;opacity:.7;margin-bottom:1.5rem}.prose{color:var(--color-base-content);max-width:100%}.prose pre{white-space:pre;box-sizing:border-box;padding:1rem;border-radius:.5rem;background:var(--color-base-300);color:var(--color-base-content)}.prose pre code{display:block;white-space:pre;width:max-content;min-width:100%;color:inherit}.prose table{display:table;width:100%;table-layout:fixed}.prose td,.prose th{overflow-wrap:anywhere;padding:.5rem;color:inherit}.prose audio{height:54px}.prose h2,.prose h3,.prose h4{color:inherit}.post-footer{margin:2rem 0}.native-wrap{max-width:900px;margin:2rem auto;padding:0 1rem}.native-wrap h1{font-size:2rem;margin-bottom:2rem}.native-footer{padding:2rem 1rem;text-align:center;font-size:.875rem}.native-footer p{margin:.5rem 0}.pagination{align-items:center;justify-content:center;flex-wrap:wrap}.pagination a{padding:.5rem 1rem;border-radius:.5rem;background:var(--color-base-100)}input,button{background:var(--color-base-100);color:var(--color-base-content);border:1px solid var(--color-base-300);padding:.4rem .6rem;border-radius:.5rem}.skip:focus{background:var(--color-base-100);padding:.5rem}.native-face:focus{outline:none}@media(max-width:1279px){.dream-grid-native{column-count:3}.dream-single{grid-template-columns:minmax(0,65ch) 180px;max-width:1000px}.dream-single .post-detail{grid-column:1}.article-toc{grid-column:2}}@media(max-width:1023px){.dream-grid-native{column-count:2}.dream-single{display:block;max-width:65ch}.article-toc{position:static;max-height:none;margin-top:2rem}.about-grid{grid-template-columns:1fr}}@media(max-width:767px){.dream-grid-native{column-count:1}.dream-header{padding:1rem 0}.post-title{font-size:1.8rem}.header-inner{align-items:flex-start}.native-nav{font-size:.9rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.native-face.flip-enter{animation:none}}
diff --git a/packages/hugo-theme-dream/res/css/upstream.css b/packages/hugo-theme-dream/res/css/upstream.css
new file mode 100644
index 00000000..98df0e59
--- /dev/null
+++ b/packages/hugo-theme-dream/res/css/upstream.css
@@ -0,0 +1,3252 @@
+/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
+@layer properties;
+@layer theme, base, components, utilities;
+@layer theme {
+ :root, :host {
+ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
+ "Courier New", monospace;
+ --color-red-500: oklch(63.7% 0.237 25.331);
+ --color-red-600: oklch(57.7% 0.245 27.325);
+ --color-yellow-500: oklch(79.5% 0.184 86.047);
+ --color-yellow-600: oklch(68.1% 0.162 75.834);
+ --color-green-500: oklch(72.3% 0.219 149.579);
+ --color-green-600: oklch(62.7% 0.194 149.214);
+ --color-blue-500: oklch(62.3% 0.214 259.815);
+ --color-blue-600: oklch(54.6% 0.245 262.881);
+ --color-purple-500: oklch(62.7% 0.265 303.9);
+ --color-purple-600: oklch(55.8% 0.288 302.321);
+ --color-black: #000;
+ --spacing: 0.25rem;
+ --text-xs: 0.75rem;
+ --text-xs--line-height: calc(1 / 0.75);
+ --text-sm: 0.875rem;
+ --text-sm--line-height: calc(1.25 / 0.875);
+ --text-base: 1rem;
+ --text-base--line-height: calc(1.5 / 1);
+ --text-lg: 1.125rem;
+ --text-lg--line-height: calc(1.75 / 1.125);
+ --text-xl: 1.25rem;
+ --text-xl--line-height: calc(1.75 / 1.25);
+ --text-2xl: 1.5rem;
+ --text-2xl--line-height: calc(2 / 1.5);
+ --text-3xl: 1.875rem;
+ --text-3xl--line-height: calc(2.25 / 1.875);
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --radius-lg: 0.5rem;
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
+ --default-transition-duration: 150ms;
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ --default-font-family: var(--font-sans);
+ --default-mono-font-family: var(--font-mono);
+ }
+}
+@layer base {
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ border: 0 solid;
+ }
+ html, :host {
+ line-height: 1.5;
+ -webkit-text-size-adjust: 100%;
+ tab-size: 4;
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
+ font-feature-settings: var(--default-font-feature-settings, normal);
+ font-variation-settings: var(--default-font-variation-settings, normal);
+ -webkit-tap-highlight-color: transparent;
+ }
+ hr {
+ height: 0;
+ color: inherit;
+ border-top-width: 1px;
+ }
+ abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+ }
+ a {
+ color: inherit;
+ -webkit-text-decoration: inherit;
+ text-decoration: inherit;
+ }
+ b, strong {
+ font-weight: bolder;
+ }
+ code, kbd, samp, pre {
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
+ font-size: 1em;
+ }
+ small {
+ font-size: 80%;
+ }
+ sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+ }
+ sub {
+ bottom: -0.25em;
+ }
+ sup {
+ top: -0.5em;
+ }
+ table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+ }
+ :-moz-focusring {
+ outline: auto;
+ }
+ progress {
+ vertical-align: baseline;
+ }
+ summary {
+ display: list-item;
+ }
+ ol, ul, menu {
+ list-style: none;
+ }
+ img, svg, video, canvas, audio, iframe, embed, object {
+ display: block;
+ vertical-align: middle;
+ }
+ img, video {
+ max-width: 100%;
+ height: auto;
+ }
+ button, input, select, optgroup, textarea, ::file-selector-button {
+ font: inherit;
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ letter-spacing: inherit;
+ color: inherit;
+ border-radius: 0;
+ background-color: transparent;
+ opacity: 1;
+ }
+ :where(select:is([multiple], [size])) optgroup {
+ font-weight: bolder;
+ }
+ :where(select:is([multiple], [size])) optgroup option {
+ padding-inline-start: 20px;
+ }
+ ::file-selector-button {
+ margin-inline-end: 4px;
+ }
+ ::placeholder {
+ opacity: 1;
+ }
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
+ ::placeholder {
+ color: currentcolor;
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, currentcolor 50%, transparent);
+ }
+ }
+ }
+ textarea {
+ resize: vertical;
+ }
+ ::-webkit-search-decoration {
+ -webkit-appearance: none;
+ }
+ ::-webkit-date-and-time-value {
+ min-height: 1lh;
+ text-align: inherit;
+ }
+ ::-webkit-datetime-edit {
+ display: inline-flex;
+ }
+ ::-webkit-datetime-edit-fields-wrapper {
+ padding: 0;
+ }
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
+ padding-block: 0;
+ }
+ ::-webkit-calendar-picker-indicator {
+ line-height: 1;
+ }
+ :-moz-ui-invalid {
+ box-shadow: none;
+ }
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
+ appearance: button;
+ }
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
+ height: auto;
+ }
+ [hidden]:where(:not([hidden="until-found"])) {
+ display: none !important;
+ }
+}
+@layer utilities {
+ .menu {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ width: fit-content;
+ flex-direction: column;
+ flex-wrap: wrap;
+ padding: calc(0.25rem * 2);
+ --menu-active-fg: var(--color-neutral-content);
+ --menu-active-bg: var(--color-neutral);
+ font-size: 0.875rem;
+ :where(li ul, li menu) {
+ position: relative;
+ margin-inline-start: calc(0.25rem * 4);
+ padding-inline-start: calc(0.25rem * 2);
+ white-space: nowrap;
+ &:before {
+ position: absolute;
+ inset-inline-start: calc(0.25rem * 0);
+ top: calc(0.25rem * 3);
+ bottom: calc(0.25rem * 3);
+ background-color: var(--color-base-content);
+ opacity: 10%;
+ width: var(--border);
+ content: "";
+ }
+ }
+ :where(li > .menu-dropdown:not(.menu-dropdown-show)) {
+ display: none;
+ }
+ :where(li:not(.menu-title) > *:not(ul, menu, details, .menu-title, .btn)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
+ display: grid;
+ grid-auto-flow: column;
+ align-content: flex-start;
+ align-items: center;
+ gap: calc(0.25rem * 2);
+ border-radius: var(--radius-field);
+ padding-inline: calc(0.25rem * 3);
+ padding-block: calc(0.25rem * 1.5);
+ text-align: start;
+ transition-property: color, background-color, box-shadow;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ grid-auto-columns: minmax(auto, max-content) auto max-content;
+ user-select: none;
+ }
+ :where(li > details > summary) {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
+ :where(li > details > summary), :where(li > .menu-dropdown-toggle) {
+ &:after {
+ justify-self: flex-end;
+ display: block;
+ height: 0.375rem;
+ width: 0.375rem;
+ rotate: -135deg;
+ translate: 0 -1px;
+ transition-property: rotate, translate;
+ transition-duration: 0.2s;
+ content: "";
+ transform-origin: 50% 50%;
+ box-shadow: 2px 2px inset;
+ pointer-events: none;
+ }
+ }
+ details {
+ overflow: hidden;
+ interpolate-size: allow-keywords;
+ }
+ details::details-content {
+ block-size: 0;
+ @media (prefers-reduced-motion: no-preference) {
+ transition-behavior: allow-discrete;
+ transition-property: block-size, content-visibility;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ }
+ }
+ details[open]::details-content {
+ block-size: auto;
+ }
+ :where(li > details[open] > summary):after, :where(li > .menu-dropdown-toggle.menu-dropdown-show):after {
+ rotate: 45deg;
+ translate: 0 1px;
+ }
+ :where(li:not(.menu-title, .disabled) > *:not(ul, menu, details, .menu-title), li:not(.menu-title, .disabled) > details > summary:not(.menu-title) ):not(.menu-active, :active, .btn) {
+ &.menu-focus, &:focus-visible {
+ cursor: pointer;
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ color: var(--color-base-content);
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ }
+ :where(li:not(.menu-title, .disabled) > *:not(ul, menu, details, .menu-title):not(.menu-active, :active, .btn):hover, li:not(.menu-title, .disabled) > details > summary:not(.menu-title):not(.menu-active, :active, .btn):hover ) {
+ cursor: pointer;
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ box-shadow: 0 1px oklch(0% 0 0 / 0.01) inset, 0 -1px oklch(100% 0 0 / 0.01) inset;
+ }
+ :where(li:empty) {
+ background-color: var(--color-base-content);
+ opacity: 10%;
+ margin: 0.5rem 1rem;
+ height: 1px;
+ }
+ :where(li) {
+ position: relative;
+ display: flex;
+ flex-shrink: 0;
+ flex-direction: column;
+ flex-wrap: wrap;
+ align-items: stretch;
+ .badge {
+ justify-self: flex-end;
+ }
+ & > *:not(ul, menu, .menu-title, details, .btn):active, & > *:not(ul, menu, .menu-title, details, .btn).menu-active, & > details > summary:active {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ color: var(--menu-active-fg);
+ background-color: var(--menu-active-bg);
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ &:not(&:active) {
+ box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg);
+ }
+ }
+ &.menu-disabled, [disabled] {
+ pointer-events: none;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 20%, transparent);
+ }
+ }
+ }
+ .dropdown:focus-within {
+ .menu-dropdown-toggle:after {
+ rotate: 45deg;
+ translate: 0 1px;
+ }
+ }
+ .dropdown-content {
+ margin-top: calc(0.25rem * 2);
+ padding: calc(0.25rem * 2);
+ &:before {
+ display: none;
+ }
+ }
+ }
+ }
+ .dropdown {
+ @layer daisyui.l1.l2.l3 {
+ position: relative;
+ display: inline-block;
+ position-area: var(--anchor-v, bottom) var(--anchor-h, span-right);
+ & > *:not(:has( ~ [class*="dropdown-content"])):focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ .dropdown-content {
+ position: absolute;
+ }
+ &.dropdown-close .dropdown-content, &:not(details, .dropdown-open, .dropdown-hover:hover, :focus-within) .dropdown-content, &.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible) ~ .dropdown-content {
+ display: none;
+ transform-origin: top;
+ opacity: 0%;
+ scale: 95%;
+ }
+ &[popover], .dropdown-content {
+ z-index: 999;
+ @media (prefers-reduced-motion: no-preference) {
+ animation: dropdown 0.2s;
+ transition-property: opacity, scale, display, overlay;
+ transition-behavior: allow-discrete;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ }
+ @starting-style {
+ &[popover], .dropdown-content {
+ scale: 95%;
+ opacity: 0;
+ }
+ }
+ &:not(.dropdown-close) {
+ &.dropdown-open, &:not(.dropdown-hover):focus, &:focus-within {
+ > [tabindex]:first-child {
+ pointer-events: none;
+ }
+ .dropdown-content {
+ opacity: 100%;
+ scale: 100%;
+ }
+ }
+ &.dropdown-hover:hover {
+ .dropdown-content {
+ opacity: 100%;
+ scale: 100%;
+ }
+ }
+ }
+ &:is(details) {
+ overflow: revert-layer;
+ summary {
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
+ }
+ &:where([popover]) {
+ background: #0000;
+ }
+ &[popover] {
+ position: fixed;
+ color: inherit;
+ @supports not (position-area: bottom) {
+ margin: auto;
+ &.dropdown-close, &.dropdown-open:not(:popover-open) {
+ display: none;
+ transform-origin: top;
+ opacity: 0%;
+ scale: 95%;
+ }
+ &::backdrop {
+ background-color: color-mix(in oklab, #000 30%, #0000);
+ }
+ }
+ &.dropdown-close, &:not(.dropdown-open, :popover-open) {
+ display: none;
+ transform-origin: top;
+ opacity: 0%;
+ scale: 95%;
+ }
+ }
+ }
+ }
+ .btn {
+ :where(&) {
+ @layer daisyui.l1.l2.l3 {
+ width: unset;
+ }
+ }
+ .prose :where(a&:not(.btn-link)):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ text-decoration-line: none;
+ }
+ @layer daisyui.l1.l2.l3 {
+ --size: calc(var(--size-field, 0.25rem) * 10);
+ --btn-p: 1rem;
+ --btn-fg: var(--color-base-content);
+ display: inline-flex;
+ flex-shrink: 0;
+ cursor: pointer;
+ flex-wrap: nowrap;
+ align-items: center;
+ justify-content: center;
+ gap: calc(0.25rem * 1.5);
+ text-align: center;
+ vertical-align: middle;
+ outline-offset: 2px;
+ webkit-user-select: none;
+ user-select: none;
+ font-weight: 600;
+ border-start-start-radius: var(--join-ss, var(--radius-field));
+ border-start-end-radius: var(--join-se, var(--radius-field));
+ border-end-start-radius: var(--join-es, var(--radius-field));
+ border-end-end-radius: var(--join-ee, var(--radius-field));
+ border-width: var(--border);
+ touch-action: manipulation;
+ transition-property: color, background-color, border-color, box-shadow, transform;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transition-duration: 0.2s;
+ --btn-bg: var(--btn-color, var(--color-base-200));
+ --btn-border: var(--btn-color, var(--color-base-200));
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-border: color-mix(
+ in oklab,
+ var(--btn-color, var(--color-base-200)),
+ #000 calc(var(--depth) * 5%)
+ );
+ }
+ --btn-soft-bg: initial;
+ --btn-shadow: 0 3px 2px -2px var(--btn-bg),
+ 0 4px 3px -2px var(--btn-bg);
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-shadow: 0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000),
+ 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);
+ }
+ --btn-inset: 0 0.5px 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 6%));
+ height: var(--size);
+ padding-inline: var(--btn-p);
+ font-size: var(--fontsize, 0.875rem);
+ background-color: var(--btn-bg);
+ color: var(--btn-fg);
+ border-color: var(--btn-border);
+ border-style: var(--btn-border-style, solid);
+ outline-color: var(--btn-color, var(--color-base-content));
+ --tw-prose-links: var(--btn-fg);
+ background-image: none, var(--fx-noise);
+ background-size: auto, calc(var(--noise, 0) * 100%);
+ text-shadow: 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 0.15));
+ box-shadow: var(--btn-inset) inset, var(--btn-shadow);
+ &:is([type="checkbox"], [type="radio"]) {
+ appearance: none;
+ &[aria-label]::after {
+ --tw-content: attr(aria-label);
+ content: var(--tw-content);
+ }
+ }
+ }
+ @layer daisyui.l1 {
+ &:where(:checked:not(.filter [type="radio"].btn)) {
+ --btn-color: var(--color-primary);
+ --btn-fg: var(--color-primary-content);
+ }
+ @media (hover: hover) {
+ &:hover {
+ --btn-bg: var(--btn-color, var(--color-base-200));
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%);
+ }
+ color: var(--btn-fg);
+ --btn-border: var(--btn-bg);
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-border: color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%));
+ }
+ --btn-border-style: solid;
+ --btn-inset: 0 0.5px 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 6%));
+ --btn-shadow: 0 3px 2px -2px var(--btn-bg),
+ 0 4px 3px -2px var(--btn-bg);
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-shadow: 0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000),
+ 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);
+ }
+ }
+ }
+ &:active:not(.btn-active) {
+ translate: 0 0.5px;
+ --btn-bg: var(--btn-color, var(--color-base-200));
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 5%);
+ }
+ color: var(--btn-fg, var(--color-base-content));
+ --btn-border: var(--btn-color, var(--color-base-200));
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-border: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%);
+ }
+ --btn-border-style: solid;
+ --btn-inset: 0 0 0 0 oklch(0% 0 0/0);
+ --btn-shadow: 0 0 0 0 oklch(0% 0 0/0);
+ }
+ &:where(:checked:not(.filter [type="radio"].btn), :not([type="radio"], [type="checkbox"]):focus-visible ) {
+ --btn-bg: var(--btn-color, var(--color-base-200));
+ color: var(--btn-fg, var(--color-base-content));
+ --btn-border: var(--btn-bg);
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-border: color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%));
+ }
+ --btn-border-style: solid;
+ --btn-inset: 0 0.5px 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 6%));
+ --btn-shadow: 0 3px 2px -2px var(--btn-bg),
+ 0 4px 3px -2px var(--btn-bg);
+ @supports (color: color-mix(in lab, red, red)) {
+ --btn-shadow: 0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000),
+ 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);
+ }
+ isolation: isolate;
+ }
+ &:focus-visible, &:has(:focus-visible) {
+ outline-width: 2px;
+ outline-style: solid;
+ isolation: isolate;
+ }
+ }
+ &:is(:disabled, [disabled], [aria-disabled="true"]) {
+ @layer daisyui {
+ pointer-events: none;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklch, var(--color-base-content) 20%, #0000);
+ }
+ --btn-bg: #0000;
+ --btn-border: #0000;
+ background-image: none;
+ --btn-inset: 0 0 0 0 oklch(0% 0 0/0);
+ --btn-shadow: 0 0 0 0 oklch(0% 0 0/0);
+ &:not(.btn-link, .btn-ghost) {
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ }
+ }
+ }
+ }
+ .input {
+ @layer daisyui.l1.l2.l3 {
+ position: relative;
+ display: inline-flex;
+ flex-shrink: 1;
+ appearance: none;
+ align-items: center;
+ gap: calc(0.25rem * 2);
+ background-color: var(--color-base-100);
+ padding-inline: calc(0.25rem * 3);
+ vertical-align: middle;
+ white-space: nowrap;
+ --size: calc(var(--size-field, 0.25rem) * var(--in-size-mul));
+ --input-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --input-color: color-mix(in oklab, var(--color-base-content) 20%, #0000);
+ }
+ cursor: text;
+ width: clamp(3rem, 20rem, 100%);
+ height: var(--size);
+ font-size: max(var(--font-size, 0rem), var(--font-size-min));
+ touch-action: manipulation;
+ border-start-start-radius: var(--join-ss, var(--radius-field));
+ border-start-end-radius: var(--join-se, var(--radius-field));
+ border-end-start-radius: var(--join-es, var(--radius-field));
+ border-end-end-radius: var(--join-ee, var(--radius-field));
+ border: var(--border) solid var(--input-color, #0000);
+ box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;
+ }
+ input {
+ height: 100%;
+ width: 100%;
+ appearance: none;
+ background-color: transparent;
+ border: none;
+ &::placeholder {
+ color: var(--color-base-content);
+ opacity: 50%;
+ }
+ &:focus, &:focus-within {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ &::-webkit-calendar-picker-indicator {
+ inset-inline-end: -0.15em;
+ }
+ }
+ &::-webkit-inner-spin-button {
+ margin-inline-end: -10px;
+ }
+ &::-webkit-calendar-picker-indicator {
+ inset-inline-end: 0.75em;
+ }
+ input&, input {
+ position: relative;
+ display: inline-flex;
+ &[type="url"], &[type="email"] {
+ text-align: left;
+ }
+ &::-webkit-datetime-edit, &::-webkit-date-and-time-value {
+ display: grid;
+ min-height: 100%;
+ align-items: center;
+ text-align: inherit;
+ }
+ &::-webkit-inner-spin-button {
+ margin-block: calc(0.25rem * var(--spin-my));
+ }
+ &::-webkit-calendar-picker-indicator {
+ position: absolute;
+ width: 1em;
+ height: 1em;
+ cursor: pointer;
+ }
+ &::-webkit-color-swatch-wrapper {
+ padding-block: 0.25rem;
+ }
+ }
+ &:focus, &:focus-within {
+ --input-color: var(--color-base-content);
+ box-shadow: 0 1px var(--input-color);
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);
+ }
+ outline: 2px solid var(--input-color);
+ outline-offset: 2px;
+ isolation: isolate;
+ }
+ @media (pointer: coarse) {
+ @supports (-webkit-touch-callout: none) {
+ &:focus, &:focus-within {
+ --font-size: 1rem;
+ }
+ }
+ }
+ &:has( > input[disabled]), &:is(:disabled, [disabled]), fieldset:disabled & {
+ cursor: not-allowed;
+ border-color: var(--color-base-200);
+ background-color: var(--color-base-200);
+ &:is(input), :is(input) {
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 40%, transparent);
+ }
+ }
+ box-shadow: none;
+ &::placeholder, ::placeholder {
+ color: var(--color-base-content);
+ opacity: 20%;
+ }
+ }
+ &:has( > input[disabled]) > input[disabled] {
+ cursor: not-allowed;
+ }
+ }
+ @layer daisyui.l1.l2 {
+ --in-size-mul: 10;
+ --font-size-min: 0.875rem;
+ --spin-my: -3;
+ .floating-label:has(&) {
+ --top-mul: 5;
+ --font-size: 0.875rem;
+ }
+ }
+ }
+ .range {
+ @layer daisyui.l1.l2.l3 {
+ appearance: none;
+ webkit-appearance: none;
+ --range-thumb: var(--color-base-100);
+ --range-thumb-size: calc(var(--size-selector, 0.25rem) * 6);
+ --range-progress: currentColor;
+ --range-fill: 1;
+ --range-p: 0.25rem;
+ --range-bg: currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ --range-bg: color-mix(in oklab, currentColor 10%, #0000);
+ }
+ --range-fill-x: calc(
+ (var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)
+ );
+ --range-fill-y: 0;
+ --range-fill-spread: calc(100cqw * var(--range-fill));
+ cursor: pointer;
+ overflow: hidden;
+ background-color: transparent;
+ vertical-align: middle;
+ width: clamp(3rem, 20rem, 100%);
+ --radius-selector-max: calc(
+ var(--radius-selector) + var(--radius-selector) + var(--radius-selector)
+ );
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ border: none;
+ height: var(--range-thumb-size);
+ [dir="rtl"] & {
+ --range-dir: -1;
+ }
+ &:focus {
+ outline: none;
+ }
+ &:focus-visible {
+ outline: 2px solid;
+ outline-offset: 2px;
+ }
+ &::-webkit-slider-runnable-track {
+ width: 100%;
+ background-color: var(--range-bg);
+ border-radius: var(--radius-selector);
+ height: calc(var(--range-thumb-size) * 0.5);
+ }
+ @media (forced-colors: active) {
+ &::-webkit-slider-runnable-track {
+ border: 1px solid;
+ }
+ }
+ @media (forced-colors: active) {
+ &::-moz-range-track {
+ border: 1px solid;
+ }
+ }
+ &::-webkit-slider-thumb {
+ position: relative;
+ box-sizing: border-box;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ background-color: var(--range-thumb);
+ height: var(--range-thumb-size);
+ width: var(--range-thumb-size);
+ border: var(--range-p) solid;
+ appearance: none;
+ webkit-appearance: none;
+ inset-block-start: 50%;
+ color: var(--range-progress);
+ transform: translateY(-50%);
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
+ }
+ }
+ &::-moz-range-track {
+ width: 100%;
+ background-color: var(--range-bg);
+ border-radius: var(--radius-selector);
+ height: calc(var(--range-thumb-size) * 0.5);
+ }
+ &::-moz-range-thumb {
+ position: relative;
+ box-sizing: border-box;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ background-color: currentColor;
+ height: var(--range-thumb-size);
+ width: var(--range-thumb-size);
+ border: var(--range-p) solid;
+ color: var(--range-progress);
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
+ }
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 30%;
+ }
+ }
+ }
+ .timeline {
+ @layer daisyui.l1.l2.l3 {
+ position: relative;
+ display: flex;
+ > li {
+ position: relative;
+ display: grid;
+ flex-shrink: 0;
+ align-items: center;
+ grid-template-rows: var(--timeline-row-start, minmax(0, 1fr)) auto var(--timeline-row-end, minmax(0, 1fr) );
+ grid-template-columns: var(--timeline-col-start, minmax(0, 1fr)) auto var(--timeline-col-end, minmax(0, 1fr) );
+ > hr {
+ border: none;
+ width: 100%;
+ &:first-child {
+ grid-column-start: 1;
+ grid-row-start: 2;
+ }
+ &:last-child {
+ grid-column-start: 3;
+ grid-column-end: none;
+ grid-row-start: 2;
+ grid-row-end: auto;
+ }
+ @media print {
+ border: 0.1px solid var(--color-base-300);
+ }
+ }
+ }
+ :where(hr) {
+ height: 0.25rem;
+ background-color: var(--color-base-300);
+ }
+ &:has(.timeline-middle hr) {
+ &:first-child {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-start-end-radius: var(--radius-selector);
+ border-end-end-radius: var(--radius-selector);
+ }
+ &:last-child {
+ border-start-start-radius: var(--radius-selector);
+ border-end-start-radius: var(--radius-selector);
+ border-start-end-radius: 0;
+ border-end-end-radius: 0;
+ }
+ }
+ &:not(:has(.timeline-middle)) {
+ :first-child hr:last-child {
+ border-start-start-radius: var(--radius-selector);
+ border-end-start-radius: var(--radius-selector);
+ border-start-end-radius: 0;
+ border-end-end-radius: 0;
+ }
+ :last-child hr:first-child {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+ border-start-end-radius: var(--radius-selector);
+ border-end-end-radius: var(--radius-selector);
+ }
+ }
+ }
+ }
+ .menu-horizontal {
+ @layer daisyui.l1.l2 {
+ display: inline-flex;
+ flex-direction: row;
+ align-items: center;
+ & > li:not(.menu-title) > details {
+ & > :is(ul, menu) {
+ position: absolute;
+ margin-inline-start: 0;
+ margin-top: calc(0.25rem * 4);
+ transform-origin: top;
+ border-radius: var(--radius-box);
+ background-color: var(--color-base-100);
+ padding-block: calc(0.25rem * 2);
+ padding-inline-end: calc(0.25rem * 2);
+ opacity: 0%;
+ scale: 95%;
+ box-shadow: 0 1px 3px 0 oklch(0% 0 0/0.1), 0 1px 2px -1px oklch(0% 0 0/0.1);
+ @media (prefers-reduced-motion: no-preference) {
+ @starting-style {
+ scale: 95%;
+ opacity: 0;
+ }
+ animation: menu 0.2s;
+ transition-property: opacity, scale, display;
+ transition-behavior: allow-discrete;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ }
+ &[open] > :is(ul, menu) {
+ opacity: 100%;
+ scale: 100%;
+ }
+ }
+ & > li > details > :is(ul, menu) {
+ &:before {
+ --tw-content: none;
+ content: var(--tw-content);
+ }
+ }
+ }
+ }
+ .avatar {
+ @layer daisyui.l1.l2.l3 {
+ position: relative;
+ display: inline-flex;
+ vertical-align: middle;
+ & > div {
+ display: block;
+ aspect-ratio: 1 / 1;
+ overflow: hidden;
+ }
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: cover;
+ }
+ }
+ }
+ .card {
+ @layer daisyui.l1.l2.l3 {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ border-radius: var(--radius-box);
+ transition: outline 0.2s ease-in-out;
+ outline: 2px solid #0000;
+ outline-offset: 2px;
+ &:focus-visible, &[aria-checked="true"], &:has( > :checked, > :is([type="checkbox"], [type="radio"]):focus-visible) {
+ outline-color: currentColor;
+ }
+ &:has( > :checked:focus-visible), &[aria-checked="true"]:focus-visible, &[aria-checked="true"]:has( > :is([type="checkbox"], [type="radio"]):focus-visible) {
+ outline-width: 4px;
+ }
+ &:has( > :is([type="checkbox"], [type="radio"])) {
+ cursor: pointer;
+ user-select: none;
+ }
+ > :is([type="checkbox"], [type="radio"]) {
+ appearance: none;
+ }
+ }
+ @layer daisyui.l1.l2.l3.l4 {
+ figure:first-child {
+ overflow: hidden;
+ border-start-start-radius: inherit;
+ border-start-end-radius: inherit;
+ border-end-start-radius: unset;
+ border-end-end-radius: unset;
+ }
+ figure:last-child {
+ overflow: hidden;
+ border-start-start-radius: unset;
+ border-start-end-radius: unset;
+ border-end-start-radius: inherit;
+ border-end-end-radius: inherit;
+ }
+ figure {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+ .sticky {
+ position: sticky;
+ }
+ .dropdown-end {
+ @layer daisyui.l1.l2 {
+ --anchor-h: span-left;
+ :where(.dropdown-content) {
+ inset-inline-end: calc(0.25rem * 0);
+ translate: 0 0;
+ [dir="rtl"] & {
+ translate: 0 0;
+ }
+ }
+ &.dropdown-left {
+ --anchor-h: left;
+ --anchor-v: span-top;
+ .dropdown-content {
+ top: auto;
+ bottom: 0;
+ }
+ }
+ &.dropdown-right {
+ --anchor-h: right;
+ --anchor-v: span-top;
+ .dropdown-content {
+ top: auto;
+ bottom: 0;
+ }
+ }
+ }
+ }
+ .top-0 {
+ top: 0;
+ }
+ .join {
+ display: inline-flex;
+ align-items: stretch;
+ --join-ss: 0;
+ --join-se: 0;
+ --join-es: 0;
+ --join-ee: 0;
+ --join-v: 0;
+ --join-h: 1;
+ @scope (&) {
+ > :where(:focus, :has(:focus)) {
+ z-index: 1;
+ }
+ @media (hover: hover) {
+ > :where(.btn:hover, :has(.btn:hover)) {
+ isolation: isolate;
+ }
+ }
+ :where(:scope > :first-child) {
+ --join-ss: var(--radius-field);
+ --join-se: calc(var(--radius-field) * var(--join-v));
+ --join-es: calc(var(--radius-field) * var(--join-h));
+ --join-ee: 0;
+ }
+ :where(:scope > :last-child) {
+ --join-ss: 0;
+ --join-se: calc(var(--radius-field) * var(--join-h));
+ --join-es: calc(var(--radius-field) * var(--join-v));
+ --join-ee: var(--radius-field);
+ }
+ :where(:scope > :only-child) {
+ --join-ss: var(--radius-field);
+ --join-se: var(--radius-field);
+ --join-es: var(--radius-field);
+ --join-ee: var(--radius-field);
+ }
+ }
+ }
+ .z-10 {
+ z-index: 10;
+ }
+ .z-30 {
+ z-index: 30;
+ }
+ .timeline-end {
+ @layer daisyui.l1.l2.l3 {
+ grid-column-start: 1;
+ grid-column-end: 4;
+ grid-row-start: 3;
+ grid-row-end: 4;
+ margin: 0.25rem;
+ align-self: flex-start;
+ justify-self: center;
+ }
+ }
+ .timeline-start {
+ @layer daisyui.l1.l2.l3 {
+ grid-column-start: 1;
+ grid-column-end: 4;
+ grid-row-start: 1;
+ grid-row-end: 2;
+ margin: 0.25rem;
+ align-self: flex-end;
+ justify-self: center;
+ }
+ }
+ .timeline-vertical {
+ @layer daisyui.l1.l2 {
+ flex-direction: column;
+ > li {
+ justify-items: center;
+ --timeline-row-start: minmax(0, 1fr);
+ --timeline-row-end: minmax(0, 1fr);
+ > hr {
+ height: 100%;
+ width: 0.25rem;
+ &:first-child {
+ grid-column-start: 2;
+ grid-row-start: 1;
+ }
+ &:last-child {
+ grid-column-start: 2;
+ grid-column-end: auto;
+ grid-row-start: 3;
+ grid-row-end: none;
+ }
+ }
+ }
+ .timeline-start {
+ grid-column-start: 1;
+ grid-column-end: 2;
+ grid-row-start: 1;
+ grid-row-end: 4;
+ align-self: center;
+ justify-self: flex-end;
+ }
+ .timeline-end {
+ grid-column-start: 3;
+ grid-column-end: 4;
+ grid-row-start: 1;
+ grid-row-end: 4;
+ align-self: center;
+ justify-self: flex-start;
+ }
+ &:has(.timeline-middle) {
+ > li {
+ > hr {
+ &:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: var(--radius-selector);
+ border-bottom-left-radius: var(--radius-selector);
+ }
+ &:last-child {
+ border-top-left-radius: var(--radius-selector);
+ border-top-right-radius: var(--radius-selector);
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+ }
+ }
+ &:not(:has(.timeline-middle)) {
+ :first-child {
+ > hr:last-child {
+ border-top-left-radius: var(--radius-selector);
+ border-top-right-radius: var(--radius-selector);
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+ :last-child {
+ > hr:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: var(--radius-selector);
+ border-bottom-left-radius: var(--radius-selector);
+ }
+ }
+ }
+ &.timeline-snap-icon {
+ > li {
+ --timeline-col-start: minmax(0, 1fr);
+ --timeline-row-start: 0.5rem;
+ }
+ }
+ }
+ }
+ .timeline-middle {
+ @layer daisyui.l1.l2.l3 {
+ grid-column-start: 2;
+ grid-row-start: 2;
+ }
+ }
+ .container {
+ width: 100%;
+ @media (width >= 40rem) {
+ max-width: 40rem;
+ }
+ @media (width >= 48rem) {
+ max-width: 48rem;
+ }
+ @media (width >= 64rem) {
+ max-width: 64rem;
+ }
+ @media (width >= 80rem) {
+ max-width: 80rem;
+ }
+ @media (width >= 96rem) {
+ max-width: 96rem;
+ }
+ }
+ .divider {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ height: calc(0.25rem * 4);
+ flex-direction: row;
+ align-items: center;
+ align-self: stretch;
+ white-space: nowrap;
+ margin: var(--divider-m, 1rem 0);
+ --divider-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --divider-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ &:before, &:after {
+ content: "";
+ height: calc(0.25rem * 0.5);
+ width: 100%;
+ flex-grow: 1;
+ background-color: var(--divider-color);
+ }
+ @media print {
+ &:before, &:after {
+ border: 0.5px solid;
+ }
+ }
+ &:not(:empty) {
+ gap: calc(0.25rem * 4);
+ }
+ }
+ }
+ .container {
+ margin-inline: auto;
+ }
+ .mx-8 {
+ margin-inline: calc(var(--spacing) * 8);
+ }
+ .mx-auto {
+ margin-inline: auto;
+ }
+ .my-0 {
+ margin-block: 0;
+ }
+ .my-0\! {
+ margin-block: 0 !important;
+ }
+ .my-2 {
+ margin-block: calc(var(--spacing) * 2);
+ }
+ .my-5 {
+ margin-block: calc(var(--spacing) * 5);
+ }
+ .my-8 {
+ margin-block: calc(var(--spacing) * 8);
+ }
+ .join-item {
+ @layer daisyui.l1.l2.l3.l4 {
+ > * {
+ --join-ss: initial;
+ --join-se: initial;
+ --join-es: initial;
+ --join-ee: initial;
+ }
+ }
+ border-style: solid;
+ border-width: var(--border, 1px);
+ border-start-start-radius: var(--join-ss);
+ border-start-end-radius: var(--join-se);
+ border-end-start-radius: var(--join-es);
+ border-end-end-radius: var(--join-ee);
+ &:not(:first-child, :disabled, [disabled], .btn-disabled) {
+ margin-inline-start: calc(var(--border, 1px) * -1 * var(--join-h));
+ margin-block-start: calc(var(--border, 1px) * -1 * var(--join-v));
+ }
+ &:is(:disabled, [disabled], .btn-disabled) {
+ border-width: var(--border, 1px);
+ border-inline-end-width: calc(var(--border, 1px) * var(--join-v));
+ border-block-end-width: calc(var(--border, 1px) * var(--join-h));
+ }
+ }
+ .prose {
+ color: var(--tw-prose-body);
+ max-width: 65ch;
+ :where(p):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ word-break: break-word;
+ }
+ :where([class~="lead"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-lead);
+ font-size: 1.25em;
+ line-height: 1.6;
+ margin-top: 1.2em;
+ margin-bottom: 1.2em;
+ }
+ :where(a):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-links);
+ text-decoration: underline;
+ font-weight: 500;
+ }
+ :where(strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-bold);
+ font-weight: 600;
+ }
+ :where(a strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(blockquote strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(thead th strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: decimal;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
+ }
+ :where(ol[type="A"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+ }
+ :where(ol[type="a"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+ }
+ :where(ol[type="A" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+ }
+ :where(ol[type="a" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+ }
+ :where(ol[type="I"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+ }
+ :where(ol[type="i"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+ }
+ :where(ol[type="I" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+ }
+ :where(ol[type="i" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+ }
+ :where(ol[type="1"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: decimal;
+ }
+ :where(ul):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ list-style-type: disc;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
+ }
+ :where(ol > li):not(:where([class~="not-prose"], [class~="not-prose"] *))::marker {
+ font-weight: 400;
+ color: var(--tw-prose-counters);
+ }
+ :where(ul > li):not(:where([class~="not-prose"], [class~="not-prose"] *))::marker {
+ color: var(--tw-prose-bullets);
+ }
+ :where(dt):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.25em;
+ }
+ :where(hr):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ border-color: var(--tw-prose-hr);
+ border-top-width: 1px;
+ margin-top: 3em;
+ margin-bottom: 3em;
+ }
+ :where(blockquote):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: normal;
+ font-style: normal;
+ color: var(--tw-prose-body);
+ border-inline-start-width: 0.25rem;
+ border-inline-start-color: var(--tw-prose-quote-borders);
+ quotes: "\201C""\201D""\2018""\2019";
+ margin-top: 1.6em;
+ margin-bottom: 1.6em;
+ padding-inline-start: 1em;
+ }
+ :where(blockquote p:first-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::before {
+ content: open-quote;
+ }
+ :where(blockquote p:last-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::after {
+ content: close-quote;
+ }
+ :where(h1):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 800;
+ font-size: 2.25em;
+ margin-top: 0;
+ margin-bottom: 0.8888889em;
+ line-height: 1.1111111;
+ }
+ :where(h1 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: 900;
+ color: inherit;
+ }
+ :where(h2):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 700;
+ font-size: 1.5em;
+ margin-top: 2em;
+ margin-bottom: 1em;
+ line-height: 1.3333333;
+ }
+ :where(h2 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: 800;
+ color: inherit;
+ }
+ :where(h3):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ font-size: 1.25em;
+ margin-top: 1.6em;
+ margin-bottom: 0.6em;
+ line-height: 1.6;
+ }
+ :where(h3 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+ }
+ :where(h4):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.5em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+ }
+ :where(h4 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+ }
+ :where(img):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(picture):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ display: block;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(video):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(kbd):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ font-weight: 500;
+ font-family: inherit;
+ color: var(--tw-prose-kbd);
+ box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
+ font-size: 0.875em;
+ border-radius: 0.3125rem;
+ padding-top: 0.1875em;
+ padding-inline-end: 0.375em;
+ padding-bottom: 0.1875em;
+ padding-inline-start: 0.375em;
+ }
+ :where(a code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(h1 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(h2 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.875em;
+ }
+ :where(h3 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.9em;
+ }
+ :where(h4 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(blockquote code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(thead th code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(table):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ width: 100%;
+ table-layout: auto;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+ }
+ :where(thead):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-th-borders);
+ }
+ :where(thead th):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ vertical-align: bottom;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+ }
+ :where(tbody tr):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-td-borders);
+ }
+ :where(tbody tr:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ border-bottom-width: 0;
+ }
+ :where(tbody td):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ vertical-align: baseline;
+ }
+ :where(tfoot):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ border-top-width: 1px;
+ border-top-color: var(--tw-prose-th-borders);
+ }
+ :where(tfoot td):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ vertical-align: top;
+ }
+ :where(th, td):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ text-align: start;
+ }
+ :where(figure > *):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ :where(figcaption):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ color: var(--tw-prose-captions);
+ font-size: 0.875em;
+ line-height: 1.4285714;
+ margin-top: 0.8571429em;
+ }
+ --tw-prose-body: oklch(37.3% 0.034 259.733);
+ --tw-prose-headings: oklch(21% 0.034 264.665);
+ --tw-prose-lead: oklch(44.6% 0.03 256.802);
+ --tw-prose-links: oklch(21% 0.034 264.665);
+ --tw-prose-bold: oklch(21% 0.034 264.665);
+ --tw-prose-counters: oklch(55.1% 0.027 264.364);
+ --tw-prose-bullets: oklch(87.2% 0.01 258.338);
+ --tw-prose-hr: oklch(92.8% 0.006 264.531);
+ --tw-prose-quotes: oklch(21% 0.034 264.665);
+ --tw-prose-quote-borders: oklch(92.8% 0.006 264.531);
+ --tw-prose-captions: oklch(55.1% 0.027 264.364);
+ --tw-prose-kbd: oklch(21% 0.034 264.665);
+ --tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent);
+ --tw-prose-code: oklch(21% 0.034 264.665);
+ --tw-prose-pre-code: oklch(92.8% 0.006 264.531);
+ --tw-prose-pre-bg: oklch(27.8% 0.033 256.848);
+ --tw-prose-th-borders: oklch(87.2% 0.01 258.338);
+ --tw-prose-td-borders: oklch(92.8% 0.006 264.531);
+ --tw-prose-invert-body: oklch(87.2% 0.01 258.338);
+ --tw-prose-invert-headings: #fff;
+ --tw-prose-invert-lead: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-links: #fff;
+ --tw-prose-invert-bold: #fff;
+ --tw-prose-invert-counters: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802);
+ --tw-prose-invert-hr: oklch(37.3% 0.034 259.733);
+ --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542);
+ --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733);
+ --tw-prose-invert-captions: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-kbd: #fff;
+ --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
+ --tw-prose-invert-code: #fff;
+ --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338);
+ --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
+ --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802);
+ --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733);
+ font-size: 1rem;
+ line-height: 1.75;
+ :where(picture > img):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ :where(li):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ :where(ol > li):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+ }
+ :where(ul > li):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+ }
+ :where(.prose > ul > li p):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+ :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ }
+ :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+ }
+ :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ }
+ :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+ }
+ :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+ :where(dl):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ }
+ :where(dd):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ padding-inline-start: 1.625em;
+ }
+ :where(hr + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h2 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h3 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h4 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(thead th:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-start: 0;
+ }
+ :where(thead th:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-end: 0;
+ }
+ :where(tbody td, tfoot td):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-top: 0.5714286em;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+ }
+ :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-start: 0;
+ }
+ :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ padding-inline-end: 0;
+ }
+ :where(figure):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(.prose > :first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(.prose > :last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ margin-bottom: 0;
+ }
+ }
+ .mt-2 {
+ margin-top: calc(var(--spacing) * 2);
+ }
+ .mt-4 {
+ margin-top: calc(var(--spacing) * 4);
+ }
+ .mt-6 {
+ margin-top: calc(var(--spacing) * 6);
+ }
+ .mt-8 {
+ margin-top: calc(var(--spacing) * 8);
+ }
+ .mr-1 {
+ margin-right: var(--spacing);
+ }
+ .mb-4 {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
+ .status {
+ @layer daisyui.l1.l2.l3 {
+ display: inline-block;
+ aspect-ratio: 1 / 1;
+ width: calc(0.25rem * 2);
+ height: calc(0.25rem * 2);
+ border-radius: var(--radius-selector);
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 20%, transparent);
+ }
+ background-position: center;
+ background-repeat: no-repeat;
+ vertical-align: middle;
+ color: color-mix(in srgb, #000 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-black) 30%, transparent);
+ }
+ background-image: radial-gradient( circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * 0.5)), #0000 );
+ box-shadow: 0 2px 3px -1px currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000);
+ }
+ }
+ }
+ .badge {
+ @layer daisyui.l1.l2.l3 {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: calc(0.25rem * 2);
+ border-radius: var(--radius-selector);
+ vertical-align: middle;
+ color: var(--badge-fg);
+ border: var(--border) solid var(--badge-color, var(--color-base-200));
+ font-size: 0.875rem;
+ width: fit-content;
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ background-color: var(--badge-bg);
+ --badge-bg: var(--badge-color, var(--color-base-100));
+ --badge-fg: var(--color-base-content);
+ --size: calc(var(--size-selector, 0.25rem) * 6);
+ height: var(--size);
+ padding-inline: calc(var(--size) / 2 - var(--border));
+ }
+ }
+ .card-body {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ flex: auto;
+ flex-direction: column;
+ gap: calc(0.25rem * 2);
+ padding: var(--card-p, 1.5rem);
+ font-size: var(--card-fs, 0.875rem);
+ }
+ @layer daisyui.l1.l2.l3.l4 {
+ p {
+ flex-grow: 1;
+ }
+ }
+ }
+ .alert {
+ border-width: var(--border);
+ border-color: var(--alert-border-color, var(--color-base-200));
+ @layer daisyui.l1.l2.l3 {
+ border-style: solid;
+ --alert-border-color: var(--color-base-200);
+ display: grid;
+ align-items: center;
+ gap: calc(0.25rem * 4);
+ border-radius: var(--radius-box);
+ padding-inline: calc(0.25rem * 4);
+ padding-block: calc(0.25rem * 3);
+ color: var(--color-base-content);
+ background-color: var(--alert-color, var(--color-base-200));
+ justify-content: start;
+ justify-items: start;
+ grid-auto-flow: column;
+ grid-template-columns: auto;
+ text-align: start;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ background-size: auto, calc(var(--noise) * 33%);
+ background-image: none, var(--fx-noise);
+ box-shadow: 0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * 0.08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * 0.08));
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * 0.08)) inset, 0 1px color-mix( in oklab, color-mix(in oklab, #000 20%, var(--alert-color, var(--color-base-200))) calc(var(--depth) * 20%), #0000 ), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * 0.08));
+ }
+ &:has(:nth-child(2)) {
+ grid-template-columns: auto minmax(auto, 1fr);
+ }
+ }
+ }
+ .card-actions {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ gap: calc(0.25rem * 2);
+ }
+ }
+ .card-title {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ align-items: center;
+ gap: calc(0.25rem * 2);
+ font-size: var(--cardtitle-fs, 1.125rem);
+ font-weight: 600;
+ }
+ }
+ .prose {
+ :root & {
+ --tw-prose-body: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-body: color-mix(in oklab, var(--color-base-content) 80%, #0000);
+ }
+ --tw-prose-headings: var(--color-base-content);
+ --tw-prose-lead: var(--color-base-content);
+ --tw-prose-links: var(--color-base-content);
+ --tw-prose-bold: var(--color-base-content);
+ --tw-prose-counters: var(--color-base-content);
+ --tw-prose-bullets: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-bullets: color-mix(in oklab, var(--color-base-content) 50%, #0000);
+ }
+ --tw-prose-hr: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-hr: color-mix(in oklab, var(--color-base-content) 20%, #0000);
+ }
+ --tw-prose-quotes: var(--color-base-content);
+ --tw-prose-quote-borders: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-quote-borders: color-mix(in oklab, var(--color-base-content) 20%, #0000);
+ }
+ --tw-prose-captions: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-captions: color-mix(in oklab, var(--color-base-content) 50%, #0000);
+ }
+ --tw-prose-code: var(--color-base-content);
+ --tw-prose-pre-code: var(--color-neutral-content);
+ --tw-prose-pre-bg: var(--color-neutral);
+ --tw-prose-th-borders: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-th-borders: color-mix(in oklab, var(--color-base-content) 50%, #0000);
+ }
+ --tw-prose-td-borders: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-td-borders: color-mix(in oklab, var(--color-base-content) 20%, #0000);
+ }
+ --tw-prose-kbd: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --tw-prose-kbd: color-mix(in oklab, var(--color-base-content) 80%, #0000);
+ }
+ :where(code):not(pre > code) {
+ background-color: var(--color-base-200);
+ border-radius: var(--radius-selector);
+ border: var(--border) solid var(--color-base-300);
+ padding-inline: 0.5em;
+ padding-block: 0.2em;
+ font-weight: inherit;
+ &:before, &:after {
+ display: none;
+ }
+ }
+ }
+ }
+ .block {
+ display: block;
+ }
+ .flex {
+ display: flex;
+ }
+ .grid {
+ display: grid;
+ }
+ .hidden {
+ display: none;
+ }
+ .inline {
+ display: inline;
+ }
+ .inline-flex {
+ display: inline-flex;
+ }
+ .divider-vertical {
+ @layer daisyui.l1.l2 {
+ --divider-m: 1rem 0;
+ &.divider {
+ height: calc(0.25rem * 4);
+ width: auto;
+ flex-direction: row;
+ &:before {
+ height: calc(0.25rem * 0.5);
+ width: 100%;
+ }
+ &:after {
+ height: calc(0.25rem * 0.5);
+ width: 100%;
+ }
+ }
+ }
+ }
+ .btn-square {
+ @layer daisyui.l1.l2 {
+ padding-inline: 0;
+ width: var(--size);
+ height: var(--size);
+ }
+ }
+ .h-6 {
+ height: calc(var(--spacing) * 6);
+ }
+ .h-8 {
+ height: calc(var(--spacing) * 8);
+ }
+ .h-12 {
+ height: calc(var(--spacing) * 12);
+ }
+ .h-\[60vh\] {
+ height: 60vh;
+ }
+ .w-2\/3 {
+ width: calc(2 / 3 * 100%);
+ }
+ .w-8 {
+ width: calc(var(--spacing) * 8);
+ }
+ .w-12 {
+ width: calc(var(--spacing) * 12);
+ }
+ .w-24 {
+ width: calc(var(--spacing) * 24);
+ }
+ .w-36 {
+ width: calc(var(--spacing) * 36);
+ }
+ .w-full {
+ width: 100%;
+ }
+ .max-w-48 {
+ max-width: calc(var(--spacing) * 48);
+ }
+ .max-w-\[65ch\] {
+ max-width: 65ch;
+ }
+ .max-w-none {
+ max-width: none;
+ }
+ .flex-1 {
+ flex: 1;
+ }
+ .grow {
+ flex-grow: 1;
+ }
+ .link {
+ @layer daisyui.l1.l2.l3 {
+ cursor: pointer;
+ text-decoration-line: underline;
+ &:focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ &:focus-visible {
+ outline: 2px solid currentColor;
+ outline-offset: 2px;
+ }
+ }
+ }
+ .cursor-pointer {
+ cursor: pointer;
+ }
+ .grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ .flex-col {
+ flex-direction: column;
+ }
+ .flex-wrap {
+ flex-wrap: wrap;
+ }
+ .items-center {
+ align-items: center;
+ }
+ .items-end {
+ align-items: flex-end;
+ }
+ .items-start {
+ align-items: flex-start;
+ }
+ .justify-between {
+ justify-content: space-between;
+ }
+ .justify-center {
+ justify-content: center;
+ }
+ .gap-2 {
+ gap: calc(var(--spacing) * 2);
+ }
+ .gap-4 {
+ gap: calc(var(--spacing) * 4);
+ }
+ .space-y-4 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .space-y-8 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .justify-self-start\! {
+ justify-self: flex-start !important;
+ }
+ .truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .timeline-box {
+ @layer daisyui.l1.l2.l3 {
+ border: var(--border) solid;
+ border-radius: var(--radius-box);
+ border-color: var(--color-base-300);
+ background-color: var(--color-base-100);
+ padding-inline: calc(0.25rem * 4);
+ padding-block: calc(0.25rem * 2);
+ font-size: 0.75rem;
+ box-shadow: 0 1px 2px 0 oklch(0% 0 0/0.05);
+ }
+ }
+ .rounded-box {
+ border-radius: var(--radius-box);
+ }
+ .rounded-box {
+ border-radius: var(--radius-box);
+ }
+ .rounded-full {
+ border-radius: calc(infinity * 1px);
+ }
+ .rounded-lg {
+ border-radius: var(--radius-lg);
+ }
+ .border {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ }
+ .border-base-content\/30 {
+ border-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-base-content) 30%, transparent);
+ }
+ }
+ .bg-base-100 {
+ background-color: var(--color-base-100);
+ }
+ .bg-primary {
+ background-color: var(--color-primary);
+ }
+ .btn-outline {
+ @layer daisyui.l1.l2.l3 {
+ --btn-bg: #0000;
+ color: var(--btn-rest-fg, var(--btn-color, var(--color-base-content)));
+ --btn-border: var(--btn-color, var(--color-base-content));
+ --btn-border-style: solid;
+ background-image: none;
+ --btn-inset: 0 0 0 0 oklch(0% 0 0/0);
+ --btn-shadow: 0 0 0 0 oklch(0% 0 0/0);
+ }
+ }
+ .btn-ghost {
+ @layer daisyui.l1.l2.l3 {
+ --btn-bg: #0000;
+ color: var(--btn-rest-fg, var(--btn-color, var(--color-base-content, currentColor)));
+ --btn-border: #0000;
+ background-image: none;
+ --btn-inset: 0 0 0 0 oklch(0% 0 0/0);
+ --btn-shadow: 0 0 0 0 oklch(0% 0 0/0);
+ }
+ }
+ .p-1 {
+ padding: var(--spacing);
+ }
+ .p-2 {
+ padding: calc(var(--spacing) * 2);
+ }
+ .p-4 {
+ padding: calc(var(--spacing) * 4);
+ }
+ .px-0 {
+ padding-inline: 0;
+ }
+ .px-2 {
+ padding-inline: calc(var(--spacing) * 2);
+ }
+ .px-4 {
+ padding-inline: calc(var(--spacing) * 4);
+ }
+ .py-4 {
+ padding-block: calc(var(--spacing) * 4);
+ }
+ .py-12 {
+ padding-block: calc(var(--spacing) * 12);
+ }
+ .pt-8 {
+ padding-top: calc(var(--spacing) * 8);
+ }
+ .text-center {
+ text-align: center;
+ }
+ .text-2xl {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ .text-3xl {
+ font-size: var(--text-3xl);
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
+ }
+ .text-base {
+ font-size: var(--text-base);
+ line-height: var(--tw-leading, var(--text-base--line-height));
+ }
+ .text-lg {
+ font-size: var(--text-lg);
+ line-height: var(--tw-leading, var(--text-lg--line-height));
+ }
+ .text-sm {
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
+ .text-xl {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ }
+ .text-xs {
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ }
+ .font-medium {
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
+ .font-normal {
+ --tw-font-weight: var(--font-weight-normal);
+ font-weight: var(--font-weight-normal);
+ }
+ .font-semibold {
+ --tw-font-weight: var(--font-weight-semibold);
+ font-weight: var(--font-weight-semibold);
+ }
+ .text-base-content\/60 {
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ }
+ }
+ .text-primary-content {
+ color: var(--color-primary-content);
+ }
+ .italic {
+ font-style: italic;
+ }
+ .no-underline {
+ text-decoration-line: none;
+ }
+ .prose {
+ & :where(a.btn:not(.btn-link)):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
+ text-decoration-line: none;
+ }
+ }
+ .underline {
+ text-decoration-line: underline;
+ }
+ .opacity-0 {
+ opacity: 0%;
+ }
+ .shadow-lg {
+ --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .shadow-md {
+ --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .shadow-xl {
+ --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .prose-quoteless {
+ :where(blockquote p:first-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::before {
+ content: none;
+ }
+ :where(blockquote p:first-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::after {
+ content: none;
+ }
+ }
+ .btn-sm {
+ @layer daisyui.l1.l2 {
+ --fontsize: 0.75rem;
+ --btn-p: 0.75rem;
+ --size: calc(var(--size-field, 0.25rem) * 8);
+ }
+ }
+ .badge-primary {
+ @layer daisyui.l1.l2 {
+ --badge-color: var(--color-primary);
+ --badge-fg: var(--color-primary-content);
+ }
+ }
+ .select-none {
+ -webkit-user-select: none;
+ user-select: none;
+ }
+ .\[--timeline-col-start\:64px\] {
+ --timeline-col-start: 64px;
+ }
+ .group-hover\:text-primary-content {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ color: var(--color-primary-content);
+ }
+ }
+ }
+ .after\:absolute {
+ &::after {
+ content: var(--tw-content);
+ position: absolute;
+ }
+ }
+ .after\:inset-0 {
+ &::after {
+ content: var(--tw-content);
+ inset: 0;
+ }
+ }
+ .hover\:avatar-online {
+ &:hover {
+ @media (hover: hover) {
+ @layer daisyui.l1.l2 {
+ &:before {
+ content: "";
+ position: absolute;
+ z-index: 1;
+ display: block;
+ border-radius: calc(infinity * 1px);
+ background-color: var(--color-success);
+ outline: 2px solid var(--color-base-100);
+ width: 15%;
+ height: 15%;
+ top: 7%;
+ right: 7%;
+ }
+ }
+ }
+ }
+ }
+ .hover\:bg-base-content\/10 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ }
+ }
+ }
+ .hover\:bg-primary {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-primary);
+ }
+ }
+ }
+ .hover\:underline {
+ &:hover {
+ @media (hover: hover) {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ .hover\:badge-primary {
+ &:hover {
+ @media (hover: hover) {
+ @layer daisyui.l1.l2 {
+ --badge-color: var(--color-primary);
+ --badge-fg: var(--color-primary-content);
+ }
+ }
+ }
+ }
+ .sm\:flex {
+ @media (width >= 40rem) {
+ display: flex;
+ }
+ }
+ .sm\:hidden {
+ @media (width >= 40rem) {
+ display: none;
+ }
+ }
+ .sm\:items-center {
+ @media (width >= 40rem) {
+ align-items: center;
+ }
+ }
+ .sm\:gap-2 {
+ @media (width >= 40rem) {
+ gap: calc(var(--spacing) * 2);
+ }
+ }
+ .md\:divider-horizontal {
+ @media (width >= 48rem) {
+ @layer daisyui.l1.l2 {
+ --divider-m: 0 1rem;
+ &.divider {
+ height: auto;
+ width: calc(0.25rem * 4);
+ flex-direction: column;
+ &:before {
+ height: 100%;
+ width: calc(0.25rem * 0.5);
+ }
+ &:after {
+ height: 100%;
+ width: calc(0.25rem * 0.5);
+ }
+ }
+ }
+ }
+ }
+ .md\:w-1\/2 {
+ @media (width >= 48rem) {
+ width: calc(1 / 2 * 100%);
+ }
+ }
+ .md\:basis-\[200px\] {
+ @media (width >= 48rem) {
+ flex-basis: 200px;
+ }
+ }
+ .md\:flex-row {
+ @media (width >= 48rem) {
+ flex-direction: row;
+ }
+ }
+ .md\:gap-4 {
+ @media (width >= 48rem) {
+ gap: calc(var(--spacing) * 4);
+ }
+ }
+ .md\:px-0 {
+ @media (width >= 48rem) {
+ padding-inline: 0;
+ }
+ }
+ .lg\:col-span-2 {
+ @media (width >= 64rem) {
+ grid-column: span 2 / span 2;
+ }
+ }
+ .lg\:mt-8 {
+ @media (width >= 64rem) {
+ margin-top: calc(var(--spacing) * 8);
+ }
+ }
+ .lg\:mt-12 {
+ @media (width >= 64rem) {
+ margin-top: calc(var(--spacing) * 12);
+ }
+ }
+ .lg\:block {
+ @media (width >= 64rem) {
+ display: block;
+ }
+ }
+ .lg\:flex {
+ @media (width >= 64rem) {
+ display: flex;
+ }
+ }
+ .lg\:grid {
+ @media (width >= 64rem) {
+ display: grid;
+ }
+ }
+ .lg\:w-1\/3 {
+ @media (width >= 64rem) {
+ width: calc(1 / 3 * 100%);
+ }
+ }
+ .lg\:basis-\[300px\] {
+ @media (width >= 64rem) {
+ flex-basis: 300px;
+ }
+ }
+ .lg\:grid-cols-4 {
+ @media (width >= 64rem) {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ }
+ }
+ .lg\:flex-col {
+ @media (width >= 64rem) {
+ flex-direction: column;
+ }
+ }
+ .lg\:items-end {
+ @media (width >= 64rem) {
+ align-items: flex-end;
+ }
+ }
+ .xl\:w-1\/4 {
+ @media (width >= 80rem) {
+ width: calc(1 / 4 * 100%);
+ }
+ }
+ .dark\:border {
+ &:where(.dark, .dark *) {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ }
+ }
+ .dark\:border-b {
+ &:where(.dark, .dark *) {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ }
+ }
+ .dark\:border-base-content\/30 {
+ &:where(.dark, .dark *) {
+ border-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-base-content) 30%, transparent);
+ }
+ }
+ }
+ .dark\:border-base-content\/60 {
+ &:where(.dark, .dark *) {
+ border-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ }
+ }
+ }
+ .dark\:bg-base-content {
+ &:where(.dark, .dark *) {
+ background-color: var(--color-base-content);
+ }
+ }
+ .dark\:prose-invert {
+ &:where(.dark, .dark *) {
+ --tw-prose-body: var(--tw-prose-invert-body);
+ --tw-prose-headings: var(--tw-prose-invert-headings);
+ --tw-prose-lead: var(--tw-prose-invert-lead);
+ --tw-prose-links: var(--tw-prose-invert-links);
+ --tw-prose-bold: var(--tw-prose-invert-bold);
+ --tw-prose-counters: var(--tw-prose-invert-counters);
+ --tw-prose-bullets: var(--tw-prose-invert-bullets);
+ --tw-prose-hr: var(--tw-prose-invert-hr);
+ --tw-prose-quotes: var(--tw-prose-invert-quotes);
+ --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);
+ --tw-prose-captions: var(--tw-prose-invert-captions);
+ --tw-prose-kbd: var(--tw-prose-invert-kbd);
+ --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);
+ --tw-prose-code: var(--tw-prose-invert-code);
+ --tw-prose-pre-code: var(--tw-prose-invert-pre-code);
+ --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);
+ --tw-prose-th-borders: var(--tw-prose-invert-th-borders);
+ --tw-prose-td-borders: var(--tw-prose-invert-td-borders);
+ }
+ }
+ .\[\&_a\]\:font-medium {
+ & a {
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
+ }
+ .\[\&_a\]\:underline {
+ & a {
+ text-decoration-line: underline;
+ }
+ }
+ .\[\&_ion-icon\]\:text-lg {
+ & ion-icon {
+ font-size: var(--text-lg);
+ line-height: var(--tw-leading, var(--text-lg--line-height));
+ }
+ }
+}
+html {
+ scroll-behavior: smooth;
+}
+#disqus_thread iframe[src*='ads-iframe'] {
+ display: none;
+}
+#dream-global-bg {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background-position: center;
+ background-size: cover;
+ z-index: -1;
+}
+.flip-container {
+ width: 100vw;
+ height: calc(100vh - 80px - 2rem);
+ max-width: 100%;
+ perspective: 1000px;
+ &.flip-it {
+ .flipper {
+ transform: rotateY(180deg);
+ }
+ .front {
+ overflow: hidden;
+ }
+ .back {
+ transform: translateX(0) rotateY(180deg);
+ }
+ }
+ .flipper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ transform-style: preserve-3d;
+ transition: transform 0.75s;
+ }
+ .front, .back {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ backface-visibility: hidden;
+ transition: transform 0.75s;
+ }
+ .front {
+ transform: rotateY(0deg);
+ }
+ .back {
+ transform: translateX(-25%) rotateY(180deg);
+ }
+}
+#TableOfContents {
+ position: sticky;
+ top: calc(var(--spacing) * 24);
+ max-height: calc(100vh - 7rem);
+ overflow-y: auto;
+ max-width: 100%;
+}
+@supports (-moz-appearance: none) {
+ #TableOfContents {
+ position: initial;
+ }
+}
+#TableOfContents ul {
+ @layer daisyui.l1.l2.l3 {
+ display: flex;
+ width: fit-content;
+ flex-direction: column;
+ flex-wrap: wrap;
+ padding: calc(0.25rem * 2);
+ --menu-active-fg: var(--color-neutral-content);
+ --menu-active-bg: var(--color-neutral);
+ font-size: 0.875rem;
+ :where(li ul, li menu) {
+ position: relative;
+ margin-inline-start: calc(0.25rem * 4);
+ padding-inline-start: calc(0.25rem * 2);
+ white-space: nowrap;
+ &:before {
+ position: absolute;
+ inset-inline-start: calc(0.25rem * 0);
+ top: calc(0.25rem * 3);
+ bottom: calc(0.25rem * 3);
+ background-color: var(--color-base-content);
+ opacity: 10%;
+ width: var(--border);
+ content: "";
+ }
+ }
+ :where(li > .menu-dropdown:not(.menu-dropdown-show)) {
+ display: none;
+ }
+ :where(li:not(.menu-title) > *:not(ul, menu, details, .menu-title, .btn)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
+ display: grid;
+ grid-auto-flow: column;
+ align-content: flex-start;
+ align-items: center;
+ gap: calc(0.25rem * 2);
+ border-radius: var(--radius-field);
+ padding-inline: calc(0.25rem * 3);
+ padding-block: calc(0.25rem * 1.5);
+ text-align: start;
+ transition-property: color, background-color, box-shadow;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ grid-auto-columns: minmax(auto, max-content) auto max-content;
+ user-select: none;
+ }
+ :where(li > details > summary) {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
+ :where(li > details > summary), :where(li > .menu-dropdown-toggle) {
+ &:after {
+ justify-self: flex-end;
+ display: block;
+ height: 0.375rem;
+ width: 0.375rem;
+ rotate: -135deg;
+ translate: 0 -1px;
+ transition-property: rotate, translate;
+ transition-duration: 0.2s;
+ content: "";
+ transform-origin: 50% 50%;
+ box-shadow: 2px 2px inset;
+ pointer-events: none;
+ }
+ }
+ details {
+ overflow: hidden;
+ interpolate-size: allow-keywords;
+ }
+ details::details-content {
+ block-size: 0;
+ @media (prefers-reduced-motion: no-preference) {
+ transition-behavior: allow-discrete;
+ transition-property: block-size, content-visibility;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ }
+ }
+ details[open]::details-content {
+ block-size: auto;
+ }
+ :where(li > details[open] > summary):after, :where(li > .menu-dropdown-toggle.menu-dropdown-show):after {
+ rotate: 45deg;
+ translate: 0 1px;
+ }
+ :where(li:not(.menu-title, .disabled) > *:not(ul, menu, details, .menu-title), li:not(.menu-title, .disabled) > details > summary:not(.menu-title) ):not(.menu-active, :active, .btn) {
+ &.menu-focus, &:focus-visible {
+ cursor: pointer;
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ color: var(--color-base-content);
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ }
+ :where(li:not(.menu-title, .disabled) > *:not(ul, menu, details, .menu-title):not(.menu-active, :active, .btn):hover, li:not(.menu-title, .disabled) > details > summary:not(.menu-title):not(.menu-active, :active, .btn):hover ) {
+ cursor: pointer;
+ background-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);
+ }
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ box-shadow: 0 1px oklch(0% 0 0 / 0.01) inset, 0 -1px oklch(100% 0 0 / 0.01) inset;
+ }
+ :where(li:empty) {
+ background-color: var(--color-base-content);
+ opacity: 10%;
+ margin: 0.5rem 1rem;
+ height: 1px;
+ }
+ :where(li) {
+ position: relative;
+ display: flex;
+ flex-shrink: 0;
+ flex-direction: column;
+ flex-wrap: wrap;
+ align-items: stretch;
+ .badge {
+ justify-self: flex-end;
+ }
+ & > *:not(ul, menu, .menu-title, details, .btn):active, & > *:not(ul, menu, .menu-title, details, .btn).menu-active, & > details > summary:active {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ color: var(--menu-active-fg);
+ background-color: var(--menu-active-bg);
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ &:not(&:active) {
+ box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg);
+ }
+ }
+ &.menu-disabled, [disabled] {
+ pointer-events: none;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 20%, transparent);
+ }
+ }
+ }
+ .dropdown:focus-within {
+ .menu-dropdown-toggle:after {
+ rotate: 45deg;
+ translate: 0 1px;
+ }
+ }
+ .dropdown-content {
+ margin-top: calc(0.25rem * 2);
+ padding: calc(0.25rem * 2);
+ &:before {
+ display: none;
+ }
+ }
+ }
+ @layer daisyui.l1.l2 {
+ :where(li:not(.menu-title) > *:not(ul, menu, details, .menu-title)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
+ border-radius: var(--radius-field);
+ padding-inline: calc(0.25rem * 2.5);
+ padding-block: 0.25rem;
+ font-size: 0.75rem;
+ }
+ .menu-title {
+ padding-inline: calc(0.25rem * 3);
+ padding-block: calc(0.25rem * 2);
+ }
+ }
+}
+.mermaid-panzoom {
+ position: relative;
+ border-radius: var(--radius-box);
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ border-color: transparent;
+}
+.mermaid-panzoom:hover, .mermaid-panzoom:focus-within {
+ border-color: var(--color-base-300);
+}
+.mermaid-panzoom > .mermaid {
+ overflow: hidden;
+}
+.mermaid-panzoom-reset {
+ pointer-events: none;
+ position: absolute;
+ right: calc(var(--spacing) * 2);
+ bottom: calc(var(--spacing) * 2);
+ z-index: 1;
+ opacity: 0%;
+ transition-property: opacity;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ --tw-ease: var(--ease-in-out);
+ transition-timing-function: var(--ease-in-out);
+}
+.mermaid-panzoom:hover .mermaid-panzoom-reset, .mermaid-panzoom:focus-within .mermaid-panzoom-reset {
+ pointer-events: auto;
+ opacity: 100%;
+}
+.dream-alert {
+ > .heading {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing);
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
+ &.note {
+ border-inline-start-color: var(--color-blue-600);
+ &:where(.dark, .dark *) {
+ border-inline-start-color: var(--color-blue-500);
+ }
+ .heading {
+ color: var(--color-blue-600);
+ &:where(.dark, .dark *) {
+ color: var(--color-blue-500);
+ }
+ }
+ }
+ &.tip {
+ border-inline-start-color: var(--color-green-600);
+ &:where(.dark, .dark *) {
+ border-inline-start-color: var(--color-green-500);
+ }
+ .heading {
+ color: var(--color-green-600);
+ &:where(.dark, .dark *) {
+ color: var(--color-green-500);
+ }
+ }
+ }
+ &.important {
+ border-inline-start-color: var(--color-purple-600);
+ &:where(.dark, .dark *) {
+ border-inline-start-color: var(--color-purple-500);
+ }
+ .heading {
+ color: var(--color-purple-600);
+ &:where(.dark, .dark *) {
+ color: var(--color-purple-500);
+ }
+ }
+ }
+ &.warning {
+ border-inline-start-color: var(--color-yellow-600);
+ &:where(.dark, .dark *) {
+ border-inline-start-color: var(--color-yellow-500);
+ }
+ .heading {
+ color: var(--color-yellow-600);
+ &:where(.dark, .dark *) {
+ color: var(--color-yellow-500);
+ }
+ }
+ }
+ &.caution {
+ border-inline-start-color: var(--color-red-600);
+ &:where(.dark, .dark *) {
+ border-inline-start-color: var(--color-red-500);
+ }
+ .heading {
+ color: var(--color-red-600);
+ &:where(.dark, .dark *) {
+ color: var(--color-red-500);
+ }
+ }
+ }
+}
+@layer base {
+ :where(:root),:root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald] {
+ color-scheme: light;
+ --color-base-100: oklch(100% 0 0);
+ --color-base-200: oklch(93% 0 0);
+ --color-base-300: oklch(86% 0 0);
+ --color-base-content: oklch(35.519% 0.032 262.988);
+ --color-primary: oklch(76.662% 0.135 153.45);
+ --color-primary-content: oklch(33.387% 0.04 162.24);
+ --color-secondary: oklch(61.302% 0.202 261.294);
+ --color-secondary-content: oklch(100% 0 0);
+ --color-accent: oklch(72.772% 0.149 33.2);
+ --color-accent-content: oklch(0% 0 0);
+ --color-neutral: oklch(35.519% 0.032 262.988);
+ --color-neutral-content: oklch(98.462% 0.001 247.838);
+ --color-info: oklch(72.06% 0.191 231.6);
+ --color-info-content: oklch(0% 0 0);
+ --color-success: oklch(64.8% 0.15 160);
+ --color-success-content: oklch(0% 0 0);
+ --color-warning: oklch(84.71% 0.199 83.87);
+ --color-warning-content: oklch(0% 0 0);
+ --color-error: oklch(71.76% 0.221 22.18);
+ --color-error-content: oklch(0% 0 0);
+ --radius-selector: 1rem;
+ --radius-field: 0.5rem;
+ --radius-box: 1rem;
+ --size-selector: 0.25rem;
+ --size-field: 0.25rem;
+ --border: 1px;
+ --depth: 0;
+ --noise: 0;
+ }
+}
+@layer base {
+ @media (prefers-color-scheme: dark) {
+ :root:not([data-theme]) {
+ color-scheme: dark;
+ --color-base-100: oklch(20.84% 0.008 17.911);
+ --color-base-200: oklch(18.522% 0.007 17.911);
+ --color-base-300: oklch(16.203% 0.007 17.911);
+ --color-base-content: oklch(83.768% 0.001 17.911);
+ --color-primary: oklch(68.628% 0.185 148.958);
+ --color-primary-content: oklch(0% 0 0);
+ --color-secondary: oklch(69.776% 0.135 168.327);
+ --color-secondary-content: oklch(13.955% 0.027 168.327);
+ --color-accent: oklch(70.628% 0.119 185.713);
+ --color-accent-content: oklch(14.125% 0.023 185.713);
+ --color-neutral: oklch(30.698% 0.039 171.364);
+ --color-neutral-content: oklch(86.139% 0.007 171.364);
+ --color-info: oklch(72.06% 0.191 231.6);
+ --color-info-content: oklch(0% 0 0);
+ --color-success: oklch(64.8% 0.15 160);
+ --color-success-content: oklch(0% 0 0);
+ --color-warning: oklch(84.71% 0.199 83.87);
+ --color-warning-content: oklch(0% 0 0);
+ --color-error: oklch(71.76% 0.221 22.18);
+ --color-error-content: oklch(0% 0 0);
+ --radius-selector: 1rem;
+ --radius-field: 2rem;
+ --radius-box: 1rem;
+ --size-selector: 0.25rem;
+ --size-field: 0.25rem;
+ --border: 1px;
+ --depth: 0;
+ --noise: 0;
+ }
+ }
+}
+@layer base {
+ :root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald] {
+ color-scheme: light;
+ --color-base-100: oklch(100% 0 0);
+ --color-base-200: oklch(93% 0 0);
+ --color-base-300: oklch(86% 0 0);
+ --color-base-content: oklch(35.519% 0.032 262.988);
+ --color-primary: oklch(76.662% 0.135 153.45);
+ --color-primary-content: oklch(33.387% 0.04 162.24);
+ --color-secondary: oklch(61.302% 0.202 261.294);
+ --color-secondary-content: oklch(100% 0 0);
+ --color-accent: oklch(72.772% 0.149 33.2);
+ --color-accent-content: oklch(0% 0 0);
+ --color-neutral: oklch(35.519% 0.032 262.988);
+ --color-neutral-content: oklch(98.462% 0.001 247.838);
+ --color-info: oklch(72.06% 0.191 231.6);
+ --color-info-content: oklch(0% 0 0);
+ --color-success: oklch(64.8% 0.15 160);
+ --color-success-content: oklch(0% 0 0);
+ --color-warning: oklch(84.71% 0.199 83.87);
+ --color-warning-content: oklch(0% 0 0);
+ --color-error: oklch(71.76% 0.221 22.18);
+ --color-error-content: oklch(0% 0 0);
+ --radius-selector: 1rem;
+ --radius-field: 0.5rem;
+ --radius-box: 1rem;
+ --size-selector: 0.25rem;
+ --size-field: 0.25rem;
+ --border: 1px;
+ --depth: 0;
+ --noise: 0;
+ }
+}
+@layer base {
+ :root:has(input.theme-controller[value=forest]:checked),[data-theme=forest] {
+ color-scheme: dark;
+ --color-base-100: oklch(20.84% 0.008 17.911);
+ --color-base-200: oklch(18.522% 0.007 17.911);
+ --color-base-300: oklch(16.203% 0.007 17.911);
+ --color-base-content: oklch(83.768% 0.001 17.911);
+ --color-primary: oklch(68.628% 0.185 148.958);
+ --color-primary-content: oklch(0% 0 0);
+ --color-secondary: oklch(69.776% 0.135 168.327);
+ --color-secondary-content: oklch(13.955% 0.027 168.327);
+ --color-accent: oklch(70.628% 0.119 185.713);
+ --color-accent-content: oklch(14.125% 0.023 185.713);
+ --color-neutral: oklch(30.698% 0.039 171.364);
+ --color-neutral-content: oklch(86.139% 0.007 171.364);
+ --color-info: oklch(72.06% 0.191 231.6);
+ --color-info-content: oklch(0% 0 0);
+ --color-success: oklch(64.8% 0.15 160);
+ --color-success-content: oklch(0% 0 0);
+ --color-warning: oklch(84.71% 0.199 83.87);
+ --color-warning-content: oklch(0% 0 0);
+ --color-error: oklch(71.76% 0.221 22.18);
+ --color-error-content: oklch(0% 0 0);
+ --radius-selector: 1rem;
+ --radius-field: 2rem;
+ --radius-box: 1rem;
+ --size-selector: 0.25rem;
+ --size-field: 0.25rem;
+ --border: 1px;
+ --depth: 0;
+ --noise: 0;
+ }
+}
+@layer base {
+ @property --radialprogress {
+ syntax: "";
+ inherits: true;
+ initial-value: 0%;
+ }
+ @property --aura-angle {
+ syntax: "";
+ inherits: false;
+ initial-value: 0deg;
+ }
+}
+@layer base {
+ :root {
+ scrollbar-color: currentColor #0000;
+ @supports (color: color-mix(in lab, red, red)) {
+ scrollbar-color: color-mix(in oklch, currentColor 35%, #0000) #0000;
+ }
+ }
+}
+@layer base {
+ :root {
+ --fx-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");
+ }
+}
+@layer base {
+ :root {
+ --page-scroll-lock: initial;
+ --page-overflow: var(--page-scroll-lock) hidden;
+ }
+ :root:not(span) {
+ overflow: var(--page-overflow);
+ }
+}
+@layer base {
+ :root {
+ --page-has-backdrop: var(--page-scroll-lock) 1;
+ --page-scroll-bg: var(--page-scroll-lock)
+ var(--root-bg, #0000);
+ @supports (color: color-mix(in lab, red, red)) {
+ --page-scroll-bg: var(--page-scroll-lock)
+ color-mix(in srgb, var(--root-bg, #0000), oklch(0% 0 0) calc(var(--page-has-backdrop, 0) * 40%));
+ }
+ background-image: var(--page-scroll-lock) linear-gradient(var(--root-bg, #0000), var(--root-bg, #0000));
+ transition: var(--page-scroll-lock) background-color 0.3s ease-out;
+ animation: var(--page-scroll-lock) set-page-has-scroll forwards;
+ animation-timeline: var(--page-scroll-lock) scroll();
+ --page-has-scroll: initial;
+ scrollbar-gutter: var(--page-has-scroll) var(--page-scroll-lock) stable;
+ }
+ @keyframes set-page-has-scroll {
+ 0%, to {
+ --page-has-scroll: ;
+ }
+ }
+}
+@layer base {
+ :root, [data-theme] {
+ background-color: var(--root-bg);
+ color: var(--color-base-content);
+ }
+ :root {
+ background-color: var(--page-scroll-bg, var(--root-bg));
+ }
+ :where(:root, [data-theme]) {
+ --root-bg: var(--color-base-100);
+ }
+}
+@keyframes dropdown {
+ 0% {
+ opacity: 0;
+ }
+}
+@keyframes rotator {
+ 89.9999%, 100% {
+ --first-item-position: 0 0%;
+ }
+ 90%, 99.9999% {
+ --first-item-position: 0 calc(var(--items) * 100%);
+ }
+ 100% {
+ translate: 0 -100%;
+ }
+}
+@keyframes radio {
+ 0% {
+ padding: 5px;
+ }
+ 50% {
+ padding: 3px;
+ }
+}
+@keyframes toast {
+ 0% {
+ scale: 0.9;
+ opacity: 0;
+ }
+ 100% {
+ scale: 1;
+ opacity: 1;
+ }
+}
+@keyframes skeleton {
+ 0% {
+ background-position: 150%;
+ }
+ 100% {
+ background-position: -50%;
+ }
+}
+@keyframes progress {
+ 50% {
+ background-position-x: -115%;
+ }
+}
+@keyframes rating {
+ 0%, 40% {
+ scale: 1.1;
+ filter: brightness(1.05) contrast(1.05);
+ }
+}
+@keyframes aura {
+ to {
+ --aura-angle: 360deg;
+ transform: translateZ(1px);
+ }
+}
+@keyframes aura-glow {
+ 20%, 80% {
+ opacity: 0.7;
+ filter: blur(0.25rem);
+ }
+ 50% {
+ opacity: 1;
+ filter: blur(0.75rem);
+ }
+}
+@keyframes aura-glow-after {
+ 20%, 80% {
+ opacity: 0.3;
+ filter: blur(1rem);
+ }
+ 50% {
+ opacity: 0.6;
+ filter: blur(1.5rem);
+ }
+}
+@keyframes menu {
+ 0% {
+ opacity: 0;
+ }
+}
+@property --tw-space-y-reverse {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0;
+}
+@property --tw-border-style {
+ syntax: "*";
+ inherits: false;
+ initial-value: solid;
+}
+@property --tw-font-weight {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-shadow-alpha {
+ syntax: "";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-inset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-shadow-alpha {
+ syntax: "";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-ring-inset {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-offset-width {
+ syntax: "";
+ inherits: false;
+ initial-value: 0px;
+}
+@property --tw-ring-offset-color {
+ syntax: "*";
+ inherits: false;
+ initial-value: #fff;
+}
+@property --tw-ring-offset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-content {
+ syntax: "*";
+ initial-value: "";
+ inherits: false;
+}
+@property --tw-duration {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ease {
+ syntax: "*";
+ inherits: false;
+}
+@layer properties {
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
+ *, ::before, ::after, ::backdrop {
+ --tw-space-y-reverse: 0;
+ --tw-border-style: solid;
+ --tw-font-weight: initial;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-color: initial;
+ --tw-shadow-alpha: 100%;
+ --tw-inset-shadow: 0 0 #0000;
+ --tw-inset-shadow-color: initial;
+ --tw-inset-shadow-alpha: 100%;
+ --tw-ring-color: initial;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-inset-ring-color: initial;
+ --tw-inset-ring-shadow: 0 0 #0000;
+ --tw-ring-inset: initial;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-content: "";
+ --tw-duration: initial;
+ --tw-ease: initial;
+ }
+ }
+}
diff --git a/packages/hugo-theme-dream/res/js/init.js b/packages/hugo-theme-dream/res/js/init.js
new file mode 100644
index 00000000..99a0a07a
--- /dev/null
+++ b/packages/hugo-theme-dream/res/js/init.js
@@ -0,0 +1 @@
+(()=>{try{const saved=localStorage.getItem('dream-native-theme');const dark=saved?saved==='forest':matchMedia('(prefers-color-scheme:dark)').matches;document.documentElement.dataset.theme=dark?'forest':'emerald';document.documentElement.classList.toggle('dark',dark)}catch(e){}})();
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/res/js/theme.js b/packages/hugo-theme-dream/res/js/theme.js
new file mode 100644
index 00000000..0feddcb0
--- /dev/null
+++ b/packages/hugo-theme-dream/res/js/theme.js
@@ -0,0 +1 @@
+(()=>{const palette=document.querySelector('#dark-mode-toggle');if(palette){palette.hidden=false;palette.onclick=()=>{const dark=document.documentElement.dataset.theme!=='forest';document.documentElement.dataset.theme=dark?'forest':'emerald';document.documentElement.classList.toggle('dark',dark);try{localStorage.setItem('dream-native-theme',dark?'forest':'emerald')}catch(e){}}}const flip=document.querySelector('#dream-flip'),front=document.querySelector('#dream-front'),back=document.querySelector('#dream-about');if(flip&&front&&back){flip.hidden=false;flip.onclick=()=>{const show=back.hidden;front.hidden=show;front.inert=show;back.hidden=!show;back.inert=!show;flip.setAttribute('aria-expanded',String(show));flip.textContent=show?'返回文章':'关于 / 翻面';const face=show?back:front;face.classList.add('flip-enter');face.addEventListener('animationend',()=>face.classList.remove('flip-enter'),{once:true});face.focus({preventScroll:true})}}const content=document.querySelector('.prose'),toc=document.querySelector('#TableOfContents');if(!content||!toc)return;const hs=[...content.querySelectorAll('h2,h3')];if(!hs.length)return;const used=new Set([...document.querySelectorAll('[id]')].map(e=>e.id)),list=document.createElement('ul');list.className='toc-list';hs.forEach((h,i)=>{if(!h.id){let id='dream-heading-'+i;while(used.has(id))id+='-';h.id=id;used.add(id)}const li=document.createElement('li'),a=document.createElement('a');if(h.tagName==='H3')li.className='nested';a.href='#'+encodeURIComponent(h.id);a.textContent=h.textContent;li.append(a);list.append(li)});toc.append(list);toc.hidden=false})();
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/res/licenses/DaisyUI5.6.17-MIT.txt b/packages/hugo-theme-dream/res/licenses/DaisyUI5.6.17-MIT.txt
new file mode 100644
index 00000000..232b9a3f
--- /dev/null
+++ b/packages/hugo-theme-dream/res/licenses/DaisyUI5.6.17-MIT.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Pouya Saadeghi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/hugo-theme-dream/res/licenses/Tailwind4.3.2-MIT.txt b/packages/hugo-theme-dream/res/licenses/Tailwind4.3.2-MIT.txt
new file mode 100644
index 00000000..d6a82290
--- /dev/null
+++ b/packages/hugo-theme-dream/res/licenses/Tailwind4.3.2-MIT.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Tailwind Labs, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/hugo-theme-dream/res/licenses/TailwindTypography0.5.20-MIT.txt b/packages/hugo-theme-dream/res/licenses/TailwindTypography0.5.20-MIT.txt
new file mode 100644
index 00000000..d6a82290
--- /dev/null
+++ b/packages/hugo-theme-dream/res/licenses/TailwindTypography0.5.20-MIT.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Tailwind Labs, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/hugo-theme-dream/screenshot.png b/packages/hugo-theme-dream/screenshot.png
new file mode 100644
index 00000000..c884c6db
Binary files /dev/null and b/packages/hugo-theme-dream/screenshot.png differ
diff --git a/packages/hugo-theme-dream/search.eta b/packages/hugo-theme-dream/search.eta
new file mode 100644
index 00000000..4e0213d2
--- /dev/null
+++ b/packages/hugo-theme-dream/search.eta
@@ -0,0 +1 @@
+<% layout('./layout');const site=await firekylin.widget('Widget_Options');const archive=await firekylin.widget('Widget_Archive',{type:'search'}); %><% block('title',()=>{ %>搜索 - <%= site.title() %><% }) %><% block('content',()=>{ %>
搜索 <%~ include('./inc/list',{archive}) %><%~ include('./inc/pagination',{archive}) %><% }) %>
\ No newline at end of file
diff --git a/packages/hugo-theme-dream/tag.eta b/packages/hugo-theme-dream/tag.eta
new file mode 100644
index 00000000..be89f1cc
--- /dev/null
+++ b/packages/hugo-theme-dream/tag.eta
@@ -0,0 +1,6 @@
+<% layout('./layout'); const site = await firekylin.widget('Widget_Options'); const metas = await firekylin.widget('Widget_Metas_Tag_Cloud'); %>
+<% block('title', () => { %>标签 - <%= site.title() %><% }) %>
+<% block('content', () => { %>
+<% while (metas.next()) { %><%= metas.row.name %> (<%= metas.row.count %>)
+<% if (metas.row.children && metas.row.children.length) { %><% for (const child of metas.row.children) { %><%= child.name %> (<%= child.count %>) <% } %> <% } %>
+ <% } %> <% if (!metas.have()) { %>暂无标签。
<% } %> <% }) %>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f7a6e492..3d5ddabf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -139,6 +139,7 @@ importers:
packages/hugo-theme-hulga: {}
+ packages/hugo-theme-dream: {}
packages/academic-cv: {}
diff --git a/test/hugo-theme-dream.test.js b/test/hugo-theme-dream.test.js
new file mode 100644
index 00000000..ecb3d39d
--- /dev/null
+++ b/test/hugo-theme-dream.test.js
@@ -0,0 +1,12 @@
+'use strict';
+const test=require('node:test'),assert=require('node:assert/strict');
+const {render,pages}=require('./port-fixture');
+for(const page of pages)test('Dream '+page+' renders populated and empty Widgets',async()=>{for(const empty of [false,true]){const html=await render('hugo-theme-dream',page,{empty});assert.match(html,/Dream/);assert(!html.includes('undefined'));}});
+test('Dream escapes titles, rejects active cover URLs, preserves protected body',async()=>{const html=await render('hugo-theme-dream','index',{hostile:true,config:{profileName:'',backgroundImage:'javascript:alert(1)'}});assert(!html.includes(' {assert(!(await render('hugo-theme-dream','post',{comments:false})).includes('id="comments"'));const html=await render('hugo-theme-dream','search',{request:'/search.html?keyword=a%26b'});assert.match(html,/keyword=a%26b&page=2/);});
+
+test('hugo-theme-dream renders attachment media and rejects active file URLs',async()=>{const {context}=require('./port-fixture');const {Eta}=require('eta');const path=require('node:path');for(const [mime,element] of [['image/png','img'],['audio/mpeg','audio'],['video/mp4','video'],['application/pdf',null]]){const ctx=context('hugo-theme-dream','attachment');const archive=await ctx.widget('Widget_Archive');archive.stack[0].options={attachment:{mime,url:'/uploads/file',name:'Download file'}};const html=await new Eta({views:path.join(__dirname,'../packages/hugo-theme-dream'),varName:'firekylin'}).renderAsync('attachment',ctx);assert.match(html,/href="\/uploads\/file" download/);if(element)assert(html.includes('<'+element+' '));}const ctx=context('hugo-theme-dream','attachment');(await ctx.widget('Widget_Archive')).stack[0].options={attachment:{mime:'image/png',url:'javascript:alert(1)'}};const html=await new Eta({views:path.join(__dirname,'../packages/hugo-theme-dream'),varName:'firekylin'}).renderAsync('attachment',ctx);assert(!html.includes('javascript:'));});
+
+test('Dream identifies taxonomy',async()=>{for(const [kind,label] of [['cate','随笔'],['tag','生活']]){assert.match(await render('hugo-theme-dream','index',{kind}),new RegExp(']*>'+label+' ')); }});
+
+test('Dream escapes About text and rejects active avatars',async()=>{const html=await render('hugo-theme-dream','index',{config:{aboutText:'',avatarURL:'javascript:alert(1)'}});assert(!html.includes('