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){ %>
<% if(mime.startsWith('image/')){ %><%= archive.title() %><% }else if(mime.startsWith('audio/')){ %><% }else if(mime.startsWith('video/')){ %><% } %>

<%= media.name||archive.title() %>

<% } %><%~ 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', () => { %>

分类

<% 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.title() %>

<%= 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') %>
<% const avatar=String(cfg.avatarURL||'');if(/^(https?:\/\/|\/(?!\/))/i.test(avatar)){ %><% } %>
<%= site.title() %>

<%= site.description() %>

<%~ block('content') %>
\ 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('{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('